mirror of
https://github.com/grafana/grafana.git
synced 2025-02-15 10:03:33 -06:00
* Make suggestion cards support img & text mode instead of only preview * Generic solution for non data panels * minor review tweaks
60 lines
1.4 KiB
TypeScript
60 lines
1.4 KiB
TypeScript
import {
|
|
PanelData,
|
|
VisualizationSuggestion,
|
|
VisualizationSuggestionsBuilder,
|
|
PanelModel,
|
|
VisualizationSuggestionScore,
|
|
} from '@grafana/data';
|
|
import { config } from '@grafana/runtime';
|
|
import { importPanelPlugin } from 'app/features/plugins/importPanelPlugin';
|
|
|
|
export const panelsToCheckFirst = [
|
|
'timeseries',
|
|
'barchart',
|
|
'gauge',
|
|
'stat',
|
|
'piechart',
|
|
'bargauge',
|
|
'table',
|
|
'state-timeline',
|
|
'status-history',
|
|
'logs',
|
|
'candlestick',
|
|
];
|
|
|
|
export async function getAllSuggestions(data?: PanelData, panel?: PanelModel): Promise<VisualizationSuggestion[]> {
|
|
const builder = new VisualizationSuggestionsBuilder(data, panel);
|
|
|
|
for (const pluginId of panelsToCheckFirst) {
|
|
const plugin = await importPanelPlugin(pluginId);
|
|
const supplier = plugin.getSuggestionsSupplier();
|
|
|
|
if (supplier) {
|
|
supplier.getSuggestionsForData(builder);
|
|
}
|
|
}
|
|
|
|
const list = builder.getList();
|
|
|
|
if (builder.dataSummary.fieldCount === 0) {
|
|
for (const plugin of Object.values(config.panels)) {
|
|
if (!plugin.skipDataQuery || plugin.hideFromList) {
|
|
continue;
|
|
}
|
|
|
|
list.push({
|
|
name: plugin.name,
|
|
pluginId: plugin.id,
|
|
description: plugin.info.description,
|
|
cardOptions: {
|
|
imgSrc: plugin.info.logos.small,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
return list.sort((a, b) => {
|
|
return (b.score ?? VisualizationSuggestionScore.OK) - (a.score ?? VisualizationSuggestionScore.OK);
|
|
});
|
|
}
|