grafana/public/app/plugins/panel/dashlist/module.tsx
Torkel Ödegaard 54af57b8e6
VisualizationSelection: Real previews of suitable visualisation and options based on current data (#40527)
* Initial pass to move panel state to it's own, and make it by key not panel.id

* Progress

* Not making much progress, having panel.key be mutable is causing a lot of issues

* Think this is starting to work

* Began fixing tests

* Add selector

* Bug fixes and changes to cleanup, and fixing all flicking when switching library panels

* Removed console.log

* fixes after merge

* fixing tests

* fixing tests

* Added new test for changePlugin thunk

* Initial struture in place

* responding to state changes in another part of the state

* bha

* going in a different direction

* This is getting exciting

* minor

* More structure

* More real

* Added builder to reduce boiler plate

* Lots of progress

* Adding more visualizations

* More smarts

* tweaks

* suggestions

* Move to separate view

* Refactoring to builder concept

* Before hover preview test

* Increase line width in preview

* More suggestions

* Removed old elements of onSuggestVisualizations

* Don't call suggestion suppliers if there is no data

* Restore card styles to only borders

* Changing supplier interface to support data vs option suggestion scenario

* Renamed functions

* Add dynamic width support

* not sure about this

* Improve suggestions

* Improve suggestions

* Single grid/list

* Store vis select pane & size

* Prep for option suggestions

* more suggestions

* Name/title option for preview cards

* Improve barchart suggestions

* Support suggestions when there are no data

* Minor change

* reverted some changes

* Improve suggestions for stacking

* Removed size option

* starting on unit tests, hit cyclic dependency issue

* muuu

* First test for getting suggestion seems to work, going to bed

* add missing file

* A basis for more unit tests

* More tests

* More unit tests

* Fixed unit tests

* Update

* Some extreme scenarios

* Added basic e2e test

* Added another unit test for changePanelPlugin action

* More cleanup

* Minor tweak

* add wait to e2e test

* Renamed function and cleanup of unused function

* Adding search support and adding search test to e2e test
2021-10-25 13:55:06 +02:00

93 lines
2.8 KiB
TypeScript

import { PanelModel, PanelPlugin } from '@grafana/data';
import { DashList } from './DashList';
import { DashListOptions } from './types';
import React from 'react';
import { TagsInput } from '@grafana/ui';
import {
ALL_FOLDER,
GENERAL_FOLDER,
ReadonlyFolderPicker,
} from '../../../core/components/Select/ReadonlyFolderPicker/ReadonlyFolderPicker';
import { DashListSuggestionsSupplier } from './suggestions';
export const plugin = new PanelPlugin<DashListOptions>(DashList)
.setPanelOptions((builder) => {
builder
.addBooleanSwitch({
path: 'showStarred',
name: 'Starred',
defaultValue: true,
})
.addBooleanSwitch({
path: 'showRecentlyViewed',
name: 'Recently viewed',
defaultValue: false,
})
.addBooleanSwitch({
path: 'showSearch',
name: 'Search',
defaultValue: false,
})
.addBooleanSwitch({
path: 'showHeadings',
name: 'Show headings',
defaultValue: true,
})
.addNumberInput({
path: 'maxItems',
name: 'Max items',
defaultValue: 10,
})
.addTextInput({
path: 'query',
name: 'Query',
defaultValue: '',
})
.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: '',
defaultValue: [],
editor(props) {
return <TagsInput tags={props.value} onChange={props.onChange} />;
},
});
})
.setMigrationHandler((panel: PanelModel<DashListOptions> & 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;
})
.setSuggestionsSupplier(new DashListSuggestionsSupplier());