From 5ad034973eddce2e671a959f69bb0bcd413acd21 Mon Sep 17 00:00:00 2001 From: Safwan Parkar Date: Thu, 10 Aug 2023 15:53:16 +0400 Subject: [PATCH] Simplify initialization of editable attributes for clarity Instead of cramming all the steps for correct deep cloning, I split the implementation into 4 distinct steps: - define they keys to exclude - filtering the keys - reduce filtered keys into an object - returning a writable deep clone --- .../document-[document]/data/+page.svelte | 42 ++++++++++--------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/document-[document]/data/+page.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/document-[document]/data/+page.svelte index c435b460b..b96634b09 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/document-[document]/data/+page.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/document-[document]/data/+page.svelte @@ -22,25 +22,29 @@ const documentId = $page.params.document; const editing = true; - const work = writable( - deepClone( - Object.keys($doc) - .filter((key) => { - return ![ - '$id', - '$collection', - '$collectionId', - '$databaseId', - '$createdAt', - '$updatedAt' - ].includes(key); - }) - .reduce((obj, key) => { - obj[key] = $doc[key]; - return obj; - }, {}) as Models.Document - ) - ); + function initWork() { + const prohibitedKeys = [ + '$id', + '$collection', + '$collectionId', + '$databaseId', + '$createdAt', + '$updatedAt' + ]; + + const filteredKeys = Object.keys($doc).filter((key) => { + return !prohibitedKeys.includes(key); + }); + + const result = filteredKeys.reduce((obj, key) => { + obj[key] = $doc[key]; + return obj; + }, {}); + + return writable(deepClone(result as Models.Document)); + } + + const work = initWork(); async function updateData() { try {