grafana/public/app/plugins/panel/dashlist/module.tsx

119 lines
3.7 KiB
TypeScript
Raw Normal View History

import React from 'react';
import { PanelModel, PanelPlugin } from '@grafana/data';
import { config } from '@grafana/runtime';
import { TagsInput } from '@grafana/ui';
import {
ALL_FOLDER,
GENERAL_FOLDER,
ReadonlyFolderPicker,
} from '../../../core/components/Select/ReadonlyFolderPicker/ReadonlyFolderPicker';
import { DashList } from './DashList';
import { defaultPanelOptions, PanelLayout, PanelOptions } from './panelcfg.gen';
2021-12-08 10:42:45 -06:00
export const plugin = new PanelPlugin<PanelOptions>(DashList)
.setPanelOptions((builder) => {
if (config.featureToggles.dashboardPreviews) {
builder.addRadio({
path: 'layout',
name: 'Layout',
defaultValue: PanelLayout.List,
settings: {
options: [
{ value: PanelLayout.List, label: 'List' },
{ value: PanelLayout.Previews, label: 'Preview' },
],
},
});
}
builder
.addBooleanSwitch({
path: 'keepTime',
name: 'Include current time range',
defaultValue: defaultPanelOptions.keepTime,
})
.addBooleanSwitch({
path: 'includeVars',
name: 'Include current template variable values',
defaultValue: defaultPanelOptions.includeVars,
})
.addBooleanSwitch({
path: 'showStarred',
name: 'Starred',
2021-12-08 10:42:45 -06:00
defaultValue: defaultPanelOptions.showStarred,
})
.addBooleanSwitch({
path: 'showRecentlyViewed',
name: 'Recently viewed',
2021-12-08 10:42:45 -06:00
defaultValue: defaultPanelOptions.showRecentlyViewed,
})
.addBooleanSwitch({
path: 'showSearch',
name: 'Search',
2021-12-08 10:42:45 -06:00
defaultValue: defaultPanelOptions.showSearch,
})
.addBooleanSwitch({
path: 'showHeadings',
name: 'Show headings',
2021-12-08 10:42:45 -06:00
defaultValue: defaultPanelOptions.showHeadings,
})
.addNumberInput({
path: 'maxItems',
name: 'Max items',
2021-12-08 10:42:45 -06:00
defaultValue: defaultPanelOptions.maxItems,
})
.addTextInput({
path: 'query',
name: 'Query',
2021-12-08 10:42:45 -06:00
defaultValue: defaultPanelOptions.query,
})
.addCustomEditor({
path: 'folderId',
name: 'Folder',
id: 'folderId',
defaultValue: undefined,
editor: function RenderFolderPicker({ value, onChange }) {
return (
<ReadonlyFolderPicker
initialFolderId={value}
onChange={(folder) => onChange(folder?.id)}
extraFolders={[ALL_FOLDER, GENERAL_FOLDER]}
/>
);
},
})
.addCustomEditor({
id: 'tags',
path: 'tags',
name: 'Tags',
description: '',
2021-12-08 10:42:45 -06:00
defaultValue: defaultPanelOptions.tags,
editor(props) {
return <TagsInput tags={props.value} onChange={props.onChange} />;
},
});
})
2021-12-08 10:42:45 -06:00
.setMigrationHandler((panel: PanelModel<PanelOptions> & Record<string, any>) => {
const newOptions = {
showStarred: panel.options.showStarred ?? panel.starred,
showRecentlyViewed: panel.options.showRecentlyViewed ?? panel.recent,
showSearch: panel.options.showSearch ?? panel.search,
showHeadings: panel.options.showHeadings ?? panel.headings,
maxItems: panel.options.maxItems ?? panel.limit,
query: panel.options.query ?? panel.query,
folderId: panel.options.folderId ?? panel.folderId,
tags: panel.options.tags ?? panel.tags,
};
const previousVersion = parseFloat(panel.pluginVersion || '6.1');
if (previousVersion < 6.3) {
const oldProps = ['starred', 'recent', 'search', 'headings', 'limit', 'query', 'folderId'];
oldProps.forEach((prop) => delete panel[prop]);
}
return newOptions;
});