PanelEditor: Fix runtime error caused by panels not installed in Grafana instance (#85592)

FIx runtime error casued by panels non installed in Grafana instance
This commit is contained in:
Dominik Prokop
2024-04-04 15:45:27 +02:00
committed by GitHub
parent 2e8fb1aa56
commit 44376f8039
3 changed files with 13 additions and 4 deletions

View File

@@ -13,7 +13,7 @@ export interface Props {
export function PanelEditControls({ panelEditor }: Props) {
const vizManager = panelEditor.state.vizManager;
const { panel, tableView } = vizManager.useState();
const skipDataQuery = config.panels[panel.state.pluginId].skipDataQuery;
const skipDataQuery = config.panels[panel.state.pluginId]?.skipDataQuery;
return (
<>

View File

@@ -64,7 +64,7 @@ export class PanelEditor extends SceneObjectBase<PanelEditorState> {
}
private _initDataPane(pluginId: string) {
const skipDataQuery = config.panels[pluginId].skipDataQuery;
const skipDataQuery = config.panels[pluginId]?.skipDataQuery;
if (skipDataQuery && this.state.dataPane) {
locationService.partial({ tab: null }, true);

View File

@@ -1,11 +1,12 @@
import { css } from '@emotion/css';
import React, { useMemo } from 'react';
import { GrafanaTheme2 } from '@grafana/data';
import { GrafanaTheme2, PanelPluginMeta } from '@grafana/data';
import { selectors } from '@grafana/e2e-selectors';
import { SceneComponentProps, SceneObjectBase, SceneObjectState, sceneGraph } from '@grafana/scenes';
import { FilterInput, Stack, ToolbarButton, useStyles2 } from '@grafana/ui';
import { OptionFilter } from 'app/features/dashboard/components/PanelEditor/OptionsPaneOptions';
import { getPanelPluginNotFound } from 'app/features/panel/components/PanelPluginError';
import { getAllPanelPluginMeta } from 'app/features/panel/state/util';
import { PanelEditor } from './PanelEditor';
@@ -108,7 +109,15 @@ interface VisualizationButtonProps {
export function VisualizationButton({ pluginId, onOpen }: VisualizationButtonProps) {
const styles = useStyles2(getVizButtonStyles);
const pluginMeta = useMemo(() => getAllPanelPluginMeta().filter((p) => p.id === pluginId)[0], [pluginId]);
let pluginMeta: PanelPluginMeta | undefined = useMemo(
() => getAllPanelPluginMeta().filter((p) => p.id === pluginId)[0],
[pluginId]
);
if (!pluginMeta) {
const notFound = getPanelPluginNotFound(`Panel plugin not found (${pluginId})`, true);
pluginMeta = notFound.meta;
}
return (
<Stack gap={1}>