diff --git a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/DetailView.tsx b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/DetailView.tsx index 88ea2cde2cd..95852e0e13c 100644 --- a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/DetailView.tsx +++ b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/DetailView.tsx @@ -1,9 +1,9 @@ import { css } from '@emotion/css'; import { memo, useCallback, useRef } from 'react'; -import { DataFrame, DataQuery, GrafanaTheme2, SelectableValue } from '@grafana/data'; +import { DataFrame, GrafanaTheme2, SelectableValue } from '@grafana/data'; import { Trans } from '@grafana/i18n'; -import { VizPanel } from '@grafana/scenes'; +import { SceneDataQuery, VizPanel } from '@grafana/scenes'; import { Container, ScrollContainer, useStyles2 } from '@grafana/ui'; import { isExpressionQuery } from 'app/features/expressions/guards'; @@ -18,7 +18,7 @@ import { TabId, QueryTransformItem } from './types'; export interface QueryLibraryMode { active: boolean; mode: 'browse' | 'save'; - currentQuery?: DataQuery; + currentQuery?: SceneDataQuery; } interface DetailViewProps { @@ -33,10 +33,11 @@ interface DetailViewProps { transformationData?: DataFrame[]; onGoToQueries?: () => void; queryLibraryMode?: QueryLibraryMode; - onQueryLibrarySelect?: (query: DataQuery) => void; + onQueryLibrarySelect?: (query: SceneDataQuery) => void; onQueryLibrarySave?: (name: string, description: string) => void; onQueryLibraryClose?: () => void; onOpenQueryLibrary?: (mode: 'browse' | 'save', index?: number) => void; + onOpenQueryInspector?: () => void; isDebugMode?: boolean; debugPosition?: number; } @@ -58,6 +59,7 @@ export const DetailView = memo( onQueryLibrarySave, onQueryLibraryClose, onOpenQueryLibrary, + onOpenQueryInspector, isDebugMode, debugPosition, }: DetailViewProps) => { @@ -119,22 +121,27 @@ export const DetailView = memo( ); } - if (selectedItem.type === 'query' && 'refId' in selectedItem.data) { + if (selectedItem.type === 'query') { const query = selectedItem.data; return ( <> - + ); - } else if (selectedItem.type === 'expression' && 'refId' in selectedItem.data) { + } else if (selectedItem.type === 'expression') { const data = selectedItem.data; if (isExpressionQuery(data)) { return ( <> - + @@ -143,7 +150,7 @@ export const DetailView = memo( } } else { const transformsTab = tabs.find((t): t is PanelDataTransformationsTab => t.tabId === TabId.Transformations); - if (transformsTab && 'id' in selectedItem.data) { + if (transformsTab) { return ( <> void; onToggleTransformVisibility?: (index: number) => void; onOpenQueryLibrary?: (mode: 'browse' | 'save') => void; + onOpenQueryInspector?: () => void; isDebugMode?: boolean; debugPosition?: number; queryLibraryMode?: never; @@ -59,6 +60,7 @@ interface QueryLibraryModeProps { onRemoveTransform?: never; onToggleTransformVisibility?: never; onOpenQueryLibrary?: never; + onOpenQueryInspector?: never; queryLibraryMode: 'browse' | 'save'; onSelectQuery?: () => void; onSaveQuery?: () => void; @@ -152,6 +154,7 @@ function ItemHeader({ onRemoveTransform, onToggleTransformVisibility, onOpenQueryLibrary, + onOpenQueryInspector, isDebugMode, debugPosition, }: ItemModeProps) { @@ -567,6 +570,11 @@ function ItemHeader({ icon="trash-alt" onClick={onRemoveQuery} /> + } > @@ -693,6 +701,7 @@ export const DetailViewHeader = (props: DetailViewHeaderProps) => { onRemoveTransform={props.onRemoveTransform} onToggleTransformVisibility={props.onToggleTransformVisibility} onOpenQueryLibrary={props.onOpenQueryLibrary} + onOpenQueryInspector={props.onOpenQueryInspector} isDebugMode={props.isDebugMode} debugPosition={props.debugPosition} /> @@ -709,7 +718,7 @@ const getStyles = (theme: GrafanaTheme2, config: { color: string }) => { borderLeft: `4px solid ${config.color}`, borderBottom: `1px solid ${theme.colors.border.weak}`, background: theme.colors.background.secondary, - minHeight: '41px', + minHeight: theme.spacing(6), }), headerContent: css({ display: 'flex', diff --git a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataPane.tsx b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataPane.tsx index 01a5d1cfc51..8fc158a684b 100644 --- a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataPane.tsx +++ b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataPane.tsx @@ -316,6 +316,10 @@ function PanelDataPaneRendered({ model }: SceneComponentProps) { [transformations, transformsTab] ); + const handleOpenQueryInspector = useCallback(() => { + queriesTab?.onOpenInspector(); + }, [queriesTab]); + // Get data for transformations drawer const sourceData = queryRunner?.useState(); const series = sourceData?.data?.series || []; @@ -339,6 +343,7 @@ function PanelDataPaneRendered({ model }: SceneComponentProps) { onQueryLibrarySave={handleQueryLibrarySave} onQueryLibraryClose={handleQueryLibraryClose} onOpenQueryLibrary={handleOpenQueryLibrary} + onOpenQueryInspector={handleOpenQueryInspector} isDebugMode={isDebugMode} debugPosition={debugPosition} /> diff --git a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataQueriesTab.test.tsx b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataQueriesTab.test.tsx index 96c3774f297..236b2e15215 100644 --- a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataQueriesTab.test.tsx +++ b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataQueriesTab.test.tsx @@ -837,7 +837,7 @@ async function setupScene(panelId: string) { deactivators.push(dashboard.activate()); deactivators.push(panelEditor.activate()); - const queriesTab = panelEditor.state.dataPane!.state.editorRef.resolve().state.dataPaneTabs[0]; + const queriesTab = panelEditor.state.dataPane!.state.tabs[0]; deactivators.push(queriesTab.activate()); await Promise.resolve(); diff --git a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataTransformationsTab.tsx b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataTransformationsTab.tsx index a04d735ea33..c6218be2123 100644 --- a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataTransformationsTab.tsx +++ b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataTransformationsTab.tsx @@ -90,7 +90,7 @@ export function PanelDataTransformationsTabRendered({ return; } - const queriesTab = parent.state.editorRef.resolve().state.dataPaneTabs.find((tab) => tab.tabId === TabId.Queries); + const queriesTab = parent.state.tabs.find((tab) => tab.tabId === TabId.Queries); if (!(queriesTab instanceof PanelDataQueriesTab)) { return; } diff --git a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/QueryTransformList.tsx b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/QueryTransformList.tsx index 778684be3c5..fcdf9a195d2 100644 --- a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/QueryTransformList.tsx +++ b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/QueryTransformList.tsx @@ -780,8 +780,6 @@ export const QueryTransformList = memo( QueryTransformList.displayName = 'QueryTransformList'; const getStyles = (theme: GrafanaTheme2, colors: ReturnType) => { - const headerHeight = 41; - const footerHeight = 32; const barBase = { padding: theme.spacing(0.5, 2), background: theme.colors.background.secondary, @@ -804,7 +802,7 @@ const getStyles = (theme: GrafanaTheme2, colors: ReturnType div:first-child': { @@ -929,7 +927,7 @@ const getStyles = (theme: GrafanaTheme2, colors: ReturnType