1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import { PanelPluginMeta, PluginState, unEscapeStringFromRegex } from '@grafana/data';
- import { config } from 'app/core/config';
- export function getAllPanelPluginMeta(): PanelPluginMeta[] {
- const allPanels = config.panels;
- return Object.keys(allPanels)
- .filter((key) => allPanels[key]['hideFromList'] === false)
- .map((key) => allPanels[key])
- .sort((a: PanelPluginMeta, b: PanelPluginMeta) => a.sort - b.sort);
- }
- export function filterPluginList(
- pluginsList: PanelPluginMeta[],
- searchQuery: string, // Note: this will be an escaped regex string as it comes from `FilterInput`
- current: PanelPluginMeta
- ): PanelPluginMeta[] {
- if (!searchQuery.length) {
- return pluginsList.filter((p) => {
- if (p.state === PluginState.deprecated) {
- return current.id === p.id;
- }
- return true;
- });
- }
- const query = unEscapeStringFromRegex(searchQuery).toLowerCase();
- const first: PanelPluginMeta[] = [];
- const match: PanelPluginMeta[] = [];
- const isGraphQuery = 'graph'.startsWith(query);
- for (const item of pluginsList) {
- if (item.state === PluginState.deprecated && current.id !== item.id) {
- continue;
- }
- const name = item.name.toLowerCase();
- const idx = name.indexOf(query);
- if (idx === 0) {
- first.push(item);
- } else if (idx > 0) {
- match.push(item);
- } else if (isGraphQuery && item.id === 'timeseries') {
- first.push(item);
- }
- }
- return first.concat(match);
- }
|