UNPKG

@grafana/ui

Version:
135 lines (132 loc) 3.95 kB
import { jsx, jsxs, Fragment } from 'react/jsx-runtime'; import { useCallback } from 'react'; import { DataHoverEvent, DataHoverClearEvent } from '@grafana/data'; import { LegendDisplayMode } from '@grafana/schema'; import '../PanelChrome/index.mjs'; import { VizLegendList } from './VizLegendList.mjs'; import { VizLegendTable } from './VizLegendTable.mjs'; import { SeriesVisibilityChangeBehavior } from './types.mjs'; import { mapMouseEventToMode } from './utils.mjs'; import { usePanelContext } from '../PanelChrome/PanelContext.mjs'; import { SeriesVisibilityChangeMode } from '../PanelChrome/types.mjs'; "use strict"; function VizLegend({ items, thresholdItems, mappingItems, displayMode = LegendDisplayMode.List, sortBy: sortKey, seriesVisibilityChangeBehavior = SeriesVisibilityChangeBehavior.Isolate, sortDesc, onLabelClick, onToggleSort, placement, className, itemRenderer, readonly, isSortable, limit, filterAction, overflow }) { const { eventBus, onToggleSeriesVisibility, onToggleLegendSort } = usePanelContext(); const onMouseOver = useCallback( (item, event) => { eventBus == null ? void 0 : eventBus.publish({ type: DataHoverEvent.type, payload: { raw: event, x: 0, y: 0, dataId: item.label } }); }, [eventBus] ); const onMouseOut = useCallback( (item, event) => { eventBus == null ? void 0 : eventBus.publish({ type: DataHoverClearEvent.type, payload: { raw: event, x: 0, y: 0, dataId: item.label } }); }, [eventBus] ); const onLegendLabelClick = useCallback( (item, event) => { var _a; if (onLabelClick) { onLabelClick(item, event); } if (onToggleSeriesVisibility) { onToggleSeriesVisibility( (_a = item.fieldName) != null ? _a : item.label, seriesVisibilityChangeBehavior === SeriesVisibilityChangeBehavior.Hide ? SeriesVisibilityChangeMode.AppendToSelection : mapMouseEventToMode(event) ); } }, [onToggleSeriesVisibility, onLabelClick, seriesVisibilityChangeBehavior] ); const makeVizLegendList = useCallback( (items2) => { return /* @__PURE__ */ jsx( VizLegendList, { className, placement, onLabelMouseOver: onMouseOver, onLabelMouseOut: onMouseOut, onLabelClick: onLegendLabelClick, itemRenderer, readonly, items: items2, limit, filterAction } ); }, [className, placement, onMouseOver, onMouseOut, onLegendLabelClick, itemRenderer, readonly, limit, filterAction] ); switch (displayMode) { case LegendDisplayMode.Table: return /* @__PURE__ */ jsx( VizLegendTable, { className, items, placement, sortBy: sortKey, sortDesc, onLabelClick: onLegendLabelClick, onToggleSort: onToggleSort || onToggleLegendSort, onLabelMouseOver: onMouseOver, onLabelMouseOut: onMouseOut, itemRenderer, readonly, isSortable, limit, filterAction, overflow } ); case LegendDisplayMode.List: const isThresholdsEnabled = thresholdItems && thresholdItems.length > 1; const isValueMappingEnabled = mappingItems && mappingItems.length > 0; return /* @__PURE__ */ jsxs(Fragment, { children: [ !isThresholdsEnabled && (!isValueMappingEnabled || items.length > 1) && makeVizLegendList(items), isThresholdsEnabled && makeVizLegendList(thresholdItems), isValueMappingEnabled && makeVizLegendList(mappingItems) ] }); default: return null; } } VizLegend.displayName = "VizLegend"; export { VizLegend }; //# sourceMappingURL=VizLegend.mjs.map