diff --git a/package.json b/package.json index eed7f20d2e..8bc90b0365 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@525e5be8", + "@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@5b4a114", + "@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 20a5fa8cc8..916463ebe3 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@525e5be8 - version: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@525e5be8(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@5b4a114 - version: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@5b4a114(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 @@ -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@525e5be8': - resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@525e5be8} + '@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@5b4a1145c63dc090d1372311bc02d6c78911fb54': - resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@5b4a1145c63dc090d1372311bc02d6c78911fb54} + '@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@5b4a114': - resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@5b4a114} + '@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@525e5be8(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@5b4a1145c63dc090d1372311bc02d6c78911fb54(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@5b4a114(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@5b4a1145c63dc090d1372311bc02d6c78911fb54(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) @@ -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 ac23279147..a8ff2f4ec8 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} -
  • - -
  • -
+ + + + + + + + -
    {#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} - + {@const storageSize = report?.size >= 0 ? `${report?.size.toFixed(2)}MB` : undefined} + + + +
    + + Import all buckets + {#if $provider.provider !== 'firebase' && report?.bucket} + {report.bucket} {/if} - {/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 a3eb6a45b9..a2ee7a1d61 100644 --- a/src/routes/(console)/project-[project]/settings/migrations/+page.svelte +++ b/src/routes/(console)/project-[project]/settings/migrations/+page.svelte @@ -31,21 +31,9 @@ import { Click, trackEvent } from '$lib/actions/analytics'; export let data; - let migration: Models.Migration = null; 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'; - }; + let migration: Models.Migration = null; onMount(async () => { sdk.forConsole.client.subscribe(['project', 'console'], (response) => { @@ -133,6 +121,25 @@ showMigration = true; migration = m; } + + function getTypedStatus(entry: Models.Migration) { + // migration > pending, processing, failed, completed + // status component = waiting, ready, processing, pending, failed, complete + switch (entry.status) { + case 'completed': + return 'complete'; + case 'processing': + return 'processing'; + case 'failed': + return 'failed'; + case 'pending': + return 'pending'; + default: + return 'waiting'; + } + } + + $: console.log(JSON.stringify(data.migrations, null, 2)); @@ -161,7 +168,6 @@ {#each data.migrations as entry} - {@const status = getStatus(entry.status)} {isSameDay(new Date(), new Date(entry.$createdAt)) ? 'Today' @@ -169,6 +175,7 @@ {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 1219e29637..4812d05dd3 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 ff6539a7cf..b02c59a5bb 100644 --- a/src/routes/(console)/project-[project]/settings/migrations/exportModal.svelte +++ b/src/routes/(console)/project-[project]/settings/migrations/exportModal.svelte @@ -1,14 +1,17 @@ - + 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(); - }} /> + 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 + + +