From 752e77c74041614d652cf404bc6022ff74bc3c58 Mon Sep 17 00:00:00 2001 From: Saxon Fletcher Date: Mon, 23 Dec 2024 15:26:18 +1000 Subject: [PATCH] unify queryblock and sqlsnippet --- .../interfaces/Reports/GridResize.tsx | 81 ++- .../interfaces/Reports/ParametersPopover.tsx | 2 +- .../interfaces/Reports/QueryBlock.tsx | 556 ++++++++++-------- .../interfaces/Reports/QueryBlockWrapper.tsx | 57 ++ .../ui/AIAssistantPanel/Message.tsx | 6 +- .../AIAssistantPanel/QueryBlockWithProps.tsx | 130 ++++ 6 files changed, 553 insertions(+), 279 deletions(-) create mode 100644 apps/studio/components/interfaces/Reports/QueryBlockWrapper.tsx create mode 100644 apps/studio/components/ui/AIAssistantPanel/QueryBlockWithProps.tsx diff --git a/apps/studio/components/interfaces/Reports/GridResize.tsx b/apps/studio/components/interfaces/Reports/GridResize.tsx index 9b2142cc38a..19ed671210e 100644 --- a/apps/studio/components/interfaces/Reports/GridResize.tsx +++ b/apps/studio/components/interfaces/Reports/GridResize.tsx @@ -29,6 +29,7 @@ import BarChart from 'components/ui/Charts/BarChart' import dayjs from 'dayjs' import { ChartConfig } from '../SQLEditor/UtilityPanel/ChartConfig' import QueryBlock from 'components/interfaces/Reports/QueryBlock' +import QueryBlockWrapper from './QueryBlockWrapper' const ReactGridLayout = WidthProvider(Responsive) @@ -60,12 +61,11 @@ const DEFAULT_CHART_CONFIG: ChartConfig = { interface LayoutItem { id: string label: string - sql?: string - isSnippet?: boolean - results?: any - isChart?: boolean + sql: string + isChart: boolean chartConfig?: ChartConfig - // ... other existing fields ... + results?: any + // ... any other existing fields ... } const GridResize = ({ @@ -81,6 +81,44 @@ const GridResize = ({ }: GridResizeProps) => { const [collectedParams, setCollectedParams] = useState([]) + // Merge parameters from all blocks + const handleBlockParameters = (params: Parameter[]) => { + setCollectedParams((prev) => { + const merged = [...prev] + params.forEach((param) => { + const existingIndex = merged.findIndex((p) => p.name === param.name) + if (existingIndex === -1) { + merged.push(param) + } + }) + return merged + }) + } + + const handleToggleChart = (itemId: string) => { + const updatedLayout = editableReport.layout.map((x: LayoutItem) => { + if (x.id === itemId) { + return { + ...x, + isChart: !x.isChart, + chartConfig: x.chartConfig || DEFAULT_CHART_CONFIG, + } + } + return x + }) + setEditableReport({ ...editableReport, layout: updatedLayout }) + } + + const handleUpdateChartConfig = (itemId: string, config: ChartConfig) => { + const updatedLayout = editableReport.layout.map((x: LayoutItem) => { + if (x.id === itemId) { + return { ...x, chartConfig: config } + } + return x + }) + setEditableReport({ ...editableReport, layout: updatedLayout }) + } + function onLayoutChange(layout: any) { let updatedLayout = [...editableReport.layout] layout.map((item: any) => { @@ -96,21 +134,6 @@ const GridResize = ({ }) } - // Merge parameters from all blocks and notify parent once all are collected - const handleBlockParameters = (params: Parameter[]) => { - console.log('collected:', params) - setCollectedParams((prev) => { - const merged = [...prev] - params.forEach((param) => { - const existingIndex = merged.findIndex((p) => p.name === param.name) - if (existingIndex === -1) { - merged.push(param) - } - }) - return merged - }) - } - // Notify parent when all parameters are collected useEffect(() => { onSetParameter(collectedParams) @@ -132,32 +155,32 @@ const GridResize = ({ isResizable={true} draggableHandle=".grid-item-drag-handle" > - {editableReport.layout.map((x: LayoutItem) => ( + {editableReport.layout.map((item: LayoutItem) => (
-
+
- handleToggleChart(item.id)} + onUpdateChartConfig={(config) => handleUpdateChartConfig(item.id, config)} />
))} diff --git a/apps/studio/components/interfaces/Reports/ParametersPopover.tsx b/apps/studio/components/interfaces/Reports/ParametersPopover.tsx index 6ee157395e1..25aa3def334 100644 --- a/apps/studio/components/interfaces/Reports/ParametersPopover.tsx +++ b/apps/studio/components/interfaces/Reports/ParametersPopover.tsx @@ -132,7 +132,7 @@ const ParametersPopover = ({ return ( -