diff --git a/packages/web/src/tabs/CollectionDataTab.svelte b/packages/web/src/tabs/CollectionDataTab.svelte index a8123f3f5..d4e606f09 100644 --- a/packages/web/src/tabs/CollectionDataTab.svelte +++ b/packages/web/src/tabs/CollectionDataTab.svelte @@ -51,6 +51,8 @@ import ToolStripCommandButton from '../buttons/ToolStripCommandButton.svelte'; import ToolStripExportButton, { createQuickExportHandlerRef } from '../buttons/ToolStripExportButton.svelte'; import { getBoolSettingsValue } from '../settings/settingsTools'; + import useEditorData from '../query/useEditorData'; + import { markTabSaved, markTabUnsaved } from '../utility/common'; export let tabid; export let conid; @@ -65,8 +67,28 @@ const config = useGridConfig(tabid); const cache = writable(createGridCache()); + const { editorState, editorValue, setEditorData } = useEditorData({ + tabid, + onInitialData: value => { + dispatchChangeSet({ type: 'reset', value }); + invalidateCommands(); + if (changeSetContainsChanges(value)) { + markTabUnsaved(tabid); + } + }, + }); + const [changeSetStore, dispatchChangeSet] = createUndoReducer(createChangeSet()); + $: { + setEditorData($changeSetStore.value); + if (changeSetContainsChanges($changeSetStore?.value)) { + markTabUnsaved(tabid); + } else { + markTabSaved(tabid); + } + } + $: { $changeSetStore; invalidateCommands(); diff --git a/packages/web/src/tabs/TableDataTab.svelte b/packages/web/src/tabs/TableDataTab.svelte index ce63bba61..83e0ae912 100644 --- a/packages/web/src/tabs/TableDataTab.svelte +++ b/packages/web/src/tabs/TableDataTab.svelte @@ -99,6 +99,8 @@ import ToolStripExportButton, { createQuickExportHandlerRef } from '../buttons/ToolStripExportButton.svelte'; import ToolStripCommandSplitButton from '../buttons/ToolStripCommandSplitButton.svelte'; import { getBoolSettingsValue, getIntSettingsValue } from '../settings/settingsTools'; + import useEditorData from '../query/useEditorData'; + import { markTabSaved, markTabUnsaved } from '../utility/common'; export let tabid; export let conid; @@ -118,8 +120,28 @@ $: connection = useConnectionInfo({ conid }); + const { editorState, editorValue, setEditorData } = useEditorData({ + tabid, + onInitialData: value => { + dispatchChangeSet({ type: 'reset', value }); + invalidateCommands(); + if (changeSetContainsChanges(value)) { + markTabUnsaved(tabid); + } + }, + }); + const [changeSetStore, dispatchChangeSet] = createUndoReducer(createChangeSet()); + $: { + setEditorData($changeSetStore.value); + if (changeSetContainsChanges($changeSetStore?.value)) { + markTabUnsaved(tabid); + } else { + markTabSaved(tabid); + } + } + async function handleConfirmSql(sql) { const resp = await apiCall('database-connections/run-script', { conid, database, sql, useTransaction: true }); const { errorMessage } = resp || {};