{"version":3,"file":"VizLegend.mjs","sources":["../../../../src/components/VizLegend/VizLegend.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport * as React from 'react';\n\nimport { DataHoverClearEvent, DataHoverEvent } from '@grafana/data';\nimport { LegendDisplayMode } from '@grafana/schema';\n\nimport { SeriesVisibilityChangeMode, usePanelContext } from '../PanelChrome';\n\nimport { VizLegendList } from './VizLegendList';\nimport { VizLegendTable } from './VizLegendTable';\nimport { LegendProps, SeriesVisibilityChangeBehavior, VizLegendItem } from './types';\nimport { mapMouseEventToMode } from './utils';\n\n/**\n * @public\n */\nexport function VizLegend<T>({\n  items,\n  thresholdItems,\n  mappingItems,\n  displayMode,\n  sortBy: sortKey,\n  seriesVisibilityChangeBehavior = SeriesVisibilityChangeBehavior.Isolate,\n  sortDesc,\n  onLabelClick,\n  onToggleSort,\n  placement,\n  className,\n  itemRenderer,\n  readonly,\n  isSortable,\n}: LegendProps<T>) {\n  const { eventBus, onToggleSeriesVisibility, onToggleLegendSort } = usePanelContext();\n\n  const onMouseOver = useCallback(\n    (\n      item: VizLegendItem,\n      event: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.FocusEvent<HTMLButtonElement>\n    ) => {\n      eventBus?.publish({\n        type: DataHoverEvent.type,\n        payload: {\n          raw: event,\n          x: 0,\n          y: 0,\n          dataId: item.label,\n        },\n      });\n    },\n    [eventBus]\n  );\n\n  const onMouseOut = useCallback(\n    (\n      item: VizLegendItem,\n      event: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.FocusEvent<HTMLButtonElement>\n    ) => {\n      eventBus?.publish({\n        type: DataHoverClearEvent.type,\n        payload: {\n          raw: event,\n          x: 0,\n          y: 0,\n          dataId: item.label,\n        },\n      });\n    },\n    [eventBus]\n  );\n\n  const onLegendLabelClick = useCallback(\n    (item: VizLegendItem, event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n      if (onLabelClick) {\n        onLabelClick(item, event);\n      }\n      if (onToggleSeriesVisibility) {\n        onToggleSeriesVisibility(\n          item.fieldName ?? item.label,\n          seriesVisibilityChangeBehavior === SeriesVisibilityChangeBehavior.Hide\n            ? SeriesVisibilityChangeMode.AppendToSelection\n            : mapMouseEventToMode(event)\n        );\n      }\n    },\n    [onToggleSeriesVisibility, onLabelClick, seriesVisibilityChangeBehavior]\n  );\n\n  const makeVizLegendList = useCallback(\n    (items: VizLegendItem[]) => {\n      return (\n        <VizLegendList<T>\n          className={className}\n          placement={placement}\n          onLabelMouseOver={onMouseOver}\n          onLabelMouseOut={onMouseOut}\n          onLabelClick={onLegendLabelClick}\n          itemRenderer={itemRenderer}\n          readonly={readonly}\n          items={items}\n        />\n      );\n    },\n    [className, placement, onMouseOver, onMouseOut, onLegendLabelClick, itemRenderer, readonly]\n  );\n\n  switch (displayMode) {\n    case LegendDisplayMode.Table:\n      return (\n        <VizLegendTable<T>\n          className={className}\n          items={items}\n          placement={placement}\n          sortBy={sortKey}\n          sortDesc={sortDesc}\n          onLabelClick={onLegendLabelClick}\n          onToggleSort={onToggleSort || onToggleLegendSort}\n          onLabelMouseOver={onMouseOver}\n          onLabelMouseOut={onMouseOut}\n          itemRenderer={itemRenderer}\n          readonly={readonly}\n          isSortable={isSortable}\n        />\n      );\n    case LegendDisplayMode.List:\n      const isThresholdsEnabled = thresholdItems && thresholdItems.length > 1;\n      const isValueMappingEnabled = mappingItems && mappingItems.length > 0;\n      return (\n        <>\n          {/* render items when single series and there is no thresholds and no value mappings\n           * render items when multi series and there is no thresholds\n           */}\n          {!isThresholdsEnabled && (!isValueMappingEnabled || items.length > 1) && makeVizLegendList(items)}\n          {/* render threshold colors if From thresholds scheme selected */}\n          {isThresholdsEnabled && makeVizLegendList(thresholdItems)}\n          {/* render value mapping colors */}\n          {isValueMappingEnabled && makeVizLegendList(mappingItems)}\n        </>\n      );\n    default:\n      return null;\n  }\n}\n\nVizLegend.displayName = 'VizLegend';\n"],"names":["items"],"mappings":"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"}