The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/e2e/test-plugins/grafana-extensionstest-app/module.tsx

86 lines
2.7 KiB

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;
}