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

FIx runtime error casued by panels non installed in Grafana instance
pull/85543/head
Dominik Prokop 1 year ago committed by GitHub
parent 2e8fb1aa56
commit 44376f8039
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      public/app/features/dashboard-scene/panel-edit/PanelEditControls.tsx
  2. 2
      public/app/features/dashboard-scene/panel-edit/PanelEditor.tsx
  3. 13
      public/app/features/dashboard-scene/panel-edit/PanelOptionsPane.tsx

@ -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 (
<>

@ -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);

@ -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}>

Loading…
Cancel
Save