From 32555fc769a581e4bcbf5f37a2a40d8e5fc0dd1b Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Fri, 10 Apr 2020 02:30:36 -0700 Subject: [PATCH] Plugins: add a deprecated state (#23496) Co-authored-by: Dominik Prokop --- packages/grafana-data/src/types/plugin.ts | 1 + .../PanelEditor/VisualizationTab.tsx | 2 +- .../dashboard/panel_editor/VizTypePicker.tsx | 20 +++++++++++++++---- .../app/plugins/panel/singlestat/plugin.json | 1 + 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/grafana-data/src/types/plugin.ts b/packages/grafana-data/src/types/plugin.ts index 98c4b03c1e3..12702b1b1d3 100644 --- a/packages/grafana-data/src/types/plugin.ts +++ b/packages/grafana-data/src/types/plugin.ts @@ -4,6 +4,7 @@ import { KeyValue } from './data'; export enum PluginState { alpha = 'alpha', // Only included it `enable_alpha` is true beta = 'beta', // Will show a warning banner + deprecated = 'deprecated', // Will continue to work -- but not show up in the the options to add } export enum PluginType { diff --git a/public/app/features/dashboard/components/PanelEditor/VisualizationTab.tsx b/public/app/features/dashboard/components/PanelEditor/VisualizationTab.tsx index 560e3d40a8f..15873eec697 100644 --- a/public/app/features/dashboard/components/PanelEditor/VisualizationTab.tsx +++ b/public/app/features/dashboard/components/PanelEditor/VisualizationTab.tsx @@ -41,7 +41,7 @@ export const VisualizationTabUnconnected: FC = ({ panel, plugin, changePa if (e.key === 'Enter') { const query = e.currentTarget.value; const plugins = getAllPanelPluginMeta(); - const match = filterPluginList(plugins, query); + const match = filterPluginList(plugins, query, plugin.meta); if (match && match.length) { onPluginTypeChange(match[0]); } diff --git a/public/app/features/dashboard/panel_editor/VizTypePicker.tsx b/public/app/features/dashboard/panel_editor/VizTypePicker.tsx index 8e0d31b30e1..93975ba3d63 100644 --- a/public/app/features/dashboard/panel_editor/VizTypePicker.tsx +++ b/public/app/features/dashboard/panel_editor/VizTypePicker.tsx @@ -3,7 +3,7 @@ import React, { useCallback, useMemo } from 'react'; import config from 'app/core/config'; import VizTypePickerPlugin from './VizTypePickerPlugin'; import { EmptySearchResult, stylesFactory, useTheme } from '@grafana/ui'; -import { GrafanaTheme, PanelPluginMeta } from '@grafana/data'; +import { GrafanaTheme, PanelPluginMeta, PluginState } from '@grafana/data'; import { css } from 'emotion'; export interface Props { @@ -22,14 +22,26 @@ export function getAllPanelPluginMeta(): PanelPluginMeta[] { .sort((a: PanelPluginMeta, b: PanelPluginMeta) => a.sort - b.sort); } -export function filterPluginList(pluginsList: PanelPluginMeta[], searchQuery: string): PanelPluginMeta[] { +export function filterPluginList( + pluginsList: PanelPluginMeta[], + searchQuery: string, + current: PanelPluginMeta +): PanelPluginMeta[] { if (!searchQuery.length) { - return pluginsList; + return pluginsList.filter(p => { + if (p.state === PluginState.deprecated) { + return current.id === p.id; + } + return true; + }); } const query = searchQuery.toLowerCase(); const first: PanelPluginMeta[] = []; const match: PanelPluginMeta[] = []; 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) { @@ -65,7 +77,7 @@ export const VizTypePicker: React.FC = ({ searchQuery, onTypeChange, curr }; const getFilteredPluginList = useCallback((): PanelPluginMeta[] => { - return filterPluginList(pluginsList, searchQuery); + return filterPluginList(pluginsList, searchQuery, current); }, [searchQuery]); const filteredPluginList = getFilteredPluginList(); diff --git a/public/app/plugins/panel/singlestat/plugin.json b/public/app/plugins/panel/singlestat/plugin.json index 96def092827..64235f50c65 100644 --- a/public/app/plugins/panel/singlestat/plugin.json +++ b/public/app/plugins/panel/singlestat/plugin.json @@ -2,6 +2,7 @@ "type": "panel", "name": "Singlestat", "id": "singlestat", + "state": "deprecated", "info": { "description": "Singlestat Panel for Grafana",