Removing plugin list panel (#46914)

The core plugin named plugin list panel is removed
This commit is contained in:
Timur Olzhabayev 2022-04-07 09:54:27 +02:00 committed by GitHub
parent 6e0826a986
commit 25235b3167
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 0 additions and 313 deletions

View File

@ -374,17 +374,6 @@
"title": "Dashboard list", "title": "Dashboard list",
"type": "dashlist" "type": "dashlist"
}, },
{
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 29
},
"id": 30,
"title": "Panel list",
"type": "pluginlist"
},
{ {
"gridPos": { "gridPos": {
"h": 8, "h": 8,

View File

@ -127,7 +127,6 @@ func verifyCorePluginCatalogue(t *testing.T, pm *PluginManager) {
"news": {}, "news": {},
"nodeGraph": {}, "nodeGraph": {},
"piechart": {}, "piechart": {},
"pluginlist": {},
"stat": {}, "stat": {},
"state-timeline": {}, "state-timeline": {},
"status-history": {}, "status-history": {},

View File

@ -444,27 +444,6 @@
"overrides": [] "overrides": []
} }
}, },
{
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 29
},
"id": 30,
"title": "Panel list",
"type": "pluginlist",
"transparent": false,
"repeatDirection": "h",
"transformations": [],
"options": {},
"fieldConfig": {
"defaults": {
"custom": {}
},
"overrides": []
}
},
{ {
"gridPos": { "gridPos": {
"h": 8, "h": 8,

View File

@ -55,11 +55,6 @@
"type": "dashlist", "type": "dashlist",
"pluginVersion": "8.1.0-pre" "pluginVersion": "8.1.0-pre"
}, },
{
"id": 30,
"title": "Panel list",
"type": "pluginlist"
},
{ {
"id": 6, "id": 6,
"title": "Alert list", "title": "Alert list",

View File

@ -1034,42 +1034,6 @@
"signatureType": "", "signatureType": "",
"signatureOrg": "" "signatureOrg": ""
}, },
{
"name": "Plugin list",
"type": "panel",
"id": "pluginlist",
"enabled": true,
"pinned": false,
"info": {
"author": {
"name": "Grafana Labs",
"url": "https://grafana.com"
},
"description": "Plugin List for Grafana",
"links": null,
"logos": {
"small": "public/app/plugins/panel/pluginlist/img/icn-dashlist-panel.svg",
"large": "public/app/plugins/panel/pluginlist/img/icn-dashlist-panel.svg"
},
"build": {},
"screenshots": null,
"version": "",
"updated": ""
},
"dependencies": {
"grafanaDependency": "",
"grafanaVersion": "*",
"plugins": []
},
"latestVersion": "",
"hasUpdate": false,
"defaultNavUrl": "/plugins/pluginlist/",
"category": "",
"state": "",
"signature": "internal",
"signatureType": "",
"signatureOrg": ""
},
{ {
"name": "PostgreSQL", "name": "PostgreSQL",
"type": "datasource", "type": "datasource",

View File

@ -47,7 +47,6 @@ import * as statusHistoryPanel from 'app/plugins/panel/status-history/module';
import * as candlestickPanel from 'app/plugins/panel/candlestick/module'; import * as candlestickPanel from 'app/plugins/panel/candlestick/module';
import * as xyChartPanel from 'app/plugins/panel/xychart/module'; import * as xyChartPanel from 'app/plugins/panel/xychart/module';
import * as dashListPanel from 'app/plugins/panel/dashlist/module'; import * as dashListPanel from 'app/plugins/panel/dashlist/module';
import * as pluginsListPanel from 'app/plugins/panel/pluginlist/module';
import * as alertListPanel from 'app/plugins/panel/alertlist/module'; import * as alertListPanel from 'app/plugins/panel/alertlist/module';
import * as annoListPanel from 'app/plugins/panel/annolist/module'; import * as annoListPanel from 'app/plugins/panel/annolist/module';
import * as heatmapPanelNG from 'app/plugins/panel/heatmap-new/module'; import * as heatmapPanelNG from 'app/plugins/panel/heatmap-new/module';
@ -110,7 +109,6 @@ const builtInPlugins: any = {
'app/plugins/panel/canvas/module': canvasPanel, 'app/plugins/panel/canvas/module': canvasPanel,
'app/plugins/panel/icon/module': iconPanel, 'app/plugins/panel/icon/module': iconPanel,
'app/plugins/panel/dashlist/module': dashListPanel, 'app/plugins/panel/dashlist/module': dashListPanel,
'app/plugins/panel/pluginlist/module': pluginsListPanel,
'app/plugins/panel/alertlist/module': alertListPanel, 'app/plugins/panel/alertlist/module': alertListPanel,
'app/plugins/panel/annolist/module': annoListPanel, 'app/plugins/panel/annolist/module': annoListPanel,
'app/plugins/panel/heatmap/module': heatmapPanel, 'app/plugins/panel/heatmap/module': heatmapPanel,

View File

@ -1,151 +0,0 @@
import React from 'react';
import { useAsync } from 'react-use';
import { css, cx } from '@emotion/css';
import { GrafanaTheme, PanelProps, PluginMeta, PluginType } from '@grafana/data';
import { CustomScrollbar, ModalsController, stylesFactory, Tooltip, useStyles } from '@grafana/ui';
import { contextSrv } from 'app/core/services/context_srv';
import { getBackendSrv } from 'app/core/services/backend_srv';
import { UpdatePluginModal } from './components/UpdatePluginModal';
export function PluginList(props: PanelProps) {
const pluginState = useAsync(async () => {
const plugins: PluginMeta[] = await getBackendSrv().get('api/plugins', { embedded: 0, core: 0 });
return [
{ header: 'Installed Apps', list: plugins.filter((p) => p.type === PluginType.app), type: PluginType.app },
{ header: 'Installed Panels', list: plugins.filter((p) => p.type === PluginType.panel), type: PluginType.panel },
{
header: 'Installed Datasources',
list: plugins.filter((p) => p.type === PluginType.datasource),
type: PluginType.datasource,
},
];
}, []);
const styles = useStyles(getStyles);
const isAdmin = contextSrv.user.isGrafanaAdmin;
if (pluginState.loading || pluginState.value === undefined) {
return null;
}
return (
<CustomScrollbar autoHeightMin="100%" autoHeightMax="100%">
<div className={styles.pluginList}>
{pluginState.value.map((category) => (
<div className={styles.section} key={`category-${category.type}`}>
<h6 className={styles.sectionHeader}>{category.header}</h6>
{category.list.map((plugin) => (
<a className={styles.item} href={plugin.defaultNavUrl} key={`plugin-${plugin.id}`}>
<img src={plugin.info.logos.small} className={styles.image} width="17" height="17" alt="" />
<span className={styles.title}>{plugin.name}</span>
<span className={styles.version}>v{plugin.info.version}</span>
{isAdmin &&
(plugin.hasUpdate ? (
<ModalsController>
{({ showModal, hideModal }) => (
<Tooltip content={`New version: ${plugin.latestVersion}`} placement="top">
<span
className={cx(styles.message, styles.messageUpdate)}
onClick={(e) => {
e.preventDefault();
showModal(UpdatePluginModal, {
pluginID: plugin.id,
pluginName: plugin.name,
onDismiss: hideModal,
isOpen: true,
});
}}
>
Update available!
</span>
</Tooltip>
)}
</ModalsController>
) : plugin.enabled ? (
<span className={cx(styles.message, styles.messageNoUpdate)}>Up to date</span>
) : (
<span className={cx(styles.message, styles.messageEnable)}>Enable now</span>
))}
</a>
))}
{category.list.length === 0 && (
<a className={styles.item} href="https://grafana.com/plugins">
<span className={styles.noneInstalled}>
None installed. <em className={styles.emphasis}>Browse Grafana.com</em>
</span>
</a>
)}
</div>
))}
</div>
</CustomScrollbar>
);
}
const getStyles = stylesFactory((theme: GrafanaTheme) => ({
pluginList: css`
display: flex;
flex-direction: column;
`,
section: css`
display: flex;
flex-direction: column;
&:not(:last-of-type) {
margin-bottom: 16px;
}
`,
sectionHeader: css`
color: ${theme.colors.textWeak};
margin-bottom: ${theme.spacing.d};
`,
image: css`
width: 17px;
margin-right: ${theme.spacing.xxs};
`,
title: css`
margin-right: calc(${theme.spacing.d} / 3);
`,
version: css`
font-size: ${theme.typography.size.sm};
color: ${theme.colors.textWeak};
`,
item: css`
display: flex;
justify-content: flex-start;
align-items: center;
cursor: pointer;
margin: ${theme.spacing.xxs};
padding: ${theme.spacing.sm};
background: ${theme.colors.dashboardBg};
border-radius: ${theme.border.radius.md};
`,
message: css`
margin-left: auto;
font-size: ${theme.typography.size.sm};
`,
messageEnable: css`
color: ${theme.colors.linkExternal};
&:hover {
border-bottom: ${theme.border.width.sm} solid ${theme.colors.linkExternal};
}
`,
messageUpdate: css`
&:hover {
border-bottom: ${theme.border.width.sm} solid ${theme.colors.text};
}
`,
messageNoUpdate: css`
color: ${theme.colors.textWeak};
`,
noneInstalled: css`
color: ${theme.colors.textWeak};
font-size: ${theme.typography.size.sm};
`,
emphasis: css`
font-weight: ${theme.typography.weight.semibold};
font-style: normal;
color: ${theme.colors.textWeak};
`,
}));

View File

@ -1,3 +0,0 @@
# Plugin List Panel - Native Plugin
The Plugin List plans shows the installed plugins for your Grafana instance and is **included** with Grafana. It is used on the default Home dashboard.

View File

@ -1,59 +0,0 @@
import React from 'react';
import { Modal, stylesFactory, useStyles } from '@grafana/ui';
import { GrafanaTheme } from '@grafana/data';
import { css } from '@emotion/css';
interface Props {
pluginName: string;
pluginID: string;
onConfirm?: () => void;
onDismiss?: () => void;
}
export function UpdatePluginModal({ pluginName, pluginID, onDismiss }: Props) {
const styles = useStyles(getStyles);
return (
<Modal title="Update Plugin" icon="cloud-download" onDismiss={onDismiss} isOpen>
<div className={styles.container}>
<p>Type the following on the command line to update {pluginName}.</p>
<pre>
<code>grafana-cli plugins update {pluginID}</code>
</pre>
<span className={styles.small}>
Check out {pluginName} on <a href={`https://grafana.com/plugins/${pluginID}`}>Grafana.com</a> for README and
changelog. If you do not have access to the command line, ask your Grafana administator.
</span>
</div>
<p className={styles.updateAllTip}>
<img className={styles.inlineLogo} src="public/img/grafana_icon.svg" />
<strong>Pro tip</strong>: To update all plugins at once, type{' '}
<code className={styles.codeSmall}>grafana-cli plugins update-all</code> on the command line.
</p>
</Modal>
);
}
const getStyles = stylesFactory((theme: GrafanaTheme) => ({
small: css`
font-size: ${theme.typography.size.sm};
font-weight: ${theme.typography.weight.regular};
`,
codeSmall: css`
font-size: ${theme.typography.size.xs};
padding: ${theme.spacing.xxs};
margin: 0 ${theme.spacing.xxs};
`,
container: css`
margin-bottom: calc(${theme.spacing.d} * 2.5);
`,
updateAllTip: css`
color: ${theme.colors.textWeak};
font-size: ${theme.typography.size.sm};
`,
inlineLogo: css`
vertical-align: sub;
margin-right: calc(${theme.spacing.d} / 3);
width: ${theme.spacing.md};
`,
}));

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 80.9 80.9"><defs><style>.cls-1{fill:#84aff1;}.cls-2{fill:#3865ab;}.cls-3{fill:#fff;}.cls-4{fill:url(#linear-gradient);}</style><linearGradient id="linear-gradient" x1="15.08" y1="38.4" x2="52.47" y2="38.4" gradientTransform="translate(6.17 2.56)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#f2cc0c"/><stop offset="1" stop-color="#ff9830"/></linearGradient></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M40.45,80.9A40.45,40.45,0,1,1,80.9,40.45,40.5,40.5,0,0,1,40.45,80.9Zm0-76.9A36.45,36.45,0,1,0,76.9,40.45,36.49,36.49,0,0,0,40.45,4Z"/><path class="cls-2" d="M40.45,8.13A32.31,32.31,0,0,0,16.23,61.84l12.9-12.9L32,51.77l-12.9,12.9A32.32,32.32,0,1,0,40.45,8.13Z"/><path class="cls-3" d="M38.43,23.71H52.34a1,1,0,0,1,1,1v3.41a1,1,0,0,1-1,1H38.43a0,0,0,0,1,0,0V23.71A0,0,0,0,1,38.43,23.71Z" transform="translate(-5.24 40.18) rotate(-45)"/><path class="cls-3" d="M47,32.31H60.94a1,1,0,0,1,1,1v3.41a1,1,0,0,1-1,1H47a0,0,0,0,1,0,0V32.31A0,0,0,0,1,47,32.31Z" transform="translate(-8.8 48.78) rotate(-45)"/><path class="cls-4" d="M35.83,22.26l-5.29,5.29C25.16,32.93,23,39.74,26.79,46L21.25,51.5l8.15,8.15,5.54-5.54c6.22,3.82,13,1.63,18.41-3.76l5.29-5.28Z"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1,4 +0,0 @@
import { PanelPlugin } from '@grafana/data';
import { PluginList } from './PluginList';
export const plugin = new PanelPlugin(PluginList);

View File

@ -1,19 +0,0 @@
{
"type": "panel",
"name": "Plugin list",
"id": "pluginlist",
"skipDataQuery": true,
"info": {
"description": "Plugin List for Grafana",
"author": {
"name": "Grafana Labs",
"url": "https://grafana.com"
},
"logos": {
"small": "img/icn-dashlist-panel.svg",
"large": "img/icn-dashlist-panel.svg"
}
}
}