UNPKG

@grafana/ui

Version:
1 lines 6.64 kB
{"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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"}