{"version":3,"file":"GraphContextMenu.mjs","sources":["../../../../src/graveyard/Graph/GraphContextMenu.tsx"],"sourcesContent":["import { css } from '@emotion/css';\n\nimport {\n  FlotDataPoint,\n  getValueFromDimension,\n  Dimensions,\n  dateTimeFormat,\n  TimeZone,\n  FormattedValue,\n  GrafanaTheme2,\n} from '@grafana/data';\n\nimport { ContextMenu, ContextMenuProps } from '../../components/ContextMenu/ContextMenu';\nimport { FormattedValueDisplay } from '../../components/FormattedValueDisplay/FormattedValueDisplay';\nimport { HorizontalGroup } from '../../components/Layout/Layout';\nimport { MenuGroup, MenuGroupProps } from '../../components/Menu/MenuGroup';\nimport { MenuItem } from '../../components/Menu/MenuItem';\nimport { SeriesIcon } from '../../components/VizLegend/SeriesIcon';\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nimport { GraphDimensions } from './GraphTooltip/types';\n\n/** @deprecated */\nexport type ContextDimensions<T extends Dimensions = any> = { [key in keyof T]: [number, number | undefined] | null };\n\n/** @deprecated */\nexport type GraphContextMenuProps = ContextMenuProps & {\n  getContextMenuSource: () => FlotDataPoint | null;\n  timeZone?: TimeZone;\n  itemsGroup?: MenuGroupProps[];\n  dimensions?: GraphDimensions;\n  contextDimensions?: ContextDimensions;\n};\n\n/** @internal */\nexport const GraphContextMenu = ({\n  getContextMenuSource,\n  timeZone,\n  itemsGroup,\n  dimensions,\n  contextDimensions,\n  ...otherProps\n}: GraphContextMenuProps) => {\n  const source = getContextMenuSource();\n\n  //  Do not render items that do not have label specified\n  const itemsToRender = itemsGroup\n    ? itemsGroup.map((group) => ({\n        ...group,\n        items: group.items?.filter((item) => item.label),\n      }))\n    : [];\n\n  const renderHeader = () => {\n    if (!source) {\n      return null;\n    }\n\n    // If dimensions supplied, we can calculate and display value\n    let value;\n    if (dimensions?.yAxis && contextDimensions?.yAxis?.[1]) {\n      const valueFromDimensions = getValueFromDimension(\n        dimensions.yAxis,\n        contextDimensions.yAxis[0],\n        contextDimensions.yAxis[1]\n      );\n      const display = source.series.valueField.display!;\n      value = display(valueFromDimensions);\n    }\n\n    const formattedValue = dateTimeFormat(source.datapoint[0], {\n      defaultWithMS: source.series.hasMsResolution,\n      timeZone,\n    });\n\n    return (\n      <GraphContextMenuHeader\n        timestamp={formattedValue}\n        seriesColor={source.series.color}\n        displayName={source.series.alias || source.series.label}\n        displayValue={value}\n      />\n    );\n  };\n  const renderMenuGroupItems = () => {\n    return itemsToRender?.map((group, index) => (\n      <MenuGroup key={`${group.label}${index}`} label={group.label}>\n        {(group.items || []).map((item) => (\n          <MenuItem\n            key={`${item.label}`}\n            url={item.url}\n            label={item.label}\n            target={item.target}\n            icon={item.icon}\n            active={item.active}\n            onClick={item.onClick}\n          />\n        ))}\n      </MenuGroup>\n    ));\n  };\n\n  return <ContextMenu {...otherProps} renderMenuItems={renderMenuGroupItems} renderHeader={renderHeader} />;\n};\n\n/** @internal */\nexport const GraphContextMenuHeader = ({\n  timestamp,\n  seriesColor,\n  displayName,\n  displayValue,\n}: {\n  timestamp: string;\n  seriesColor: string;\n  displayName: string;\n  displayValue: FormattedValue;\n}) => {\n  const styles = useStyles2(getStyles);\n\n  return (\n    <div className={styles.wrapper}>\n      <strong>{timestamp}</strong>\n      <HorizontalGroup>\n        <div>\n          <SeriesIcon color={seriesColor} />\n          <span className={styles.displayName}>{displayName}</span>\n        </div>\n        {displayValue && <FormattedValueDisplay value={displayValue} />}\n      </HorizontalGroup>\n    </div>\n  );\n};\n\nfunction getStyles(theme: GrafanaTheme2) {\n  return {\n    wrapper: css({\n      padding: theme.spacing(0.5, 1),\n      fontSize: theme.typography.size.sm,\n      zIndex: theme.zIndex.tooltip,\n    }),\n    displayName: css({\n      whiteSpace: 'nowrap',\n      paddingLeft: theme.spacing(0.5),\n    }),\n  };\n}\n"],"names":[],"mappings":"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"}