@grafana/ui
Version:
Grafana Components Library
1 lines • 6.63 kB
Source Map (JSON)
{"version":3,"file":"GraphWithLegend.mjs","sources":["../../../../src/graveyard/Graph/GraphWithLegend.tsx"],"sourcesContent":["// Libraries\n\nimport { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, GraphSeriesValue } from '@grafana/data';\nimport { LegendDisplayMode, LegendPlacement } from '@grafana/schema';\n\nimport { CustomScrollbar } from '../../components/CustomScrollbar/CustomScrollbar';\nimport { VizLegend } from '../../components/VizLegend/VizLegend';\nimport { VizLegendItem } from '../../components/VizLegend/types';\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nimport { Graph, GraphProps } from './Graph';\n\nexport interface GraphWithLegendProps extends GraphProps {\n legendDisplayMode: LegendDisplayMode;\n legendVisibility: boolean;\n placement: LegendPlacement;\n hideEmpty?: boolean;\n hideZero?: boolean;\n sortLegendBy?: string;\n sortLegendDesc?: boolean;\n onSeriesToggle?: (label: string, event: React.MouseEvent<HTMLElement>) => void;\n onToggleSort: (sortBy: string) => void;\n}\n\nconst shouldHideLegendItem = (data: GraphSeriesValue[][], hideEmpty = false, hideZero = false) => {\n const isZeroOnlySeries = data.reduce((acc, current) => acc + (current[1] || 0), 0) === 0;\n const isNullOnlySeries = !data.reduce((acc, current) => acc && current[1] !== null, true);\n\n return (hideEmpty && isNullOnlySeries) || (hideZero && isZeroOnlySeries);\n};\n\nexport const GraphWithLegend = (props: GraphWithLegendProps) => {\n const {\n series,\n timeRange,\n width,\n height,\n showBars,\n showLines,\n showPoints,\n sortLegendBy,\n sortLegendDesc,\n legendDisplayMode,\n legendVisibility,\n placement,\n onSeriesToggle,\n onToggleSort,\n hideEmpty,\n hideZero,\n isStacked,\n lineWidth,\n onHorizontalRegionSelected,\n timeZone,\n children,\n ariaLabel,\n } = props;\n const { graphContainer, wrapper, legendContainer } = useStyles2(getGraphWithLegendStyles, props.placement);\n\n const legendItems = series.reduce<VizLegendItem[]>((acc, s) => {\n return shouldHideLegendItem(s.data, hideEmpty, hideZero)\n ? acc\n : acc.concat([\n {\n label: s.label,\n color: s.color || '',\n disabled: !s.isVisible,\n yAxis: s.yAxis.index,\n getDisplayValues: () => s.info || [],\n },\n ]);\n }, []);\n\n return (\n <div className={wrapper} aria-label={ariaLabel}>\n <div className={graphContainer}>\n <Graph\n series={series}\n timeRange={timeRange}\n timeZone={timeZone}\n showLines={showLines}\n showPoints={showPoints}\n showBars={showBars}\n width={width}\n height={height}\n isStacked={isStacked}\n lineWidth={lineWidth}\n onHorizontalRegionSelected={onHorizontalRegionSelected}\n >\n {children}\n </Graph>\n </div>\n\n {legendVisibility && (\n <div className={legendContainer}>\n <CustomScrollbar hideHorizontalTrack>\n <VizLegend\n items={legendItems}\n displayMode={legendDisplayMode}\n placement={placement}\n sortBy={sortLegendBy}\n sortDesc={sortLegendDesc}\n onLabelClick={(item, event) => {\n if (onSeriesToggle) {\n onSeriesToggle(item.label, event);\n }\n }}\n onToggleSort={onToggleSort}\n />\n </CustomScrollbar>\n </div>\n )}\n </div>\n );\n};\n\nconst getGraphWithLegendStyles = (_theme: GrafanaTheme2, placement: LegendPlacement) => ({\n wrapper: css({\n display: 'flex',\n flexDirection: placement === 'bottom' ? 'column' : 'row',\n }),\n graphContainer: css({\n minHeight: '65%',\n flexGrow: 1,\n }),\n legendContainer: css({\n padding: '10px 0',\n maxHeight: placement === 'bottom' ? '35%' : 'none',\n }),\n});\n"],"names":[],"mappings":"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"}