From aef2a2de5875919003b9308b1ee4b66f5df046da Mon Sep 17 00:00:00 2001 From: Darshan Date: Sun, 1 Jun 2025 12:03:01 +0530 Subject: [PATCH 01/28] 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 02/28] 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 03/28] 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 04/28] 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 05/28] 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 06/28] 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 b15fd6246d77dca98c7ac16c30e609e2f32f0510 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Thu, 12 Jun 2025 14:52:14 -0400 Subject: [PATCH 07/28] Flag for index lengths --- .env.example | 2 +- src/lib/flags.ts | 3 ++- .../indexes/createIndex.svelte | 5 ++++- .../indexes/overviewIndex.svelte | 18 ++++++++++++------ 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/.env.example b/.env.example index 0e8699fc9..bf090442b 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,5 @@ PUBLIC_CONSOLE_MODE=self-hosted -PUBLIC_CONSOLE_FEATURE_FLAGS=sites,csv-import,attribute-encrypt +PUBLIC_CONSOLE_FEATURE_FLAGS=sites,csv-import,attribute-encrypt,index-lengths PUBLIC_APPWRITE_MULTI_REGION=false PUBLIC_APPWRITE_ENDPOINT=http://localhost/v1 PUBLIC_STRIPE_KEY= diff --git a/src/lib/flags.ts b/src/lib/flags.ts index 3c00ee6dc..db2417b83 100644 --- a/src/lib/flags.ts +++ b/src/lib/flags.ts @@ -21,5 +21,6 @@ function isFlagEnabled(name: string) { export const flags = { showSites: isFlagEnabled('sites'), showCsvImport: isFlagEnabled('csv-import'), - showAttributeEncrypt: isFlagEnabled('attribute-encrypt') + showAttributeEncrypt: isFlagEnabled('attribute-encrypt'), + showIndexLengths: isFlagEnabled('index-lengths') }; diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/indexes/createIndex.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/indexes/createIndex.svelte index ea4b38c50..74359ef81 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/indexes/createIndex.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/indexes/createIndex.svelte @@ -14,6 +14,7 @@ import { type Attributes, collection, indexes } from '../store'; import { Icon, Layout } from '@appwrite.io/pink-svelte'; import { IconPlus } from '@appwrite.io/pink-icons-svelte'; + import { flags } from '$lib/flags'; export let showCreateIndex = false; export let externalAttribute: Attributes = null; @@ -38,6 +39,8 @@ let attributeList = [{ value: '', order: '', length: null }]; + let showLengths = flags.showIndexLengths(page.data); + function generateIndexKey() { let indexKeys = $indexes.map((index) => index.key); @@ -149,7 +152,7 @@ placeholder="Select Order" /> - {#if selectedType === IndexType.Key} + {#if selectedType === IndexType.Key && showLengths} @@ -39,12 +43,14 @@ id={`value-${selectedIndex.orders[i]}`} value={selectedIndex.orders[i]} readonly /> - + {#if showLengths} + + {/if} {/each} {/if} From 592e0a23a1655465111712c2884d1a6670d107f8 Mon Sep 17 00:00:00 2001 From: Darshan Date: Fri, 13 Jun 2025 16:24:36 +0530 Subject: [PATCH 08/28] 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 12:02:59 +0530 Subject: [PATCH 09/28] fix: relationship selection issues. --- .../document-[document]/+page.svelte | 3 +- .../attributes/relationship.svelte | 276 +++++++++++------- 2 files changed, 170 insertions(+), 109 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/+page.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/+page.svelte index 103f9a8b2..31db52abd 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/+page.svelte @@ -20,7 +20,6 @@ const databaseId = page.params.database; const collectionId = page.params.collection; const documentId = page.params.document; - const editing = true; function initWork() { const prohibitedKeys = [ @@ -124,7 +123,7 @@ {label} - + diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/relationship.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/relationship.svelte index af18757b5..e63977b1b 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/relationship.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/relationship.svelte @@ -1,24 +1,22 @@ {#if isRelationshipToMany(attribute)} -
- - - {label} - - {optionalText} - + + + + + {label} + + {optionalText} + + + + {#if showTopAddButton} + + {/if} - {#if editing || total === 0} - + + + + {#if showEmptyInput} + + { + if (!relatedList[0]) relatedList = ['']; + updateRelatedList(); + }} /> + + {/if} + + + {#if editing && hasItems} + {#each paginatedItems as _, paginatedIndex} + {@const actualIndex = offset + paginatedIndex} + + + {#if relatedList[actualIndex]} +
+ +
+ {/if} +
+ {/each} + {/if} + + + {#if !editing && hasItems} + {#each relatedList as item, i} + + +
+ +
+
+ {/each} + {/if} + + + {#if showInput} + + +
+ +
+
+ {/if} +
+ + {#if showBottomAddButton} + + + {/if}
-
    - {#if !editing && relatedList?.length} - {#each relatedList as item, i} - - - {/each} - {/if} - - {#if showInput} - !relatedList.includes(n.value))} - on:change={() => { - value = relatedList; - showInput = false; - }} /> - - {/if} - {#if paginatedItems && editing} - {#each paginatedItems as item, i} - - - {/each} - {/if} -
- {#if editing} -
-

Total results: {total}

- -
- {/if} - - {#if total > 0 && !editing} - - {/if} -
+ {:else} Date: Sat, 14 Jun 2025 12:38:04 +0530 Subject: [PATCH 10/28] fix: time display logic. --- .../database-[database]/collection-[collection]/table.svelte | 5 +++-- 1 file changed, 3 insertions(+), 2 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 5c5b947e5..b996fbdff 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,12 +251,13 @@ {/if} {:else} + {@const datetime = document[id]} {@const formatted = formatColumn(document[id])} {@const isDatetimeAttribute = attr.type === 'datetime'} {#if isDatetimeAttribute} - + Timestamp - {toLocaleDateTime(formatted.whole, true, 'UTC')} + {toLocaleDateTime(datetime, true)} {:else if isString(attr) && attr.encrypt && showEncrypt} - {:else} - - - - - - - {$createPlatform.name} ({$createPlatform.key}) - - + + {:else} + + + + + + + {$createPlatform.name} ({$createPlatform.key}) + - - - {/if} - - - {#if isPlatformCreated} -
- - - 1. Clone the starter kit from GitHub using the terminal or Android - Studio. - - - -
- -
- - 2. Open the file and update the configuration - settings. - - -
- -
- - 3. Run the app on a connected device or emulator, then click the button to verify the setup.
-
- {/if} -
- +
+
+ {/if} + + + {#if isPlatformCreated} +
+ + + 1. Clone the starter kit from GitHub using the terminal or Android Studio. + + + +
+ +
+ + 2. Open the file and update the configuration + settings. + + +
+ +
+ + 3. Run the app on a connected device or emulator, then click the button to verify the setup. +
+
+ {/if} + + diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createApple.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createApple.svelte index 20a0f1c25..3690efb38 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createApple.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createApple.svelte @@ -103,115 +103,119 @@ APPWRITE_PUBLIC_ENDPOINT: "${sdk.forProject(page.params.region, page.params.proj -
- - - - {#each Object.entries(platforms) as [key, value]} - - {/each} - + + + + + + {#each Object.entries(platforms) as [key, value]} + + {/each} + - - {#if !isPlatformCreated} -
- - - + + {#if !isPlatformCreated} +
+ + + - - - - - - You can find your Bundle Identifier in the General tab for - your app's primary target in Xcode. - - - - - - - -
- {:else} - - - - - - - {$createPlatform.name} ({$createPlatform.key}) - + + + + + + You can find your Bundle Identifier in the General tab + for your app's primary target in Xcode. + + + - - - - {/if} - - {#if isPlatformCreated} -
- - - 1. Clone the starter kit from GitHub using the terminal or XCode. - - - -
- -
- - 2. Open the file and - update the configuration settings. - - -
- -
- - 3. Run the app on a connected device or simulator, then click the button to verify the setup. + submit + forceShowLoader + submissionLoader={isCreatingPlatform} + disabled={!platform || + !$createPlatform.name || + !$createPlatform.key || + isCreatingPlatform}> + Create platform + +
+
+ {:else} + + + + + + + {$createPlatform.name} ({$createPlatform.key}) + + + + -
- {/if} -
- + {/if} +
+ + + + {#if isPlatformCreated} +
+ + + 1. Clone the starter kit from GitHub using the terminal or XCode. + + + +
+ +
+ + 2. Open the file and update + the configuration settings. + + +
+ +
+ + 3. Run the app on a connected device or simulator, then click the button to verify the setup. +
+
+ {/if} +
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte index 8d0aa74df..32f44a13c 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte @@ -162,132 +162,136 @@ static const String APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject(page.params.reg -
- - - - {#each Object.entries(platforms) as [key, value]} - - {/each} - + + + + + + {#each Object.entries(platforms) as [key, value]} + + {/each} + - - {#if !isPlatformCreated} -
- - - - - - {#if platform === PlatformType.Flutterweb} + + {#if !isPlatformCreated} +
+ + - - - - {placeholder[platform].tooltip} - - - - {:else} - - - - - {placeholder[platform].tooltip} - - - - {/if} - + bind:value={$createPlatform.name} /> - - -
- {:else} - - - - - - - {$createPlatform.name} ({$createPlatform.key}) - + + {#if platform === PlatformType.Flutterweb} + + + + + {placeholder[platform].tooltip} + + + + {:else} + + + + + {placeholder[platform].tooltip} + + + + {/if} + + - - - {/if} - - - {#if isPlatformCreated} -
- - - 1. Clone the starter kit from GitHub using the terminal, Android Studio - or VSCode. - - - -
- -
- - 2. Open the file and update the configuration settings. - - -
- -
- - 3. Run the app on a connected device or simulator, then click the button to verify the setup. +
+ {:else} + + + + + + + {$createPlatform.name} ({$createPlatform.key ?? + $createPlatform.hostname}) + + + + -
- {/if} -
- + {/if} +
+ + + + {#if isPlatformCreated} +
+ + + 1. Clone the starter kit from GitHub using the terminal, Android Studio or + VSCode. + + + +
+ +
+ + 2. Open the file + and update the configuration settings. + + +
+ +
+ + 3. Run the app on a connected device or simulator, then click the button to verify the setup. +
+
+ {/if} +
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte index d8b01e0eb..ae2d7dbd4 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte @@ -130,115 +130,118 @@ const APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject(page.params.region, page.para -
- - - - {#each Object.entries(platforms) as [key, value]} - - {/each} - - - - {#if !isPlatformCreated} -
- - - - - - - - - - {placeholder[platform].tooltip} - - - - - - - -
- {:else} - - - - - - - {$createPlatform.name} ({$createPlatform.key}) - - - - + + + + + + {#each Object.entries(platforms) as [key, value]} + + {/each} - {/if} - - {#if isPlatformCreated} -
- - - 1. Clone the starter kit from GitHub using the terminal or VSCode. - + + {#if !isPlatformCreated} +
+ + + - -
- -
+ + + + + + {placeholder[platform].tooltip} + + + +
- 2. Open the file and update the configuration settings. - - -
- -
- - 3. Run the app on a connected device or simulator, then click the button to verify the setup. + submit + forceShowLoader + submissionLoader={isCreatingPlatform} + disabled={!platform || + !$createPlatform.name || + !$createPlatform.key || + isCreatingPlatform}> + Create platform + +
+
+ {:else} + + + + + + + {$createPlatform.name} ({$createPlatform.key}) + + + + -
- {/if} -
- + {/if} +
+ + + + {#if isPlatformCreated} +
+ + + 1. Clone the starter kit from GitHub using the terminal or VSCode. + + + +
+ +
+ + 2. Open the file and + update the configuration settings. + + +
+ +
+ + 3. Run the app on a connected device or simulator, then click the button to verify the setup. +
+
+ {/if} +
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createWeb.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createWeb.svelte index bb675c7a9..e598a595a 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createWeb.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createWeb.svelte @@ -197,157 +197,151 @@ ${prefix}APPWRITE_ENDPOINT = "${sdk.forProject(page.params.region, page.params.p resetPlatformStore(); }; }); + + $: console.log('Reactivity triggered'); -
- - - {#if !isPlatformCreated || isChangingFramework} -
- -
- {#each frameworks as framework} - - {/each} -
+ + + {#if !isPlatformCreated || isChangingFramework} + + +
+ +
+ {#each frameworks as framework} + + {/each} +
+ + {#if isChangingFramework} + + {/if} + +
+
+ {#if !isChangingFramework} +
+ + + + + The hostname that your website will use to interact with the + Appwrite APIs in production or development environments. No + protocol or port number required. + + +
- {#if isChangingFramework} - - {/if} + + {/if} +
+ + {:else} + + + + {selectedFramework.label} -
- {#if !isChangingFramework} -
- - - - - The hostname that your website will use to interact with the - Appwrite APIs in production or development environments. No - protocol or port number required. - - -
- - {/if} - {:else} - - - - {selectedFramework.label} - - - - {/if} + +
+ {/if} - - {#if isPlatformCreated && !isChangingFramework} -
- - - 1. Clone the starter kit from GitHub using the terminal or VSCode. - + + {#if isPlatformCreated && !isChangingFramework} +
+ + + 1. Clone the starter kit from GitHub using the terminal or VSCode. + - -
- -
- - {#if selectedFramework.key === 'angular'} - 2. Change - to reflect the values below: - {:else} - 2. Rename into and update the values. - {/if} - - -
- -
+ +
+ +
+ {#if selectedFramework.key === 'angular'} 3. Install project dependencies - - -
- -
- - 4. Run the app, then click the 2. Change button to verify the setup. - -
- -
-
-
- - - Demo app runs on http://localhost:{selectedFramework.portNumber} - - {/if} -
- + code="src/environments/environment.ts" /> + to reflect the values below: + {:else} + 2. Rename into and update the values. + {/if} + + +
+ +
+ + 3. Install project dependencies + + +
+ +
+ + 4. Run the app, then click the button + to verify the setup. + +
+ +
+ +
+ + + Demo app runs on http://localhost:{selectedFramework.portNumber} + + {/if} +
From 03811bdab654c2cf6e2b6c7688e7a58b00ccf961 Mon Sep 17 00:00:00 2001 From: Darshan Date: Sat, 14 Jun 2025 16:49:50 +0530 Subject: [PATCH 15/28] fix: don't confirm for exit if platform already created. --- .../overview/platforms/createAndroid.svelte | 2 +- .../overview/platforms/createApple.svelte | 2 +- .../overview/platforms/createFlutter.svelte | 2 +- .../overview/platforms/createReactNative.svelte | 2 +- .../overview/platforms/createWeb.svelte | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createAndroid.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createAndroid.svelte index 8141929fe..59e98a08b 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createAndroid.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createAndroid.svelte @@ -91,7 +91,7 @@ const val APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject(page.params.region, page. }); - + {#if !isPlatformCreated} diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createApple.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createApple.svelte index 3690efb38..8f342e1a2 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createApple.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createApple.svelte @@ -102,7 +102,7 @@ APPWRITE_PUBLIC_ENDPOINT: "${sdk.forProject(page.params.region, page.params.proj }); - +
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte index 32f44a13c..72d23f7c3 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte @@ -161,7 +161,7 @@ static const String APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject(page.params.reg }); - + diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte index ae2d7dbd4..50d8904f6 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte @@ -129,7 +129,7 @@ const APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject(page.params.region, page.para }); - + diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createWeb.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createWeb.svelte index e598a595a..202afce46 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createWeb.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createWeb.svelte @@ -201,7 +201,7 @@ ${prefix}APPWRITE_ENDPOINT = "${sdk.forProject(page.params.region, page.params.p $: console.log('Reactivity triggered'); - + {#if !isPlatformCreated || isChangingFramework} From c97074bd7e27cbbb118d1353c6d3d6c3ee290e15 Mon Sep 17 00:00:00 2001 From: Darshan Date: Sat, 14 Jun 2025 17:00:36 +0530 Subject: [PATCH 16/28] fix: missing platform keys on details. --- .../[platform]/+page@project-[region]-[project].svelte | 2 +- .../overview/platforms/createFlutter.svelte | 4 ++-- .../overview/platforms/createWeb.svelte | 2 -- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/+page@project-[region]-[project].svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/+page@project-[region]-[project].svelte index 09335b492..7f3984344 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/+page@project-[region]-[project].svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/+page@project-[region]-[project].svelte @@ -98,7 +98,7 @@
{$platform.name}
-

{$platform.hostname}

+

{$platform.hostname || $platform.key}

diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte index 72d23f7c3..ab916c8ac 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte @@ -250,8 +250,8 @@ static const String APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject(page.params.reg - {$createPlatform.name} ({$createPlatform.key ?? - $createPlatform.hostname}) + {$createPlatform.name} ({$createPlatform.hostname || + $createPlatform.key})
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createWeb.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createWeb.svelte index 202afce46..87d799d0a 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createWeb.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createWeb.svelte @@ -197,8 +197,6 @@ ${prefix}APPWRITE_ENDPOINT = "${sdk.forProject(page.params.region, page.params.p resetPlatformStore(); }; }); - - $: console.log('Reactivity triggered'); From e931fadad62c32fb13d04ef2724c153b19dbc511 Mon Sep 17 00:00:00 2001 From: Darshan Date: Sat, 14 Jun 2025 17:53:27 +0530 Subject: [PATCH 17/28] fix: wizard copies. --- .../overview/platforms/createAndroid.svelte | 4 ++-- .../overview/platforms/createApple.svelte | 3 ++- .../overview/platforms/createFlutter.svelte | 4 ++-- .../overview/platforms/createReactNative.svelte | 14 +++++++------- .../overview/platforms/createWeb.svelte | 9 ++++++--- 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createAndroid.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createAndroid.svelte index ac89f191a..f56d1fd7e 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createAndroid.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createAndroid.svelte @@ -160,8 +160,8 @@ const val APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject(page.params.region, page.
- 1. Clone the starter kit from GitHub using the terminal or Android - Studio. + 1. If you're starting a new project, you can clone our starter kit from + GitHub using the terminal, VSCode or Android Studio. diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createApple.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createApple.svelte index 20a0f1c25..f63c7702b 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createApple.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createApple.svelte @@ -186,7 +186,8 @@ APPWRITE_PUBLIC_ENDPOINT: "${sdk.forProject(page.params.region, page.params.proj
- 1. Clone the starter kit from GitHub using the terminal or XCode. + 1. If you're starting a new project, you can clone our starter kit from + GitHub using the terminal or XCode. diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte index 8d0aa74df..ef6b62a88 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte @@ -260,8 +260,8 @@ static const String APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject(page.params.reg
- 1. Clone the starter kit from GitHub using the terminal, Android Studio - or VSCode. + 1. If you're starting a new project, you can clone our starter kit from + GitHub using the terminal, VSCode or Android Studio. diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte index d8b01e0eb..a5d019254 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte @@ -25,7 +25,6 @@ import ConnectionLine from './components/ConnectionLine.svelte'; import OnboardingPlatformCard from './components/OnboardingPlatformCard.svelte'; import { PlatformType } from '@appwrite.io/console'; - import { isCloud } from '$lib/system'; let showExitModal = false; let isPlatformCreated = false; @@ -36,9 +35,7 @@ const gitCloneCode = '\ngit clone https://github.com/appwrite/starter-for-react-native\ncd starter-for-react-native\n'; - const updateConfigCode = isCloud - ? `const APPWRITE_PROJECT_ID = "${projectId}";` - : `const APPWRITE_PROJECT_ID = "${projectId}"; + const updateConfigCode = `const APPWRITE_PROJECT_ID = "${projectId}"; const APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject(page.params.region, page.params.project).client.config.endpoint}"; `; @@ -212,7 +209,8 @@ const APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject(page.params.region, page.para
- 1. Clone the starter kit from GitHub using the terminal or VSCode. + 1. If you're starting a new project, you can clone our starter kit from + GitHub using the terminal or VSCode. @@ -221,9 +219,11 @@ const APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject(page.params.region, page.para 2. Open the file 2. Add your Appwrite credentials to and update the configuration settings. + code=".env.example" /> then rename it to if needed.
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createWeb.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createWeb.svelte index bb675c7a9..8a8096182 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createWeb.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createWeb.svelte @@ -274,7 +274,8 @@ ${prefix}APPWRITE_ENDPOINT = "${sdk.forProject(page.params.region, page.params.p
- 1. Clone the starter kit from GitHub using the terminal or VSCode. + 1. If you're starting a new project, you can clone our starter kit from + GitHub using the terminal or VSCode. @@ -293,9 +294,11 @@ ${prefix}APPWRITE_ENDPOINT = "${sdk.forProject(page.params.region, page.params.p to reflect the values below: {:else} 2. Rename into 2. Add your Appwrite credentials to and update the values. + code=".env.example" /> then rename it to if needed. {/if} From 9aee747fd739219bf07201c9602f026f4827e17c Mon Sep 17 00:00:00 2001 From: Darshan Date: Sat, 14 Jun 2025 18:00:10 +0530 Subject: [PATCH 18/28] update: env vars. --- .../overview/platforms/createReactNative.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte index a5d019254..0fadb5ff7 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte @@ -35,8 +35,8 @@ const gitCloneCode = '\ngit clone https://github.com/appwrite/starter-for-react-native\ncd starter-for-react-native\n'; - const updateConfigCode = `const APPWRITE_PROJECT_ID = "${projectId}"; -const APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject(page.params.region, page.params.project).client.config.endpoint}"; + const updateConfigCode = `const EXPO_PUBLIC_APPWRITE_PROJECT_ID = "${projectId}"; +const EXPO_PUBLIC_APPWRITE_ENDPOINT = "${sdk.forProject(page.params.region, page.params.project).client.config.endpoint}"; `; export let platform: PlatformType = PlatformType.Reactnativeandroid; From 7de357dca6083d6cba0fb030f1ab526980113f0c Mon Sep 17 00:00:00 2001 From: Darshan Date: Sun, 15 Jun 2025 10:44:27 +0530 Subject: [PATCH 19/28] fix: breadcrumbs not updated after certain steps and routing. --- src/lib/components/breadcrumbs.svelte | 301 +++++++++++++------------- 1 file changed, 155 insertions(+), 146 deletions(-) diff --git a/src/lib/components/breadcrumbs.svelte b/src/lib/components/breadcrumbs.svelte index 01f8c72a2..c23cbe5ad 100644 --- a/src/lib/components/breadcrumbs.svelte +++ b/src/lib/components/breadcrumbs.svelte @@ -190,83 +190,107 @@ $currentPlan?.name.toLocaleLowerCase() !== selectedOrg?.tierName.toLocaleLowerCase() ? $currentPlan.name : selectedOrg?.tierName; // fallback + + $: derivedKey = `${selectedOrg?.$id}-${selectedProject?.$id}`; -
- {#if !$isSmallViewport} - / - - {:else} - - {/if} -