@grafana/ui
Version:
Grafana Components Library
139 lines (134 loc) • 4.08 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var data = require('@grafana/data');
var schema = require('@grafana/schema');
require('../PanelChrome/index.cjs');
var VizLegendList = require('./VizLegendList.cjs');
var VizLegendTable = require('./VizLegendTable.cjs');
var types = require('./types.cjs');
var utils = require('./utils.cjs');
var PanelContext = require('../PanelChrome/PanelContext.cjs');
var types$1 = require('../PanelChrome/types.cjs');
;
function VizLegend({
items,
thresholdItems,
mappingItems,
displayMode = schema.LegendDisplayMode.List,
sortBy: sortKey,
seriesVisibilityChangeBehavior = types.SeriesVisibilityChangeBehavior.Isolate,
sortDesc,
onLabelClick,
onToggleSort,
placement,
className,
itemRenderer,
readonly,
isSortable,
limit,
filterAction,
overflow
}) {
const { eventBus, onToggleSeriesVisibility, onToggleLegendSort } = PanelContext.usePanelContext();
const onMouseOver = React.useCallback(
(item, event) => {
eventBus == null ? void 0 : eventBus.publish({
type: data.DataHoverEvent.type,
payload: {
raw: event,
x: 0,
y: 0,
dataId: item.label
}
});
},
[eventBus]
);
const onMouseOut = React.useCallback(
(item, event) => {
eventBus == null ? void 0 : eventBus.publish({
type: data.DataHoverClearEvent.type,
payload: {
raw: event,
x: 0,
y: 0,
dataId: item.label
}
});
},
[eventBus]
);
const onLegendLabelClick = React.useCallback(
(item, event) => {
var _a;
if (onLabelClick) {
onLabelClick(item, event);
}
if (onToggleSeriesVisibility) {
onToggleSeriesVisibility(
(_a = item.fieldName) != null ? _a : item.label,
seriesVisibilityChangeBehavior === types.SeriesVisibilityChangeBehavior.Hide ? types$1.SeriesVisibilityChangeMode.AppendToSelection : utils.mapMouseEventToMode(event)
);
}
},
[onToggleSeriesVisibility, onLabelClick, seriesVisibilityChangeBehavior]
);
const makeVizLegendList = React.useCallback(
(items2) => {
return /* @__PURE__ */ jsxRuntime.jsx(
VizLegendList.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 schema.LegendDisplayMode.Table:
return /* @__PURE__ */ jsxRuntime.jsx(
VizLegendTable.VizLegendTable,
{
className,
items,
placement,
sortBy: sortKey,
sortDesc,
onLabelClick: onLegendLabelClick,
onToggleSort: onToggleSort || onToggleLegendSort,
onLabelMouseOver: onMouseOver,
onLabelMouseOut: onMouseOut,
itemRenderer,
readonly,
isSortable,
limit,
filterAction,
overflow
}
);
case schema.LegendDisplayMode.List:
const isThresholdsEnabled = thresholdItems && thresholdItems.length > 1;
const isValueMappingEnabled = mappingItems && mappingItems.length > 0;
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
!isThresholdsEnabled && (!isValueMappingEnabled || items.length > 1) && makeVizLegendList(items),
isThresholdsEnabled && makeVizLegendList(thresholdItems),
isValueMappingEnabled && makeVizLegendList(mappingItems)
] });
default:
return null;
}
}
VizLegend.displayName = "VizLegend";
exports.VizLegend = VizLegend;
//# sourceMappingURL=VizLegend.cjs.map