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 73e1340bd..287ef1a67 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 @@ -68,7 +68,6 @@ } from './helpers/constants'; import { toLocaleDateTime } from '$lib/helpers/date'; import { ID } from '@appwrite.io/console'; - import { areObjectsSame } from '$lib/helpers/object'; interface Props { isNew?: boolean; @@ -115,9 +114,7 @@ // Store the original data to preserve system values let originalData = $state($state.snapshot(data)); - // Check for enable, disable save button. - const hasDataChanged = $derived(!areObjectsSame(data, originalData)); - + // Check if the update is from editor let isUpdatingFromEditor = false; // Track previous isNew state to detect transitions @@ -141,6 +138,18 @@ : generatedId ); + // Check for enable, disable save button. + const hasDataChanged = $derived.by(() => { + // Fast path: reference equality + if (data === originalData) return false; + + // Use cached serialization + const dataStr = serializeData(data); + const origStr = serializeData(originalData); + + return dataStr !== origStr; + }); + // Convert data to formatted JavaScript object notation (no quotes on keys) function dataToString(value: JsonValue, indent = 0, key?: string): string { const indentStr = getIndent(indent);