From 75e7506ddeeac4cd0abc2ec10794f920946d98f0 Mon Sep 17 00:00:00 2001 From: Nate Kelley Date: Mon, 22 Sep 2025 21:36:25 -0600 Subject: [PATCH] Remove unused editor + drop version on save --- .../dashboards/mutations/useSaveDashboard.ts | 9 +- .../AppVerticalCodeSplitter.stories.tsx | 85 -------------- .../AppVerticalDiffCodeSplitter.tsx | 104 ------------------ .../DiffSQLContainer.tsx | 61 ---------- .../DatasetEditorController.tsx | 26 ++++- 5 files changed, 31 insertions(+), 254 deletions(-) delete mode 100644 apps/web/src/components/ui/layouts/AppVerticalCodeSplitter/AppVerticalCodeSplitter.stories.tsx delete mode 100644 apps/web/src/components/ui/layouts/AppVerticalCodeSplitter/AppVerticalDiffCodeSplitter.tsx delete mode 100644 apps/web/src/components/ui/layouts/AppVerticalCodeSplitter/DiffSQLContainer.tsx diff --git a/apps/web/src/api/buster_rest/dashboards/mutations/useSaveDashboard.ts b/apps/web/src/api/buster_rest/dashboards/mutations/useSaveDashboard.ts index 609ebd06a..7bcb8a179 100644 --- a/apps/web/src/api/buster_rest/dashboards/mutations/useSaveDashboard.ts +++ b/apps/web/src/api/buster_rest/dashboards/mutations/useSaveDashboard.ts @@ -1,8 +1,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { useNavigate } from '@tanstack/react-router'; import last from 'lodash/last'; -import { create } from 'mutative'; import { dashboardQueryKeys } from '@/api/query_keys/dashboard'; -import { metricsQueryKeys } from '@/api/query_keys/metric'; import { setOriginalDashboard } from '@/context/Dashboards/useOriginalDashboardStore'; import { initializeMetrics } from '../dashboardQueryHelpers'; import { dashboardsUpdateDashboard } from '../requests'; @@ -14,6 +13,7 @@ import { dashboardsUpdateDashboard } from '../requests'; export const useSaveDashboard = (params?: { updateOnSave?: boolean }) => { const updateOnSave = params?.updateOnSave || false; const queryClient = useQueryClient(); + const navigate = useNavigate(); return useMutation({ mutationFn: dashboardsUpdateDashboard, @@ -55,6 +55,11 @@ export const useSaveDashboard = (params?: { updateOnSave?: boolean }) => { const isLatestVersion = data.dashboard.version_number === last(data.versions)?.version_number; if (isLatestVersion) setOriginalDashboard(data.dashboard); + navigate({ + to: '.', + ignoreBlocker: true, + search: (prev) => ({ ...prev, dashboard_version_number: undefined }), + }); }, }); }; diff --git a/apps/web/src/components/ui/layouts/AppVerticalCodeSplitter/AppVerticalCodeSplitter.stories.tsx b/apps/web/src/components/ui/layouts/AppVerticalCodeSplitter/AppVerticalCodeSplitter.stories.tsx deleted file mode 100644 index a9616b091..000000000 --- a/apps/web/src/components/ui/layouts/AppVerticalCodeSplitter/AppVerticalCodeSplitter.stories.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import type { Meta, StoryObj } from '@storybook/react-vite'; -import { AppVerticalCodeSplitter } from './AppVerticalCodeSplitter'; - -const meta: Meta = { - title: 'Features/Layout/AppVerticalCodeSplitter', - component: AppVerticalCodeSplitter, - parameters: { - layout: 'fullscreen', - }, - tags: ['autodocs'], - args: { - className: 'min-h-[600px] min-w-[600px]', - }, - decorators: [ - (Story) => ( -
- -
- ), - ], -}; - -export default meta; -type Story = StoryObj; - -const mockData: Record[] = [ - { id: 1, name: 'Sample Data 1' }, - { id: 2, name: 'Sample Data 2' }, -]; - -export const Default: Story = { - args: { - sql: 'SELECT * FROM sample_table', - setSQL: (sql: string) => alert('SQL changed: ' + sql), - runSQLError: '', - onRunQuery: async () => alert('Running query...'), - data: mockData, - fetchingData: false, - defaultLayout: ['50%', 'auto'], - autoSaveId: 'default-split-for-code-splitter', - }, -}; - -export const WithError: Story = { - args: { - ...Default.args, - runSQLError: 'Invalid SQL syntax', - }, -}; - -export const Loading: Story = { - args: { - ...Default.args, - fetchingData: true, - }, -}; - -export const TopHidden: Story = { - args: { - ...Default.args, - topHidden: true, - }, -}; - -export const CustomGap: Story = { - args: { - ...Default.args, - gapAmount: 6, - }, -}; - -export const WithSaveButton: Story = { - args: { - ...Default.args, - onSaveSQL: async () => alert('Saving SQL...'), - }, -}; - -export const DisabledSave: Story = { - args: { - ...Default.args, - onSaveSQL: async () => alert('Saving SQL...'), - disabledSave: true, - }, -}; diff --git a/apps/web/src/components/ui/layouts/AppVerticalCodeSplitter/AppVerticalDiffCodeSplitter.tsx b/apps/web/src/components/ui/layouts/AppVerticalCodeSplitter/AppVerticalDiffCodeSplitter.tsx deleted file mode 100644 index 501002121..000000000 --- a/apps/web/src/components/ui/layouts/AppVerticalCodeSplitter/AppVerticalDiffCodeSplitter.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import type { DataResult } from '@buster/server-shared/metrics'; -import { forwardRef } from 'react'; -import { - AppSplitter, - type AppSplitterRef, - type LayoutSize, -} from '@/components/ui/layouts/AppSplitter'; -import { DataContainer } from './DataContainer'; -import { DiffSQLContainer } from './DiffSQLContainer'; - -const DEFAULT_LAYOUT: LayoutSize = ['auto', '300px']; - -export interface AppVerticalDiffCodeSplitterProps { - originalValue: string; - value: string; - setValue: (value: string) => void; - language: 'sql' | 'yaml'; - runSQLError: string | undefined; - onRunQuery: () => Promise; - data: DataResult; - fetchingData: boolean; - defaultLayout?: LayoutSize; - initialLayout?: LayoutSize | null; - autoSaveId: string; - topHidden?: boolean; - onSaveSQL?: () => Promise; - disabledSave?: boolean; - gapAmount?: number; - className?: string; - fileName?: string; - versionNumber?: number; -} - -export const AppVerticalDiffCodeSplitter = forwardRef< - AppSplitterRef, - AppVerticalDiffCodeSplitterProps ->( - ( - { - originalValue, - value, - setValue, - language, - runSQLError, - onRunQuery, - onSaveSQL, - data, - initialLayout = null, - fetchingData, - defaultLayout = DEFAULT_LAYOUT, - autoSaveId, - fileName, - versionNumber, - disabledSave = false, - topHidden = false, - gapAmount = 3, - className, - }, - ref - ) => { - //tailwind might not like this, but yolo - const sqlContainerClassName = !topHidden ? `mb-${gapAmount}` : ''; - const dataContainerClassName = !topHidden ? `mt-${gapAmount}` : ''; - - return ( - - } - rightChildren={ - - } - split="horizontal" - defaultLayout={defaultLayout} - initialLayout={initialLayout} - autoSaveId={autoSaveId} - preserveSide="left" - rightPanelMinSize={'80px'} - leftPanelMinSize={'120px'} - leftHidden={topHidden} - className={className} - /> - ); - } -); - -AppVerticalDiffCodeSplitter.displayName = 'AppVerticalDiffCodeSplitter'; diff --git a/apps/web/src/components/ui/layouts/AppVerticalCodeSplitter/DiffSQLContainer.tsx b/apps/web/src/components/ui/layouts/AppVerticalCodeSplitter/DiffSQLContainer.tsx deleted file mode 100644 index cd253ade4..000000000 --- a/apps/web/src/components/ui/layouts/AppVerticalCodeSplitter/DiffSQLContainer.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import React, { useMemo, useState } from 'react'; -import { Button } from '@/components/ui/buttons/Button'; -import { FileCard } from '@/components/ui/card/FileCard'; -import { Copy2 } from '@/components/ui/icons'; -import { AppDiffCodeEditor } from '@/components/ui/inputs/AppDiffCodeEditor'; -import { TextAndVersionPill } from '@/components/ui/typography/TextAndVersionPill'; -import { useBusterNotifications } from '@/context/BusterNotifications'; -import { useMemoizedFn } from '@/hooks/useMemoizedFn'; -import type { AppVerticalCodeSplitterProps } from './AppVerticalCodeSplitter'; - -export const DiffSQLContainer: React.FC<{ - className?: string; - originalValue: string | undefined; - value: string | undefined; - setValue: (value: string) => void; - onRunQuery: () => Promise; - onSaveSQL?: AppVerticalCodeSplitterProps['onSaveSQL']; - disabledSave?: AppVerticalCodeSplitterProps['disabledSave']; - error?: string | null; - language: 'sql' | 'yaml'; - fileName?: string; - versionNumber?: number; -}> = React.memo(({ language, originalValue, value, setValue, fileName, versionNumber }) => { - // const [isRunning, setIsRunning] = useState(false); - const { openInfoMessage } = useBusterNotifications(); - - const onCopySQL = useMemoizedFn(() => { - navigator.clipboard.writeText(value || ''); - openInfoMessage('Copied to clipboard'); - }); - - // const onRunQueryPreflight = useMemoizedFn(async () => { - // setIsRunning(true); - // await onRunQuery(); - // setIsRunning(false); - // }); - - return ( -