diff --git a/eslint.config.js b/eslint.config.js index 841ddf352..8bf40b821 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -36,7 +36,7 @@ export default ts.config( // TODO: @itznotabug, this requires a big refactor! 'svelte/no-navigation-without-resolve': 'warn', 'svelte/prefer-svelte-reactivity': 'warn', - 'svelte/prefer-writable-derived': 'warn' + 'svelte/prefer-writable-derived': 'off' } }, { diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/(suggestions)/input.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/(suggestions)/input.svelte index ca93b8c13..5c8a2e341 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/(suggestions)/input.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/(suggestions)/input.svelte @@ -112,7 +112,7 @@ {/if} diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/(components)/editor/helpers/constants.ts b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/(components)/editor/helpers/constants.ts index 0222de960..8ecea7d33 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/(components)/editor/helpers/constants.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/(components)/editor/helpers/constants.ts @@ -5,10 +5,7 @@ export const SYSTEM_KEYS = new Set(['$id:', '$createdAt:', '$updatedAt:']); // timing constants export const LINTER_DELAY = 250; export const DEBOUNCE_DELAY = 200; -export const SUGGESTIONS_HIDE_DELAY = 3000; - -export const AUTOSAVE_DELAY = 2000; -export const ENABLE_AUTOSAVE = false; +export const SAVE_UNDO_TOOLBAR_TIMEOUT = 8000; // regex patterns /* export const UNQUOTED_KEY_REGEX = /([{,]\s*)([a-zA-Z_$][a-zA-Z0-9_$]*)\s*:/g; */ diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/(components)/editor/helpers/theme.ts b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/(components)/editor/helpers/theme.ts index 533dcca5a..27f660886 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/(components)/editor/helpers/theme.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/(components)/editor/helpers/theme.ts @@ -25,7 +25,7 @@ export const customTheme = EditorView.theme({ }, '.cm-line': { padding: '0', - lineHeight: '1.6' + lineHeight: '140%' } }); diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/(components)/editor/view.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/(components)/editor/view.svelte index 92a1ca177..3cb6ef92a 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/(components)/editor/view.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/(components)/editor/view.svelte @@ -45,7 +45,7 @@ import { onMount, onDestroy } from 'svelte'; import Id, { truncateId } from '$lib/components/id.svelte'; import { Icon, Layout, Skeleton, Tooltip } from '@appwrite.io/pink-svelte'; - import { IconDuplicate, IconX } from '@appwrite.io/pink-icons-svelte'; + import { IconDuplicate } from '@appwrite.io/pink-icons-svelte'; import { Button } from '$lib/elements/forms'; import { copy } from '$lib/helpers/copy'; import { isSmallViewport } from '$lib/stores/viewport'; @@ -66,7 +66,6 @@ ALLOWED_DOLLAR_PROPS, DEBOUNCE_DELAY, LINTER_DELAY, - AUTOSAVE_DELAY, INDENT_REGEX, SCALAR_VALUE_REGEX, TRAILING_COMMA_REGEX, @@ -74,12 +73,12 @@ WHITESPACE_ONLY_REGEX, SKELETON_LINES, getIndent, - ENABLE_AUTOSAVE + SAVE_UNDO_TOOLBAR_TIMEOUT } from './helpers/constants'; - import { toLocaleDateTime } from '$lib/helpers/date'; import { ID } from '@appwrite.io/console'; - import { Suggestions, Error as ErrorSonner, Save as SavingSonner } from '../sonners'; import { sleep } from '$lib/helpers/promises'; + import { toLocaleDateTime } from '$lib/helpers/date'; + import { Suggestions, Error as ErrorSonner, Save as SavingSonner } from '../sonners'; import { json5, json5ParseCache, json5ParseLinter } from 'codemirror-json5'; interface Props { @@ -122,7 +121,6 @@ let errorMessage = $state(null); let warningMessage = $state(null); let changeTimer: ReturnType | null = null; // debounce timer for parse + onChange - let autoSaveTimer: ReturnType | null = null; // debounce timer for auto-save let tooltipTimer: ReturnType | null = null; // timer for tooltip message reset let pendingCanonicalize = false; // set when a full-document replace (paste-all) occurs let lastExpectedContent = ''; // track latest serialized data to avoid spurious rewrites @@ -1094,12 +1092,6 @@ changeTimer = null; } - // Clear auto-save timer when user starts typing again - if (autoSaveTimer) { - clearTimeout(autoSaveTimer); - autoSaveTimer = null; - } - changeTimer = setTimeout(async () => { const state = update.view.state; const parseCache = state.field(json5ParseCache, false); @@ -1119,42 +1111,6 @@ data = parsed; onChange?.(parsed, hasDataChanged); lastExpectedContent = serializeData(parsed); - - // Check if this was a manual edit (not undo) and trigger auto-save - const isUndoOrRedo = update.transactions.some( - (tr) => - tr.annotation(Transaction.userEvent) === 'undo' || - tr.annotation(Transaction.userEvent) === 'redo' - ); - - if (!isUndoOrRedo && !$isSmallViewport && hasDataChanged && onSave) { - // Clear existing auto-save timer - if (autoSaveTimer) { - clearTimeout(autoSaveTimer); - autoSaveTimer = null; - } - - // Set new auto-save timer - if (ENABLE_AUTOSAVE) { - autoSaveTimer = setTimeout(() => { - const parseCache = editorView?.state.field(json5ParseCache, false); - if (parseCache?.err || errorMessage) { - autoSaveTimer = null; - return; - } - if ( - editorView && - getLintWarningSummary(editorView.state).hasWarning - ) { - autoSaveTimer = null; - return; - } - - handleSave(); - autoSaveTimer = null; - }, AUTOSAVE_DELAY); - } - } }, DEBOUNCE_DELAY); }), readOnlyCompartment.of(EditorState.readOnly.of(readonly)) @@ -1176,10 +1132,6 @@ clearTimeout(changeTimer); changeTimer = null; } - if (autoSaveTimer) { - clearTimeout(autoSaveTimer); - autoSaveTimer = null; - } if (tooltipTimer) { clearTimeout(tooltipTimer); tooltipTimer = null; @@ -1284,7 +1236,7 @@ saveSonnerState = 'saving'; } else if (saveSonnerState === 'saving') { saveSonnerState = 'saved'; - sleep(AUTOSAVE_DELAY).then(() => { + sleep(SAVE_UNDO_TOOLBAR_TIMEOUT).then(() => { if (saveSonnerState === 'saved') { saveSonnerState = null; } @@ -1311,19 +1263,9 @@ {#if documentId} {#if isNew && onCancel} - - - - Cancel - + {/if}