@grafana/scenes 6.39.2--canary.1259.18162516235.0 → 6.39.2--canary.1256.18205384867.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { t } from '@grafana/i18n';
2
- import { toUtc, getPanelOptionsWithDefaults, renderMarkdown, applyFieldOverrides, compareArrayValues, compareDataFrameStructures, CoreApp, DashboardCursorSync, PanelPlugin, PluginType } from '@grafana/data';
2
+ import { toUtc, getPanelOptionsWithDefaults, renderMarkdown, DataTopic, applyFieldOverrides, compareArrayValues, compareDataFrameStructures, CoreApp, DashboardCursorSync, PanelPlugin, PluginType } from '@grafana/data';
3
3
  import { getPluginImportUtils, config, getAppEvents } from '@grafana/runtime';
4
4
  import { SceneObjectBase } from '../../core/SceneObjectBase.js';
5
5
  import { sceneGraph } from '../../core/sceneGraph/index.js';
@@ -150,6 +150,22 @@ class VizPanel extends SceneObjectBase {
150
150
  true
151
151
  );
152
152
  };
153
+ this._onAnnotationVisibilityChange = (label, mode) => {
154
+ var _a;
155
+ if (!this._dataWithFieldConfig) {
156
+ return;
157
+ }
158
+ this.onFieldConfigChange(
159
+ seriesVisibilityConfigFactory(
160
+ label,
161
+ mode,
162
+ this.state.fieldConfig,
163
+ (_a = this._dataWithFieldConfig.annotations) != null ? _a : [],
164
+ DataTopic.Annotations
165
+ ),
166
+ true
167
+ );
168
+ };
153
169
  this._onInstanceStateChange = (state) => {
154
170
  if (this._panelContext) {
155
171
  this._panelContext = {
@@ -364,12 +380,14 @@ class VizPanel extends SceneObjectBase {
364
380
  data: this._dataWithFieldConfig.annotations,
365
381
  fieldConfig: {
366
382
  defaults: {},
367
- overrides: []
383
+ overrides: [...this.state.fieldConfig.overrides]
368
384
  },
369
385
  fieldConfigRegistry,
370
386
  replaceVariables: this.interpolate,
371
387
  theme: config.theme2,
372
- timeZone: (_d = rawData.request) == null ? void 0 : _d.timezone
388
+ timeZone: (_d = rawData.request) == null ? void 0 : _d.timezone,
389
+ // @ts-ignore
390
+ dataTopic: DataTopic.Annotations
373
391
  });
374
392
  }
375
393
  if (!pluginDataSupport.alertStates) {
@@ -398,6 +416,7 @@ class VizPanel extends SceneObjectBase {
398
416
  },
399
417
  onSeriesColorChange: this._onSeriesColorChange,
400
418
  onToggleSeriesVisibility: this._onSeriesVisibilityChange,
419
+ onAnnotationVisibilityChange: this._onAnnotationVisibilityChange,
401
420
  onToggleLegendSort: this._onToggleLegendSort,
402
421
  onInstanceStateChange: this._onInstanceStateChange
403
422
  };
@@ -1 +1 @@
1
- {"version":3,"file":"VizPanel.js","sources":["../../../../src/components/VizPanel/VizPanel.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport {\n AbsoluteTimeRange,\n FieldConfigSource,\n PanelModel,\n PanelPlugin,\n toUtc,\n getPanelOptionsWithDefaults,\n ScopedVars,\n InterpolateFunction,\n CoreApp,\n DashboardCursorSync,\n PanelData,\n compareArrayValues,\n compareDataFrameStructures,\n applyFieldOverrides,\n PluginType,\n renderMarkdown,\n PanelPluginDataSupport,\n} from '@grafana/data';\nimport { PanelContext, SeriesVisibilityChangeMode, VizLegendOptions } from '@grafana/ui';\nimport { config, getAppEvents, getPluginImportUtils } from '@grafana/runtime';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { DeepPartial, SceneObject, SceneObjectState } from '../../core/types';\n\nimport { VizPanelRenderer } from './VizPanelRenderer';\nimport { VizPanelMenu } from './VizPanelMenu';\nimport { VariableDependencyConfig } from '../../variables/VariableDependencyConfig';\nimport { VariableCustomFormatterFn } from '../../variables/types';\nimport { seriesVisibilityConfigFactory } from './seriesVisibilityConfigFactory';\nimport { emptyPanelData } from '../../core/SceneDataNode';\nimport { changeSeriesColorConfigFactory } from './colorSeriesConfigFactory';\nimport { loadPanelPluginSync } from './registerRuntimePanelPlugin';\nimport { getCursorSyncScope } from '../../behaviors/CursorSync';\nimport { cloneDeep, isArray, isEmpty, merge, mergeWith } from 'lodash';\nimport { UserActionEvent } from '../../core/events';\nimport { evaluateTimeRange } from '../../utils/evaluateTimeRange';\nimport { LiveNowTimer } from '../../behaviors/LiveNowTimer';\nimport { registerQueryWithController, wrapPromiseInStateObservable } from '../../querying/registerQueryWithController';\nimport { SceneDataTransformer } from '../../querying/SceneDataTransformer';\nimport { SceneQueryRunner } from '../../querying/SceneQueryRunner';\nimport { buildPathIdFor } from '../../utils/pathId';\n\nexport interface VizPanelState<TOptions = {}, TFieldConfig = {}> extends SceneObjectState {\n /**\n * This is usually a plugin id that references a core plugin or an external plugin. But this can also reference a\n * runtime registered PanelPlugin registered via function registerScenePanelPlugin.\n */\n pluginId: string;\n title: string;\n description?: string;\n options: DeepPartial<TOptions>;\n fieldConfig: FieldConfigSource<DeepPartial<TFieldConfig>>;\n pluginVersion?: string;\n displayMode?: 'default' | 'transparent';\n /**\n * Only shows header on hover, absolutly positioned above the panel.\n */\n hoverHeader?: boolean;\n /**\n * Offset hoverHeader position on the y axis\n */\n hoverHeaderOffset?: number;\n /**\n * Only shows vizPanelMenu on hover if false, otherwise the menu is always visible in the header\n */\n showMenuAlways?: boolean;\n /**\n * Defines a menu in the top right of the panel. The menu object is only activated when the dropdown menu itself is shown.\n * So the best way to add dynamic menu actions and links is by adding them in a behavior attached to the menu.\n */\n menu?: VizPanelMenu;\n /**\n * Defines a menu that renders panel link.\n **/\n titleItems?: React.ReactNode | SceneObject | SceneObject[];\n seriesLimit?: number;\n seriesLimitShowAll?: boolean;\n /**\n * Add action to the top right panel header\n */\n headerActions?: React.ReactNode | SceneObject | SceneObject[];\n /**\n * Mainly for advanced use cases that need custom handling of PanelContext callbacks.\n */\n extendPanelContext?: (vizPanel: VizPanel, context: PanelContext) => void;\n\n /**\n * Sets panel chrome collapsed state\n */\n collapsible?: boolean;\n collapsed?: boolean;\n /** Marks object as a repeated object and a key pointer to source object */\n repeatSourceKey?: string;\n /**\n * @internal\n * Only for use from core to handle migration from old angular panels\n **/\n _UNSAFE_customMigrationHandler?: (panel: PanelModel, plugin: PanelPlugin) => void;\n /** Internal */\n _pluginLoadError?: string;\n /** Internal */\n _pluginInstanceState?: any;\n _renderCounter?: number;\n}\n\nexport class VizPanel<TOptions = {}, TFieldConfig extends {} = {}> extends SceneObjectBase<\n VizPanelState<TOptions, TFieldConfig>\n> {\n public static Component = VizPanelRenderer;\n\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['title', 'options', 'fieldConfig'],\n });\n\n // Not part of state as this is not serializable\n protected _panelContext?: PanelContext;\n private _plugin?: PanelPlugin;\n private _prevData?: PanelData;\n private _dataWithFieldConfig?: PanelData;\n private _structureRev = 0;\n\n public constructor(state: Partial<VizPanelState<TOptions, TFieldConfig>>) {\n super({\n options: {} as TOptions,\n fieldConfig: { defaults: {}, overrides: [] },\n title: t('grafana-scenes.components.viz-panel.title.title', 'Title'),\n pluginId: 'timeseries',\n _renderCounter: 0,\n ...state,\n });\n\n this.addActivationHandler(() => {\n this._onActivate();\n });\n\n state.menu?.addActivationHandler(() => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-menu-shown' }), true);\n });\n }\n\n private _onActivate() {\n if (!this._plugin) {\n this._loadPlugin(this.state.pluginId);\n }\n }\n\n public forceRender(): void {\n // Incrementing the render counter means VizRepeater and its children will also re-render\n this.setState({ _renderCounter: (this.state._renderCounter ?? 0) + 1 });\n }\n\n private async _loadPlugin(\n pluginId: string,\n overwriteOptions?: DeepPartial<{}>,\n overwriteFieldConfig?: FieldConfigSource,\n isAfterPluginChange?: boolean\n ) {\n const plugin = loadPanelPluginSync(pluginId);\n\n if (plugin) {\n this._pluginLoaded(plugin, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);\n } else {\n const { importPanelPlugin } = getPluginImportUtils();\n\n try {\n const panelPromise = importPanelPlugin(pluginId);\n\n const queryControler = sceneGraph.getQueryController(this);\n if (queryControler && queryControler.state.enableProfiling) {\n wrapPromiseInStateObservable(panelPromise)\n .pipe(registerQueryWithController({ type: `VizPanel/loadPlugin/${pluginId}`, origin: this }))\n .subscribe(() => {});\n }\n\n const result = await panelPromise;\n this._pluginLoaded(result, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);\n } catch (err: unknown) {\n this._pluginLoaded(getPanelPluginNotFound(pluginId));\n\n if (err instanceof Error) {\n this.setState({ _pluginLoadError: err.message });\n }\n }\n }\n }\n\n public getLegacyPanelId() {\n /**\n * The `/` part is here because a panel key can be in a clone chain\n * A clone chain looks like `panel-1-clone-0/grid-item-5/panel-14` where the last part is the panel key\n */\n const parts = this.state.key?.split('/') ?? [];\n\n if (parts.length === 0) {\n return 0;\n }\n\n const part = parts[parts.length - 1];\n const panelId = parseInt(part!.replace('panel-', ''), 10);\n\n if (isNaN(panelId)) {\n return 0;\n }\n\n return panelId;\n }\n\n /**\n * Unique id string that includes local variable values (for repeated panels)\n */\n public getPathId() {\n return buildPathIdFor(this);\n }\n\n private async _pluginLoaded(\n plugin: PanelPlugin,\n overwriteOptions?: DeepPartial<{}>,\n overwriteFieldConfig?: FieldConfigSource,\n isAfterPluginChange?: boolean\n ) {\n const { options, fieldConfig, title, pluginVersion, _UNSAFE_customMigrationHandler } = this.state;\n\n const panel: PanelModel = {\n title,\n options,\n fieldConfig,\n id: this.getLegacyPanelId(),\n type: plugin.meta.id,\n pluginVersion: pluginVersion,\n };\n\n if (overwriteOptions) {\n panel.options = overwriteOptions;\n }\n\n if (overwriteFieldConfig) {\n panel.fieldConfig = overwriteFieldConfig;\n }\n\n const currentVersion = this._getPluginVersion(plugin);\n\n _UNSAFE_customMigrationHandler?.(panel, plugin);\n\n //@ts-expect-error (TODO: remove after upgrading with https://github.com/grafana/grafana/pull/108998)\n const needsMigration = currentVersion !== pluginVersion || plugin.shouldMigrate?.(panel);\n\n if (plugin.onPanelMigration && needsMigration && !isAfterPluginChange) {\n // These migration handlers also mutate panel.fieldConfig to migrate fieldConfig\n panel.options = await plugin.onPanelMigration(panel);\n }\n\n // Some panels mutate the transformations on the panel as part of migrations.\n // Unfortunately, these mutations are not available until the panel plugin is loaded.\n // At this time, the data provider is already set, so this is the easiest way to fix it.\n let $data = this.state.$data;\n if (panel.transformations && $data) {\n if ($data instanceof SceneDataTransformer) {\n $data.setState({ transformations: panel.transformations });\n } else if ($data instanceof SceneQueryRunner) {\n $data.clearParent();\n $data = new SceneDataTransformer({\n transformations: panel.transformations,\n $data,\n });\n }\n }\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin,\n currentOptions: panel.options,\n currentFieldConfig: panel.fieldConfig,\n isAfterPluginChange: isAfterPluginChange ?? false,\n });\n\n this._plugin = plugin;\n\n this.setState({\n $data,\n options: withDefaults.options as DeepPartial<TOptions>,\n fieldConfig: withDefaults.fieldConfig,\n pluginVersion: currentVersion,\n pluginId: plugin.meta.id,\n });\n\n // Non data panels needs to be re-rendered when time range change\n if (plugin.meta.skipDataQuery) {\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n this._subs.add(sceneTimeRange.subscribeToState(() => this.forceRender()));\n }\n }\n\n private _getPluginVersion(plugin: PanelPlugin): string {\n return plugin && plugin.meta.info.version ? plugin.meta.info.version : config.buildInfo.version;\n }\n\n public getPlugin(): PanelPlugin | undefined {\n return this._plugin;\n }\n\n public getPanelContext(): PanelContext {\n this._panelContext ??= this.buildPanelContext();\n\n return this._panelContext!;\n }\n\n public onTimeRangeChange = (timeRange: AbsoluteTimeRange) => {\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n sceneTimeRange.onTimeRangeChange({\n raw: {\n from: toUtc(timeRange.from),\n to: toUtc(timeRange.to),\n },\n from: toUtc(timeRange.from),\n to: toUtc(timeRange.to),\n });\n };\n\n public getTimeRange = (data?: PanelData) => {\n const liveNowTimer = sceneGraph.findObject(this, (o) => o instanceof LiveNowTimer);\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n\n if (liveNowTimer instanceof LiveNowTimer && liveNowTimer.isEnabled) {\n return evaluateTimeRange(\n sceneTimeRange.state.from,\n sceneTimeRange.state.to,\n sceneTimeRange.getTimeZone(),\n sceneTimeRange.state.fiscalYearStartMonth,\n sceneTimeRange.state.UNSAFE_nowDelay,\n sceneTimeRange.state.weekStart\n );\n }\n\n const plugin = this.getPlugin();\n if (plugin && !plugin.meta.skipDataQuery && data && data.timeRange) {\n return data.timeRange;\n }\n\n return sceneTimeRange.state.value;\n };\n\n public async changePluginType(pluginId: string, newOptions?: DeepPartial<{}>, newFieldConfig?: FieldConfigSource) {\n const { options: prevOptions, fieldConfig: prevFieldConfig, pluginId: prevPluginId } = this.state;\n\n //clear field config cache to update it later\n this._dataWithFieldConfig = undefined;\n\n // If state.pluginId is already the correct plugin we don't treat this as plain user panel type change\n const isAfterPluginChange = this.state.pluginId !== pluginId;\n await this._loadPlugin(pluginId, newOptions ?? {}, newFieldConfig, isAfterPluginChange);\n\n const panel: PanelModel = {\n title: this.state.title,\n options: this.state.options,\n fieldConfig: this.state.fieldConfig,\n id: 1,\n type: pluginId,\n };\n\n // onPanelTypeChanged is mainly used by plugins to migrate from Angular to React.\n // For example, this will migrate options from 'graph' to 'timeseries' if the previous and new plugin ID matches.\n const updatedOptions = this._plugin?.onPanelTypeChanged?.(panel, prevPluginId, prevOptions, prevFieldConfig);\n\n if (updatedOptions && !isEmpty(updatedOptions)) {\n this.onOptionsChange(updatedOptions, true, true);\n }\n }\n\n public onTitleChange = (title: string) => {\n this.setState({ title });\n };\n\n public onDescriptionChange = (description: string) => {\n this.setState({ description });\n };\n\n public onDisplayModeChange = (displayMode: 'default' | 'transparent') => {\n this.setState({ displayMode });\n };\n\n public onToggleCollapse = (collapsed: boolean) => {\n this.setState({\n collapsed,\n });\n };\n\n public onOptionsChange = (optionsUpdate: DeepPartial<TOptions>, replace = false, isAfterPluginChange = false) => {\n const { fieldConfig, options } = this.state;\n\n // When replace is true, we want to replace the entire options object. Default will be applied.\n const nextOptions = replace\n ? optionsUpdate\n : mergeWith(cloneDeep(options), optionsUpdate, (objValue, srcValue, key, obj) => {\n if (isArray(srcValue)) {\n return srcValue;\n }\n // If customizer returns undefined, merging is handled by the method instead\n // so we need to override the value in the object instead\n if (objValue !== srcValue && typeof srcValue === 'undefined') {\n obj[key] = srcValue;\n return;\n }\n return;\n });\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin: this._plugin!,\n currentOptions: nextOptions,\n currentFieldConfig: fieldConfig,\n isAfterPluginChange: isAfterPluginChange,\n });\n\n this.setState({\n options: withDefaults.options as DeepPartial<TOptions>,\n _renderCounter: (this.state._renderCounter ?? 0) + 1,\n });\n };\n\n public onFieldConfigChange = (fieldConfigUpdate: FieldConfigSource<DeepPartial<TFieldConfig>>, replace?: boolean) => {\n const { fieldConfig, options } = this.state;\n\n // When replace is true, we want to replace the entire field config. Default will be applied.\n const nextFieldConfig = replace ? fieldConfigUpdate : merge(cloneDeep(fieldConfig), fieldConfigUpdate);\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin: this._plugin!,\n currentOptions: options,\n currentFieldConfig: nextFieldConfig,\n isAfterPluginChange: false,\n });\n\n this._dataWithFieldConfig = undefined;\n this.setState({ fieldConfig: withDefaults.fieldConfig });\n };\n\n public interpolate = ((value: string, scoped?: ScopedVars, format?: string | VariableCustomFormatterFn) => {\n return sceneGraph.interpolate(this, value, scoped, format);\n }) as InterpolateFunction;\n\n public getDescription = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-description-shown' }), true);\n\n const { description } = this.state;\n if (description) {\n const markdown = this.interpolate(description);\n return renderMarkdown(markdown);\n }\n return '';\n };\n\n public clearFieldConfigCache() {\n this._dataWithFieldConfig = undefined;\n }\n\n /**\n * Called from the react render path to apply the field config to the data provided by the data provider\n */\n public applyFieldConfig(rawData?: PanelData): PanelData {\n const plugin = this._plugin;\n\n if (!plugin || plugin.meta.skipDataQuery || !rawData) {\n // TODO setup time range subscription instead\n return emptyPanelData;\n }\n\n // If the data is the same as last time, we can skip the field config apply step and just return same result as last time\n if (this._prevData === rawData && this._dataWithFieldConfig) {\n return this._dataWithFieldConfig;\n }\n\n const pluginDataSupport: PanelPluginDataSupport = plugin.dataSupport || { alertStates: false, annotations: false };\n\n const fieldConfigRegistry = plugin.fieldConfigRegistry;\n const prevFrames = this._dataWithFieldConfig?.series ?? [];\n const newFrames = applyFieldOverrides({\n data: rawData.series,\n fieldConfig: this.state.fieldConfig,\n fieldConfigRegistry,\n replaceVariables: this.interpolate,\n theme: config.theme2,\n timeZone: rawData.request?.timezone,\n });\n\n if (!compareArrayValues(newFrames, prevFrames, compareDataFrameStructures)) {\n this._structureRev++;\n }\n\n this._dataWithFieldConfig = {\n ...rawData,\n structureRev: this._structureRev,\n series: newFrames,\n };\n\n if (this._dataWithFieldConfig.annotations) {\n this._dataWithFieldConfig.annotations = applyFieldOverrides({\n data: this._dataWithFieldConfig.annotations,\n fieldConfig: {\n defaults: {},\n overrides: [],\n },\n fieldConfigRegistry,\n replaceVariables: this.interpolate,\n theme: config.theme2,\n timeZone: rawData.request?.timezone,\n });\n }\n\n if (!pluginDataSupport.alertStates) {\n this._dataWithFieldConfig.alertState = undefined;\n }\n\n if (!pluginDataSupport.annotations) {\n this._dataWithFieldConfig.annotations = undefined;\n }\n\n this._prevData = rawData;\n return this._dataWithFieldConfig;\n }\n\n public onCancelQuery = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-cancel-query-clicked' }), true);\n const data = sceneGraph.getData(this);\n data.cancelQuery?.();\n };\n\n public onStatusMessageClick = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-status-message-clicked' }), true);\n };\n\n /**\n * Panel context functions\n */\n private _onSeriesColorChange = (label: string, color: string) => {\n this.onFieldConfigChange(changeSeriesColorConfigFactory(label, color, this.state.fieldConfig));\n };\n\n private _onSeriesVisibilityChange = (label: string, mode: SeriesVisibilityChangeMode) => {\n if (!this._dataWithFieldConfig) {\n return;\n }\n\n this.onFieldConfigChange(\n seriesVisibilityConfigFactory(label, mode, this.state.fieldConfig, this._dataWithFieldConfig.series),\n true\n );\n };\n\n private _onInstanceStateChange = (state: any) => {\n if (this._panelContext) {\n this._panelContext = {\n ...this._panelContext,\n instanceState: state,\n };\n }\n\n this.setState({ _pluginInstanceState: state });\n };\n\n private _onToggleLegendSort = (sortKey: string) => {\n const legendOptions: VizLegendOptions = (this.state.options as any).legend;\n\n // We don't want to do anything when legend options are not available\n if (!legendOptions) {\n return;\n }\n\n let sortDesc = legendOptions.sortDesc;\n let sortBy = legendOptions.sortBy;\n if (sortKey !== sortBy) {\n sortDesc = undefined;\n }\n\n // if already sort ascending, disable sorting\n if (sortDesc === false) {\n sortBy = undefined;\n sortDesc = undefined;\n } else {\n sortDesc = !sortDesc;\n sortBy = sortKey;\n }\n\n this.onOptionsChange(\n {\n ...this.state.options,\n legend: { ...legendOptions, sortBy, sortDesc },\n } as TOptions,\n true\n );\n };\n\n public clone(withState?: Partial<VizPanelState>) {\n // Clear _pluginInstanceState and _pluginLoadError as it's not safe to clone\n return super.clone({ _pluginInstanceState: undefined, _pluginLoadError: undefined, ...withState });\n }\n\n private buildPanelContext(): PanelContext {\n const sync = getCursorSyncScope(this);\n\n const context = {\n eventsScope: sync ? sync.getEventsScope() : '__global_',\n eventBus: sync ? sync.getEventsBus(this) : getAppEvents(),\n app: CoreApp.Unknown,\n sync: () => {\n if (sync) {\n return sync.state.sync;\n }\n return DashboardCursorSync.Off;\n },\n onSeriesColorChange: this._onSeriesColorChange,\n onToggleSeriesVisibility: this._onSeriesVisibilityChange,\n onToggleLegendSort: this._onToggleLegendSort,\n onInstanceStateChange: this._onInstanceStateChange,\n };\n\n if (this.state.extendPanelContext) {\n this.state.extendPanelContext(this, context);\n }\n\n return context;\n }\n}\n\nfunction getPanelPluginNotFound(id: string): PanelPlugin {\n const plugin = new PanelPlugin(() => null);\n\n plugin.meta = {\n id: id,\n name: id,\n sort: 100,\n type: PluginType.panel,\n module: '',\n baseUrl: '',\n info: {\n author: {\n name: '',\n },\n description: '',\n links: [],\n logos: {\n large: '',\n small: 'public/img/grafana_icon.svg',\n },\n screenshots: [],\n updated: '',\n version: '',\n },\n };\n\n return plugin;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VizPanel.js","sources":["../../../../src/components/VizPanel/VizPanel.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport {\n AbsoluteTimeRange,\n FieldConfigSource,\n PanelModel,\n PanelPlugin,\n toUtc,\n getPanelOptionsWithDefaults,\n ScopedVars,\n InterpolateFunction,\n CoreApp,\n DashboardCursorSync,\n PanelData,\n compareArrayValues,\n compareDataFrameStructures,\n applyFieldOverrides,\n PluginType,\n renderMarkdown,\n PanelPluginDataSupport,\n DataTopic,\n} from '@grafana/data';\nimport { PanelContext, SeriesVisibilityChangeMode, VizLegendOptions } from '@grafana/ui';\nimport { config, getAppEvents, getPluginImportUtils } from '@grafana/runtime';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { DeepPartial, SceneObject, SceneObjectState } from '../../core/types';\n\nimport { VizPanelRenderer } from './VizPanelRenderer';\nimport { VizPanelMenu } from './VizPanelMenu';\nimport { VariableDependencyConfig } from '../../variables/VariableDependencyConfig';\nimport { VariableCustomFormatterFn } from '../../variables/types';\nimport { seriesVisibilityConfigFactory } from './seriesVisibilityConfigFactory';\nimport { emptyPanelData } from '../../core/SceneDataNode';\nimport { changeSeriesColorConfigFactory } from './colorSeriesConfigFactory';\nimport { loadPanelPluginSync } from './registerRuntimePanelPlugin';\nimport { getCursorSyncScope } from '../../behaviors/CursorSync';\nimport { cloneDeep, isArray, isEmpty, merge, mergeWith } from 'lodash';\nimport { UserActionEvent } from '../../core/events';\nimport { evaluateTimeRange } from '../../utils/evaluateTimeRange';\nimport { LiveNowTimer } from '../../behaviors/LiveNowTimer';\nimport { registerQueryWithController, wrapPromiseInStateObservable } from '../../querying/registerQueryWithController';\nimport { SceneDataTransformer } from '../../querying/SceneDataTransformer';\nimport { SceneQueryRunner } from '../../querying/SceneQueryRunner';\nimport { buildPathIdFor } from '../../utils/pathId';\n\nexport interface VizPanelState<TOptions = {}, TFieldConfig = {}> extends SceneObjectState {\n /**\n * This is usually a plugin id that references a core plugin or an external plugin. But this can also reference a\n * runtime registered PanelPlugin registered via function registerScenePanelPlugin.\n */\n pluginId: string;\n title: string;\n description?: string;\n options: DeepPartial<TOptions>;\n fieldConfig: FieldConfigSource<DeepPartial<TFieldConfig>>;\n pluginVersion?: string;\n displayMode?: 'default' | 'transparent';\n /**\n * Only shows header on hover, absolutly positioned above the panel.\n */\n hoverHeader?: boolean;\n /**\n * Offset hoverHeader position on the y axis\n */\n hoverHeaderOffset?: number;\n /**\n * Only shows vizPanelMenu on hover if false, otherwise the menu is always visible in the header\n */\n showMenuAlways?: boolean;\n /**\n * Defines a menu in the top right of the panel. The menu object is only activated when the dropdown menu itself is shown.\n * So the best way to add dynamic menu actions and links is by adding them in a behavior attached to the menu.\n */\n menu?: VizPanelMenu;\n /**\n * Defines a menu that renders panel link.\n **/\n titleItems?: React.ReactNode | SceneObject | SceneObject[];\n seriesLimit?: number;\n seriesLimitShowAll?: boolean;\n /**\n * Add action to the top right panel header\n */\n headerActions?: React.ReactNode | SceneObject | SceneObject[];\n /**\n * Mainly for advanced use cases that need custom handling of PanelContext callbacks.\n */\n extendPanelContext?: (vizPanel: VizPanel, context: PanelContext) => void;\n\n /**\n * Sets panel chrome collapsed state\n */\n collapsible?: boolean;\n collapsed?: boolean;\n /** Marks object as a repeated object and a key pointer to source object */\n repeatSourceKey?: string;\n /**\n * @internal\n * Only for use from core to handle migration from old angular panels\n **/\n _UNSAFE_customMigrationHandler?: (panel: PanelModel, plugin: PanelPlugin) => void;\n /** Internal */\n _pluginLoadError?: string;\n /** Internal */\n _pluginInstanceState?: any;\n _renderCounter?: number;\n}\n\nexport class VizPanel<TOptions = {}, TFieldConfig extends {} = {}> extends SceneObjectBase<\n VizPanelState<TOptions, TFieldConfig>\n> {\n public static Component = VizPanelRenderer;\n\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['title', 'options', 'fieldConfig'],\n });\n\n // Not part of state as this is not serializable\n protected _panelContext?: PanelContext;\n private _plugin?: PanelPlugin;\n private _prevData?: PanelData;\n private _dataWithFieldConfig?: PanelData;\n private _structureRev = 0;\n\n public constructor(state: Partial<VizPanelState<TOptions, TFieldConfig>>) {\n super({\n options: {} as TOptions,\n fieldConfig: { defaults: {}, overrides: [] },\n title: t('grafana-scenes.components.viz-panel.title.title', 'Title'),\n pluginId: 'timeseries',\n _renderCounter: 0,\n ...state,\n });\n\n this.addActivationHandler(() => {\n this._onActivate();\n });\n\n state.menu?.addActivationHandler(() => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-menu-shown' }), true);\n });\n }\n\n private _onActivate() {\n if (!this._plugin) {\n this._loadPlugin(this.state.pluginId);\n }\n }\n\n public forceRender(): void {\n // Incrementing the render counter means VizRepeater and its children will also re-render\n this.setState({ _renderCounter: (this.state._renderCounter ?? 0) + 1 });\n }\n\n private async _loadPlugin(\n pluginId: string,\n overwriteOptions?: DeepPartial<{}>,\n overwriteFieldConfig?: FieldConfigSource,\n isAfterPluginChange?: boolean\n ) {\n const plugin = loadPanelPluginSync(pluginId);\n\n if (plugin) {\n this._pluginLoaded(plugin, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);\n } else {\n const { importPanelPlugin } = getPluginImportUtils();\n\n try {\n const panelPromise = importPanelPlugin(pluginId);\n\n const queryControler = sceneGraph.getQueryController(this);\n if (queryControler && queryControler.state.enableProfiling) {\n wrapPromiseInStateObservable(panelPromise)\n .pipe(registerQueryWithController({ type: `VizPanel/loadPlugin/${pluginId}`, origin: this }))\n .subscribe(() => {});\n }\n\n const result = await panelPromise;\n this._pluginLoaded(result, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);\n } catch (err: unknown) {\n this._pluginLoaded(getPanelPluginNotFound(pluginId));\n\n if (err instanceof Error) {\n this.setState({ _pluginLoadError: err.message });\n }\n }\n }\n }\n\n public getLegacyPanelId() {\n /**\n * The `/` part is here because a panel key can be in a clone chain\n * A clone chain looks like `panel-1-clone-0/grid-item-5/panel-14` where the last part is the panel key\n */\n const parts = this.state.key?.split('/') ?? [];\n\n if (parts.length === 0) {\n return 0;\n }\n\n const part = parts[parts.length - 1];\n const panelId = parseInt(part!.replace('panel-', ''), 10);\n\n if (isNaN(panelId)) {\n return 0;\n }\n\n return panelId;\n }\n\n /**\n * Unique id string that includes local variable values (for repeated panels)\n */\n public getPathId() {\n return buildPathIdFor(this);\n }\n\n private async _pluginLoaded(\n plugin: PanelPlugin,\n overwriteOptions?: DeepPartial<{}>,\n overwriteFieldConfig?: FieldConfigSource,\n isAfterPluginChange?: boolean\n ) {\n const { options, fieldConfig, title, pluginVersion, _UNSAFE_customMigrationHandler } = this.state;\n\n const panel: PanelModel = {\n title,\n options,\n fieldConfig,\n id: this.getLegacyPanelId(),\n type: plugin.meta.id,\n pluginVersion: pluginVersion,\n };\n\n if (overwriteOptions) {\n panel.options = overwriteOptions;\n }\n\n if (overwriteFieldConfig) {\n panel.fieldConfig = overwriteFieldConfig;\n }\n\n const currentVersion = this._getPluginVersion(plugin);\n\n _UNSAFE_customMigrationHandler?.(panel, plugin);\n\n //@ts-expect-error (TODO: remove after upgrading with https://github.com/grafana/grafana/pull/108998)\n const needsMigration = currentVersion !== pluginVersion || plugin.shouldMigrate?.(panel);\n\n if (plugin.onPanelMigration && needsMigration && !isAfterPluginChange) {\n // These migration handlers also mutate panel.fieldConfig to migrate fieldConfig\n panel.options = await plugin.onPanelMigration(panel);\n }\n\n // Some panels mutate the transformations on the panel as part of migrations.\n // Unfortunately, these mutations are not available until the panel plugin is loaded.\n // At this time, the data provider is already set, so this is the easiest way to fix it.\n let $data = this.state.$data;\n if (panel.transformations && $data) {\n if ($data instanceof SceneDataTransformer) {\n $data.setState({ transformations: panel.transformations });\n } else if ($data instanceof SceneQueryRunner) {\n $data.clearParent();\n $data = new SceneDataTransformer({\n transformations: panel.transformations,\n $data,\n });\n }\n }\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin,\n currentOptions: panel.options,\n currentFieldConfig: panel.fieldConfig,\n isAfterPluginChange: isAfterPluginChange ?? false,\n });\n\n this._plugin = plugin;\n\n this.setState({\n $data,\n options: withDefaults.options as DeepPartial<TOptions>,\n fieldConfig: withDefaults.fieldConfig,\n pluginVersion: currentVersion,\n pluginId: plugin.meta.id,\n });\n\n // Non data panels needs to be re-rendered when time range change\n if (plugin.meta.skipDataQuery) {\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n this._subs.add(sceneTimeRange.subscribeToState(() => this.forceRender()));\n }\n }\n\n private _getPluginVersion(plugin: PanelPlugin): string {\n return plugin && plugin.meta.info.version ? plugin.meta.info.version : config.buildInfo.version;\n }\n\n public getPlugin(): PanelPlugin | undefined {\n return this._plugin;\n }\n\n public getPanelContext(): PanelContext {\n this._panelContext ??= this.buildPanelContext();\n\n return this._panelContext!;\n }\n\n public onTimeRangeChange = (timeRange: AbsoluteTimeRange) => {\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n sceneTimeRange.onTimeRangeChange({\n raw: {\n from: toUtc(timeRange.from),\n to: toUtc(timeRange.to),\n },\n from: toUtc(timeRange.from),\n to: toUtc(timeRange.to),\n });\n };\n\n public getTimeRange = (data?: PanelData) => {\n const liveNowTimer = sceneGraph.findObject(this, (o) => o instanceof LiveNowTimer);\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n\n if (liveNowTimer instanceof LiveNowTimer && liveNowTimer.isEnabled) {\n return evaluateTimeRange(\n sceneTimeRange.state.from,\n sceneTimeRange.state.to,\n sceneTimeRange.getTimeZone(),\n sceneTimeRange.state.fiscalYearStartMonth,\n sceneTimeRange.state.UNSAFE_nowDelay,\n sceneTimeRange.state.weekStart\n );\n }\n\n const plugin = this.getPlugin();\n if (plugin && !plugin.meta.skipDataQuery && data && data.timeRange) {\n return data.timeRange;\n }\n\n return sceneTimeRange.state.value;\n };\n\n public async changePluginType(pluginId: string, newOptions?: DeepPartial<{}>, newFieldConfig?: FieldConfigSource) {\n const { options: prevOptions, fieldConfig: prevFieldConfig, pluginId: prevPluginId } = this.state;\n\n //clear field config cache to update it later\n this._dataWithFieldConfig = undefined;\n\n // If state.pluginId is already the correct plugin we don't treat this as plain user panel type change\n const isAfterPluginChange = this.state.pluginId !== pluginId;\n await this._loadPlugin(pluginId, newOptions ?? {}, newFieldConfig, isAfterPluginChange);\n\n const panel: PanelModel = {\n title: this.state.title,\n options: this.state.options,\n fieldConfig: this.state.fieldConfig,\n id: 1,\n type: pluginId,\n };\n\n // onPanelTypeChanged is mainly used by plugins to migrate from Angular to React.\n // For example, this will migrate options from 'graph' to 'timeseries' if the previous and new plugin ID matches.\n const updatedOptions = this._plugin?.onPanelTypeChanged?.(panel, prevPluginId, prevOptions, prevFieldConfig);\n\n if (updatedOptions && !isEmpty(updatedOptions)) {\n this.onOptionsChange(updatedOptions, true, true);\n }\n }\n\n public onTitleChange = (title: string) => {\n this.setState({ title });\n };\n\n public onDescriptionChange = (description: string) => {\n this.setState({ description });\n };\n\n public onDisplayModeChange = (displayMode: 'default' | 'transparent') => {\n this.setState({ displayMode });\n };\n\n public onToggleCollapse = (collapsed: boolean) => {\n this.setState({\n collapsed,\n });\n };\n\n public onOptionsChange = (optionsUpdate: DeepPartial<TOptions>, replace = false, isAfterPluginChange = false) => {\n const { fieldConfig, options } = this.state;\n\n // When replace is true, we want to replace the entire options object. Default will be applied.\n const nextOptions = replace\n ? optionsUpdate\n : mergeWith(cloneDeep(options), optionsUpdate, (objValue, srcValue, key, obj) => {\n if (isArray(srcValue)) {\n return srcValue;\n }\n // If customizer returns undefined, merging is handled by the method instead\n // so we need to override the value in the object instead\n if (objValue !== srcValue && typeof srcValue === 'undefined') {\n obj[key] = srcValue;\n return;\n }\n return;\n });\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin: this._plugin!,\n currentOptions: nextOptions,\n currentFieldConfig: fieldConfig,\n isAfterPluginChange: isAfterPluginChange,\n });\n\n this.setState({\n options: withDefaults.options as DeepPartial<TOptions>,\n _renderCounter: (this.state._renderCounter ?? 0) + 1,\n });\n };\n\n public onFieldConfigChange = (fieldConfigUpdate: FieldConfigSource<DeepPartial<TFieldConfig>>, replace?: boolean) => {\n const { fieldConfig, options } = this.state;\n\n // When replace is true, we want to replace the entire field config. Default will be applied.\n const nextFieldConfig = replace ? fieldConfigUpdate : merge(cloneDeep(fieldConfig), fieldConfigUpdate);\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin: this._plugin!,\n currentOptions: options,\n currentFieldConfig: nextFieldConfig,\n isAfterPluginChange: false,\n });\n\n this._dataWithFieldConfig = undefined;\n this.setState({ fieldConfig: withDefaults.fieldConfig });\n };\n\n public interpolate = ((value: string, scoped?: ScopedVars, format?: string | VariableCustomFormatterFn) => {\n return sceneGraph.interpolate(this, value, scoped, format);\n }) as InterpolateFunction;\n\n public getDescription = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-description-shown' }), true);\n\n const { description } = this.state;\n if (description) {\n const markdown = this.interpolate(description);\n return renderMarkdown(markdown);\n }\n return '';\n };\n\n public clearFieldConfigCache() {\n this._dataWithFieldConfig = undefined;\n }\n\n /**\n * Called from the react render path to apply the field config to the data provided by the data provider\n */\n public applyFieldConfig(rawData?: PanelData): PanelData {\n const plugin = this._plugin;\n\n if (!plugin || plugin.meta.skipDataQuery || !rawData) {\n // TODO setup time range subscription instead\n return emptyPanelData;\n }\n\n // If the data is the same as last time, we can skip the field config apply step and just return same result as last time\n if (this._prevData === rawData && this._dataWithFieldConfig) {\n return this._dataWithFieldConfig;\n }\n\n const pluginDataSupport: PanelPluginDataSupport = plugin.dataSupport || { alertStates: false, annotations: false };\n\n const fieldConfigRegistry = plugin.fieldConfigRegistry;\n const prevFrames = this._dataWithFieldConfig?.series ?? [];\n const newFrames = applyFieldOverrides({\n data: rawData.series,\n fieldConfig: this.state.fieldConfig,\n fieldConfigRegistry,\n replaceVariables: this.interpolate,\n theme: config.theme2,\n timeZone: rawData.request?.timezone,\n });\n\n if (!compareArrayValues(newFrames, prevFrames, compareDataFrameStructures)) {\n this._structureRev++;\n }\n\n this._dataWithFieldConfig = {\n ...rawData,\n structureRev: this._structureRev,\n series: newFrames,\n };\n\n if (this._dataWithFieldConfig.annotations) {\n this._dataWithFieldConfig.annotations = applyFieldOverrides({\n data: this._dataWithFieldConfig.annotations,\n fieldConfig: {\n defaults: {},\n overrides: [...this.state.fieldConfig.overrides],\n },\n fieldConfigRegistry,\n replaceVariables: this.interpolate,\n theme: config.theme2,\n timeZone: rawData.request?.timezone,\n // @ts-ignore\n dataTopic: DataTopic.Annotations,\n });\n }\n\n if (!pluginDataSupport.alertStates) {\n this._dataWithFieldConfig.alertState = undefined;\n }\n\n if (!pluginDataSupport.annotations) {\n this._dataWithFieldConfig.annotations = undefined;\n }\n\n this._prevData = rawData;\n return this._dataWithFieldConfig;\n }\n\n public onCancelQuery = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-cancel-query-clicked' }), true);\n const data = sceneGraph.getData(this);\n data.cancelQuery?.();\n };\n\n public onStatusMessageClick = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-status-message-clicked' }), true);\n };\n\n /**\n * Panel context functions\n */\n private _onSeriesColorChange = (label: string, color: string) => {\n this.onFieldConfigChange(changeSeriesColorConfigFactory(label, color, this.state.fieldConfig));\n };\n\n private _onSeriesVisibilityChange = (label: string, mode: SeriesVisibilityChangeMode) => {\n if (!this._dataWithFieldConfig) {\n return;\n }\n\n this.onFieldConfigChange(\n seriesVisibilityConfigFactory(label, mode, this.state.fieldConfig, this._dataWithFieldConfig.series),\n true\n );\n };\n\n private _onAnnotationVisibilityChange = (label: string, mode: SeriesVisibilityChangeMode) => {\n if (!this._dataWithFieldConfig) {\n return;\n }\n\n this.onFieldConfigChange(\n seriesVisibilityConfigFactory(\n label,\n mode,\n this.state.fieldConfig,\n this._dataWithFieldConfig.annotations ?? [],\n DataTopic.Annotations\n ),\n true\n );\n };\n\n private _onInstanceStateChange = (state: any) => {\n if (this._panelContext) {\n this._panelContext = {\n ...this._panelContext,\n instanceState: state,\n };\n }\n\n this.setState({ _pluginInstanceState: state });\n };\n\n private _onToggleLegendSort = (sortKey: string) => {\n const legendOptions: VizLegendOptions = (this.state.options as any).legend;\n\n // We don't want to do anything when legend options are not available\n if (!legendOptions) {\n return;\n }\n\n let sortDesc = legendOptions.sortDesc;\n let sortBy = legendOptions.sortBy;\n if (sortKey !== sortBy) {\n sortDesc = undefined;\n }\n\n // if already sort ascending, disable sorting\n if (sortDesc === false) {\n sortBy = undefined;\n sortDesc = undefined;\n } else {\n sortDesc = !sortDesc;\n sortBy = sortKey;\n }\n\n this.onOptionsChange(\n {\n ...this.state.options,\n legend: { ...legendOptions, sortBy, sortDesc },\n } as TOptions,\n true\n );\n };\n\n public clone(withState?: Partial<VizPanelState>) {\n // Clear _pluginInstanceState and _pluginLoadError as it's not safe to clone\n return super.clone({ _pluginInstanceState: undefined, _pluginLoadError: undefined, ...withState });\n }\n\n private buildPanelContext(): PanelContext {\n const sync = getCursorSyncScope(this);\n\n const context = {\n eventsScope: sync ? sync.getEventsScope() : '__global_',\n eventBus: sync ? sync.getEventsBus(this) : getAppEvents(),\n app: CoreApp.Unknown,\n sync: () => {\n if (sync) {\n return sync.state.sync;\n }\n return DashboardCursorSync.Off;\n },\n onSeriesColorChange: this._onSeriesColorChange,\n onToggleSeriesVisibility: this._onSeriesVisibilityChange,\n onAnnotationVisibilityChange: this._onAnnotationVisibilityChange,\n onToggleLegendSort: this._onToggleLegendSort,\n onInstanceStateChange: this._onInstanceStateChange,\n };\n\n if (this.state.extendPanelContext) {\n this.state.extendPanelContext(this, context);\n }\n\n return context;\n }\n}\n\nfunction getPanelPluginNotFound(id: string): PanelPlugin {\n const plugin = new PanelPlugin(() => null);\n\n plugin.meta = {\n id: id,\n name: id,\n sort: 100,\n type: PluginType.panel,\n module: '',\n baseUrl: '',\n info: {\n author: {\n name: '',\n },\n description: '',\n links: [],\n logos: {\n large: '',\n small: 'public/img/grafana_icon.svg',\n },\n screenshots: [],\n updated: '',\n version: '',\n },\n };\n\n return plugin;\n}\n"],"names":[],"mappings":"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"}
@@ -3,20 +3,25 @@ import { SeriesVisibilityChangeMode } from '@grafana/ui';
3
3
 
4
4
  const displayOverrideRef = "hideSeriesFrom";
5
5
  const isHideSeriesOverride = isSystemOverrideWithRef(displayOverrideRef);
6
- function seriesVisibilityConfigFactory(label, mode, fieldConfig, data) {
6
+ function seriesVisibilityConfigFactory(label, mode, fieldConfig, data, dataTopic) {
7
7
  const { overrides } = fieldConfig;
8
8
  const displayName = label;
9
9
  const currentIndex = overrides.findIndex(isHideSeriesOverride);
10
10
  if (currentIndex < 0) {
11
11
  if (mode === SeriesVisibilityChangeMode.ToggleSelection) {
12
- const override3 = createOverride([displayName, ...getNamesOfHiddenFields(overrides, data)]);
12
+ const override3 = createOverride(
13
+ [displayName, ...getNamesOfHiddenFields(overrides, data)],
14
+ void 0,
15
+ void 0,
16
+ dataTopic
17
+ );
13
18
  return {
14
19
  ...fieldConfig,
15
20
  overrides: [...fieldConfig.overrides, override3]
16
21
  };
17
22
  }
18
23
  const displayNames = getDisplayNames(data, displayName);
19
- const override2 = createOverride(displayNames);
24
+ const override2 = createOverride(displayNames, void 0, void 0, dataTopic);
20
25
  return {
21
26
  ...fieldConfig,
22
27
  overrides: [...fieldConfig.overrides, override2]
@@ -36,13 +41,13 @@ function seriesVisibilityConfigFactory(label, mode, fieldConfig, data) {
36
41
  overrides: overridesCopy
37
42
  };
38
43
  }
39
- const override2 = createOverride([displayName, ...nameOfHiddenFields]);
44
+ const override2 = createOverride([displayName, ...nameOfHiddenFields], void 0, void 0, dataTopic);
40
45
  return {
41
46
  ...fieldConfig,
42
47
  overrides: [...overridesCopy, override2]
43
48
  };
44
49
  }
45
- const override = createExtendedOverride(current, displayName);
50
+ const override = createExtendedOverride(current, displayName, void 0, dataTopic);
46
51
  if (allFieldsAreExcluded(override, data)) {
47
52
  return {
48
53
  ...fieldConfig,
@@ -54,7 +59,7 @@ function seriesVisibilityConfigFactory(label, mode, fieldConfig, data) {
54
59
  overrides: [...overridesCopy, override]
55
60
  };
56
61
  }
57
- function createOverride(names, mode = ByNamesMatcherMode.exclude, property) {
62
+ function createOverride(names, mode = ByNamesMatcherMode.exclude, property, dataTopic) {
58
63
  property = property != null ? property : {
59
64
  id: "custom.hideFrom",
60
65
  value: {
@@ -83,10 +88,12 @@ function createOverride(names, mode = ByNamesMatcherMode.exclude, property) {
83
88
  tooltip: true
84
89
  }
85
90
  }
86
- ]
91
+ ],
92
+ // @ts-ignore
93
+ dataTopic
87
94
  };
88
95
  }
89
- const createExtendedOverride = (current, displayName, mode = ByNamesMatcherMode.exclude) => {
96
+ const createExtendedOverride = (current, displayName, mode = ByNamesMatcherMode.exclude, dataTopic) => {
90
97
  const property = current.properties.find((p) => p.id === "custom.hideFrom");
91
98
  const existing = getExistingDisplayNames(current);
92
99
  const index = existing.findIndex((name) => name === displayName);
@@ -95,7 +102,7 @@ const createExtendedOverride = (current, displayName, mode = ByNamesMatcherMode.
95
102
  } else {
96
103
  existing.splice(index, 1);
97
104
  }
98
- return createOverride(existing, mode, property);
105
+ return createOverride(existing, mode, property, dataTopic);
99
106
  };
100
107
  const getExistingDisplayNames = (rule) => {
101
108
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"seriesVisibilityConfigFactory.js","sources":["../../../../src/components/VizPanel/seriesVisibilityConfigFactory.ts"],"sourcesContent":["import {\n ByNamesMatcherMode,\n ConfigOverrideRule,\n DataFrame,\n DynamicConfigValue,\n FieldConfigSource,\n FieldMatcherID,\n fieldMatchers,\n FieldType,\n getFieldDisplayName,\n isSystemOverrideWithRef,\n SystemConfigOverrideRule,\n} from '@grafana/data';\nimport { SeriesVisibilityChangeMode } from '@grafana/ui';\n\nconst displayOverrideRef = 'hideSeriesFrom';\nconst isHideSeriesOverride = isSystemOverrideWithRef(displayOverrideRef);\n\nexport function seriesVisibilityConfigFactory(\n label: string,\n mode: SeriesVisibilityChangeMode,\n fieldConfig: FieldConfigSource,\n data: DataFrame[]\n): FieldConfigSource {\n const { overrides } = fieldConfig;\n\n const displayName = label;\n const currentIndex = overrides.findIndex(isHideSeriesOverride);\n\n if (currentIndex < 0) {\n if (mode === SeriesVisibilityChangeMode.ToggleSelection) {\n const override = createOverride([displayName, ...getNamesOfHiddenFields(overrides, data)]);\n\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, override],\n };\n }\n\n const displayNames = getDisplayNames(data, displayName);\n const override = createOverride(displayNames);\n\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, override],\n };\n }\n\n const overridesCopy = Array.from(overrides);\n const [current] = overridesCopy.splice(currentIndex, 1) as SystemConfigOverrideRule[];\n\n if (mode === SeriesVisibilityChangeMode.ToggleSelection) {\n let existing = getExistingDisplayNames(current);\n const nameOfHiddenFields = getNamesOfHiddenFields(overridesCopy, data);\n\n if (nameOfHiddenFields.length > 0) {\n existing = existing.filter((el) => nameOfHiddenFields.indexOf(el) < 0);\n }\n\n if (existing[0] === displayName && existing.length === 1) {\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n const override = createOverride([displayName, ...nameOfHiddenFields]);\n\n return {\n ...fieldConfig,\n overrides: [...overridesCopy, override],\n };\n }\n\n const override = createExtendedOverride(current, displayName);\n\n if (allFieldsAreExcluded(override, data)) {\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n return {\n ...fieldConfig,\n overrides: [...overridesCopy, override],\n };\n}\n\nfunction createOverride(\n names: string[],\n mode = ByNamesMatcherMode.exclude,\n property?: DynamicConfigValue\n): SystemConfigOverrideRule {\n property = property ?? {\n id: 'custom.hideFrom',\n value: {\n viz: true,\n legend: false,\n tooltip: true,\n },\n };\n\n return {\n __systemRef: displayOverrideRef,\n matcher: {\n id: FieldMatcherID.byNames,\n options: {\n mode: mode,\n names: names,\n prefix: mode === ByNamesMatcherMode.exclude ? 'All except:' : undefined,\n readOnly: true,\n },\n },\n properties: [\n {\n ...property,\n value: {\n viz: true,\n legend: false,\n tooltip: true,\n },\n },\n ],\n };\n}\n\nconst createExtendedOverride = (\n current: SystemConfigOverrideRule,\n displayName: string,\n mode = ByNamesMatcherMode.exclude\n): SystemConfigOverrideRule => {\n const property = current.properties.find((p) => p.id === 'custom.hideFrom');\n const existing = getExistingDisplayNames(current);\n const index = existing.findIndex((name) => name === displayName);\n\n if (index < 0) {\n existing.push(displayName);\n } else {\n existing.splice(index, 1);\n }\n\n return createOverride(existing, mode, property);\n};\n\nconst getExistingDisplayNames = (rule: SystemConfigOverrideRule): string[] => {\n const names = rule.matcher.options?.names;\n if (!Array.isArray(names)) {\n return [];\n }\n return [...names];\n};\n\nconst allFieldsAreExcluded = (override: SystemConfigOverrideRule, data: DataFrame[]): boolean => {\n return getExistingDisplayNames(override).length === getDisplayNames(data).length;\n};\n\nconst getDisplayNames = (data: DataFrame[], excludeName?: string): string[] => {\n const unique = new Set<string>();\n\n for (const frame of data) {\n for (const field of frame.fields) {\n if (field.type !== FieldType.number) {\n continue;\n }\n\n const name = getFieldDisplayName(field, frame, data);\n\n if (name === excludeName) {\n continue;\n }\n\n unique.add(name);\n }\n }\n\n return Array.from(unique);\n};\n\nconst getNamesOfHiddenFields = (overrides: ConfigOverrideRule[], data: DataFrame[]): string[] => {\n let names: string[] = [];\n\n for (const override of overrides) {\n const property = override.properties.find((p) => p.id === 'custom.hideFrom');\n\n if (property !== undefined && property.value?.legend === true) {\n const info = fieldMatchers.get(override.matcher.id);\n const matcher = info.get(override.matcher.options);\n\n for (const frame of data) {\n for (const field of frame.fields) {\n if (field.type !== FieldType.number) {\n continue;\n }\n\n const name = getFieldDisplayName(field, frame, data);\n\n if (matcher(field, frame, data)) {\n names.push(name);\n }\n }\n }\n }\n }\n\n return names;\n};\n"],"names":["override"],"mappings":";;;AAeA,MAAM,kBAAqB,GAAA,gBAAA;AAC3B,MAAM,oBAAA,GAAuB,wBAAwB,kBAAkB,CAAA;AAEhE,SAAS,6BACd,CAAA,KAAA,EACA,IACA,EAAA,WAAA,EACA,IACmB,EAAA;AACnB,EAAM,MAAA,EAAE,WAAc,GAAA,WAAA;AAEtB,EAAA,MAAM,WAAc,GAAA,KAAA;AACpB,EAAM,MAAA,YAAA,GAAe,SAAU,CAAA,SAAA,CAAU,oBAAoB,CAAA;AAE7D,EAAA,IAAI,eAAe,CAAG,EAAA;AACpB,IAAI,IAAA,IAAA,KAAS,2BAA2B,eAAiB,EAAA;AACvD,MAAMA,MAAAA,SAAAA,GAAW,eAAe,CAAC,WAAA,EAAa,GAAG,sBAAuB,CAAA,SAAA,EAAW,IAAI,CAAC,CAAC,CAAA;AAEzF,MAAO,OAAA;AAAA,QACL,GAAG,WAAA;AAAA,QACH,SAAW,EAAA,CAAC,GAAG,WAAA,CAAY,WAAWA,SAAQ;AAAA,OAChD;AAAA;AAGF,IAAM,MAAA,YAAA,GAAe,eAAgB,CAAA,IAAA,EAAM,WAAW,CAAA;AACtD,IAAMA,MAAAA,SAAAA,GAAW,eAAe,YAAY,CAAA;AAE5C,IAAO,OAAA;AAAA,MACL,GAAG,WAAA;AAAA,MACH,SAAW,EAAA,CAAC,GAAG,WAAA,CAAY,WAAWA,SAAQ;AAAA,KAChD;AAAA;AAGF,EAAM,MAAA,aAAA,GAAgB,KAAM,CAAA,IAAA,CAAK,SAAS,CAAA;AAC1C,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,aAAc,CAAA,MAAA,CAAO,cAAc,CAAC,CAAA;AAEtD,EAAI,IAAA,IAAA,KAAS,2BAA2B,eAAiB,EAAA;AACvD,IAAI,IAAA,QAAA,GAAW,wBAAwB,OAAO,CAAA;AAC9C,IAAM,MAAA,kBAAA,GAAqB,sBAAuB,CAAA,aAAA,EAAe,IAAI,CAAA;AAErE,IAAI,IAAA,kBAAA,CAAmB,SAAS,CAAG,EAAA;AACjC,MAAW,QAAA,GAAA,QAAA,CAAS,OAAO,CAAC,EAAA,KAAO,mBAAmB,OAAQ,CAAA,EAAE,IAAI,CAAC,CAAA;AAAA;AAGvE,IAAA,IAAI,SAAS,CAAC,CAAA,KAAM,WAAe,IAAA,QAAA,CAAS,WAAW,CAAG,EAAA;AACxD,MAAO,OAAA;AAAA,QACL,GAAG,WAAA;AAAA,QACH,SAAW,EAAA;AAAA,OACb;AAAA;AAGF,IAAA,MAAMA,YAAW,cAAe,CAAA,CAAC,WAAa,EAAA,GAAG,kBAAkB,CAAC,CAAA;AAEpE,IAAO,OAAA;AAAA,MACL,GAAG,WAAA;AAAA,MACH,SAAW,EAAA,CAAC,GAAG,aAAA,EAAeA,SAAQ;AAAA,KACxC;AAAA;AAGF,EAAM,MAAA,QAAA,GAAW,sBAAuB,CAAA,OAAA,EAAS,WAAW,CAAA;AAE5D,EAAI,IAAA,oBAAA,CAAqB,QAAU,EAAA,IAAI,CAAG,EAAA;AACxC,IAAO,OAAA;AAAA,MACL,GAAG,WAAA;AAAA,MACH,SAAW,EAAA;AAAA,KACb;AAAA;AAGF,EAAO,OAAA;AAAA,IACL,GAAG,WAAA;AAAA,IACH,SAAW,EAAA,CAAC,GAAG,aAAA,EAAe,QAAQ;AAAA,GACxC;AACF;AAEA,SAAS,cACP,CAAA,KAAA,EACA,IAAO,GAAA,kBAAA,CAAmB,SAC1B,QAC0B,EAAA;AAC1B,EAAA,QAAA,GAAW,QAAY,IAAA,IAAA,GAAA,QAAA,GAAA;AAAA,IACrB,EAAI,EAAA,iBAAA;AAAA,IACJ,KAAO,EAAA;AAAA,MACL,GAAK,EAAA,IAAA;AAAA,MACL,MAAQ,EAAA,KAAA;AAAA,MACR,OAAS,EAAA;AAAA;AACX,GACF;AAEA,EAAO,OAAA;AAAA,IACL,WAAa,EAAA,kBAAA;AAAA,IACb,OAAS,EAAA;AAAA,MACP,IAAI,cAAe,CAAA,OAAA;AAAA,MACnB,OAAS,EAAA;AAAA,QACP,IAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAQ,EAAA,IAAA,KAAS,kBAAmB,CAAA,OAAA,GAAU,aAAgB,GAAA,MAAA;AAAA,QAC9D,QAAU,EAAA;AAAA;AACZ,KACF;AAAA,IACA,UAAY,EAAA;AAAA,MACV;AAAA,QACE,GAAG,QAAA;AAAA,QACH,KAAO,EAAA;AAAA,UACL,GAAK,EAAA,IAAA;AAAA,UACL,MAAQ,EAAA,KAAA;AAAA,UACR,OAAS,EAAA;AAAA;AACX;AACF;AACF,GACF;AACF;AAEA,MAAM,yBAAyB,CAC7B,OAAA,EACA,WACA,EAAA,IAAA,GAAO,mBAAmB,OACG,KAAA;AAC7B,EAAM,MAAA,QAAA,GAAW,QAAQ,UAAW,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,iBAAiB,CAAA;AAC1E,EAAM,MAAA,QAAA,GAAW,wBAAwB,OAAO,CAAA;AAChD,EAAA,MAAM,QAAQ,QAAS,CAAA,SAAA,CAAU,CAAC,IAAA,KAAS,SAAS,WAAW,CAAA;AAE/D,EAAA,IAAI,QAAQ,CAAG,EAAA;AACb,IAAA,QAAA,CAAS,KAAK,WAAW,CAAA;AAAA,GACpB,MAAA;AACL,IAAS,QAAA,CAAA,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA;AAG1B,EAAO,OAAA,cAAA,CAAe,QAAU,EAAA,IAAA,EAAM,QAAQ,CAAA;AAChD,CAAA;AAEA,MAAM,uBAAA,GAA0B,CAAC,IAA6C,KAAA;AAjJ9E,EAAA,IAAA,EAAA;AAkJE,EAAA,MAAM,KAAQ,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,KAAb,IAAsB,GAAA,MAAA,GAAA,EAAA,CAAA,KAAA;AACpC,EAAA,IAAI,CAAC,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAG,EAAA;AACzB,IAAA,OAAO,EAAC;AAAA;AAEV,EAAO,OAAA,CAAC,GAAG,KAAK,CAAA;AAClB,CAAA;AAEA,MAAM,oBAAA,GAAuB,CAAC,QAAA,EAAoC,IAA+B,KAAA;AAC/F,EAAA,OAAO,wBAAwB,QAAQ,CAAA,CAAE,MAAW,KAAA,eAAA,CAAgB,IAAI,CAAE,CAAA,MAAA;AAC5E,CAAA;AAEA,MAAM,eAAA,GAAkB,CAAC,IAAA,EAAmB,WAAmC,KAAA;AAC7E,EAAM,MAAA,MAAA,uBAAa,GAAY,EAAA;AAE/B,EAAA,KAAA,MAAW,SAAS,IAAM,EAAA;AACxB,IAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,MAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,MAAQ,EAAA;AACnC,QAAA;AAAA;AAGF,MAAA,MAAM,IAAO,GAAA,mBAAA,CAAoB,KAAO,EAAA,KAAA,EAAO,IAAI,CAAA;AAEnD,MAAA,IAAI,SAAS,WAAa,EAAA;AACxB,QAAA;AAAA;AAGF,MAAA,MAAA,CAAO,IAAI,IAAI,CAAA;AAAA;AACjB;AAGF,EAAO,OAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AAC1B,CAAA;AAEA,MAAM,sBAAA,GAAyB,CAAC,SAAA,EAAiC,IAAgC,KAAA;AAnLjG,EAAA,IAAA,EAAA;AAoLE,EAAA,IAAI,QAAkB,EAAC;AAEvB,EAAA,KAAA,MAAW,YAAY,SAAW,EAAA;AAChC,IAAM,MAAA,QAAA,GAAW,SAAS,UAAW,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,iBAAiB,CAAA;AAE3E,IAAA,IAAI,aAAa,MAAa,IAAA,CAAA,CAAA,EAAA,GAAA,QAAA,CAAS,KAAT,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,YAAW,IAAM,EAAA;AAC7D,MAAA,MAAM,IAAO,GAAA,aAAA,CAAc,GAAI,CAAA,QAAA,CAAS,QAAQ,EAAE,CAAA;AAClD,MAAA,MAAM,OAAU,GAAA,IAAA,CAAK,GAAI,CAAA,QAAA,CAAS,QAAQ,OAAO,CAAA;AAEjD,MAAA,KAAA,MAAW,SAAS,IAAM,EAAA;AACxB,QAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,UAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,MAAQ,EAAA;AACnC,YAAA;AAAA;AAGF,UAAA,MAAM,IAAO,GAAA,mBAAA,CAAoB,KAAO,EAAA,KAAA,EAAO,IAAI,CAAA;AAEnD,UAAA,IAAI,OAAQ,CAAA,KAAA,EAAO,KAAO,EAAA,IAAI,CAAG,EAAA;AAC/B,YAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA;AACjB;AACF;AACF;AACF;AAGF,EAAO,OAAA,KAAA;AACT,CAAA;;;;"}
1
+ {"version":3,"file":"seriesVisibilityConfigFactory.js","sources":["../../../../src/components/VizPanel/seriesVisibilityConfigFactory.ts"],"sourcesContent":["import {\n ByNamesMatcherMode,\n ConfigOverrideRule,\n DataFrame,\n DataTopic,\n DynamicConfigValue,\n FieldConfigSource,\n FieldMatcherID,\n fieldMatchers,\n FieldType,\n getFieldDisplayName,\n isSystemOverrideWithRef,\n SystemConfigOverrideRule,\n} from '@grafana/data';\nimport { SeriesVisibilityChangeMode } from '@grafana/ui';\n\nconst displayOverrideRef = 'hideSeriesFrom';\nconst isHideSeriesOverride = isSystemOverrideWithRef(displayOverrideRef);\n\nexport function seriesVisibilityConfigFactory(\n label: string,\n mode: SeriesVisibilityChangeMode,\n fieldConfig: FieldConfigSource,\n data: DataFrame[],\n dataTopic?: DataTopic\n): FieldConfigSource {\n const { overrides } = fieldConfig;\n\n const displayName = label;\n const currentIndex = overrides.findIndex(isHideSeriesOverride);\n\n if (currentIndex < 0) {\n if (mode === SeriesVisibilityChangeMode.ToggleSelection) {\n const override = createOverride(\n [displayName, ...getNamesOfHiddenFields(overrides, data)],\n undefined,\n undefined,\n dataTopic\n );\n\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, override],\n };\n }\n\n const displayNames = getDisplayNames(data, displayName);\n const override = createOverride(displayNames, undefined, undefined, dataTopic);\n\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, override],\n };\n }\n\n const overridesCopy = Array.from(overrides);\n const [current] = overridesCopy.splice(currentIndex, 1) as SystemConfigOverrideRule[];\n\n if (mode === SeriesVisibilityChangeMode.ToggleSelection) {\n let existing = getExistingDisplayNames(current);\n const nameOfHiddenFields = getNamesOfHiddenFields(overridesCopy, data);\n\n if (nameOfHiddenFields.length > 0) {\n existing = existing.filter((el) => nameOfHiddenFields.indexOf(el) < 0);\n }\n\n if (existing[0] === displayName && existing.length === 1) {\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n const override = createOverride([displayName, ...nameOfHiddenFields], undefined, undefined, dataTopic);\n\n return {\n ...fieldConfig,\n overrides: [...overridesCopy, override],\n };\n }\n\n const override = createExtendedOverride(current, displayName, undefined, dataTopic);\n\n if (allFieldsAreExcluded(override, data)) {\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n return {\n ...fieldConfig,\n overrides: [...overridesCopy, override],\n };\n}\n\nfunction createOverride(\n names: string[],\n mode = ByNamesMatcherMode.exclude,\n property?: DynamicConfigValue,\n dataTopic?: DataTopic\n): SystemConfigOverrideRule {\n property = property ?? {\n id: 'custom.hideFrom',\n value: {\n viz: true,\n legend: false,\n tooltip: true,\n },\n };\n\n return {\n __systemRef: displayOverrideRef,\n matcher: {\n id: FieldMatcherID.byNames,\n options: {\n mode: mode,\n names: names,\n prefix: mode === ByNamesMatcherMode.exclude ? 'All except:' : undefined,\n readOnly: true,\n },\n },\n properties: [\n {\n ...property,\n value: {\n viz: true,\n legend: false,\n tooltip: true,\n },\n },\n ],\n // @ts-ignore\n dataTopic: dataTopic,\n };\n}\n\nconst createExtendedOverride = (\n current: SystemConfigOverrideRule,\n displayName: string,\n mode = ByNamesMatcherMode.exclude,\n dataTopic?: DataTopic\n): SystemConfigOverrideRule => {\n const property = current.properties.find((p) => p.id === 'custom.hideFrom');\n const existing = getExistingDisplayNames(current);\n const index = existing.findIndex((name) => name === displayName);\n\n if (index < 0) {\n existing.push(displayName);\n } else {\n existing.splice(index, 1);\n }\n\n return createOverride(existing, mode, property, dataTopic);\n};\n\nconst getExistingDisplayNames = (rule: SystemConfigOverrideRule): string[] => {\n const names = rule.matcher.options?.names;\n if (!Array.isArray(names)) {\n return [];\n }\n return [...names];\n};\n\nconst allFieldsAreExcluded = (override: SystemConfigOverrideRule, data: DataFrame[]): boolean => {\n return getExistingDisplayNames(override).length === getDisplayNames(data).length;\n};\n\nconst getDisplayNames = (data: DataFrame[], excludeName?: string): string[] => {\n const unique = new Set<string>();\n\n for (const frame of data) {\n for (const field of frame.fields) {\n if (field.type !== FieldType.number) {\n continue;\n }\n\n const name = getFieldDisplayName(field, frame, data);\n\n if (name === excludeName) {\n continue;\n }\n\n unique.add(name);\n }\n }\n\n return Array.from(unique);\n};\n\nconst getNamesOfHiddenFields = (overrides: ConfigOverrideRule[], data: DataFrame[]): string[] => {\n let names: string[] = [];\n\n for (const override of overrides) {\n const property = override.properties.find((p) => p.id === 'custom.hideFrom');\n\n if (property !== undefined && property.value?.legend === true) {\n const info = fieldMatchers.get(override.matcher.id);\n const matcher = info.get(override.matcher.options);\n\n for (const frame of data) {\n for (const field of frame.fields) {\n if (field.type !== FieldType.number) {\n continue;\n }\n\n const name = getFieldDisplayName(field, frame, data);\n\n if (matcher(field, frame, data)) {\n names.push(name);\n }\n }\n }\n }\n }\n\n return names;\n};\n"],"names":["override"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -420,6 +420,7 @@ declare class VizPanel<TOptions = {}, TFieldConfig extends {} = {}> extends Scen
420
420
  */
421
421
  private _onSeriesColorChange;
422
422
  private _onSeriesVisibilityChange;
423
+ private _onAnnotationVisibilityChange;
423
424
  private _onInstanceStateChange;
424
425
  private _onToggleLegendSort;
425
426
  clone(withState?: Partial<VizPanelState>): this;
package/dist/index.js CHANGED
@@ -9065,20 +9065,25 @@ const getAlertStateStyles = (theme) => {
9065
9065
 
9066
9066
  const displayOverrideRef = "hideSeriesFrom";
9067
9067
  const isHideSeriesOverride = data.isSystemOverrideWithRef(displayOverrideRef);
9068
- function seriesVisibilityConfigFactory(label, mode, fieldConfig, data) {
9068
+ function seriesVisibilityConfigFactory(label, mode, fieldConfig, data, dataTopic) {
9069
9069
  const { overrides } = fieldConfig;
9070
9070
  const displayName = label;
9071
9071
  const currentIndex = overrides.findIndex(isHideSeriesOverride);
9072
9072
  if (currentIndex < 0) {
9073
9073
  if (mode === ui.SeriesVisibilityChangeMode.ToggleSelection) {
9074
- const override3 = createOverride$1([displayName, ...getNamesOfHiddenFields(overrides, data)]);
9074
+ const override3 = createOverride$1(
9075
+ [displayName, ...getNamesOfHiddenFields(overrides, data)],
9076
+ void 0,
9077
+ void 0,
9078
+ dataTopic
9079
+ );
9075
9080
  return {
9076
9081
  ...fieldConfig,
9077
9082
  overrides: [...fieldConfig.overrides, override3]
9078
9083
  };
9079
9084
  }
9080
9085
  const displayNames = getDisplayNames(data, displayName);
9081
- const override2 = createOverride$1(displayNames);
9086
+ const override2 = createOverride$1(displayNames, void 0, void 0, dataTopic);
9082
9087
  return {
9083
9088
  ...fieldConfig,
9084
9089
  overrides: [...fieldConfig.overrides, override2]
@@ -9098,13 +9103,13 @@ function seriesVisibilityConfigFactory(label, mode, fieldConfig, data) {
9098
9103
  overrides: overridesCopy
9099
9104
  };
9100
9105
  }
9101
- const override2 = createOverride$1([displayName, ...nameOfHiddenFields]);
9106
+ const override2 = createOverride$1([displayName, ...nameOfHiddenFields], void 0, void 0, dataTopic);
9102
9107
  return {
9103
9108
  ...fieldConfig,
9104
9109
  overrides: [...overridesCopy, override2]
9105
9110
  };
9106
9111
  }
9107
- const override = createExtendedOverride(current, displayName);
9112
+ const override = createExtendedOverride(current, displayName, void 0, dataTopic);
9108
9113
  if (allFieldsAreExcluded(override, data)) {
9109
9114
  return {
9110
9115
  ...fieldConfig,
@@ -9116,7 +9121,7 @@ function seriesVisibilityConfigFactory(label, mode, fieldConfig, data) {
9116
9121
  overrides: [...overridesCopy, override]
9117
9122
  };
9118
9123
  }
9119
- function createOverride$1(names, mode = data.ByNamesMatcherMode.exclude, property) {
9124
+ function createOverride$1(names, mode = data.ByNamesMatcherMode.exclude, property, dataTopic) {
9120
9125
  property = property != null ? property : {
9121
9126
  id: "custom.hideFrom",
9122
9127
  value: {
@@ -9145,10 +9150,12 @@ function createOverride$1(names, mode = data.ByNamesMatcherMode.exclude, propert
9145
9150
  tooltip: true
9146
9151
  }
9147
9152
  }
9148
- ]
9153
+ ],
9154
+ // @ts-ignore
9155
+ dataTopic
9149
9156
  };
9150
9157
  }
9151
- const createExtendedOverride = (current, displayName, mode = data.ByNamesMatcherMode.exclude) => {
9158
+ const createExtendedOverride = (current, displayName, mode = data.ByNamesMatcherMode.exclude, dataTopic) => {
9152
9159
  const property = current.properties.find((p) => p.id === "custom.hideFrom");
9153
9160
  const existing = getExistingDisplayNames(current);
9154
9161
  const index = existing.findIndex((name) => name === displayName);
@@ -9157,7 +9164,7 @@ const createExtendedOverride = (current, displayName, mode = data.ByNamesMatcher
9157
9164
  } else {
9158
9165
  existing.splice(index, 1);
9159
9166
  }
9160
- return createOverride$1(existing, mode, property);
9167
+ return createOverride$1(existing, mode, property, dataTopic);
9161
9168
  };
9162
9169
  const getExistingDisplayNames = (rule) => {
9163
9170
  var _a;
@@ -9656,6 +9663,22 @@ class VizPanel extends SceneObjectBase {
9656
9663
  true
9657
9664
  );
9658
9665
  };
9666
+ this._onAnnotationVisibilityChange = (label, mode) => {
9667
+ var _a;
9668
+ if (!this._dataWithFieldConfig) {
9669
+ return;
9670
+ }
9671
+ this.onFieldConfigChange(
9672
+ seriesVisibilityConfigFactory(
9673
+ label,
9674
+ mode,
9675
+ this.state.fieldConfig,
9676
+ (_a = this._dataWithFieldConfig.annotations) != null ? _a : [],
9677
+ data.DataTopic.Annotations
9678
+ ),
9679
+ true
9680
+ );
9681
+ };
9659
9682
  this._onInstanceStateChange = (state) => {
9660
9683
  if (this._panelContext) {
9661
9684
  this._panelContext = {
@@ -9870,12 +9893,14 @@ class VizPanel extends SceneObjectBase {
9870
9893
  data: this._dataWithFieldConfig.annotations,
9871
9894
  fieldConfig: {
9872
9895
  defaults: {},
9873
- overrides: []
9896
+ overrides: [...this.state.fieldConfig.overrides]
9874
9897
  },
9875
9898
  fieldConfigRegistry,
9876
9899
  replaceVariables: this.interpolate,
9877
9900
  theme: runtime.config.theme2,
9878
- timeZone: (_d = rawData.request) == null ? void 0 : _d.timezone
9901
+ timeZone: (_d = rawData.request) == null ? void 0 : _d.timezone,
9902
+ // @ts-ignore
9903
+ dataTopic: data.DataTopic.Annotations
9879
9904
  });
9880
9905
  }
9881
9906
  if (!pluginDataSupport.alertStates) {
@@ -9904,6 +9929,7 @@ class VizPanel extends SceneObjectBase {
9904
9929
  },
9905
9930
  onSeriesColorChange: this._onSeriesColorChange,
9906
9931
  onToggleSeriesVisibility: this._onSeriesVisibilityChange,
9932
+ onAnnotationVisibilityChange: this._onAnnotationVisibilityChange,
9907
9933
  onToggleLegendSort: this._onToggleLegendSort,
9908
9934
  onInstanceStateChange: this._onInstanceStateChange
9909
9935
  };