@grafana/ui
Version:
Grafana Components Library
1 lines • 7.3 kB
Source Map (JSON)
{"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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"}