{"version":3,"file":"FlameGraphContextMenu.cjs","sources":["../../../src/FlameGraph/FlameGraphContextMenu.tsx"],"sourcesContent":["import { type DataFrame } from '@grafana/data';\nimport { MenuItem, MenuGroup, ContextMenu, type IconName } from '@grafana/ui';\n\nimport { type ClickedItemData, type PaneView, type SelectedView, type ViewMode } from '../types';\n\nimport { type CollapseConfig, type FlameGraphDataContainer } from './dataTransform';\n\nexport type GetExtraContextMenuButtonsFunction = (\n  clickedItemData: ClickedItemData,\n  data: DataFrame,\n  state: {\n    selectedView?: SelectedView;\n    viewMode?: ViewMode;\n    paneView?: PaneView;\n    isDiff: boolean;\n    search: string;\n    collapseConfig?: CollapseConfig;\n  }\n) => ExtraContextMenuButton[];\n\nexport type ExtraContextMenuButton = {\n  label: string;\n  icon: IconName;\n  onClick: () => void;\n};\n\ntype Props = {\n  data: FlameGraphDataContainer;\n  itemData: ClickedItemData;\n  onMenuItemClick: () => void;\n  onItemFocus: () => void;\n  onSandwich: () => void;\n  onExpandGroup: () => void;\n  onCollapseGroup: () => void;\n  onExpandAllGroups: () => void;\n  onCollapseAllGroups: () => void;\n  getExtraContextMenuButtons?: GetExtraContextMenuButtonsFunction;\n  collapseConfig?: CollapseConfig;\n  collapsing?: boolean;\n  allGroupsCollapsed?: boolean;\n  allGroupsExpanded?: boolean;\n  selectedView?: SelectedView;\n  viewMode?: ViewMode;\n  paneView?: PaneView;\n  search: string;\n};\n\nconst FlameGraphContextMenu = ({\n  data,\n  itemData,\n  onMenuItemClick,\n  onItemFocus,\n  onSandwich,\n  collapseConfig,\n  onExpandGroup,\n  onCollapseGroup,\n  onExpandAllGroups,\n  onCollapseAllGroups,\n  getExtraContextMenuButtons,\n  collapsing,\n  allGroupsExpanded,\n  allGroupsCollapsed,\n  selectedView,\n  viewMode,\n  paneView,\n  search,\n}: Props) => {\n  function renderItems() {\n    const extraButtons =\n      getExtraContextMenuButtons?.(itemData, data.data, {\n        selectedView,\n        viewMode,\n        paneView,\n        isDiff: data.isDiffFlamegraph(),\n        search,\n        collapseConfig,\n      }) || [];\n    return (\n      <>\n        <MenuItem\n          label=\"Focus block\"\n          icon={'eye'}\n          onClick={() => {\n            onItemFocus();\n            onMenuItemClick();\n          }}\n        />\n        <MenuItem\n          label=\"Copy function name\"\n          icon={'copy'}\n          onClick={() => {\n            navigator.clipboard.writeText(itemData.label).then(() => {\n              onMenuItemClick();\n            });\n          }}\n        />\n        <MenuItem\n          label=\"Sandwich view\"\n          icon={'gf-show-context'}\n          onClick={() => {\n            onSandwich();\n            onMenuItemClick();\n          }}\n        />\n        {extraButtons.map(({ label, icon, onClick }) => {\n          return <MenuItem label={label} icon={icon} onClick={() => onClick()} key={label} />;\n        })}\n        {collapsing && (\n          <MenuGroup label={'Grouping'}>\n            {collapseConfig ? (\n              collapseConfig.collapsed ? (\n                <MenuItem\n                  label=\"Expand group\"\n                  icon={'angle-double-down'}\n                  onClick={() => {\n                    onExpandGroup();\n                    onMenuItemClick();\n                  }}\n                />\n              ) : (\n                <MenuItem\n                  label=\"Collapse group\"\n                  icon={'angle-double-up'}\n                  onClick={() => {\n                    onCollapseGroup();\n                    onMenuItemClick();\n                  }}\n                />\n              )\n            ) : null}\n            {!allGroupsExpanded && (\n              <MenuItem\n                label=\"Expand all groups\"\n                icon={'angle-double-down'}\n                onClick={() => {\n                  onExpandAllGroups();\n                  onMenuItemClick();\n                }}\n              />\n            )}\n            {!allGroupsCollapsed && (\n              <MenuItem\n                label=\"Collapse all groups\"\n                icon={'angle-double-up'}\n                onClick={() => {\n                  onCollapseAllGroups();\n                  onMenuItemClick();\n                }}\n              />\n            )}\n          </MenuGroup>\n        )}\n      </>\n    );\n  }\n\n  return (\n    <div data-testid=\"contextMenu\">\n      <ContextMenu\n        renderMenuItems={renderItems}\n        x={itemData.posX + 10}\n        y={itemData.posY}\n        focusOnOpen={false}\n      ></ContextMenu>\n    </div>\n  );\n};\n\nexport default FlameGraphContextMenu;\n"],"names":["jsxs","Fragment","jsx","MenuItem","MenuGroup","ContextMenu"],"mappings":"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"}