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 f19d7cb8e8b..ea32291dd92 100644 --- a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/DetailView.tsx +++ b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/DetailView.tsx @@ -78,6 +78,7 @@ const getStyles = (theme: GrafanaTheme2) => { display: 'flex', flexDirection: 'column', height: '100%', + width: '100%', background: theme.colors.background.primary, }), emptyState: css({ diff --git a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/ExpressionDetailView.tsx b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/ExpressionDetailView.tsx index 1c81dab082b..9be9e578fe3 100644 --- a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/ExpressionDetailView.tsx +++ b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/ExpressionDetailView.tsx @@ -128,6 +128,7 @@ const getStyles = (theme: GrafanaTheme2) => { flexDirection: 'column', gap: theme.spacing(2), padding: theme.spacing(2), + width: '100%', }), expressionContent: 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 a52ffba22b8..e27092725f1 100644 --- a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataPane.tsx +++ b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataPane.tsx @@ -1,4 +1,4 @@ -import { css } from '@emotion/css'; +import { css, cx } from '@emotion/css'; import { useCallback, useMemo, useState } from 'react'; import { DataTransformerConfig, GrafanaTheme2, SelectableValue } from '@grafana/data'; @@ -13,7 +13,7 @@ import { VizPanel, SceneDataTransformer, } from '@grafana/scenes'; -import { useStyles2 } from '@grafana/ui'; +import { useStyles2, useSplitter } from '@grafana/ui'; import { getConfig } from 'app/core/config'; import { contextSrv } from 'app/core/services/context_srv'; import { getRulesPermissions } from 'app/features/alerting/unified/utils/access-control'; @@ -398,30 +398,34 @@ function PanelDataPaneRendered({ model }: SceneComponentProps) { const sourceData = queryRunner?.useState(); const series = sourceData?.data?.series || []; + const { containerProps, primaryProps, secondaryProps, splitterProps } = useSplitter({ + direction: 'row', + initialSize: 0.2, + }); + return (
-
-
-
- -
-
- -
+
+
+ +
+
+
+
{ flexDirection: 'column', gap: theme.spacing(2), padding: theme.spacing(2), + width: '100%', }), datasourceSection: css({ paddingBottom: theme.spacing(2), diff --git a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/QueryTransformCard.tsx b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/QueryTransformCard.tsx index ff6f34767bd..d9029e7de75 100644 --- a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/QueryTransformCard.tsx +++ b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/QueryTransformCard.tsx @@ -149,11 +149,11 @@ const getStyles = (theme: GrafanaTheme2) => { return { card: css({ cursor: 'pointer', - marginBottom: theme.spacing(1), border: `1px solid ${theme.colors.border.weak}`, borderRadius: theme.shape.radius.default, overflow: 'hidden', background: theme.colors.background.primary, + width: '100%', [`&:hover .${actionsClass}`]: { opacity: 1, }, 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 e26e5535390..e7509b45d90 100644 --- a/public/app/features/dashboard-scene/panel-edit/PanelDataPane/QueryTransformList.tsx +++ b/public/app/features/dashboard-scene/panel-edit/PanelDataPane/QueryTransformList.tsx @@ -3,7 +3,7 @@ import { memo } from 'react'; import { DataTransformerConfig, GrafanaTheme2 } from '@grafana/data'; import { SceneDataQuery } from '@grafana/scenes'; -import { ScrollContainer, useStyles2 } from '@grafana/ui'; +import { ScrollContainer, Stack, useStyles2 } from '@grafana/ui'; import { ExpressionQueryType } from 'app/features/expressions/types'; import { AddDataItemMenu } from './AddDataItemMenu'; @@ -50,79 +50,54 @@ export const QueryTransformList = memo( }: QueryTransformListProps) => { const styles = useStyles2(getStyles); - const queries = items.filter((item) => item.type === 'query'); - const expressions = items.filter((item) => item.type === 'expression'); - const transforms = items.filter((item) => item.type === 'transform'); + const getHandlers = (item: QueryTransformItem) => { + switch (item.type) { + case 'query': + return { + onDuplicate: onDuplicateQuery ? () => onDuplicateQuery(item.index) : undefined, + onRemove: onRemoveQuery ? () => onRemoveQuery(item.index) : undefined, + onToggleVisibility: onToggleQueryVisibility ? () => onToggleQueryVisibility(item.index) : undefined, + }; + case 'expression': + return { + onDuplicate: onDuplicateExpression ? () => onDuplicateExpression(item.index) : undefined, + onRemove: onRemoveExpression ? () => onRemoveExpression(item.index) : undefined, + onToggleVisibility: onToggleExpressionVisibility + ? () => onToggleExpressionVisibility(item.index) + : undefined, + }; + case 'transform': + return { + onDuplicate: undefined, + onRemove: onRemoveTransform ? () => onRemoveTransform(item.index) : undefined, + onToggleVisibility: undefined, + }; + } + }; return (
-
- {queries.length > 0 && ( -
- {queries.map((item) => ( - onSelect(item.id)} - onDuplicate={onDuplicateQuery ? () => onDuplicateQuery(item.index) : undefined} - onRemove={onRemoveQuery ? () => onRemoveQuery(item.index) : undefined} - onToggleVisibility={ - onToggleQueryVisibility ? () => onToggleQueryVisibility(item.index) : undefined - } - /> - ))} -
- )} - - {expressions.length > 0 && ( -
- {expressions.map((item) => ( - onSelect(item.id)} - onDuplicate={onDuplicateExpression ? () => onDuplicateExpression(item.index) : undefined} - onRemove={onRemoveExpression ? () => onRemoveExpression(item.index) : undefined} - onToggleVisibility={ - onToggleExpressionVisibility ? () => onToggleExpressionVisibility(item.index) : undefined - } - /> - ))} -
- )} - - {transforms.length > 0 && ( -
- {transforms.map((item) => ( - onSelect(item.id)} - onRemove={onRemoveTransform ? () => onRemoveTransform(item.index) : undefined} - /> - ))} -
- )} - -
- + {items.map((item) => ( + onSelect(item.id)} + {...getHandlers(item)} /> -
-
+ ))} + + +
@@ -138,26 +113,14 @@ const getStyles = (theme: GrafanaTheme2) => { display: 'flex', flexDirection: 'column', height: '100%', - background: theme.colors.background.primary, - borderRight: `1px solid ${theme.colors.border.weak}`, + width: '100%', overflow: 'hidden', }), scrollContainer: css({ + padding: theme.spacing(2), flex: 1, minHeight: 0, overflow: 'auto', }), - content: css({ - padding: theme.spacing(2), - }), - section: css({ - '&:not(:first-child)': { - marginTop: theme.spacing(2), - }, - }), - addButton: css({ - marginTop: theme.spacing(2), - paddingTop: theme.spacing(2), - }), }; };