From e1e889062562b273f327f25d89e7430b1f11944b Mon Sep 17 00:00:00 2001 From: Darshan Date: Tue, 4 Mar 2025 19:55:32 +0530 Subject: [PATCH 01/82] update: initial wip on project migration feature to pink2 wizards. --- .../(migration-wizard)/resource-form.svelte | 371 ++++++------------ .../{step1.svelte => credentials.svelte} | 117 +++--- .../migrations/(import)/importReport.svelte | 37 ++ .../migrations/(import)/wizard.svelte | 171 +++++++- .../settings/migrations/+page.svelte | 15 +- 5 files changed, 375 insertions(+), 336 deletions(-) rename src/routes/(console)/project-[project]/settings/migrations/(import)/{step1.svelte => credentials.svelte} (62%) create mode 100644 src/routes/(console)/project-[project]/settings/migrations/(import)/importReport.svelte diff --git a/src/routes/(console)/(migration-wizard)/resource-form.svelte b/src/routes/(console)/(migration-wizard)/resource-form.svelte index ac2327914..039c69687 100644 --- a/src/routes/(console)/(migration-wizard)/resource-form.svelte +++ b/src/routes/(console)/(migration-wizard)/resource-form.svelte @@ -1,12 +1,9 @@ - -
- Good to know -
-
- -
-
-

Project settings are not imported

-

You will need to set service and project settings manually

-
-
-
-
- -
-
-

Keep your organization plan's limits in mind

-

- Make sure to have enough storage in your organization plan when importing files. -

-
-
- {#if $provider.provider === 'firebase'} -
-
- -
-
-

Possible charges by Firebase

-

- Appwrite does not impose charges for importing data, but please note that - Firebase may have its own pricing for this service -

-
-
- {:else} -
-
- -
-
-

Transfer is free of charge

-

You won't be charged for Appwrite bandwidth usage for importing data

-
-
- {/if} -
-
- -{#if report && !isVersionAtLeast(version, '1.4.0') && $provider.provider === 'appwrite'} -
- p - 1); - } - } - ]}> + + {#if report && !isVersionAtLeast(version, '1.4.0') && $provider.provider === 'appwrite'} + Functions not available for import To migrate your functions, update the version of the Appwrite instance you're importing from to a version newer than 1.4 - -
-{/if} + + {/if} -{#if error} -
- p - 1); - } - } - ]}> - Request failed + {#if error} + Please check if your credentials are filled in correctly in the previous step - -
-{/if} + + {/if} -
    -
  • - -
  • + + + + Deselect all + Select all + + + -
  • - -
  • -
- -
    {#if resources?.includes('user')} -
  • - -
    - Users + + - {#if $provider.provider !== 'firebase'} - {#if report?.user !== undefined} - {report.user} - {:else if !error} - - {/if} - {/if} + +
    +
    -
    - Import all users - - {#if resources?.includes('team')} -
      -
    • - -
      - Include teams - {#if $provider.provider === 'firebase'} - {#if report?.team !== undefined} - {report.team} - {:else if !error} - - {/if} - {/if} -
      -
      - Import all teams and the team memberships of your users -
    • -
    - {/if} -
  • + {/if} {#if resources?.includes('database')} -
  • - -
    - Databases - {#if $provider.provider !== 'firebase'} - {#if report?.database !== undefined} - {report.database} - {:else if !error} - - {/if} - {/if} -
    -
    - Import all databases, including collections, indexes and attributes + + - {#if resources?.includes('document')} -
      -
    • - -
      - Include documents - {#if $provider.provider !== 'firebase'} - {#if report?.document !== undefined} - {report.document} - {:else if !error} - - {/if} - {/if} -
      -
      - Import all of your documents -
    • -
    - {/if} -
  • +
    + +
    + {/if} {#if resources?.includes('function') && isVersionAtLeast(version, '1.4.0')} -
  • - -
    - Functions - {#if $provider.provider !== 'firebase'} - {#if report?.function !== undefined} - {report.function} - {:else if !error} - - {/if} - {/if} -
    -
    - Import all functions and their active deployment -
      - {#if resources?.includes('environment-variable')} -
    • - -
      - Include environment variables -
      -
      - Import all environment variables -
    • - {/if} - {#if resources?.includes('deployment')} -
    • - -
      - Include inactive deployments -
      -
      - Import all deployments that are not currently active -
    • - {/if} -
    -
  • + + + + {#if resources?.includes('environment-variable') || resources?.includes('deployment')} +
    + + {#if resources?.includes('environment-variable')} + + {/if} + + {#if resources?.includes('deployment')} + + {/if} + +
    + {/if} +
    {/if} {#if resources?.includes('bucket') && resources?.includes('file')} -
  • - -
    - Storage - {#if $provider.provider !== 'firebase'} - {#if report?.size !== undefined} - {`${report.size.toFixed(2)}MB`} - {:else if !error} - - {/if} - {/if} -
    -
    + {@const storageSize = report?.size >= 0 ? `${report?.size.toFixed(2)}MB` : undefined} + + -

    - Import all buckets - {#if $provider.provider !== 'firebase' && report?.bucket} - {report.bucket} - {/if} - and files - {#if $provider.provider !== 'firebase' && report?.file} - {report.file} - {/if} -

    -
  • +
    + + Import all buckets + {#if $provider.provider !== 'firebase' && report?.bucket} + {report.bucket} + {/if} + and files + {#if $provider.provider !== 'firebase' && report?.file} + {report.file} + {/if} + +
    + {/if} -
+ diff --git a/src/routes/(console)/project-[project]/settings/migrations/+page.svelte b/src/routes/(console)/project-[project]/settings/migrations/+page.svelte index 46566c1e6..3b4eb3a77 100644 --- a/src/routes/(console)/project-[project]/settings/migrations/+page.svelte +++ b/src/routes/(console)/project-[project]/settings/migrations/+page.svelte @@ -34,18 +34,6 @@ let showExport = false; let showMigration = false; - const getStatus = (status: string) => { - if (status === 'failed') { - return 'failed'; - } else if (status === 'completed') { - return 'completed'; - } else if (status === 'processing') { - return 'processing'; - } - - return 'pending'; - }; - onMount(async () => { sdk.forConsole.client.subscribe(['project', 'console'], (response) => { if (response.events.includes('migrations.*')) { @@ -160,7 +148,6 @@ {#each data.migrations as entry} - {@const status = getStatus(entry.status)} {isSameDay(new Date(), new Date(entry.$createdAt)) ? 'Today' @@ -168,7 +155,7 @@ {entry.source} - +
From 125fb5e730783ae3373b3ba81a7a57a8331cd173 Mon Sep 17 00:00:00 2001 From: Darshan Date: Thu, 6 Mar 2025 13:07:55 +0530 Subject: [PATCH 02/82] update: layout, copies, --- package.json | 4 +- pnpm-lock.yaml | 32 ++-- .../(migration-wizard)/resource-form.svelte | 33 ++-- .../migrations/(import)/credentials.svelte | 5 +- .../migrations/(import)/importReport.svelte | 11 +- .../settings/migrations/(import)/step2.svelte | 22 --- .../migrations/(import)/wizard.svelte | 180 ++++++++++-------- 7 files changed, 144 insertions(+), 143 deletions(-) delete mode 100644 src/routes/(console)/project-[project]/settings/migrations/(import)/step2.svelte diff --git a/package.json b/package.json index 121f0eb03..03a5d409c 100644 --- a/package.json +++ b/package.json @@ -21,9 +21,9 @@ "dependencies": { "@appwrite.io/console": "https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@ac51fcb", "@appwrite.io/pink-icons": "0.25.0", - "@appwrite.io/pink-icons-svelte": "https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@f57e0157 ", + "@appwrite.io/pink-icons-svelte": "https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@291 ", "@appwrite.io/pink-legacy": "^1.0.2", - "@appwrite.io/pink-svelte": "https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@f57e0157", + "@appwrite.io/pink-svelte": "https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@291", "@popperjs/core": "^2.11.8", "@sentry/sveltekit": "^8.38.0", "@stripe/stripe-js": "^3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cf4746227..032f5cf50 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,14 +15,14 @@ importers: specifier: 0.25.0 version: 0.25.0 '@appwrite.io/pink-icons-svelte': - specifier: 'https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@f57e0157 ' - version: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@f57e0157(svelte@4.2.19) + specifier: 'https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@291 ' + version: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@291 (svelte@4.2.19) '@appwrite.io/pink-legacy': specifier: ^1.0.2 version: 1.0.2 '@appwrite.io/pink-svelte': - specifier: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@f57e0157 - version: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@f57e0157(react-dom@18.3.1(react@18.3.1))(svelte@4.2.19) + specifier: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@291 + version: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@291(react-dom@18.3.1(react@18.3.1))(svelte@4.2.19) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 @@ -107,7 +107,7 @@ importers: version: 6.6.3 '@testing-library/svelte': specifier: ^5.2.4 - version: 5.2.7(svelte@4.2.19)(vite@5.4.14(@types/node@22.13.5)(sass@1.85.1))(vitest@1.6.1) + version: 5.2.7(svelte@4.2.19)(vite@5.4.14(@types/node@22.13.5)(sass@1.85.1))(vitest@1.6.1(@types/node@22.13.5)(@vitest/ui@1.6.1)(jsdom@22.1.0)(sass@1.85.1)) '@testing-library/user-event': specifier: ^14.5.2 version: 14.6.1(@testing-library/dom@10.4.0) @@ -215,14 +215,14 @@ packages: resolution: {tarball: https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@ac51fcb} version: 1.2.1 - '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@f57e0157': - resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@f57e0157} + '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@291 ': + resolution: {tarball: 'https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@291 '} version: 1.0.0-next.7 peerDependencies: svelte: ^4.0.0 - '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@f57e0157006c846dc899e7bcdb83e5c0fb3c3149': - resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@f57e0157006c846dc899e7bcdb83e5c0fb3c3149} + '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@aedaf83a0e105ca863a264ac2c1bffa001ddc8cf': + resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@aedaf83a0e105ca863a264ac2c1bffa001ddc8cf} version: 1.0.0-next.7 peerDependencies: svelte: ^4.0.0 @@ -236,8 +236,8 @@ packages: '@appwrite.io/pink-legacy@1.0.2': resolution: {integrity: sha512-1AYNcfbV+x0Tyj56CoieSq5g7+u+7F5/LDVN/z+Hx1kp9gj7xc1eT39Dy832xxfihImF6ksjp0FXEMVSBR8cew==} - '@appwrite.io/pink-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@f57e0157': - resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@f57e0157} + '@appwrite.io/pink-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@291': + resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@291} version: 1.0.0-next.85 peerDependencies: react-dom: ^18.0.0 @@ -4099,11 +4099,11 @@ snapshots: '@appwrite.io/console@https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@ac51fcb': {} - '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@f57e0157(svelte@4.2.19)': + '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@291 (svelte@4.2.19)': dependencies: svelte: 4.2.19 - '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@f57e0157006c846dc899e7bcdb83e5c0fb3c3149(svelte@4.2.19)': + '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@aedaf83a0e105ca863a264ac2c1bffa001ddc8cf(svelte@4.2.19)': dependencies: svelte: 4.2.19 @@ -4116,9 +4116,9 @@ snapshots: '@appwrite.io/pink-icons': 1.0.0 the-new-css-reset: 1.11.3 - '@appwrite.io/pink-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@f57e0157(react-dom@18.3.1(react@18.3.1))(svelte@4.2.19)': + '@appwrite.io/pink-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@291(react-dom@18.3.1(react@18.3.1))(svelte@4.2.19)': dependencies: - '@appwrite.io/pink-icons-svelte': https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@f57e0157006c846dc899e7bcdb83e5c0fb3c3149(svelte@4.2.19) + '@appwrite.io/pink-icons-svelte': https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@aedaf83a0e105ca863a264ac2c1bffa001ddc8cf(svelte@4.2.19) '@floating-ui/dom': 1.6.13 '@melt-ui/pp': 0.3.2(@melt-ui/svelte@0.86.3(svelte@4.2.19))(svelte@4.2.19) '@melt-ui/svelte': 0.86.3(svelte@4.2.19) @@ -5375,7 +5375,7 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/svelte@5.2.7(svelte@4.2.19)(vite@5.4.14(@types/node@22.13.5)(sass@1.85.1))(vitest@1.6.1)': + '@testing-library/svelte@5.2.7(svelte@4.2.19)(vite@5.4.14(@types/node@22.13.5)(sass@1.85.1))(vitest@1.6.1(@types/node@22.13.5)(@vitest/ui@1.6.1)(jsdom@22.1.0)(sass@1.85.1))': dependencies: '@testing-library/dom': 10.4.0 svelte: 4.2.19 diff --git a/src/routes/(console)/(migration-wizard)/resource-form.svelte b/src/routes/(console)/(migration-wizard)/resource-form.svelte index 039c69687..89ef8b0b2 100644 --- a/src/routes/(console)/(migration-wizard)/resource-form.svelte +++ b/src/routes/(console)/(migration-wizard)/resource-form.svelte @@ -15,13 +15,14 @@ import type { Models } from '@appwrite.io/console'; import ImportReport from '$routes/(console)/project-[project]/settings/migrations/(import)/importReport.svelte'; + export let errorInResources: boolean; export let formData: ReturnType; export let provider: ReturnType; export let projectSdk: ReturnType; type ValueOf = T[keyof T]; type FormData = WritableValue; - // TL;DR of this type: It gets a object with two levels (in this case FormData) + // TL;DR of this type: It gets an object with two levels (in this case FormData) // And returns a join of the keys with a dot between them. // e.g. If FormData was { users: { root: boolean, teams: boolean } } // The type would be 'users.root' | 'users.teams' @@ -131,12 +132,9 @@ isOpen = false; }); - $: resources = providerResources[$provider.provider]; + $: errorInResources = error; $: wizard.setNextDisabled(!report); - - $: { - console.log(JSON.stringify(report, null, 2)); - } + $: resources = providerResources[$provider.provider]; @@ -157,10 +155,20 @@ - Deselect all - Select all + { + event.preventDefault(); + deselectAll(); + }}>Deselect all + { + event.preventDefault(); + selectAll(); + }}>Select all @@ -173,7 +181,6 @@ handleChange={handleInputChange('users.root')} description="Import all users" reportValue={report?.user} - showReport={$provider.provider !== 'firebase'} isLoading={!error} /> @@ -195,7 +202,6 @@ handleChange={handleInputChange('databases.root')} description="Import all databases, including collections, indexes and attributes" reportValue={report?.database} - showReport={$provider.provider !== 'firebase'} isLoading={!error} />
@@ -205,7 +211,6 @@ handleChange={handleInputChange('databases.documents')} description="Import all functions and their active deployment" reportValue={report?.document} - showReport={$provider.provider !== 'firebase'} isLoading={!error} />
@@ -219,7 +224,6 @@ handleChange={handleInputChange('functions.root')} description="Import all functions and their active deployment" reportValue={report?.function} - showReport={$provider.provider !== 'firebase'} isLoading={!error} /> {#if resources?.includes('environment-variable') || resources?.includes('deployment')} @@ -254,7 +258,6 @@ checked={$formData.storage.root} handleChange={handleInputChange('storage.root')} reportValue={storageSize} - showReport={$provider.provider !== 'firebase'} isLoading={!error} />
diff --git a/src/routes/(console)/project-[project]/settings/migrations/(import)/credentials.svelte b/src/routes/(console)/project-[project]/settings/migrations/(import)/credentials.svelte index 1d799d783..24ec506aa 100644 --- a/src/routes/(console)/project-[project]/settings/migrations/(import)/credentials.svelte +++ b/src/routes/(console)/project-[project]/settings/migrations/(import)/credentials.svelte @@ -8,7 +8,6 @@ InputTextarea } from '$lib/elements/forms'; import { provider } from '.'; - import { onMount } from 'svelte'; export let formSubmitted = false; @@ -71,10 +70,10 @@ + placeholder="Enter Service Account JSON credentials" /> {:else if $provider.provider === 'supabase'} diff --git a/src/routes/(console)/project-[project]/settings/migrations/(import)/importReport.svelte b/src/routes/(console)/project-[project]/settings/migrations/(import)/importReport.svelte index 216132c80..a7c0b4cc3 100644 --- a/src/routes/(console)/project-[project]/settings/migrations/(import)/importReport.svelte +++ b/src/routes/(console)/project-[project]/settings/migrations/(import)/importReport.svelte @@ -3,7 +3,6 @@ export let label: string; export let checked: boolean; - export let showReport: boolean = true; export let isLoading: boolean = false; export let handleChange: (event: Event) => void; export let description: string | undefined = undefined; @@ -16,12 +15,10 @@ - {#if showReport} - {#if reportValue !== undefined} - {reportValue} - {:else if isLoading} - - {/if} + {#if reportValue !== undefined} + {reportValue} + {:else if isLoading} + {/if} diff --git a/src/routes/(console)/project-[project]/settings/migrations/(import)/step2.svelte b/src/routes/(console)/project-[project]/settings/migrations/(import)/step2.svelte deleted file mode 100644 index a78648131..000000000 --- a/src/routes/(console)/project-[project]/settings/migrations/(import)/step2.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - - Resources - - Select the resources you need to migrate to Appwrite. Some resources can be migrated, but - with limitations. - Learn about which resources are supported. - - - diff --git a/src/routes/(console)/project-[project]/settings/migrations/(import)/wizard.svelte b/src/routes/(console)/project-[project]/settings/migrations/(import)/wizard.svelte index 83d67c51b..68eed429f 100644 --- a/src/routes/(console)/project-[project]/settings/migrations/(import)/wizard.svelte +++ b/src/routes/(console)/project-[project]/settings/migrations/(import)/wizard.svelte @@ -10,12 +10,19 @@ import { started } from '../stores'; import { showMigrationBox } from '$lib/components/migrationBox.svelte'; import { addNotification } from '$lib/stores/notifications'; - import { Button, Card, Fieldset, Layout, Typography } from '@appwrite.io/pink-svelte'; + import { Button, Card, Fieldset, Icon, Layout, Typography } from '@appwrite.io/pink-svelte'; import { Link } from '$lib/elements'; - import { Form } from '$lib/elements/forms'; - import { Box, EyebrowHeading } from '$lib/components'; + import { FormList } from '$lib/elements/forms'; + import { EyebrowHeading } from '$lib/components'; import Credentials from './credentials.svelte'; import ResourceForm from '$routes/(console)/(migration-wizard)/resource-form.svelte'; + import { + IconCog, + IconCurrencyDollar, + IconExclamation, + IconTrendingUp + } from '@appwrite.io/pink-icons-svelte'; + import { capitalize } from '$lib/helpers/string'; const onExit = () => { resetImportStores(); @@ -98,16 +105,18 @@ }; let showResources = false; - let showExitModal = false; + let errorInResources = false; + $: isFinalsButtonEnabled = + !errorInResources && + showResources && + Object.values($formData).some((category) => + Object.values(category).some((value) => value === true) + ); - -
+ +
@@ -126,7 +135,8 @@ id={key} value={key} title={platform} - imageRadius="s" /> + imageRadius="s" + disabled={showResources} /> {/each}
@@ -141,17 +151,16 @@ justifyContent="space-between" alignItems="center" gap="xs"> - - Credentials set - + + {capitalize($provider.provider)} credentials set successfully + (showResources = !showResources)}>Update + variant="secondary" + on:click={() => (showResources = !showResources)}> + Update + {/if} @@ -159,67 +168,73 @@ {#if showResources}
- +
{/if} - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + Good to know + + + + + + + + Project settings are not imported + You will need to set service and project settings manually. + + + + + + + + + + Keep your organization plan's limits in mind + Make sure to have enough storage in your organization plan when importing files. + + + + + + {@const isFirebase = $provider.provider === 'firebase'} + + + + + + {isFirebase + ? 'Possible charges by Firebase' + : 'Transfer is free of charge'} + + + {#if isFirebase} + Appwrite does not impose charges for importing data, but please note + that Firebase may have its own pricing for this service + {:else} + You won't be charged for Appwrite bandwidth usage for importing data + {/if} + + + + + Cancel - - Create + Create @@ -237,6 +252,15 @@ .providers { display: grid; gap: var(--gap-l, 16px); - grid-template-columns: repeat(3, 1fr); + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + + @media (max-width: 768px) { + display: flex; + flex-direction: column; + } + } + + .icon-wrapper { + padding-block: 2px; } From d2b4227767025bc4b0825783dbe6f071dd57040c Mon Sep 17 00:00:00 2001 From: Darshan Date: Sat, 8 Mar 2025 12:50:20 +0530 Subject: [PATCH 03/82] address design comments. --- package.json | 4 +- pnpm-lock.yaml | 28 +++--- .../(migration-wizard)/resource-form.svelte | 17 ++-- .../overview/keys/scopes.svelte | 6 +- .../migrations/(import)/credentials.svelte | 5 +- .../migrations/(import)/wizard.svelte | 94 ++++++++++--------- .../settings/migrations/+page.svelte | 24 ++++- .../settings/migrations/details.svelte | 22 ++--- .../settings/migrations/exportModal.svelte | 33 ++++--- 9 files changed, 131 insertions(+), 102 deletions(-) diff --git a/package.json b/package.json index 03a5d409c..8bc90b036 100644 --- a/package.json +++ b/package.json @@ -21,9 +21,9 @@ "dependencies": { "@appwrite.io/console": "https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@ac51fcb", "@appwrite.io/pink-icons": "0.25.0", - "@appwrite.io/pink-icons-svelte": "https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@291 ", + "@appwrite.io/pink-icons-svelte": "https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@294", "@appwrite.io/pink-legacy": "^1.0.2", - "@appwrite.io/pink-svelte": "https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@291", + "@appwrite.io/pink-svelte": "https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@294", "@popperjs/core": "^2.11.8", "@sentry/sveltekit": "^8.38.0", "@stripe/stripe-js": "^3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 032f5cf50..916463ebe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,14 +15,14 @@ importers: specifier: 0.25.0 version: 0.25.0 '@appwrite.io/pink-icons-svelte': - specifier: 'https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@291 ' - version: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@291 (svelte@4.2.19) + specifier: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@294 + version: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@294(svelte@4.2.19) '@appwrite.io/pink-legacy': specifier: ^1.0.2 version: 1.0.2 '@appwrite.io/pink-svelte': - specifier: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@291 - version: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@291(react-dom@18.3.1(react@18.3.1))(svelte@4.2.19) + specifier: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@294 + version: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@294(react-dom@18.3.1(react@18.3.1))(svelte@4.2.19) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 @@ -215,14 +215,14 @@ packages: resolution: {tarball: https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@ac51fcb} version: 1.2.1 - '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@291 ': - resolution: {tarball: 'https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@291 '} + '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@19a4e8e0fb092518aa9f9b00db6568a8a7e3a394': + resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@19a4e8e0fb092518aa9f9b00db6568a8a7e3a394} version: 1.0.0-next.7 peerDependencies: svelte: ^4.0.0 - '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@aedaf83a0e105ca863a264ac2c1bffa001ddc8cf': - resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@aedaf83a0e105ca863a264ac2c1bffa001ddc8cf} + '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@294': + resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@294} version: 1.0.0-next.7 peerDependencies: svelte: ^4.0.0 @@ -236,8 +236,8 @@ packages: '@appwrite.io/pink-legacy@1.0.2': resolution: {integrity: sha512-1AYNcfbV+x0Tyj56CoieSq5g7+u+7F5/LDVN/z+Hx1kp9gj7xc1eT39Dy832xxfihImF6ksjp0FXEMVSBR8cew==} - '@appwrite.io/pink-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@291': - resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@291} + '@appwrite.io/pink-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@294': + resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@294} version: 1.0.0-next.85 peerDependencies: react-dom: ^18.0.0 @@ -4099,11 +4099,11 @@ snapshots: '@appwrite.io/console@https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@ac51fcb': {} - '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@291 (svelte@4.2.19)': + '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@19a4e8e0fb092518aa9f9b00db6568a8a7e3a394(svelte@4.2.19)': dependencies: svelte: 4.2.19 - '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@aedaf83a0e105ca863a264ac2c1bffa001ddc8cf(svelte@4.2.19)': + '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@294(svelte@4.2.19)': dependencies: svelte: 4.2.19 @@ -4116,9 +4116,9 @@ snapshots: '@appwrite.io/pink-icons': 1.0.0 the-new-css-reset: 1.11.3 - '@appwrite.io/pink-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@291(react-dom@18.3.1(react@18.3.1))(svelte@4.2.19)': + '@appwrite.io/pink-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@294(react-dom@18.3.1(react@18.3.1))(svelte@4.2.19)': dependencies: - '@appwrite.io/pink-icons-svelte': https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@aedaf83a0e105ca863a264ac2c1bffa001ddc8cf(svelte@4.2.19) + '@appwrite.io/pink-icons-svelte': https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@19a4e8e0fb092518aa9f9b00db6568a8a7e3a394(svelte@4.2.19) '@floating-ui/dom': 1.6.13 '@melt-ui/pp': 0.3.2(@melt-ui/svelte@0.86.3(svelte@4.2.19))(svelte@4.2.19) '@melt-ui/svelte': 0.86.3(svelte@4.2.19) diff --git a/src/routes/(console)/(migration-wizard)/resource-form.svelte b/src/routes/(console)/(migration-wizard)/resource-form.svelte index 89ef8b0b2..a8ff2f4ec 100644 --- a/src/routes/(console)/(migration-wizard)/resource-form.svelte +++ b/src/routes/(console)/(migration-wizard)/resource-form.svelte @@ -2,7 +2,7 @@ import { deepMap } from '$lib/helpers/object'; import type { WritableValue } from '$lib/helpers/types'; import { type getSdkForProject } from '$lib/stores/sdk'; - import { Alert, Button, Divider, Layout, Tag, Typography } from '@appwrite.io/pink-svelte'; + import { Alert, Divider, Layout, Tag, Typography } from '@appwrite.io/pink-svelte'; import { onMount } from 'svelte'; import { createMigrationFormStore, @@ -11,6 +11,7 @@ providerResources, resourcesToMigrationForm } from '$lib/stores/migration'; + import { Button } from '$lib/elements/forms'; import { wizard } from '$lib/stores/wizard'; import type { Models } from '@appwrite.io/console'; import ImportReport from '$routes/(console)/project-[project]/settings/migrations/(import)/importReport.svelte'; @@ -155,20 +156,18 @@ - { event.preventDefault(); deselectAll(); - }}>Deselect all - Deselect all + diff --git a/src/routes/(console)/project-[project]/overview/keys/scopes.svelte b/src/routes/(console)/project-[project]/overview/keys/scopes.svelte index 7bc921b5e..05cd2ab10 100644 --- a/src/routes/(console)/project-[project]/overview/keys/scopes.svelte +++ b/src/routes/(console)/project-[project]/overview/keys/scopes.svelte @@ -1,11 +1,9 @@ @@ -156,7 +175,8 @@ {entry.source} - + {@const status = getTypedStatus(entry)} +
diff --git a/src/routes/(console)/project-[project]/settings/migrations/details.svelte b/src/routes/(console)/project-[project]/settings/migrations/details.svelte index 1219e2963..4812d05dd 100644 --- a/src/routes/(console)/project-[project]/settings/migrations/details.svelte +++ b/src/routes/(console)/project-[project]/settings/migrations/details.svelte @@ -7,7 +7,7 @@ import { formatNum } from '$lib/helpers/string'; import type { Models } from '@appwrite.io/console'; import { ResourcesFriendly } from '$lib/stores/migration'; - import { Card, Layout, Typography, Code } from '@appwrite.io/pink-svelte'; + import { Card, Layout, Typography, Code, Spinner, Tag } from '@appwrite.io/pink-svelte'; export let migration: Models.Migration = null; export let show = false; @@ -44,6 +44,7 @@ }; let tab = 'details' as 'details' | 'logs'; + let logs = JSON.stringify(migration, null, 2); {#if tab === 'logs'} - + {:else if tab === 'details'} @@ -94,14 +95,12 @@
{#each Object.keys(statusCounters) as entity} {@const entityCounter = statusCounters[entity]} -
+
{#if hasError(entityCounter)} {:else if isLoading(entityCounter)} -
- -
+ {:else if hasSucceeded(entityCounter)} {:else} @@ -114,9 +113,10 @@ >{total(Object.values(entityCounter)) > 1 ? ResourcesFriendly[entity].plural : ResourcesFriendly[entity].singular} - {totalItems(entityCounter)} + + {totalItems(entityCounter)}
-
+ {/each}
{/if} @@ -127,7 +127,7 @@ .box { padding: 0; - > div { + > :global(div) { padding: 1.25rem; &:not(:last-child) { @@ -142,10 +142,10 @@ width: 1.5rem; height: 1.5rem; - > * { - position: absolute; + > :global(*) { top: 50%; left: 50%; + position: absolute; transform: translate(-50%, -50%); } diff --git a/src/routes/(console)/project-[project]/settings/migrations/exportModal.svelte b/src/routes/(console)/project-[project]/settings/migrations/exportModal.svelte index ff6539a7c..feae63ed1 100644 --- a/src/routes/(console)/project-[project]/settings/migrations/exportModal.svelte +++ b/src/routes/(console)/project-[project]/settings/migrations/exportModal.svelte @@ -1,11 +1,12 @@ - + API key creation By initiating the transfer, an API key will be automatically generated in the background, which you can delete after completion - + { - if (!submitted) return; - const input = e.target; - const value = input.value; - - if (!isValidEndpoint(value)) { - input.setCustomValidity('Please enter a valid endpoint'); - } else { - input.setCustomValidity(''); - } - input.reportValidity(); - }} /> + on:input={validateInput} />

From 3f658b7a9481582159c4002734f78b163174fd37 Mon Sep 17 00:00:00 2001 From: Darshan Date: Sat, 8 Mar 2025 13:06:28 +0530 Subject: [PATCH 04/82] misc: changes. --- .../settings/migrations/exportModal.svelte | 70 ++++++++++--------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/src/routes/(console)/project-[project]/settings/migrations/exportModal.svelte b/src/routes/(console)/project-[project]/settings/migrations/exportModal.svelte index feae63ed1..b02c59a5b 100644 --- a/src/routes/(console)/project-[project]/settings/migrations/exportModal.svelte +++ b/src/routes/(console)/project-[project]/settings/migrations/exportModal.svelte @@ -1,15 +1,17 @@ @@ -128,32 +119,43 @@ + bind:value={endpointUrl} + label="Endpoint self-hosted instance" + placeholder="https://" /> -

- Share your feedback: why our self-hosted solution works better for you -

-

+ + + Share your feedback: why our self-hosted solution works better for you + + We appreciate your continued support and we understand that our self-hosted solution might better fit your needs. To help us improve our Cloud solution, please share why it works better for you. Your feedback is important to us and we'll use it to make our services better. -

-
+ -
+
-
- You will be redirected to your self-hosted instance + + You will be redirected to your self-hosted instance - -
+ +
From 067da796129d5a6434fa628f0e88392c71c91a72 Mon Sep 17 00:00:00 2001 From: Darshan Date: Fri, 18 Apr 2025 10:53:14 +0530 Subject: [PATCH 05/82] address comments: change typography and `FormList` replacements. --- .../migrations/(import)/credentials.svelte | 33 +++++++++---------- .../migrations/(import)/wizard.svelte | 5 ++- .../settings/migrations/exportModal.svelte | 25 +++----------- 3 files changed, 21 insertions(+), 42 deletions(-) diff --git a/src/routes/(console)/project-[project]/settings/migrations/(import)/credentials.svelte b/src/routes/(console)/project-[project]/settings/migrations/(import)/credentials.svelte index ebb801a9e..d89ea81ef 100644 --- a/src/routes/(console)/project-[project]/settings/migrations/(import)/credentials.svelte +++ b/src/routes/(console)/project-[project]/settings/migrations/(import)/credentials.svelte @@ -1,13 +1,7 @@ - +
@@ -185,7 +184,7 @@
{/if}
-
+ diff --git a/src/routes/(console)/project-[project]/settings/migrations/exportModal.svelte b/src/routes/(console)/project-[project]/settings/migrations/exportModal.svelte index e9c15735c..b01504b85 100644 --- a/src/routes/(console)/project-[project]/settings/migrations/exportModal.svelte +++ b/src/routes/(console)/project-[project]/settings/migrations/exportModal.svelte @@ -6,7 +6,7 @@ import { getFormData } from '$lib/helpers/form'; import { feedback } from '$lib/stores/feedback'; import { Alert, Layout, Typography } from '@appwrite.io/pink-svelte'; - import { Button, FormList, InputText, InputTextarea } from '$lib/elements/forms'; + import { Button, InputText, InputTextarea } from '$lib/elements/forms'; export let show = false; @@ -108,22 +108,10 @@ redirecting = false; window.location.href = dest; }; - - function handleInvalid(event: Event) { - const input = event.target as HTMLInputElement; - const value = input.value; - - if (!isValidEndpoint(value)) { - input.setCustomValidity('Please enter a valid endpoint'); - } else { - input.setCustomValidity(''); - } - input.reportValidity(); - } - + API key creation By initiating the transfer, an API key will be automatically generated in the background, @@ -136,12 +124,7 @@ autofocus bind:value={endpointUrl} label="Endpoint self-hosted instance" - placeholder="https://" - on:input={(e) => { - if (!redirecting) return; - handleInvalid(e); - }} - /> + placeholder="https://" /> @@ -157,7 +140,7 @@ - + Date: Thu, 22 May 2025 16:28:32 -0700 Subject: [PATCH 06/82] fix(support): fix upgrade URL for free organization Even though upgradeURL isn't used when there are no free orgs, this line is still evaluated and will throw an error because freeOrganization is undefined. This commit adds a null check to prevent this error. --- src/lib/components/support.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/support.svelte b/src/lib/components/support.svelte index 2520ef032..d05d2639c 100644 --- a/src/lib/components/support.svelte +++ b/src/lib/components/support.svelte @@ -28,7 +28,7 @@ (team) => !$plansInfo.get((team as Organization).billingPlan)?.premiumSupport ); - $: upgradeURL = `${base}/organization-${freeOrganization.$id}/change-plan`; + $: upgradeURL = `${base}/organization-${freeOrganization?.$id}/change-plan`; $: supportTimings = `${utcHourToLocaleHour('16:00')} - ${utcHourToLocaleHour('00:00')} ${localeShortTimezoneName()}`; From 2a6dbc729f3229b89da3c9f04c2997a0b292ba67 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Thu, 22 May 2025 16:31:25 -0700 Subject: [PATCH 07/82] fix(billing): fix error when currentPlan or organization is undefined When going from /account to /organization/[organization]/change-plan, the currentPlan and organization variables may not be defined as the states are still being set. This change ensures an error isn't thrown so that the states can update fully. --- .../organization-[organization]/change-plan/+page.svelte | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/change-plan/+page.svelte b/src/routes/(console)/organization-[organization]/change-plan/+page.svelte index 2f63c5532..ae83f8c26 100644 --- a/src/routes/(console)/organization-[organization]/change-plan/+page.svelte +++ b/src/routes/(console)/organization-[organization]/change-plan/+page.svelte @@ -241,9 +241,9 @@ } } - $: isUpgrade = $plansInfo.get(selectedPlan).order > $currentPlan.order; - $: isDowngrade = $plansInfo.get(selectedPlan).order < $currentPlan.order; - $: isButtonDisabled = $organization.billingPlan === selectedPlan; + $: isUpgrade = $plansInfo.get(selectedPlan).order > $currentPlan?.order; + $: isDowngrade = $plansInfo.get(selectedPlan).order < $currentPlan?.order; + $: isButtonDisabled = $organization?.billingPlan === selectedPlan; From 737aeb422723dcecb73a7fc847c5910333186042 Mon Sep 17 00:00:00 2001 From: Darshan Date: Fri, 23 May 2025 12:50:32 +0530 Subject: [PATCH 08/82] update: fix status code with correct options, show target to rules. --- src/lib/stores/domains.ts | 14 ++++++-------- .../function-[function]/domains/table.svelte | 14 +++++++++----- .../sites/site-[site]/domains/table.svelte | 14 +++++++++----- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/lib/stores/domains.ts b/src/lib/stores/domains.ts index ea339f83d..348e10c9b 100644 --- a/src/lib/stores/domains.ts +++ b/src/lib/stores/domains.ts @@ -1,23 +1,21 @@ +import { StatusCode } from '@appwrite.io/console'; + export const statusCodeOptions = [ { label: '301 Moved permanently', - value: 301 + value: StatusCode.MovedPermanently301 }, { label: '302 Found', - value: 302 - }, - { - label: '303 See other', - value: 303 + value: StatusCode.Found302 }, { label: '307 Temporary redirect', - value: 307 + value: StatusCode.TemporaryRedirect307 }, { label: '308 Permanent redirect', - value: 308 + value: StatusCode.PermanentRedirect308 } ]; diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/table.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/table.svelte index 65813ed6a..4cd12187b 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/table.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/table.svelte @@ -27,6 +27,14 @@ let showDelete = $state(false); let showRetry = $state(false); let selectedDomain: Models.ProxyRule = $state(null); + + const domainTarget = (proxy: Models.ProxyRule) => { + return proxy?.redirectUrl + ? 'Redirect to ' + proxy.redirectUrl + : proxy?.deploymentVcsProviderBranch + ? 'Deployed from' + proxy.deploymentVcsProviderBranch + : 'Active deployment'; + }; @@ -64,11 +72,7 @@ {/if} {:else if column.id === 'target'} - {domain?.redirectUrl - ? 'Redirect to ' + domain.redirectUrl - : domain?.deploymentVcsProviderBranch - ? 'Deployed from' + domain.deploymentVcsProviderBranch - : '-'} + {domainTarget(domain)} {/if} {/each} diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/table.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/table.svelte index 020947970..0d82b3bc3 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/table.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/table.svelte @@ -27,6 +27,14 @@ let showDelete = $state(false); let showRetry = $state(false); let selectedDomain: Models.ProxyRule = $state(null); + + const domainTarget = (proxy: Models.ProxyRule) => { + return proxy?.redirectUrl + ? 'Redirect to ' + proxy.redirectUrl + : proxy?.deploymentVcsProviderBranch + ? 'Deployed from' + proxy.deploymentVcsProviderBranch + : 'Active deployment'; + }; @@ -65,11 +73,7 @@ {/if} {:else if column.id === 'target'} - {domain?.redirectUrl - ? 'Redirect to ' + domain.redirectUrl - : domain?.deploymentVcsProviderBranch - ? 'Deployed from' + domain.deploymentVcsProviderBranch - : '-'} + {domainTarget(domain)} {/if} {/each} From 289d9fc94c216fcf4469e583aac348ce2919ba4f Mon Sep 17 00:00:00 2001 From: Darshan Date: Fri, 23 May 2025 13:04:30 +0530 Subject: [PATCH 09/82] update: rename all `domain` vars to `proxy` if `ProxyRule` type for clarity in functions. --- .../function-[function]/domains/+page.svelte | 6 ++-- .../function-[function]/domains/+page.ts | 2 +- .../domains/deleteDomainModal.svelte | 11 +++---- .../domains/recordsCard.svelte | 7 ++--- .../domains/retryDomainModal.svelte | 15 +++++----- .../function-[function]/domains/table.svelte | 30 +++++++++---------- 6 files changed, 35 insertions(+), 36 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/+page.svelte index e1ab5a837..eaba6f04b 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/+page.svelte @@ -18,7 +18,7 @@ let showDelete = $state(false); let showRetry = $state(false); - let selectedDomain: Models.ProxyRule = null; + let selectedProxyRule: Models.ProxyRule = null; @@ -83,9 +83,9 @@ {#if showDelete} - + {/if} {#if showRetry} - + {/if} diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/+page.ts b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/+page.ts index 8e96e426a..50397306c 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/+page.ts @@ -26,7 +26,7 @@ export const load: PageLoad = async ({ depends, params, url, route }) => { limit, query, search, - domains: await sdk + proxyRules: await sdk .forProject(params.region, params.project) .proxy.listRules( [ diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/deleteDomainModal.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/deleteDomainModal.svelte index 1882bc282..c5ce1db80 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/deleteDomainModal.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/deleteDomainModal.svelte @@ -11,15 +11,16 @@ import { page } from '$app/state'; export let show = false; - export let selectedDomain: Models.ProxyRule; - let confirm = false; + export let selectedProxyRule: Models.ProxyRule; + let error = ''; + let confirm = false; async function deleteDomain() { try { await sdk .forProject(page.params.region, page.params.project) - .proxy.deleteRule(selectedDomain.$id); + .proxy.deleteRule(selectedProxyRule.$id); await invalidate(Dependencies.FUNCTION_DOMAINS); show = false; addNotification({ @@ -35,13 +36,13 @@ - {#if selectedDomain} + {#if selectedProxyRule} Are you sure you want to delete this domain? You will no longer be able to execute your function by visiting: - {selectedDomain.domain} + {selectedProxyRule.domain} {/if} import { Link } from '$lib/elements'; - import type { Domain } from '$lib/sdk/domains'; import { IconInfo } from '@appwrite.io/pink-icons-svelte'; import { Badge, @@ -14,7 +13,7 @@ import type { Models } from '@appwrite.io/console'; import { consoleVariables } from '$routes/(console)/store'; - export let domain: Domain | Models.ProxyRule; + export let proxyRule: Models.ProxyRule;
@@ -22,7 +21,7 @@ - {domain?.domain} + {proxyRule?.domain} @@ -39,7 +38,7 @@ CNAME - {domain?.domain} + {proxyRule?.domain} - - {#if selectedDomain} - + + {#if selectedProxyRule} + {/if} diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/table.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/table.svelte index 4cd12187b..1c9df426f 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/table.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/table.svelte @@ -19,16 +19,16 @@ import { columns } from './store'; let { - domains + proxyRules }: { - domains: Models.ProxyRuleList; + proxyRules: Models.ProxyRuleList; } = $props(); let showDelete = $state(false); let showRetry = $state(false); - let selectedDomain: Models.ProxyRule = $state(null); + let selectedProxyRule: Models.ProxyRule = $state(null); - const domainTarget = (proxy: Models.ProxyRule) => { + const proxyTarget = (proxy: Models.ProxyRule) => { return proxy?.redirectUrl ? 'Redirect to ' + proxy.redirectUrl : proxy?.deploymentVcsProviderBranch @@ -46,24 +46,24 @@ {/each} - {#each domains.rules as domain} + {#each proxyRules.rules as proxyRule} {#each $columns as column} {#if column.id === 'domain'} - + - {domain.domain} + {proxyRule.domain} - {#if domain.status === 'verifying'} + {#if proxyRule.status === 'verifying'} - {:else if domain.status !== 'verified'} + {:else if proxyRule.status !== 'verified'} {:else if column.id === 'target'} - {domainTarget(domain)} + {proxyTarget(proxyRule)} {/if} {/each} @@ -91,11 +91,11 @@ - {#if domain.status !== 'verified'} + {#if proxyRule.status !== 'verified'} { - selectedDomain = domain; + selectedProxyRule = proxyRule; showRetry = true; toggle(e); }}> @@ -106,7 +106,7 @@ status="danger" leadingIcon={IconTrash} on:click={(e) => { - selectedDomain = domain; + selectedProxyRule = proxyRule; showDelete = true; toggle(e); trackEvent(Click.DomainDeleteClick, { @@ -125,9 +125,9 @@ {#if showDelete} - + {/if} {#if showRetry} - + {/if} From 6ead88a74353d58e545675da6fc36269caa75da2 Mon Sep 17 00:00:00 2001 From: Darshan Date: Fri, 23 May 2025 13:50:25 +0530 Subject: [PATCH 10/82] update: rename all `domain` vars to `proxy` if `ProxyRule` type for clarity in sites. --- .../sites/site-[site]/domains/+page.svelte | 6 ++-- .../sites/site-[site]/domains/+page.ts | 2 +- .../domains/deleteDomainModal.svelte | 10 +++---- .../domains/retryDomainModal.svelte | 14 ++++----- .../sites/site-[site]/domains/table.svelte | 30 +++++++++---------- 5 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.svelte index 23537ff99..8e4d4c3e7 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.svelte @@ -29,14 +29,14 @@ - {#if data.domains.total} - + {#if data.proxyRules.total} +
+ total={data.proxyRules.total} /> {:else if data?.search} - {#if data.domains.total} -
+ {#if data.proxyRules.total} +
+ total={data.proxyRules.total} /> {:else if data?.search} From 6816c63fa8196e0e914804f41f09b6555b7eab29 Mon Sep 17 00:00:00 2001 From: Arman Date: Fri, 23 May 2025 11:27:44 +0200 Subject: [PATCH 12/82] fix: logs missing url, deploments overview table --- package.json | 6 +++--- pnpm-lock.yaml | 19 +++++++++---------- src/lib/components/logs/logsRequest.svelte | 9 +++++++-- .../site-[site]/deploymentsOverview.svelte | 10 +++++++--- 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index dd211eda9..14e3308bb 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1", "@appwrite.io/pink-legacy": "^1.0.3", - "@appwrite.io/pink-svelte": "https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@12707b9", + "@appwrite.io/pink-svelte": "https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7", "@popperjs/core": "^2.11.8", "@sentry/sveltekit": "^8.38.0", "@stripe/stripe-js": "^3.5.0", @@ -79,12 +79,12 @@ "svelte-check": "^4.1.5", "svelte-preprocess": "^6.0.3", "svelte-sequential-preprocessor": "^2.0.2", + "tldts": "^7.0.7", "tslib": "^2.8.1", "typescript": "^5.8.2", "typescript-eslint": "^8.30.1", "vite": "^6.2.3", - "vitest": "^3.0.0", - "tldts": "^7.0.7" + "vitest": "^3.0.0" }, "pnpm": { "onlyBuiltDependencies": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4585dc30e..ad29a5d49 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,8 +27,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 '@appwrite.io/pink-svelte': - specifier: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@12707b9 - version: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@12707b9(svelte@5.25.3) + specifier: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7 + version: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7(svelte@5.25.3) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 @@ -261,9 +261,8 @@ packages: resolution: {tarball: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@1959} version: 1.5.2 - '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@12707b95033c5822745ec6a2250a9cd0de10a498': - resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@12707b95033c5822745ec6a2250a9cd0de10a498} - version: 2.0.0-RC.1 + '@appwrite.io/pink-icons-svelte@2.0.0-RC.1': + resolution: {integrity: sha512-iLFlV55hj8mGuAbmxJGenxN5RaZMmVT4GJb9dv/MP1xBAtYibFq7JvBcxm18qV2KU8c31Rntf+Ub4GL7HwqTYg==} peerDependencies: svelte: ^4.0.0 @@ -282,8 +281,8 @@ packages: '@appwrite.io/pink-legacy@1.0.3': resolution: {integrity: sha512-GGde5fmPhs+s6/3aFeMPc/kKADG/gTFkYQSy6oBN8pK0y0XNCLrZZgBv+EBbdhwdtqVEWXa0X85Mv9w7jcIlwQ==} - '@appwrite.io/pink-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@12707b9': - resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@12707b9} + '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7': + resolution: {tarball: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7} version: 2.0.0-RC.2 peerDependencies: svelte: ^4.0.0 @@ -3628,7 +3627,7 @@ snapshots: '@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@1959': {} - '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@12707b95033c5822745ec6a2250a9cd0de10a498(svelte@5.25.3)': + '@appwrite.io/pink-icons-svelte@2.0.0-RC.1(svelte@5.25.3)': dependencies: svelte: 5.25.3 @@ -3645,9 +3644,9 @@ snapshots: '@appwrite.io/pink-icons': 1.0.0 the-new-css-reset: 1.11.3 - '@appwrite.io/pink-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@12707b9(svelte@5.25.3)': + '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7(svelte@5.25.3)': dependencies: - '@appwrite.io/pink-icons-svelte': https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@12707b95033c5822745ec6a2250a9cd0de10a498(svelte@5.25.3) + '@appwrite.io/pink-icons-svelte': 2.0.0-RC.1(svelte@5.25.3) '@floating-ui/dom': 1.6.13 '@melt-ui/pp': 0.3.2(@melt-ui/svelte@0.86.6(svelte@5.25.3))(svelte@5.25.3) '@melt-ui/svelte': 0.86.6(svelte@5.25.3) diff --git a/src/lib/components/logs/logsRequest.svelte b/src/lib/components/logs/logsRequest.svelte index 85bd2482a..0e05ce4ed 100644 --- a/src/lib/components/logs/logsRequest.svelte +++ b/src/lib/components/logs/logsRequest.svelte @@ -1,4 +1,5 @@ @@ -122,12 +133,8 @@ - Missing headers? Check the docs to see the supported data and how to log it. + Missing headers? Check the docs to see + the supported data and how to log it. {:else} diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/executions/sheet.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/executions/sheet.svelte index fd6e2bee1..e31caff20 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/executions/sheet.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/executions/sheet.svelte @@ -167,7 +167,7 @@ - + diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/logs/sheet.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/logs/sheet.svelte index 881e4e3d2..184406e24 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/logs/sheet.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/logs/sheet.svelte @@ -141,7 +141,7 @@ - + From 275b0f4cd340b160d077bfca1d219465028250db Mon Sep 17 00:00:00 2001 From: Arman Date: Fri, 23 May 2025 13:57:03 +0200 Subject: [PATCH 14/82] fix: logic --- src/lib/components/logs/logsRequest.svelte | 11 +++++------ src/lib/components/logs/logsResponse.svelte | 5 ++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/lib/components/logs/logsRequest.svelte b/src/lib/components/logs/logsRequest.svelte index 3d582f2d0..dc04eb022 100644 --- a/src/lib/components/logs/logsRequest.svelte +++ b/src/lib/components/logs/logsRequest.svelte @@ -25,6 +25,11 @@ let parameters = $state([]); + const href = + product === 'site' + ? 'https://appwrite.io/docs/products/sites/logs#log-details' + : 'https://appwrite.io/docs/products/functions/develop#logging'; + onMount(() => { try { // Add dummy base URL to parse relative paths @@ -47,12 +52,6 @@ requestTab = 'headers'; } }); - - let href = $derived( - product === 'site' - ? 'https://appwrite.io/docs/products/sites/logs#log-details' - : 'https://appwrite.io/docs/products/functions/develop#logging' - ); diff --git a/src/lib/components/logs/logsResponse.svelte b/src/lib/components/logs/logsResponse.svelte index 227efc636..a1361af54 100644 --- a/src/lib/components/logs/logsResponse.svelte +++ b/src/lib/components/logs/logsResponse.svelte @@ -28,11 +28,10 @@ let responseTab: 'logs' | 'errors' | 'headers' | 'body' = $state('logs'); - let href = $derived( + const href = product === 'site' ? 'https://appwrite.io/docs/products/sites/logs#log-details' - : 'https://appwrite.io/docs/products/functions/develop#logging' - ); + : 'https://appwrite.io/docs/products/functions/develop#logging'; onMount(() => { if (selectedLog?.errors) { From b310d94ba28433115bec92440e597e2234231e8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Fri, 23 May 2025 23:18:52 +0200 Subject: [PATCH 15/82] fix-self-hosted-ports --- src/lib/stores/sdk.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/stores/sdk.ts b/src/lib/stores/sdk.ts index 9b46263cf..00acfef72 100644 --- a/src/lib/stores/sdk.ts +++ b/src/lib/stores/sdk.ts @@ -43,7 +43,7 @@ export function getApiEndpoint(region?: string): string { VARS.APPWRITE_ENDPOINT ? VARS.APPWRITE_ENDPOINT : globalThis?.location?.toString() ); const protocol = url.protocol; - const hostname = url.hostname; + const hostname = url.host; // "hostname:port" (or just "hostname" if no port) // If instance supports multi-region, add the region subdomain. const subdomain = isMultiRegionSupported(url) ? getSubdomain(region) : ''; From 0f39af39d719b2ab2a07821ff6cfd555731f64e5 Mon Sep 17 00:00:00 2001 From: Darshan Date: Sat, 24 May 2025 10:13:37 +0530 Subject: [PATCH 16/82] fix: hardcoded max file size values. --- .../create-function/manual/+page.svelte | 34 ++++++++++++++----- .../(modals)/createManual.svelte | 7 +++- .../providers/settingsFormInput.svelte | 1 + .../createManualDeploymentModal.svelte | 7 +++- 4 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte index 54167235a..078668418 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte @@ -8,7 +8,7 @@ import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; import { Icon, Layout, Tooltip, Typography, Upload } from '@appwrite.io/pink-svelte'; - import { writable } from 'svelte/store'; + import { get, writable } from 'svelte/store'; import { ID, Runtime } from '@appwrite.io/console'; import type { Models } from '@appwrite.io/console'; import { consoleVariables } from '$routes/(console)/store'; @@ -20,15 +20,22 @@ import Configuration from './configuration.svelte'; import { getIconFromRuntime } from '$lib/stores/runtimes'; import { InvalidFileType, removeFile } from '$lib/helpers/files'; + import { isCloud } from '$lib/system'; + import { humanFileSize } from '$lib/helpers/sizeConvertion'; + import { currentPlan } from '$lib/stores/organization'; export let data; + const iconFor = get(iconPath); + const runtimeOptions = data.runtimesList.runtimes.map((runtime) => { - return { - value: runtime.$id, - label: `${runtime.name} - ${runtime.version}`, - leadingHtml: `` - }; + const { $id: value, name, version, key } = runtime; + const label = `${name} - ${version}`; + const iconName = getIconFromRuntime(key); + const iconSrc = iconFor(iconName, 'color'); + const leadingHtml = `${iconName}`; + + return { value, label, leadingHtml }; }); const specificationOptions = data.specificationsList.specifications.map((size) => ({ @@ -153,6 +160,15 @@ }; }) : []; + + $: maxSize = + isCloud && $currentPlan + ? $currentPlan?.deploymentSize === 0 + ? 0 + : $currentPlan?.deploymentSize * 1000000 + : $consoleVariables._APP_COMPUTE_SIZE_LIMIT; // already in MB + + $: readableMaxSize = humanFileSize(maxSize); @@ -176,7 +192,7 @@ bind:files title="Upload function" extensions={['gz', 'tar']} - maxSize={10000000} + {maxSize} required on:invalid={handleInvalid}> @@ -201,12 +217,12 @@ Max file size 10MB + >Max file size: {readableMaxSize.value + + readableMaxSize.unit} {#if files?.length} - (files = removeFile(e.detail, files))} /> diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte index 5c8056398..830b51495 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte @@ -14,6 +14,7 @@ import { consoleVariables } from '$routes/(console)/store'; import { currentPlan } from '$lib/stores/organization'; import { isCloud } from '$lib/system'; + import { humanFileSize } from '$lib/helpers/sizeConvertion'; export let show = false; @@ -27,6 +28,8 @@ : $currentPlan?.deploymentSize * 1000000 : $consoleVariables._APP_COMPUTE_SIZE_LIMIT; // already in MB + $: readableMaxSize = humanFileSize(maxSize); + async function create() { try { await sdk @@ -100,7 +103,9 @@ >Only .tar.gz files allowed - Max file size 10MB + Max file size: {readableMaxSize.value + + readableMaxSize.unit} diff --git a/src/routes/(console)/project-[region]-[project]/messaging/providers/settingsFormInput.svelte b/src/routes/(console)/project-[region]-[project]/messaging/providers/settingsFormInput.svelte index 4227724d2..35ba274ba 100644 --- a/src/routes/(console)/project-[region]-[project]/messaging/providers/settingsFormInput.svelte +++ b/src/routes/(console)/project-[region]-[project]/messaging/providers/settingsFormInput.svelte @@ -124,6 +124,7 @@ on:invalid={handleInvalid} extensions={['json']} bind:files={files[input.name]} + maxSize={10000000} required={!input.optional}> diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createManualDeploymentModal.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createManualDeploymentModal.svelte index cd4c9f434..9e1d2eecb 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createManualDeploymentModal.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createManualDeploymentModal.svelte @@ -12,6 +12,7 @@ import { isCloud } from '$lib/system'; import { currentPlan } from '$lib/stores/organization'; import { consoleVariables } from '$routes/(console)/store'; + import { humanFileSize } from '$lib/helpers/sizeConvertion'; export let show = false; export let site: Models.Site; @@ -26,6 +27,8 @@ : $currentPlan?.deploymentSize * 1000000 : $consoleVariables._APP_COMPUTE_SIZE_LIMIT; // already in MB + $: readableMaxSize = humanFileSize(maxSize); + async function createDeployment() { try { uploader.uploadSiteDeployment(site.$id, files[0]); @@ -94,7 +97,9 @@ >Only .tar.gz files allowed - Max file size 10MB + Max file size: {readableMaxSize.value + + readableMaxSize.unit} From 974020f615caeef621292112995b1cb1891f45bb Mon Sep 17 00:00:00 2001 From: Darshan Date: Sat, 24 May 2025 11:23:30 +0530 Subject: [PATCH 17/82] fix: e2es, finally! --- e2e/journeys/upgrade-free-tier.spec.ts | 2 +- e2e/steps/pro-project.ts | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/e2e/journeys/upgrade-free-tier.spec.ts b/e2e/journeys/upgrade-free-tier.spec.ts index f13adb4fa..76d5fafcd 100644 --- a/e2e/journeys/upgrade-free-tier.spec.ts +++ b/e2e/journeys/upgrade-free-tier.spec.ts @@ -14,6 +14,6 @@ test('upgrade - free tier', async ({ page }) => { await enterCreditCard(page); // skip members await page.getByRole('button', { name: 'change plan' }).click(); - await page.waitForURL(/\/console\/project-(?:[a-z0-9]+-)?([^/]+)\/overview\/platforms/); + await page.waitForURL(/\/console\/project-(?:[a-z0-9]+-)?([^/]+)\/get-started/); }); }); diff --git a/e2e/steps/pro-project.ts b/e2e/steps/pro-project.ts index fd4446362..05c95895f 100644 --- a/e2e/steps/pro-project.ts +++ b/e2e/steps/pro-project.ts @@ -19,7 +19,7 @@ export async function enterCreditCard(page: Page) { await stripe.locator('id=Field-expiryInput').fill('1250'); await stripe.locator('id=Field-cvcInput').fill('123'); await stripe.locator('id=Field-countryInput').selectOption('DE'); - await page.getByRole('button', { name: 'Add', exact: true }).click(); + await dialog.getByRole('button', { name: 'Add', exact: true }).click(); await dialog.waitFor({ state: 'hidden' }); @@ -29,8 +29,9 @@ export async function createProProject(page: Page): Promise { const organizationId = await test.step('create organization', async () => { await page.goto('./create-organization'); await page.locator('id=name').fill('test org'); - await page.getByLabel('pro').check(); - await page.getByRole('button', { name: 'get started' }).click(); + await page.getByRole('radio', { name: /^Pro\b/ }).check(); + // `create organization` because there's already free created on start! + await page.getByRole('button', { name: 'create organization' }).click(); await page.getByRole('button', { name: 'add' }).first().click(); await enterCreditCard(page); // skip members From afc87af59077cca89ea353c4e0ae0b664fef0b86 Mon Sep 17 00:00:00 2001 From: Darshan Date: Sat, 24 May 2025 12:44:57 +0530 Subject: [PATCH 18/82] address comments. --- .../functions/create-function/manual/+page.svelte | 4 +--- .../function-[function]/(modals)/createManual.svelte | 4 +--- .../deployments/createManualDeploymentModal.svelte | 4 +--- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte index 078668418..5c1622d82 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte @@ -163,9 +163,7 @@ $: maxSize = isCloud && $currentPlan - ? $currentPlan?.deploymentSize === 0 - ? 0 - : $currentPlan?.deploymentSize * 1000000 + ? $currentPlan.deploymentSize * 1000000 : $consoleVariables._APP_COMPUTE_SIZE_LIMIT; // already in MB $: readableMaxSize = humanFileSize(maxSize); diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte index 830b51495..4d6ae6e70 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte @@ -23,9 +23,7 @@ $: maxSize = isCloud && $currentPlan - ? $currentPlan?.deploymentSize === 0 - ? 0 - : $currentPlan?.deploymentSize * 1000000 + ? $currentPlan.deploymentSize * 1000000 : $consoleVariables._APP_COMPUTE_SIZE_LIMIT; // already in MB $: readableMaxSize = humanFileSize(maxSize); diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createManualDeploymentModal.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createManualDeploymentModal.svelte index 9e1d2eecb..3930d56c7 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createManualDeploymentModal.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createManualDeploymentModal.svelte @@ -22,9 +22,7 @@ $: maxSize = isCloud && $currentPlan - ? $currentPlan?.deploymentSize === 0 - ? 0 - : $currentPlan?.deploymentSize * 1000000 + ? $currentPlan.deploymentSize * 1000000 : $consoleVariables._APP_COMPUTE_SIZE_LIMIT; // already in MB $: readableMaxSize = humanFileSize(maxSize); From 7f42cb3d9cb8864f7390cbbfc93c5871e89ca59c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Sat, 24 May 2025 23:05:51 +0200 Subject: [PATCH 19/82] Fix freeze, layout --- .../(console)/account/sessions/+page.svelte | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/routes/(console)/account/sessions/+page.svelte b/src/routes/(console)/account/sessions/+page.svelte index f017fe0ea..9f812679e 100644 --- a/src/routes/(console)/account/sessions/+page.svelte +++ b/src/routes/(console)/account/sessions/+page.svelte @@ -71,11 +71,11 @@ const sessionId = url.searchParams.get('sessionId'); if (sessionId) { logoutSessionId(sessionId); + + // Clear the sessionId param from the URL + url.searchParams.delete('sessionId'); + goto(url.pathname + url.search, { replaceState: true }); } - - // Clear the sessionId param from the URL - url.searchParams.delete('sessionId'); - goto(url.pathname + url.search, { replaceState: true }); }); }); @@ -89,10 +89,10 @@ Client From 6d0ac9331239bc19edb20b155419c5181db92361 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Sat, 24 May 2025 23:07:26 +0200 Subject: [PATCH 20/82] Formatting fix --- src/routes/(console)/account/sessions/+page.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/(console)/account/sessions/+page.svelte b/src/routes/(console)/account/sessions/+page.svelte index 9f812679e..ed52cef08 100644 --- a/src/routes/(console)/account/sessions/+page.svelte +++ b/src/routes/(console)/account/sessions/+page.svelte @@ -71,7 +71,7 @@ const sessionId = url.searchParams.get('sessionId'); if (sessionId) { logoutSessionId(sessionId); - + // Clear the sessionId param from the URL url.searchParams.delete('sessionId'); goto(url.pathname + url.search, { replaceState: true }); @@ -89,7 +89,7 @@ Date: Sat, 24 May 2025 23:25:02 +0200 Subject: [PATCH 21/82] Fix domain check and max size --- .../sites/create-site/manual/+page.svelte | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte index 201709a24..58842ffc0 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte @@ -20,6 +20,9 @@ import { consoleVariables } from '$routes/(console)/store'; import { IconInfo } from '@appwrite.io/pink-icons-svelte'; import { InvalidFileType, removeFile } from '$lib/helpers/files'; + import { humanFileSize } from '$lib/helpers/sizeConvertion'; + import { isCloud } from '$lib/system'; + import { currentPlan } from '$lib/stores/organization'; export let data; let showExitModal = false; @@ -29,7 +32,7 @@ let name = 'My website'; let id = ID.unique(); - let domain = id; + let domain = `${id}.${$consoleVariables._APP_DOMAIN_SITES}`; let framework: Models.Framework = data.frameworks.frameworks?.find((f) => f.key === 'other') ?? data.frameworks.frameworks?.[0]; @@ -39,10 +42,17 @@ let outputDirectory = adapter?.outputDirectory; let variables: Partial[] = []; let files: FileList; + + $: maxSize = + isCloud && $currentPlan + ? $currentPlan.deploymentSize * 1000000 + : $consoleVariables._APP_COMPUTE_SIZE_LIMIT; // already in MB + + $: readableMaxSize = humanFileSize(maxSize); async function create() { try { - domain = await buildVerboseDomain(name, $organization.name, $project.name, id); + domain = await buildVerboseDomain($consoleVariables._APP_DOMAIN_SITES, name, $organization.name, $project.name, id); const fr = Object.values(Framework).find((f) => f === framework.key); const buildRuntime = Object.values(BuildRuntime).find( @@ -73,7 +83,7 @@ // Add domain await sdk .forProject(page.params.region, page.params.project) - .proxy.createSiteRule(`${domain}.${$consoleVariables._APP_DOMAIN_SITES}`, site.$id); + .proxy.createSiteRule(domain, site.$id); //Add variables const promises = variables.map((variable) => @@ -167,7 +177,7 @@ @@ -192,7 +202,8 @@ Max file size 10MB + >Max file size: {readableMaxSize.value + + readableMaxSize.unit} From 90af2d522c148ca1c41d9b11e48b16bdcadd2095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Sat, 24 May 2025 23:31:13 +0200 Subject: [PATCH 22/82] Fix frozen rule creation --- .../sites/create-site/manual/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte index 58842ffc0..90e4caa61 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte @@ -83,7 +83,7 @@ // Add domain await sdk .forProject(page.params.region, page.params.project) - .proxy.createSiteRule(domain, site.$id); + .proxy.createSiteRule(`${domain}.${$consoleVariables._APP_DOMAIN_SITES}`, site.$id); //Add variables const promises = variables.map((variable) => From 52411930f1c2d9e8e799ca5531e3e345a7345862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Sat, 24 May 2025 23:31:33 +0200 Subject: [PATCH 23/82] Linter fix --- .../sites/create-site/manual/+page.svelte | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte index 90e4caa61..eaea81678 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte @@ -42,7 +42,7 @@ let outputDirectory = adapter?.outputDirectory; let variables: Partial[] = []; let files: FileList; - + $: maxSize = isCloud && $currentPlan ? $currentPlan.deploymentSize * 1000000 @@ -52,7 +52,13 @@ async function create() { try { - domain = await buildVerboseDomain($consoleVariables._APP_DOMAIN_SITES, name, $organization.name, $project.name, id); + domain = await buildVerboseDomain( + $consoleVariables._APP_DOMAIN_SITES, + name, + $organization.name, + $project.name, + id + ); const fr = Object.values(Framework).find((f) => f === framework.key); const buildRuntime = Object.values(BuildRuntime).find( From 1b8f44fba6c7a9367d88597824efcf6a01825d07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Sun, 25 May 2025 11:03:32 +0200 Subject: [PATCH 24/82] Forgotten commit --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ .../sites/create-site/store.ts | 2 ++ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 14e3308bb..9470f14c5 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ }, "dependencies": { "@ai-sdk/svelte": "^1.1.24", - "@appwrite.io/console": "https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@1959", + "@appwrite.io/console": "https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@9886", "@appwrite.io/pink": "0.25.0", "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad29a5d49..454a702b0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ^1.1.24 version: 1.1.24(svelte@5.25.3)(zod@3.24.3) '@appwrite.io/console': - specifier: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@1959 - version: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@1959 + specifier: https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@9886 + version: https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@9886 '@appwrite.io/pink': specifier: 0.25.0 version: 0.25.0 @@ -257,9 +257,9 @@ packages: '@analytics/type-utils@0.6.2': resolution: {integrity: sha512-TD+xbmsBLyYy/IxFimW/YL/9L2IEnM7/EoV9Aeh56U64Ify8o27HJcKjo38XY9Tcn0uOq1AX3thkKgvtWvwFQg==} - '@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@1959': - resolution: {tarball: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@1959} - version: 1.5.2 + '@appwrite.io/console@https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@9886': + resolution: {tarball: https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@9886} + version: 1.7.0 '@appwrite.io/pink-icons-svelte@2.0.0-RC.1': resolution: {integrity: sha512-iLFlV55hj8mGuAbmxJGenxN5RaZMmVT4GJb9dv/MP1xBAtYibFq7JvBcxm18qV2KU8c31Rntf+Ub4GL7HwqTYg==} @@ -3625,7 +3625,7 @@ snapshots: '@analytics/type-utils@0.6.2': {} - '@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@1959': {} + '@appwrite.io/console@https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@9886': {} '@appwrite.io/pink-icons-svelte@2.0.0-RC.1(svelte@5.25.3)': dependencies: diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/store.ts b/src/routes/(console)/project-[region]-[project]/sites/create-site/store.ts index 35557ba75..ff5026fae 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/store.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/store.ts @@ -45,4 +45,6 @@ export async function buildVerboseDomain( if (await checkDomain(domain, apex)) { return domain; } + + return ID.unique(); } From 9ec96431b3ca1639fa78a1741df472fed1f14b7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Sun, 25 May 2025 17:59:34 +0200 Subject: [PATCH 25/82] Upgrade to Cloud SDK including chunk upload fixes --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 9470f14c5..34736f7cb 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ }, "dependencies": { "@ai-sdk/svelte": "^1.1.24", - "@appwrite.io/console": "https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@9886", + "@appwrite.io/console": "https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@e190a19", "@appwrite.io/pink": "0.25.0", "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 454a702b0..a1a81279b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ^1.1.24 version: 1.1.24(svelte@5.25.3)(zod@3.24.3) '@appwrite.io/console': - specifier: https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@9886 - version: https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@9886 + specifier: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@e190a19 + version: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@e190a19 '@appwrite.io/pink': specifier: 0.25.0 version: 0.25.0 @@ -257,9 +257,9 @@ packages: '@analytics/type-utils@0.6.2': resolution: {integrity: sha512-TD+xbmsBLyYy/IxFimW/YL/9L2IEnM7/EoV9Aeh56U64Ify8o27HJcKjo38XY9Tcn0uOq1AX3thkKgvtWvwFQg==} - '@appwrite.io/console@https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@9886': - resolution: {tarball: https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@9886} - version: 1.7.0 + '@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@e190a19': + resolution: {tarball: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@e190a19} + version: 1.8.0 '@appwrite.io/pink-icons-svelte@2.0.0-RC.1': resolution: {integrity: sha512-iLFlV55hj8mGuAbmxJGenxN5RaZMmVT4GJb9dv/MP1xBAtYibFq7JvBcxm18qV2KU8c31Rntf+Ub4GL7HwqTYg==} @@ -3625,7 +3625,7 @@ snapshots: '@analytics/type-utils@0.6.2': {} - '@appwrite.io/console@https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@9886': {} + '@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@e190a19': {} '@appwrite.io/pink-icons-svelte@2.0.0-RC.1(svelte@5.25.3)': dependencies: From 43467b856c422e523878c6fb2d991a517c8d22d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Sun, 25 May 2025 18:15:10 +0200 Subject: [PATCH 26/82] Fix formatting --- .../project-[region]-[project]/sites/create-site/store.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/store.ts b/src/routes/(console)/project-[region]-[project]/sites/create-site/store.ts index ff5026fae..9f866d869 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/store.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/store.ts @@ -45,6 +45,6 @@ export async function buildVerboseDomain( if (await checkDomain(domain, apex)) { return domain; } - + return ID.unique(); } From 6c0889d79ff42f79f82a76d4e705132bff78843f Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Sun, 25 May 2025 19:07:15 +0200 Subject: [PATCH 27/82] Remove unused service disabled check from organization page --- .../organization-[organization]/+page.svelte | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/+page.svelte b/src/routes/(console)/organization-[organization]/+page.svelte index b7af2ad1a..2db07cdc3 100644 --- a/src/routes/(console)/organization-[organization]/+page.svelte +++ b/src/routes/(console)/organization-[organization]/+page.svelte @@ -47,23 +47,6 @@ let showCreateProjectCloud = false; let addOrganization = false; - async function allServiceDisabled(project: Models.Project) { - let disabled = true; - try { - if (!project.$id) return false; - if (!project.platforms.length) return false; - services.load(project); - $services.list.forEach((service) => { - if (service.value) { - disabled = false; - } - }); - return disabled; - } catch (e) { - return true; - } - } - function filterPlatforms(platforms: { name: string; icon: string }[]) { return platforms.filter( (value, index, self) => index === self.findIndex((t) => t.name === value.name) @@ -186,15 +169,6 @@ {project.name} - {#await allServiceDisabled(project) then isDisabled} - {#if isDisabled} -

- All services are - disabled. -

- {/if} - {/await} - {#each platforms as platform, i} {#if i < 3} {@const icon = getIconForPlatform(platform.icon)} From f7073dab9524e046216ee3f5944670b51c050252 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Sun, 25 May 2025 19:07:27 +0200 Subject: [PATCH 28/82] Update @appwrite.io/pink-svelte to commit 90cb757 --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 34736f7cb..9614ac01b 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1", "@appwrite.io/pink-legacy": "^1.0.3", - "@appwrite.io/pink-svelte": "https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7", + "@appwrite.io/pink-svelte": "https://try-module.cloud/module/@appwrite/@appwrite.io/pink-svelte@90cb757", "@popperjs/core": "^2.11.8", "@sentry/sveltekit": "^8.38.0", "@stripe/stripe-js": "^3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a1a81279b..8effe5d54 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,8 +27,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 '@appwrite.io/pink-svelte': - specifier: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7 - version: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7(svelte@5.25.3) + specifier: https://try-module.cloud/module/@appwrite/@appwrite.io/pink-svelte@90cb757 + version: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@90cb757(svelte@5.25.3) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 @@ -281,8 +281,8 @@ packages: '@appwrite.io/pink-legacy@1.0.3': resolution: {integrity: sha512-GGde5fmPhs+s6/3aFeMPc/kKADG/gTFkYQSy6oBN8pK0y0XNCLrZZgBv+EBbdhwdtqVEWXa0X85Mv9w7jcIlwQ==} - '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7': - resolution: {tarball: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7} + '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@90cb757': + resolution: {tarball: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@90cb757} version: 2.0.0-RC.2 peerDependencies: svelte: ^4.0.0 @@ -3644,7 +3644,7 @@ snapshots: '@appwrite.io/pink-icons': 1.0.0 the-new-css-reset: 1.11.3 - '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7(svelte@5.25.3)': + '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@90cb757(svelte@5.25.3)': dependencies: '@appwrite.io/pink-icons-svelte': 2.0.0-RC.1(svelte@5.25.3) '@floating-ui/dom': 1.6.13 From 0b06034809a2de68de62ff5ec2a08366549addaf Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Sun, 25 May 2025 19:11:37 +0200 Subject: [PATCH 29/82] Remove unused services import --- src/routes/(console)/organization-[organization]/+page.svelte | 1 - 1 file changed, 1 deletion(-) diff --git a/src/routes/(console)/organization-[organization]/+page.svelte b/src/routes/(console)/organization-[organization]/+page.svelte index 2db07cdc3..61e4ad9b3 100644 --- a/src/routes/(console)/organization-[organization]/+page.svelte +++ b/src/routes/(console)/organization-[organization]/+page.svelte @@ -17,7 +17,6 @@ } from '$lib/components'; import { goto } from '$app/navigation'; import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; - import { services } from '$lib/stores/project-services'; import { sdk } from '$lib/stores/sdk'; import { loading } from '$routes/store'; import type { Models } from '@appwrite.io/console'; From 5326fe0392cac462ac9a38f1fb5f53edd514c895 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 26 May 2025 09:24:13 +0200 Subject: [PATCH 30/82] fix: deploy page links --- src/routes/(public)/template-[template]/+page.svelte | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/routes/(public)/template-[template]/+page.svelte b/src/routes/(public)/template-[template]/+page.svelte index d7cbca40d..0ea3ff531 100644 --- a/src/routes/(public)/template-[template]/+page.svelte +++ b/src/routes/(public)/template-[template]/+page.svelte @@ -80,11 +80,11 @@ selectedProject = projects?.total ? projects.projects[0].$id : null; } - function generateUrl() { + function generateUrl(project: Models.Project) { if (isSiteTemplate(data.template, data.product)) { - return `${base}/project-${selectedProject}/sites/create-site/templates/template-${data.template.key}`; + return `${base}/project-${project.region}-${project.$id}/sites/create-site/templates/template-${data.template.key}`; } else { - return `${base}/project-${selectedProject}/functions/create-function/templates/template-${data.template.name}`; + return `${base}/project-${project.region}-${project.$id}/functions/create-function/templates/template-${data.template.name}`; } } @@ -105,7 +105,7 @@ selectedProject = p.$id; - window.location.href = generateUrl(); + window.location.href = generateUrl(p); } catch (e) { trackError(e, Submit.ProjectCreate); addNotification({ @@ -114,7 +114,8 @@ }); } } else { - window.location.href = generateUrl(); + const project = projects.projects.find((p) => p.$id === selectedProject); + window.location.href = generateUrl(project); } } From 03c3849f52dab268922092c45bee30d894bced1f Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 26 May 2025 15:43:43 +0530 Subject: [PATCH 31/82] add: sites waitlist. --- src/lib/helpers/waitlist.ts | 30 ++++ .../(images)/empty-sites-dark-mobile.svg | 119 +++++++++++++ .../(images)/empty-sites-light-mobile.svg | 157 ++++++++++++++++++ .../sites/+page.svelte | 153 +++++++++++++---- .../project-[region]-[project]/sites/+page.ts | 8 + .../sites/site-[site]/+layout.ts | 11 +- 6 files changed, 444 insertions(+), 34 deletions(-) create mode 100644 src/lib/helpers/waitlist.ts create mode 100644 src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark-mobile.svg create mode 100644 src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light-mobile.svg diff --git a/src/lib/helpers/waitlist.ts b/src/lib/helpers/waitlist.ts new file mode 100644 index 000000000..773b04a24 --- /dev/null +++ b/src/lib/helpers/waitlist.ts @@ -0,0 +1,30 @@ +import { get } from 'svelte/store'; +import { user } from '$lib/stores/user'; +import { sdk } from '$lib/stores/sdk'; +const userPreferences = () => get(user)?.prefs; + +export const joinWaitlistSites = () => { + const prefs = userPreferences(); + const newPrefs = { + ...prefs, + joinWaitlistSites: true + }; + + sdk.forConsole.account.updatePrefs(newPrefs); + + if (sessionStorage) { + sessionStorage.setItem('joinWaitlistSites', 'true'); + } +}; + +export const isOnWaitlistSites = (): boolean => { + const prefs = userPreferences(); + const joinedInPrefs = 'joinWaitlistSites' in prefs; + + let joinedInSession = false; + if (sessionStorage) { + joinedInSession = sessionStorage.getItem('joinWaitlistSites') === 'true'; + } + + return joinedInSession || joinedInPrefs; +}; diff --git a/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark-mobile.svg b/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark-mobile.svg new file mode 100644 index 000000000..39c7917cf --- /dev/null +++ b/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark-mobile.svg @@ -0,0 +1,119 @@ + + +
+ + + +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light-mobile.svg b/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light-mobile.svg new file mode 100644 index 000000000..8bd4b239e --- /dev/null +++ b/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light-mobile.svg @@ -0,0 +1,157 @@ + + +
+ + + + +
+
+ + + + +
+
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/routes/(console)/project-[region]-[project]/sites/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/+page.svelte index 855274fa4..c8b85bdc9 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/+page.svelte @@ -11,12 +11,14 @@ import { isServiceLimited } from '$lib/stores/billing'; import { organization } from '$lib/stores/organization'; import { canWriteSites } from '$lib/stores/roles.js'; - import { Icon, Layout } from '@appwrite.io/pink-svelte'; + import { Card, Icon, Layout, Typography } from '@appwrite.io/pink-svelte'; import { Button } from '$lib/elements/forms'; import { app } from '$lib/stores/app'; import CreateSiteModal from './createSiteModal.svelte'; import EmptyLight from './(images)/empty-sites-light.svg'; import EmptyDark from './(images)/empty-sites-dark.svg'; + import EmptyLightMobile from './(images)/empty-sites-light-mobile.svg'; + import EmptyDarkMobile from './(images)/empty-sites-dark-mobile.svg'; import Grid from './grid.svelte'; import { IconPlus } from '@appwrite.io/pink-icons-svelte'; import { columns } from './store'; @@ -26,6 +28,10 @@ import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; + import { APPWRITE_OFFICIALS_ORG, isCloud } from '$lib/system'; + import { addNotification } from '$lib/stores/notifications'; + import { isOnWaitlistSites, joinWaitlistSites } from '$lib/helpers/waitlist'; + import { isSmallViewport } from '$lib/stores/viewport'; export let data; let show = false; @@ -37,6 +43,7 @@ }, keys: ['c'], disabled: + !showSites || isServiceLimited('sites', $organization?.billingPlan, data.siteList?.total) || !$canWriteSites, icon: IconPlus, @@ -53,46 +60,126 @@ } }); }); + + /** + * Controls visibility of Sites feature: + * - Shown if running on self-hosted + * - Shown on cloud only if the organization is Appwrite's. + * - Hidden on cloud for any non-Appwrite organization. + */ + $: showSites = !isCloud || $organization.$id === APPWRITE_OFFICIALS_ORG; + + $: isOnWaitlist = isOnWaitlistSites(); + + const isDark = $app.themeInUse === 'dark'; + const isMobile = $isSmallViewport; + + const imgSrc = isDark + ? isMobile + ? EmptyDarkMobile + : EmptyDark + : isMobile + ? EmptyLightMobile + : EmptyLight; + + const imgClass = isMobile ? 'mobile' : 'desktop'; + + function addToWaitlist() { + joinWaitlistSites(); + addNotification({ + type: 'success', + title: 'Waitlist joined', + message: "We'll let you know as soon as Appwrite Sites is ready for you." + }); + + isOnWaitlist = true; + } - - - + {#if showSites} + + + + + + + {#if $canWriteSites} + + {/if} + - - - {#if $canWriteSites} - + {#if data.siteList.total} + {#if data.view === View.Grid} + + {:else} +
{/if} - - - {#if data.siteList.total} - {#if data.view === View.Grid} - + + {:else if data.search} + {:else} -
+ (show = true)}> + {/if} - - {:else if data.search} - {:else} - (show = true)}> - + + + + + + {#if isOnWaitlist} + + You've successfully joined the Sites waitlist + + + + We can't wait for you to try out Sites on Cloud. You will get access + soon. + + {:else} + + + Appwrite Sites is in high demand + + +
+ + To ensure a smooth experience for everyone, we’re rolling out + access gradually. Join the waitlist and be one of the first to + deploy with Sites. + +
+ +
+ +
+
+ {/if} +
+
+
{/if} diff --git a/src/routes/(console)/project-[region]-[project]/sites/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/+page.ts index 62eeb026a..7e6fd0ceb 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/+page.ts @@ -2,8 +2,16 @@ import { Query } from '@appwrite.io/console'; import { sdk } from '$lib/stores/sdk'; import { getLimit, getPage, getSearch, getView, pageToOffset, View } from '$lib/helpers/load'; import { CARD_LIMIT, Dependencies } from '$lib/constants'; +import { APPWRITE_OFFICIALS_ORG, isCloud } from '$lib/system'; +import { organization } from '$lib/stores/organization'; +import { get } from 'svelte/store'; export const load = async ({ url, depends, route, params }) => { + // don't load anything on cloud unless org is appwrite atm! + if (isCloud && get(organization)?.$id !== APPWRITE_OFFICIALS_ORG) { + return; + } + depends(Dependencies.SITES); const page = getPage(url); diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/+layout.ts b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/+layout.ts index 491697969..a90375ffd 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/+layout.ts @@ -2,9 +2,18 @@ import Breadcrumbs from './breadcrumbs.svelte'; import Header from './header.svelte'; import { Dependencies } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; -import { error } from '@sveltejs/kit'; +import { error, redirect } from '@sveltejs/kit'; +import { APPWRITE_OFFICIALS_ORG, isCloud } from '$lib/system'; +import { organization } from '$lib/stores/organization'; +import { get } from 'svelte/store'; +import { base } from '$app/paths'; export const load = async ({ depends, params }) => { + // don't load anything on cloud unless org is appwrite atm! + if (isCloud && get(organization)?.$id !== APPWRITE_OFFICIALS_ORG) { + redirect(307, `${base}/project-${params.region}-${params.project}/sites`); + } + depends(Dependencies.SITE); try { const [site] = await Promise.all([ From abbe000e523a036c700fc4e72a5aa79a079b2303 Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 26 May 2025 15:43:59 +0530 Subject: [PATCH 32/82] remove: promos. --- src/lib/images/promos/init3-flutter.png | Bin 518020 -> 0 bytes src/lib/images/promos/init3-images.png | Bin 591349 -> 0 bytes src/lib/images/promos/init3-keys.png | Bin 303250 -> 0 bytes src/lib/images/promos/init3-sites.png | Bin 438927 -> 0 bytes src/lib/images/promos/init3-tokens.png | Bin 482840 -> 0 bytes src/routes/(console)/bottomAlerts.ts | 115 ++---------------------- 6 files changed, 5 insertions(+), 110 deletions(-) delete mode 100644 src/lib/images/promos/init3-flutter.png delete mode 100644 src/lib/images/promos/init3-images.png delete mode 100644 src/lib/images/promos/init3-keys.png delete mode 100644 src/lib/images/promos/init3-sites.png delete mode 100644 src/lib/images/promos/init3-tokens.png diff --git a/src/lib/images/promos/init3-flutter.png b/src/lib/images/promos/init3-flutter.png deleted file mode 100644 index 18470db0938cbfea1c419d5b23f54fcd218e0a13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518020 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

h4+D=!0eKPCAmz@a*~d)q9ukNE!H){% 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�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

lZq$<_bQM@A};A4R#nB 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�~Y9EA(1Pqcp&p7k14>}_?PhqkWA_#`R_@ZR5*~8 zP+?e(;FqrdgZCg0(GSNROo#9bGK} zRqoKPChCT4;4pw#u*n3ME0*@*=iMz;Lz|%E0JKD#H&`d>dvs>*ST3A!I?c1*h^Z1{ znN)kQxlUk?g$iU>DxB?&IEhOb2CeZhb<|jJ%gHGLslf5AC#T*m@8wRYqb->>&l-%v z&r!AJ^HUI|l`o=-e#Z3pW!G#WYDTyv)}}?uZ<@JvPS%HN@>C^AT z3Zna~@uPE+Pr2}B(rNi-MynL7H8aMZNm6aDOX;~Jx$4Z74!Z9S!_;&5I%n&5iuLYn zlWSfz;$AkIKgc0~5Z_wx@xm1VJ-{(dlA#NZ)3H6X&PU!u%9KlORF!226n32N?e5l-! zTcB&)CnVX^!AFEZujs#TEzzwORm+XPtOkr&6Zt--u{I_sW`unA(08dq!gE7qV)u`Hbaa3><6E8I^3 zbgHD$?Oi^ooams~V$_Zt%bN|*`cm5`@qu(VLR^Hm&XjDfcR>cAH-_2~g?=b=YnO*@ ziO}M~*LC4e>ST7Aa0|AZf+uLX(wG%%0(N^Ot!(EUi56)0hjlbZ2;j{X&6IXi(mjeZ zck4=uhF0OaPyRU<4Y&U@rYai)Cs#Bh@w9jam)VdpXKePiN|s?g>O81tD&3IFvU4WB zV@+8~=PLdJSK+W_RFs|2Dj?A#1A}#thLR5$%BFdieBt+nMj;gZ*TMr9D!lW62ME>J zdqsn~p^p;Q4ACX5{W42>Xx3Iv#Z5zS{|0c%2_o4X=#%MNUH0U>}2g%&N zJCrVd+@?q&N;h6d(c8LBAy_*|<78cW@bKR}!Z2JlawJwRMx1{&plP#78nWs+2xGlN zZu|Cw7$Z}_=ric5pN|ZYUoRm5t}nHdPrvdlXAzQ+U`>G zksHGUx_#X|Tr-$HKyMD-QFnBVbcN};-f z(x+e?1l`Wm6cB>zo^SBAxTRzm9l)fi!YeGU?0kh%<83QA?2Vb*>44Meg4Q4%Z)M9_ zRlEswUbtkMvh1C`P~IK%8sL_C*~(d!usIBtm@`$bYK;wfBo-B3>WrE#O1R%R+!9>K zDLWPEIdl2$oMGi4|G6AIXV@A^;5BB#2*!~%U!#^7@}L!;TEj)VdPNqk%hg7`p?D9ZX(q4^_Ann z{=4$A=ZujMi?Nwd?BhR&P@mRDxdmi)oZ&?mp&JAkYmqh1Y)0-0d>gZmV=`Bej1ozX zUl zUN4|o8vO)dFA|f)*MkCyA83=l+yXjcdjQVE8xNu6M@b)9rF_@c4c?q-Ie1Y5_$nfh zXqZ=;J*3;{#IakcXF+)${VTLR?G0lp$SS+_u;iL$f2ORi{p#>Izq8-E^J+%NZ}{AqqQEB-%BiA$ z>sHL|pQ8E+R>rKa1~u)-=c0QKY<%wZzgQ^~OMKhSwUq|uOd9k3AyKhpDQ0Pzea0HC z=dPX*QSEVkz;kedvv>j_XCy1FlJxYpREZy7R778_g1}I16ts5vEbTqLp^9Vx)q~B$ z`UU-TG59!Qf7rlw(K%dKDq0<;LdTaVhVy?9EPy*VU>cAcQ<#am07Cai`^Zh)x*n_^ z`9b?%2%eqm|5*%kwg3x$wews%D*{eSc~;%SBJz=18@PQZst9D�rp8?f&olV**pC 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 { - return { - dark: image, - light: image - }; - }; - - const sharedCTA = (url: string) => ({ - external: true, - link: () => url, - hideOnClick: true, - text: 'Read the announcement' - }); - - const promos: BottomModalAlertItem[] = [ - { - id: 'modal:init3_sites', - src: getSrc(Init3SitesPromo), - title: 'Announcing: Sites', - message: - 'The open-source Vercel alternative. With Sites, you deploy and host your websites and web apps right inside Appwrite.', - plan: 'free', - importance: 8, - scope: 'everywhere', - cta: sharedCTA('https://apwr.dev/sites1'), - - // Day 1 = Monday 9 AM CET - show: isPromoLive('2025-05-19', '09:00') - }, - { - id: 'modal:init3_flutter', - src: getSrc(Init3FlutterPromo), - title: 'Announcing: Hosting for Flutter Web', - message: 'Deploy your Flutter web apps directly from Appwrite Sites.', - plan: 'free', - importance: 8, - scope: 'everywhere', - cta: sharedCTA('https://apwr.dev/sitesfl'), - - // Day 2 = Tuesday 3 PM CET - show: isPromoLive('2025-05-20', '15:00') - }, - { - id: 'modal:init3_keys', - src: getSrc(Init3KeysPromo), - title: 'Announcing: Dev Keys', - message: - 'A new Appwrite feature that lets you bypass rate limits during local development.', - plan: 'free', - importance: 8, - scope: 'everywhere', - cta: sharedCTA('https://apwr.dev/devkeys'), - - // Day 3 = Wednesday 3 PM CET - show: isPromoLive('2025-05-21', '15:00') - }, - { - id: 'modal:init3_images', - src: getSrc(Init3ImagesPromo), - title: 'Announcing: New image formats', - message: - 'We have added support for two new image formats in Appwrite Storage: HEIC and AVIF.', - plan: 'free', - importance: 8, - scope: 'everywhere', - cta: sharedCTA('https://apwr.dev/imagefo'), - - // Day 4 = Thursday 3 PM CET - show: isPromoLive('2025-05-22', '15:00') - }, - { - id: 'modal:init3_file_tokens', - src: getSrc(Init3TokensPromo), - title: 'Announcing: File Tokens', - message: - 'File tokens let you share files easily and securely, without modifying permissions or changing project access.', - plan: 'free', - importance: 8, - scope: 'everywhere', - cta: sharedCTA('https://apwr.dev/filet'), - - // Day 5 = Friday 3 PM CET - show: isPromoLive('2025-05-23', '15:00') - } - ]; - - const currentPromo = promos.find((promo) => promo.show); - - if (currentPromo) { - listOfPromotions.push(currentPromo); - - setMobileSingleAlertLayout({ - title: currentPromo.title, - message: currentPromo.message, - enabled: true, - cta: currentPromo.cta - }); - } +if (isCloud) { + /* add promos here */ } export function addBottomModalAlerts() { listOfPromotions.forEach((promotion) => showBottomModalAlert(promotion)); } +// use this for time based promo handling +// noinspection JSUnusedGlobalSymbols export function isPromoLive( date: string, time: string, From 1e951ed1def3c40cbed84b1f9b347c077b1050ba Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 26 May 2025 17:46:06 +0530 Subject: [PATCH 33/82] address comments. --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- .../sites/+page.svelte | 16 ++++++++-------- .../project-[region]-[project]/sites/+page.ts | 7 +++---- .../sites/site-[site]/+layout.ts | 7 +++---- 5 files changed, 20 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 9614ac01b..e4e9b9703 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1", "@appwrite.io/pink-legacy": "^1.0.3", - "@appwrite.io/pink-svelte": "https://try-module.cloud/module/@appwrite/@appwrite.io/pink-svelte@90cb757", + "@appwrite.io/pink-svelte": "https://try-module.cloud/module/@appwrite/@appwrite.io/pink-svelte@eb7de1a", "@popperjs/core": "^2.11.8", "@sentry/sveltekit": "^8.38.0", "@stripe/stripe-js": "^3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8effe5d54..bcd13e67c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,8 +27,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 '@appwrite.io/pink-svelte': - specifier: https://try-module.cloud/module/@appwrite/@appwrite.io/pink-svelte@90cb757 - version: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@90cb757(svelte@5.25.3) + specifier: https://try-module.cloud/module/@appwrite/@appwrite.io/pink-svelte@eb7de1a + version: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@eb7de1a(svelte@5.25.3) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 @@ -281,8 +281,8 @@ packages: '@appwrite.io/pink-legacy@1.0.3': resolution: {integrity: sha512-GGde5fmPhs+s6/3aFeMPc/kKADG/gTFkYQSy6oBN8pK0y0XNCLrZZgBv+EBbdhwdtqVEWXa0X85Mv9w7jcIlwQ==} - '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@90cb757': - resolution: {tarball: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@90cb757} + '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@eb7de1a': + resolution: {tarball: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@eb7de1a} version: 2.0.0-RC.2 peerDependencies: svelte: ^4.0.0 @@ -3644,7 +3644,7 @@ snapshots: '@appwrite.io/pink-icons': 1.0.0 the-new-css-reset: 1.11.3 - '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@90cb757(svelte@5.25.3)': + '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@eb7de1a(svelte@5.25.3)': dependencies: '@appwrite.io/pink-icons-svelte': 2.0.0-RC.1(svelte@5.25.3) '@floating-ui/dom': 1.6.13 diff --git a/src/routes/(console)/project-[region]-[project]/sites/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/+page.svelte index c8b85bdc9..a933b669f 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/+page.svelte @@ -32,8 +32,11 @@ import { addNotification } from '$lib/stores/notifications'; import { isOnWaitlistSites, joinWaitlistSites } from '$lib/helpers/waitlist'; import { isSmallViewport } from '$lib/stores/viewport'; + export let data; + let show = false; + let isOnWaitlist = isOnWaitlistSites(); $: $registerCommands([ { @@ -69,20 +72,17 @@ */ $: showSites = !isCloud || $organization.$id === APPWRITE_OFFICIALS_ORG; - $: isOnWaitlist = isOnWaitlistSites(); + $: isDark = $app.themeInUse === 'dark'; - const isDark = $app.themeInUse === 'dark'; - const isMobile = $isSmallViewport; - - const imgSrc = isDark - ? isMobile + $: imgSrc = isDark + ? $isSmallViewport ? EmptyDarkMobile : EmptyDark - : isMobile + : $isSmallViewport ? EmptyLightMobile : EmptyLight; - const imgClass = isMobile ? 'mobile' : 'desktop'; + $: imgClass = $isSmallViewport ? 'mobile' : 'desktop'; function addToWaitlist() { joinWaitlistSites(); diff --git a/src/routes/(console)/project-[region]-[project]/sites/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/+page.ts index 7e6fd0ceb..afaf7b02d 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/+page.ts @@ -3,12 +3,11 @@ import { sdk } from '$lib/stores/sdk'; import { getLimit, getPage, getSearch, getView, pageToOffset, View } from '$lib/helpers/load'; import { CARD_LIMIT, Dependencies } from '$lib/constants'; import { APPWRITE_OFFICIALS_ORG, isCloud } from '$lib/system'; -import { organization } from '$lib/stores/organization'; -import { get } from 'svelte/store'; -export const load = async ({ url, depends, route, params }) => { +export const load = async ({ url, depends, route, params, parent }) => { // don't load anything on cloud unless org is appwrite atm! - if (isCloud && get(organization)?.$id !== APPWRITE_OFFICIALS_ORG) { + const { organization } = await parent(); + if (isCloud && organization?.$id !== APPWRITE_OFFICIALS_ORG) { return; } diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/+layout.ts b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/+layout.ts index a90375ffd..5ac8edfa3 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/+layout.ts @@ -4,13 +4,12 @@ import { Dependencies } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; import { error, redirect } from '@sveltejs/kit'; import { APPWRITE_OFFICIALS_ORG, isCloud } from '$lib/system'; -import { organization } from '$lib/stores/organization'; -import { get } from 'svelte/store'; import { base } from '$app/paths'; -export const load = async ({ depends, params }) => { +export const load = async ({ depends, params, parent }) => { // don't load anything on cloud unless org is appwrite atm! - if (isCloud && get(organization)?.$id !== APPWRITE_OFFICIALS_ORG) { + const { organization } = await parent(); + if (isCloud && organization?.$id !== APPWRITE_OFFICIALS_ORG) { redirect(307, `${base}/project-${params.region}-${params.project}/sites`); } From b51c42e213e8439919db74012563c134a95d7df6 Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 26 May 2025 18:04:00 +0530 Subject: [PATCH 34/82] update: hide redeploy if source is zero. --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- .../sites/(components)/deploymentActionMenu.svelte | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index e4e9b9703..0b7be5b72 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1", "@appwrite.io/pink-legacy": "^1.0.3", - "@appwrite.io/pink-svelte": "https://try-module.cloud/module/@appwrite/@appwrite.io/pink-svelte@eb7de1a", + "@appwrite.io/pink-svelte": "https://try-module.cloud/module/@appwrite/@appwrite.io/pink-svelte@0043a39", "@popperjs/core": "^2.11.8", "@sentry/sveltekit": "^8.38.0", "@stripe/stripe-js": "^3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bcd13e67c..5a8ef1bd9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,8 +27,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 '@appwrite.io/pink-svelte': - specifier: https://try-module.cloud/module/@appwrite/@appwrite.io/pink-svelte@eb7de1a - version: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@eb7de1a(svelte@5.25.3) + specifier: https://try-module.cloud/module/@appwrite/@appwrite.io/pink-svelte@0043a39 + version: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@0043a39(svelte@5.25.3) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 @@ -281,8 +281,8 @@ packages: '@appwrite.io/pink-legacy@1.0.3': resolution: {integrity: sha512-GGde5fmPhs+s6/3aFeMPc/kKADG/gTFkYQSy6oBN8pK0y0XNCLrZZgBv+EBbdhwdtqVEWXa0X85Mv9w7jcIlwQ==} - '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@eb7de1a': - resolution: {tarball: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@eb7de1a} + '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@0043a39': + resolution: {tarball: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@0043a39} version: 2.0.0-RC.2 peerDependencies: svelte: ^4.0.0 @@ -3644,7 +3644,7 @@ snapshots: '@appwrite.io/pink-icons': 1.0.0 the-new-css-reset: 1.11.3 - '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@eb7de1a(svelte@5.25.3)': + '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@0043a39(svelte@5.25.3)': dependencies: '@appwrite.io/pink-icons-svelte': 2.0.0-RC.1(svelte@5.25.3) '@floating-ui/dom': 1.6.13 diff --git a/src/routes/(console)/project-[region]-[project]/sites/(components)/deploymentActionMenu.svelte b/src/routes/(console)/project-[region]-[project]/sites/(components)/deploymentActionMenu.svelte index b30bd56ae..3c127f1eb 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/(components)/deploymentActionMenu.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/(components)/deploymentActionMenu.svelte @@ -55,7 +55,7 @@ - {#if !inCard} + {#if !inCard && selectedDeployment?.sourceSize !== 0} { From 394c41ec41ec4be2b71650704237d1bee98ca01b Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 26 May 2025 19:04:34 +0530 Subject: [PATCH 35/82] fix: domain status. --- .../domains/domain-[domain]/domainMetrics.svelte | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/domainMetrics.svelte b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/domainMetrics.svelte index a83471dad..d22b6ed7e 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/domainMetrics.svelte +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/domainMetrics.svelte @@ -4,11 +4,11 @@ import { toLocaleDate } from '$lib/helpers/date'; import { Layout, Status } from '@appwrite.io/pink-svelte'; - export let domain: Domain; + let { domain }: { domain: Domain } = $props(); - $: isDomainVerified = domain.nameservers.toLocaleLowerCase() === 'appwrite'; + const isDomainVerified = domain.nameservers.toLowerCase() === 'appwrite'; - let metrics = [ + const metrics = [ { value: isDomainVerified ? 'Verified' : 'Not verified', description: 'Status' @@ -18,11 +18,11 @@ description: 'Registrar' }, { - value: domain?.nameservers ? domain?.nameservers : '-', + value: domain?.nameservers || '-', description: 'Nameservers' }, { - value: domain?.expiry ? toLocaleDate(domain?.expiry) : '-', + value: domain?.expiry ? toLocaleDate(domain.expiry) : '-', description: 'Expiry date' }, { From 64c55e944f9b52f49521643abbe83205e78e6bef Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 26 May 2025 19:04:39 +0530 Subject: [PATCH 36/82] bump: deps. --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 0b7be5b72..5992460a1 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1", "@appwrite.io/pink-legacy": "^1.0.3", - "@appwrite.io/pink-svelte": "https://try-module.cloud/module/@appwrite/@appwrite.io/pink-svelte@0043a39", + "@appwrite.io/pink-svelte": "https://try-module.cloud/module/@appwrite/@appwrite.io/pink-svelte@0cc439f", "@popperjs/core": "^2.11.8", "@sentry/sveltekit": "^8.38.0", "@stripe/stripe-js": "^3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5a8ef1bd9..20316f694 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,8 +27,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 '@appwrite.io/pink-svelte': - specifier: https://try-module.cloud/module/@appwrite/@appwrite.io/pink-svelte@0043a39 - version: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@0043a39(svelte@5.25.3) + specifier: https://try-module.cloud/module/@appwrite/@appwrite.io/pink-svelte@0cc439f + version: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@0cc439f(svelte@5.25.3) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 @@ -281,8 +281,8 @@ packages: '@appwrite.io/pink-legacy@1.0.3': resolution: {integrity: sha512-GGde5fmPhs+s6/3aFeMPc/kKADG/gTFkYQSy6oBN8pK0y0XNCLrZZgBv+EBbdhwdtqVEWXa0X85Mv9w7jcIlwQ==} - '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@0043a39': - resolution: {tarball: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@0043a39} + '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@0cc439f': + resolution: {tarball: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@0cc439f} version: 2.0.0-RC.2 peerDependencies: svelte: ^4.0.0 @@ -3644,7 +3644,7 @@ snapshots: '@appwrite.io/pink-icons': 1.0.0 the-new-css-reset: 1.11.3 - '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@0043a39(svelte@5.25.3)': + '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@0cc439f(svelte@5.25.3)': dependencies: '@appwrite.io/pink-icons-svelte': 2.0.0-RC.1(svelte@5.25.3) '@floating-ui/dom': 1.6.13 From b0365fa050a61b143ad61d16f1986b8d5b27e283 Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 26 May 2025 19:05:40 +0530 Subject: [PATCH 37/82] fix: casing. --- .../domains/domain-[domain]/domainMetrics.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/domainMetrics.svelte b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/domainMetrics.svelte index d22b6ed7e..2189de9a1 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/domainMetrics.svelte +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/domainMetrics.svelte @@ -6,7 +6,7 @@ let { domain }: { domain: Domain } = $props(); - const isDomainVerified = domain.nameservers.toLowerCase() === 'appwrite'; + const isDomainVerified = domain.nameservers.toLocaleLowerCase() === 'appwrite'; const metrics = [ { From 1829944bbb02d2a1c96c4c00d03662a21be8c155 Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 26 May 2025 19:34:52 +0530 Subject: [PATCH 38/82] re-add: available regions filtering on project creations. --- src/lib/layout/createProject.svelte | 2 +- .../(console)/onboarding/create-project/+page.svelte | 7 ++++++- .../(console)/onboarding/create-project/+page.ts | 12 +++++------- .../organization-[organization]/+page.svelte | 4 +--- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/lib/layout/createProject.svelte b/src/lib/layout/createProject.svelte index 945a4e5c3..6e7555980 100644 --- a/src/lib/layout/createProject.svelte +++ b/src/lib/layout/createProject.svelte @@ -28,7 +28,7 @@ label: region.name, value: region.$id, leadingHtml: `Region flag`, - disabled: region.disabled + disabled: region.disabled || !region.available }; }); } diff --git a/src/routes/(console)/onboarding/create-project/+page.svelte b/src/routes/(console)/onboarding/create-project/+page.svelte index 001adcdf4..60a95351f 100644 --- a/src/routes/(console)/onboarding/create-project/+page.svelte +++ b/src/routes/(console)/onboarding/create-project/+page.svelte @@ -10,6 +10,8 @@ import { base } from '$app/paths'; import { addNotification } from '$lib/stores/notifications'; import CreateProject from '$lib/layout/createProject.svelte'; + import { loadAvailableRegions } from '$routes/(console)/regions'; + import { regions as regionsStore } from '$lib/stores/organization'; let isLoading = false; let id: string; @@ -49,6 +51,9 @@ }); } } + + // safe side! + loadAvailableRegions(data.organization.$id); @@ -74,7 +79,7 @@ alt="Appwrite Logo" /> { const { organizations } = await parent(); + try { if (!organizations?.total) { try { @@ -29,8 +31,7 @@ export const load: PageLoad = async ({ parent }) => { if (isOrganization(org)) { return { - organization: org, - regions: await sdk.forConsole.billing.listRegions(org.$id) + organization: org }; } else { const e = new Error(org.message, { @@ -43,8 +44,7 @@ export const load: PageLoad = async ({ parent }) => { organization: await sdk.forConsole.teams.create( ID.unique(), 'Personal projects' - ), - regions: null + ) }; } } catch (e) { @@ -57,10 +57,8 @@ export const load: PageLoad = async ({ parent }) => { Query.limit(1) ]); if (!projects.total) { - const regions = isCloud ? await sdk.forConsole.billing.listRegions(org.$id) : null; return { - organization: org, - regions + organization: org }; } else { redirect(303, `${base}/console/organization-${org.$id}`); diff --git a/src/routes/(console)/organization-[organization]/+page.svelte b/src/routes/(console)/organization-[organization]/+page.svelte index 61e4ad9b3..089351e32 100644 --- a/src/routes/(console)/organization-[organization]/+page.svelte +++ b/src/routes/(console)/organization-[organization]/+page.svelte @@ -120,9 +120,7 @@ }); function findRegion(project: Models.Project) { - return $regionsStore?.regions?.find( - (region) => region.$id === (project as Models.Project & { region: string }).region - ); + return $regionsStore?.regions?.find((region) => region.$id === project.region); } From c4fc0eafea47d4f5a0ee391f0c8a5bfa8bbf727c Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 26 May 2025 19:36:12 +0530 Subject: [PATCH 39/82] add: line break! --- src/lib/layout/createProject.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/layout/createProject.svelte b/src/lib/layout/createProject.svelte index 6e7555980..5c206297e 100644 --- a/src/lib/layout/createProject.svelte +++ b/src/lib/layout/createProject.svelte @@ -39,6 +39,7 @@ {/each} +
{#if showTitle} From bc2b8e5e7bacd1f1a74862b4747e8d5727743cc3 Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 26 May 2025 20:03:22 +0530 Subject: [PATCH 40/82] update: redirect after domain verified. --- .../domains/recordsCard.svelte | 20 ++++++++++++++++++- .../domains/retryDomainModal.svelte | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/domains/recordsCard.svelte b/src/routes/(console)/organization-[organization]/domains/recordsCard.svelte index 738cb89ef..68d02d3fb 100644 --- a/src/routes/(console)/organization-[organization]/domains/recordsCard.svelte +++ b/src/routes/(console)/organization-[organization]/domains/recordsCard.svelte @@ -16,13 +16,18 @@ Input, InteractiveText } from '@appwrite.io/pink-svelte'; + import { base } from '$app/paths'; + import { page } from '$app/state'; + import { goto } from '$app/navigation'; export let domain: Domain; let verified = undefined; + const routeBase = `${base}/organization-${page.params.organization}/domains/domain-${domain.$id}`; + // TODO: split _APP_DOMAINS_NAMESERVERS? - let nameservers = $consoleVariables?._APP_DOMAINS_NAMESERVERS.split(',') ?? [ + const nameservers = $consoleVariables?._APP_DOMAINS_NAMESERVERS.split(',') ?? [ 'ns1.appwrite.io', 'ns2.appwrite.io' ]; @@ -31,6 +36,19 @@ try { domain = await sdk.forConsole.domains.updateNameservers(domain.$id); verified = domain.nameservers === 'Appwrite'; + if (verified) { + addNotification({ + type: 'success', + message: 'Domain verified' + }); + + await goto(routeBase); + } else { + addNotification({ + type: 'error', + message: 'Domain not verified' + }); + } } catch (error) { addNotification({ type: 'error', diff --git a/src/routes/(console)/organization-[organization]/domains/retryDomainModal.svelte b/src/routes/(console)/organization-[organization]/domains/retryDomainModal.svelte index 08bbaf855..9435dca89 100644 --- a/src/routes/(console)/organization-[organization]/domains/retryDomainModal.svelte +++ b/src/routes/(console)/organization-[organization]/domains/retryDomainModal.svelte @@ -13,7 +13,7 @@ export let show = false; export let selectedDomain: Domain; - let nameservers = $consoleVariables?._APP_DOMAINS_NAMESERVERS.split(',') ?? [ + const nameservers = $consoleVariables?._APP_DOMAINS_NAMESERVERS.split(',') ?? [ 'ns1.appwrite.io', 'ns2.appwrite.io' ]; From 7bba7c80ac59162a4bef9427be0e343c962b1f66 Mon Sep 17 00:00:00 2001 From: Darshan Date: Tue, 27 May 2025 11:10:38 +0530 Subject: [PATCH 41/82] misc: fixes. --- .../create-organization/+page.svelte | 27 ++++++++++--------- .../function-[function]/table.svelte | 22 ++++++++------- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/src/routes/(console)/create-organization/+page.svelte b/src/routes/(console)/create-organization/+page.svelte index 6d37264de..8c5ec88c5 100644 --- a/src/routes/(console)/create-organization/+page.svelte +++ b/src/routes/(console)/create-organization/+page.svelte @@ -195,18 +195,21 @@ required />
- - For more details on our plans, visit our - pricing page. - - + + + For more details on our plans, visit our + pricing page. + + + +
{#if selectedPlan !== BillingPlan.FREE}
diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/table.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/table.svelte index 4bfe5cb62..fdfdfdb14 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/table.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/table.svelte @@ -149,16 +149,18 @@ - { - selectedDeployment = deployment; - showRedeploy = true; - toggle(); - trackEvent(Click.FunctionsRedeployClick); - }}> - Redeploy - + {#if deployment.sourceSize !== 0} + { + selectedDeployment = deployment; + showRedeploy = true; + toggle(); + trackEvent(Click.FunctionsRedeployClick); + }}> + Redeploy + + {/if} {#if deployment.status === 'ready' && deployment.$id !== $func.deploymentId} Date: Tue, 27 May 2025 11:32:27 +0530 Subject: [PATCH 42/82] misc: fixes. --- src/routes/(console)/(migration-wizard)/resource-form.svelte | 5 ++--- .../settings/migrations/(import)/wizard.svelte | 2 +- .../settings/migrations/+page.svelte | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/routes/(console)/(migration-wizard)/resource-form.svelte b/src/routes/(console)/(migration-wizard)/resource-form.svelte index 840957879..d438e4fd8 100644 --- a/src/routes/(console)/(migration-wizard)/resource-form.svelte +++ b/src/routes/(console)/(migration-wizard)/resource-form.svelte @@ -1,7 +1,6 @@ - - - Are you sure you want to delete this execution? - diff --git a/src/routes/(console)/project-[region]-[project]/overview/keys/[key]/updateExpirationDate.svelte b/src/routes/(console)/project-[region]-[project]/overview/keys/[key]/updateExpirationDate.svelte deleted file mode 100644 index e69de29bb..000000000 From 5ff0f996a318a2d54093cdeee53f68b5b18b18e0 Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 27 May 2025 14:31:36 +0200 Subject: [PATCH 48/82] fix: org routing, project creation --- .../createProjectCloud.svelte | 34 ++++++++----------- .../organization-[organization]/header.svelte | 4 +-- .../wizard/store.ts | 11 ------ 3 files changed, 17 insertions(+), 32 deletions(-) delete mode 100644 src/routes/(console)/organization-[organization]/wizard/store.ts diff --git a/src/routes/(console)/organization-[organization]/createProjectCloud.svelte b/src/routes/(console)/organization-[organization]/createProjectCloud.svelte index 6ec2dd268..16f5aa450 100644 --- a/src/routes/(console)/organization-[organization]/createProjectCloud.svelte +++ b/src/routes/(console)/organization-[organization]/createProjectCloud.svelte @@ -6,8 +6,7 @@ import { Dependencies } from '$lib/constants'; import { page } from '$app/state'; import { Submit, trackEvent, trackError } from '$lib/actions/analytics'; - import { ID, Region as ConsoleRegion, type Models } from '@appwrite.io/console'; - import { createProject } from './wizard/store'; + import { ID, Region as ConsoleRegion, type Models, Region } from '@appwrite.io/console'; import { Button } from '@appwrite.io/pink-svelte'; import { base } from '$app/paths'; import CreateProject from '$lib/layout/createProject.svelte'; @@ -17,6 +16,10 @@ export let regions: Array = []; export let showCreateProjectCloud: boolean; + let id: string = null; + let name: string = 'Appwrite project'; + let region: string = Region.Fra; + async function onFinish() { await invalidate(Dependencies.FUNCTIONS); } @@ -25,19 +28,19 @@ try { // TODO: fix typing once SDK is updated const project = await sdk.forConsole.projects.create( - $createProject?.id ?? ID.unique(), - $createProject.name, + id ?? ID.unique(), + name, teamId, - $createProject.region as ConsoleRegion + region as ConsoleRegion ); trackEvent(Submit.ProjectCreate, { - customId: !!$createProject?.id, + customId: !!id, teamId, - region: $createProject.region + region: region }); addNotification({ type: 'success', - message: `${$createProject.name} has been created` + message: `${name} has been created` }); await onFinish(); await goto(`${base}/project-${project.region}-${project.$id}`); @@ -51,21 +54,14 @@ } onDestroy(() => { - $createProject = { - id: null, - name: null, - region: 'fra' - }; + id = null; + name = null; + region = 'fra'; }); - + Create diff --git a/src/routes/(console)/organization-[organization]/header.svelte b/src/routes/(console)/organization-[organization]/header.svelte index f18c3efb2..86fe4a0c9 100644 --- a/src/routes/(console)/organization-[organization]/header.svelte +++ b/src/routes/(console)/organization-[organization]/header.svelte @@ -30,7 +30,7 @@ }); $: avatars = $members.memberships?.map((m) => m.userName || m.userEmail) ?? []; - $: organizationId = page.params.organization; + $: organizationId = $organization?.$id ?? page.params.organization; $: path = `${base}/organization-${organizationId}`; $: tabs = [ { @@ -75,7 +75,7 @@ ].filter((tab) => !tab.disabled); -{#if $organization?.$id} +{#if $organization.$id} diff --git a/src/routes/(console)/organization-[organization]/wizard/store.ts b/src/routes/(console)/organization-[organization]/wizard/store.ts deleted file mode 100644 index 0ff9a6351..000000000 --- a/src/routes/(console)/organization-[organization]/wizard/store.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { writable } from 'svelte/store'; - -export const createProject = writable<{ - id?: string; - name: string; - region: string; -}>({ - id: null, - name: 'Appwrite project', - region: 'fra' -}); From 563cf7def8184ea5ff8f786da53ea84fa37960b2 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 27 May 2025 15:01:09 +0200 Subject: [PATCH 49/82] more explicit disabled cache for /console route in nginx config --- docker/nginx.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docker/nginx.conf b/docker/nginx.conf index 38eb1d96a..8b75d6404 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -26,6 +26,10 @@ server { location /console { index index.html index.html; try_files $uri /console/index.html; + + expires 0; + add_header Cache-Control "no-cache, must-revalidate"; + add_header Pragma no-cache; } location / { From 1ca27a624434907abb6f34b400c5f0bb0f43bcab Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 27 May 2025 15:04:22 +0200 Subject: [PATCH 50/82] Update cache headers in nginx config Change Cache-Control to "no-store" and add quotes to Pragma value for more consistent cache prevention. --- docker/nginx.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/nginx.conf b/docker/nginx.conf index 8b75d6404..0aba86e84 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -28,8 +28,8 @@ server { try_files $uri /console/index.html; expires 0; - add_header Cache-Control "no-cache, must-revalidate"; - add_header Pragma no-cache; + add_header Cache-Control "no-store"; + add_header Pragma "no-cache"; } location / { From 1f57b21c89eab2e3abe7fbdbb0a999847e2246d1 Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 27 May 2025 15:07:08 +0200 Subject: [PATCH 51/82] fix: create organization payment methods not updating --- .../billing/selectPaymentMethod.svelte | 1 + src/lib/constants.ts | 1 + .../create-organization/+page.svelte | 37 ++++++++++++------- .../(console)/create-organization/+page.ts | 5 ++- 4 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/lib/components/billing/selectPaymentMethod.svelte b/src/lib/components/billing/selectPaymentMethod.svelte index dac287731..7dfe14a2e 100644 --- a/src/lib/components/billing/selectPaymentMethod.svelte +++ b/src/lib/components/billing/selectPaymentMethod.svelte @@ -21,6 +21,7 @@ async function cardSaved(event: CustomEvent) { value = event.detail.$id; invalidate(Dependencies.UPGRADE_PLAN); + invalidate(Dependencies.CREATE_ORGANIZATION); } onMount(() => { diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 58ae2e443..067b354dd 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -18,6 +18,7 @@ export enum Dependencies { INVOICES = 'dependency:invoices', ADDRESS = 'dependency:address', UPGRADE_PLAN = 'dependency:upgrade_plan', + CREATE_ORGANIZATION = 'dependency:create_organization', PAYMENT_METHODS = 'dependency:paymentMethods', ORGANIZATION = 'dependency:organization', MEMBERS = 'dependency:members', diff --git a/src/routes/(console)/create-organization/+page.svelte b/src/routes/(console)/create-organization/+page.svelte index 5599131ce..77049390e 100644 --- a/src/routes/(console)/create-organization/+page.svelte +++ b/src/routes/(console)/create-organization/+page.svelte @@ -213,20 +213,29 @@
{#if selectedPlan !== BillingPlan.FREE}
- - - {#if !selectedCoupon?.code} - - - {/if} - - + + + + {#if !selectedCoupon?.code && paymentMethodId} + + + {/if} + + + + {#if !selectedCoupon?.code && !paymentMethodId} + + {/if} +
{ +export const load: PageLoad = async ({ url, parent, depends }) => { + depends(Dependencies.CREATE_ORGANIZATION); const { organizations } = await parent(); const [coupon, paymentMethods] = await Promise.all([ getCoupon(url), From 680b4eecffe41cc19579b199bb4d7d9ff3190c2b Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 27 May 2025 15:15:13 +0200 Subject: [PATCH 52/82] Update docker/nginx.conf Co-authored-by: Fabian Gruber <1951610+basert@users.noreply.github.com> --- docker/nginx.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/nginx.conf b/docker/nginx.conf index 0aba86e84..bf73682fe 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -28,7 +28,7 @@ server { try_files $uri /console/index.html; expires 0; - add_header Cache-Control "no-store"; + add_header Cache-Control "no-cache, no-store"; add_header Pragma "no-cache"; } From 10e60019b7b41cc2a170cf214f4c8db54bcee58e Mon Sep 17 00:00:00 2001 From: Darshan Date: Tue, 27 May 2025 18:48:26 +0530 Subject: [PATCH 53/82] fix: cards out of bounds. --- package.json | 1 - src/lib/components/cardContainer.svelte | 11 ++++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 5992460a1..dd5019c40 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,6 @@ "dependencies": { "@ai-sdk/svelte": "^1.1.24", "@appwrite.io/console": "https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@e190a19", - "@appwrite.io/pink": "0.25.0", "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1", "@appwrite.io/pink-legacy": "^1.0.3", diff --git a/src/lib/components/cardContainer.svelte b/src/lib/components/cardContainer.svelte index ac5223a6d..ccbd1075b 100644 --- a/src/lib/components/cardContainer.svelte +++ b/src/lib/components/cardContainer.svelte @@ -2,10 +2,11 @@ import { page } from '$app/state'; import { Empty } from '$lib/components'; import { CARD_LIMIT } from '$lib/constants'; - import { getServiceLimit, type PlanServices } from '$lib/stores/billing'; - import { preferences } from '$lib/stores/preferences'; import { isCloud } from '$lib/system'; import CardPlanLimit from './cardPlanLimit.svelte'; + import { preferences } from '$lib/stores/preferences'; + import { isSmallViewport } from '$lib/stores/viewport'; + import { getServiceLimit, type PlanServices } from '$lib/stores/billing'; export let disableEmpty = true; export let offset = 0; @@ -17,9 +18,13 @@ $: planLimit = getServiceLimit(serviceId) || Infinity; $: limit = preferences.get(page.route)?.limit ?? CARD_LIMIT; + + $: gridItemStyle = $isSmallViewport + ? undefined + : `--grid-item-size: ${total > 3 ? '22rem' : '25rem'}`; -
    3 ? '22rem' : '25rem'};`} data-private> +
      {#if total > 3 ? total < limit + offset : total % 2 !== 0} From 77d6968c7a80c97eaddae347178d659ee5bb4558 Mon Sep 17 00:00:00 2001 From: Darshan Date: Tue, 27 May 2025 18:50:43 +0530 Subject: [PATCH 54/82] fix: lock-file. --- pnpm-lock.yaml | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 20316f694..b7c8dcdd1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,9 +14,6 @@ importers: '@appwrite.io/console': specifier: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@e190a19 version: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@e190a19 - '@appwrite.io/pink': - specifier: 0.25.0 - version: 0.25.0 '@appwrite.io/pink-icons': specifier: 0.25.0 version: 0.25.0 @@ -287,9 +284,6 @@ packages: peerDependencies: svelte: ^4.0.0 - '@appwrite.io/pink@0.25.0': - resolution: {integrity: sha512-9z4G/iAhjvVpM7tkNqzGqrokst4hvNt3Fkf2jD4W6n8j//EJbQ3mJ0I+5dye5Sry0a33wUanq5DSztqFNYq5zw==} - '@asamuzakjp/css-color@3.1.1': resolution: {integrity: sha512-hpRD68SV2OMcZCsrbdkccTw5FXjNDLo5OuqSHyHZfwweGsDWZwDJ2+gONyNAbazZclobMirACLw0lk8WVxIqxA==} @@ -2664,9 +2658,6 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize.css@8.0.1: - resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==} - nwsapi@2.2.20: resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==} @@ -3659,12 +3650,6 @@ snapshots: svelte-motion: 0.12.2(svelte@5.25.3) svelte-sonner: 0.3.28(svelte@5.25.3) - '@appwrite.io/pink@0.25.0': - dependencies: - '@appwrite.io/pink-icons': 0.25.0 - normalize.css: 8.0.1 - the-new-css-reset: 1.11.3 - '@asamuzakjp/css-color@3.1.1': dependencies: '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) @@ -6254,8 +6239,6 @@ snapshots: normalize-path@3.0.0: {} - normalize.css@8.0.1: {} - nwsapi@2.2.20: {} object-inspect@1.13.4: {} From e6d32b109f9dbe75700a80e1cf939994664be35e Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 27 May 2025 15:22:27 +0200 Subject: [PATCH 55/82] fix: show back button on mobile, fix create manual deployment check --- src/lib/layout/coverTitle.svelte | 30 +++++++++++-------- .../(modals)/createManual.svelte | 2 +- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/lib/layout/coverTitle.svelte b/src/lib/layout/coverTitle.svelte index eb3a43fa1..ce87e70e5 100644 --- a/src/lib/layout/coverTitle.svelte +++ b/src/lib/layout/coverTitle.svelte @@ -1,18 +1,24 @@ -{#if href} - - - - - -{/if} - - - + + {#if href} + + + + + + {/if} + + + + diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte index 4d6ae6e70..6259d577c 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte @@ -22,7 +22,7 @@ let error: string = ''; $: maxSize = - isCloud && $currentPlan + isCloud && $currentPlan?.deploymentSize ? $currentPlan.deploymentSize * 1000000 : $consoleVariables._APP_COMPUTE_SIZE_LIMIT; // already in MB From 42ce877cb8dc437af2cc03783f7ae2bb25e3b704 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 27 May 2025 15:47:41 +0200 Subject: [PATCH 56/82] Add cache headers for console static assets Configure 1-day caching with revalidation for images, CSS, fonts, and icons in the /console path to improve performance while ensuring freshness. --- docker/nginx.conf | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docker/nginx.conf b/docker/nginx.conf index 0aba86e84..1f53fec8f 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -4,7 +4,6 @@ server { gzip_static on; - # Set root for all locations root /usr/share/nginx/html; # Security headers for all locations @@ -22,11 +21,17 @@ server { add_header Cache-Control "public"; } + # Cache, but revalidate, for images, css, fonts, and icons folders + location ~* ^/console/(images|css|fonts|icons)/ { + expires 1d; + add_header Cache-Control "public, must-revalidate"; + } + # All other /console requests (no cache) location /console { index index.html index.html; try_files $uri /console/index.html; - + expires 0; add_header Cache-Control "no-store"; add_header Pragma "no-cache"; From 0ad03ebb75a5221ecc619f3bc736d187091aa909 Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 27 May 2025 16:48:34 +0200 Subject: [PATCH 57/82] fix: plan summary --- .../billing/planSummary.svelte | 98 ++++--------------- 1 file changed, 21 insertions(+), 77 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/billing/planSummary.svelte b/src/routes/(console)/organization-[organization]/billing/planSummary.svelte index 3c9900e80..f35163025 100644 --- a/src/routes/(console)/organization-[organization]/billing/planSummary.svelte +++ b/src/routes/(console)/organization-[organization]/billing/planSummary.svelte @@ -7,7 +7,6 @@ import { organization } from '$lib/stores/organization'; import type { Aggregation, CreditList, Invoice, Plan } from '$lib/sdk/billing'; import { abbreviateNumber, formatCurrency, formatNumberWithCommas } from '$lib/helpers/numbers'; - import { humanFileSize } from '$lib/helpers/sizeConvertion'; import { BillingPlan } from '$lib/constants'; import { Click, trackEvent } from '$lib/actions/analytics'; import { @@ -35,21 +34,6 @@ new Date($organization?.billingStartDate).getTime() - today.getTime() > 0 && $plansInfo.get($organization.billingPlan)?.trialDays; const extraUsage = currentInvoice ? currentInvoice.amount - currentPlan?.price : 0; - - function usageNameToLabel(name: string): string { - switch (name) { - case 'executions': - return 'Executions'; - case 'storage': - return 'Storage'; - case 'users': - return 'Users'; - case 'bandwidth': - return 'Bandwidth'; - default: - return ''; - } - } {#if $organization} @@ -112,69 +96,29 @@ {#if i > 0 || currentAggregation.additionalMembers} {/if} - {#if ['storage', 'bandwidth'].includes(excess.name)} - {@const excessValue = humanFileSize(excess.value)} - - - {usageNameToLabel( - excess.name - )} - {formatCurrency( - excess.amount - )} - - - - - - {formatNumberWithCommas( - excess.value ?? 0 - )} bytes - - {excessValue.value ?? - 0}{excessValue.unit} - - - + + + + + {excess.name} + + + {formatCurrency(excess.amount)} + - {/if} - {#if ['users', 'executions'].includes(excess.name)} - - - {usageNameToLabel( - excess.name - )} - {formatCurrency( - excess.amount - )} - - - - - {formatNumberWithCommas(excess.value)} - - {abbreviateNumber(excess.value)} - - + + + + {formatNumberWithCommas(excess.value)} + + {abbreviateNumber(excess.value)} + - {/if} + {/each} {/if} From 67b783428b15fb50f0c0377b3af89ebf62d4f83a Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 27 May 2025 17:08:10 +0200 Subject: [PATCH 58/82] fix: project dropdown org usage --- .../usage/[[invoice]]/ProjectBreakdown.svelte | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/usage/[[invoice]]/ProjectBreakdown.svelte b/src/routes/(console)/organization-[organization]/usage/[[invoice]]/ProjectBreakdown.svelte index fb9ff7a82..36be4abcc 100644 --- a/src/routes/(console)/organization-[organization]/usage/[[invoice]]/ProjectBreakdown.svelte +++ b/src/routes/(console)/organization-[organization]/usage/[[invoice]]/ProjectBreakdown.svelte @@ -6,6 +6,7 @@ import { onMount } from 'svelte'; import { Accordion, Table } from '@appwrite.io/pink-svelte'; import { base } from '$app/paths'; + import type { PageData } from './$types'; type Metric = | 'users' @@ -21,7 +22,7 @@ type DatabaseOperationMetric = Extract; - export let data; + export let data: PageData; export let projects: OrganizationUsage['projects']; export let metric: Metric | undefined = undefined; export let estimate: Estimate | undefined = undefined; @@ -137,7 +138,7 @@ {#if !$canSeeProjects} - {data.projectNames[project.projectId]?.name ?? 'Unknown'} + {data.projects[project.projectId]?.name ?? 'Unknown'} {format(project.databasesReads ?? 0)} @@ -155,7 +156,7 @@ {:else} - {data.projectNames[project.projectId]?.name ?? 'Unknown'} + {data.projects[project.projectId]?.name ?? 'Unknown'} {format(project.databasesReads ?? 0)} From 238b05c5377680c7526fa30476d240f69a39ba3c Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 27 May 2025 17:11:25 +0200 Subject: [PATCH 59/82] Refactor project type handling in sidebar and shell - Limit fetching only 5 projects for the navigation - Replace custom NavbarProject type with Models.Project - Remove redundant project filtering in shell component - Pass selectedProject directly from page data - Add proper TypeScript types for layout data --- src/lib/components/sidebar.svelte | 6 +++--- src/lib/layout/shell.svelte | 9 +++------ src/routes/(console)/+layout.svelte | 8 +++++--- src/routes/(console)/+layout.ts | 6 +++--- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/lib/components/sidebar.svelte b/src/lib/components/sidebar.svelte index 99bd5db85..31cba6724 100644 --- a/src/lib/components/sidebar.svelte +++ b/src/lib/components/sidebar.svelte @@ -39,11 +39,11 @@ import { Click, trackEvent } from '$lib/actions/analytics'; import type { HTMLAttributes } from 'svelte/elements'; - import type { NavbarProject } from '$lib/components/navbar.svelte'; + import type { Models } from '@appwrite.io/console'; type $$Props = HTMLAttributes & { state?: 'closed' | 'open' | 'icons'; - project: NavbarProject | undefined; + project: Models.Project | undefined; avatar: string; progressCard?: { title: string; @@ -84,7 +84,7 @@
      diff --git a/src/lib/layout/shell.svelte b/src/lib/layout/shell.svelte index 871f2d525..e5062eddc 100644 --- a/src/lib/layout/shell.svelte +++ b/src/lib/layout/shell.svelte @@ -11,21 +11,20 @@ import { sdk } from '$lib/stores/sdk'; import { user } from '$lib/stores/user'; import { tierToPlan } from '$lib/stores/billing'; - import { type Models } from '@appwrite.io/console'; import { isCloud } from '$lib/system'; import SideNavigation from '$lib/layout/navigation.svelte'; import { hasOnboardingDismissed } from '$lib/helpers/onboarding'; import { isSidebarOpen } from '$lib/stores/sidebar'; import { BillingPlan } from '$lib/constants'; import { page } from '$app/stores'; + import type { Models } from '@appwrite.io/console'; export let showSideNavigation = false; export let showHeader = true; export let showFooter = true; export let loadedProjects: Array = []; - export let projects: Array = []; + export let selectedProject: Models.Project | null = null; - $: selectedProject = loadedProjects.find((project) => project.isSelected); let yOnMenuOpen: number; let showContentTransition = false; let timeoutId: ReturnType; @@ -120,11 +119,9 @@ const progressCard = function getProgressCard() { if (selectedProject && !hasOnboardingDismissed(selectedProject.$id)) { - const currentProject = projects.find((project) => project.$id === selectedProject.$id); - return { title: 'Get started', - percentage: currentProject && currentProject.platforms.length ? 100 : 33 + percentage: selectedProject && selectedProject.platforms.length ? 100 : 33 }; } diff --git a/src/routes/(console)/+layout.svelte b/src/routes/(console)/+layout.svelte index 2a101bc25..337526292 100644 --- a/src/routes/(console)/+layout.svelte +++ b/src/routes/(console)/+layout.svelte @@ -52,6 +52,7 @@ IconSparkles, IconSwitchHorizontal } from '@appwrite.io/pink-icons-svelte'; + import type { LayoutData } from './$types'; function kebabToSentenceCase(str: string) { return str @@ -62,7 +63,8 @@ const isAssistantEnabled = $consoleVariables?._APP_ASSISTANT_ENABLED === true; - export let data; + export let data: LayoutData; + $: loadedProjects = data.projects.map((project) => { return { name: project?.name, @@ -340,8 +342,8 @@ !page.url.pathname.includes('/console/onboarding')} showHeader={!page.url.pathname.includes('/console/onboarding')} showFooter={!page.url.pathname.includes('/console/onboarding')} - bind:loadedProjects - bind:projects={data.projects}> + {loadedProjects} + selectedProject={page.data?.project}>
      diff --git a/src/routes/(console)/+layout.ts b/src/routes/(console)/+layout.ts index f09c16ef3..249914fc8 100644 --- a/src/routes/(console)/+layout.ts +++ b/src/routes/(console)/+layout.ts @@ -4,7 +4,7 @@ import type { Tier } from '$lib/stores/billing'; import { sdk } from '$lib/stores/sdk'; import { isCloud } from '$lib/system'; import type { LayoutLoad } from './$types'; -import { Query } from '@appwrite.io/console'; +import { Query, type Models } from '@appwrite.io/console'; export const load: LayoutLoad = async ({ params, fetch, depends, parent }) => { await parent(); @@ -38,7 +38,7 @@ export const load: LayoutLoad = async ({ params, fetch, depends, parent }) => { ? await sdk.forConsole.teams.list() : await sdk.forConsole.billing.listOrganization(); - let projects = []; + let projects: Models.Project[] = []; let currentOrgId = params.organization ? params.organization : prefs.organization; if (!currentOrgId && organizations.teams.length > 0) { @@ -47,7 +47,7 @@ export const load: LayoutLoad = async ({ params, fetch, depends, parent }) => { if (currentOrgId) { const orgProjects = await sdk.forConsole.projects.list([ Query.equal('teamId', currentOrgId), - Query.limit(100), + Query.limit(5), Query.orderDesc('$updatedAt') ]); projects = orgProjects.projects.length > 0 ? orgProjects.projects : []; From fe411a8a293111d662aa76e4d52b7cd434ff0eb8 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 27 May 2025 17:42:36 +0200 Subject: [PATCH 60/82] Update pink-svelte dependency to b91df47 and improve code quality - Update @appwrite.io/pink-svelte to latest commit - Replace loose equality (==) with strict equality (===) - Add required attribute to InputDigits component --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- src/lib/components/mfaChallengeFormList.svelte | 8 ++++---- src/routes/(console)/account/mfa.svelte | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index dd5019c40..982859a4f 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1", "@appwrite.io/pink-legacy": "^1.0.3", - "@appwrite.io/pink-svelte": "https://try-module.cloud/module/@appwrite/@appwrite.io/pink-svelte@0cc439f", + "@appwrite.io/pink-svelte": "https://try-module.cloud/-/@appwrite/@appwrite.io/pink-svelte@b91df47", "@popperjs/core": "^2.11.8", "@sentry/sveltekit": "^8.38.0", "@stripe/stripe-js": "^3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b7c8dcdd1..bf6b42c2a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 '@appwrite.io/pink-svelte': - specifier: https://try-module.cloud/module/@appwrite/@appwrite.io/pink-svelte@0cc439f - version: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@0cc439f(svelte@5.25.3) + specifier: https://try-module.cloud/-/@appwrite/@appwrite.io/pink-svelte@b91df47 + version: https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@b91df47(svelte@5.25.3) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 @@ -278,8 +278,8 @@ packages: '@appwrite.io/pink-legacy@1.0.3': resolution: {integrity: sha512-GGde5fmPhs+s6/3aFeMPc/kKADG/gTFkYQSy6oBN8pK0y0XNCLrZZgBv+EBbdhwdtqVEWXa0X85Mv9w7jcIlwQ==} - '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@0cc439f': - resolution: {tarball: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@0cc439f} + '@appwrite.io/pink-svelte@https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@b91df47': + resolution: {tarball: https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@b91df47} version: 2.0.0-RC.2 peerDependencies: svelte: ^4.0.0 @@ -3635,7 +3635,7 @@ snapshots: '@appwrite.io/pink-icons': 1.0.0 the-new-css-reset: 1.11.3 - '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@0cc439f(svelte@5.25.3)': + '@appwrite.io/pink-svelte@https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@b91df47(svelte@5.25.3)': dependencies: '@appwrite.io/pink-icons-svelte': 2.0.0-RC.1(svelte@5.25.3) '@floating-ui/dom': 1.6.13 diff --git a/src/lib/components/mfaChallengeFormList.svelte b/src/lib/components/mfaChallengeFormList.svelte index 86e6c2dec..3e369b2ab 100644 --- a/src/lib/components/mfaChallengeFormList.svelte +++ b/src/lib/components/mfaChallengeFormList.svelte @@ -3,7 +3,7 @@ export async function verify(challenge: Models.MfaChallenge, code: string) { try { - if (challenge == null) { + if (challenge === null) { challenge = await sdk.forConsole.account.createMfaChallenge( AuthenticationFactor.Totp ); @@ -59,9 +59,9 @@ onMount(async () => { const enabledNonRecoveryFactors = enabledFactors.filter( - ([factor, _]) => factor != 'recoveryCode' + ([factor, _]) => factor !== 'recoveryCode' ); - if (enabledNonRecoveryFactors.length == 1) { + if (enabledNonRecoveryFactors.length === 1) { if (factors.phone) { createChallenge(AuthenticationFactor.Phone); } else if (factors.email) { @@ -77,7 +77,7 @@ {:else} - {#if factors.totp && (challengeType == AuthenticationFactor.Totp || challengeType == null)} + {#if factors.totp && (challengeType === AuthenticationFactor.Totp || challengeType === null)} Enter below a 6-digit one-time code generated by your authentication app. {:else if challengeType === AuthenticationFactor.Email} diff --git a/src/routes/(console)/account/mfa.svelte b/src/routes/(console)/account/mfa.svelte index 4768c28ee..777abe4f8 100644 --- a/src/routes/(console)/account/mfa.svelte +++ b/src/routes/(console)/account/mfa.svelte @@ -75,7 +75,7 @@ {/await} {:else} - + {/if} {/key} From caedd49d2ff9ebe7dd3bb419ae66539a39138bc2 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 27 May 2025 18:11:57 +0200 Subject: [PATCH 61/82] Update @appwrite.io/pink-svelte to commit 4b27c82 --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 982859a4f..c62a1dd07 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1", "@appwrite.io/pink-legacy": "^1.0.3", - "@appwrite.io/pink-svelte": "https://try-module.cloud/-/@appwrite/@appwrite.io/pink-svelte@b91df47", + "@appwrite.io/pink-svelte": "https://try-module.cloud/-/@appwrite/@appwrite.io/pink-svelte@4b27c82", "@popperjs/core": "^2.11.8", "@sentry/sveltekit": "^8.38.0", "@stripe/stripe-js": "^3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bf6b42c2a..f10afea62 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 '@appwrite.io/pink-svelte': - specifier: https://try-module.cloud/-/@appwrite/@appwrite.io/pink-svelte@b91df47 - version: https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@b91df47(svelte@5.25.3) + specifier: https://try-module.cloud/-/@appwrite/@appwrite.io/pink-svelte@4b27c82 + version: https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@4b27c82(svelte@5.25.3) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 @@ -278,8 +278,8 @@ packages: '@appwrite.io/pink-legacy@1.0.3': resolution: {integrity: sha512-GGde5fmPhs+s6/3aFeMPc/kKADG/gTFkYQSy6oBN8pK0y0XNCLrZZgBv+EBbdhwdtqVEWXa0X85Mv9w7jcIlwQ==} - '@appwrite.io/pink-svelte@https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@b91df47': - resolution: {tarball: https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@b91df47} + '@appwrite.io/pink-svelte@https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@4b27c82': + resolution: {tarball: https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@4b27c82} version: 2.0.0-RC.2 peerDependencies: svelte: ^4.0.0 @@ -3635,7 +3635,7 @@ snapshots: '@appwrite.io/pink-icons': 1.0.0 the-new-css-reset: 1.11.3 - '@appwrite.io/pink-svelte@https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@b91df47(svelte@5.25.3)': + '@appwrite.io/pink-svelte@https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@4b27c82(svelte@5.25.3)': dependencies: '@appwrite.io/pink-icons-svelte': 2.0.0-RC.1(svelte@5.25.3) '@floating-ui/dom': 1.6.13 From 6794cec74c2265bca930f8ecb3016cc76e0b16ab Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 27 May 2025 18:28:04 +0200 Subject: [PATCH 62/82] Update @appwrite.io/pink-svelte to commit 6ea6004 --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index c62a1dd07..13f517e66 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1", "@appwrite.io/pink-legacy": "^1.0.3", - "@appwrite.io/pink-svelte": "https://try-module.cloud/-/@appwrite/@appwrite.io/pink-svelte@4b27c82", + "@appwrite.io/pink-svelte": "https://try-module.cloud/-/@appwrite/@appwrite.io/pink-svelte@6ea6004", "@popperjs/core": "^2.11.8", "@sentry/sveltekit": "^8.38.0", "@stripe/stripe-js": "^3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f10afea62..0744b1623 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 '@appwrite.io/pink-svelte': - specifier: https://try-module.cloud/-/@appwrite/@appwrite.io/pink-svelte@4b27c82 - version: https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@4b27c82(svelte@5.25.3) + specifier: https://try-module.cloud/-/@appwrite/@appwrite.io/pink-svelte@6ea6004 + version: https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@6ea6004(svelte@5.25.3) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 @@ -278,8 +278,8 @@ packages: '@appwrite.io/pink-legacy@1.0.3': resolution: {integrity: sha512-GGde5fmPhs+s6/3aFeMPc/kKADG/gTFkYQSy6oBN8pK0y0XNCLrZZgBv+EBbdhwdtqVEWXa0X85Mv9w7jcIlwQ==} - '@appwrite.io/pink-svelte@https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@4b27c82': - resolution: {tarball: https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@4b27c82} + '@appwrite.io/pink-svelte@https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@6ea6004': + resolution: {tarball: https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@6ea6004} version: 2.0.0-RC.2 peerDependencies: svelte: ^4.0.0 @@ -3635,7 +3635,7 @@ snapshots: '@appwrite.io/pink-icons': 1.0.0 the-new-css-reset: 1.11.3 - '@appwrite.io/pink-svelte@https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@4b27c82(svelte@5.25.3)': + '@appwrite.io/pink-svelte@https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@6ea6004(svelte@5.25.3)': dependencies: '@appwrite.io/pink-icons-svelte': 2.0.0-RC.1(svelte@5.25.3) '@floating-ui/dom': 1.6.13 From a68b8027b17a9d0db95ed62470b0d0c61ebcfd34 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 27 May 2025 18:44:01 +0200 Subject: [PATCH 63/82] Improve command center search and layout styling Replace HTML autofocus attribute with custom Svelte action to avoid a11y warnings. Fix option layout direction from column to row and update search input padding/margin values. --- src/lib/commandCenter/panels/template.svelte | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/lib/commandCenter/panels/template.svelte b/src/lib/commandCenter/panels/template.svelte index 78dc3fe74..4065c0421 100644 --- a/src/lib/commandCenter/panels/template.svelte +++ b/src/lib/commandCenter/panels/template.svelte @@ -11,6 +11,7 @@ import { IconArrowSmRight } from '@appwrite.io/pink-icons-svelte'; import { Icon, Keyboard, Layout } from '@appwrite.io/pink-svelte'; import { Submit, trackEvent } from '$lib/actions/analytics'; + import type { Action } from 'svelte/action'; /* eslint no-undef: "off" */ type Option = $$Generic & { group?: string }>; @@ -247,6 +248,10 @@ return isGroup(nextItem) || !nextItem?.nested; }; + + const autofocus: Action = (node) => { + if (node) node.focus(); + }; @@ -271,8 +276,11 @@
      @@ -305,7 +313,7 @@ on:mouseleave={getOptionBlurHandler()} on:focus={getOptionFocusHandler(item)}> - + {#if item.icon} Date: Tue, 27 May 2025 19:27:35 +0200 Subject: [PATCH 64/82] Update @appwrite.io/pink-svelte to commit 7b28443 --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 13f517e66..98b200768 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1", "@appwrite.io/pink-legacy": "^1.0.3", - "@appwrite.io/pink-svelte": "https://try-module.cloud/-/@appwrite/@appwrite.io/pink-svelte@6ea6004", + "@appwrite.io/pink-svelte": "https://try-module.cloud/-/@appwrite/@appwrite.io/pink-svelte@7b28443", "@popperjs/core": "^2.11.8", "@sentry/sveltekit": "^8.38.0", "@stripe/stripe-js": "^3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0744b1623..9279a8137 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 '@appwrite.io/pink-svelte': - specifier: https://try-module.cloud/-/@appwrite/@appwrite.io/pink-svelte@6ea6004 - version: https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@6ea6004(svelte@5.25.3) + specifier: https://try-module.cloud/-/@appwrite/@appwrite.io/pink-svelte@7b28443 + version: https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@7b28443(svelte@5.25.3) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 @@ -278,8 +278,8 @@ packages: '@appwrite.io/pink-legacy@1.0.3': resolution: {integrity: sha512-GGde5fmPhs+s6/3aFeMPc/kKADG/gTFkYQSy6oBN8pK0y0XNCLrZZgBv+EBbdhwdtqVEWXa0X85Mv9w7jcIlwQ==} - '@appwrite.io/pink-svelte@https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@6ea6004': - resolution: {tarball: https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@6ea6004} + '@appwrite.io/pink-svelte@https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@7b28443': + resolution: {tarball: https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@7b28443} version: 2.0.0-RC.2 peerDependencies: svelte: ^4.0.0 @@ -3635,7 +3635,7 @@ snapshots: '@appwrite.io/pink-icons': 1.0.0 the-new-css-reset: 1.11.3 - '@appwrite.io/pink-svelte@https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@6ea6004(svelte@5.25.3)': + '@appwrite.io/pink-svelte@https://try-module.cloud/-/@appwrite/%40appwrite.io%2Fpink-svelte@7b28443(svelte@5.25.3)': dependencies: '@appwrite.io/pink-icons-svelte': 2.0.0-RC.1(svelte@5.25.3) '@floating-ui/dom': 1.6.13 From 9bfefbd4d06f4d715cd11bb281c64f63923e65e1 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 27 May 2025 19:29:38 +0200 Subject: [PATCH 65/82] Add default column widths and improve text display - Set 168px width for all table columns - Replace span with Typography.Text for better text truncation - Add word-break styling to tooltip for long text wrapping --- .../collection-[collection]/table.svelte | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 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 abbe66541..a7265fa64 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 @@ -22,7 +22,8 @@ Button, Link, Badge, - FloatingActionBar + FloatingActionBar, + Typography } from '@appwrite.io/pink-svelte'; import DualTimeView from '$lib/components/dualTimeView.svelte'; @@ -102,6 +103,7 @@ type: attribute.type as ColumnType, show: selected?.includes(attribute.key) ?? true, array: attribute?.array, + width: 168, format: 'format' in attribute && attribute?.format === 'enum' ? attribute.format : null, elements: 'elements' in attribute ? attribute.elements : null @@ -166,7 +168,12 @@ let:root allowSelection bind:selectedRows - columns={[{ id: '$id', width: 200 }, ...$columns, { id: '$created' }, { id: '$updated' }]}> + columns={[ + { id: '$id', width: 200 }, + ...$columns, + { id: '$created', width: 200 }, + { id: '$updated', width: 200 } + ]}> Document ID {#each $columns as column} @@ -238,10 +245,13 @@ {:else} {@const formatted = formatColumn(document[id])} - + {formatted.value} - - + + {formatted.whole} From 1097377e563a0239b65286f486e5f8d748ba7907 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 27 May 2025 19:57:49 +0200 Subject: [PATCH 66/82] Refactor usage rates to use dynamic plan structure Replace hardcoded planData array with dynamic iteration over plan.addons and plan.usage objects. Add getPlanLimit helper function and name field to AdditionalResource type for improved data handling. --- src/lib/components/billing/usageRates.svelte | 65 ++++++++------------ src/lib/sdk/billing.ts | 1 + 2 files changed, 25 insertions(+), 41 deletions(-) diff --git a/src/lib/components/billing/usageRates.svelte b/src/lib/components/billing/usageRates.svelte index 653b9c154..b58df6f3a 100644 --- a/src/lib/components/billing/usageRates.svelte +++ b/src/lib/components/billing/usageRates.svelte @@ -17,31 +17,6 @@ ? new Date(new Date().getFullYear(), new Date().getMonth() + 1, 1).toString() : org?.billingNextInvoiceDate; - const planData = [ - { - id: 'members', - resource: 'Organization members', - unit: 'member' - }, - { id: 'bandwidth', resource: 'Bandwidth', unit: 'GB' }, - { id: 'storage', resource: 'Storage', unit: 'GB' }, - { - id: 'executions', - resource: 'Function executions', - unit: ' executions' - }, - { - id: 'users', - resource: 'Users', - unit: ' Users' - }, - { - id: 'realtime', - resource: 'Concurrent connections', - unit: ' connections' - } - ]; - $: isFree = org.billingPlan === BillingPlan.FREE; // equal or above means unlimited! @@ -50,6 +25,10 @@ const exceedsSafeLimit = count >= Number.MAX_SAFE_INTEGER; return exceedsSafeLimit ? 'Unlimited' : count || 0; }; + + function getPlanLimit(key: string): number | false { + return plan[key] || false; + } @@ -77,29 +56,33 @@ Limit Rate - {#each planData as usage} - {#if usage['id'] === 'members'} - - {usage.resource} - - {getCorrectSeatsCountValue(plan.addons.seats.limit)} - + {#each Object.values(plan.addons) as addon} + + {addon.invoiceDesc} + + {getCorrectSeatsCountValue(addon.limit)} + + {#if !isFree} - {formatCurrency(plan.addons?.seats?.price)}/{usage?.unit} + {formatCurrency(addon.price)}/member - - {:else} - {@const addon = plan.addons[usage.id]} + {/if} + + {/each} + {#each Object.entries(plan.usage) as [key, usage]} + {@const limit = getPlanLimit(key)} + {@const show = limit !== false} + {#if show} - {usage.resource} + {usage.name} - {abbreviateNumber(plan[usage.id])}{usage?.unit} + {abbreviateNumber(limit)}{usage.unit} {#if !isFree} - {formatCurrency(addon?.price)}/{['MB', 'GB', 'TB'].includes(addon?.unit) - ? addon?.value - : abbreviateNumber(addon?.value, 0)}{usage?.unit} + {formatCurrency(usage.price)}/{abbreviateNumber( + usage.value + )}{usage.unit} {/if} diff --git a/src/lib/sdk/billing.ts b/src/lib/sdk/billing.ts index aab3ffe59..9a4cdfe4f 100644 --- a/src/lib/sdk/billing.ts +++ b/src/lib/sdk/billing.ts @@ -278,6 +278,7 @@ export type AddressesList = { }; export type AdditionalResource = { + name: string; currency: string; invoiceDesc: string; price: number; From 1a7caf13989f08eeb4a5c379cd37dd7a65c8609f Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Tue, 27 May 2025 15:35:33 -0700 Subject: [PATCH 67/82] fix: add missing region from various URLs --- .../auth/user-[user]/dangerZone.svelte | 3 ++- .../auth/user-[user]/memberships/+page.svelte | 3 ++- .../project-[region]-[project]/messaging/+page.svelte | 11 ++++------- .../providers/provider-[provider]/dangerZone.svelte | 5 +++-- .../messaging/topics/+page.svelte | 5 ++++- .../project-[region]-[project]/storage/grid.svelte | 3 ++- 6 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/dangerZone.svelte b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/dangerZone.svelte index 97eda9f42..3154a1af2 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/dangerZone.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/dangerZone.svelte @@ -5,7 +5,8 @@ export const promptDeleteUser = (id: string) => { showDelete.set(true); - goto(`${base}/project-${get(project).$id}/auth/user-${id}`); + const p = get(project); + goto(`${base}/project-${p.region}-${p.$id}/auth/user-${id}`); }; diff --git a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/memberships/+page.svelte b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/memberships/+page.svelte index 13ca40706..ea18ea0ca 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/memberships/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/memberships/+page.svelte @@ -15,6 +15,7 @@ let selectedMembership: Models.Membership; let showDelete = false; + const region = page.params.region; const project = page.params.project; @@ -37,7 +38,7 @@ {#each data.memberships.memberships as membership} + href={`${base}/project-${region}-${project}/auth/teams/team-${membership.teamId}`}> diff --git a/src/routes/(console)/project-[region]-[project]/messaging/+page.svelte b/src/routes/(console)/project-[region]-[project]/messaging/+page.svelte index 9e9f35912..0ed4c8b4c 100644 --- a/src/routes/(console)/project-[region]-[project]/messaging/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/messaging/+page.svelte @@ -63,14 +63,13 @@ { id: 'deliveredAt', title: 'Delivered at', type: 'datetime', width: { min: 120 } } ]); + const region = page.params.region; const project = page.params.project; async function handleDelete() { showDelete = false; - const promises = selected.map((id) => - sdk.forProject(page.params.region, page.params.project).messaging.delete(id) - ); + const promises = selected.map((id) => sdk.forProject(region, project).messaging.delete(id)); try { await Promise.all(promises); @@ -134,7 +133,7 @@ + href={`${base}/project-${region}-${project}/messaging/message-${message.$id}`}> {#each $columns as column (column.id)} {#if column.id === '$id'} @@ -213,9 +212,7 @@ - diff --git a/src/routes/(console)/project-[region]-[project]/messaging/providers/provider-[provider]/dangerZone.svelte b/src/routes/(console)/project-[region]-[project]/messaging/providers/provider-[provider]/dangerZone.svelte index 09e53b779..8f72eea6b 100644 --- a/src/routes/(console)/project-[region]-[project]/messaging/providers/provider-[provider]/dangerZone.svelte +++ b/src/routes/(console)/project-[region]-[project]/messaging/providers/provider-[provider]/dangerZone.svelte @@ -3,9 +3,10 @@ let showDelete = writable(false); - export const promptDeleteUser = (id: string) => { + export const promptDeleteProvider = (id: string) => { showDelete.set(true); - goto(`${base}/project-${get(project).$id}/auth/user-${id}`); + const p = get(project); + goto(`${base}/project-${p.region}-${p.$id}/messaging/providers/provider-${id}`); }; diff --git a/src/routes/(console)/project-[region]-[project]/messaging/topics/+page.svelte b/src/routes/(console)/project-[region]-[project]/messaging/topics/+page.svelte index 1da34450c..c8f5a49b2 100644 --- a/src/routes/(console)/project-[region]-[project]/messaging/topics/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/messaging/topics/+page.svelte @@ -28,6 +28,7 @@ export let data: PageData; + const region = page.params.region; const project = page.params.project; const columns = writable([ { id: '$id', title: 'Topic ID', type: 'string', width: 200 }, @@ -64,7 +65,9 @@ ]); const topicCreated = async (event: CustomEvent>>) => { - await goto(`${base}/project-${project}/messaging/topics/topic-${event.detail.$id}`); + await goto( + `${base}/project-${region}-${project}/messaging/topics/topic-${event.detail.$id}` + ); }; diff --git a/src/routes/(console)/project-[region]-[project]/storage/grid.svelte b/src/routes/(console)/project-[region]-[project]/storage/grid.svelte index 6d6fffae5..dbdc549a3 100644 --- a/src/routes/(console)/project-[region]-[project]/storage/grid.svelte +++ b/src/routes/(console)/project-[region]-[project]/storage/grid.svelte @@ -9,6 +9,7 @@ export let data: PageData; export let showCreate = false; + const region = page.params.region; const project = page.params.project; @@ -20,7 +21,7 @@ service="buckets" on:click={() => (showCreate = true)}> {#each data.buckets.buckets as bucket} - + {bucket.name} {#if !bucket.enabled} From dc9ba4b1461d52abe09de257b840ddd15ba357ff Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Tue, 27 May 2025 16:30:21 -0700 Subject: [PATCH 68/82] fix: fix invoice view and download links The prefix should be the api endpoint instead of the base path so that the developer goes straight to the API endpoint to view or download their invoice. --- .../billing/paymentHistory.svelte | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/billing/paymentHistory.svelte b/src/routes/(console)/organization-[organization]/billing/paymentHistory.svelte index 969a8a876..c44c40c9d 100644 --- a/src/routes/(console)/organization-[organization]/billing/paymentHistory.svelte +++ b/src/routes/(console)/organization-[organization]/billing/paymentHistory.svelte @@ -5,7 +5,7 @@ import { toLocaleDate } from '$lib/helpers/date'; import { formatCurrency } from '$lib/helpers/numbers'; import type { Invoice, InvoiceList } from '$lib/sdk/billing'; - import { sdk } from '$lib/stores/sdk'; + import { getApiEndpoint, sdk } from '$lib/stores/sdk'; import { Query } from '@appwrite.io/console'; import { onMount } from 'svelte'; import { trackEvent } from '$lib/actions/analytics'; @@ -27,7 +27,6 @@ IconExternalLink, IconRefresh } from '@appwrite.io/pink-icons-svelte'; - import { base } from '$app/paths'; let offset = 0; let invoiceList: InvoiceList = { @@ -36,6 +35,7 @@ }; const limit = 5; + const endpoint = getApiEndpoint(); onMount(request); @@ -134,12 +134,12 @@ + href={`${endpoint}/organizations/${page.params.organization}/invoices/${invoice.$id}/view`}> View invoice + href={`${endpoint}/organizations/${page.params.organization}/invoices/${invoice.$id}/download`}> Download PDF {#if status === 'overdue' || status === 'failed'} From fb9ef29806526babebc6556ecdfc7dd9b3649029 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 28 May 2025 01:56:08 +0200 Subject: [PATCH 69/82] Add null safety to regionsStore access --- src/routes/(console)/onboarding/create-project/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/(console)/onboarding/create-project/+page.svelte b/src/routes/(console)/onboarding/create-project/+page.svelte index 60a95351f..9925429e6 100644 --- a/src/routes/(console)/onboarding/create-project/+page.svelte +++ b/src/routes/(console)/onboarding/create-project/+page.svelte @@ -79,7 +79,7 @@ alt="Appwrite Logo" /> Date: Wed, 28 May 2025 02:02:00 +0200 Subject: [PATCH 70/82] Fix invoice URL to use API endpoint instead of base path --- .../billing/paymentHistory.svelte | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/billing/paymentHistory.svelte b/src/routes/(console)/organization-[organization]/billing/paymentHistory.svelte index 969a8a876..794655184 100644 --- a/src/routes/(console)/organization-[organization]/billing/paymentHistory.svelte +++ b/src/routes/(console)/organization-[organization]/billing/paymentHistory.svelte @@ -5,7 +5,7 @@ import { toLocaleDate } from '$lib/helpers/date'; import { formatCurrency } from '$lib/helpers/numbers'; import type { Invoice, InvoiceList } from '$lib/sdk/billing'; - import { sdk } from '$lib/stores/sdk'; + import { getApiEndpoint, sdk } from '$lib/stores/sdk'; import { Query } from '@appwrite.io/console'; import { onMount } from 'svelte'; import { trackEvent } from '$lib/actions/analytics'; @@ -134,12 +134,12 @@ + href={`${getApiEndpoint()}/organizations/${page.params.organization}/invoices/${invoice.$id}/view`}> View invoice + href={`${getApiEndpoint()}/organizations/${page.params.organization}/invoices/${invoice.$id}/download`}> Download PDF {#if status === 'overdue' || status === 'failed'} From 333b812c8274cb9d577f1ddcdee9a6ceaaf3f6e2 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Tue, 27 May 2025 17:12:46 -0700 Subject: [PATCH 71/82] fix: initialize regions store as empty ConsoleRegionList Using undefined as the initial value can lead to issues when trying to access the store such as: TypeError: Cannot read properties of undefined (reading 'regions') --- src/lib/stores/organization.ts | 2 +- src/routes/(console)/regions.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/stores/organization.ts b/src/lib/stores/organization.ts index 6f22cbc96..9ae54ea27 100644 --- a/src/lib/stores/organization.ts +++ b/src/lib/stores/organization.ts @@ -61,4 +61,4 @@ export const organization = derived(page, ($page) => $page.data?.organization as export const currentPlan = derived(page, ($page) => $page.data?.currentPlan as Plan); export const members = derived(page, ($page) => $page.data.members as Models.MembershipList); -export const regions = writable(undefined); +export const regions = writable({ total: 0, regions: [] }); diff --git a/src/routes/(console)/regions.ts b/src/routes/(console)/regions.ts index 0ac4d4304..b9e863367 100644 --- a/src/routes/(console)/regions.ts +++ b/src/routes/(console)/regions.ts @@ -16,7 +16,7 @@ export async function loadAvailableRegions(orgId: string): Promise { try { const storedRegions = get(regions); - if (storedRegions?.regions && lastLoadedOrganization === orgId) { + if (storedRegions.regions && lastLoadedOrganization === orgId) { // already loaded for this organization, fast path return. return; } From e4c66b13f81283c8ec674f554c291c6b77011339 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Tue, 27 May 2025 17:15:21 -0700 Subject: [PATCH 72/82] chore: remove unnecessary regions fetch The regions store is populated elsewhere already so no need to do it again here. Also, $organization may not be defined on mount which would lead to: TypeError: Cannot read properties of undefined (reading '$id') --- .../(console)/organization-[organization]/+page.svelte | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/+page.svelte b/src/routes/(console)/organization-[organization]/+page.svelte index 089351e32..19090c22a 100644 --- a/src/routes/(console)/organization-[organization]/+page.svelte +++ b/src/routes/(console)/organization-[organization]/+page.svelte @@ -38,7 +38,7 @@ } from '@appwrite.io/pink-icons-svelte'; import { getPlatformInfo } from '$lib/helpers/platform'; import CreateProjectCloud from './createProjectCloud.svelte'; - import { organization, regions as regionsStore } from '$lib/stores/organization'; + import { regions as regionsStore } from '$lib/stores/organization'; export let data; @@ -112,15 +112,11 @@ } }; onMount(async () => { - if (isCloud && $organization.$id) { - const regions = await sdk.forConsole.billing.listRegions($organization.$id); - regionsStore.set(regions); - checkPricingRefAndRedirect(page.url.searchParams); - } + checkPricingRefAndRedirect(page.url.searchParams); }); function findRegion(project: Models.Project) { - return $regionsStore?.regions?.find((region) => region.$id === project.region); + return $regionsStore.regions.find((region) => region.$id === project.region); } From 4566271e5907e91719f973c1ec444329c068d990 Mon Sep 17 00:00:00 2001 From: Darshan Date: Wed, 28 May 2025 10:37:29 +0530 Subject: [PATCH 73/82] fix: that coupon banner! --- .../billing/alerts/newDevUpgradePro.svelte | 14 ++++- .../components/billing/gradientBanner.svelte | 62 ++++++++++++++++--- src/lib/elements/forms/button.svelte | 15 +++++ 3 files changed, 79 insertions(+), 12 deletions(-) diff --git a/src/lib/components/billing/alerts/newDevUpgradePro.svelte b/src/lib/components/billing/alerts/newDevUpgradePro.svelte index ab48d3798..9ff37559e 100644 --- a/src/lib/components/billing/alerts/newDevUpgradePro.svelte +++ b/src/lib/components/billing/alerts/newDevUpgradePro.svelte @@ -7,6 +7,8 @@ import { organization } from '$lib/stores/organization'; import { activeHeaderAlert } from '$routes/(console)/store'; import GradientBanner from '../gradientBanner.svelte'; + import { isSmallViewport } from '$lib/stores/viewport'; + import { Layout, Typography } from '@appwrite.io/pink-svelte'; let show = true; @@ -23,8 +25,14 @@ {#if show && $organization?.$id && $organization?.billingPlan === BillingPlan.FREE && !page.url.pathname.includes('/console/account')} -
      - Get $50 Cloud credits for Appwrite Pro. + + + Get $50 Cloud credits for Appwrite Pro. + -
      +
      {/if} diff --git a/src/lib/components/billing/gradientBanner.svelte b/src/lib/components/billing/gradientBanner.svelte index 5cae07cd9..7a3adca7a 100644 --- a/src/lib/components/billing/gradientBanner.svelte +++ b/src/lib/components/billing/gradientBanner.svelte @@ -1,11 +1,41 @@ -
      + + +
      +
      - + +
      + + diff --git a/src/lib/elements/forms/button.svelte b/src/lib/elements/forms/button.svelte index 5f11e8478..a60d36a01 100644 --- a/src/lib/elements/forms/button.svelte +++ b/src/lib/elements/forms/button.svelte @@ -124,3 +124,18 @@ {/if} + + + From 9eabedeee589ad8011610a6ccf9e5477771936d0 Mon Sep 17 00:00:00 2001 From: Darshan Date: Wed, 28 May 2025 10:42:22 +0530 Subject: [PATCH 74/82] fix: lint --- src/lib/components/billing/alerts/newDevUpgradePro.svelte | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/components/billing/alerts/newDevUpgradePro.svelte b/src/lib/components/billing/alerts/newDevUpgradePro.svelte index 9ff37559e..4631c1721 100644 --- a/src/lib/components/billing/alerts/newDevUpgradePro.svelte +++ b/src/lib/components/billing/alerts/newDevUpgradePro.svelte @@ -30,7 +30,6 @@ alignItems="center" alignContent="center" direction={$isSmallViewport ? 'column' : 'row'}> - Get $50 Cloud credits for Appwrite Pro. - - - - - - {#if resources?.includes('user')} - - - - -
      - -
      -
      - {/if} - - {#if resources?.includes('database')} - - - -
      - -
      -
      - {/if} - - {#if resources?.includes('function') && isVersionAtLeast(version, '1.4.0')} - - - - {#if resources?.includes('environment-variable') || resources?.includes('deployment')} -
      - - {#if resources?.includes('environment-variable')} - - {/if} - - {#if resources?.includes('deployment')} - - {/if} - -
      + + {#if migrationType === 'provider'} + Please double-check your credentials from the previous step and try again. + {:else} + The API key required for the migration may no longer be valid or has expired, please + verify and start migration again. {/if} -
      - {/if} + + {:else} + + + - {#if resources?.includes('bucket') && resources?.includes('file')} - {@const storageSize = report?.size >= 0 ? `${report?.size.toFixed(2)}MB` : undefined} - - - -
      - - Import all buckets - {#if $provider.provider !== 'firebase' && report?.bucket} - {report.bucket} - {/if} - and files - {#if $provider.provider !== 'firebase' && report?.file} - {report.file} - {/if} - -
      + +
      +
      + + {#each Object.entries($formData) as [groupKey, formGroup]} + {#if shouldRenderGroup(groupKey)} + + {/if} + {/each} {/if}
      - - - diff --git a/src/routes/(console)/(migration-wizard)/wizard.svelte b/src/routes/(console)/(migration-wizard)/wizard.svelte index e0b296759..5c1980058 100644 --- a/src/routes/(console)/(migration-wizard)/wizard.svelte +++ b/src/routes/(console)/(migration-wizard)/wizard.svelte @@ -1,52 +1,409 @@ - + + + {#if !showResources} + + {#if organizations.length >= 1} +
      + ({ + label: project.name, + value: project.$id + }))} + disabled={loadingProjects} /> +
      + {/if} + +
      + {#if loadingProjects} + + + + + + + + {:else} + + + + Import data to an existing project + + + + Import data to a new project + + + + {#if projectType === 'existing'} + ({ + label: p.name, + value: p.$id + }))} /> + {:else} + + + + {#if isCloud && $regions.regions.length > 0} + + Region cannot be changed after creation + {/if} + + {/if} + + { + if (isExisting) { + showResources = true; + } else { + const project = await createNewProject(); + if (project !== null) { + projectSdkInstance = sdk.forProject( + project.region, + project.$id + ); + showResources = true; + } + } + }}> + {#if creatingProject} + + {/if} + + Next + + + + {/if} +
      +
      + {:else} + + + + + + + {capitalize(getProjectName())} + + + + (showResources = !showResources)}> + Update + + + + {/if} + + {#if showResources} +
      + + + +
      + {/if} +
      + + + + + Good to know + + + + + + + + Project settings are not imported + You will need to set service and project settings manually. + + + + + + + + + + Keep your organization plan's limits in mind + Make sure to have enough storage in your organization plan when importing files. + + + + + + {@const isFirebase = $provider.provider === 'firebase'} + + + + + + {isFirebase + ? 'Possible charges by Firebase' + : 'Transfer is free of charge'} + + + {#if isFirebase} + Appwrite does not impose charges for importing data, but please note + that Firebase may have its own pricing for this service + {:else} + You won't be charged for Appwrite bandwidth usage for importing data + {/if} + + + + + + + + (showExitModal = true)}> + Cancel + + + + {#if migrationStarted} + + {/if} + Create + + +
      diff --git a/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/importReport.svelte b/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/importReport.svelte index a7c0b4cc3..e86559bae 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/importReport.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/importReport.svelte @@ -1,34 +1,112 @@ - - - - - +{#if !formGroupChildren.length} +
      + +
      +{:else} + + + {#each formGroupChildren as key} +
      +
      - {/if} + {/each}
      -
      -
      + +{/if} diff --git a/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/step1.svelte b/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/step1.svelte deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/step2.svelte b/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/step2.svelte deleted file mode 100644 index e69de29bb..000000000 From 2ac51670b27e0bc0da4596cb957d38b5e5fa0d7c Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 28 May 2025 12:56:28 +0200 Subject: [PATCH 80/82] Change column width min property on documents table --- .../database-[database]/collection-[collection]/table.svelte | 2 +- 1 file changed, 1 insertion(+), 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 a7265fa64..10f6be464 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 @@ -103,7 +103,7 @@ type: attribute.type as ColumnType, show: selected?.includes(attribute.key) ?? true, array: attribute?.array, - width: 168, + width: { min: 168 }, format: 'format' in attribute && attribute?.format === 'enum' ? attribute.format : null, elements: 'elements' in attribute ? attribute.elements : null From dce3407f802163265e4d2437f08ddd71291af9f4 Mon Sep 17 00:00:00 2001 From: Darshan Date: Wed, 28 May 2025 17:21:54 +0530 Subject: [PATCH 81/82] add: create an organization page. --- src/routes/(console)/+layout.svelte | 4 +- .../create-organization/+page.svelte | 115 ++++++++++++++++++ .../settings/deleteOrganizationModal.svelte | 2 +- 3 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 src/routes/(console)/onboarding/create-organization/+page.svelte diff --git a/src/routes/(console)/+layout.svelte b/src/routes/(console)/+layout.svelte index 337526292..cc4a74d96 100644 --- a/src/routes/(console)/+layout.svelte +++ b/src/routes/(console)/+layout.svelte @@ -340,8 +340,8 @@ !page.url.pathname.includes('/console/account') && !page.url.pathname.includes('/console/card') && !page.url.pathname.includes('/console/onboarding')} - showHeader={!page.url.pathname.includes('/console/onboarding')} - showFooter={!page.url.pathname.includes('/console/onboarding')} + showHeader={!page.url.pathname.includes('/console/onboarding/create-project')} + showFooter={!page.url.pathname.includes('/console/onboarding/create-project')} {loadedProjects} selectedProject={page.data?.project}> diff --git a/src/routes/(console)/onboarding/create-organization/+page.svelte b/src/routes/(console)/onboarding/create-organization/+page.svelte new file mode 100644 index 000000000..f77a7bc53 --- /dev/null +++ b/src/routes/(console)/onboarding/create-organization/+page.svelte @@ -0,0 +1,115 @@ + + + + Create organization - Appwrite + + + +
      +
      + + + Create an organization + + + + + + {#if isLoading} + + {/if} + Create + + + + +
      +
      + + + diff --git a/src/routes/(console)/organization-[organization]/settings/deleteOrganizationModal.svelte b/src/routes/(console)/organization-[organization]/settings/deleteOrganizationModal.svelte index 9f86c87ed..eeb41f42a 100644 --- a/src/routes/(console)/organization-[organization]/settings/deleteOrganizationModal.svelte +++ b/src/routes/(console)/organization-[organization]/settings/deleteOrganizationModal.svelte @@ -39,7 +39,7 @@ if ($organizationList?.total > 1) { await goto(`${base}/account/organizations`); } else { - await goto(`${base}/onboarding/create-project`); + await goto(`${base}/onboarding/create-organization`); } await invalidate(Dependencies.ACCOUNT); await invalidate(Dependencies.ORGANIZATION); From 098882b2d308fb270997378b11e854ccf4d49aa5 Mon Sep 17 00:00:00 2001 From: Darshan Date: Wed, 28 May 2025 17:32:42 +0530 Subject: [PATCH 82/82] address comment: abstract region filtering for selection options. --- src/lib/helpers/regions.ts | 27 +++++++++++ src/lib/layout/createProject.svelte | 22 +-------- .../(migration-wizard)/wizard.svelte | 47 +++++-------------- .../(public)/template-[template]/+page.svelte | 23 +-------- 4 files changed, 44 insertions(+), 75 deletions(-) create mode 100644 src/lib/helpers/regions.ts diff --git a/src/lib/helpers/regions.ts b/src/lib/helpers/regions.ts new file mode 100644 index 000000000..9f04f3fda --- /dev/null +++ b/src/lib/helpers/regions.ts @@ -0,0 +1,27 @@ +import { getFlagUrl } from '$lib/helpers/flag'; +import type { Models } from '@appwrite.io/console'; + +type RegionOption = { + label: string; + value: string; + disabled: boolean; + leadingHtml: string; +}; + +export function filterRegions(regions: Models.ConsoleRegion[]): RegionOption[] { + if (!regions.length) return []; + + return regions + .filter((region) => region.$id !== 'default') + .sort((a, b) => { + if (a.disabled && !b.disabled) return 1; + if (!a.disabled && b.disabled) return -1; + return a.name.localeCompare(b.name); + }) + .map((region) => ({ + label: region.name, + value: region.$id, + disabled: region.disabled || !region.available, + leadingHtml: `Region flag` + })); +} diff --git a/src/lib/layout/createProject.svelte b/src/lib/layout/createProject.svelte index 5c206297e..7d368dde0 100644 --- a/src/lib/layout/createProject.svelte +++ b/src/lib/layout/createProject.svelte @@ -5,6 +5,7 @@ import { getFlagUrl } from '$lib/helpers/flag'; import { isCloud } from '$lib/system.js'; import type { Models } from '@appwrite.io/console'; + import { filterRegions } from '$lib/helpers/regions'; export let projectName: string; export let id: string; @@ -13,25 +14,6 @@ export let showTitle = true; let showCustomId = false; - - function getRegions() { - return regions - .filter((region) => region.$id !== 'default') - .sort((regionA, regionB) => { - if (regionA.disabled && !regionB.disabled) { - return 1; - } - return regionA.name > regionB.name ? 1 : -1; - }) - .map((region) => { - return { - label: region.name, - value: region.$id, - leadingHtml: `Region flag`, - disabled: region.disabled || !region.available - }; - }); - } @@ -69,7 +51,7 @@ Region cannot be changed after creation
      diff --git a/src/routes/(console)/(migration-wizard)/wizard.svelte b/src/routes/(console)/(migration-wizard)/wizard.svelte index 5c1980058..99c23b7d2 100644 --- a/src/routes/(console)/(migration-wizard)/wizard.svelte +++ b/src/routes/(console)/(migration-wizard)/wizard.svelte @@ -21,9 +21,8 @@ } from '@appwrite.io/pink-svelte'; import { isCloud } from '$lib/system'; import { regions } from '$lib/stores/organization'; - import { getFlagUrl } from '$lib/helpers/flag'; import { addNotification } from '$lib/stores/notifications'; - import { goto, invalidate, invalidateAll } from '$app/navigation'; + import { goto, invalidate } from '$app/navigation'; import { base } from '$app/paths'; import { migrationFormToResources } from '$lib/stores/migration'; import { EyebrowHeading } from '$lib/components'; @@ -32,10 +31,10 @@ IconCog, IconCurrencyDollar, IconExclamation, - IconGithub, IconTrendingUp } from '@appwrite.io/pink-icons-svelte'; import { Dependencies } from '$lib/constants'; + import { filterRegions } from '$lib/helpers/regions'; const onExit = () => { formData.reset(); @@ -79,11 +78,7 @@ } function getProjectName(): string { - return isExisting ? getSelectedProject().name : newProjName || 'Appwrite project'; - } - - function getSelectedProject() { - return projects.find((project) => project.$id === $selectedProject); + return isExisting ? currentSelectedProject.name : newProjName || 'Appwrite project'; } async function createNewProject() { @@ -108,25 +103,6 @@ } } - function getRegions() { - return $regions.regions - .filter((region) => region.$id !== 'default') - .sort((regionA, regionB) => { - if (regionA.disabled && !regionB.disabled) { - return 1; - } - return regionA.name > regionB.name ? 1 : -1; - }) - .map((region) => { - return { - label: region.name, - value: region.$id, - leadingHtml: `Region flag`, - disabled: region.disabled || !region.available - }; - }); - } - const onFinish = async () => { if ($provider.provider !== 'appwrite') return; @@ -141,16 +117,15 @@ $provider.apiKey ); - const project = getSelectedProject(); - addNotification({ type: 'success', message: 'Migration started' }); - onExit(); await invalidate(Dependencies.PROJECTS); - await goto(`${base}/project-${project.region}-${project.$id}/settings/migrations`); + await goto( + `${base}/project-${currentSelectedProject.region}-${currentSelectedProject.$id}/settings/migrations` + ); } catch (error) { addNotification({ type: 'error', @@ -163,11 +138,15 @@ $: getProjects(selectedOrg); + $: currentSelectedProject = projects.find((project) => project.$id === $selectedProject); + $: isExisting = projectType === 'existing'; $: if (isExisting && $selectedProject) { - const project = getSelectedProject(); - projectSdkInstance = sdk.forProject(project.region, project.$id); + projectSdkInstance = sdk.forProject( + currentSelectedProject.region, + currentSelectedProject.$id + ); } $: disableNextButton = isExisting @@ -258,7 +237,7 @@ >([]); let id = $state(); - function getRegions() { - return regions - .filter((region) => region.$id !== 'default') - .sort((regionA, regionB) => { - if (regionA.disabled && !regionB.disabled) { - return 1; - } - return regionA.name > regionB.name ? 1 : -1; - }) - .map((region) => { - return { - label: region.name, - value: region.$id, - leadingHtml: `Region flag`, - disabled: region.disabled - }; - }); - } - function isSiteTemplate( template: Models.TemplateFunction | Models.TemplateSite, product: 'site' | 'function' @@ -243,7 +224,7 @@ required bind:value={region} placeholder="Select a region" - options={getRegions()} + options={filterRegions(regions)} label="Region" /> Region cannot be changed after creation