mirror of
https://github.com/grafana/grafana.git
synced 2025-02-13 00:55:47 -06:00
PluginExtensions: Adding full targets to the panel menu context (#65861)
* Making sure we add the whole query to the dashboard panel context. * Adding some more tests. * Synced with main.
This commit is contained in:
parent
ea6aedd10a
commit
c8ecd0679b
@ -1,3 +1,5 @@
|
||||
import { DataQuery } from '@grafana/schema';
|
||||
|
||||
import { RawTimeRange, TimeZone } from './time';
|
||||
|
||||
// Plugin Extensions types
|
||||
@ -73,7 +75,7 @@ export type PluginExtensionPanelContext = {
|
||||
timeRange: RawTimeRange;
|
||||
timeZone: TimeZone;
|
||||
dashboard: Dashboard;
|
||||
targets: Target[];
|
||||
targets: DataQuery[];
|
||||
};
|
||||
|
||||
type Dashboard = {
|
||||
@ -81,8 +83,3 @@ type Dashboard = {
|
||||
title: string;
|
||||
tags: string[];
|
||||
};
|
||||
|
||||
type Target = {
|
||||
pluginId: string;
|
||||
refId: string;
|
||||
};
|
||||
|
@ -228,7 +228,9 @@ describe('getPanelMenu()', () => {
|
||||
targets: [
|
||||
{
|
||||
refId: 'A',
|
||||
pluginId: 'testdata',
|
||||
datasource: {
|
||||
type: 'testdata',
|
||||
},
|
||||
},
|
||||
],
|
||||
dashboard: {
|
||||
|
@ -332,16 +332,13 @@ function createExtensionContext(panel: PanelModel, dashboard: DashboardModel): P
|
||||
id: panel.id,
|
||||
pluginId: panel.type,
|
||||
title: panel.title,
|
||||
timeRange: Object.assign({}, dashboard.time),
|
||||
timeRange: dashboard.time,
|
||||
timeZone: dashboard.timezone,
|
||||
dashboard: {
|
||||
uid: dashboard.uid,
|
||||
title: dashboard.title,
|
||||
tags: Array.from<string>(dashboard.tags),
|
||||
},
|
||||
targets: panel.targets.map((t) => ({
|
||||
refId: t.refId,
|
||||
pluginId: t.datasource?.type ?? 'unknown',
|
||||
})),
|
||||
targets: panel.targets,
|
||||
};
|
||||
}
|
||||
|
@ -246,4 +246,43 @@ describe('getPluginExtensions()', () => {
|
||||
expect(global.console.warn).toHaveBeenCalledTimes(1);
|
||||
expect(global.console.warn).toHaveBeenCalledWith('[Plugin Extensions] Something went wrong!');
|
||||
});
|
||||
|
||||
test('should pass a frozen copy of the context to the onClick() function', () => {
|
||||
const context = { title: 'New title from the context!' };
|
||||
|
||||
link2.path = undefined;
|
||||
link2.onClick = jest.fn();
|
||||
|
||||
const registry = createPluginExtensionRegistry([{ pluginId, extensionConfigs: [link2] }]);
|
||||
const { extensions } = getPluginExtensions({ registry, context, extensionPointId: extensionPoint2 });
|
||||
const [extension] = extensions;
|
||||
|
||||
assertPluginExtensionLink(extension);
|
||||
extension.onClick?.({} as React.MouseEvent);
|
||||
|
||||
const helpers = (link2.onClick as jest.Mock).mock.calls[0][1];
|
||||
|
||||
expect(link2.configure).toHaveBeenCalledTimes(1);
|
||||
expect(Object.isFrozen(helpers.context)).toBe(true);
|
||||
expect(() => {
|
||||
helpers.context.title = 'New title';
|
||||
}).toThrow();
|
||||
});
|
||||
|
||||
test('should should not freeze the original context', () => {
|
||||
const context = {
|
||||
title: 'New title from the context!',
|
||||
nested: { title: 'title' },
|
||||
array: ['a'],
|
||||
};
|
||||
|
||||
const registry = createPluginExtensionRegistry([{ pluginId, extensionConfigs: [link2] }]);
|
||||
getPluginExtensions({ registry, context, extensionPointId: extensionPoint2 });
|
||||
|
||||
expect(() => {
|
||||
context.title = 'Updating the title';
|
||||
context.nested.title = 'new title';
|
||||
context.array.push('b');
|
||||
}).not.toThrow();
|
||||
});
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user