mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* build test apps with webpack * add extensions test app * update e2e tests * remove non-build test apps using amd * use @grafana/plugin-configs rather than create-plugin config * Update e2e/plugin-e2e/plugin-e2e-api-tests/as-admin-user/extensions/usePluginComponents.spec.ts Co-authored-by: Jack Westbrook <jack.westbrook@gmail.com> * Update package.json Co-authored-by: Jack Westbrook <jack.westbrook@gmail.com> * use run dir variable instead of hardcoded path * add dummy licence file * add separate step for building test plugins * support nested plugins * remove react-router-dom from the externals array * remove add_mode dev * lint starlark * pass license path as env variable * fix the path * chore(e2e-plugins): clean up dependencies to match core versions * refactor(e2e-plugins): prefer extending webpack plugins-config * docs(e2e-plugins): add basic info to extensions test plugin readme * update readme * change dir name from custom plugins to test plugins * change root readme * update lockfile --------- Co-authored-by: Jack Westbrook <jack.westbrook@gmail.com>
87 lines
2.7 KiB
TypeScript
87 lines
2.7 KiB
TypeScript
import { AppPlugin, PluginExtensionPanelContext, PluginExtensionPoints } from '@grafana/data';
|
|
import { App } from './components/App';
|
|
import { QueryModal } from './components/QueryModal';
|
|
import { selectQuery } from './utils/utils';
|
|
import pluginJson from './plugin.json';
|
|
|
|
export const plugin = new AppPlugin<{}>()
|
|
.setRootPage(App)
|
|
.configureExtensionLink<PluginExtensionPanelContext>({
|
|
title: 'Open from time series or pie charts (path)',
|
|
description: 'This link will only be visible on time series and pie charts',
|
|
extensionPointId: PluginExtensionPoints.DashboardPanelMenu,
|
|
path: `/a/${pluginJson.id}/`,
|
|
configure: (context) => {
|
|
// Will only be visible for the Link Extensions dashboard
|
|
if (context?.dashboard?.title !== 'Link Extensions (path)') {
|
|
return undefined;
|
|
}
|
|
|
|
switch (context?.pluginId) {
|
|
case 'timeseries':
|
|
return {}; // Does not apply any overrides
|
|
case 'piechart':
|
|
return {
|
|
title: `Open from ${context.pluginId}`,
|
|
};
|
|
|
|
default:
|
|
// By returning undefined the extension will be hidden
|
|
return undefined;
|
|
}
|
|
},
|
|
})
|
|
.configureExtensionLink<PluginExtensionPanelContext>({
|
|
title: 'Open from time series or pie charts (onClick)',
|
|
description: 'This link will only be visible on time series and pie charts',
|
|
extensionPointId: PluginExtensionPoints.DashboardPanelMenu,
|
|
onClick: (_, { openModal, context }) => {
|
|
const targets = context?.targets ?? [];
|
|
const title = context?.title;
|
|
|
|
if (!isSupported(context)) {
|
|
return;
|
|
}
|
|
|
|
// Show a modal to display a UI for selecting between the available queries (targets)
|
|
// in case there are more available.
|
|
if (targets.length > 1) {
|
|
return openModal({
|
|
title: `Select query from "${title}"`,
|
|
body: (props) => <QueryModal {...props} targets={targets} />,
|
|
});
|
|
}
|
|
|
|
const [target] = targets;
|
|
selectQuery(target);
|
|
},
|
|
configure: (context) => {
|
|
// Will only be visible for the Command Extensions dashboard
|
|
if (context?.dashboard?.title !== 'Link Extensions (onClick)') {
|
|
return undefined;
|
|
}
|
|
|
|
if (!isSupported(context)) {
|
|
return;
|
|
}
|
|
|
|
switch (context?.pluginId) {
|
|
case 'timeseries':
|
|
return {}; // Does not apply any overrides
|
|
case 'piechart':
|
|
return {
|
|
title: `Open from ${context.pluginId}`,
|
|
};
|
|
|
|
default:
|
|
// By returning undefined the extension will be hidden
|
|
return undefined;
|
|
}
|
|
},
|
|
});
|
|
|
|
function isSupported(context?: PluginExtensionPanelContext): boolean {
|
|
const targets = context?.targets ?? [];
|
|
return targets.length > 0;
|
|
}
|