@grafana/scenes 8.18.2 → 8.18.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
# v8.18.3 (Wed Sep 23 2026)
|
|
2
|
+
|
|
3
|
+
#### 🐛 Bug Fix
|
|
4
|
+
|
|
5
|
+
- Dashboards: Move PanelContextProvider above PanelChrome [#1654](https://github.com/grafana/scenes/pull/1654) ([@mdvictor](https://github.com/mdvictor))
|
|
6
|
+
|
|
7
|
+
#### Authors: 1
|
|
8
|
+
|
|
9
|
+
- Victor Marin ([@mdvictor](https://github.com/mdvictor))
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
1
13
|
# v8.18.2 (Fri Sep 18 2026)
|
|
2
14
|
|
|
3
15
|
#### 🐛 Bug Fix
|
|
@@ -3,7 +3,7 @@ import React, { useContext, useMemo, useCallback, useLayoutEffect, useEffect, me
|
|
|
3
3
|
import { useMeasure, usePrevious } from 'react-use';
|
|
4
4
|
import { SetPanelAttentionEvent, renderMarkdown, AlertState, PluginContextProvider, PanelPlugin, PluginType } from '@grafana/data';
|
|
5
5
|
import { getAppEvents, config } from '@grafana/runtime';
|
|
6
|
-
import { useStyles2, Tooltip, PanelChrome, Icon,
|
|
6
|
+
import { useStyles2, Tooltip, PanelChrome, Icon, PanelContextProvider, ErrorBoundaryAlert } from '@grafana/ui';
|
|
7
7
|
import { sceneGraph } from '../../core/sceneGraph/index.js';
|
|
8
8
|
import { isSceneObject } from '../../core/types.js';
|
|
9
9
|
import { VizPanelFitContext } from './VizPanelFitContext.js';
|
|
@@ -190,14 +190,13 @@ function VizPanelRenderer({ model }) {
|
|
|
190
190
|
const isReadyToRender = dataObject.isDataReadyToDisplay ? dataObject.isDataReadyToDisplay() : true;
|
|
191
191
|
const context = model.getPanelContext();
|
|
192
192
|
const showNewPanelErrorsUI = Boolean(context.onOpenInspector);
|
|
193
|
-
const onInvestigateErrors = context.onInvestigateErrors;
|
|
194
193
|
const panelId = model.getLegacyPanelId();
|
|
195
194
|
const outdatedPluginError = t(
|
|
196
195
|
"grafana-scenes.components.viz-panel-renderer.outdated-plugin-error",
|
|
197
196
|
'An unexpected error occurred. Updating the "{{pluginName}}" plugin to the latest version may fix the problem.',
|
|
198
197
|
{ pluginName: plugin.meta.name }
|
|
199
198
|
);
|
|
200
|
-
const panelChrome = /* @__PURE__ */ React.createElement(
|
|
199
|
+
const panelChrome = /* @__PURE__ */ React.createElement(PanelContextProvider, { value: context }, /* @__PURE__ */ React.createElement(
|
|
201
200
|
PanelChrome,
|
|
202
201
|
{
|
|
203
202
|
title: titleInterpolated,
|
|
@@ -206,12 +205,7 @@ function VizPanelRenderer({ model }) {
|
|
|
206
205
|
loadingState: data.state,
|
|
207
206
|
statusMessage: getChromeStatusMessage(data, _pluginLoadError),
|
|
208
207
|
statusItems: showNewPanelErrorsUI ? getChromeStatusItems(data, _pluginLoadError) : void 0,
|
|
209
|
-
statusMessageOnClick: () =>
|
|
210
|
-
var _a2;
|
|
211
|
-
model.onStatusMessageClick();
|
|
212
|
-
(_a2 = context.onOpenInspector) == null ? void 0 : _a2.call(context);
|
|
213
|
-
},
|
|
214
|
-
onInvestigateErrors: showNewPanelErrorsUI ? onInvestigateErrors : void 0,
|
|
208
|
+
statusMessageOnClick: () => model.onStatusMessageClick(),
|
|
215
209
|
width: width === 0 ? void 0 : width,
|
|
216
210
|
height: fitContent ? void 0 : height === 0 ? void 0 : height,
|
|
217
211
|
minHeight: fitContent ? fitMinHeight : void 0,
|
|
@@ -249,7 +243,7 @@ function VizPanelRenderer({ model }) {
|
|
|
249
243
|
title: plugin.meta.hasUpdate ? outdatedPluginError : void 0,
|
|
250
244
|
dependencies: [plugin, data]
|
|
251
245
|
},
|
|
252
|
-
/* @__PURE__ */ React.createElement(PluginContextProvider, { meta: plugin.meta },
|
|
246
|
+
/* @__PURE__ */ React.createElement(PluginContextProvider, { meta: plugin.meta }, isReadyToRender && /* @__PURE__ */ React.createElement(
|
|
253
247
|
PanelComponent,
|
|
254
248
|
{
|
|
255
249
|
id: panelId,
|
|
@@ -270,10 +264,10 @@ function VizPanelRenderer({ model }) {
|
|
|
270
264
|
onChangeTimeRange: model.onTimeRangeChange,
|
|
271
265
|
eventBus: context.eventBus
|
|
272
266
|
}
|
|
273
|
-
))
|
|
267
|
+
))
|
|
274
268
|
);
|
|
275
269
|
}
|
|
276
|
-
);
|
|
270
|
+
));
|
|
277
271
|
if (fitContent) {
|
|
278
272
|
return /* @__PURE__ */ React.createElement(
|
|
279
273
|
"div",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VizPanelRenderer.js","sources":["../../../../src/components/VizPanel/VizPanelRenderer.tsx"],"sourcesContent":["import { Trans, t } from '@grafana/i18n';\nimport React, { memo, RefCallback, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef } from 'react';\nimport { useMeasure, usePrevious } from 'react-use';\n\n// @ts-ignore\nimport {\n AlertState,\n DataFrame,\n GrafanaTheme2,\n PanelData,\n PanelPlugin,\n PanelProps,\n PluginContextProvider,\n PluginType,\n QueryResultMetaNotice,\n renderMarkdown,\n SetPanelAttentionEvent,\n} from '@grafana/data';\n\nimport { config, getAppEvents } from '@grafana/runtime';\nimport { PanelChrome, ErrorBoundaryAlert, PanelContextProvider, Tooltip, useStyles2, Icon } from '@grafana/ui';\n\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { isSceneObject, SceneComponentProps, SceneLayout, SceneObject } from '../../core/types';\n\nimport { VizPanel } from './VizPanel';\nimport { VizPanelFitContext } from './VizPanelFitContext';\nimport { css, cx } from '@emotion/css';\nimport { debounce } from 'lodash';\nimport { VizPanelSeriesLimit } from './VizPanelSeriesLimit';\nimport { useLazyLoaderIsInView } from '../layout/LazyLoader';\n\nexport function VizPanelRenderer({ model }: SceneComponentProps<VizPanel>) {\n const {\n title,\n options,\n fieldConfig,\n _pluginLoadError,\n displayMode,\n hoverHeader,\n showMenuAlways,\n hoverHeaderOffset,\n menu,\n headerActions,\n subHeader,\n subtitle,\n titleItems,\n seriesLimit,\n seriesLimitShowAll,\n description,\n collapsible,\n collapsed,\n _renderCounter = 0,\n _UNSAFE_clearPreviousFieldValues = false,\n } = model.useState();\n let [ref, { width, height }] = useMeasure();\n const { enabled: fitContent, minHeight: fitMinHeight } = useContext(VizPanelFitContext);\n const appEvents = useMemo(() => getAppEvents(), []);\n\n const setPanelAttention = useCallback(() => {\n if (model.state.key) {\n appEvents.publish(new SetPanelAttentionEvent({ panelId: model.getPathId() }));\n }\n }, [model, appEvents]);\n\n const debouncedMouseMove = useMemo(\n () => debounce(setPanelAttention, 100, { leading: true, trailing: false }),\n [setPanelAttention]\n );\n\n // S3.0 RENDER TRACKING: Simple timing for performance measurement\n const profiler = useMemo(() => model.getProfiler(), [model]);\n\n // Capture render start time immediately when component function runs\n const currentRenderStart = performance.now();\n\n const endRenderCallbackRef = React.useRef<((endTimestamp: number, duration: number) => void) | null>(null);\n\n useLayoutEffect(() => {\n if (profiler) {\n const callback = profiler.onSimpleRenderStart(currentRenderStart);\n endRenderCallbackRef.current = callback || null;\n }\n });\n\n const subtitleContent = useMemo(() => {\n if (subtitle) {\n return renderMarkdown(model.interpolate(subtitle, undefined, 'text'));\n }\n return undefined;\n }, [subtitle, model]);\n\n // Use useEffect (after DOM updates) to measure complete render cycle timing\n useEffect(() => {\n if (endRenderCallbackRef.current) {\n const timestamp = performance.now();\n // Measure from component start to after DOM updates AND effects (complete render cycle)\n const duration = timestamp - currentRenderStart;\n endRenderCallbackRef.current(timestamp, duration);\n endRenderCallbackRef.current = null; // Clear callback after use\n }\n });\n\n const plugin = model.getPlugin() ?? getLoadingPlugin();\n\n const { dragClass, dragClassCancel } = getDragClasses(model);\n const dragHooks = getDragHooks(model);\n const dataObject = sceneGraph.getData(model);\n\n const rawData = dataObject.useState();\n\n const { series, annotations } = _UNSAFE_clearPreviousFieldValues ? rawData.data ?? {} : {};\n useClearPreviousData(series);\n useClearPreviousData(annotations);\n\n const dataWithSeriesLimit = useDataWithSeriesLimit(rawData.data, seriesLimit, seriesLimitShowAll);\n const dataWithFieldConfig = model.applyFieldConfig(dataWithSeriesLimit);\n const sceneTimeRange = sceneGraph.getTimeRange(model);\n const timeZone = sceneTimeRange.getTimeZone();\n const timeRange = model.getTimeRange(dataWithFieldConfig);\n\n // Switch to manual query execution if the panel is outside viewport\n const isInView = useLazyLoaderIsInView();\n useEffect(() => {\n if (dataObject.isInViewChanged) {\n dataObject.isInViewChanged(isInView);\n }\n }, [isInView, dataObject]);\n\n // Interpolate title\n const titleInterpolated = model.interpolate(title, undefined, 'text');\n const alertStateStyles = useStyles2(getAlertStateStyles);\n\n if (!plugin.panel) {\n return (\n <div>\n <Trans i18nKey=\"grafana-scenes.components.viz-panel-renderer.panel-plugin-has-no-panel-component\">\n Panel plugin has no panel component\n </Trans>\n </div>\n );\n }\n\n const PanelComponent = plugin.panel;\n\n // If we have a query runner on our level inform it of the container width (used to set auto max data points)\n if (dataObject && dataObject.setContainerWidth) {\n dataObject.setContainerWidth(Math.round(width));\n }\n\n let subHeaderElement: React.ReactNode[] = [];\n\n if (subHeader) {\n if (Array.isArray(subHeader)) {\n subHeaderElement = subHeaderElement.concat(\n subHeader.map((subHeaderItem) => {\n return <subHeaderItem.Component model={subHeaderItem} key={`${subHeaderItem.state.key}`} />;\n })\n );\n } else if (isSceneObject(subHeader)) {\n subHeaderElement.push(<subHeader.Component model={subHeader} key={`${subHeader.state.key}`} />);\n } else {\n subHeaderElement.push(subHeader);\n }\n }\n\n let titleItemsElement: React.ReactNode[] = [];\n\n if (titleItems) {\n if (Array.isArray(titleItems)) {\n titleItemsElement = titleItemsElement.concat(\n titleItems.map((titleItem) => {\n return <titleItem.Component model={titleItem} key={`${titleItem.state.key}`} />;\n })\n );\n } else if (isSceneObject(titleItems)) {\n titleItemsElement.push(<titleItems.Component model={titleItems} />);\n } else {\n titleItemsElement.push(titleItems);\n }\n }\n\n if (seriesLimit) {\n titleItemsElement.push(\n <VizPanelSeriesLimit\n key=\"series-limit\"\n data={rawData.data}\n seriesLimit={seriesLimit}\n showAll={seriesLimitShowAll}\n onShowAllSeries={() => model.setState({ seriesLimitShowAll: !seriesLimitShowAll })}\n />\n );\n }\n\n // If we have local time range show that in panel header\n if (model.state.$timeRange) {\n titleItemsElement.push(<model.state.$timeRange.Component model={model.state.$timeRange} key={model.state.key} />);\n }\n\n if (dataWithFieldConfig.alertState) {\n const alertState = dataWithFieldConfig.alertState;\n // @ts-expect-error ruleUID is added in a newer @grafana/data version\n const ruleUID: string | undefined = alertState.ruleUID;\n const alertRuleHref = ruleUID ? `${config.appSubUrl ?? ''}/alerting/grafana/${ruleUID}/view` : undefined;\n\n titleItemsElement.push(\n <Tooltip content={alertState.state ?? 'unknown'} key={`alert-states-icon-${model.state.key}`}>\n <PanelChrome.TitleItem\n href={alertRuleHref}\n className={cx({\n [alertStateStyles.ok]: alertState.state === AlertState.OK,\n [alertStateStyles.pending]: alertState.state === AlertState.Pending,\n [alertStateStyles.alerting]: alertState.state === AlertState.Alerting,\n })}\n >\n <Icon\n name={alertState.state === 'alerting' ? 'heart-break' : 'heart'}\n className=\"panel-alert-icon\"\n size=\"md\"\n />\n </PanelChrome.TitleItem>\n </Tooltip>\n );\n }\n\n let panelMenu;\n if (menu) {\n panelMenu = <menu.Component model={menu} />;\n }\n\n let actionsElement: React.ReactNode | undefined;\n\n if (headerActions) {\n if (Array.isArray(headerActions)) {\n actionsElement = (\n <>\n {headerActions.map((action) => {\n return <action.Component model={action} key={`${action.state.key}`} />;\n })}\n </>\n );\n } else if (isSceneObject(headerActions)) {\n actionsElement = <headerActions.Component model={headerActions} />;\n } else {\n actionsElement = headerActions;\n }\n }\n\n // Data is always returned. For non-data panels, empty PanelData is returned.\n const data = dataWithFieldConfig!;\n\n const isReadyToRender = dataObject.isDataReadyToDisplay ? dataObject.isDataReadyToDisplay() : true;\n\n const context = model.getPanelContext();\n // The host (e.g. dashboard) only provides an inspector opener when the new panel errors UI\n // is enabled. Use its presence to decide between the new errors/notices popover and the\n // legacy single status message.\n // @ts-expect-error onOpenInspector is added in a newer @grafana/ui version\n const showNewPanelErrorsUI = Boolean(context.onOpenInspector);\n // The host only provides this when it wants an \"Investigate errors\" action offered in the\n // status popover (e.g. gated on assistant availability); PanelChrome renders it generically.\n // @ts-expect-error onInvestigateErrors is added in a newer @grafana/ui version\n const onInvestigateErrors: (() => void) | undefined = context.onInvestigateErrors;\n const panelId = model.getLegacyPanelId();\n const outdatedPluginError = t(\n 'grafana-scenes.components.viz-panel-renderer.outdated-plugin-error',\n 'An unexpected error occurred. Updating the \"{{pluginName}}\" plugin to the latest version may fix the problem.',\n { pluginName: plugin.meta.name }\n );\n\n const panelChrome = (\n <PanelChrome\n title={titleInterpolated}\n description={description?.trim() ? model.getDescription : undefined}\n // @ts-expect-error remove this on next grafana/ui update\n subtitle={subtitleContent}\n loadingState={data.state}\n statusMessage={getChromeStatusMessage(data, _pluginLoadError)}\n statusItems={showNewPanelErrorsUI ? getChromeStatusItems(data, _pluginLoadError) : undefined}\n statusMessageOnClick={() => {\n // Report the interaction for analytics, then let the container (e.g. dashboard) open the inspector.\n model.onStatusMessageClick();\n // @ts-expect-error onOpenInspector is added in a newer @grafana/ui version\n context.onOpenInspector?.();\n }}\n onInvestigateErrors={showNewPanelErrorsUI ? onInvestigateErrors : undefined}\n width={width === 0 ? undefined : width}\n // In fit-content mode the height is content-driven: leave it undefined so\n // PanelChrome flows. A min-height floor keeps the chrome filled when\n // content is short; the layout's CSS caps the max.\n height={fitContent ? undefined : height === 0 ? undefined : height}\n minHeight={fitContent ? fitMinHeight : undefined}\n selectionId={model.state.key}\n displayMode={displayMode}\n titleItems={titleItemsElement.length > 0 ? titleItemsElement : undefined}\n dragClass={dragClass}\n actions={actionsElement}\n dragClassCancel={dragClassCancel}\n padding={plugin.noPadding ? 'none' : 'md'}\n menu={panelMenu}\n onCancelQuery={model.onCancelQuery}\n onFocus={setPanelAttention}\n onMouseEnter={setPanelAttention}\n onMouseMove={debouncedMouseMove}\n subHeaderContent={subHeaderElement.length ? subHeaderElement : undefined}\n onDragStart={(e: React.PointerEvent) => {\n dragHooks.onDragStart?.(e, model);\n }}\n showMenuAlways={showMenuAlways}\n {...(collapsible\n ? {\n collapsible: Boolean(collapsible),\n collapsed,\n onToggleCollapse: model.onToggleCollapse,\n }\n : { hoverHeader, hoverHeaderOffset })}\n >\n {(innerWidth, innerHeight) => {\n // In fit-content mode height is auto (innerHeight is 0/undefined by\n // design), so only width gates rendering.\n if (innerWidth === 0 || (!fitContent && innerHeight === 0)) {\n return null;\n }\n\n return (\n <ErrorBoundaryAlert\n title={plugin.meta.hasUpdate ? outdatedPluginError : undefined}\n dependencies={[plugin, data]}\n >\n <PluginContextProvider meta={plugin.meta}>\n <PanelContextProvider value={context}>\n {isReadyToRender && (\n <PanelComponent\n id={panelId}\n data={data}\n title={title}\n timeRange={timeRange}\n timeZone={timeZone}\n options={options}\n fieldConfig={fieldConfig}\n transparent={displayMode === 'transparent'}\n width={innerWidth}\n height={innerHeight || 0}\n // @ts-expect-error remove on next @grafana/data update (adds PanelProps.fitContent)\n fitContent={fitContent || undefined}\n renderCounter={_renderCounter}\n replaceVariables={model.interpolate}\n onOptionsChange={model.onOptionsChange}\n onFieldConfigChange={model.onFieldConfigChange}\n onChangeTimeRange={model.onTimeRangeChange}\n eventBus={context.eventBus}\n />\n )}\n </PanelContextProvider>\n </PluginContextProvider>\n </ErrorBoundaryAlert>\n );\n }}\n </PanelChrome>\n );\n\n // Fit-content: render the panel in normal flow (no absolute positioning) so\n // its content drives the height. `useMeasure` still tracks width; height is\n // ignored. The cell's CSS min/max bounds the final size.\n if (fitContent) {\n return (\n <div\n ref={ref as RefCallback<HTMLDivElement>}\n className={fitContentWrapper}\n data-viz-panel-key={model.state.key}\n data-viz-panel-id={model.getPathId()}\n data-testid={`${plugin.meta.id}-${model.state.key}`}\n data-plugin-id={plugin.meta.id}\n >\n {panelChrome}\n </div>\n );\n }\n\n return (\n <div className={relativeWrapper}>\n <div\n ref={ref as RefCallback<HTMLDivElement>}\n className={absoluteWrapper}\n data-viz-panel-key={model.state.key}\n data-viz-panel-id={model.getPathId()}\n data-testid={`${plugin.meta.id}-${model.state.key}`}\n data-plugin-id={plugin.meta.id}\n >\n {panelChrome}\n </div>\n </div>\n );\n}\n\nfunction useClearPreviousData(data?: DataFrame[]) {\n // this holds all value arrays from all series or anno frames\n // so we can empty any previous ones that no longer appear in current data\n // why? because React fiber: https://github.com/facebook/react/issues/36176\n const prevVals = useRef<Set<any[]> | undefined>(undefined);\n const currVals = useRef<Set<any[]> | undefined>(undefined);\n prevVals.current ??= new Set();\n currVals.current ??= new Set();\n\n const currFrames = data;\n const prevFrames = usePrevious(currFrames);\n\n if (currFrames != null && currFrames !== prevFrames) {\n // populate new\n currVals.current.clear();\n\n for (let i = 0; i < currFrames.length; i++) {\n // skip legacy CircularDataFrame streaming frames\n if ('appendRow' in currFrames[i]) {\n continue;\n }\n\n let fields = currFrames[i].fields;\n\n for (let j = 0; j < fields.length; j++) {\n currVals.current.add(fields[j].values);\n }\n }\n\n // empty out all prev not seen in new\n prevVals.current.forEach((vals) => {\n if (!currVals.current!.has(vals)) {\n vals.length = 0;\n }\n });\n prevVals.current.clear();\n prevVals.current = new Set(currVals.current);\n }\n}\n\nfunction useDataWithSeriesLimit(data: PanelData | undefined, seriesLimit?: number, showAllSeries?: boolean) {\n return useMemo(() => {\n if (!data?.series || !seriesLimit || showAllSeries) {\n return data;\n }\n\n return {\n ...data,\n series: data.series.slice(0, seriesLimit),\n };\n }, [data, seriesLimit, showAllSeries]);\n}\n\nfunction getDragClasses(panel: VizPanel) {\n const parentLayout = sceneGraph.getLayout(panel);\n const isDraggable = parentLayout?.isDraggable();\n\n if (!parentLayout || !isDraggable || itemDraggingDisabled(panel, parentLayout)) {\n return { dragClass: '', dragClassCancel: '' };\n }\n\n return { dragClass: parentLayout.getDragClass?.(), dragClassCancel: parentLayout?.getDragClassCancel?.() };\n}\n\nfunction getDragHooks(panel: VizPanel) {\n const parentLayout = sceneGraph.getLayout(panel);\n return parentLayout?.getDragHooks?.() ?? {};\n}\n\n/**\n * Walks up the parent chain until it hits the layout object, trying to find the closest SceneGridItemLike ancestor.\n * It is not always the direct parent, because the VizPanel can be wrapped in other objects.\n */\nfunction itemDraggingDisabled(item: SceneObject, layout: SceneLayout) {\n let obj: SceneObject | undefined = item;\n\n while (obj && obj !== layout) {\n if ('isDraggable' in obj.state && obj.state.isDraggable === false) {\n return true;\n }\n\n if ('repeatSourceKey' in obj.state && obj.state.repeatSourceKey) {\n return true;\n }\n\n obj = obj.parent;\n }\n\n return false;\n}\n\nfunction getChromeStatusMessage(data: PanelData, pluginLoadingError: string | undefined) {\n if (pluginLoadingError) {\n return pluginLoadingError;\n }\n\n let message = data.error ? data.error.message : undefined;\n\n // Handling multiple errors with a single string until we integrate VizPanel with inspector\n if (data.errors) {\n message = data.errors.map((e) => e.message).join(', ');\n }\n return message;\n}\n\ntype PanelStatusSeverity = QueryResultMetaNotice['severity'];\n\ninterface PanelStatusItem {\n severity: PanelStatusSeverity;\n text: string;\n}\n\n/**\n * Builds the combined list of query errors and result notices shown in the panel header\n * status popover. Errors come from the query response, notices from the frame metadata.\n */\nfunction getChromeStatusItems(data: PanelData, pluginLoadingError: string | undefined): PanelStatusItem[] {\n const items: PanelStatusItem[] = [];\n\n if (pluginLoadingError) {\n items.push({ severity: 'error', text: pluginLoadingError });\n }\n\n const errors = data.errors ?? (data.error ? [data.error] : []);\n for (const error of errors) {\n items.push({ severity: 'error', text: error.message ?? 'Query error' });\n }\n\n const seen = new Set<string>();\n for (const frame of data.series ?? []) {\n for (const notice of frame.meta?.notices ?? []) {\n const severity: PanelStatusSeverity = notice.severity ?? 'info';\n const key = `${severity}:${notice.text}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n items.push({ severity, text: notice.text });\n }\n }\n\n return items;\n}\n\nconst relativeWrapper = css({\n position: 'relative',\n width: '100%',\n height: '100%',\n});\n\n/**\n * Sadly this this absolute wrapper is needed for the panel to adopt smaller sizes.\n * The combo of useMeasure and PanelChrome makes the panel take up the width it get's but that makes it impossible to\n * Then adapt to smaller space (say resizing the browser window or undocking menu).\n */\nconst absoluteWrapper = css({\n position: 'absolute',\n width: '100%',\n height: '100%',\n});\n\n/**\n * Fit-content wrapper: in normal flow so the panel content defines the height.\n * Width is still 100% of the (layout-constrained) cell.\n *\n * The single-cell grid + minHeight combo makes the chrome fill the cell when\n * the layout stretches it (e.g. matched row heights, where a sibling made the\n * row taller) while staying content-sized when the cell is auto: percentage\n * min-height resolves to nothing against an indefinite parent, and a grid's\n * lone auto row absorbs any extra height the min-height creates.\n */\nconst fitContentWrapper = css({\n position: 'relative',\n width: '100%',\n display: 'grid',\n minHeight: '100%',\n // PanelChrome gets a measured pixel width; without inline-size containment\n // that becomes the subtree's min-content width and flex/grid ancestors with\n // `min-width: auto` can never shrink again (the absolute wrapper provides\n // this decoupling in the default path). Containment zeroes the wrapper's\n // intrinsic inline size while keeping the block axis content-driven.\n contain: 'inline-size',\n});\n\nconst getAlertStateStyles = (theme: GrafanaTheme2) => {\n return {\n ok: css({\n color: theme.colors.success.text,\n }),\n pending: css({\n color: theme.colors.warning.text,\n }),\n alerting: css({\n color: theme.colors.error.text,\n }),\n };\n};\n\nlet loadingPluginInstance: PanelPlugin | null = null;\n\nexport function getLoadingPlugin(): PanelPlugin {\n if (loadingPluginInstance) {\n return loadingPluginInstance;\n }\n\n const LoadingPluginComp = memo<PanelProps>(() => {\n return (\n <div>\n <Trans i18nKey=\"grafana-scenes.components.viz-panel-renderer.loading-plugin-panel\">\n Loading plugin panel...\n </Trans>\n </div>\n );\n });\n\n LoadingPluginComp.displayName = 'LoadingPlugin';\n\n loadingPluginInstance = new PanelPlugin(LoadingPluginComp);\n\n loadingPluginInstance.meta = {\n id: 'loading-plugin',\n name: 'Loading Plugin',\n sort: 100,\n type: PluginType.panel,\n module: '',\n baseUrl: '',\n info: {\n author: {\n name: '',\n },\n description: '',\n links: [],\n logos: {\n large: '',\n small: '',\n },\n screenshots: [],\n updated: '',\n version: '',\n },\n };\n\n return loadingPluginInstance;\n}\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VizPanelRenderer.js","sources":["../../../../src/components/VizPanel/VizPanelRenderer.tsx"],"sourcesContent":["import { Trans, t } from '@grafana/i18n';\nimport React, { memo, RefCallback, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef } from 'react';\nimport { useMeasure, usePrevious } from 'react-use';\n\n// @ts-ignore\nimport {\n AlertState,\n DataFrame,\n GrafanaTheme2,\n PanelData,\n PanelPlugin,\n PanelProps,\n PluginContextProvider,\n PluginType,\n QueryResultMetaNotice,\n renderMarkdown,\n SetPanelAttentionEvent,\n} from '@grafana/data';\n\nimport { config, getAppEvents } from '@grafana/runtime';\nimport { PanelChrome, ErrorBoundaryAlert, PanelContextProvider, Tooltip, useStyles2, Icon } from '@grafana/ui';\n\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { isSceneObject, SceneComponentProps, SceneLayout, SceneObject } from '../../core/types';\n\nimport { VizPanel } from './VizPanel';\nimport { VizPanelFitContext } from './VizPanelFitContext';\nimport { css, cx } from '@emotion/css';\nimport { debounce } from 'lodash';\nimport { VizPanelSeriesLimit } from './VizPanelSeriesLimit';\nimport { useLazyLoaderIsInView } from '../layout/LazyLoader';\n\nexport function VizPanelRenderer({ model }: SceneComponentProps<VizPanel>) {\n const {\n title,\n options,\n fieldConfig,\n _pluginLoadError,\n displayMode,\n hoverHeader,\n showMenuAlways,\n hoverHeaderOffset,\n menu,\n headerActions,\n subHeader,\n subtitle,\n titleItems,\n seriesLimit,\n seriesLimitShowAll,\n description,\n collapsible,\n collapsed,\n _renderCounter = 0,\n _UNSAFE_clearPreviousFieldValues = false,\n } = model.useState();\n let [ref, { width, height }] = useMeasure();\n const { enabled: fitContent, minHeight: fitMinHeight } = useContext(VizPanelFitContext);\n const appEvents = useMemo(() => getAppEvents(), []);\n\n const setPanelAttention = useCallback(() => {\n if (model.state.key) {\n appEvents.publish(new SetPanelAttentionEvent({ panelId: model.getPathId() }));\n }\n }, [model, appEvents]);\n\n const debouncedMouseMove = useMemo(\n () => debounce(setPanelAttention, 100, { leading: true, trailing: false }),\n [setPanelAttention]\n );\n\n // S3.0 RENDER TRACKING: Simple timing for performance measurement\n const profiler = useMemo(() => model.getProfiler(), [model]);\n\n // Capture render start time immediately when component function runs\n const currentRenderStart = performance.now();\n\n const endRenderCallbackRef = React.useRef<((endTimestamp: number, duration: number) => void) | null>(null);\n\n useLayoutEffect(() => {\n if (profiler) {\n const callback = profiler.onSimpleRenderStart(currentRenderStart);\n endRenderCallbackRef.current = callback || null;\n }\n });\n\n const subtitleContent = useMemo(() => {\n if (subtitle) {\n return renderMarkdown(model.interpolate(subtitle, undefined, 'text'));\n }\n return undefined;\n }, [subtitle, model]);\n\n // Use useEffect (after DOM updates) to measure complete render cycle timing\n useEffect(() => {\n if (endRenderCallbackRef.current) {\n const timestamp = performance.now();\n // Measure from component start to after DOM updates AND effects (complete render cycle)\n const duration = timestamp - currentRenderStart;\n endRenderCallbackRef.current(timestamp, duration);\n endRenderCallbackRef.current = null; // Clear callback after use\n }\n });\n\n const plugin = model.getPlugin() ?? getLoadingPlugin();\n\n const { dragClass, dragClassCancel } = getDragClasses(model);\n const dragHooks = getDragHooks(model);\n const dataObject = sceneGraph.getData(model);\n\n const rawData = dataObject.useState();\n\n const { series, annotations } = _UNSAFE_clearPreviousFieldValues ? rawData.data ?? {} : {};\n useClearPreviousData(series);\n useClearPreviousData(annotations);\n\n const dataWithSeriesLimit = useDataWithSeriesLimit(rawData.data, seriesLimit, seriesLimitShowAll);\n const dataWithFieldConfig = model.applyFieldConfig(dataWithSeriesLimit);\n const sceneTimeRange = sceneGraph.getTimeRange(model);\n const timeZone = sceneTimeRange.getTimeZone();\n const timeRange = model.getTimeRange(dataWithFieldConfig);\n\n // Switch to manual query execution if the panel is outside viewport\n const isInView = useLazyLoaderIsInView();\n useEffect(() => {\n if (dataObject.isInViewChanged) {\n dataObject.isInViewChanged(isInView);\n }\n }, [isInView, dataObject]);\n\n // Interpolate title\n const titleInterpolated = model.interpolate(title, undefined, 'text');\n const alertStateStyles = useStyles2(getAlertStateStyles);\n\n if (!plugin.panel) {\n return (\n <div>\n <Trans i18nKey=\"grafana-scenes.components.viz-panel-renderer.panel-plugin-has-no-panel-component\">\n Panel plugin has no panel component\n </Trans>\n </div>\n );\n }\n\n const PanelComponent = plugin.panel;\n\n // If we have a query runner on our level inform it of the container width (used to set auto max data points)\n if (dataObject && dataObject.setContainerWidth) {\n dataObject.setContainerWidth(Math.round(width));\n }\n\n let subHeaderElement: React.ReactNode[] = [];\n\n if (subHeader) {\n if (Array.isArray(subHeader)) {\n subHeaderElement = subHeaderElement.concat(\n subHeader.map((subHeaderItem) => {\n return <subHeaderItem.Component model={subHeaderItem} key={`${subHeaderItem.state.key}`} />;\n })\n );\n } else if (isSceneObject(subHeader)) {\n subHeaderElement.push(<subHeader.Component model={subHeader} key={`${subHeader.state.key}`} />);\n } else {\n subHeaderElement.push(subHeader);\n }\n }\n\n let titleItemsElement: React.ReactNode[] = [];\n\n if (titleItems) {\n if (Array.isArray(titleItems)) {\n titleItemsElement = titleItemsElement.concat(\n titleItems.map((titleItem) => {\n return <titleItem.Component model={titleItem} key={`${titleItem.state.key}`} />;\n })\n );\n } else if (isSceneObject(titleItems)) {\n titleItemsElement.push(<titleItems.Component model={titleItems} />);\n } else {\n titleItemsElement.push(titleItems);\n }\n }\n\n if (seriesLimit) {\n titleItemsElement.push(\n <VizPanelSeriesLimit\n key=\"series-limit\"\n data={rawData.data}\n seriesLimit={seriesLimit}\n showAll={seriesLimitShowAll}\n onShowAllSeries={() => model.setState({ seriesLimitShowAll: !seriesLimitShowAll })}\n />\n );\n }\n\n // If we have local time range show that in panel header\n if (model.state.$timeRange) {\n titleItemsElement.push(<model.state.$timeRange.Component model={model.state.$timeRange} key={model.state.key} />);\n }\n\n if (dataWithFieldConfig.alertState) {\n const alertState = dataWithFieldConfig.alertState;\n // @ts-expect-error ruleUID is added in a newer @grafana/data version\n const ruleUID: string | undefined = alertState.ruleUID;\n const alertRuleHref = ruleUID ? `${config.appSubUrl ?? ''}/alerting/grafana/${ruleUID}/view` : undefined;\n\n titleItemsElement.push(\n <Tooltip content={alertState.state ?? 'unknown'} key={`alert-states-icon-${model.state.key}`}>\n <PanelChrome.TitleItem\n href={alertRuleHref}\n className={cx({\n [alertStateStyles.ok]: alertState.state === AlertState.OK,\n [alertStateStyles.pending]: alertState.state === AlertState.Pending,\n [alertStateStyles.alerting]: alertState.state === AlertState.Alerting,\n })}\n >\n <Icon\n name={alertState.state === 'alerting' ? 'heart-break' : 'heart'}\n className=\"panel-alert-icon\"\n size=\"md\"\n />\n </PanelChrome.TitleItem>\n </Tooltip>\n );\n }\n\n let panelMenu;\n if (menu) {\n panelMenu = <menu.Component model={menu} />;\n }\n\n let actionsElement: React.ReactNode | undefined;\n\n if (headerActions) {\n if (Array.isArray(headerActions)) {\n actionsElement = (\n <>\n {headerActions.map((action) => {\n return <action.Component model={action} key={`${action.state.key}`} />;\n })}\n </>\n );\n } else if (isSceneObject(headerActions)) {\n actionsElement = <headerActions.Component model={headerActions} />;\n } else {\n actionsElement = headerActions;\n }\n }\n\n // Data is always returned. For non-data panels, empty PanelData is returned.\n const data = dataWithFieldConfig!;\n\n const isReadyToRender = dataObject.isDataReadyToDisplay ? dataObject.isDataReadyToDisplay() : true;\n\n const context = model.getPanelContext();\n // The host (e.g. dashboard) only provides an inspector opener when the new panel errors UI\n // is enabled. Use its presence to decide between the new errors/notices popover and the\n // legacy single status message.\n // @ts-expect-error onOpenInspector is added in a newer @grafana/ui version\n const showNewPanelErrorsUI = Boolean(context.onOpenInspector);\n const panelId = model.getLegacyPanelId();\n const outdatedPluginError = t(\n 'grafana-scenes.components.viz-panel-renderer.outdated-plugin-error',\n 'An unexpected error occurred. Updating the \"{{pluginName}}\" plugin to the latest version may fix the problem.',\n { pluginName: plugin.meta.name }\n );\n\n // Wraps the whole chrome, not just the panel body, so header-slot content\n // can also reach PanelContext via usePanelContext() instead of being passed\n // props explicitly. PanelChrome itself reads onOpenInspector/onInvestigateErrors from this\n // context rather than through props.\n const panelChrome = (\n <PanelContextProvider value={context}>\n <PanelChrome\n title={titleInterpolated}\n description={description?.trim() ? model.getDescription : undefined}\n // @ts-expect-error remove this on next grafana/ui update\n subtitle={subtitleContent}\n loadingState={data.state}\n statusMessage={getChromeStatusMessage(data, _pluginLoadError)}\n statusItems={showNewPanelErrorsUI ? getChromeStatusItems(data, _pluginLoadError) : undefined}\n // Report the interaction for analytics; PanelChrome opens the inspector itself via\n // PanelContext's onOpenInspector.\n statusMessageOnClick={() => model.onStatusMessageClick()}\n width={width === 0 ? undefined : width}\n // In fit-content mode the height is content-driven: leave it undefined so\n // PanelChrome flows. A min-height floor keeps the chrome filled when\n // content is short; the layout's CSS caps the max.\n height={fitContent ? undefined : height === 0 ? undefined : height}\n minHeight={fitContent ? fitMinHeight : undefined}\n selectionId={model.state.key}\n displayMode={displayMode}\n titleItems={titleItemsElement.length > 0 ? titleItemsElement : undefined}\n dragClass={dragClass}\n actions={actionsElement}\n dragClassCancel={dragClassCancel}\n padding={plugin.noPadding ? 'none' : 'md'}\n menu={panelMenu}\n onCancelQuery={model.onCancelQuery}\n onFocus={setPanelAttention}\n onMouseEnter={setPanelAttention}\n onMouseMove={debouncedMouseMove}\n subHeaderContent={subHeaderElement.length ? subHeaderElement : undefined}\n onDragStart={(e: React.PointerEvent) => {\n dragHooks.onDragStart?.(e, model);\n }}\n showMenuAlways={showMenuAlways}\n {...(collapsible\n ? {\n collapsible: Boolean(collapsible),\n collapsed,\n onToggleCollapse: model.onToggleCollapse,\n }\n : { hoverHeader, hoverHeaderOffset })}\n >\n {(innerWidth, innerHeight) => {\n // In fit-content mode height is auto (innerHeight is 0/undefined by\n // design), so only width gates rendering.\n if (innerWidth === 0 || (!fitContent && innerHeight === 0)) {\n return null;\n }\n\n return (\n <ErrorBoundaryAlert\n title={plugin.meta.hasUpdate ? outdatedPluginError : undefined}\n dependencies={[plugin, data]}\n >\n <PluginContextProvider meta={plugin.meta}>\n {isReadyToRender && (\n <PanelComponent\n id={panelId}\n data={data}\n title={title}\n timeRange={timeRange}\n timeZone={timeZone}\n options={options}\n fieldConfig={fieldConfig}\n transparent={displayMode === 'transparent'}\n width={innerWidth}\n height={innerHeight || 0}\n // @ts-expect-error remove on next @grafana/data update (adds PanelProps.fitContent)\n fitContent={fitContent || undefined}\n renderCounter={_renderCounter}\n replaceVariables={model.interpolate}\n onOptionsChange={model.onOptionsChange}\n onFieldConfigChange={model.onFieldConfigChange}\n onChangeTimeRange={model.onTimeRangeChange}\n eventBus={context.eventBus}\n />\n )}\n </PluginContextProvider>\n </ErrorBoundaryAlert>\n );\n }}\n </PanelChrome>\n </PanelContextProvider>\n );\n\n // Fit-content: render the panel in normal flow (no absolute positioning) so\n // its content drives the height. `useMeasure` still tracks width; height is\n // ignored. The cell's CSS min/max bounds the final size.\n if (fitContent) {\n return (\n <div\n ref={ref as RefCallback<HTMLDivElement>}\n className={fitContentWrapper}\n data-viz-panel-key={model.state.key}\n data-viz-panel-id={model.getPathId()}\n data-testid={`${plugin.meta.id}-${model.state.key}`}\n data-plugin-id={plugin.meta.id}\n >\n {panelChrome}\n </div>\n );\n }\n\n return (\n <div className={relativeWrapper}>\n <div\n ref={ref as RefCallback<HTMLDivElement>}\n className={absoluteWrapper}\n data-viz-panel-key={model.state.key}\n data-viz-panel-id={model.getPathId()}\n data-testid={`${plugin.meta.id}-${model.state.key}`}\n data-plugin-id={plugin.meta.id}\n >\n {panelChrome}\n </div>\n </div>\n );\n}\n\nfunction useClearPreviousData(data?: DataFrame[]) {\n // this holds all value arrays from all series or anno frames\n // so we can empty any previous ones that no longer appear in current data\n // why? because React fiber: https://github.com/facebook/react/issues/36176\n const prevVals = useRef<Set<any[]> | undefined>(undefined);\n const currVals = useRef<Set<any[]> | undefined>(undefined);\n prevVals.current ??= new Set();\n currVals.current ??= new Set();\n\n const currFrames = data;\n const prevFrames = usePrevious(currFrames);\n\n if (currFrames != null && currFrames !== prevFrames) {\n // populate new\n currVals.current.clear();\n\n for (let i = 0; i < currFrames.length; i++) {\n // skip legacy CircularDataFrame streaming frames\n if ('appendRow' in currFrames[i]) {\n continue;\n }\n\n let fields = currFrames[i].fields;\n\n for (let j = 0; j < fields.length; j++) {\n currVals.current.add(fields[j].values);\n }\n }\n\n // empty out all prev not seen in new\n prevVals.current.forEach((vals) => {\n if (!currVals.current!.has(vals)) {\n vals.length = 0;\n }\n });\n prevVals.current.clear();\n prevVals.current = new Set(currVals.current);\n }\n}\n\nfunction useDataWithSeriesLimit(data: PanelData | undefined, seriesLimit?: number, showAllSeries?: boolean) {\n return useMemo(() => {\n if (!data?.series || !seriesLimit || showAllSeries) {\n return data;\n }\n\n return {\n ...data,\n series: data.series.slice(0, seriesLimit),\n };\n }, [data, seriesLimit, showAllSeries]);\n}\n\nfunction getDragClasses(panel: VizPanel) {\n const parentLayout = sceneGraph.getLayout(panel);\n const isDraggable = parentLayout?.isDraggable();\n\n if (!parentLayout || !isDraggable || itemDraggingDisabled(panel, parentLayout)) {\n return { dragClass: '', dragClassCancel: '' };\n }\n\n return { dragClass: parentLayout.getDragClass?.(), dragClassCancel: parentLayout?.getDragClassCancel?.() };\n}\n\nfunction getDragHooks(panel: VizPanel) {\n const parentLayout = sceneGraph.getLayout(panel);\n return parentLayout?.getDragHooks?.() ?? {};\n}\n\n/**\n * Walks up the parent chain until it hits the layout object, trying to find the closest SceneGridItemLike ancestor.\n * It is not always the direct parent, because the VizPanel can be wrapped in other objects.\n */\nfunction itemDraggingDisabled(item: SceneObject, layout: SceneLayout) {\n let obj: SceneObject | undefined = item;\n\n while (obj && obj !== layout) {\n if ('isDraggable' in obj.state && obj.state.isDraggable === false) {\n return true;\n }\n\n if ('repeatSourceKey' in obj.state && obj.state.repeatSourceKey) {\n return true;\n }\n\n obj = obj.parent;\n }\n\n return false;\n}\n\nfunction getChromeStatusMessage(data: PanelData, pluginLoadingError: string | undefined) {\n if (pluginLoadingError) {\n return pluginLoadingError;\n }\n\n let message = data.error ? data.error.message : undefined;\n\n // Handling multiple errors with a single string until we integrate VizPanel with inspector\n if (data.errors) {\n message = data.errors.map((e) => e.message).join(', ');\n }\n return message;\n}\n\ntype PanelStatusSeverity = QueryResultMetaNotice['severity'];\n\ninterface PanelStatusItem {\n severity: PanelStatusSeverity;\n text: string;\n}\n\n/**\n * Builds the combined list of query errors and result notices shown in the panel header\n * status popover. Errors come from the query response, notices from the frame metadata.\n */\nfunction getChromeStatusItems(data: PanelData, pluginLoadingError: string | undefined): PanelStatusItem[] {\n const items: PanelStatusItem[] = [];\n\n if (pluginLoadingError) {\n items.push({ severity: 'error', text: pluginLoadingError });\n }\n\n const errors = data.errors ?? (data.error ? [data.error] : []);\n for (const error of errors) {\n items.push({ severity: 'error', text: error.message ?? 'Query error' });\n }\n\n const seen = new Set<string>();\n for (const frame of data.series ?? []) {\n for (const notice of frame.meta?.notices ?? []) {\n const severity: PanelStatusSeverity = notice.severity ?? 'info';\n const key = `${severity}:${notice.text}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n items.push({ severity, text: notice.text });\n }\n }\n\n return items;\n}\n\nconst relativeWrapper = css({\n position: 'relative',\n width: '100%',\n height: '100%',\n});\n\n/**\n * Sadly this this absolute wrapper is needed for the panel to adopt smaller sizes.\n * The combo of useMeasure and PanelChrome makes the panel take up the width it get's but that makes it impossible to\n * Then adapt to smaller space (say resizing the browser window or undocking menu).\n */\nconst absoluteWrapper = css({\n position: 'absolute',\n width: '100%',\n height: '100%',\n});\n\n/**\n * Fit-content wrapper: in normal flow so the panel content defines the height.\n * Width is still 100% of the (layout-constrained) cell.\n *\n * The single-cell grid + minHeight combo makes the chrome fill the cell when\n * the layout stretches it (e.g. matched row heights, where a sibling made the\n * row taller) while staying content-sized when the cell is auto: percentage\n * min-height resolves to nothing against an indefinite parent, and a grid's\n * lone auto row absorbs any extra height the min-height creates.\n */\nconst fitContentWrapper = css({\n position: 'relative',\n width: '100%',\n display: 'grid',\n minHeight: '100%',\n // PanelChrome gets a measured pixel width; without inline-size containment\n // that becomes the subtree's min-content width and flex/grid ancestors with\n // `min-width: auto` can never shrink again (the absolute wrapper provides\n // this decoupling in the default path). Containment zeroes the wrapper's\n // intrinsic inline size while keeping the block axis content-driven.\n contain: 'inline-size',\n});\n\nconst getAlertStateStyles = (theme: GrafanaTheme2) => {\n return {\n ok: css({\n color: theme.colors.success.text,\n }),\n pending: css({\n color: theme.colors.warning.text,\n }),\n alerting: css({\n color: theme.colors.error.text,\n }),\n };\n};\n\nlet loadingPluginInstance: PanelPlugin | null = null;\n\nexport function getLoadingPlugin(): PanelPlugin {\n if (loadingPluginInstance) {\n return loadingPluginInstance;\n }\n\n const LoadingPluginComp = memo<PanelProps>(() => {\n return (\n <div>\n <Trans i18nKey=\"grafana-scenes.components.viz-panel-renderer.loading-plugin-panel\">\n Loading plugin panel...\n </Trans>\n </div>\n );\n });\n\n LoadingPluginComp.displayName = 'LoadingPlugin';\n\n loadingPluginInstance = new PanelPlugin(LoadingPluginComp);\n\n loadingPluginInstance.meta = {\n id: 'loading-plugin',\n name: 'Loading Plugin',\n sort: 100,\n type: PluginType.panel,\n module: '',\n baseUrl: '',\n info: {\n author: {\n name: '',\n },\n description: '',\n links: [],\n logos: {\n large: '',\n small: '',\n },\n screenshots: [],\n updated: '',\n version: '',\n },\n };\n\n return loadingPluginInstance;\n}\n"],"names":["_a"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3802,14 +3802,13 @@ function VizPanelRenderer({ model }) {
|
|
|
3802
3802
|
const isReadyToRender = dataObject.isDataReadyToDisplay ? dataObject.isDataReadyToDisplay() : true;
|
|
3803
3803
|
const context = model.getPanelContext();
|
|
3804
3804
|
const showNewPanelErrorsUI = Boolean(context.onOpenInspector);
|
|
3805
|
-
const onInvestigateErrors = context.onInvestigateErrors;
|
|
3806
3805
|
const panelId = model.getLegacyPanelId();
|
|
3807
3806
|
const outdatedPluginError = i18n.t(
|
|
3808
3807
|
"grafana-scenes.components.viz-panel-renderer.outdated-plugin-error",
|
|
3809
3808
|
'An unexpected error occurred. Updating the "{{pluginName}}" plugin to the latest version may fix the problem.',
|
|
3810
3809
|
{ pluginName: plugin.meta.name }
|
|
3811
3810
|
);
|
|
3812
|
-
const panelChrome = /* @__PURE__ */ React__default.default.createElement(
|
|
3811
|
+
const panelChrome = /* @__PURE__ */ React__default.default.createElement(ui.PanelContextProvider, { value: context }, /* @__PURE__ */ React__default.default.createElement(
|
|
3813
3812
|
ui.PanelChrome,
|
|
3814
3813
|
{
|
|
3815
3814
|
title: titleInterpolated,
|
|
@@ -3818,12 +3817,7 @@ function VizPanelRenderer({ model }) {
|
|
|
3818
3817
|
loadingState: data$1.state,
|
|
3819
3818
|
statusMessage: getChromeStatusMessage(data$1, _pluginLoadError),
|
|
3820
3819
|
statusItems: showNewPanelErrorsUI ? getChromeStatusItems(data$1, _pluginLoadError) : void 0,
|
|
3821
|
-
statusMessageOnClick: () =>
|
|
3822
|
-
var _a2;
|
|
3823
|
-
model.onStatusMessageClick();
|
|
3824
|
-
(_a2 = context.onOpenInspector) == null ? void 0 : _a2.call(context);
|
|
3825
|
-
},
|
|
3826
|
-
onInvestigateErrors: showNewPanelErrorsUI ? onInvestigateErrors : void 0,
|
|
3820
|
+
statusMessageOnClick: () => model.onStatusMessageClick(),
|
|
3827
3821
|
width: width === 0 ? void 0 : width,
|
|
3828
3822
|
height: fitContent ? void 0 : height === 0 ? void 0 : height,
|
|
3829
3823
|
minHeight: fitContent ? fitMinHeight : void 0,
|
|
@@ -3861,7 +3855,7 @@ function VizPanelRenderer({ model }) {
|
|
|
3861
3855
|
title: plugin.meta.hasUpdate ? outdatedPluginError : void 0,
|
|
3862
3856
|
dependencies: [plugin, data$1]
|
|
3863
3857
|
},
|
|
3864
|
-
/* @__PURE__ */ React__default.default.createElement(data.PluginContextProvider, { meta: plugin.meta },
|
|
3858
|
+
/* @__PURE__ */ React__default.default.createElement(data.PluginContextProvider, { meta: plugin.meta }, isReadyToRender && /* @__PURE__ */ React__default.default.createElement(
|
|
3865
3859
|
PanelComponent,
|
|
3866
3860
|
{
|
|
3867
3861
|
id: panelId,
|
|
@@ -3882,10 +3876,10 @@ function VizPanelRenderer({ model }) {
|
|
|
3882
3876
|
onChangeTimeRange: model.onTimeRangeChange,
|
|
3883
3877
|
eventBus: context.eventBus
|
|
3884
3878
|
}
|
|
3885
|
-
))
|
|
3879
|
+
))
|
|
3886
3880
|
);
|
|
3887
3881
|
}
|
|
3888
|
-
);
|
|
3882
|
+
));
|
|
3889
3883
|
if (fitContent) {
|
|
3890
3884
|
return /* @__PURE__ */ React__default.default.createElement(
|
|
3891
3885
|
"div",
|