mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Hidden series stay hidden in legend when toggling visibility (#54139)
This commit is contained in:
@@ -1,9 +1,11 @@
|
|||||||
import {
|
import {
|
||||||
ByNamesMatcherMode,
|
ByNamesMatcherMode,
|
||||||
|
ConfigOverrideRule,
|
||||||
DataFrame,
|
DataFrame,
|
||||||
DynamicConfigValue,
|
DynamicConfigValue,
|
||||||
FieldConfigSource,
|
FieldConfigSource,
|
||||||
FieldMatcherID,
|
FieldMatcherID,
|
||||||
|
fieldMatchers,
|
||||||
FieldType,
|
FieldType,
|
||||||
getFieldDisplayName,
|
getFieldDisplayName,
|
||||||
isSystemOverrideWithRef,
|
isSystemOverrideWithRef,
|
||||||
@@ -27,7 +29,7 @@ export function seriesVisibilityConfigFactory(
|
|||||||
|
|
||||||
if (currentIndex < 0) {
|
if (currentIndex < 0) {
|
||||||
if (mode === SeriesVisibilityChangeMode.ToggleSelection) {
|
if (mode === SeriesVisibilityChangeMode.ToggleSelection) {
|
||||||
const override = createOverride([displayName]);
|
const override = createOverride([displayName, ...getNamesOfHiddenFields(overrides, data)]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...fieldConfig,
|
...fieldConfig,
|
||||||
@@ -48,7 +50,12 @@ export function seriesVisibilityConfigFactory(
|
|||||||
const [current] = overridesCopy.splice(currentIndex, 1) as SystemConfigOverrideRule[];
|
const [current] = overridesCopy.splice(currentIndex, 1) as SystemConfigOverrideRule[];
|
||||||
|
|
||||||
if (mode === SeriesVisibilityChangeMode.ToggleSelection) {
|
if (mode === SeriesVisibilityChangeMode.ToggleSelection) {
|
||||||
const existing = getExistingDisplayNames(current);
|
let existing = getExistingDisplayNames(current);
|
||||||
|
const nameOfHiddenFields = getNamesOfHiddenFields(overridesCopy, data);
|
||||||
|
|
||||||
|
if (nameOfHiddenFields.length > 0) {
|
||||||
|
existing = existing.filter((el) => nameOfHiddenFields.indexOf(el) < 0);
|
||||||
|
}
|
||||||
|
|
||||||
if (existing[0] === displayName && existing.length === 1) {
|
if (existing[0] === displayName && existing.length === 1) {
|
||||||
return {
|
return {
|
||||||
@@ -57,7 +64,7 @@ export function seriesVisibilityConfigFactory(
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const override = createOverride([displayName]);
|
const override = createOverride([displayName, ...nameOfHiddenFields]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...fieldConfig,
|
...fieldConfig,
|
||||||
@@ -169,3 +176,32 @@ const getDisplayNames = (data: DataFrame[], excludeName?: string): string[] => {
|
|||||||
|
|
||||||
return Array.from(unique);
|
return Array.from(unique);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const getNamesOfHiddenFields = (overrides: ConfigOverrideRule[], data: DataFrame[]): string[] => {
|
||||||
|
let names: string[] = [];
|
||||||
|
|
||||||
|
for (const override of overrides) {
|
||||||
|
const property = override.properties.find((p) => p.id === 'custom.hideFrom');
|
||||||
|
|
||||||
|
if (property !== undefined && property.value?.legend === true) {
|
||||||
|
const info = fieldMatchers.get(override.matcher.id);
|
||||||
|
const matcher = info.get(override.matcher.options);
|
||||||
|
|
||||||
|
for (const frame of data) {
|
||||||
|
for (const field of frame.fields) {
|
||||||
|
if (field.type !== FieldType.number) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const name = getFieldDisplayName(field, frame, data);
|
||||||
|
|
||||||
|
if (matcher(field, frame, data)) {
|
||||||
|
names.push(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return names;
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user