Dashboard Header Kebab Menu#
Overview#
The dashboard header kebab (⋮) menu is built by the useHeaderActionsMenu hook in useHeaderActionsDropdownMenu.tsx. It returns a <Menu> element, a dropdown-visibility boolean, and its setter . The menu is data-test-labeled header-actions-menu and is not selectable .
Menu item identifiers are centralized in the MenuKeys enum in dashboard/types.ts. A shared handleMenuClick dispatcher handles the non-modal items; modal-based items embed their trigger nodes directly as children .
Menu Items and Conditions#
Items appear based on editMode, user permissions, and dashboard state. The menu renders top-to-bottom in this order :
| Item | MenuKeys value | Condition |
|---|---|---|
| Refresh dashboard | refresh_dashboard | !editMode; disabled while isLoading |
| Enter / Exit fullscreen | toggle_fullscreen | !editMode && !isEmbedded |
| Edit properties | edit_properties | editMode only |
| Edit CSS | edit_css | editMode only |
| Save as | save_modal | userCanSave |
| Download (submenu) | download | Always shown; disabled while isLoading |
| Share (submenu) | share | userCanShare |
| Embed dashboard | manage_embedded | !editMode && userCanCurate |
| Manage email report | manage_email_reports | !editMode; shown/hidden via HeaderReportDropdown |
| Set filter mapping | set_filter_mapping | editMode && !isEmpty(metadata.filter_scopes) |
| Set auto-refresh interval | autorefresh_modal | Always shown |
Embedded detection: isEmbedded is true when dashboardInfo.userId is absent .
Permission flags are derived in Header/index.jsx :
userCanEdit—dash_edit_perm && !is_managed_externallyuserCanShare—dash_share_permuserCanSave—dash_save_permuserCanCurate—EmbeddedSupersetfeature flag +can_set_embeddedpermission
Download Submenu#
Rendered by DownloadMenuItems. The submenu branches on two feature flags evaluated together :
EnableDashboardScreenshotEndpointsEnableDashboardDownloadWebDriverScreenshot
When both flags are enabled (webdriver path): The submenu shows "Export to PDF" and "Download as Image" items that trigger the async screenshot pipeline via useDownloadScreenshot . This pipeline POSTs to /api/v1/dashboard/{id}/cache_dashboard_screenshot/, then polls GET /api/v1/dashboard/{id}/screenshot/{cache_key}/ every 3 seconds for up to ~90 seconds .
When either flag is disabled (browser path): Falls back to DownloadAsPdf and DownloadAsImage components, which use the browser's built-in print/screenshot capability .
The hook passes dashboardId, dashboardTitle, and logEvent to DownloadMenuItems .
Export YAML / Export as Example (post-6.1.0)#
PR #36538 (merged January 2026) added two export items to the Download submenu:
- Export YAML — triggers the standard
handleResourceExport→GET /api/v1/dashboard/export/?q=[id]flow, producing a ZIP of YAML files (dashboards, charts, datasets, metadata). See Dashboard Export for the ZIP structure. - Export as Example — calls
GET /api/v1/dashboard/{id}/export_as_example/, which produces a ZIP with Parquet data files alongside YAML configs, suitable for Superset's example-loading system. Both items are gated by theuserCanExportprop (derived fromdashboardInfo.dash_export_perm). "Export as Example" is conditionally rendered only whenuserCanExportistrue.
Note: As of the pinned commit (
829e4d92), these items are not yet present in the source snapshot; they are tracked inmastervia PR #36538.
Share Submenu#
Rendered by ShareMenuItems. It reads dataMask and activeTabs from Redux to generate a stateful permalink via getDashboardPermalink :
| Item | MenuKeys value | Behavior |
|---|---|---|
| Copy permalink to clipboard | copy_link | Calls copyTextToClipboard(generateUrl) |
| Share permalink by email | share_by_email | Opens mailto: with the permalink URL |
The permalink encodes the current filter state, active tabs, and the deepest focused component (dashboardComponentId) as the anchor .
Key Source Files#
| File | Role |
|---|---|
Header/useHeaderActionsDropdownMenu.tsx | Top-level menu assembly; conditional item rendering |
Header/index.jsx | Derives permission flags; renders the <Dropdown> |
Header/types.ts | HeaderDropdownProps interface |
dashboard/types.ts | MenuKeys enum; DashboardInfo and DashboardState types |
menu/DownloadMenuItems/index.tsx | Download submenu; feature-flag branching |
menu/ShareMenuItems/index.tsx | Share submenu; permalink generation |