From aef2a2de5875919003b9308b1ee4b66f5df046da Mon Sep 17 00:00:00 2001 From: Darshan Date: Sun, 1 Jun 2025 12:03:01 +0530 Subject: [PATCH 1/9] update: logic as per changes on backend. --- src/lib/components/csvImportBox.svelte | 40 ++++++++++++-------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/src/lib/components/csvImportBox.svelte b/src/lib/components/csvImportBox.svelte index 8c0e48b8a..1fb499314 100644 --- a/src/lib/components/csvImportBox.svelte +++ b/src/lib/components/csvImportBox.svelte @@ -27,37 +27,35 @@ const importItems: Writable = writable(new Map()); async function showCompletionNotification( - databaseId: string, - collectionId: string, - importData: Payload + database: string, + collection: string, + payload: Payload ) { - await invalidate(Dependencies.DOCUMENTS); - const url = `${base}/project-${page.params.region}-${page.params.project}/databases/database-${databaseId}/collection-${collectionId}`; + const isSuccess = payload.status === 'completed'; - // extract clean message from nested backend error. - const match = importData.errors.join('').match(/message: '(.*)' Message:/i); - const errorMessage = match?.[1]; + // TODO: the migrations worker sends 2 events! + const isError = !isSuccess && !!payload.error; - const type = importData.status === 'completed' ? 'success' : 'error'; - const message = - importData.status === 'completed' - ? 'CSV import finished successfully.' - : `${errorMessage}`; + if (!isSuccess && !isError) return; + + const type = isSuccess ? 'success' : 'error'; + const message = isError ? payload.error : 'CSV import finished successfully.'; + + const url = `${base}/project-${page.params.region}-${page.params.project}/databases/database-${database}/collection-${collection}`; addNotification({ type, message, isHtml: true, buttons: - collectionId === page.params.collection || type === 'error' - ? undefined - : [ - { - name: 'View documents', - method: () => goto(url) - } - ] + isSuccess && collection !== page.params.collection + ? [{ name: 'View documents', method: () => goto(url) }] + : undefined }); + + if (isSuccess) { + await invalidate(Dependencies.DOCUMENTS); + } } async function updateOrAddItem(importData: Payload | Models.Migration) { From dfa89a6827a0680497b7ef3e494c9c1ccd212229 Mon Sep 17 00:00:00 2001 From: Darshan Date: Sun, 1 Jun 2025 12:03:16 +0530 Subject: [PATCH 2/9] fix: lint. --- .../collection-[collection]/table.svelte | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte index 5b09db5e5..20b0a2c4c 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte @@ -28,7 +28,7 @@ Badge, FloatingActionBar, InteractiveText, - Typography, + Typography } from '@appwrite.io/pink-svelte'; import DualTimeView from '$lib/components/dualTimeView.svelte'; @@ -262,9 +262,10 @@ {formatted.value} - + {formatted.whole} From 4b515535047df3cba90b736f6b6354e65d2af00d Mon Sep 17 00:00:00 2001 From: Darshan Date: Tue, 10 Jun 2025 12:20:17 +0530 Subject: [PATCH 3/9] update: changes as per appwrite#9947. --- src/lib/components/csvImportBox.svelte | 9 +++++---- src/lib/stores/preferences.ts | 1 - .../collection-[collection]/table.svelte | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/components/csvImportBox.svelte b/src/lib/components/csvImportBox.svelte index 1fb499314..2af6812d2 100644 --- a/src/lib/components/csvImportBox.svelte +++ b/src/lib/components/csvImportBox.svelte @@ -32,14 +32,15 @@ payload: Payload ) { const isSuccess = payload.status === 'completed'; - - // TODO: the migrations worker sends 2 events! - const isError = !isSuccess && !!payload.error; + const isError = !isSuccess && !!payload.errors; if (!isSuccess && !isError) return; const type = isSuccess ? 'success' : 'error'; - const message = isError ? payload.error : 'CSV import finished successfully.'; + const message = isSuccess + ? 'CSV import finished successfully.' + : (payload.errors[0]?.message ?? + 'Import failed. Check your CSV for correct fields and required values.'); const url = `${base}/project-${page.params.region}-${page.params.project}/databases/database-${database}/collection-${collection}`; diff --git a/src/lib/stores/preferences.ts b/src/lib/stores/preferences.ts index 0dd009cd7..8513fa9c2 100644 --- a/src/lib/stores/preferences.ts +++ b/src/lib/stores/preferences.ts @@ -107,7 +107,6 @@ function createPreferences() { } ); }, - getCustomCollectionColumns: (collectionId: string): Preferences['columns'] => { return preferences?.collections?.[collectionId] ?? []; }, diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte index 2398c449f..3c0be64a8 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte @@ -251,7 +251,7 @@ {:else} {@const formatted = formatColumn(document[id])} {@const isDatetimeAttribute = attr.type === 'datetime'} - {@const isEncryptedAttribute = isString(attr) && !attr.encrypt} + {@const isEncryptedAttribute = isString(attr) && attr.encrypt} {#if isDatetimeAttribute} Timestamp From dc5c4ed25a969792d924957bfc99e7d1154ebc7d Mon Sep 17 00:00:00 2001 From: Darshan Date: Thu, 12 Jun 2025 10:57:30 +0530 Subject: [PATCH 4/9] update: error notification, based on new structure. --- src/lib/components/csvImportBox.svelte | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/lib/components/csvImportBox.svelte b/src/lib/components/csvImportBox.svelte index 2af6812d2..60f93abf6 100644 --- a/src/lib/components/csvImportBox.svelte +++ b/src/lib/components/csvImportBox.svelte @@ -36,12 +36,18 @@ if (!isSuccess && !isError) return; - const type = isSuccess ? 'success' : 'error'; - const message = isSuccess - ? 'CSV import finished successfully.' - : (payload.errors[0]?.message ?? - 'Import failed. Check your CSV for correct fields and required values.'); + let errorMessage = 'Import failed. Check your CSV for correct fields and required values.'; + if (isError && Array.isArray(payload.errors)) { + try { + // the `errors` is a list of json encoded string. + errorMessage = JSON.parse(payload.errors[0]).message; + } catch { + // do nothing, fallback to default message. + } + } + const type = isSuccess ? 'success' : 'error'; + const message = isError ? errorMessage : 'CSV import finished successfully.'; const url = `${base}/project-${page.params.region}-${page.params.project}/databases/database-${database}/collection-${collection}`; addNotification({ From e40ff5496c383f2d7c4bfa028c8d9c9b7e42aff1 Mon Sep 17 00:00:00 2001 From: Darshan Date: Thu, 12 Jun 2025 11:11:44 +0530 Subject: [PATCH 5/9] fix: tests. --- .../collection-[collection]/attributes/string.svelte | 2 +- .../database-[database]/collection-[collection]/table.svelte | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/attributes/string.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/attributes/string.svelte index 3b4a60eb4..aff1747df 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/attributes/string.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/attributes/string.svelte @@ -63,7 +63,7 @@ let savedDefault = data.default; - let showEncrypt = flags.showAttributeEncrypt(page.data); + const showEncrypt = flags.showAttributeEncrypt(page.data); function handleDefaultState(hideDefault: boolean) { if (hideDefault) { diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte index 5e87d66ca..192602e19 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte @@ -168,8 +168,6 @@ ) as Models.AttributeRelationship[]; let checked = false; - - let showEncrypt = flags.showAttributeEncrypt(data); Date: Thu, 12 Jun 2025 11:13:20 +0530 Subject: [PATCH 6/9] fix: tests. --- .../database-[database]/collection-[collection]/table.svelte | 1 - 1 file changed, 1 deletion(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte index 192602e19..167852bb5 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte @@ -32,7 +32,6 @@ } from '@appwrite.io/pink-svelte'; import { toLocaleDateTime } from '$lib/helpers/date'; import DualTimeView from '$lib/components/dualTimeView.svelte'; - import { flags } from '$lib/flags'; export let data: PageData; const databaseId = page.params.database; From 592e0a23a1655465111712c2884d1a6670d107f8 Mon Sep 17 00:00:00 2001 From: Darshan Date: Fri, 13 Jun 2025 16:24:36 +0530 Subject: [PATCH 7/9] fix: migration errors as per updated source. --- .../settings/migrations/details.svelte | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/settings/migrations/details.svelte b/src/routes/(console)/project-[region]-[project]/settings/migrations/details.svelte index 1add18f03..fd175d57d 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/migrations/details.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/migrations/details.svelte @@ -20,8 +20,17 @@ } from '@appwrite.io/pink-svelte'; import { Button } from '$lib/elements/forms'; - export let migration: Models.Migration = null; export let show = false; + export let migration: Models.Migration = null; + + // convert to proper json objects from string! + migration.errors = migration.errors.map((err) => { + try { + return JSON.parse(err); + } catch { + return err; + } + }); type StatusCounters = { [resource in 'Database' | 'Collection' | 'Function' | 'Users']?: StatusCounter; @@ -55,7 +64,7 @@ }; let tab = 'details' as 'details' | 'logs'; - let logs = JSON.stringify(migration, null, 2); + const logs = JSON.stringify(migration, null, 2); Date: Sat, 14 Jun 2025 15:16:05 +0530 Subject: [PATCH 8/9] revert: encrypted string check. --- .../collection-[collection]/table.svelte | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte index 167852bb5..886f253a7 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte @@ -32,6 +32,8 @@ } from '@appwrite.io/pink-svelte'; import { toLocaleDateTime } from '$lib/helpers/date'; import DualTimeView from '$lib/components/dualTimeView.svelte'; + import { flags } from '$lib/flags'; + export let data: PageData; const databaseId = page.params.database; @@ -167,6 +169,8 @@ ) as Models.AttributeRelationship[]; let checked = false; + + let showEncrypt = flags.showAttributeEncrypt(data); Timestamp {toLocaleDateTime(formatted.whole, true, 'UTC')} - {:else if isEncryptedAttribute} + {:else if isEncryptedAttribute && showEncrypt}