@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.
- package/dist/esm/components/VizPanel/VizPanel.js +22 -3
- package/dist/esm/components/VizPanel/VizPanel.js.map +1 -1
- package/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js +16 -9
- package/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +37 -11
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
@@ -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(
|
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":"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"}
|
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(
|
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
|
};
|