{"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';\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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"}