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