From a3e5f7ba128179732a97a3d205e921f64c1aedfe Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Tue, 19 Dec 2023 11:29:53 +0000 Subject: [PATCH 001/479] feat: add sessions scope --- src/lib/constants.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/lib/constants.ts b/src/lib/constants.ts index a2107d03c..377df669d 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -60,6 +60,11 @@ export const scopes: { description: "Access to create, update, and delete your project's users", category: 'Auth' }, + { + scope: 'sessions', + description: "Access to create and read your project's user sessions", + category: 'Auth' + }, { scope: 'teams.read', description: "Access to read your project's teams", From 40ae318dd4bc31d47bb0ba9cbe1ff3c63a5d3a2d Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Tue, 19 Dec 2023 14:02:09 +0000 Subject: [PATCH 002/479] feat: account scope --- src/lib/constants.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 377df669d..0a4d5372d 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -62,7 +62,12 @@ export const scopes: { }, { scope: 'sessions', - description: "Access to create and read your project's user sessions", + description: "Access to create sessions as one of your project's users", + category: 'Auth' + }, + { + scope: 'account', + description: "Access to perform actions as one of your project's users", category: 'Auth' }, { From 76d64cddc04ebf25ba033e211698ecba6ff09347 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 16 Oct 2023 15:02:20 -0700 Subject: [PATCH 003/479] Add messaging to navigation --- src/lib/layout/navigation.svelte | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/lib/layout/navigation.svelte b/src/lib/layout/navigation.svelte index 8d5eb201d..d0797059b 100644 --- a/src/lib/layout/navigation.svelte +++ b/src/lib/layout/navigation.svelte @@ -123,6 +123,23 @@ Functions +
  • + trackEvent('click_menu_messaging')} + href={`${projectPath}/messaging`} + use:tooltip={{ + content: 'Messaging', + placement: 'right', + disabled: !narrow + }}> + +
  • Date: Tue, 17 Oct 2023 17:16:39 -0700 Subject: [PATCH 004/479] Add new messaging provider icons --- static/icons/dark/color/firebase.svg | 6 ++++++ static/icons/dark/color/mailgun.svg | 3 +++ static/icons/dark/color/mqtt.svg | 3 +++ static/icons/dark/color/msg91.svg | 4 ++++ static/icons/dark/color/sendgrid.svg | 18 ++++++++++++++++++ static/icons/dark/color/telesign.svg | 5 +++++ static/icons/dark/color/textmagic.svg | 7 +++++++ static/icons/dark/color/twilio.svg | 3 +++ static/icons/dark/color/vonage.svg | 4 ++++ static/icons/dark/grayscale/firebase.svg | 3 +++ static/icons/dark/grayscale/mailgun.svg | 3 +++ static/icons/dark/grayscale/mqtt.svg | 3 +++ static/icons/dark/grayscale/msg91.svg | 3 +++ static/icons/dark/grayscale/sendgrid.svg | 18 ++++++++++++++++++ static/icons/dark/grayscale/telesign.svg | 5 +++++ static/icons/dark/grayscale/textmagic.svg | 3 +++ static/icons/dark/grayscale/twilio.svg | 3 +++ static/icons/dark/grayscale/vonage.svg | 4 ++++ static/icons/light/color/firebase.svg | 6 ++++++ static/icons/light/color/mailgun.svg | 3 +++ static/icons/light/color/mqtt.svg | 3 +++ static/icons/light/color/msg91.svg | 4 ++++ static/icons/light/color/sendgrid.svg | 18 ++++++++++++++++++ static/icons/light/color/telesign.svg | 5 +++++ static/icons/light/color/textmagic.svg | 7 +++++++ static/icons/light/color/twilio.svg | 3 +++ static/icons/light/color/vonage.svg | 4 ++++ static/icons/light/grayscale/firebase.svg | 3 +++ static/icons/light/grayscale/mailgun.svg | 3 +++ static/icons/light/grayscale/mqtt.svg | 3 +++ static/icons/light/grayscale/msg91.svg | 3 +++ static/icons/light/grayscale/sendgrid.svg | 18 ++++++++++++++++++ static/icons/light/grayscale/telesign.svg | 5 +++++ static/icons/light/grayscale/textmagic.svg | 3 +++ static/icons/light/grayscale/twilio.svg | 3 +++ static/icons/light/grayscale/vonage.svg | 4 ++++ 36 files changed, 196 insertions(+) create mode 100644 static/icons/dark/color/firebase.svg create mode 100644 static/icons/dark/color/mailgun.svg create mode 100644 static/icons/dark/color/mqtt.svg create mode 100644 static/icons/dark/color/msg91.svg create mode 100644 static/icons/dark/color/sendgrid.svg create mode 100644 static/icons/dark/color/telesign.svg create mode 100644 static/icons/dark/color/textmagic.svg create mode 100644 static/icons/dark/color/twilio.svg create mode 100644 static/icons/dark/color/vonage.svg create mode 100644 static/icons/dark/grayscale/firebase.svg create mode 100644 static/icons/dark/grayscale/mailgun.svg create mode 100644 static/icons/dark/grayscale/mqtt.svg create mode 100644 static/icons/dark/grayscale/msg91.svg create mode 100644 static/icons/dark/grayscale/sendgrid.svg create mode 100644 static/icons/dark/grayscale/telesign.svg create mode 100644 static/icons/dark/grayscale/textmagic.svg create mode 100644 static/icons/dark/grayscale/twilio.svg create mode 100644 static/icons/dark/grayscale/vonage.svg create mode 100644 static/icons/light/color/firebase.svg create mode 100644 static/icons/light/color/mailgun.svg create mode 100644 static/icons/light/color/mqtt.svg create mode 100644 static/icons/light/color/msg91.svg create mode 100644 static/icons/light/color/sendgrid.svg create mode 100644 static/icons/light/color/telesign.svg create mode 100644 static/icons/light/color/textmagic.svg create mode 100644 static/icons/light/color/twilio.svg create mode 100644 static/icons/light/color/vonage.svg create mode 100644 static/icons/light/grayscale/firebase.svg create mode 100644 static/icons/light/grayscale/mailgun.svg create mode 100644 static/icons/light/grayscale/mqtt.svg create mode 100644 static/icons/light/grayscale/msg91.svg create mode 100644 static/icons/light/grayscale/sendgrid.svg create mode 100644 static/icons/light/grayscale/telesign.svg create mode 100644 static/icons/light/grayscale/textmagic.svg create mode 100644 static/icons/light/grayscale/twilio.svg create mode 100644 static/icons/light/grayscale/vonage.svg diff --git a/static/icons/dark/color/firebase.svg b/static/icons/dark/color/firebase.svg new file mode 100644 index 000000000..2016d2483 --- /dev/null +++ b/static/icons/dark/color/firebase.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/static/icons/dark/color/mailgun.svg b/static/icons/dark/color/mailgun.svg new file mode 100644 index 000000000..eb456be0a --- /dev/null +++ b/static/icons/dark/color/mailgun.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/dark/color/mqtt.svg b/static/icons/dark/color/mqtt.svg new file mode 100644 index 000000000..0d966304c --- /dev/null +++ b/static/icons/dark/color/mqtt.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/dark/color/msg91.svg b/static/icons/dark/color/msg91.svg new file mode 100644 index 000000000..8e1743219 --- /dev/null +++ b/static/icons/dark/color/msg91.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/icons/dark/color/sendgrid.svg b/static/icons/dark/color/sendgrid.svg new file mode 100644 index 000000000..ea185b767 --- /dev/null +++ b/static/icons/dark/color/sendgrid.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/icons/dark/color/telesign.svg b/static/icons/dark/color/telesign.svg new file mode 100644 index 000000000..af90bab97 --- /dev/null +++ b/static/icons/dark/color/telesign.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/icons/dark/color/textmagic.svg b/static/icons/dark/color/textmagic.svg new file mode 100644 index 000000000..74def7e81 --- /dev/null +++ b/static/icons/dark/color/textmagic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/static/icons/dark/color/twilio.svg b/static/icons/dark/color/twilio.svg new file mode 100644 index 000000000..866c3aa77 --- /dev/null +++ b/static/icons/dark/color/twilio.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/icons/dark/color/vonage.svg b/static/icons/dark/color/vonage.svg new file mode 100644 index 000000000..76c7c330b --- /dev/null +++ b/static/icons/dark/color/vonage.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/icons/dark/grayscale/firebase.svg b/static/icons/dark/grayscale/firebase.svg new file mode 100644 index 000000000..e1158a544 --- /dev/null +++ b/static/icons/dark/grayscale/firebase.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/icons/dark/grayscale/mailgun.svg b/static/icons/dark/grayscale/mailgun.svg new file mode 100644 index 000000000..7f7b7a5a1 --- /dev/null +++ b/static/icons/dark/grayscale/mailgun.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/dark/grayscale/mqtt.svg b/static/icons/dark/grayscale/mqtt.svg new file mode 100644 index 000000000..d2189eeb4 --- /dev/null +++ b/static/icons/dark/grayscale/mqtt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/icons/dark/grayscale/msg91.svg b/static/icons/dark/grayscale/msg91.svg new file mode 100644 index 000000000..321b9e02d --- /dev/null +++ b/static/icons/dark/grayscale/msg91.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/dark/grayscale/sendgrid.svg b/static/icons/dark/grayscale/sendgrid.svg new file mode 100644 index 000000000..cf1878874 --- /dev/null +++ b/static/icons/dark/grayscale/sendgrid.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/icons/dark/grayscale/telesign.svg b/static/icons/dark/grayscale/telesign.svg new file mode 100644 index 000000000..28816bd3c --- /dev/null +++ b/static/icons/dark/grayscale/telesign.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/icons/dark/grayscale/textmagic.svg b/static/icons/dark/grayscale/textmagic.svg new file mode 100644 index 000000000..1b11720a7 --- /dev/null +++ b/static/icons/dark/grayscale/textmagic.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/dark/grayscale/twilio.svg b/static/icons/dark/grayscale/twilio.svg new file mode 100644 index 000000000..055fcb079 --- /dev/null +++ b/static/icons/dark/grayscale/twilio.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/dark/grayscale/vonage.svg b/static/icons/dark/grayscale/vonage.svg new file mode 100644 index 000000000..4a790fce9 --- /dev/null +++ b/static/icons/dark/grayscale/vonage.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/icons/light/color/firebase.svg b/static/icons/light/color/firebase.svg new file mode 100644 index 000000000..d77c18648 --- /dev/null +++ b/static/icons/light/color/firebase.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/static/icons/light/color/mailgun.svg b/static/icons/light/color/mailgun.svg new file mode 100644 index 000000000..eb456be0a --- /dev/null +++ b/static/icons/light/color/mailgun.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/light/color/mqtt.svg b/static/icons/light/color/mqtt.svg new file mode 100644 index 000000000..f116bda13 --- /dev/null +++ b/static/icons/light/color/mqtt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/icons/light/color/msg91.svg b/static/icons/light/color/msg91.svg new file mode 100644 index 000000000..8b660c473 --- /dev/null +++ b/static/icons/light/color/msg91.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/icons/light/color/sendgrid.svg b/static/icons/light/color/sendgrid.svg new file mode 100644 index 000000000..62fb7378b --- /dev/null +++ b/static/icons/light/color/sendgrid.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/icons/light/color/telesign.svg b/static/icons/light/color/telesign.svg new file mode 100644 index 000000000..86427534d --- /dev/null +++ b/static/icons/light/color/telesign.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/icons/light/color/textmagic.svg b/static/icons/light/color/textmagic.svg new file mode 100644 index 000000000..6bfc246c5 --- /dev/null +++ b/static/icons/light/color/textmagic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/static/icons/light/color/twilio.svg b/static/icons/light/color/twilio.svg new file mode 100644 index 000000000..866c3aa77 --- /dev/null +++ b/static/icons/light/color/twilio.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/icons/light/color/vonage.svg b/static/icons/light/color/vonage.svg new file mode 100644 index 000000000..12a89b738 --- /dev/null +++ b/static/icons/light/color/vonage.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/icons/light/grayscale/firebase.svg b/static/icons/light/grayscale/firebase.svg new file mode 100644 index 000000000..e1158a544 --- /dev/null +++ b/static/icons/light/grayscale/firebase.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/icons/light/grayscale/mailgun.svg b/static/icons/light/grayscale/mailgun.svg new file mode 100644 index 000000000..7f7b7a5a1 --- /dev/null +++ b/static/icons/light/grayscale/mailgun.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/light/grayscale/mqtt.svg b/static/icons/light/grayscale/mqtt.svg new file mode 100644 index 000000000..d2189eeb4 --- /dev/null +++ b/static/icons/light/grayscale/mqtt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/icons/light/grayscale/msg91.svg b/static/icons/light/grayscale/msg91.svg new file mode 100644 index 000000000..321b9e02d --- /dev/null +++ b/static/icons/light/grayscale/msg91.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/light/grayscale/sendgrid.svg b/static/icons/light/grayscale/sendgrid.svg new file mode 100644 index 000000000..189d454d0 --- /dev/null +++ b/static/icons/light/grayscale/sendgrid.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/icons/light/grayscale/telesign.svg b/static/icons/light/grayscale/telesign.svg new file mode 100644 index 000000000..4bd48f242 --- /dev/null +++ b/static/icons/light/grayscale/telesign.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/icons/light/grayscale/textmagic.svg b/static/icons/light/grayscale/textmagic.svg new file mode 100644 index 000000000..cc3ac7245 --- /dev/null +++ b/static/icons/light/grayscale/textmagic.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/light/grayscale/twilio.svg b/static/icons/light/grayscale/twilio.svg new file mode 100644 index 000000000..055fcb079 --- /dev/null +++ b/static/icons/light/grayscale/twilio.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/light/grayscale/vonage.svg b/static/icons/light/grayscale/vonage.svg new file mode 100644 index 000000000..4379fc950 --- /dev/null +++ b/static/icons/light/grayscale/vonage.svg @@ -0,0 +1,4 @@ + + + + From 9f3c3b176f5ded80425e82a2cfe3f30cbd8e3812 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Tue, 28 Nov 2023 20:04:39 -0800 Subject: [PATCH 005/479] Update oauth providers key since it was changed in the backend --- src/lib/stores/oauth-providers.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib/stores/oauth-providers.ts b/src/lib/stores/oauth-providers.ts index c5752e8ac..9e84290f1 100644 --- a/src/lib/stores/oauth-providers.ts +++ b/src/lib/stores/oauth-providers.ts @@ -24,7 +24,9 @@ export type Providers = { const setProviders = (project: Models.Project): Provider[] => { return ( - project?.providers.map((n) => { + // TODO: Remove @ts-expect-error when SDK is updated + // @ts-expect-error SDK needs to be updated + project?.oAuthProviders.map((n) => { const p = n as Models.Provider & { key: string }; let docs: Provider['docs']; let icon: Provider['icon'] = p.key.toLowerCase(); From ade620c9a5b30d12eef8e202e0564f3373e70f37 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Tue, 19 Dec 2023 16:13:47 -0800 Subject: [PATCH 006/479] Temporarily fix undefined billing limit Since the 1.5.x branch hasn't been updated with the billing changes, this change adds a fallback so that the console still functions. --- src/lib/layout/containerHeader.svelte | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/lib/layout/containerHeader.svelte b/src/lib/layout/containerHeader.svelte index 08a7813f1..4c348b81a 100644 --- a/src/lib/layout/containerHeader.svelte +++ b/src/lib/layout/containerHeader.svelte @@ -34,8 +34,15 @@ let showDropdown = false; + // TODO: remove the default billing limits when backend is updated with billing code const { bandwidth, documents, storage, users, executions } = ($organization ?? {}) - .billingLimits; + .billingLimits ?? { + bandwidth: 1, + documents: 1, + storage: 1, + users: 1, + executions: 1 + }; const limitedServices = [ { name: 'bandwidth', value: bandwidth }, { name: 'documents', value: documents }, From a99082e4a5bb431a6d54a109f59a2cd80e50f5ee Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Fri, 20 Oct 2023 11:53:16 -0700 Subject: [PATCH 007/479] Add messaging overview route --- src/lib/commandCenter/commands.ts | 1 + .../messaging/+layout.svelte | 62 +++++ .../project-[project]/messaging/+layout.ts | 10 + .../project-[project]/messaging/+page.svelte | 229 +++++++++++++++++ .../project-[project]/messaging/+page.ts | 72 ++++++ .../messaging/breadcrumbs.svelte | 22 ++ .../project-[project]/messaging/create.svelte | 73 ++++++ .../messaging/failedModal.svelte | 21 ++ .../project-[project]/messaging/header.svelte | 44 ++++ .../messaging/messageStatusPill.svelte | 20 ++ .../messaging/provider.svelte | 96 +++++++ .../messaging/providerType.svelte | 59 +++++ .../project-[project]/messaging/store.ts | 240 ++++++++++++++++++ 13 files changed, 949 insertions(+) create mode 100644 src/routes/console/project-[project]/messaging/+layout.svelte create mode 100644 src/routes/console/project-[project]/messaging/+layout.ts create mode 100644 src/routes/console/project-[project]/messaging/+page.svelte create mode 100644 src/routes/console/project-[project]/messaging/+page.ts create mode 100644 src/routes/console/project-[project]/messaging/breadcrumbs.svelte create mode 100644 src/routes/console/project-[project]/messaging/create.svelte create mode 100644 src/routes/console/project-[project]/messaging/failedModal.svelte create mode 100644 src/routes/console/project-[project]/messaging/header.svelte create mode 100644 src/routes/console/project-[project]/messaging/messageStatusPill.svelte create mode 100644 src/routes/console/project-[project]/messaging/provider.svelte create mode 100644 src/routes/console/project-[project]/messaging/providerType.svelte create mode 100644 src/routes/console/project-[project]/messaging/store.ts diff --git a/src/lib/commandCenter/commands.ts b/src/lib/commandCenter/commands.ts index f12bbe2ed..470a61012 100644 --- a/src/lib/commandCenter/commands.ts +++ b/src/lib/commandCenter/commands.ts @@ -17,6 +17,7 @@ const groups = [ 'platforms', 'databases', 'functions', + 'messaging', 'storage', 'domains', 'webhooks', diff --git a/src/routes/console/project-[project]/messaging/+layout.svelte b/src/routes/console/project-[project]/messaging/+layout.svelte new file mode 100644 index 000000000..2b8b30178 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/+layout.svelte @@ -0,0 +1,62 @@ + + + + Messaging - Appwrite + + + diff --git a/src/routes/console/project-[project]/messaging/+layout.ts b/src/routes/console/project-[project]/messaging/+layout.ts new file mode 100644 index 000000000..7db345058 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/+layout.ts @@ -0,0 +1,10 @@ +import Breadcrumbs from './breadcrumbs.svelte'; +import Header from './header.svelte'; +import type { LayoutLoad } from './$types'; + +export const load: LayoutLoad = async () => { + return { + header: Header, + breadcrumbs: Breadcrumbs + }; +}; diff --git a/src/routes/console/project-[project]/messaging/+page.svelte b/src/routes/console/project-[project]/messaging/+page.svelte new file mode 100644 index 000000000..f2b675613 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/+page.svelte @@ -0,0 +1,229 @@ + + + +
    +
    + Messages +
    + +
    +
    + + +
    + + + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    + + {#if data.messages.total} + + + d.$id)} /> + {#each $columns as column} + {#if column.show} + {column.title} + {/if} + {/each} + + + {#each data.messages.messages as message} + + + + {#each $columns as column (column.id)} + {#if column.show} + {#if column.id === '$id'} + {#key $columns} + + {message.$id} + + {/key} + {:else if column.id === 'message'} + + {#if message.providerType === ProviderTypes.Push} + {message.data.title} + {:else if message.providerType === ProviderTypes.Sms} + {message.data.content} + {:else if message.providerType === ProviderTypes.Email} + {message.data.subject} + {:else} + Invalid provider + {/if} + + {:else if column.id === 'providerType'} + + + + {:else if column.id === 'status'} + + { + e.preventDefault(); + errors = message.deliveryErrors; + showFailed = true; + }} /> + + {:else if column.type === 'datetime'} + + {#if !message[column.id]} + - + {:else} + {toLocaleDateTime(message[column.id])} + {/if} + + {:else} + + {message[column.id]} + + {/if} + {/if} + {/each} + + {/each} + + + + 0}> +
    +
    + {selected.length} +

    + + {selected.length > 1 ? 'messages' : 'message'} + + selected +

    +
    + +
    + + + +
    +
    +
    + + + + {:else if data.search && data.search != 'empty'} + +
    + Sorry, we couldn't find '{data.search}' +

    There are no messages that match your search.

    +
    +
    + + + +
    +
    + {:else} + + ($showCreate = true)} /> + {/if} +
    + + + + + diff --git a/src/routes/console/project-[project]/messaging/+page.ts b/src/routes/console/project-[project]/messaging/+page.ts new file mode 100644 index 000000000..25c1e1cb8 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/+page.ts @@ -0,0 +1,72 @@ +import { + View, + getLimit, + getPage, + getQuery, + getSearch, + getView, + pageToOffset +} from '$lib/helpers/load'; +import { CARD_LIMIT } from '$lib/constants'; +import type { PageLoad } from './$types'; +import { messages as data, providersById } from './store'; +import type { Message } from './store'; +import { Query } from '@appwrite.io/console'; +import { sdk } from '$lib/stores/sdk'; +import { queries, queryParamToMap } from '$lib/components/filters/store'; + +export const load: PageLoad = async ({ url, route }) => { + const page = getPage(url); + const search = getSearch(url); + const view = getView(url, route, View.Grid); + const limit = getLimit(url, route, CARD_LIMIT); + const offset = pageToOffset(page, limit); + const query = getQuery(url); + + const parsedQueries = queryParamToMap(query || '[]'); + queries.set(parsedQueries); + + // TODO: remove when the API is ready with data + // This allows us to mock w/ data and when search returns 0 results + let messages: { messages: Message[]; total: number } = { messages: [], total: 0 }; + if (search === 'demo') { + messages = data; + } else { + const params = { + queries: [ + Query.limit(limit), + Query.offset(offset), + Query.orderDesc(''), + ...parsedQueries.values() + ] + }; + + if (search) { + params['search'] = search; + } + + const response = await sdk.forProject.client.call( + 'GET', + new URL(sdk.forProject.client.config.endpoint + '/messaging/messages'), + { + 'X-Appwrite-Project': sdk.forProject.client.config.project, + 'content-type': 'application/json', + 'X-Appwrite-Mode': 'admin' + }, + params + ); + + messages = response; + } + + return { + offset, + limit, + search, + query, + page, + view, + messages, + providersById + }; +}; diff --git a/src/routes/console/project-[project]/messaging/breadcrumbs.svelte b/src/routes/console/project-[project]/messaging/breadcrumbs.svelte new file mode 100644 index 000000000..9e28bee67 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/breadcrumbs.svelte @@ -0,0 +1,22 @@ + + + diff --git a/src/routes/console/project-[project]/messaging/create.svelte b/src/routes/console/project-[project]/messaging/create.svelte new file mode 100644 index 000000000..49a81af91 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/create.svelte @@ -0,0 +1,73 @@ + + + + + + + {#if !showCustomId} +
    + (showCustomId = !showCustomId)}> + +
    + {:else} + + {/if} +
    + + + + +
    diff --git a/src/routes/console/project-[project]/messaging/failedModal.svelte b/src/routes/console/project-[project]/messaging/failedModal.svelte new file mode 100644 index 000000000..6ee183ffd --- /dev/null +++ b/src/routes/console/project-[project]/messaging/failedModal.svelte @@ -0,0 +1,21 @@ + + + +
    +

    Some messages failed to send.

    +
    + +
    +
    + + + + +
    diff --git a/src/routes/console/project-[project]/messaging/header.svelte b/src/routes/console/project-[project]/messaging/header.svelte new file mode 100644 index 000000000..9534915ab --- /dev/null +++ b/src/routes/console/project-[project]/messaging/header.svelte @@ -0,0 +1,44 @@ + + + + + Messaging + + + {#each tabs as tab} + + {tab.title} + + {/each} + + diff --git a/src/routes/console/project-[project]/messaging/messageStatusPill.svelte b/src/routes/console/project-[project]/messaging/messageStatusPill.svelte new file mode 100644 index 000000000..46b309abc --- /dev/null +++ b/src/routes/console/project-[project]/messaging/messageStatusPill.svelte @@ -0,0 +1,20 @@ + + + + {#if status === 'sent'} + + {:else if status === 'scheduled'} + + {/if} + + {status} + + diff --git a/src/routes/console/project-[project]/messaging/provider.svelte b/src/routes/console/project-[project]/messaging/provider.svelte new file mode 100644 index 000000000..5e2da923a --- /dev/null +++ b/src/routes/console/project-[project]/messaging/provider.svelte @@ -0,0 +1,96 @@ + + + + +{#if icon === ''} + Invalid provider +{:else} +
    + {#if !noIcon} +
    + {displayName} +
    + {/if} + + {displayName} + +
    +{/if} diff --git a/src/routes/console/project-[project]/messaging/providerType.svelte b/src/routes/console/project-[project]/messaging/providerType.svelte new file mode 100644 index 000000000..b7db1514f --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providerType.svelte @@ -0,0 +1,59 @@ + + + + +{#if text === ''} + Invalid provider type +{:else} +
    + {#if !noIcon} +
    +
    + {/if} + + {text} + +
    +{/if} diff --git a/src/routes/console/project-[project]/messaging/store.ts b/src/routes/console/project-[project]/messaging/store.ts new file mode 100644 index 000000000..6a08966c0 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/store.ts @@ -0,0 +1,240 @@ +import type { Column } from '$lib/helpers/types'; +import { Providers } from './provider.svelte'; +import { ProviderTypes } from './providerType.svelte'; +import { writable } from 'svelte/store'; + +export const showCreate = writable(false); + +export const columns = writable([ + { id: '$id', title: 'Message ID', type: 'string', show: true, width: 140 }, + { id: 'description', title: 'Description', type: 'string', show: true, width: 140 }, + { id: 'message', title: 'Message', type: 'string', show: false, width: 140 }, + { id: 'providerType', title: 'Type', type: 'string', show: true, width: 100 }, + { id: 'status', title: 'Status', type: 'string', show: true, width: 120 }, + { id: 'scheduledAt', title: 'Scheduled at', type: 'datetime', show: true, width: 120 }, + { id: 'deliveredAt', title: 'Delivered at', type: 'datetime', show: false, width: 120 } +]); + +// TODO: remove this when the SDK and API are ready +export type Message = { + $id: string; + $createdAt: string; + $updatedAt: string; + topics: string[]; + users: string[]; + targets: string[]; + scheduledAt: string; + deliveredAt: string; + deliveryErrors: string[]; + deliveredTo: number; + status: string; + providerType: ProviderTypes; + description: string; + data: { + content?: string; + body?: string; + subject?: string; + title?: string; + }; +}; + +// TODO: remove this when the SDK and API are ready +export const messages: { messages: Message[]; total: number } = { + messages: [ + { + $id: '637a40ba7a703e3936e1', + $createdAt: '2021-08-31T12:00:00.000Z', + $updatedAt: '2021-08-31T12:00:00.000Z', + description: 'Welcome', + providerType: ProviderTypes.Push, + topics: [], + users: ['user-1', 'user-2'], + targets: [], + scheduledAt: '2021-03-01T00:00:00.000Z', + deliveredAt: '2021-03-01T00:00:00.000Z', + deliveryErrors: [], + deliveredTo: 2, + status: 'sent', + data: { + title: 'Welcome to the Cloud', + body: 'Detailed body' + } + }, + { + $id: '637a40ba7a703e3936e2', + $createdAt: '2021-08-31T12:00:00.000Z', + $updatedAt: '2021-08-31T12:00:00.000Z', + description: 'Public beta announcement', + providerType: ProviderTypes.Sms, + topics: [], + users: ['user-1', 'user-2'], + targets: [], + scheduledAt: '2021-03-01T00:00:00.000Z', + deliveredAt: '2021-03-01T00:00:00.000Z', + deliveryErrors: [], + deliveredTo: 2, + status: 'scheduled', + data: { + content: 'Cloud is live on public beta' + } + }, + { + $id: '637a40ba7a703e3936e3', + $createdAt: '2021-08-31T12:00:00.000Z', + $updatedAt: '2021-08-31T12:00:00.000Z', + description: 'Welcome', + providerType: ProviderTypes.Email, + topics: [], + users: ['user-1', 'user-2'], + targets: [], + scheduledAt: '', + deliveredAt: '', + deliveryErrors: [], + deliveredTo: 2, + status: 'draft', + data: { + subject: 'Welcome to the Cloud', + content: 'Detailed content' + } + } + ], + total: 3 +}; + +// TODO: remove this when the SDK and API are ready +export type Provider = { + $id: string; + $createdAt: string; + $updatedAt: string; + name: string; + provider: Providers; + default: boolean; + enabled: boolean; + type: ProviderTypes; + credentials: object; + options: object; +}; + +// TODO: remove this when the SDK and API are ready +export const providersById: { [providerId: string]: Provider } = { + '637a40ba7a703e3936e1': { + $id: '637a40ba7a703e3936e1', + $createdAt: '2021-08-31T12:00:00.000Z', + $updatedAt: '2021-08-31T12:00:00.000Z', + name: 'My Firebase', + provider: Providers.FCM, + type: ProviderTypes.Push, + default: false, + enabled: true, + credentials: {}, + options: {} + }, + '637a40ba7a703e3936e2': { + $id: '637a40ba7a703e3936e2', + $createdAt: '2021-08-31T12:00:00.000Z', + $updatedAt: '2021-08-31T12:00:00.000Z', + name: 'My APNS', + provider: Providers.APNS, + type: ProviderTypes.Push, + default: false, + enabled: false, + credentials: {}, + options: {} + }, + '637a40ba7a703e3936e3': { + $id: '637a40ba7a703e3936e3', + $createdAt: '2021-08-31T12:00:00.000Z', + $updatedAt: '2021-08-31T12:00:00.000Z', + name: 'My MQTT', + provider: Providers.MQTT, + type: ProviderTypes.Push, + default: false, + enabled: false, + credentials: {}, + options: {} + }, + '637a40ba7a703e3936e4': { + $id: '637a40ba7a703e3936e4', + $createdAt: '2021-08-31T12:00:00.000Z', + $updatedAt: '2021-08-31T12:00:00.000Z', + name: 'My Sendgrid', + provider: Providers.Sendgrid, + type: ProviderTypes.Email, + default: false, + enabled: false, + credentials: {}, + options: {} + }, + '637a40ba7a703e3936e5': { + $id: '637a40ba7a703e3936e5', + $createdAt: '2021-08-31T12:00:00.000Z', + $updatedAt: '2021-08-31T12:00:00.000Z', + name: 'My Mailgun', + provider: Providers.Mailgun, + type: ProviderTypes.Email, + default: false, + enabled: false, + credentials: {}, + options: {} + }, + '637a40ba7a703e3936e6': { + $id: '637a40ba7a703e3936e6', + $createdAt: '2021-08-31T12:00:00.000Z', + $updatedAt: '2021-08-31T12:00:00.000Z', + name: 'My Telesign', + provider: Providers.Telesign, + type: ProviderTypes.Sms, + default: false, + enabled: false, + credentials: {}, + options: {} + }, + '637a40ba7a703e3936e7': { + $id: '637a40ba7a703e3936e7', + $createdAt: '2021-08-31T12:00:00.000Z', + $updatedAt: '2021-08-31T12:00:00.000Z', + name: 'My Msg91', + provider: Providers.Msg91, + type: ProviderTypes.Sms, + default: false, + enabled: false, + credentials: {}, + options: {} + }, + '637a40ba7a703e3936e8': { + $id: '637a40ba7a703e3936e8', + $createdAt: '2021-08-31T12:00:00.000Z', + $updatedAt: '2021-08-31T12:00:00.000Z', + name: 'My Textmagic', + provider: Providers.Textmagic, + type: ProviderTypes.Sms, + default: false, + enabled: false, + credentials: {}, + options: {} + }, + '637a40ba7a703e3936e9': { + $id: '637a40ba7a703e3936e9', + $createdAt: '2021-08-31T12:00:00.000Z', + $updatedAt: '2021-08-31T12:00:00.000Z', + name: 'My Vonage', + provider: Providers.Vonage, + type: ProviderTypes.Sms, + default: false, + enabled: false, + credentials: {}, + options: {} + }, + '637a40ba7a703e3936f0': { + $id: '637a40ba7a703e3936f0', + $createdAt: '2021-08-31T12:00:00.000Z', + $updatedAt: '2021-08-31T12:00:00.000Z', + name: 'My Twilio', + provider: Providers.Twilio, + type: ProviderTypes.Sms, + default: false, + enabled: false, + credentials: {}, + options: {} + } +}; From 7532b8e36f52ea3f39b1954ffed747eadca9a996 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 20 Nov 2023 13:51:23 -0800 Subject: [PATCH 008/479] Update input elments to support popovers --- src/lib/components/drop.svelte | 7 ++++++- src/lib/elements/forms/inputDomain.svelte | 23 +++++++++++++++++++++- src/lib/elements/forms/inputEmail.svelte | 23 +++++++++++++++++++++- src/lib/elements/forms/inputFile.svelte | 24 +++++++++++++++++++++-- src/lib/elements/forms/inputText.svelte | 23 +++++++++++++++++++++- 5 files changed, 94 insertions(+), 6 deletions(-) diff --git a/src/lib/components/drop.svelte b/src/lib/components/drop.svelte index d6c899df2..f61ff6a24 100644 --- a/src/lib/components/drop.svelte +++ b/src/lib/components/drop.svelte @@ -13,6 +13,7 @@ export let noStyle = false; export let fullWidth = false; export let fixed = false; + export let display = 'block'; const dispatch = createEventDispatcher<{ blur: undefined; @@ -100,7 +101,11 @@ -
    +
    diff --git a/src/lib/elements/forms/inputDomain.svelte b/src/lib/elements/forms/inputDomain.svelte index 58f066199..5445b2ccb 100644 --- a/src/lib/elements/forms/inputDomain.svelte +++ b/src/lib/elements/forms/inputDomain.svelte @@ -1,6 +1,7 @@ + + +
    +
    + Providers +
    + +
    +
    + + +
    + + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    + {#if data.providers.total} + + + d.$id)} /> + {#each $columns as column} + {#if column.show} + {column.title} + {/if} + {/each} + + + {#each data.providers.providers as provider (provider.$id)} + + + {#each $columns as column} + {#if column.show} + {#if column.id === '$id'} + {#key $columns} + + {provider.$id} + + {/key} + {:else if column.id === 'provider'} + + + + {:else if column.id === 'type'} + + + + {:else if column.id === 'enabled'} + + + {#if provider.enabled} + + {/if} + + {provider.enabled ? 'enabled' : 'disabled'} + + + + {:else} + + {provider[column.id]} + + {/if} + {/if} + {/each} + + {/each} + + + + + {:else if data.search} + +
    + Sorry, we couldn't find '{data.search}' +

    There are no providers that match your search.

    +
    + +
    + {:else} + + + {/if} +
    + + diff --git a/src/routes/console/project-[project]/messaging/providers/+page.ts b/src/routes/console/project-[project]/messaging/providers/+page.ts new file mode 100644 index 000000000..ac98e7a7c --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/+page.ts @@ -0,0 +1,75 @@ +import { Query } from '@appwrite.io/console'; +import { sdk } from '$lib/stores/sdk'; +import { + View, + getLimit, + getPage, + getQuery, + getSearch, + getView, + pageToOffset +} from '$lib/helpers/load'; +import { PAGE_LIMIT } from '$lib/constants'; +import { providersById, type Provider } from '../store'; +import { queries, queryParamToMap } from '$lib/components/filters/store'; + +const providers = Object.values(providersById); + +let data: { providers: Provider[]; total: number } = { + providers: [...providers], + total: providers.length +}; + +export const load = async ({ url, route }) => { + const page = getPage(url); + const search = getSearch(url); + const view = getView(url, route, View.Grid); + const limit = getLimit(url, route, PAGE_LIMIT); + const offset = pageToOffset(page, limit); + const query = getQuery(url); + + const parsedQueries = queryParamToMap(query || '[]'); + queries.set(parsedQueries); + + // TODO: get rid of demo data + let providers: { providers: Provider[]; total: number } = { providers: [], total: 0 }; + if (search == 'demo') { + providers = data; + } else { + const params = { + queries: [ + Query.limit(limit), + Query.offset(offset), + Query.orderDesc(''), + ...parsedQueries.values() + ] + }; + + if (search) { + params['search'] = search; + } + + const response = await sdk.forProject.client.call( + 'GET', + new URL(sdk.forProject.client.config.endpoint + '/messaging/providers'), + { + 'X-Appwrite-Project': sdk.forProject.client.config.project, + 'content-type': 'application/json', + 'X-Appwrite-Mode': 'admin' + }, + params + ); + + providers = response; + } + + return { + offset, + limit, + search, + query, + page, + view, + providers: providers + }; +}; diff --git a/src/routes/console/project-[project]/messaging/providers/create.svelte b/src/routes/console/project-[project]/messaging/providers/create.svelte new file mode 100644 index 000000000..65528f2c0 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/create.svelte @@ -0,0 +1,68 @@ + + + + + + {#if !showCustomId} +
    + (showCustomId = !showCustomId)} + > +
    + {:else} + + {/if} +
    + + + + +
    diff --git a/src/routes/console/project-[project]/messaging/providers/store.ts b/src/routes/console/project-[project]/messaging/providers/store.ts new file mode 100644 index 000000000..290483e9e --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/store.ts @@ -0,0 +1,12 @@ +import { writable } from 'svelte/store'; +import type { Column } from '$lib/helpers/types'; + +export let showCreate = writable(false); + +export const columns = writable([ + { id: '$id', title: 'Provider ID', type: 'string', show: true }, + { id: 'name', title: 'Name', type: 'string', show: true }, + { id: 'provider', title: 'Provider', type: 'string', show: true }, + { id: 'type', title: 'Type', type: 'string', show: true }, + { id: 'enabled', title: 'Status', type: 'boolean', show: true } +]); From 16cc91893a16255ae2b6f37d03a044f88a324573 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Wed, 25 Oct 2023 17:00:47 -0700 Subject: [PATCH 010/479] Add wizard for creating provider --- src/lib/actions/analytics.ts | 5 +- src/lib/components/labelCard.svelte | 10 + .../messaging/providers/+page.svelte | 59 +-- .../messaging/providers/+page.ts | 2 +- .../messaging/providers/create.svelte | 316 ++++++++++++--- .../providers/createProviderDropdown.svelte | 49 +++ .../messaging/providers/store.ts | 369 ++++++++++++++++++ .../providers/wizard/configure.svelte | 133 +++++++ .../providers/wizard/provider.svelte | 161 ++++++++ .../messaging/providers/wizard/store.ts | 103 +++++ static/images/apns-bundle-id.png | Bin 0 -> 42772 bytes 11 files changed, 1128 insertions(+), 79 deletions(-) create mode 100644 src/routes/console/project-[project]/messaging/providers/createProviderDropdown.svelte create mode 100644 src/routes/console/project-[project]/messaging/providers/wizard/configure.svelte create mode 100644 src/routes/console/project-[project]/messaging/providers/wizard/provider.svelte create mode 100644 src/routes/console/project-[project]/messaging/providers/wizard/store.ts create mode 100644 static/images/apns-bundle-id.png diff --git a/src/lib/actions/analytics.ts b/src/lib/actions/analytics.ts index 8a15993fc..2b7145796 100644 --- a/src/lib/actions/analytics.ts +++ b/src/lib/actions/analytics.ts @@ -287,5 +287,8 @@ export enum Submit { SmsResetTemplate = 'submit_sms_reset_template', SmsUpdateInviteTemplate = 'submit_sms_update_invite_template', SmsUpdateLoginTemplate = 'submit_sms_update_login_template', - SmsUpdateVerificationTemplate = 'submit_sms_update_verification_template' + SmsUpdateVerificationTemplate = 'submit_sms_update_verification_template', + MessagingProviderCreate = 'submit_messaging_provider_create', + MessagingProviderDelete = 'submit_messaging_provider_delete', + MessagingProviderUpdate = 'submit_messaging_provider_update' } diff --git a/src/lib/components/labelCard.svelte b/src/lib/components/labelCard.svelte index 9d30f9b0c..461e5a53f 100644 --- a/src/lib/components/labelCard.svelte +++ b/src/lib/components/labelCard.svelte @@ -1,5 +1,7 @@ @@ -47,10 +46,7 @@
    Providers
    - +
    @@ -63,10 +59,7 @@ hideView allowNoColumns showColsTextMobile /> - +
    {#if data.providers.total} - - - d.$id)} /> - {#each $columns as column} - {#if column.show} - {column.title} - {/if} - {/each} - - - {#each data.providers.providers as provider (provider.$id)} - - - {#each $columns as column} - {#if column.show} - {#if column.id === '$id'} - {#key $columns} - - {provider.$id} - - {/key} - {:else if column.id === 'provider'} - - - - {:else if column.id === 'type'} - - - - {:else if column.id === 'enabled'} - - - {#if provider.enabled} - - {/if} - - {provider.enabled ? 'enabled' : 'disabled'} - - - - {:else} - - {provider[column.id]} - - {/if} - {/if} - {/each} - - {/each} - - + { +export const load = async ({ depends, url, route }) => { + depends(Dependencies.MESSAGING_PROVIDERS); + const page = getPage(url); const search = getSearch(url); const view = getView(url, route, View.Grid); diff --git a/src/routes/console/project-[project]/messaging/providers/table.svelte b/src/routes/console/project-[project]/messaging/providers/table.svelte new file mode 100644 index 000000000..2921c40ec --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/table.svelte @@ -0,0 +1,170 @@ + + + + + d.$id)} /> + {#each $columns as column} + {#if column.show} + {column.title} + {/if} + {/each} + + + {#each data.providers.providers as provider (provider.$id)} + + + {#each $columns as column} + {#if column.show} + {#if column.id === '$id'} + {#key $columns} + + {provider.$id} + + {/key} + {:else if column.id === 'provider'} + + + + {:else if column.id === 'type'} + + + + {:else if column.id === 'enabled'} + + + {#if provider.enabled} + + {/if} + + {provider.enabled ? 'enabled' : 'disabled'} + + + + {:else} + + {provider[column.id]} + + {/if} + {/if} + {/each} + + {/each} + + + + 0}> +
    +
    + {selectedIds.length} +

    + + {selectedIds.length > 1 ? 'providers' : 'provider'} + + selected +

    +
    + +
    + + +
    +
    +
    + + +

    + Are you sure you want to delete {selectedIds.length} + {selectedIds.length > 1 ? 'providers' : 'provider'}? +

    + + + + +
    From 37a5d11bdaf2721671bc040434318e3304c3be50 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Tue, 28 Nov 2023 08:44:12 -0800 Subject: [PATCH 014/479] Update InputCheckbox to properly show label and description --- src/lib/elements/forms/inputCheckbox.svelte | 46 ++++++++++----------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/src/lib/elements/forms/inputCheckbox.svelte b/src/lib/elements/forms/inputCheckbox.svelte index 4aaf52c6b..0493d3f0b 100644 --- a/src/lib/elements/forms/inputCheckbox.svelte +++ b/src/lib/elements/forms/inputCheckbox.svelte @@ -1,13 +1,10 @@ - {#if label} - - {/if} - -
    - -
    + {#if error} {error} {/if} From cd7e82453eb5a7a3b87e5d38031d62ea3bcb0761 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Tue, 28 Nov 2023 08:48:36 -0800 Subject: [PATCH 015/479] Update InputRadio to properly show label and description --- src/lib/elements/forms/inputRadio.svelte | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/lib/elements/forms/inputRadio.svelte b/src/lib/elements/forms/inputRadio.svelte index cb3db08ce..a5803fa34 100644 --- a/src/lib/elements/forms/inputRadio.svelte +++ b/src/lib/elements/forms/inputRadio.svelte @@ -3,12 +3,14 @@ export let label: string = null; export let showLabel = true; + // export let label: string; export let id: string; export let group: string; export let value: string; export let name: string; export let required = false; export let disabled = false; + export let fullWidth = false; let element: HTMLInputElement; let error: string; @@ -47,6 +49,24 @@ {/if} + {#if error} {error} From 5ef5986be4cd86418077f6b811fa3537484fc2dc Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Tue, 28 Nov 2023 16:42:09 -0800 Subject: [PATCH 016/479] Create InputDate for only dates --- src/lib/elements/forms/inputDate.svelte | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lib/elements/forms/inputDate.svelte b/src/lib/elements/forms/inputDate.svelte index a49aa3c4e..380abe279 100644 --- a/src/lib/elements/forms/inputDate.svelte +++ b/src/lib/elements/forms/inputDate.svelte @@ -10,6 +10,8 @@ export let value = ''; export let required = false; export let nullable = false; + export let min: string | number | undefined = undefined; + export let max: string | number | undefined = undefined; export let disabled = false; export let readonly = false; export let autofocus = false; @@ -65,6 +67,8 @@ {readonly} {required} step=".001" + {min} + {max} autocomplete={autocomplete ? 'on' : 'off'} type="date" class="input-text" From 26707526d8eac17798008fc13ba1c10ebb4b5082 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Tue, 28 Nov 2023 16:42:28 -0800 Subject: [PATCH 017/479] Create InputTime for only times --- src/lib/elements/forms/index.ts | 1 + src/lib/elements/forms/inputTime.svelte | 67 +++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 src/lib/elements/forms/inputTime.svelte diff --git a/src/lib/elements/forms/index.ts b/src/lib/elements/forms/index.ts index 22f3688a2..9858ae0c1 100644 --- a/src/lib/elements/forms/index.ts +++ b/src/lib/elements/forms/index.ts @@ -29,3 +29,4 @@ export { default as Label } from './label.svelte'; export { default as InputProjectId } from './inputProjectId.svelte'; export { default as InputDate } from './inputDate.svelte'; export { default as InputDateRange } from './inputDateRange.svelte'; +export { default as InputTime } from './inputTime.svelte'; diff --git a/src/lib/elements/forms/inputTime.svelte b/src/lib/elements/forms/inputTime.svelte new file mode 100644 index 000000000..bc30b8745 --- /dev/null +++ b/src/lib/elements/forms/inputTime.svelte @@ -0,0 +1,67 @@ + + + + + +
    + +
    + {#if error} + {error} + {/if} +
    From 8b953d4ccd68a840813d9421a78a58da27df1f7d Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Wed, 29 Nov 2023 22:12:20 -0800 Subject: [PATCH 018/479] Add a modal for selecting user targets --- .../messaging/userTargetsModal.svelte | 260 ++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 src/routes/console/project-[project]/messaging/userTargetsModal.svelte diff --git a/src/routes/console/project-[project]/messaging/userTargetsModal.svelte b/src/routes/console/project-[project]/messaging/userTargetsModal.svelte new file mode 100644 index 000000000..3d9b4311c --- /dev/null +++ b/src/routes/console/project-[project]/messaging/userTargetsModal.svelte @@ -0,0 +1,260 @@ + + + + + +

    Grant access to any authenticated or anonymous user.

    + + {#if Object.keys(userResultsById).length > 0} + + {#each Object.entries(userResultsById) as [userId, user]} + {@const selectedCount = user.targets.filter( + (target) => selected[target.$id] + ).length} + + + 0 && + user.targets.every((target) => targetsById[target.$id])} + checked={selectedCount > 0 && selectedCount == user.targets.length} + on:change={(event) => onUserSelection(event, userId)} /> + + + + + {#if user.name} + {user.name} + {:else if user.email} + {user.email} + {:else if user.phone} + {user.phone} + {:else} + {userId} + {/if} + + + + + ({selectedCount} targets) + + + {#each user.targets as target} +
    + onTargetSelection(event, target)}> + +
    + + {#if target.providerType !== ProviderTypes.Push} + {target.identifier} + {:else} + + {target.name} + {/if} +
    +
    +
    +
    + {/each} +
    +
    + {/each} +
    +
    +

    Total results: {totalResults}

    + +
    + {:else if search} + +
    +
    + Sorry we couldn't find "{search}" +

    There are no Users that match your search.

    +
    +
    + + +
    +
    +
    + {:else} + +
    +
    +

    + You have no users. Create a user to see them here. +

    +

    + Need a hand? Learn more in our + documentation. +

    +
    +
    +
    + {/if} + + + + +
    From 96dc9612c87f565bbe5eda8fd9c01569b45cc892 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Tue, 28 Nov 2023 16:43:37 -0800 Subject: [PATCH 019/479] Create a wizard to send email messages --- src/lib/actions/analytics.ts | 3 +- .../project-[project]/messaging/+page.svelte | 58 ++++--- .../project-[project]/messaging/create.svelte | 158 +++++++++++------- .../messaging/createMessageDropdown.svelte | 67 ++++++++ .../messaging/userTargetsModal.svelte | 8 +- .../messaging/wizard/emailFormList.svelte | 145 ++++++++++++++++ .../messaging/wizard/step1.svelte | 20 +++ .../messaging/wizard/step2.svelte | 99 +++++++++++ .../messaging/wizard/step3.svelte | 101 +++++++++++ .../messaging/wizard/store.ts | 52 ++++++ 10 files changed, 626 insertions(+), 85 deletions(-) create mode 100644 src/routes/console/project-[project]/messaging/createMessageDropdown.svelte create mode 100644 src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte create mode 100644 src/routes/console/project-[project]/messaging/wizard/step1.svelte create mode 100644 src/routes/console/project-[project]/messaging/wizard/step2.svelte create mode 100644 src/routes/console/project-[project]/messaging/wizard/step3.svelte create mode 100644 src/routes/console/project-[project]/messaging/wizard/store.ts diff --git a/src/lib/actions/analytics.ts b/src/lib/actions/analytics.ts index 2b7145796..d985c85b7 100644 --- a/src/lib/actions/analytics.ts +++ b/src/lib/actions/analytics.ts @@ -290,5 +290,6 @@ export enum Submit { SmsUpdateVerificationTemplate = 'submit_sms_update_verification_template', MessagingProviderCreate = 'submit_messaging_provider_create', MessagingProviderDelete = 'submit_messaging_provider_delete', - MessagingProviderUpdate = 'submit_messaging_provider_update' + MessagingProviderUpdate = 'submit_messaging_provider_update', + MessagingMessageCreate = 'submit_messaging_message_create' } diff --git a/src/routes/console/project-[project]/messaging/+page.svelte b/src/routes/console/project-[project]/messaging/+page.svelte index f2b675613..cecbe8af5 100644 --- a/src/routes/console/project-[project]/messaging/+page.svelte +++ b/src/routes/console/project-[project]/messaging/+page.svelte @@ -1,5 +1,4 @@ @@ -54,10 +50,7 @@
    Messages
    - +
    @@ -71,10 +64,7 @@ hideView allowNoColumns showColsTextMobile /> - +
    @@ -219,11 +209,35 @@ single href="https://appwrite.io/docs" target="message" - on:click={() => ($showCreate = true)} /> + on:click={() => ($showCreate = true)}> +
    + + Create your first message to get started. + +

    + Need a hand? Learn more in our documentation. +

    +
    +
    + + + + +
    + {/if} - - - diff --git a/src/routes/console/project-[project]/messaging/create.svelte b/src/routes/console/project-[project]/messaging/create.svelte index 49a81af91..3c9924a97 100644 --- a/src/routes/console/project-[project]/messaging/create.svelte +++ b/src/routes/console/project-[project]/messaging/create.svelte @@ -1,73 +1,111 @@ - - - - - {#if !showCustomId} -
    - (showCustomId = !showCustomId)}> - -
    - {:else} - - {/if} -
    - - - - -
    + diff --git a/src/routes/console/project-[project]/messaging/createMessageDropdown.svelte b/src/routes/console/project-[project]/messaging/createMessageDropdown.svelte new file mode 100644 index 000000000..48d69abfd --- /dev/null +++ b/src/routes/console/project-[project]/messaging/createMessageDropdown.svelte @@ -0,0 +1,67 @@ + + + + + + + + {#each Object.entries(providers) as [type, option]} + { + if ( + type !== ProviderTypes.Email && + type !== ProviderTypes.Sms && + type !== ProviderTypes.Push + ) + return; + $providerType = type; + $targetsById = {}; + const common = { + topics: [], + users: [], + targets: [] + }; + switch (type) { + case ProviderTypes.Email: + $messageParams[$providerType] = { + ...common, + subject: '', + content: '' + }; + break; + case ProviderTypes.Sms: + $messageParams[$providerType] = { + ...common, + content: '' + }; + break; + case ProviderTypes.Push: + $messageParams[$providerType] = { + ...common, + title: '', + body: '' + }; + break; + } + showCreateDropdown = false; + wizard.start(Create); + }}> + {option.name} + + {/each} + + diff --git a/src/routes/console/project-[project]/messaging/userTargetsModal.svelte b/src/routes/console/project-[project]/messaging/userTargetsModal.svelte index 3d9b4311c..fad9a0022 100644 --- a/src/routes/console/project-[project]/messaging/userTargetsModal.svelte +++ b/src/routes/console/project-[project]/messaging/userTargetsModal.svelte @@ -86,7 +86,9 @@ userResultsById = {}; response.users.forEach((user) => { if (providerType !== null) { - user.targets = user.targets.filter((target) => target.providerType === providerType); + user.targets = user.targets.filter( + (target) => target.providerType === providerType + ); } userResultsById = { ...userResultsById, @@ -200,7 +202,9 @@
    + > {#if target.providerType !== ProviderTypes.Push} {target.identifier} {:else} diff --git a/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte b/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte new file mode 100644 index 000000000..950c749f8 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte @@ -0,0 +1,145 @@ + + + + + + + +
    + + + + + + + + + + Enter the email address to which te test message will be +
    (selected = 'other')} + on:keyup|self={clickOnEnter} + role="button" + tabindex="0"> + +
    +
    +
    + + + + + +
    +
    + + + Enable the HTML mode if your message contains HTML tags. + + + + + {#if !showCustomId} +
    + (showCustomId = !showCustomId)} + > +
    + {:else} + + {/if} +
    diff --git a/src/routes/console/project-[project]/messaging/wizard/step1.svelte b/src/routes/console/project-[project]/messaging/wizard/step1.svelte new file mode 100644 index 000000000..01c704873 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/wizard/step1.svelte @@ -0,0 +1,20 @@ + + + + Message + + + Create an {providers[$providerType].text} that will be displayed to your subscribers. Learn more + in our documentation. + + + diff --git a/src/routes/console/project-[project]/messaging/wizard/step2.svelte b/src/routes/console/project-[project]/messaging/wizard/step2.svelte new file mode 100644 index 000000000..60f734edf --- /dev/null +++ b/src/routes/console/project-[project]/messaging/wizard/step2.svelte @@ -0,0 +1,99 @@ + + + + Targets + + Select users to whom this message should be directed. + {#if targetIdsLength == 0} + +
    + +
    + Select recipients to get started +
    +
    +
    + {:else} +
    +
    + + Target + + + + {#each Object.entries($targetsById) as [targetId, target] (targetId)} + + +
    + {target.name ? target.name : target.identifier} +
    +
    + + +
    + +
    +
    +
    + {/each} +
    +
    + + + {/if} + + + diff --git a/src/routes/console/project-[project]/messaging/wizard/step3.svelte b/src/routes/console/project-[project]/messaging/wizard/step3.svelte new file mode 100644 index 000000000..4a62c75ef --- /dev/null +++ b/src/routes/console/project-[project]/messaging/wizard/step3.svelte @@ -0,0 +1,101 @@ + + + + Schedule + + Schedule the time you want your users to receive this message. Learn more in our + documentation. + +
    + + + +
    +
    + + {#if when === 'now'} + The message will be sent immediately + {:else if !dateTime || isNaN(dateTime.getTime())} + The message will be sent later + {:else} + The message will be sent at {dateTime.toLocaleString('en', formatOptions)} + {/if} + +
    + + diff --git a/src/routes/console/project-[project]/messaging/wizard/store.ts b/src/routes/console/project-[project]/messaging/wizard/store.ts new file mode 100644 index 000000000..6ec774cc8 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/wizard/store.ts @@ -0,0 +1,52 @@ +import { ProviderTypes } from '../providerType.svelte'; +import type { Target } from '../userTargetsModal.svelte'; +import { writable } from 'svelte/store'; + +export enum MessageStatuses { + DRAFT = 'draft', + PROCESSING = 'processing' +} + +export type MessageParams = { + messageId: string; + topics: string[]; + users: string[]; + targets: string[]; + description: string; + status: MessageStatuses; + scheduledAt?: string; +}; + +export type EmailMessageParams = MessageParams & { + subject: string; + content: string; + html: boolean; +}; + +export type SMSMessageParams = MessageParams & { + content: string; +}; + +export type PushMessageParams = MessageParams & { + title: string; + body: string; + data: Record; + action?: string; + icon?: string; + sound?: string; + color?: string; + tag?: string; + badge?: string; +}; + +export const providerType = writable(null); +export const targetsById = writable>({}); +export const messageParams = writable<{ + [ProviderTypes.Email]: Partial; + [ProviderTypes.Sms]: Partial; + [ProviderTypes.Push]: Partial; +}>({ + [ProviderTypes.Email]: null, + [ProviderTypes.Sms]: null, + [ProviderTypes.Push]: null +}); From fdb7dd1e9cf9838991641cf69bf6332bf542fd4c Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Wed, 29 Nov 2023 16:58:40 -0800 Subject: [PATCH 020/479] Add a message detail page for email messages --- src/lib/actions/analytics.ts | 3 +- src/lib/constants.ts | 3 +- .../message-[message]/+layout.svelte | 5 ++ .../messaging/message-[message]/+layout.ts | 33 +++++++++++ .../messaging/message-[message]/+page.svelte | 16 ++++++ .../message-[message]/breadcrumbs.svelte | 24 ++++++++ .../messaging/message-[message]/delete.svelte | 38 +++++++++++++ .../message-[message]/deleteModal.svelte | 56 +++++++++++++++++++ .../message-[message]/emailPreview.svelte | 33 +++++++++++ .../messaging/message-[message]/header.svelte | 17 ++++++ .../message-[message]/overview.svelte | 52 +++++++++++++++++ .../messaging/message-[message]/store.ts | 5 ++ .../messaging/providerType.svelte | 2 +- 13 files changed, 284 insertions(+), 3 deletions(-) create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/+layout.svelte create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/+layout.ts create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/+page.svelte create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/breadcrumbs.svelte create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/delete.svelte create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/deleteModal.svelte create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/emailPreview.svelte create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/header.svelte create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/overview.svelte create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/store.ts diff --git a/src/lib/actions/analytics.ts b/src/lib/actions/analytics.ts index d985c85b7..e9c127f9c 100644 --- a/src/lib/actions/analytics.ts +++ b/src/lib/actions/analytics.ts @@ -291,5 +291,6 @@ export enum Submit { MessagingProviderCreate = 'submit_messaging_provider_create', MessagingProviderDelete = 'submit_messaging_provider_delete', MessagingProviderUpdate = 'submit_messaging_provider_update', - MessagingMessageCreate = 'submit_messaging_message_create' + MessagingMessageCreate = 'submit_messaging_message_create', + MessagingMessageDelete = 'submit_messaging_message_delete' } diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 33a02a160..c9868fdcd 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -48,7 +48,8 @@ export enum Dependencies { RUNTIMES = 'dependency:runtimes', CONSOLE_VARIABLES = 'dependency:console_variables', MESSAGING_PROVIDERS = 'dependency:messaging_providers', - MESSAGING_PROVIDER = 'dependency:messaging_provider' + MESSAGING_PROVIDER = 'dependency:messaging_provider', + MESSAGING_MESSAGE = 'dependency:messaging_message' } export const scopes: { diff --git a/src/routes/console/project-[project]/messaging/message-[message]/+layout.svelte b/src/routes/console/project-[project]/messaging/message-[message]/+layout.svelte new file mode 100644 index 000000000..9d2f6426e --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/+layout.svelte @@ -0,0 +1,5 @@ + + Message - Appwrite + + + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/+layout.ts b/src/routes/console/project-[project]/messaging/message-[message]/+layout.ts new file mode 100644 index 000000000..21e6f6aad --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/+layout.ts @@ -0,0 +1,33 @@ +import type { LayoutLoad } from './$types'; +import Breadcrumbs from './breadcrumbs.svelte'; +import Header from './header.svelte'; +import { sdk } from '$lib/stores/sdk'; +import { Dependencies } from '$lib/constants'; +import { error } from '@sveltejs/kit'; +import type { Message } from '../store'; + +export const load: LayoutLoad = async ({ params, depends }) => { + depends(Dependencies.MESSAGING_MESSAGE); + + try { + const response: Message = await sdk.forProject.client.call( + 'GET', + new URL( + `${sdk.forProject.client.config.endpoint}/messaging/messages/${params.message}` + ), + { + 'X-Appwrite-Project': sdk.forProject.client.config.project, + 'content-type': 'application/json', + 'X-Appwrite-Mode': 'admin' + } + ); + + return { + header: Header, + breadcrumbs: Breadcrumbs, + message: response + }; + } catch (e) { + throw error(e.code, e.message); + } +}; diff --git a/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte new file mode 100644 index 000000000..1867a5dac --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte @@ -0,0 +1,16 @@ + + + + + {#if $message.providerType === ProviderTypes.Email} + + {/if} + + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/breadcrumbs.svelte b/src/routes/console/project-[project]/messaging/message-[message]/breadcrumbs.svelte new file mode 100644 index 000000000..caf1d7778 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/breadcrumbs.svelte @@ -0,0 +1,24 @@ + + + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/delete.svelte b/src/routes/console/project-[project]/messaging/message-[message]/delete.svelte new file mode 100644 index 000000000..7d7a2fb77 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/delete.svelte @@ -0,0 +1,38 @@ + + + + Delete message +

    + The message will be permanently deleted, including all data associated with this message. + This action is irreversible. +

    + + + +
    + {$message.data.title ?? + $message.data.subject ?? + $message.data.content ?? + 'Message'} +
    +
    +

    + Last updated: {toLocaleDateTime($message.$updatedAt)} +

    +
    +
    + + + + +
    + + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/deleteModal.svelte b/src/routes/console/project-[project]/messaging/message-[message]/deleteModal.svelte new file mode 100644 index 000000000..41988ae73 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/deleteModal.svelte @@ -0,0 +1,56 @@ + + + +

    Are you sure you want to delete this message?

    + + + + +
    diff --git a/src/routes/console/project-[project]/messaging/message-[message]/emailPreview.svelte b/src/routes/console/project-[project]/messaging/message-[message]/emailPreview.svelte new file mode 100644 index 000000000..153a14def --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/emailPreview.svelte @@ -0,0 +1,33 @@ + + + +
    + Preview +
    + + + + + + + + + + + + + +
    diff --git a/src/routes/console/project-[project]/messaging/message-[message]/header.svelte b/src/routes/console/project-[project]/messaging/message-[message]/header.svelte new file mode 100644 index 000000000..f97cc9e21 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/header.svelte @@ -0,0 +1,17 @@ + + + + + + {$message.data.title ?? $message.data.subject ?? $message.data.content ?? 'Message'} + + {$message.$id} + + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte b/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte new file mode 100644 index 000000000..9dfb7add3 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte @@ -0,0 +1,52 @@ + + + +
    + + {providerType} + +
    + +
    +
    +

    Created: {toLocaleDateTime($message.$createdAt)}

    +

    Scheduled at: {toLocaleDateTime(scheduledAt)}

    +
    +
    + +
    +
    +
    + + + + + +
    diff --git a/src/routes/console/project-[project]/messaging/message-[message]/store.ts b/src/routes/console/project-[project]/messaging/message-[message]/store.ts new file mode 100644 index 000000000..97b3c1c5d --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/store.ts @@ -0,0 +1,5 @@ +import { derived } from 'svelte/store'; +import { page } from '$app/stores'; +import type { Message } from '../store'; + +export const message = derived(page, ($page) => $page.data.message as Message); diff --git a/src/routes/console/project-[project]/messaging/providerType.svelte b/src/routes/console/project-[project]/messaging/providerType.svelte index b7db1514f..d5e43f9f5 100644 --- a/src/routes/console/project-[project]/messaging/providerType.svelte +++ b/src/routes/console/project-[project]/messaging/providerType.svelte @@ -49,7 +49,7 @@ class="avatar" class:is-size-large={size === 'l'} class:is-size-small={size === 's'}> -
    @@ -147,7 +140,7 @@ limit={data.limit} offset={data.offset} total={data.providers.total} /> - {:else if data.search} + {:else if data.search && data.search != 'empty'}
    Sorry, we couldn't find '{data.search}' @@ -159,11 +152,33 @@ {:else} - + +
    + + Create your first provider to get started. + +

    + Need a hand? Learn more in our documentation. +

    +
    +
    + + + + +
    +
    {/if} - - diff --git a/src/routes/console/project-[project]/messaging/providers/+page.ts b/src/routes/console/project-[project]/messaging/providers/+page.ts index ac98e7a7c..b55c53ff0 100644 --- a/src/routes/console/project-[project]/messaging/providers/+page.ts +++ b/src/routes/console/project-[project]/messaging/providers/+page.ts @@ -70,6 +70,6 @@ export const load = async ({ url, route }) => { query, page, view, - providers: providers + providers }; }; diff --git a/src/routes/console/project-[project]/messaging/providers/create.svelte b/src/routes/console/project-[project]/messaging/providers/create.svelte index 65528f2c0..d828be10c 100644 --- a/src/routes/console/project-[project]/messaging/providers/create.svelte +++ b/src/routes/console/project-[project]/messaging/providers/create.svelte @@ -1,68 +1,274 @@ - - - - {#if !showCustomId} -
    - (showCustomId = !showCustomId)} - > -
    - {:else} - - {/if} -
    - - - - -
    + diff --git a/src/routes/console/project-[project]/messaging/providers/createProviderDropdown.svelte b/src/routes/console/project-[project]/messaging/providers/createProviderDropdown.svelte new file mode 100644 index 000000000..e829f4927 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/createProviderDropdown.svelte @@ -0,0 +1,49 @@ + + + + + + + + {#each Object.entries(providers) as [type, option]} + { + if ( + type !== ProviderTypes.Email && + type !== ProviderTypes.Sms && + type !== ProviderTypes.Push + ) + return; + $providerType = type; + const p = Object.keys(providers[type].providers).shift(); + if (p && isValueOfStringEnum(Providers, p)) { + $provider = p; + } + showCreateDropdown = false; + wizard.start(Create); + }}> + {option.name} + + {/each} + + diff --git a/src/routes/console/project-[project]/messaging/providers/store.ts b/src/routes/console/project-[project]/messaging/providers/store.ts index 290483e9e..714db9d9a 100644 --- a/src/routes/console/project-[project]/messaging/providers/store.ts +++ b/src/routes/console/project-[project]/messaging/providers/store.ts @@ -1,5 +1,7 @@ import { writable } from 'svelte/store'; import type { Column } from '$lib/helpers/types'; +import { Providers } from '../provider.svelte'; +import { ProviderTypes } from '../providerType.svelte'; export let showCreate = writable(false); @@ -10,3 +12,370 @@ export const columns = writable([ { id: 'type', title: 'Type', type: 'string', show: true }, { id: 'enabled', title: 'Status', type: 'boolean', show: true } ]); + +type ProvidersMap = { + [key in ProviderTypes]: { + name: string; + text: string; + icon: string; + providers: { + [key in Providers]?: { + imageIcon: string; + title: string; + description: string; + configure: { + label: string; + name: string; + type: 'text' | 'phone' | 'email' | 'domain' | 'file' | 'switch'; + placeholder?: string; + description?: string; + popover?: string[]; + allowedFileExtensions?: string[]; + }[]; + }; + }; + }; +}; + +export const providers: ProvidersMap = { + [ProviderTypes.Sms]: { + name: 'SMS', + text: 'SMS', + icon: 'annotation', + providers: { + [Providers.Twilio]: { + imageIcon: 'twilio', + title: 'Twilio', + description: '', + configure: [ + { + label: 'Account SID', + name: 'accountSid', + type: 'text', + placeholder: 'Enter Account SID', + popover: [ + 'How to get the Account SID?', + 'Head to Twilio console -> Account info -> Account SID.' + ] + }, + { + label: 'Auth token', + name: 'authToken', + type: 'text', + placeholder: 'Enter Auth token', + popover: [ + 'How to get the Auth token?', + 'Head to Twilio console -> Account info -> Auth Token.' + ] + }, + { + label: 'Sender number', + name: 'from', + type: 'phone', + placeholder: 'Enter phone', + popover: [ + 'How to get sender number?', + 'Head to Twilio console -> Account info -> My Twilio phone number.', + 'If you have multiple Twilio phone numbers, you can select one as the default number.' + ] + } + ] + }, + [Providers.Msg91]: { + imageIcon: 'msg91', + title: 'MSG91', + description: '', + configure: [ + { + label: 'Auth key', + name: 'authKey', + type: 'text', + placeholder: 'Enter auth key', + popover: [ + 'How to get the Auth key?', + 'Create an account in MSG91.', + 'Click to open the Username dropdown -> Authkey -> Verify your mobile number -> Create Authkey.' + ] + }, + { + label: 'Sender ID', + name: 'senderId', + type: 'text', + placeholder: 'Enter sender ID', + popover: [ + 'How to create a Sender ID?', + 'Head to MSG91 dashboard -> SMS -> Sender ID -> Create sender ID.' + ] + }, + { + label: 'Sender number', + name: 'from', + type: 'phone', + placeholder: 'Enter phone' + } + ] + }, + [Providers.Telesign]: { + imageIcon: 'telesign', + title: 'Telesign', + description: '', + configure: [ + { + label: 'Username', + name: 'username', + type: 'text', + placeholder: 'Enter username' + }, + { + label: 'Password', + name: 'password', + type: 'text', + placeholder: 'Enter password' + }, + { + label: 'Sender number', + name: 'from', + type: 'phone', + placeholder: 'Enter phone' + } + ] + }, + [Providers.Textmagic]: { + imageIcon: 'textmagic', + title: 'Textmagic', + description: '', + configure: [ + { + label: 'API key', + name: 'apiKey', + type: 'text', + placeholder: 'Enter API key', + popover: [ + 'How to get the API key?', + 'Create an account in Textmagic.', + 'Head to TextMagic dashboard -> API Settings -> Add new API key.' + ] + }, + { + label: 'Username', + name: 'username', + type: 'text', + placeholder: 'Enter username' + }, + { + label: 'Sender number', + name: 'from', + type: 'phone', + placeholder: 'Enter phone' + } + ] + }, + [Providers.Vonage]: { + imageIcon: 'vonage', + title: 'Vonage', + description: '', + configure: [ + { + label: 'API key', + name: 'apiKey', + type: 'text', + placeholder: 'Enter API key', + popover: [ + 'How to get the API key?', + 'Create an account in Vonage.', + 'Head to Vonage dashboard and copy the API key.' + ] + }, + { + label: 'API secret', + name: 'apiSecret', + type: 'text', + placeholder: 'Enter API secret', + popover: [ + 'How to get the API secret?', + 'Head to Vonage dashboard and copy the API secret.' + ] + }, + { + label: 'Sender number', + name: 'from', + type: 'phone', + placeholder: 'Enter phone' + } + ] + } + } + }, + [ProviderTypes.Email]: { + name: 'Email', + text: 'emails', + icon: 'mail', + providers: { + [Providers.Mailgun]: { + imageIcon: 'mailgun', + title: 'Mailgun', + description: '', + configure: [ + { + label: 'API key', + name: 'apiKey', + type: 'text', + placeholder: 'Enter API key', + popover: [ + 'How to get the API key?', + 'Create an account in Mailgun.', + 'Head to Profile -> API Security -> Add new key.' + ] + }, + { + label: 'Domain', + name: 'domain', + type: 'domain', + placeholder: 'Enter domain', + popover: [ + 'How to create a domain?', + 'Head to Sending -> Domains -> Add new domain.', + 'Follow Mailgun instructions to verify the domain name.' + ] + }, + { + label: 'EU region', + name: 'isEuRegion', + type: 'switch', + description: + 'Enable the EU region setting if your domain is within the European Union.' + }, + { + label: 'Sender email', + name: 'from', + type: 'email', + placeholder: 'Enter email' + } + ] + }, + [Providers.Sendgrid]: { + imageIcon: 'sendgrid', + title: 'Sendgrid', + description: '', + configure: [ + { + label: 'API key', + name: 'apiKey', + type: 'text', + placeholder: 'Enter API key', + popover: [ + 'How to get the API key?', + 'Create an account in Mailgun.', + 'Head to Profile -> API Security -> Add new key.' + ] + }, + { + label: 'Sender email', + name: 'from', + type: 'email', + placeholder: 'Enter email' + } + ] + } + } + }, + [ProviderTypes.Push]: { + name: 'Push notification', + text: 'notifications', + icon: 'device-mobile', + providers: { + [Providers.FCM]: { + imageIcon: 'firebase', + title: 'FCM', + description: 'Firebase Cloud Messaging', + configure: [ + { + label: 'Server key (.json file)', + name: 'serverKey', + type: 'file', + allowedFileExtensions: ['json'], + placeholder: 'Enter server key', + popover: [ + 'How to get the FCM server key?', + 'Head to Project settings -> Service accounts -> Generate new private key.', + 'Generating the new key will result in the download of a JSON file.' + ] + } + ] + }, + [Providers.APNS]: { + imageIcon: 'apple', + title: 'APNS', + description: 'Apple Push Notification Service', + configure: [ + { + label: 'Team ID', + name: 'teamId', + type: 'text', + placeholder: 'Enter team ID', + popover: [ + 'How to get the team ID?', + 'Head to Apple Developer Member Center -> Membership details -> Team ID.' + ] + }, + { + label: 'Bundle ID', + name: 'bundleId', + type: 'text', + placeholder: 'Enter bundle ID', + popover: [ + 'How to get the bundle ID?', + 'Head to Apple Developer Member Center -> Certificates, Identifiers & Profiles -> Identifiers.', + `
    +
    + Screenshot of Bundle ID in Apple +
    +
    +
    +
    +
    +
    ` + ] + }, + { + label: 'Authentication key ID', + name: 'authKeyId', + type: 'text', + placeholder: 'Enter key ID', + popover: [ + 'How to get the auth key ID?', + 'Head to Apple Developer Member Center -> Certificates, Identifiers & Profiles -> Keys.', + 'Click on your key to view details.' + ] + }, + { + label: 'Auth key (.p8 file)', + name: 'authKey', + type: 'file', + allowedFileExtensions: ['p8'], + popover: [ + 'How to get the authentication key?', + 'Head to Apple Developer Member Center (under Program resources) -> Certificates, Identifiers & Profiles -> Keys.', + 'Create a key and give it a name. Enable the Apple Push Notifications service (APNS), and register your key.' + ] + } + ] + } + // [Providers.MQTT]: { + // imageIcon: 'mqtt', + // title: 'MQTT', + // description: 'Message Queuing Telemtry Transport' + // } + } + } +}; diff --git a/src/routes/console/project-[project]/messaging/providers/wizard/configure.svelte b/src/routes/console/project-[project]/messaging/providers/wizard/configure.svelte new file mode 100644 index 000000000..7f1fce5d0 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/wizard/configure.svelte @@ -0,0 +1,133 @@ + + + + Configure + + Set up the credentials below to enable {providers[$providerType].providers[$provider].title} + for sending + {providers[$providerType].text}. + + + {#each inputs as input} + {#if input.type === 'text'} + + + {@html input.popover?.join('

    ')} +
    +
    + {:else if input.type === 'email'} + + +

    + {@html input.popover?.join('

    ')} +

    +
    +
    + {:else if input.type === 'domain'} + + +

    + {@html input.popover?.join('

    ')} +

    +
    +
    + {:else if input.type === 'phone'} + + +

    + {@html input.popover?.join('

    ')} +

    +
    +
    + {:else if input.type === 'file'} + + +

    + {@html input.popover?.join('

    ')} +

    +
    +
    + {:else if input.type === 'switch'} + + + {input.description} + + + {/if} + {/each} +
    + +

    Need a hand?

    + +
    +
    +
    +
    + Read the full guide in the documentation +
    +
    + +
    +
    +
    +
    + Invite a team member to complete this step +
    +
    +
    diff --git a/src/routes/console/project-[project]/messaging/providers/wizard/provider.svelte b/src/routes/console/project-[project]/messaging/providers/wizard/provider.svelte new file mode 100644 index 000000000..1f9e238a1 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/wizard/provider.svelte @@ -0,0 +1,161 @@ + + + + Provider + + + + {#if !showCustomId} +
    + (showCustomId = !showCustomId)} + > +
    + {:else} + + {/if} +

    + Select a provider you would like to enable for sending {providers[$providerType].text}. +

    +
    + {#each Object.entries(providers[$providerType].providers) as [value, option]} + + {option.title} + {#if option.description} + {option.description} + {/if} + + {/each} +
    +
    +
    diff --git a/src/routes/console/project-[project]/messaging/providers/wizard/store.ts b/src/routes/console/project-[project]/messaging/providers/wizard/store.ts new file mode 100644 index 000000000..9f47f8a41 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/wizard/store.ts @@ -0,0 +1,103 @@ +import type { Providers } from '../../provider.svelte'; +import type { ProviderTypes } from '../../providerType.svelte'; +import { writable } from 'svelte/store'; + +type ProviderParams = { + providerId: string; + name: string; + default: boolean; + enabled: boolean; +}; + +/** + * SMS providers + */ + +export type TwilioProviderParams = ProviderParams & { + accountSid: string; + authToken: string; + from: string; +}; + +export type Msg91ProviderParams = ProviderParams & { + from: string; + senderId: string; + authKey: string; +}; + +export type TelesignProviderParams = ProviderParams & { + from: string; + username: string; + password: string; +}; + +export type TextmagicProviderParams = ProviderParams & { + from: string; + username: string; + apiKey: string; +}; + +export type VonageProviderParams = ProviderParams & { + from: string; + apiKey: string; + apiSecret: string; +}; + +/** + * Email providers + */ + +export type MailgunProviderParams = ProviderParams & { + isEuRegion: boolean; + from: string; + apiKey: string; + domain: string; +}; + +export type SendgridProviderParams = ProviderParams & { + from: string; + apiKey: string; +}; + +/** + * Push providers + */ + +export type FCMProviderParams = ProviderParams & { + serverKey: string; +}; + +export type APNSProviderParams = ProviderParams & { + authKey: string; + authKeyId: string; + teamId: string; + bundleId: string; +}; + +export type MQTTProviderParams = ProviderParams & { + serverKey: string; +}; + +export const providerType = writable(null); +export const provider = writable(null); +export const providerParams = writable<{ + twilio: Partial; + msg91: Partial; + telesign: Partial; + textmagic: Partial; + vonage: Partial; + mailgun: Partial; + sendgrid: Partial; + fcm: Partial; + apns: Partial; +}>({ + twilio: null, + msg91: null, + telesign: null, + textmagic: null, + vonage: null, + mailgun: null, + sendgrid: null, + fcm: null, + apns: null +}); diff --git a/static/images/apns-bundle-id.png b/static/images/apns-bundle-id.png new file mode 100644 index 0000000000000000000000000000000000000000..90fde1eff20bccdf9a34bf5555c55483e8d4c40f GIT binary patch literal 42772 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 literal 0 HcmV?d00001 From c8ef5158759ec417de111c19698bdab2e9886d53 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Thu, 30 Nov 2023 17:55:07 -0800 Subject: [PATCH 011/479] Add wizard for updating provider --- .../messaging/providers/update.svelte | 272 ++++++++++++++++++ .../providers/wizard/configure.svelte | 15 + 2 files changed, 287 insertions(+) create mode 100644 src/routes/console/project-[project]/messaging/providers/update.svelte diff --git a/src/routes/console/project-[project]/messaging/providers/update.svelte b/src/routes/console/project-[project]/messaging/providers/update.svelte new file mode 100644 index 000000000..7c75c8bd5 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/update.svelte @@ -0,0 +1,272 @@ + + + diff --git a/src/routes/console/project-[project]/messaging/providers/wizard/configure.svelte b/src/routes/console/project-[project]/messaging/providers/wizard/configure.svelte index 7f1fce5d0..9a6dc02b1 100644 --- a/src/routes/console/project-[project]/messaging/providers/wizard/configure.svelte +++ b/src/routes/console/project-[project]/messaging/providers/wizard/configure.svelte @@ -9,12 +9,27 @@ } from '$lib/elements/forms'; import InputPhone from '$lib/elements/forms/inputPhone.svelte'; import { WizardStep } from '$lib/layout'; + import { onMount } from 'svelte'; import { providers } from '../store'; import { providerType, provider, providerParams } from './store'; let files: Record = {}; const inputs = providers[$providerType].providers[$provider].configure; + onMount(() => { + for (const input of inputs) { + if (input.type === 'file' && $providerParams[$provider][input.name].length > 0) { + const dataTransfer = new DataTransfer(); + const f = new File( + [$providerParams[$provider][input.name]], + `${input.name}.${input.allowedFileExtensions}` + ); + dataTransfer.items.add(f); + files[input.name] = dataTransfer.files; + } + } + }); + async function beforeSubmit() { const promises = []; for (const [key, value] of Object.entries(files)) { From bb705cbf8a12344b3cc731391b287163e82e7701 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Wed, 25 Oct 2023 16:52:35 -0700 Subject: [PATCH 012/479] Add provider details route --- src/lib/constants.ts | 3 +- .../provider-[provider]/+layout.svelte | 5 + .../providers/provider-[provider]/+layout.ts | 32 ++ .../provider-[provider]/+page.svelte | 12 + .../provider-[provider]/breadcrumbs.svelte | 27 ++ .../provider-[provider]/dangerZone.svelte | 45 +++ .../provider-[provider]/deleteProvider.svelte | 59 +++ .../provider-[provider]/header.svelte | 17 + .../providers/provider-[provider]/store.ts | 9 + .../provider-[provider]/updateName.svelte | 51 +++ .../provider-[provider]/updateStatus.svelte | 367 ++++++++++++++++++ .../messaging/providers/wizard/store.ts.bak | 161 ++++++++ 12 files changed, 787 insertions(+), 1 deletion(-) create mode 100644 src/routes/console/project-[project]/messaging/providers/provider-[provider]/+layout.svelte create mode 100644 src/routes/console/project-[project]/messaging/providers/provider-[provider]/+layout.ts create mode 100644 src/routes/console/project-[project]/messaging/providers/provider-[provider]/+page.svelte create mode 100644 src/routes/console/project-[project]/messaging/providers/provider-[provider]/breadcrumbs.svelte create mode 100644 src/routes/console/project-[project]/messaging/providers/provider-[provider]/dangerZone.svelte create mode 100644 src/routes/console/project-[project]/messaging/providers/provider-[provider]/deleteProvider.svelte create mode 100644 src/routes/console/project-[project]/messaging/providers/provider-[provider]/header.svelte create mode 100644 src/routes/console/project-[project]/messaging/providers/provider-[provider]/store.ts create mode 100644 src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateName.svelte create mode 100644 src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateStatus.svelte create mode 100644 src/routes/console/project-[project]/messaging/providers/wizard/store.ts.bak diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 52d2b999b..5bc06db41 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -46,7 +46,8 @@ export enum Dependencies { MIGRATIONS = 'dependency:migrations', COLLECTIONS = 'dependency:collections', RUNTIMES = 'dependency:runtimes', - CONSOLE_VARIABLES = 'dependency:console_variables' + CONSOLE_VARIABLES = 'dependency:console_variables', + MESSAGING_PROVIDER = 'dependency:messaging_provider' } export const scopes: { diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+layout.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+layout.svelte new file mode 100644 index 000000000..944197a93 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+layout.svelte @@ -0,0 +1,5 @@ + + Provider - Appwrite + + + diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+layout.ts b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+layout.ts new file mode 100644 index 000000000..afc8f83ab --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+layout.ts @@ -0,0 +1,32 @@ +import type { LayoutLoad } from './$types'; +import Breadcrumbs from './breadcrumbs.svelte'; +import Header from './header.svelte'; +import { sdk } from '$lib/stores/sdk'; +import { Dependencies } from '$lib/constants'; +import { error } from '@sveltejs/kit'; + +export const load: LayoutLoad = async ({ params, depends }) => { + depends(Dependencies.MESSAGING_PROVIDER); + + const response = await sdk.forProject.client.call( + 'GET', + new URL(sdk.forProject.client.config.endpoint + '/messaging/providers/' + params.provider), + { + 'X-Appwrite-Project': sdk.forProject.client.config.project, + 'content-type': 'application/json', + 'X-Appwrite-Mode': 'admin' + } + ); + + console.log(response); + + try { + return { + header: Header, + breadcrumbs: Breadcrumbs, + provider: response + }; + } catch (e) { + throw error(e.code, e.message); + } +}; diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+page.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+page.svelte new file mode 100644 index 000000000..2262f62ac --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+page.svelte @@ -0,0 +1,12 @@ + + + + + + + diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/breadcrumbs.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/breadcrumbs.svelte new file mode 100644 index 000000000..5a3f26f90 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/breadcrumbs.svelte @@ -0,0 +1,27 @@ + + + diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/dangerZone.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/dangerZone.svelte new file mode 100644 index 000000000..7befc15c0 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/dangerZone.svelte @@ -0,0 +1,45 @@ + + + + + +
    + Delete provider +
    +

    The provider's instance will be permanently deleted. This action is irreversible.

    + + + +
    {$provider.name}
    +
    +

    + Last updated: {toLocaleDateTime($provider.$updatedAt)} +

    +
    +
    + + + + +
    + + diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/deleteProvider.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/deleteProvider.svelte new file mode 100644 index 000000000..e32cbf6aa --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/deleteProvider.svelte @@ -0,0 +1,59 @@ + + + +

    + Are you sure you want to delete {$provider.name} from '{$project.name}'? +

    + + + + +
    diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/header.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/header.svelte new file mode 100644 index 000000000..d78a0f0d4 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/header.svelte @@ -0,0 +1,17 @@ + + + + + + {$provider?.name ? $provider?.name : '-'} + + {$provider?.$id} + + diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/store.ts b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/store.ts new file mode 100644 index 000000000..a69272a70 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/store.ts @@ -0,0 +1,9 @@ +import { derived } from 'svelte/store'; +import { page } from '$app/stores'; +import type { Provider } from '../../store'; + +export const provider = derived( + page, + // TODO: Set actual type + ($page) => $page.data.provider as Provider +); diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateName.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateName.svelte new file mode 100644 index 000000000..f77b626ca --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateName.svelte @@ -0,0 +1,51 @@ + + +
    + + Name + + +
      + +
    +
    + + + + +
    +
    diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateStatus.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateStatus.svelte new file mode 100644 index 000000000..f4fddcc74 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateStatus.svelte @@ -0,0 +1,367 @@ + + + +
    + + {$provider.name} + +
    + +
    +
    +
      + +
    +

    Provider:

    +

    Channel:

    +

    Created: {toLocaleDateTime($provider.$createdAt)}

    +
    +
    +
    + + +
    + + +
    +
    +
    diff --git a/src/routes/console/project-[project]/messaging/providers/wizard/store.ts.bak b/src/routes/console/project-[project]/messaging/providers/wizard/store.ts.bak new file mode 100644 index 000000000..0ee3ba46c --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/wizard/store.ts.bak @@ -0,0 +1,161 @@ +import { writable } from 'svelte/store'; +import type { Column } from '$lib/components/viewSelector.svelte'; + +export let showCreate = writable(false); + +export const columns = writable([ + { id: '$id', title: 'Provider ID', show: true }, + { id: 'name', title: 'Name', show: true }, + { id: 'provider', title: 'Provider', show: true }, + { id: 'channel', title: 'Channel', show: true }, + { id: 'status', title: 'Status', show: true } +]); + +export type Instruction = { + text: string; + input: { + label: string; + name: string; + type: 'text' | 'domain' | 'email'; + placeholder: string; + }; +}; + +export const providers = { + sms: { + name: 'SMS', + text: 'SMS', + icon: 'annotation', + providers: { + twilio: { + imageIcon: 'twilio', + title: 'Twilio', + description: '' + }, + msg91: { + imageIcon: 'msg91', + title: 'MSG91', + description: '' + }, + telesign: { + imageIcon: 'telesign', + title: 'Telesign', + description: '' + }, + textmagic: { + imageIcon: 'textmagic', + title: 'Textmagic', + description: '' + }, + vonage: { + imageIcon: 'vonage', + title: 'Vonage', + description: '' + } + } + }, + email: { + name: 'Email', + text: 'emails', + icon: 'mail', + providers: { + mailgun: { + imageIcon: 'mailgun', + title: 'Mailgun', + description: '', + initialize: [ + { + text: 'Before you can create a Mailgun provider, you need to first create a Mailgun account.' + }, + { + text: 'Head to your Profile > API Security.' + }, + { + text: 'Generate a key and give it a name. Copy and paste it in the field below.', + input: { + label: 'API key', + name: 'apiKey', + type: 'text', + placeholder: 'Enter API key' + } + }, + { + // TODO: Update link to domain verification + text: 'Head to Sending > Domains and click on \'Add New Domain\'. Verify your domain by following the instructions.', + input: { + label: 'Base URL', + name: 'baseUrl', + type: 'text', + placeholder: 'Enter base URL' + } + } + ], + configure: [ + { + text: 'Provide a display name your recipient will see when they receive your emails.', + input: { + label: 'From', + name: 'from', + type: 'text', + placeholder: 'Enter name' + } + }, + { + text: 'Provide an email address that will be visible to the recipient as the senders email address for this message.', + input: { + label: 'From email address', + name: 'email', + type: 'email', + placeholder: 'Enter email' + } + }, + { + text: 'Provide an email address for users to use when replying to your emails.', + input: { + label: 'Reply to', + name: 'replyTo', + type: 'email', + placeholder: 'Enter email' + } + }, + { + text: 'Provide the domain as it is registered on Mailgun.', + input: { + label: 'Domain', + name: 'domain', + type: 'domain', + placeholder: 'Enter domain' + } + } + ] + }, + sendgrid: { + imageIcon: 'sendgrid', + title: 'Sendgrid', + description: '' + } + } + }, + push: { + name: 'Push notification', + text: 'notifications', + icon: 'device-mobile', + providers: { + fcm: { + imageIcon: 'firebase', + title: 'FCM', + description: 'Firebase Cloud Messaging' + }, + apns: { + imageIcon: 'apple', + title: 'APNS', + description: 'Apple Push Notification Service' + }, + mqtt: { + imageIcon: 'mqtt', + title: 'MQTT', + description: 'Message Queuing Telemtry Transport' + } + } + } +}; From ae8da6a091140bfa608beb249b7f1554c94c9673 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Wed, 13 Dec 2023 17:59:33 -0800 Subject: [PATCH 013/479] Refactor providers table and add bulk deletion --- src/lib/constants.ts | 1 + .../messaging/providers/+page.svelte | 76 +------- .../messaging/providers/+page.ts | 6 +- .../messaging/providers/table.svelte | 170 ++++++++++++++++++ 4 files changed, 177 insertions(+), 76 deletions(-) create mode 100644 src/routes/console/project-[project]/messaging/providers/table.svelte diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 5bc06db41..33a02a160 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -47,6 +47,7 @@ export enum Dependencies { COLLECTIONS = 'dependency:collections', RUNTIMES = 'dependency:runtimes', CONSOLE_VARIABLES = 'dependency:console_variables', + MESSAGING_PROVIDERS = 'dependency:messaging_providers', MESSAGING_PROVIDER = 'dependency:messaging_provider' } diff --git a/src/routes/console/project-[project]/messaging/providers/+page.svelte b/src/routes/console/project-[project]/messaging/providers/+page.svelte index 203bf85c8..9ede84994 100644 --- a/src/routes/console/project-[project]/messaging/providers/+page.svelte +++ b/src/routes/console/project-[project]/messaging/providers/+page.svelte @@ -1,16 +1,5 @@ @@ -79,61 +61,7 @@
  • From 6e675d44d823c92f39790f1b4113b29584e2bc2f Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Fri, 23 Feb 2024 14:26:44 -0800 Subject: [PATCH 245/479] feat(components): bind open on collapsible item This allows binding upstream to detect changes to open. --- src/lib/components/collapsibleItem.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/collapsibleItem.svelte b/src/lib/components/collapsibleItem.svelte index 8397454dc..909453544 100644 --- a/src/lib/components/collapsibleItem.svelte +++ b/src/lib/components/collapsibleItem.svelte @@ -6,7 +6,7 @@
  • -
    +
    Date: Fri, 23 Feb 2024 14:27:42 -0800 Subject: [PATCH 246/479] feat(components): increase collapsible's chevron size per design feedback --- src/lib/components/collapsibleItem.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/collapsibleItem.svelte b/src/lib/components/collapsibleItem.svelte index 909453544..736f2fe21 100644 --- a/src/lib/components/collapsibleItem.svelte +++ b/src/lib/components/collapsibleItem.svelte @@ -22,7 +22,7 @@ {/if}
    -
    Date: Fri, 23 Feb 2024 14:29:28 -0800 Subject: [PATCH 247/479] fix(messaging): update Need a hand? section based on design feedback --- .../providers/wizard/configure.svelte | 170 +++++++++++------- 1 file changed, 104 insertions(+), 66 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/providers/wizard/configure.svelte b/src/routes/console/project-[project]/messaging/providers/wizard/configure.svelte index 47222cc82..eba51e07f 100644 --- a/src/routes/console/project-[project]/messaging/providers/wizard/configure.svelte +++ b/src/routes/console/project-[project]/messaging/providers/wizard/configure.svelte @@ -14,17 +14,21 @@ import { onMount } from 'svelte'; import { providers } from '../store'; import { providerType, provider, providerParams } from './store'; - import { Table, TableBody, TableCell, TableRowButton, TableRowLink } from '$lib/elements/table'; import { newMemberModal } from '$lib/stores/organization'; import CreateMember from '$routes/console/organization-[organization]/createMember.svelte'; - import Collapsible from '$lib/components/collapsible.svelte'; - import CollapsibleItem from '$lib/components/collapsibleItem.svelte'; import Provider from '../../provider.svelte'; import { MessagingProviderType } from '@appwrite.io/console'; import ProviderTypeComponent from '$routes/console/project-[project]/messaging/providerType.svelte'; + import { + Collapsible, + CollapsibleItem, + ClickableList, + ClickableListItem + } from '$lib/components'; let files: Record = {}; const inputs = providers[$providerType].providers[$provider].configure; + let open = false; onMount(() => { for (const input of inputs) { @@ -164,81 +168,115 @@

    Need a hand?

    - {#if providers[$providerType].providers[$provider].needAHand} - {@const needAHand = providers[$providerType].providers[$provider].needAHand} -
    - - - -
    -
    -
    From 0837b8d49a94bc6d6b8e1c747fb96a6e3046ddb4 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Thu, 22 Feb 2024 12:56:02 -0800 Subject: [PATCH 248/479] fix(messaging): prevent duplicate create subscriber calls Update subscribersByTargetId with created subscribers so subsequent addTarget() calls won't add the same targets again. --- .../topics/topic-[topic]/subscribers/+page.svelte | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/+page.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/+page.svelte index 08d6fd58a..c5c308a5e 100644 --- a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/+page.svelte +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/+page.svelte @@ -46,9 +46,14 @@ const targetIds = Object.keys($targetsById).filter( (targetId) => !(targetId in subscribersByTargetId) ); - const promises = targetIds.map((targetId) => - sdk.forProject.messaging.createSubscriber($page.params.topic, ID.unique(), targetId) - ); + const promises = targetIds.map(async (targetId) => { + const subscriber = await sdk.forProject.messaging.createSubscriber( + $page.params.topic, + ID.unique(), + targetId + ); + subscribersByTargetId[targetId] = subscriber; + }); try { await Promise.all(promises); From aaab1118a0649f6e9c1f73b2a9f14630cc351aa0 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Sat, 24 Feb 2024 17:48:46 +0100 Subject: [PATCH 249/479] fix: various issues --- src/hooks.client.ts | 13 +++++++++++++ src/lib/components/filters/content.svelte | 4 ++-- src/lib/helpers/exceptions.ts | 1 + src/routes/+error.svelte | 2 +- src/routes/+layout.ts | 7 ++++--- src/routes/console/+error.svelte | 2 +- .../organization-[organization]/+layout.ts | 5 ++++- .../console/project-[project]/+error.svelte | 2 +- .../console/project-[project]/+layout.ts | 3 ++- .../settings/usage/[[invoice]]/+page.ts | 18 ++++++++---------- 10 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 src/hooks.client.ts create mode 100644 src/lib/helpers/exceptions.ts diff --git a/src/hooks.client.ts b/src/hooks.client.ts new file mode 100644 index 000000000..2345ffb2c --- /dev/null +++ b/src/hooks.client.ts @@ -0,0 +1,13 @@ +import { AppwriteException } from '@appwrite.io/console'; +import type { HandleClientError } from '@sveltejs/kit'; + +export const handleError: HandleClientError = async ({ error, message, status }) => { + if (error instanceof AppwriteException && error.code === 0) { + status = undefined; + message = error.message; + } + return { + message, + status + }; +}; diff --git a/src/lib/components/filters/content.svelte b/src/lib/components/filters/content.svelte index 450aa6375..023ed61ff 100644 --- a/src/lib/components/filters/content.svelte +++ b/src/lib/components/filters/content.svelte @@ -134,7 +134,7 @@ bind:value={operatorKey} /> {#if column && operator && !operator?.hideInput} -
    +
      {#if column.type === 'integer' || column.type === 'double'} {:else if column.type === 'boolean'} @@ -150,7 +150,7 @@ {:else} {/if} -
    + {/if} diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts index 4b3f68520..3919a26c3 100644 --- a/src/routes/+layout.ts +++ b/src/routes/+layout.ts @@ -13,9 +13,10 @@ export const ssr = false; export const load: LayoutLoad = async ({ depends, url }) => { depends(Dependencies.ACCOUNT); - redirectTo.set(url.searchParams.get('forceRedirect') || null); - - url.searchParams.delete('forceRedirect'); + if (url.searchParams.has('forceRedirect')) { + redirectTo.set(url.searchParams.get('forceRedirect') || null); + url.searchParams.delete('forceRedirect'); + } try { const account = await sdk.forConsole.account.get<{ organization?: string }>(); diff --git a/src/routes/console/+error.svelte b/src/routes/console/+error.svelte index 9a50e9be7..33d7695d1 100644 --- a/src/routes/console/+error.svelte +++ b/src/routes/console/+error.svelte @@ -6,7 +6,7 @@ - {$page.status} + {$page.error.status || 'Invalid Argument'} {$page.error.message} diff --git a/src/routes/console/organization-[organization]/+layout.ts b/src/routes/console/organization-[organization]/+layout.ts index cfd212057..79eba27f3 100644 --- a/src/routes/console/organization-[organization]/+layout.ts +++ b/src/routes/console/organization-[organization]/+layout.ts @@ -10,6 +10,7 @@ import { headerAlert } from '$lib/stores/headerAlert'; import ProjectsAtRisk from '$lib/components/billing/alerts/projectsAtRisk.svelte'; import { get } from 'svelte/store'; import { preferences } from '$lib/stores/preferences'; +import type { Organization } from '$lib/stores/organization'; export const load: LayoutLoad = async ({ params, depends }) => { depends(Dependencies.ORGANIZATION); @@ -37,7 +38,9 @@ export const load: LayoutLoad = async ({ params, depends }) => { return { header: Header, breadcrumbs: Breadcrumbs, - organization: await sdk.forConsole.teams.get(params.organization), + organization: await (sdk.forConsole.teams.get( + params.organization + ) as Promise), members: await sdk.forConsole.teams.listMemberships(params.organization) }; } catch (e) { diff --git a/src/routes/console/project-[project]/+error.svelte b/src/routes/console/project-[project]/+error.svelte index 243be6e42..be0053176 100644 --- a/src/routes/console/project-[project]/+error.svelte +++ b/src/routes/console/project-[project]/+error.svelte @@ -5,6 +5,6 @@ - {$page.status} + {$page.error.status || 'Invalid Argument'}

    {$page.error.message}

    diff --git a/src/routes/console/project-[project]/+layout.ts b/src/routes/console/project-[project]/+layout.ts index c25d0cd4c..156a24f34 100644 --- a/src/routes/console/project-[project]/+layout.ts +++ b/src/routes/console/project-[project]/+layout.ts @@ -5,6 +5,7 @@ import type { LayoutLoad } from './$types'; import { preferences } from '$lib/stores/preferences'; import { failedInvoice } from '$lib/stores/billing'; import { isCloud } from '$lib/system'; +import type { Organization } from '$lib/stores/organization'; export const load: LayoutLoad = async ({ params, depends }) => { depends(Dependencies.PROJECT); @@ -22,7 +23,7 @@ export const load: LayoutLoad = async ({ params, depends }) => { return { project, - organization: await sdk.forConsole.teams.get(project.teamId) + organization: await (sdk.forConsole.teams.get(project.teamId) as Promise) }; } catch (e) { error(e.code, e.message); diff --git a/src/routes/console/project-[project]/settings/usage/[[invoice]]/+page.ts b/src/routes/console/project-[project]/settings/usage/[[invoice]]/+page.ts index d29b1e799..2cb455ae0 100644 --- a/src/routes/console/project-[project]/settings/usage/[[invoice]]/+page.ts +++ b/src/routes/console/project-[project]/settings/usage/[[invoice]]/+page.ts @@ -1,24 +1,22 @@ +import type { Aggregation, Invoice } from '$lib/sdk/billing'; +import { accumulateUsage } from '$lib/sdk/usage'; import { getSdkForProject, sdk } from '$lib/stores/sdk'; import { Query } from '@appwrite.io/console'; import type { PageLoad } from './$types'; -import type { Organization } from '$lib/stores/organization'; -import type { Aggregation, Invoice } from '$lib/sdk/billing'; -import { accumulateUsage } from '$lib/sdk/usage'; export const load: PageLoad = async ({ params, parent }) => { const { invoice, project } = params; - const parentData = await parent(); - const org = parentData.organization as Organization; + const { organization } = await parent(); - let startDate: string = org.billingCurrentInvoiceDate; - let endDate: string = org.billingNextInvoiceDate; + let startDate: string = organization.billingCurrentInvoiceDate; + let endDate: string = organization.billingNextInvoiceDate; let currentInvoice: Invoice = undefined; let currentAggregation: Aggregation = undefined; if (invoice) { - currentInvoice = await sdk.forConsole.billing.getInvoice(org.$id, invoice); + currentInvoice = await sdk.forConsole.billing.getInvoice(organization.$id, invoice); currentAggregation = await sdk.forConsole.billing.getAggregation( - org.$id, + organization.$id, currentInvoice.aggregationId ); @@ -27,7 +25,7 @@ export const load: PageLoad = async ({ params, parent }) => { } const [invoices, usage] = await Promise.all([ - sdk.forConsole.billing.listInvoices(org.$id, [Query.orderDesc('from')]), + sdk.forConsole.billing.listInvoices(organization.$id, [Query.orderDesc('from')]), /** * Workaround because project id might not be populated yet. */ From e47c5f0a48407324a0cbbe6c19debea9df4204cf Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Sat, 24 Feb 2024 17:49:11 +0100 Subject: [PATCH 250/479] revert: remove exception helper --- src/lib/helpers/exceptions.ts | 1 - 1 file changed, 1 deletion(-) delete mode 100644 src/lib/helpers/exceptions.ts diff --git a/src/lib/helpers/exceptions.ts b/src/lib/helpers/exceptions.ts deleted file mode 100644 index d5196b555..000000000 --- a/src/lib/helpers/exceptions.ts +++ /dev/null @@ -1 +0,0 @@ -export class AppwriteInvalidArgumentException extends Error {} From 70bc6e45f04d638f73a10d2da56efdedd32821b1 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Sun, 25 Feb 2024 21:15:51 +1300 Subject: [PATCH 251/479] Add messaging to project services --- src/lib/stores/project-services.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/lib/stores/project-services.ts b/src/lib/stores/project-services.ts index cfa94f74a..d522855fd 100644 --- a/src/lib/stores/project-services.ts +++ b/src/lib/stores/project-services.ts @@ -40,6 +40,11 @@ function createServices() { method: ApiService.Locale, value: null }, + { + label: 'Messaging', + method: ApiService.Messaging, + value: null + }, { label: 'Storage', method: ApiService.Storage, @@ -98,6 +103,11 @@ function createServices() { method: ApiService.Locale, value: project.serviceStatusForLocale }, + { + label: 'Messaging', + method: ApiService.Messaging, + value: project.serviceStatusForMessaging + }, { label: 'Storage', method: ApiService.Storage, From 8984e161d395ac23d05b9703c1901cccae31d95e Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Sun, 25 Feb 2024 11:13:52 +0000 Subject: [PATCH 252/479] Detect migration resource values from names --- src/lib/stores/migration.ts | 32 ++++++++++--------- .../settings/migrations/details.svelte | 3 +- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/lib/stores/migration.ts b/src/lib/stores/migration.ts index ab8454ff9..84d07085f 100644 --- a/src/lib/stores/migration.ts +++ b/src/lib/stores/migration.ts @@ -35,21 +35,23 @@ export const createMigrationFormStore = () => { }; }; -const resources = [ - 'user', - 'team', - 'membership', - 'file', - 'bucket', - 'function', - 'environment variable', - 'deployment', - 'database', - 'collection', - 'index', - 'attribute', - 'document' -] as const; +export const ResourcesFriendly = { + user: { singular: 'User', plural: 'Users' }, + team: { singular: 'Team', plural: 'Teams' }, + membership: { singular: 'Membership', plural: 'Memberships' }, + file: { singular: 'File', plural: 'Files' }, + bucket: { singular: 'Bucket', plural: 'Buckets' }, + function: { singular: 'Function', plural: 'Functions' }, + 'environment variable': { singular: 'Environment Variable', plural: 'Environment Variables' }, + deployment: { singular: 'Deployment', plural: 'Deployments' }, + database: { singular: 'Database', plural: 'Databases' }, + collection: { singular: 'Collection', plural: 'Collections' }, + index: { singular: 'Index', plural: 'Indexes' }, + attribute: { singular: 'Attribute', plural: 'Attributes' }, + document: { singular: 'Document', plural: 'Documents' }, +}; + +const resources = Object.keys(ResourcesFriendly); type Resource = (typeof resources)[number]; diff --git a/src/routes/console/project-[project]/settings/migrations/details.svelte b/src/routes/console/project-[project]/settings/migrations/details.svelte index b34a617e6..564c5ac4d 100644 --- a/src/routes/console/project-[project]/settings/migrations/details.svelte +++ b/src/routes/console/project-[project]/settings/migrations/details.svelte @@ -6,6 +6,7 @@ import { parseIfString } from '$lib/helpers/object'; import { formatNum } from '$lib/helpers/string'; import type { Models } from '@appwrite.io/console'; + import { ResourcesFriendly } from '$lib/stores/migration' export let migrations: Models.Migration[] = []; export let migrationId: string = null; @@ -106,7 +107,7 @@
    - {entity + 's'} + {(total(Object.values(entityCounter)) > 1) ? ResourcesFriendly[entity].plural : ResourcesFriendly[entity].singular} {totalItems(entityCounter)}
    From ecb1b559654c3a0757f558abef45e75a2febf731 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Sun, 25 Feb 2024 11:39:37 +0000 Subject: [PATCH 253/479] Run Linter --- src/lib/stores/migration.ts | 2 +- .../project-[project]/settings/migrations/details.svelte | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/lib/stores/migration.ts b/src/lib/stores/migration.ts index 84d07085f..f6498f4b9 100644 --- a/src/lib/stores/migration.ts +++ b/src/lib/stores/migration.ts @@ -48,7 +48,7 @@ export const ResourcesFriendly = { collection: { singular: 'Collection', plural: 'Collections' }, index: { singular: 'Index', plural: 'Indexes' }, attribute: { singular: 'Attribute', plural: 'Attributes' }, - document: { singular: 'Document', plural: 'Documents' }, + document: { singular: 'Document', plural: 'Documents' } }; const resources = Object.keys(ResourcesFriendly); diff --git a/src/routes/console/project-[project]/settings/migrations/details.svelte b/src/routes/console/project-[project]/settings/migrations/details.svelte index 564c5ac4d..7fb707b7b 100644 --- a/src/routes/console/project-[project]/settings/migrations/details.svelte +++ b/src/routes/console/project-[project]/settings/migrations/details.svelte @@ -6,7 +6,7 @@ import { parseIfString } from '$lib/helpers/object'; import { formatNum } from '$lib/helpers/string'; import type { Models } from '@appwrite.io/console'; - import { ResourcesFriendly } from '$lib/stores/migration' + import { ResourcesFriendly } from '$lib/stores/migration'; export let migrations: Models.Migration[] = []; export let migrationId: string = null; @@ -107,7 +107,10 @@
    - {(total(Object.values(entityCounter)) > 1) ? ResourcesFriendly[entity].plural : ResourcesFriendly[entity].singular} + {total(Object.values(entityCounter)) > 1 + ? ResourcesFriendly[entity].plural + : ResourcesFriendly[entity].singular} {totalItems(entityCounter)}
    From 97493c3416be318751a7082302bedefee22c859b Mon Sep 17 00:00:00 2001 From: wess Date: Thu, 8 Feb 2024 09:50:07 -0500 Subject: [PATCH 254/479] working on preview spacing --- .../console/project-[project]/messaging/smsPhone.svelte | 2 +- .../project-[project]/messaging/wizard/smsFormList.svelte | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/smsPhone.svelte b/src/routes/console/project-[project]/messaging/smsPhone.svelte index 918b87220..fc82ed6d3 100644 --- a/src/routes/console/project-[project]/messaging/smsPhone.svelte +++ b/src/routes/console/project-[project]/messaging/smsPhone.svelte @@ -51,7 +51,7 @@ .phone { position: relative; width: 320px; - height: 539px; + height: 430px; background-image: url('./sms-preview-light.svg'); background-repeat: no-repeat; diff --git a/src/routes/console/project-[project]/messaging/wizard/smsFormList.svelte b/src/routes/console/project-[project]/messaging/wizard/smsFormList.svelte index 876639a2f..5627dcd5c 100644 --- a/src/routes/console/project-[project]/messaging/wizard/smsFormList.svelte +++ b/src/routes/console/project-[project]/messaging/wizard/smsFormList.svelte @@ -102,6 +102,6 @@ -
    - +
    +
    From 62a5cbc514798c87e8d4b201400e17a7f54c9257 Mon Sep 17 00:00:00 2001 From: wess Date: Thu, 8 Feb 2024 09:53:27 -0500 Subject: [PATCH 255/479] adjusted height of phone for preview --- .../console/project-[project]/messaging/smsPhone.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/smsPhone.svelte b/src/routes/console/project-[project]/messaging/smsPhone.svelte index fc82ed6d3..46191efd1 100644 --- a/src/routes/console/project-[project]/messaging/smsPhone.svelte +++ b/src/routes/console/project-[project]/messaging/smsPhone.svelte @@ -36,7 +36,7 @@
    {$project.name}
    -
    +
    Today {getTime()}
    @@ -51,7 +51,7 @@ .phone { position: relative; width: 320px; - height: 430px; + height: 410px; background-image: url('./sms-preview-light.svg'); background-repeat: no-repeat; From f196bcfb485adfb36324aabf32a3449471319bbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Sun, 25 Feb 2024 17:50:01 +0100 Subject: [PATCH 256/479] Fix 2FA deletion copy --- src/routes/console/account/deleteMfa.svelte | 8 ++++++-- .../auth/user-[user]/deleteMfa.svelte | 13 +++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/routes/console/account/deleteMfa.svelte b/src/routes/console/account/deleteMfa.svelte index 6b113e406..d1fc639f9 100644 --- a/src/routes/console/account/deleteMfa.svelte +++ b/src/routes/console/account/deleteMfa.svelte @@ -39,14 +39,18 @@ -

    Are you sure you want to delete this authentication method from your account?

    +

    + Deleting the authentication method will disable multi-factor authentication for your + account. To re-enable it, you'll need to add a new authentication method. +

    +

    Enter the 6-digit verification code generated by your authenticator app to continue.

    diff --git a/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte b/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte index 912fab0b1..06322677f 100644 --- a/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte +++ b/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte @@ -4,8 +4,6 @@ import { Modal } from '$lib/components'; import { Dependencies } from '$lib/constants'; import { Button } from '$lib/elements/forms'; - import FormList from '$lib/elements/forms/formList.svelte'; - import InputDigits from '$lib/elements/forms/inputDigits.svelte'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; import { AuthenticatorType } from '@appwrite.io/console'; @@ -13,7 +11,6 @@ export let showDelete = false; - let code: string; let error: string; async function deleteProvider() { @@ -34,23 +31,23 @@ } $: if (showDelete) { - code = ''; error = ''; } +

    + Deleting the authentication method will disable multi-factor authentication for this + account. To re-enable it, user will need to add a new authentication method. +

    Are you sure you want to delete this authentication method from your account?

    - - - From f8261e625598ea9c53f24ce0ed046c50fa6278b6 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Sun, 25 Feb 2024 22:50:49 +0100 Subject: [PATCH 257/479] remove unused import --- src/lib/components/id.svelte | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/components/id.svelte b/src/lib/components/id.svelte index f36e7002d..42aad2c8f 100644 --- a/src/lib/components/id.svelte +++ b/src/lib/components/id.svelte @@ -1,5 +1,4 @@ - - - Topics - - {@const sum = topics.length} - {#if sum} -
    - - - ID - Name - Subscribers - - - {#each topics.slice(offset, offset + limit) as topic (topic.$id)} - - - {topic.$id} - - - - {topic.name} - - - - {topic.smsTotal + topic.emailTotal + topic.pushTotal} - - - {/each} - -
    -
    -

    Total topics: {sum}

    - -
    -
    - {:else} - Edit the message to add a Topic - {/if} -
    -
    diff --git a/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte b/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte new file mode 100644 index 000000000..283f03064 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte @@ -0,0 +1,161 @@ + + +
    + + Topics + +
    +
    + Topic +
    + +
    + {@const sum = topicIds.length} + {#if sum} +
    + + + + + + + {#each topics.slice(offset, offset + limit) as topic (topic.$id)} + + +
    + + + + {topic.name} + + + ({getTotal(topic)} targets) + + +
    +
    + +
    + +
    +
    +
    + {/each} +
    +
    +
    +

    Total topics: {sum}

    + +
    +
    + {:else} + (showTopics = true)}>Add a Topic + {/if} +
    + + + +
    +
    + + { + showTopics = false; + topicsById = e.detail; + }} /> From 3d364d193810b01b547aa29e37232ade3c362e00 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Sun, 25 Feb 2024 17:50:01 -0800 Subject: [PATCH 259/479] feat(messaging): update the message targets card to allow updating --- .../messaging/message-[message]/+page.svelte | 7 +- .../message-[message]/targets.svelte | 62 ------ .../message-[message]/updateTargets.svelte | 182 ++++++++++++++++++ 3 files changed, 187 insertions(+), 64 deletions(-) delete mode 100644 src/routes/console/project-[project]/messaging/message-[message]/targets.svelte create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte diff --git a/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte index c10d41aac..daacb54fc 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte @@ -14,7 +14,7 @@ import { isValueOfStringEnum } from '$lib/helpers/types'; import { MessageStatus, MessagingProviderType } from '@appwrite.io/console'; import UpdateTopics from './updateTopics.svelte'; - import Targets from './targets.svelte'; + import UpdateTargets from './updateTargets.svelte'; import { onMount } from 'svelte'; export let data: PageData; @@ -121,7 +121,10 @@ messageId={$message.$id} messageType={$providerType} selectedTopicsById={data.topicsById} /> - + {#if $message.status !== MessageStatus.Processing} {/if} diff --git a/src/routes/console/project-[project]/messaging/message-[message]/targets.svelte b/src/routes/console/project-[project]/messaging/message-[message]/targets.svelte deleted file mode 100644 index ca3e6ae03..000000000 --- a/src/routes/console/project-[project]/messaging/message-[message]/targets.svelte +++ /dev/null @@ -1,62 +0,0 @@ - - - - Targets - - {@const sum = targets.length} - {#if sum} -
    - - - ID - Name - Identifier - - - {#each targets.slice(offset, offset + limit) as target (target.$id)} - - - {target.$id} - - - - {usersById[target.userId]?.name || 'Unknown'} - - - - {target.providerType === MessagingProviderType.Push - ? target.name - : target.identifier} - - - {/each} - -
    -
    -

    Total targets: {sum}

    - -
    -
    - {:else} - Edit the message to add a Target - {/if} -
    -
    diff --git a/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte b/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte new file mode 100644 index 000000000..bf7d3ddf4 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte @@ -0,0 +1,182 @@ + + +
    + + Targets + +
    +
    + Target +
    + +
    + {@const sum = targetIds.length} + {#if sum} +
    + + + + + + + + {#each targets.slice(offset, offset + limit) as target (target.$id)} + + +
    + + + + {#if target.providerType === MessagingProviderType.Push} + {target.name} + {:else} + {target.identifier} + {/if} + + +
    +
    + +
    + +
    +
    +
    + {/each} +
    +
    +
    +

    Total targets: {sum}

    + +
    +
    + {:else} + (showTargets = true)}>Add a Target + {/if} +
    + + + +
    +
    + + { + showTargets = false; + targetsById = e.detail; + }}> + Select existing targets to which you want to send this message. + From 87845fd7dd6fdbd988b0f5e053ccbe8ce512553a Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Sun, 25 Feb 2024 18:18:50 -0800 Subject: [PATCH 260/479] feat(messaging): rename the message preview cards and enable updating --- .../messaging/message-[message]/+page.svelte | 99 ++----------------- .../message-[message]/emailMessage.svelte | 66 +++++++++++++ .../message-[message]/emailPreview.svelte | 33 ------- .../message-[message]/pushMessage.svelte | 71 +++++++++++++ .../message-[message]/pushPreview.svelte | 33 ------- .../message-[message]/smsMessage.svelte | 64 ++++++++++++ .../message-[message]/smsPreview.svelte | 29 ------ 7 files changed, 208 insertions(+), 187 deletions(-) create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/emailMessage.svelte delete mode 100644 src/routes/console/project-[project]/messaging/message-[message]/emailPreview.svelte create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/pushMessage.svelte delete mode 100644 src/routes/console/project-[project]/messaging/message-[message]/pushPreview.svelte create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/smsMessage.svelte delete mode 100644 src/routes/console/project-[project]/messaging/message-[message]/smsPreview.svelte diff --git a/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte index daacb54fc..b8ebca83b 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte @@ -1,15 +1,12 @@ {#if $message.providerType === MessagingProviderType.Email} - + {:else if $message.providerType === MessagingProviderType.Sms} - + {:else if $message.providerType === MessagingProviderType.Push} - + {/if} + import { invalidate } from '$app/navigation'; + import { trackEvent, Submit, trackError } from '$lib/actions/analytics'; + import { CardGrid, Heading } from '$lib/components'; + import { Dependencies } from '$lib/constants'; + import { Button, Form, FormList, InputText, InputTextarea } from '$lib/elements/forms'; + import { addNotification } from '$lib/stores/notifications'; + import { sdk } from '$lib/stores/sdk'; + import type { Models } from '@appwrite.io/console'; + import { onMount } from 'svelte'; + + export let message: Models.Message & { data: Record }; + + let subject = ''; + let content = ''; + let disabled = true; + + onMount(() => { + subject = message.data.subject; + content = message.data.content; + }); + + async function update() { + try { + await sdk.forProject.messaging.updateEmail( + message.$id, + undefined, + undefined, + undefined, + subject, + content + ); + await invalidate(Dependencies.MESSAGING_MESSAGE); + addNotification({ + message: 'Message has been updated', + type: 'success' + }); + trackEvent(Submit.MessagingMessageUpdate); + } catch (error) { + addNotification({ + message: error.message, + type: 'error' + }); + trackError(error, Submit.MessagingMessageUpdate); + } + } + + $: disabled = subject === message.data.subject && content === message.data.content; + + +
    + +
    + Message +
    + + + + + + + + + +
    +
    diff --git a/src/routes/console/project-[project]/messaging/message-[message]/emailPreview.svelte b/src/routes/console/project-[project]/messaging/message-[message]/emailPreview.svelte deleted file mode 100644 index c6d5e051d..000000000 --- a/src/routes/console/project-[project]/messaging/message-[message]/emailPreview.svelte +++ /dev/null @@ -1,33 +0,0 @@ - - - -
    - Preview -
    - - - - - - -
    - -
    -
    -
    -
    diff --git a/src/routes/console/project-[project]/messaging/message-[message]/pushMessage.svelte b/src/routes/console/project-[project]/messaging/message-[message]/pushMessage.svelte new file mode 100644 index 000000000..fcc7a1802 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/pushMessage.svelte @@ -0,0 +1,71 @@ + + +
    + +
    + Message +
    + +
    +
    + + + + +
    +
    +
    + + + +
    +
    diff --git a/src/routes/console/project-[project]/messaging/message-[message]/pushPreview.svelte b/src/routes/console/project-[project]/messaging/message-[message]/pushPreview.svelte deleted file mode 100644 index eefb59c0a..000000000 --- a/src/routes/console/project-[project]/messaging/message-[message]/pushPreview.svelte +++ /dev/null @@ -1,33 +0,0 @@ - - - -
    - Preview -
    - -
    -
    - - - - - - -
    - -
    -
    -
    -
    diff --git a/src/routes/console/project-[project]/messaging/message-[message]/smsMessage.svelte b/src/routes/console/project-[project]/messaging/message-[message]/smsMessage.svelte new file mode 100644 index 000000000..8d0e63f15 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/smsMessage.svelte @@ -0,0 +1,64 @@ + + +
    + +
    + Message + +
    + + + + + + + + +
    +
    diff --git a/src/routes/console/project-[project]/messaging/message-[message]/smsPreview.svelte b/src/routes/console/project-[project]/messaging/message-[message]/smsPreview.svelte deleted file mode 100644 index 8e6e772bb..000000000 --- a/src/routes/console/project-[project]/messaging/message-[message]/smsPreview.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - - -
    - Preview - -
    - - - - -
    - -
    -
    -
    -
    From cb4a69adb627ccd82adf95ba88f143a32a971335 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Sun, 25 Feb 2024 21:54:14 -0800 Subject: [PATCH 261/479] fix(messaging): ensure scheduledAt is saved in draft messages --- .../console/project-[project]/messaging/wizard/step3.svelte | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/messaging/wizard/step3.svelte b/src/routes/console/project-[project]/messaging/wizard/step3.svelte index ba2e7be3b..c7ee27769 100644 --- a/src/routes/console/project-[project]/messaging/wizard/step3.svelte +++ b/src/routes/console/project-[project]/messaging/wizard/step3.svelte @@ -44,7 +44,6 @@ $messageParams[$providerType].status = MessageStatus.Processing; if (when === 'later') { $messageParams[$providerType].status = 'scheduled' as MessageStatus; - $messageParams[$providerType].scheduledAt = dateTime.toISOString(); } } @@ -61,6 +60,9 @@ ? new Date(now.getTime() - timeZoneOffset).toISOString().split('T')[1].substring(0, 5) : '00:00'; $: dateTime = new Date(`${date}T${time}`); + $: if (!isNaN(dateTime.getTime())) { + $messageParams[$providerType].scheduledAt = dateTime.toISOString(); + } From 2c9788bad802367bba524942b3e6966839cf2278 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Sun, 25 Feb 2024 22:29:00 -0800 Subject: [PATCH 262/479] fix(messaging): update message details to show scheduled/delivered at Only show when available. Othersise, hide the entire line. --- .../messaging/message-[message]/overview.svelte | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte b/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte index b9c95e2d8..7e0116886 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte @@ -42,7 +42,12 @@

    Created: {toLocaleDateTime($message.$createdAt)}

    -

    Scheduled at: {toLocaleDateTime(scheduledAt)}

    + {#if $message.scheduledAt} +

    Scheduled at: {toLocaleDateTime($message.scheduledAt)}

    + {/if} + {#if $message.deliveredAt} +

    Sent at: {toLocaleDateTime($message.deliveredAt)}

    + {/if}
    From 1d6a8017e1c9f4ffe981e08762674e30ec802937 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Sun, 25 Feb 2024 22:34:41 -0800 Subject: [PATCH 263/479] feat(messaging): update overview card to support scheduling and sending --- .../messaging/message-[message]/+page.svelte | 2 +- .../message-[message]/overview.svelte | 60 ++++---- .../message-[message]/scheduleModal.svelte | 144 ++++++++++++++++++ .../message-[message]/sendModal.svelte | 102 +++++++++++++ 4 files changed, 277 insertions(+), 31 deletions(-) create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/scheduleModal.svelte create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/sendModal.svelte diff --git a/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte index b8ebca83b..d542f2ed7 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte @@ -24,7 +24,7 @@ - + {#if $message.providerType === MessagingProviderType.Email} {:else if $message.providerType === MessagingProviderType.Sms} diff --git a/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte b/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte index 7e0116886..ce12622c6 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte @@ -4,38 +4,27 @@ import { message } from './store'; import ProviderType from '../providerType.svelte'; import MessageStatusPill from '../messageStatusPill.svelte'; - import { MessagingProviderType } from '@appwrite.io/console'; + import { MessagingProviderType, type Models } from '@appwrite.io/console'; import { Button } from '$lib/elements/forms'; import FailedModal from '../failedModal.svelte'; + import SendModal from './sendModal.svelte'; + import ScheduleModal from './scheduleModal.svelte'; - let scheduledAt: string = ''; + export let messageType: MessagingProviderType; + export let topics: Models.Topic[]; + + let showSend = false; + let showSchedule = false; let showFailed = false; let errors: string[] = []; - - if ($message.status === 'sent') { - scheduledAt = $message.deliveredAt; - } else if ($message.status === 'scheduled') { - scheduledAt = $message.scheduledAt; - } - - let providerType = 'Invalid provider type'; - switch ($message.providerType) { - case MessagingProviderType.Email: - providerType = 'Email'; - break; - case MessagingProviderType.Sms: - providerType = 'SMS'; - break; - case MessagingProviderType.Push: - providerType = 'Push'; - break; - } - +
    - {providerType} + + +
    @@ -56,14 +45,25 @@ - + {#if $message.status === 'draft' || $message.status === 'scheduled'} +
    + + +
    + {:else if $message.status === 'failed'} + + {/if}
    + + + + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/scheduleModal.svelte b/src/routes/console/project-[project]/messaging/message-[message]/scheduleModal.svelte new file mode 100644 index 000000000..2dc24a7fd --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/scheduleModal.svelte @@ -0,0 +1,144 @@ + + + +
    + +
    + + +
    +
    + + {#if !dateTime || isNaN(dateTime.getTime())} + The message will be sent later + {:else} + The message will be sent at {dateTime.toLocaleString('en', formatOptions)} + {/if} + +
    + + + + +
    diff --git a/src/routes/console/project-[project]/messaging/message-[message]/sendModal.svelte b/src/routes/console/project-[project]/messaging/message-[message]/sendModal.svelte new file mode 100644 index 000000000..ba06222b1 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/sendModal.svelte @@ -0,0 +1,102 @@ + + + +
    +

    + You are about to send a message to an estimated {totalTargets} targets. Would you like to proceed? +

    + +

    This action is irreversible.

    +
    + + + + +
    From 41a7caa6b5a33abf73e64c295376a72ac222a4f5 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Sun, 25 Feb 2024 22:47:03 -0800 Subject: [PATCH 264/479] refactor(messaging): remove unused update message wizard code --- .../{wizard.svelte => create.svelte} | 119 +----------------- .../messaging/createMessageDropdown.svelte | 7 +- .../messaging/wizard/emailFormList.svelte | 26 ++-- .../messaging/wizard/pushFormList.svelte | 26 ++-- .../messaging/wizard/smsFormList.svelte | 26 ++-- .../messaging/wizard/store.ts | 1 - 6 files changed, 34 insertions(+), 171 deletions(-) rename src/routes/console/project-[project]/messaging/{wizard.svelte => create.svelte} (54%) diff --git a/src/routes/console/project-[project]/messaging/wizard.svelte b/src/routes/console/project-[project]/messaging/create.svelte similarity index 54% rename from src/routes/console/project-[project]/messaging/wizard.svelte rename to src/routes/console/project-[project]/messaging/create.svelte index 4fbc93c55..1392df1ec 100644 --- a/src/routes/console/project-[project]/messaging/wizard.svelte +++ b/src/routes/console/project-[project]/messaging/create.svelte @@ -7,13 +7,12 @@ import { sdk } from '$lib/stores/sdk'; import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; import { addNotification } from '$lib/stores/notifications'; - import { goto, invalidate } from '$app/navigation'; + import { goto } from '$app/navigation'; import { base } from '$app/paths'; import { project } from '../store'; import { wizard } from '$lib/stores/wizard'; - import { providerType, messageParams, operation } from './wizard/store'; + import { providerType, messageParams } from './wizard/store'; import { ID, MessageStatus, MessagingProviderType, type Models } from '@appwrite.io/console'; - import { Dependencies } from '$lib/constants'; async function create() { try { @@ -112,115 +111,9 @@ } } - async function update() { - try { - let response: Models.Message; - - const messageId = $messageParams[$providerType].messageId; - - const params = $messageParams[$providerType]; - - console.log(params); - - switch ($providerType) { - case MessagingProviderType.Email: - response = await sdk.forProject.messaging.updateEmail( - messageId, - $messageParams[$providerType].topics, - $messageParams[$providerType].users, - $messageParams[$providerType].targets, - $messageParams[$providerType].subject, - $messageParams[$providerType].content, - $messageParams[$providerType].status, - $messageParams[$providerType].html, - undefined, - undefined, - $messageParams[$providerType].scheduledAt - ); - break; - case MessagingProviderType.Sms: - response = await sdk.forProject.messaging.updateSms( - messageId, - $messageParams[$providerType].topics, - $messageParams[$providerType].users, - $messageParams[$providerType].targets, - $messageParams[$providerType].content, - $messageParams[$providerType].status, - $messageParams[$providerType].scheduledAt - ); - break; - case MessagingProviderType.Push: - { - const customData: Record = {}; - const { data } = $messageParams[MessagingProviderType.Push]; - if (data && data.length > 0) { - data.forEach((item) => { - if (item[0] === '') return; - customData[item[0]] = item[1]; - }); - } - - response = await sdk.forProject.messaging.updatePush( - messageId, - $messageParams[$providerType].topics, - $messageParams[$providerType].users, - $messageParams[$providerType].targets, - $messageParams[$providerType].title, - $messageParams[$providerType].body, - customData, - undefined, - undefined, - undefined, - undefined, - undefined, - undefined, - undefined, - $messageParams[$providerType].status, - $messageParams[$providerType].scheduledAt - ); - } - break; - } - wizard.hide(); - let message = ''; - switch (response.status) { - case MessageStatus.Draft: - message = 'The message has been saved as draft.'; - break; - case MessageStatus.Processing: - message = 'The message is queued for processing.'; - break; - case 'scheduled': - // TODO: fix message status - message = 'The message has been scheduled.'; - break; - } - addNotification({ - type: 'success', - message - }); - await invalidate(Dependencies.MESSAGING_MESSAGE); - trackEvent(Submit.MessagingMessageUpdate, { - providerType: $providerType, - status: params.status - }); - await goto(`${base}/console/project-${$project.$id}/messaging/message-${response.$id}`); - } catch (error) { - addNotification({ - type: 'error', - message: error.message - }); - trackError(error, Submit.MessagingMessageUpdate); - } - } - async function saveDraft() { $messageParams[$providerType].status = MessageStatus.Draft; - if ($operation === 'create') { - create(); - } else { - update(); - } + create(); } const stepsComponents: WizardStepsType = new Map(); @@ -256,8 +149,4 @@ }); - + diff --git a/src/routes/console/project-[project]/messaging/createMessageDropdown.svelte b/src/routes/console/project-[project]/messaging/createMessageDropdown.svelte index f35e08683..4e23952a0 100644 --- a/src/routes/console/project-[project]/messaging/createMessageDropdown.svelte +++ b/src/routes/console/project-[project]/messaging/createMessageDropdown.svelte @@ -3,8 +3,8 @@ import { Button } from '$lib/elements/forms'; import { wizard } from '$lib/stores/wizard'; import { providers } from './providers/store'; - import Wizard from './wizard.svelte'; - import { messageParams, operation, providerType, targetsById } from './wizard/store'; + import Create from './create.svelte'; + import { messageParams, providerType, targetsById } from './wizard/store'; import { topicsById } from './store'; import { MessagingProviderType } from '@appwrite.io/console'; @@ -30,7 +30,6 @@ ) return; $providerType = type; - $operation = 'create'; $topicsById = {}; $targetsById = {}; const common = { @@ -62,7 +61,7 @@ break; } showCreateDropdown = false; - wizard.start(Wizard); + wizard.start(Create); }}> {option.name} diff --git a/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte b/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte index bcc6be1d6..60992f0dd 100644 --- a/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte +++ b/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte @@ -1,5 +1,5 @@ + +
    + {#if label} + + {/if} +
    +
    +
    +
    +
    +
    + Select a file to upload + Select a file to upload +
    +
    +
    + Max file size: 1MB + +
    + + {#if value} + {@const fileSize = humanFileSize(value.sizeOriginal)} +
      +
    • +
    • +
    + {/if} +
    +
    +
    + +{#if show} + +{/if} diff --git a/src/routes/console/project-[project]/messaging/wizard/pushFormList.svelte b/src/routes/console/project-[project]/messaging/wizard/pushFormList.svelte index 53c48900c..6565da45b 100644 --- a/src/routes/console/project-[project]/messaging/wizard/pushFormList.svelte +++ b/src/routes/console/project-[project]/messaging/wizard/pushFormList.svelte @@ -45,6 +45,7 @@ import { sdk } from '$lib/stores/sdk'; import PushPhone from '../pushPhone.svelte'; import { onMount } from 'svelte'; + import InputFilePicker from '$lib/elements/forms/inputFilePicker.svelte'; let showCustomId = false; let showTest = false; @@ -148,11 +149,17 @@
    - - - + + + + + + + + +
      {#each customData || [] as _, rowIndex} From 9e177877354f86ed40d684c56e5a601d1eb26935 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Mon, 26 Feb 2024 12:52:43 +0100 Subject: [PATCH 266/479] fix: leftovers --- src/lib/components/filePicker.svelte | 18 +++++++++++------- src/lib/elements/forms/inputFilePicker.svelte | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/lib/components/filePicker.svelte b/src/lib/components/filePicker.svelte index 3756f6b9c..0861b504b 100644 --- a/src/lib/components/filePicker.svelte +++ b/src/lib/components/filePicker.svelte @@ -225,6 +225,7 @@
    -
    - {#if files} - {#await files} + {#if files} + {#await files} +

    Loading files...

    - {:then response} +
    + {:then response} +
    {#if response.files?.length} {#if view === 'grid'}
      {/if} - {/await} - {/if} -
    +
    + {/await} + {/if} {/if}
    diff --git a/src/lib/elements/forms/inputFilePicker.svelte b/src/lib/elements/forms/inputFilePicker.svelte index fcd9d7edb..991f777e9 100644 --- a/src/lib/elements/forms/inputFilePicker.svelte +++ b/src/lib/elements/forms/inputFilePicker.svelte @@ -49,7 +49,7 @@
    + style:--box-border-radius="var(--border-radius-xsmall)">
  • {/each} From d825312315a821afb12f44dd4acbba12e548bf52 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Mon, 26 Feb 2024 13:33:20 +0100 Subject: [PATCH 268/479] fix: a11y --- src/lib/components/filePicker.svelte | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/lib/components/filePicker.svelte b/src/lib/components/filePicker.svelte index 1a72e220e..63a613fa8 100644 --- a/src/lib/components/filePicker.svelte +++ b/src/lib/components/filePicker.svelte @@ -21,6 +21,7 @@ import { writable } from 'svelte/store'; import { onMount } from 'svelte'; import Heading from './heading.svelte'; + import { clickOnEnter } from '$lib/helpers/a11y'; export let show: boolean; export let selectedBucket: string = null; @@ -224,12 +225,14 @@ - + @@ -261,13 +264,16 @@ style="--grid-gap:2rem; --grid-item-size:10rem; --grid-item-size-small-screens:8rem;"> {#each response.files as file}
  • - +
  • {/each} From 546dbce72594969501bc609916f4d05df53c6198 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Mon, 26 Feb 2024 14:04:01 +0100 Subject: [PATCH 269/479] fix button --- src/lib/components/filePicker.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/filePicker.svelte b/src/lib/components/filePicker.svelte index 63a613fa8..edbee1726 100644 --- a/src/lib/components/filePicker.svelte +++ b/src/lib/components/filePicker.svelte @@ -228,7 +228,7 @@ - {@const sum = targetIds.length} {#if sum} +
    +
    + Target +
    + +
    diff --git a/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte b/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte index 283f03064..3daa4feaa 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte @@ -81,22 +81,22 @@ Topics -
    -
    - Topic -
    - -
    {@const sum = topicIds.length} {#if sum} +
    +
    + Topic +
    + +
    From 57cd02825e0733cca5edcdb12783dd49b5fdfc13 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 26 Feb 2024 08:18:39 -0800 Subject: [PATCH 276/479] fix(messaging): use sentence case in topic/target empty state --- .../messaging/message-[message]/updateTargets.svelte | 2 +- .../messaging/message-[message]/updateTopics.svelte | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte b/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte index 18f43ca60..bfa045ca6 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte @@ -159,7 +159,7 @@ {:else} - (showTargets = true)}>Add a Target + (showTargets = true)}>Add a target {/if} diff --git a/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte b/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte index 3daa4feaa..30c7f5709 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte @@ -142,7 +142,7 @@ {:else} - (showTopics = true)}>Add a Topic + (showTopics = true)}>Add a topic {/if} From 722d918cc956d68d90e3cf11de633065f8b8c28b Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 26 Feb 2024 08:20:21 -0800 Subject: [PATCH 277/479] fix(messaging): make the send modal small It doesn't need that much space since it's just a little bit of content. --- .../messaging/message-[message]/sendModal.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/messaging/message-[message]/sendModal.svelte b/src/routes/console/project-[project]/messaging/message-[message]/sendModal.svelte index ba06222b1..1bc47006f 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/sendModal.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/sendModal.svelte @@ -86,7 +86,7 @@ }; - +

    You are about to send a message to an estimated Date: Mon, 26 Feb 2024 08:21:35 -0800 Subject: [PATCH 278/479] fix(messaging): make schedule message modal bigger Give the inputs a bit more room. --- .../messaging/message-[message]/scheduleModal.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/messaging/message-[message]/scheduleModal.svelte b/src/routes/console/project-[project]/messaging/message-[message]/scheduleModal.svelte index 2dc24a7fd..76bbef6ca 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/scheduleModal.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/scheduleModal.svelte @@ -119,7 +119,7 @@ $: dateTime = new Date(`${date}T${time}`); - +

    Date: Mon, 26 Feb 2024 08:31:33 -0800 Subject: [PATCH 279/479] fix(messaging): fix topics & targets empty state for non-draft Show empty search and link to docs since they shouldn't edit it. --- .../messaging/message-[message]/+page.svelte | 2 ++ .../message-[message]/updateTargets.svelte | 22 ++++++++++++++++--- .../message-[message]/updateTopics.svelte | 22 ++++++++++++++++--- 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte index d542f2ed7..3c0647e5c 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte @@ -35,10 +35,12 @@ {#if $message.status !== MessageStatus.Processing} diff --git a/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte b/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte index bfa045ca6..13abd4a0d 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte @@ -1,5 +1,5 @@ + + +
    +
    +

    +

    + + +
    + +

    + The connection to {webhook.url} stopped after {webhook.attempts} consecutive failures. Please refer to the logs below for more information or try to update the webhook to resolve this issue. +

    +
    + +
    +
    + + + + +
    diff --git a/src/routes/console/project-[project]/settings/webhooks/messageStatusPill.svelte b/src/routes/console/project-[project]/settings/webhooks/messageStatusPill.svelte new file mode 100644 index 000000000..be4d09a6e --- /dev/null +++ b/src/routes/console/project-[project]/settings/webhooks/messageStatusPill.svelte @@ -0,0 +1,22 @@ + + + + + + diff --git a/src/routes/console/project-[project]/settings/webhooks/store.ts b/src/routes/console/project-[project]/settings/webhooks/store.ts index 0154c8b7b..4d7bfd323 100644 --- a/src/routes/console/project-[project]/settings/webhooks/store.ts +++ b/src/routes/console/project-[project]/settings/webhooks/store.ts @@ -10,8 +10,8 @@ export const columns = writable([ { id: '$id', title: 'Webhook ID', type: 'string', show: true, width: 150 }, { id: 'name', title: 'Name', type: 'string', show: true, width: 120 }, { id: 'url', title: 'Post URL', type: 'string', show: true, width: 120 }, - { id: 'events', title: 'Events', type: 'string', show: true, width: 120 }, - { id: 'enabled', title: 'Enabled', type: 'string', show: true, width: 120 }, + { id: 'events', title: 'Events', type: 'string', show: true, width: 60 }, + { id: 'enabled', title: 'Status', type: 'string', show: true, width: 150 }, { id: '$createdAt', title: 'Created', type: 'datetime', show: true, width: 120 }, { id: '$updatedAt', title: 'Updated', type: 'datetime', show: true, width: 120 } ]); From 689df57642f5607e865fba4d726e4e60da65aa80 Mon Sep 17 00:00:00 2001 From: wess Date: Mon, 26 Feb 2024 11:52:18 -0500 Subject: [PATCH 281/479] Lint updateds --- src/lib/layout/containerHeader.svelte | 3 +- .../settings/webhooks/+page.svelte | 122 ++++++++---------- .../settings/webhooks/+page.ts | 12 +- .../settings/webhooks/failedModal.svelte | 29 ++--- .../webhooks/messageStatusPill.svelte | 22 ++-- 5 files changed, 81 insertions(+), 107 deletions(-) diff --git a/src/lib/layout/containerHeader.svelte b/src/lib/layout/containerHeader.svelte index 258d89c5c..0f6bf834d 100644 --- a/src/lib/layout/containerHeader.svelte +++ b/src/lib/layout/containerHeader.svelte @@ -168,7 +168,7 @@ {/if}
    - + {#if buttonText} {/if} - diff --git a/src/routes/console/project-[project]/settings/webhooks/+page.svelte b/src/routes/console/project-[project]/settings/webhooks/+page.svelte index a5ebd2c92..dbf8b2971 100644 --- a/src/routes/console/project-[project]/settings/webhooks/+page.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/+page.svelte @@ -7,10 +7,7 @@ - + - + From c6ed6604a03b06d3d6198e14f0478c9660dd9442 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 26 Feb 2024 08:53:38 -0800 Subject: [PATCH 282/479] refactor(messaging): update message detail cards to accept message param Rely less on global store for possibility to test in the future. --- .../messaging/message-[message]/+page.svelte | 14 ++------ .../message-[message]/overview.svelte | 33 +++++++++---------- .../message-[message]/scheduleModal.svelte | 15 ++++----- .../message-[message]/sendModal.svelte | 15 ++++----- .../message-[message]/updateTargets.svelte | 26 ++++++++------- .../message-[message]/updateTopics.svelte | 26 ++++++++------- 6 files changed, 63 insertions(+), 66 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte index 3c0647e5c..cf3ea176e 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte @@ -24,7 +24,7 @@ - + {#if $message.providerType === MessagingProviderType.Email} {:else if $message.providerType === MessagingProviderType.Sms} @@ -32,16 +32,8 @@ {:else if $message.providerType === MessagingProviderType.Push} {/if} - - + + {#if $message.status !== MessageStatus.Processing} {/if} diff --git a/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte b/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte index ce12622c6..2b08d0000 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte @@ -1,16 +1,15 @@ - +
    - + - +
    -

    Created: {toLocaleDateTime($message.$createdAt)}

    - {#if $message.scheduledAt} -

    Scheduled at: {toLocaleDateTime($message.scheduledAt)}

    +

    Created: {toLocaleDateTime(message.$createdAt)}

    + {#if message.scheduledAt} +

    Scheduled at: {toLocaleDateTime(message.scheduledAt)}

    {/if} - {#if $message.deliveredAt} -

    Sent at: {toLocaleDateTime($message.deliveredAt)}

    + {#if message.deliveredAt} +

    Sent at: {toLocaleDateTime(message.deliveredAt)}

    {/if}
    - +
    - {#if $message.status === 'draft' || $message.status === 'scheduled'} + {#if message.status === 'draft' || message.status === 'scheduled'}
    - {:else if $message.status === 'failed'} + {:else if message.status === 'failed'} {/if}
    - + - + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/scheduleModal.svelte b/src/routes/console/project-[project]/messaging/message-[message]/scheduleModal.svelte index 76bbef6ca..1b81dbd4c 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/scheduleModal.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/scheduleModal.svelte @@ -9,7 +9,6 @@ import { Dependencies } from '$lib/constants'; export let show = false; - export let messageType: MessagingProviderType; export let message: Models.Message & { data: Record }; export let topics: Models.Topic[]; @@ -35,11 +34,11 @@ }; for (const topic of topics) { - if (messageType == MessagingProviderType.Push) { + if (message.providerType == MessagingProviderType.Push) { totalTargets = totalTargets + topic.pushTotal; - } else if (messageType == MessagingProviderType.Email) { + } else if (message.providerType == MessagingProviderType.Email) { totalTargets = totalTargets + topic.emailTotal; - } else if (messageType == MessagingProviderType.Sms) { + } else if (message.providerType == MessagingProviderType.Sms) { totalTargets = totalTargets + topic.smsTotal; } } @@ -47,7 +46,7 @@ const update = async () => { const status = MessageStatus.Scheduled; try { - if (messageType == MessagingProviderType.Email) { + if (message.providerType == MessagingProviderType.Email) { await sdk.forProject.messaging.updateEmail( message.$id, undefined, @@ -61,7 +60,7 @@ undefined, dateTime.toISOString() ); - } else if (messageType == MessagingProviderType.Sms) { + } else if (message.providerType == MessagingProviderType.Sms) { await sdk.forProject.messaging.updateSms( message.$id, undefined, @@ -71,7 +70,7 @@ status, dateTime.toISOString() ); - } else if (messageType == MessagingProviderType.Push) { + } else if (message.providerType == MessagingProviderType.Push) { await sdk.forProject.messaging.updatePush( message.$id, undefined, @@ -97,7 +96,7 @@ type: 'success' }); trackEvent(Submit.MessagingMessageUpdate, { - providerType: messageType, + providerType: message.providerType, status }); show = false; diff --git a/src/routes/console/project-[project]/messaging/message-[message]/sendModal.svelte b/src/routes/console/project-[project]/messaging/message-[message]/sendModal.svelte index 1bc47006f..2bf51ef7f 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/sendModal.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/sendModal.svelte @@ -9,18 +9,17 @@ import { Dependencies } from '$lib/constants'; export let show = false; - export let messageType: MessagingProviderType; export let message: Models.Message & { data: Record }; export let topics: Models.Topic[]; let totalTargets = message.targets?.length ?? 0; for (const topic of topics) { - if (messageType == MessagingProviderType.Push) { + if (message.providerType == MessagingProviderType.Push) { totalTargets = totalTargets + topic.pushTotal; - } else if (messageType == MessagingProviderType.Email) { + } else if (message.providerType == MessagingProviderType.Email) { totalTargets = totalTargets + topic.emailTotal; - } else if (messageType == MessagingProviderType.Sms) { + } else if (message.providerType == MessagingProviderType.Sms) { totalTargets = totalTargets + topic.smsTotal; } } @@ -28,7 +27,7 @@ const update = async () => { const status = MessageStatus.Processing; try { - if (messageType == MessagingProviderType.Email) { + if (message.providerType == MessagingProviderType.Email) { await sdk.forProject.messaging.updateEmail( message.$id, undefined, @@ -38,7 +37,7 @@ undefined, status ); - } else if (messageType == MessagingProviderType.Sms) { + } else if (message.providerType == MessagingProviderType.Sms) { await sdk.forProject.messaging.updateSms( message.$id, undefined, @@ -47,7 +46,7 @@ undefined, status ); - } else if (messageType == MessagingProviderType.Push) { + } else if (message.providerType == MessagingProviderType.Push) { await sdk.forProject.messaging.updatePush( message.$id, undefined, @@ -72,7 +71,7 @@ type: 'success' }); trackEvent(Submit.MessagingMessageUpdate, { - providerType: messageType, + providerType: message.providerType, status }); show = false; diff --git a/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte b/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte index 13abd4a0d..ba729f0d0 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte @@ -18,12 +18,12 @@ import { addNotification } from '$lib/stores/notifications'; import { Button, Form } from '$lib/elements/forms'; import UserTargetsModal from '../userTargetsModal.svelte'; + import { isValueOfStringEnum } from '$lib/helpers/types'; - export let messageId: string; - export let messageType: MessagingProviderType; - export let messageStatus: string; + export let message: Models.Message & { data: Record }; export let selectedTargetsById: Record; + let providerType: MessagingProviderType; let offset = 0; const limit = 10; let showTargets = false; @@ -32,6 +32,10 @@ let targets: Models.Target[] = []; let disabled = true; + if (isValueOfStringEnum(MessagingProviderType, message.providerType)) { + providerType = message.providerType; + } + onMount(() => { targetsById = { ...selectedTargetsById }; }); @@ -43,23 +47,23 @@ async function update() { try { - if (messageType == MessagingProviderType.Email) { + if (message.providerType == MessagingProviderType.Email) { await sdk.forProject.messaging.updateEmail( - messageId, + message.$id, undefined, undefined, targetIds ); - } else if (messageType == MessagingProviderType.Sms) { + } else if (message.providerType == MessagingProviderType.Sms) { await sdk.forProject.messaging.updateSms( - messageId, + message.$id, undefined, undefined, targetIds ); - } else if (messageType == MessagingProviderType.Push) { + } else if (message.providerType == MessagingProviderType.Push) { await sdk.forProject.messaging.updatePush( - messageId, + message.$id, undefined, undefined, targetIds @@ -159,7 +163,7 @@
    - {:else if messageStatus == MessageStatus.Draft} + {:else if message.status == MessageStatus.Draft} (showTargets = true)}>Add a target {:else} @@ -186,7 +190,7 @@ { diff --git a/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte b/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte index ba41efaf4..d0f1da8b6 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte @@ -19,12 +19,12 @@ import { Form, Button } from '$lib/elements/forms'; import { onMount } from 'svelte'; import { getTotal } from '../wizard/store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; - export let messageId: string; - export let messageType: MessagingProviderType; - export let messageStatus: string; + export let message: Models.Message; export let selectedTopicsById: Record; + let providerType: MessagingProviderType; let offset = 0; const limit = 10; let showTopics = false; @@ -33,6 +33,10 @@ let topics: Models.Topic[] = []; let disabled = true; + if (isValueOfStringEnum(MessagingProviderType, message.providerType)) { + providerType = message.providerType; + } + onMount(() => { topicsById = { ...selectedTopicsById }; }); @@ -44,12 +48,12 @@ async function update() { try { - if (messageType == MessagingProviderType.Email) { - await sdk.forProject.messaging.updateEmail(messageId, topicIds); - } else if (messageType == MessagingProviderType.Sms) { - await sdk.forProject.messaging.updateSms(messageId, topicIds); - } else if (messageType == MessagingProviderType.Push) { - await sdk.forProject.messaging.updatePush(messageId, topicIds); + if (message.providerType == MessagingProviderType.Email) { + await sdk.forProject.messaging.updateEmail(message.$id, topicIds); + } else if (message.providerType == MessagingProviderType.Sms) { + await sdk.forProject.messaging.updateSms(message.$id, topicIds); + } else if (message.providerType == MessagingProviderType.Push) { + await sdk.forProject.messaging.updatePush(message.$id, topicIds); } await invalidate(Dependencies.MESSAGING_MESSAGE); addNotification({ @@ -142,7 +146,7 @@ - {:else if messageStatus == MessageStatus.Draft} + {:else if message.status == MessageStatus.Draft} (showTopics = true)}>Add a topic {:else} @@ -168,7 +172,7 @@ { From bc9ddf084e261b2df965c88d4613075f7dbd1b32 Mon Sep 17 00:00:00 2001 From: wess Date: Mon, 26 Feb 2024 11:54:40 -0500 Subject: [PATCH 283/479] lint fixes --- .../project-[project]/settings/webhooks/failedModal.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte index 9b282e914..21274b7e1 100644 --- a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte @@ -7,7 +7,7 @@ import Button from '$lib/elements/forms/button.svelte'; export let show: boolean; - export let webhook: { [key: string]: any }; + export let webhook: { [key: string]: string|number|boolean }; const projectId = $page.params.project; const webhookPath = `${base}/console/project-${projectId}/settings/webhooks/${webhook.$id}`; From 91e38b32e9cd0261b766208fc144e849995aa675 Mon Sep 17 00:00:00 2001 From: wess Date: Mon, 26 Feb 2024 12:02:05 -0500 Subject: [PATCH 284/479] Lint fixes --- .../project-[project]/settings/webhooks/failedModal.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte index 21274b7e1..c73bb51fe 100644 --- a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte @@ -7,7 +7,7 @@ import Button from '$lib/elements/forms/button.svelte'; export let show: boolean; - export let webhook: { [key: string]: string|number|boolean }; + export let webhook: { [key: string]: string | number | boolean }; const projectId = $page.params.project; const webhookPath = `${base}/console/project-${projectId}/settings/webhooks/${webhook.$id}`; From 1827f4642ee5a0632bac72bd7106e88643114f96 Mon Sep 17 00:00:00 2001 From: wess Date: Mon, 26 Feb 2024 12:04:25 -0500 Subject: [PATCH 285/479] Lint fixes --- .../project-[project]/settings/webhooks/failedModal.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte index c73bb51fe..b3ce80f03 100644 --- a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte @@ -7,7 +7,7 @@ import Button from '$lib/elements/forms/button.svelte'; export let show: boolean; - export let webhook: { [key: string]: string | number | boolean }; + export let webhook: { [key: string | number]: string | number | boolean }; const projectId = $page.params.project; const webhookPath = `${base}/console/project-${projectId}/settings/webhooks/${webhook.$id}`; From 21e1719fbaacf0709f9f2d0d4e5b863ff34a63ca Mon Sep 17 00:00:00 2001 From: wess Date: Mon, 26 Feb 2024 12:09:34 -0500 Subject: [PATCH 286/479] Lint fixes --- .../project-[project]/settings/webhooks/failedModal.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte index b3ce80f03..201517a50 100644 --- a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte @@ -7,7 +7,7 @@ import Button from '$lib/elements/forms/button.svelte'; export let show: boolean; - export let webhook: { [key: string | number]: string | number | boolean }; + export let webhook: { [key: string ]: any }; const projectId = $page.params.project; const webhookPath = `${base}/console/project-${projectId}/settings/webhooks/${webhook.$id}`; From 3575083c89db3d4ada8e7610beb3d88dd4fab010 Mon Sep 17 00:00:00 2001 From: wess Date: Mon, 26 Feb 2024 12:14:42 -0500 Subject: [PATCH 287/479] Fixing spacing --- .../project-[project]/settings/webhooks/failedModal.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte index 201517a50..9b282e914 100644 --- a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte @@ -7,7 +7,7 @@ import Button from '$lib/elements/forms/button.svelte'; export let show: boolean; - export let webhook: { [key: string ]: any }; + export let webhook: { [key: string]: any }; const projectId = $page.params.project; const webhookPath = `${base}/console/project-${projectId}/settings/webhooks/${webhook.$id}`; From 4410d6000fb24a7a67bb7e8ca025a48d19f56d27 Mon Sep 17 00:00:00 2001 From: wess Date: Mon, 26 Feb 2024 12:23:21 -0500 Subject: [PATCH 288/479] Fixes imports --- .../project-[project]/settings/webhooks/failedModal.svelte | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte index 9b282e914..e2238671a 100644 --- a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte @@ -5,9 +5,10 @@ import Code from '$lib/components/code.svelte'; import Modal from '$lib/components/modal.svelte'; import Button from '$lib/elements/forms/button.svelte'; + import {type Models} from '@appwrite.io/console'; export let show: boolean; - export let webhook: { [key: string]: any }; + export let webhook: Models.Webhook; const projectId = $page.params.project; const webhookPath = `${base}/console/project-${projectId}/settings/webhooks/${webhook.$id}`; From 65daa89003459fcb7d224820a504ebd2f9af38d9 Mon Sep 17 00:00:00 2001 From: wess Date: Mon, 26 Feb 2024 12:25:54 -0500 Subject: [PATCH 289/479] Fixes imports --- .../console/project-[project]/settings/webhooks/+page.svelte | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/settings/webhooks/+page.svelte b/src/routes/console/project-[project]/settings/webhooks/+page.svelte index dbf8b2971..b6cb4e930 100644 --- a/src/routes/console/project-[project]/settings/webhooks/+page.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/+page.svelte @@ -24,6 +24,7 @@ import type { PageData } from './$types'; import { columns } from './store'; import { updateCommandGroupRanks } from '$lib/commandCenter'; + import {type Models} from '@appwrite.io/console'; import Create from './createWebhook.svelte'; import FailedModal from './failedModal.svelte'; import MessageStatusPill from './messageStatusPill.svelte'; @@ -31,7 +32,7 @@ export let data: PageData; let showFailed = false; - let selectedWebhook = {}; + let selectedWebhook:Models.Webhook function openWizard() { wizard.start(Create); From 2ed97400fea1edfff549061ac2319f74d906a576 Mon Sep 17 00:00:00 2001 From: wess Date: Mon, 26 Feb 2024 12:27:36 -0500 Subject: [PATCH 290/479] Lint updates --- .../console/project-[project]/settings/webhooks/+page.svelte | 4 ++-- .../project-[project]/settings/webhooks/failedModal.svelte | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/routes/console/project-[project]/settings/webhooks/+page.svelte b/src/routes/console/project-[project]/settings/webhooks/+page.svelte index b6cb4e930..351aaad9a 100644 --- a/src/routes/console/project-[project]/settings/webhooks/+page.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/+page.svelte @@ -24,7 +24,7 @@ import type { PageData } from './$types'; import { columns } from './store'; import { updateCommandGroupRanks } from '$lib/commandCenter'; - import {type Models} from '@appwrite.io/console'; + import { type Models } from '@appwrite.io/console'; import Create from './createWebhook.svelte'; import FailedModal from './failedModal.svelte'; import MessageStatusPill from './messageStatusPill.svelte'; @@ -32,7 +32,7 @@ export let data: PageData; let showFailed = false; - let selectedWebhook:Models.Webhook + let selectedWebhook: Models.Webhook; function openWizard() { wizard.start(Create); diff --git a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte index e2238671a..3bf4c27a8 100644 --- a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte @@ -5,7 +5,7 @@ import Code from '$lib/components/code.svelte'; import Modal from '$lib/components/modal.svelte'; import Button from '$lib/elements/forms/button.svelte'; - import {type Models} from '@appwrite.io/console'; + import { type Models } from '@appwrite.io/console'; export let show: boolean; export let webhook: Models.Webhook; From 98b16920a817ab723aebfa742d277ff7870f46c4 Mon Sep 17 00:00:00 2001 From: wess Date: Mon, 26 Feb 2024 13:34:37 -0500 Subject: [PATCH 291/479] Fixes issue where null webhook would cause failure --- .../console/project-[project]/settings/webhooks/+page.svelte | 3 --- .../project-[project]/settings/webhooks/failedModal.svelte | 4 +++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/routes/console/project-[project]/settings/webhooks/+page.svelte b/src/routes/console/project-[project]/settings/webhooks/+page.svelte index 351aaad9a..057859cb0 100644 --- a/src/routes/console/project-[project]/settings/webhooks/+page.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/+page.svelte @@ -41,8 +41,6 @@ const projectId = $page.params.project; $: $updateCommandGroupRanks({ webhooks: 20, domains: 10 }); - - console.log(data.webhooks); @@ -101,7 +99,6 @@ link on:click={(e) => { e.preventDefault(); - console.log(webhook); selectedWebhook = webhook; showFailed = true; }}>Details diff --git a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte index 3bf4c27a8..32761aaf0 100644 --- a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte @@ -11,7 +11,9 @@ export let webhook: Models.Webhook; const projectId = $page.params.project; - const webhookPath = `${base}/console/project-${projectId}/settings/webhooks/${webhook.$id}`; + const webhookPath = webhook + ? `${base}/console/project-${projectId}/settings/webhooks/` + (webhook['$id'] ?? '') + : ''; From 88f661149bcaba9368a997aa0df697e661b65baa Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 26 Feb 2024 11:41:07 -0800 Subject: [PATCH 292/479] fix(messaging): show cancel and reschedule for scheduled messages --- .../messaging/message-[message]/overview.svelte | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte b/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte index 2b08d0000..3373321cc 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte @@ -3,7 +3,7 @@ import { toLocaleDateTime } from '$lib/helpers/date'; import ProviderType from '../providerType.svelte'; import MessageStatusPill from '../messageStatusPill.svelte'; - import { type Models } from '@appwrite.io/console'; + import { MessageStatus, type Models } from '@appwrite.io/console'; import { Button } from '$lib/elements/forms'; import FailedModal from '../failedModal.svelte'; import SendModal from './sendModal.svelte'; @@ -44,11 +44,16 @@
    - {#if message.status === 'draft' || message.status === 'scheduled'} + {#if message.status === MessageStatus.Draft}
    + {:else if message.status === MessageStatus.Scheduled} +
    + + +
    {:else if message.status === 'failed'} + {#if message.status == MessageStatus.Draft} + + {/if}
    @@ -141,17 +143,19 @@ -
    - +
    diff --git a/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte b/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte index d0f1da8b6..f2ef9f55c 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte @@ -83,7 +83,7 @@ - + Topics {@const sum = topicIds.length} @@ -92,15 +92,17 @@
    Topic
    - + {#if message.status == MessageStatus.Draft} + + {/if}
    @@ -125,16 +127,19 @@ -
    - +
    From bd9bf4cb699037c6a1dcd7953c0c024f8eac5c6c Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 26 Feb 2024 13:02:55 -0800 Subject: [PATCH 294/479] feat(messaging): add custom data to message details --- .../message-[message]/pushMessage.svelte | 109 +++++++++++++++++- 1 file changed, 105 insertions(+), 4 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/message-[message]/pushMessage.svelte b/src/routes/console/project-[project]/messaging/message-[message]/pushMessage.svelte index c882c88fb..f9bd9398d 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/pushMessage.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/pushMessage.svelte @@ -1,6 +1,16 @@ @@ -69,7 +106,71 @@ label="Message" disabled={message.status != MessageStatus.Draft} bind:value={body}> -
    + + + + +
    +
      + {#each customData || [] as _, rowIndex} + + + + + + + + + {/each} +
    + {#if dataError} + {dataError} + {/if} + +
    + From 3c1219dc234aff0f78e5b500781fec5f457d010d Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 26 Feb 2024 14:52:53 -0800 Subject: [PATCH 295/479] fix(messaging): add html mode switch to email message --- .../message-[message]/emailMessage.svelte | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/message-[message]/emailMessage.svelte b/src/routes/console/project-[project]/messaging/message-[message]/emailMessage.svelte index fa4e9154f..d3b046d8c 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/emailMessage.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/emailMessage.svelte @@ -3,7 +3,7 @@ import { trackEvent, Submit, trackError } from '$lib/actions/analytics'; import { CardGrid, Heading } from '$lib/components'; import { Dependencies } from '$lib/constants'; - import { Button, Form, FormList, InputText, InputTextarea } from '$lib/elements/forms'; + import { Button, Form, FormList, InputSwitch, InputText, InputTextarea } from '$lib/elements/forms'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; import { MessageStatus, type Models } from '@appwrite.io/console'; @@ -13,11 +13,13 @@ let subject = ''; let content = ''; + let html = false; let disabled = true; onMount(() => { subject = message.data.subject; content = message.data.content; + html = (message.data['html'] ?? false) as boolean; }); async function update() { @@ -28,7 +30,9 @@ undefined, undefined, subject, - content + content, + undefined, + html ); await invalidate(Dependencies.MESSAGING_MESSAGE); addNotification({ @@ -45,7 +49,7 @@ } } - $: disabled = subject === message.data.subject && content === message.data.content; + $: disabled = subject === message.data.subject && content === message.data.content && html === (message.data['html'] ?? false) as boolean;
    @@ -65,6 +69,11 @@ label="Message" disabled={message.status != MessageStatus.Draft} bind:value={content}> + + + Enable the HTML mode if your message contains HTML tags. + +
    From 8d1934f303d10204a5ccf76032bb8ff29dec3b51 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 26 Feb 2024 14:54:30 -0800 Subject: [PATCH 296/479] fix(messaging): update topics/targets confirmation message --- .../messaging/message-[message]/updateTargets.svelte | 2 +- .../messaging/message-[message]/updateTopics.svelte | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte b/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte index 159c2299a..c4a1ca0db 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte @@ -71,7 +71,7 @@ } await invalidate(Dependencies.MESSAGING_MESSAGE); addNotification({ - message: 'Message has been updated', + message: 'Targets have been updated', type: 'success' }); trackEvent(Submit.MessagingMessageUpdate); diff --git a/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte b/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte index f2ef9f55c..96dd7ab4c 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte @@ -57,7 +57,7 @@ } await invalidate(Dependencies.MESSAGING_MESSAGE); addNotification({ - message: 'Message has been updated', + message: 'Topics have been updated', type: 'success' }); trackEvent(Submit.MessagingMessageUpdate); From 2d3c7ef5201bcfc244b56d36e2313a49af7fcf6c Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 26 Feb 2024 15:05:26 -0800 Subject: [PATCH 297/479] feat(messaging): support cancelling a scheduled message Update status to draft. --- .../message-[message]/cancelModal.svelte | 92 +++++++++++++++++++ .../message-[message]/overview.svelte | 8 +- 2 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/cancelModal.svelte diff --git a/src/routes/console/project-[project]/messaging/message-[message]/cancelModal.svelte b/src/routes/console/project-[project]/messaging/message-[message]/cancelModal.svelte new file mode 100644 index 000000000..504b67a54 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/cancelModal.svelte @@ -0,0 +1,92 @@ + + + +
    +

    + Are you sure you want to cancel the scheduling of {message.data.title ?? message.data.subject ?? message.data.content ?? 'Message'}? +

    +
    + + + +
    diff --git a/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte b/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte index 3373321cc..d020e9b99 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte @@ -8,12 +8,14 @@ import FailedModal from '../failedModal.svelte'; import SendModal from './sendModal.svelte'; import ScheduleModal from './scheduleModal.svelte'; - + import CancelModal from './cancelModal.svelte'; + export let message: Models.Message & { data: Record }; export let topics: Models.Topic[]; let showSend = false; let showSchedule = false; + let showCancel = false; let showFailed = false; let errors: string[] = []; @@ -51,7 +53,7 @@ {:else if message.status === MessageStatus.Scheduled}
    - +
    {:else if message.status === 'failed'} @@ -70,4 +72,6 @@ + + From e9333da83d27bd6ad758b210158354b0c7057d35 Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Mon, 26 Feb 2024 12:15:47 +0000 Subject: [PATCH 298/479] fix: wizards copy --- src/lib/wizards/functions/steps/executeAccess.svelte | 2 +- src/routes/console/(migration-wizard)/step2.svelte | 2 +- .../console/organization-[organization]/wizard/step1.svelte | 2 +- .../collection-[collection]/wizard/step1.svelte | 2 +- .../console/project-[project]/functions/wizard/step1.svelte | 2 +- .../console/project-[project]/overview/keys/wizard/step1.svelte | 2 +- .../project-[project]/settings/migrations/(import)/step1.svelte | 2 +- .../project-[project]/settings/migrations/(import)/step2.svelte | 2 +- .../project-[project]/settings/webhooks/wizard/step1.svelte | 2 +- .../storage/bucket-[bucket]/create-file/step1.svelte | 2 +- .../storage/bucket-[bucket]/create-file/step2.svelte | 2 +- .../console/wizard/cloudOrganization/inviteMembers.svelte | 2 +- .../wizard/cloudOrganizationChangeTier/inviteMembers.svelte | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/lib/wizards/functions/steps/executeAccess.svelte b/src/lib/wizards/functions/steps/executeAccess.svelte index 6d0e7c29d..6972bb2f6 100644 --- a/src/lib/wizards/functions/steps/executeAccess.svelte +++ b/src/lib/wizards/functions/steps/executeAccess.svelte @@ -5,7 +5,7 @@ - Execution permissions + Permissions Choose who can execute this function using the client API. For more information, visit our - Select resources + Resources Select the resources you need to migrate to Appwrite. Some resources can be migrated, but with limitations. - Project Details + Project details - Create data + Data Provide document data based on attributes you created earlier. diff --git a/src/routes/console/project-[project]/functions/wizard/step1.svelte b/src/routes/console/project-[project]/functions/wizard/step1.svelte index 17408aacb..8700c7bbe 100644 --- a/src/routes/console/project-[project]/functions/wizard/step1.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step1.svelte @@ -20,7 +20,7 @@ - Configuration function + Configuration Create your new Appwrite Function. - Create an API key + API key Let's create an API key. - Select source + Source Select a source platform with the project you want to migrate. - Select source + Resources Select the resources you need to migrate to Appwrite. Some resources can be migrated, but with limitations. - Add your webhook + Webhook configuration Use webhooks to build integrations that subscribe to specific events on Appwrite. Appwrite will send an HTTP POST payload to the webhook's configured URL when one of the specified diff --git a/src/routes/console/project-[project]/storage/bucket-[bucket]/create-file/step1.svelte b/src/routes/console/project-[project]/storage/bucket-[bucket]/create-file/step1.svelte index 8453a8ee0..77a953bc6 100644 --- a/src/routes/console/project-[project]/storage/bucket-[bucket]/create-file/step1.svelte +++ b/src/routes/console/project-[project]/storage/bucket-[bucket]/create-file/step1.svelte @@ -18,7 +18,7 @@ - Create file + File Upload a file to add it to your bucket. {#if isCloud} diff --git a/src/routes/console/project-[project]/storage/bucket-[bucket]/create-file/step2.svelte b/src/routes/console/project-[project]/storage/bucket-[bucket]/create-file/step2.svelte index 6a98039ef..58363e57d 100644 --- a/src/routes/console/project-[project]/storage/bucket-[bucket]/create-file/step2.svelte +++ b/src/routes/console/project-[project]/storage/bucket-[bucket]/create-file/step2.svelte @@ -7,7 +7,7 @@ - Update Permissions + Permissions Choose who can access your buckets and files. For more information, check out the - Invite organization members + Invites Invite team members to collaborate with you in the Appwrite console. Members will have access to all services and payment data within your organization. diff --git a/src/routes/console/wizard/cloudOrganizationChangeTier/inviteMembers.svelte b/src/routes/console/wizard/cloudOrganizationChangeTier/inviteMembers.svelte index 94d86e267..0695e7e0f 100644 --- a/src/routes/console/wizard/cloudOrganizationChangeTier/inviteMembers.svelte +++ b/src/routes/console/wizard/cloudOrganizationChangeTier/inviteMembers.svelte @@ -52,7 +52,7 @@ - Invite organization members + Invites Invite team members to collaborate with you in the Appwrite console. Members will have access to all services and payment data within your organization. From 88a99b702ce80249d4c08a856db758c1746c9c81 Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Mon, 26 Feb 2024 12:18:18 +0000 Subject: [PATCH 299/479] fix: more wizard --- .../console/organization-[organization]/wizard/step1.svelte | 2 +- .../project-[project]/settings/webhooks/wizard/step1.svelte | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/console/organization-[organization]/wizard/step1.svelte b/src/routes/console/organization-[organization]/wizard/step1.svelte index bb7577386..612fd11fc 100644 --- a/src/routes/console/organization-[organization]/wizard/step1.svelte +++ b/src/routes/console/organization-[organization]/wizard/step1.svelte @@ -9,7 +9,7 @@ - Project details + Details - Webhook configuration + Configuration Use webhooks to build integrations that subscribe to specific events on Appwrite. Appwrite will send an HTTP POST payload to the webhook's configured URL when one of the specified From 59154148c78e0b90193e31aa0e9e202c27c54160 Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Mon, 26 Feb 2024 12:29:28 +0000 Subject: [PATCH 300/479] fix: big wizard audit --- src/lib/pages/domains/wizard/step1.svelte | 2 +- src/routes/console/(migration-wizard)/step1.svelte | 1 + .../billing/wizard/addCredit.svelte | 2 +- .../billing/wizard/paymentDetails.svelte | 2 +- .../overview/keys/wizard/step2.svelte | 2 +- .../overview/platforms/wizard/android/step1.svelte | 2 +- .../overview/platforms/wizard/android/step2.svelte | 1 + .../overview/platforms/wizard/android/step3.svelte | 1 + .../overview/platforms/wizard/apple/step1.svelte | 2 +- .../overview/platforms/wizard/apple/step2.svelte | 1 + .../overview/platforms/wizard/apple/step3.svelte | 1 + .../overview/platforms/wizard/flutter/step1.svelte | 12 ++++++------ .../overview/platforms/wizard/flutter/step2.svelte | 1 + .../overview/platforms/wizard/flutter/step3.svelte | 1 + .../overview/platforms/wizard/step4.svelte | 1 + .../overview/platforms/wizard/web/step1.svelte | 2 +- .../overview/platforms/wizard/web/step2.svelte | 1 + .../wizard/cloudOrganization/confirmDetails.svelte | 2 +- .../cloudOrganizationChangeTier/choosePlan.svelte | 2 +- .../confirmDetails.svelte | 4 ++-- .../cloudOrganizationChangeTier/usageExcess.svelte | 5 +++-- src/routes/console/wizard/feedback/step1.svelte | 1 + src/routes/console/wizard/feedback/step2.svelte | 1 + src/routes/console/wizard/support/step1.svelte | 1 + 24 files changed, 32 insertions(+), 19 deletions(-) diff --git a/src/lib/pages/domains/wizard/step1.svelte b/src/lib/pages/domains/wizard/step1.svelte index 2c0010a3a..794d6d945 100644 --- a/src/lib/pages/domains/wizard/step1.svelte +++ b/src/lib/pages/domains/wizard/step1.svelte @@ -34,7 +34,7 @@ - Add function domain + Domain Use your self-owned domain as the endpoint of your Appwrite API. + {hasProjects ? 'Select project' : 'Create project'} diff --git a/src/routes/console/organization-[organization]/billing/wizard/addCredit.svelte b/src/routes/console/organization-[organization]/billing/wizard/addCredit.svelte index ddc5292c2..d62ffc7ab 100644 --- a/src/routes/console/organization-[organization]/billing/wizard/addCredit.svelte +++ b/src/routes/console/organization-[organization]/billing/wizard/addCredit.svelte @@ -38,7 +38,7 @@ - Add credits + Credits Add Appwrite credits to your organization. A payment method is required before credits can be applied. diff --git a/src/routes/console/organization-[organization]/billing/wizard/paymentDetails.svelte b/src/routes/console/organization-[organization]/billing/wizard/paymentDetails.svelte index b4f54264d..72dfd81c2 100644 --- a/src/routes/console/organization-[organization]/billing/wizard/paymentDetails.svelte +++ b/src/routes/console/organization-[organization]/billing/wizard/paymentDetails.svelte @@ -41,7 +41,7 @@ - Payment details + Details Add a payment method to your organization. You will not be charged until you upgrade to a Pro or Scale plan. diff --git a/src/routes/console/project-[project]/overview/keys/wizard/step2.svelte b/src/routes/console/project-[project]/overview/keys/wizard/step2.svelte index 56638e8a0..383a8d426 100644 --- a/src/routes/console/project-[project]/overview/keys/wizard/step2.svelte +++ b/src/routes/console/project-[project]/overview/keys/wizard/step2.svelte @@ -6,7 +6,7 @@ - Add Scopes + Scopes Choose which permission scopes to grant your application. It is best practice to allow only the permissions you need to meet your project goals. diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/android/step1.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/android/step1.svelte index d756e05b9..bdd6b79a1 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/android/step1.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/android/step1.svelte @@ -41,7 +41,7 @@ - Register your Android app + Android registration + Get the SDK

    First, add this to your root level build.gradle file.

    diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/android/step3.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/android/step3.svelte index 736d87555..15c0cbe16 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/android/step3.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/android/step3.svelte @@ -15,6 +15,7 @@ val client = Client(context) + Initialize SDK

    Initialize your SDK

    diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/apple/step1.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/apple/step1.svelte index 46adf251d..9c3b9761a 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/apple/step1.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/apple/step1.svelte @@ -36,7 +36,7 @@ - Register your bundle ID + Apple registration diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/apple/step2.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/apple/step2.svelte index 2c0519fdb..cc3f1a5d7 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/apple/step2.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/apple/step2.svelte @@ -29,6 +29,7 @@ + Get the SDK
    (method = Method.Xcode)} selected={method === Method.Xcode}> diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/apple/step3.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/apple/step3.svelte index 420994b55..c7683a46d 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/apple/step3.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/apple/step3.svelte @@ -17,6 +17,7 @@ let client = Client() + Initialize SDK

    Initialize your SDK

    diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step1.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step1.svelte index 3aa0a579b..c64b948e6 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step1.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step1.svelte @@ -149,16 +149,16 @@ $: registee = { [PlatformType.Flutterandroid]: 'package name', - [PlatformType.Flutterios]: 'bundle ID', - [PlatformType.Flutterlinux]: 'package name', - [PlatformType.Fluttermacos]: 'bundle ID', - [PlatformType.Flutterwindows]: 'package name', - [PlatformType.Flutterweb]: 'hostname' + [PlatformType.Flutterios]: 'Bundle ID', + [PlatformType.Flutterlinux]: 'Package name', + [PlatformType.Fluttermacos]: 'Bundle ID', + [PlatformType.Flutterwindows]: 'Package name', + [PlatformType.Flutterweb]: 'Hostname' }[platform]; - Register your {registee} + {registee} registration
    + Get the SDK

    diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step3.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step3.svelte index cc82830e2..deb5cb79a 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step3.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step3.svelte @@ -18,6 +18,7 @@ client + Initialize SDK

    Initialize your SDK

    diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/step4.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/step4.svelte index cc2c48958..88a9ae2f7 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/step4.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/step4.svelte @@ -6,6 +6,7 @@ + You're ready to go 🎉

    {#if isFirstProject} diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/web/step1.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/web/step1.svelte index af152ddab..661b2472d 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/web/step1.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/web/step1.svelte @@ -44,7 +44,7 @@ - Register your hostname + Hostname registration + Get the SDK Choose your preferred method of installation diff --git a/src/routes/console/wizard/cloudOrganization/confirmDetails.svelte b/src/routes/console/wizard/cloudOrganization/confirmDetails.svelte index a7c6209f6..cf3363ab9 100644 --- a/src/routes/console/wizard/cloudOrganization/confirmDetails.svelte +++ b/src/routes/console/wizard/cloudOrganization/confirmDetails.svelte @@ -51,7 +51,7 @@ - Confirm your details + Details Confirm the details of your new organization and start your free trial. diff --git a/src/routes/console/wizard/cloudOrganizationChangeTier/choosePlan.svelte b/src/routes/console/wizard/cloudOrganizationChangeTier/choosePlan.svelte index 5a94e9ec8..2327bd948 100644 --- a/src/routes/console/wizard/cloudOrganizationChangeTier/choosePlan.svelte +++ b/src/routes/console/wizard/cloudOrganizationChangeTier/choosePlan.svelte @@ -103,7 +103,7 @@ - Choose a plan + Plan selection

    Plan

    diff --git a/src/routes/console/wizard/cloudOrganizationChangeTier/confirmDetails.svelte b/src/routes/console/wizard/cloudOrganizationChangeTier/confirmDetails.svelte index e62c6af3f..aa1c4bf8b 100644 --- a/src/routes/console/wizard/cloudOrganizationChangeTier/confirmDetails.svelte +++ b/src/routes/console/wizard/cloudOrganizationChangeTier/confirmDetails.svelte @@ -49,7 +49,7 @@ {#if downgradeToStarter} - Confirm plan change + Change confirmation Your feedback is important to us and helps us improve the services Appwrite offer. If there is a specific reason you chose to change your plan at this time, please let us @@ -65,7 +65,7 @@ {:else} - Confirm your details + Details Confirm the details of your new organization and start your free trial. diff --git a/src/routes/console/wizard/cloudOrganizationChangeTier/usageExcess.svelte b/src/routes/console/wizard/cloudOrganizationChangeTier/usageExcess.svelte index f3b1a6baa..570d2a2c8 100644 --- a/src/routes/console/wizard/cloudOrganizationChangeTier/usageExcess.svelte +++ b/src/routes/console/wizard/cloudOrganizationChangeTier/usageExcess.svelte @@ -7,8 +7,9 @@ - Your usage exceeds the limits of the {tierToPlan($organization.billingPlan).name} plan + + + Your usage exceeds the limits of the {tierToPlan($organization.billingPlan).name} plan View the current usage for {$organization.name} and where you will exceed the limits of your new plan. diff --git a/src/routes/console/wizard/feedback/step1.svelte b/src/routes/console/wizard/feedback/step1.svelte index c3a665590..e2e408b1e 100644 --- a/src/routes/console/wizard/feedback/step1.svelte +++ b/src/routes/console/wizard/feedback/step1.svelte @@ -32,6 +32,7 @@ + {$selectedFeedback.title} {$selectedFeedback.desc} diff --git a/src/routes/console/wizard/feedback/step2.svelte b/src/routes/console/wizard/feedback/step2.svelte index 1e91272cf..56d26c51c 100644 --- a/src/routes/console/wizard/feedback/step2.svelte +++ b/src/routes/console/wizard/feedback/step2.svelte @@ -6,6 +6,7 @@ + Thanks for the feedback!

    diff --git a/src/routes/console/wizard/support/step1.svelte b/src/routes/console/wizard/support/step1.svelte index 06f8f265b..e82448d02 100644 --- a/src/routes/console/wizard/support/step1.svelte +++ b/src/routes/console/wizard/support/step1.svelte @@ -21,6 +21,7 @@ + How can we help you? Please describe your request in detail. If applicable, include steps for reproduction of any From 7f69ea5d55455088fae1c4e8f15a8e167a2c5dd8 Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Mon, 26 Feb 2024 14:31:48 +0000 Subject: [PATCH 301/479] fix: typo --- .../console/project-[project]/messaging/providers/create.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/messaging/providers/create.svelte b/src/routes/console/project-[project]/messaging/providers/create.svelte index 53cdf91a4..4f25dcda1 100644 --- a/src/routes/console/project-[project]/messaging/providers/create.svelte +++ b/src/routes/console/project-[project]/messaging/providers/create.svelte @@ -156,7 +156,7 @@ const stepsComponents: WizardStepsType = new Map(); stepsComponents.set(1, { - label: 'Proivder', + label: 'Provider', component: Provider }); stepsComponents.set(2, { From 213e72433f551513f30425c6a4c5d2825a2bedd8 Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Mon, 26 Feb 2024 16:06:50 +0000 Subject: [PATCH 302/479] chore: vincent suggestions --- .../overview/platforms/wizard/android/step2.svelte | 3 +-- .../overview/platforms/wizard/android/step3.svelte | 3 +-- .../overview/platforms/wizard/apple/step2.svelte | 3 +-- .../overview/platforms/wizard/apple/step3.svelte | 3 +-- .../overview/platforms/wizard/flutter/step2.svelte | 3 +-- .../overview/platforms/wizard/flutter/step3.svelte | 3 +-- .../project-[project]/overview/platforms/wizard/step4.svelte | 3 +-- .../overview/platforms/wizard/web/step2.svelte | 3 +-- .../wizard/cloudOrganizationChangeTier/usageExcess.svelte | 1 - src/routes/console/wizard/feedback/step1.svelte | 1 - src/routes/console/wizard/feedback/step2.svelte | 3 +-- src/routes/console/wizard/support/step1.svelte | 1 - 12 files changed, 9 insertions(+), 21 deletions(-) diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/android/step2.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/android/step2.svelte index 30f7e0d85..a2c5dd1fb 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/android/step2.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/android/step2.svelte @@ -10,8 +10,7 @@ - - Get the SDK + Install

    First, add this to your root level build.gradle file.

    And add this to your project's build.gradle file.

    diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/android/step3.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/android/step3.svelte index 15c0cbe16..9b47253d1 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/android/step3.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/android/step3.svelte @@ -15,8 +15,7 @@ val client = Client(context) - - Initialize SDK + Initialize

    Initialize your SDK

    diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/apple/step2.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/apple/step2.svelte index cc3f1a5d7..d77381e5b 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/apple/step2.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/apple/step2.svelte @@ -29,8 +29,7 @@ - - Get the SDK + Install

    (method = Method.Xcode)} selected={method === Method.Xcode}> Xcode diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/apple/step3.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/apple/step3.svelte index c7683a46d..6ff63e373 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/apple/step3.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/apple/step3.svelte @@ -17,8 +17,7 @@ let client = Client() - - Initialize SDK + Initialize

    Initialize your SDK

    diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step2.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step2.svelte index ab5f13aa8..27d4667f3 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step2.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step2.svelte @@ -9,8 +9,7 @@ - - Get the SDK + Install

    Add Appwrite SDK to your package's pubspec.yaml file. You can diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step3.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step3.svelte index deb5cb79a..3211a6796 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step3.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step3.svelte @@ -18,8 +18,7 @@ client - - Initialize SDK + Initialize

    Initialize your SDK

    diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/step4.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/step4.svelte index 88a9ae2f7..a1e237d41 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/step4.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/step4.svelte @@ -6,8 +6,7 @@ - - You're ready to go 🎉 + All set

    {#if isFirstProject} Congratulations on adding the first platform to your project! Start exploring by diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/web/step2.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/web/step2.svelte index 2eb9793eb..9c21ccc48 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/web/step2.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/web/step2.svelte @@ -23,8 +23,7 @@ - - Get the SDK + Install Choose your preferred method of installation

    diff --git a/src/routes/console/wizard/cloudOrganizationChangeTier/usageExcess.svelte b/src/routes/console/wizard/cloudOrganizationChangeTier/usageExcess.svelte index 570d2a2c8..e5bd500fb 100644 --- a/src/routes/console/wizard/cloudOrganizationChangeTier/usageExcess.svelte +++ b/src/routes/console/wizard/cloudOrganizationChangeTier/usageExcess.svelte @@ -8,7 +8,6 @@ - Your usage exceeds the limits of the {tierToPlan($organization.billingPlan).name} plan View the current usage for {$organization.name} and where you will exceed the limits of diff --git a/src/routes/console/wizard/feedback/step1.svelte b/src/routes/console/wizard/feedback/step1.svelte index e2e408b1e..c3a665590 100644 --- a/src/routes/console/wizard/feedback/step1.svelte +++ b/src/routes/console/wizard/feedback/step1.svelte @@ -32,7 +32,6 @@ - {$selectedFeedback.title} {$selectedFeedback.desc} diff --git a/src/routes/console/wizard/feedback/step2.svelte b/src/routes/console/wizard/feedback/step2.svelte index 56d26c51c..66c1c2d56 100644 --- a/src/routes/console/wizard/feedback/step2.svelte +++ b/src/routes/console/wizard/feedback/step2.svelte @@ -6,8 +6,7 @@ - - Thanks for the feedback! + Thanks you
    {#if $app.themeInUse === 'dark'} diff --git a/src/routes/console/wizard/support/step1.svelte b/src/routes/console/wizard/support/step1.svelte index e82448d02..06f8f265b 100644 --- a/src/routes/console/wizard/support/step1.svelte +++ b/src/routes/console/wizard/support/step1.svelte @@ -21,7 +21,6 @@ - How can we help you? Please describe your request in detail. If applicable, include steps for reproduction of any From 8dfb58eaf5b09fb21b0f4d621cc0d9b7fe2d83f6 Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Mon, 26 Feb 2024 16:08:17 +0000 Subject: [PATCH 303/479] chore: vincent suggestion --- src/routes/console/(migration-wizard)/step1.svelte | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/routes/console/(migration-wizard)/step1.svelte b/src/routes/console/(migration-wizard)/step1.svelte index e326ac5f3..c34166a7f 100644 --- a/src/routes/console/(migration-wizard)/step1.svelte +++ b/src/routes/console/(migration-wizard)/step1.svelte @@ -12,7 +12,6 @@ let selectedOrg = organizations.length ? organizations[0].$id : null; let projects = [] as Models.ProjectList['projects']; - $: hasProjects = projects.length > 0; let loadingProjects = false; let projectType = 'existing'; @@ -43,10 +42,7 @@ - - - {hasProjects ? 'Select project' : 'Create project'} - + Project
    {#if organizations.length > 1} From 7345a213acfa576120045d67ad1da0d0d8448bb1 Mon Sep 17 00:00:00 2001 From: "Luke B. Silver" <22452787+loks0n@users.noreply.github.com> Date: Tue, 27 Feb 2024 10:28:36 +0000 Subject: [PATCH 304/479] Update src/routes/console/wizard/feedback/step2.svelte Co-authored-by: Carla --- src/routes/console/wizard/feedback/step2.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/console/wizard/feedback/step2.svelte b/src/routes/console/wizard/feedback/step2.svelte index 66c1c2d56..6a79839c5 100644 --- a/src/routes/console/wizard/feedback/step2.svelte +++ b/src/routes/console/wizard/feedback/step2.svelte @@ -6,7 +6,7 @@ - Thanks you + Thank you
    {#if $app.themeInUse === 'dark'} From c218b0b5f13ac6ec45afb13d8e28790b9d9def49 Mon Sep 17 00:00:00 2001 From: wess Date: Tue, 27 Feb 2024 10:36:24 -0500 Subject: [PATCH 305/479] Adds Webbhook enable to analytics Adds disable/enable section to webhook details --- src/lib/actions/analytics.ts | 1 + .../settings/webhooks/[webhook]/+page.svelte | 2 + .../webhooks/[webhook]/details.svelte | 92 +++++++++++++++++++ .../webhooks/messageStatusPill.svelte | 6 +- 4 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 src/routes/console/project-[project]/settings/webhooks/[webhook]/details.svelte diff --git a/src/lib/actions/analytics.ts b/src/lib/actions/analytics.ts index e967ec3d2..906576a49 100644 --- a/src/lib/actions/analytics.ts +++ b/src/lib/actions/analytics.ts @@ -245,6 +245,7 @@ export enum Submit { WebhookUpdateUrl = 'submit_webhook_update_url', WebhookUpdateEvents = 'submit_webhook_update_events', WebhookUpdateName = 'submit_webhook_update_name', + WebhookUpdateEnabled = 'submit_webhook_update_enabled', WebhookUpdateSecurity = 'submit_webhook_update_security', BucketCreate = 'submit_bucket_create', BucketDelete = 'submit_bucket_delete', diff --git a/src/routes/console/project-[project]/settings/webhooks/[webhook]/+page.svelte b/src/routes/console/project-[project]/settings/webhooks/[webhook]/+page.svelte index ab3bd3c63..329aa82df 100644 --- a/src/routes/console/project-[project]/settings/webhooks/[webhook]/+page.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/[webhook]/+page.svelte @@ -6,9 +6,11 @@ import UpdateSecurity from './updateSecurity.svelte'; import UpdateSignature from './updateSignature.svelte'; import UpdateUrl from './updateURL.svelte'; + import Details from './details.svelte'; +
    diff --git a/src/routes/console/project-[project]/settings/webhooks/[webhook]/details.svelte b/src/routes/console/project-[project]/settings/webhooks/[webhook]/details.svelte new file mode 100644 index 000000000..74d50a026 --- /dev/null +++ b/src/routes/console/project-[project]/settings/webhooks/[webhook]/details.svelte @@ -0,0 +1,92 @@ + + + + {$webhook.url} + + +
    +
      + + + +
    • Created: {toLocaleDateTime($webhook.$createdAt)}
    • +
    • Last updated: {toLocaleDateTime($webhook.$updatedAt)}
    • +
    + +
    +
    + + + +
    + + +
    +
    + +
    + + + + + diff --git a/src/routes/console/project-[project]/settings/webhooks/messageStatusPill.svelte b/src/routes/console/project-[project]/settings/webhooks/messageStatusPill.svelte index 3b4fafae6..68dbf385a 100644 --- a/src/routes/console/project-[project]/settings/webhooks/messageStatusPill.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/messageStatusPill.svelte @@ -3,13 +3,13 @@ export let enabled: boolean; - const style = `color: ${enabled ? 'hsl(var(--color-success-100))' : 'hsl(var(--color-danger-100))'}`; - const iconClass = enabled ? 'icon-check-circle' : 'icon-exclamation-circle'; + $:style = `color: ${enabled ? 'hsl(var(--color-success-100))' : 'hsl(var(--color-danger-100))'}`; + $:iconClass = (enabled ? 'icon-check-circle' : 'icon-exclamation-circle') + ' u-font-size-12'; -
    -
    - -
    + {#if message.status === MessageStatus.Draft} +
    + +
    + {/if}
    {/each} diff --git a/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte b/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte index 96dd7ab4c..26d18021d 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte @@ -123,24 +123,27 @@ ({getTotal(topic)} targets) - + +
    -
    - -
    + {#if message.status === MessageStatus.Draft} +
    + +
    + {/if}
    {/each} From 02fdd950b6b1ee546cd54117656d9350328b9fea Mon Sep 17 00:00:00 2001 From: Khushboo Verma <43381712+vermakhushboo@users.noreply.github.com> Date: Tue, 27 Feb 2024 17:09:28 +0530 Subject: [PATCH 308/479] Update execution placeholder body --- .../functions/function-[function]/execute.svelte | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/routes/console/project-[project]/functions/function-[function]/execute.svelte b/src/routes/console/project-[project]/functions/function-[function]/execute.svelte index a8460d6db..57d52063d 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/execute.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/execute.svelte @@ -121,11 +121,7 @@
    - + {:else} @@ -214,7 +210,7 @@ From f29089a748e6812970834b3c70dc3dedff17e30c Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 26 Feb 2024 16:36:04 -0800 Subject: [PATCH 309/479] fix(messaging): show users w/o targets as disabled --- src/lib/components/collapsibleItem.svelte | 35 ++++++++++++++++--- .../messaging/userTargetsModal.svelte | 30 +++++++++++----- 2 files changed, 53 insertions(+), 12 deletions(-) diff --git a/src/lib/components/collapsibleItem.svelte b/src/lib/components/collapsibleItem.svelte index 736f2fe21..3420b555c 100644 --- a/src/lib/components/collapsibleItem.svelte +++ b/src/lib/components/collapsibleItem.svelte @@ -3,10 +3,11 @@ export let withIndentation = false; export let open = false; + export let disabled = false;
  • -
    +
    - + {#if $$slots.subtitle} - + {/if}
    -
  • + + diff --git a/src/routes/console/project-[project]/messaging/userTargetsModal.svelte b/src/routes/console/project-[project]/messaging/userTargetsModal.svelte index 7552144aa..271f94ecc 100644 --- a/src/routes/console/project-[project]/messaging/userTargetsModal.svelte +++ b/src/routes/console/project-[project]/messaging/userTargetsModal.svelte @@ -132,22 +132,20 @@ {@const selectedCount = user.targets.filter( (target) => selected[target.$id] ).length} - + 0 && - user.targets.every((target) => targetsById[target.$id])} + disabled={!user.targets.length || + (user.targets.length > 0 && + user.targets.every((target) => targetsById[target.$id]))} checked={selectedCount > 0 && selectedCount === user.targets.length} on:change={(event) => onUserSelection(event, userId)} /> - + {#if user.name} {user.name} {:else if user.email} @@ -161,7 +159,11 @@ - ({selectedCount}/{user.targets.length} targets) + {#if user.targets.length === 0} + (0 targets) + {:else} + ({selectedCount}/{user.targets.length} targets) + {/if} {#each user.targets as target} @@ -235,3 +237,15 @@ + + From f492837dd4197c3c1a07e77b3232d3afbebd5c5a Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 26 Feb 2024 15:51:18 -0800 Subject: [PATCH 310/479] fix(messaging): update link to docs regarding subscribers --- .../topics/topic-[topic]/subscribers/+page.svelte | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/+page.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/+page.svelte index c5c308a5e..622b6bf41 100644 --- a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/+page.svelte +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/+page.svelte @@ -146,7 +146,7 @@ (showAdd = true)} - href="https://appwrite.io/docs/products/messaging/topics/#subscribe-targets-to-topics" + href="https://appwrite.io/docs/products/messaging/topics#subscribe-targets-to-topics" target="subscriber" /> {/if} @@ -159,10 +159,11 @@

    Add subscribers to this topic by selecting the targets for directing messages. Learn more about subscribers. + class="link">Learn more about subscribers.

    From e9004be4d8a64df25f19a8676ec0cbcd0dd3450b Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 26 Feb 2024 15:20:03 -0800 Subject: [PATCH 311/479] fix(messaging): fix provider docs link --- .../messaging/providers/wizard/settings.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/messaging/providers/wizard/settings.svelte b/src/routes/console/project-[project]/messaging/providers/wizard/settings.svelte index 57908ad4b..e995a63a1 100644 --- a/src/routes/console/project-[project]/messaging/providers/wizard/settings.svelte +++ b/src/routes/console/project-[project]/messaging/providers/wizard/settings.svelte @@ -97,7 +97,7 @@
    From dce4dc4a989cdf62b50d879278e9eb0ef625d67c Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 26 Feb 2024 15:20:22 -0800 Subject: [PATCH 312/479] fix(messaging) fix need a hand hover color --- .../messaging/providers/wizard/settings.svelte | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/providers/wizard/settings.svelte b/src/routes/console/project-[project]/messaging/providers/wizard/settings.svelte index e995a63a1..46dc634e5 100644 --- a/src/routes/console/project-[project]/messaging/providers/wizard/settings.svelte +++ b/src/routes/console/project-[project]/messaging/providers/wizard/settings.svelte @@ -135,7 +135,7 @@ diff --git a/src/routes/console/account/updateMfa.svelte b/src/routes/console/account/updateMfa.svelte index 140943222..28ebea5d5 100644 --- a/src/routes/console/account/updateMfa.svelte +++ b/src/routes/console/account/updateMfa.svelte @@ -88,5 +88,7 @@ - +{#if showSetup} + +{/if} From a03b54180bfb8ba828d19746e0954e4516db6fca Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 29 Feb 2024 14:35:02 +0100 Subject: [PATCH 339/479] fix: remove unused import --- src/routes/console/account/mfa.svelte | 1 - 1 file changed, 1 deletion(-) diff --git a/src/routes/console/account/mfa.svelte b/src/routes/console/account/mfa.svelte index 4aa5f71c7..245cbb936 100644 --- a/src/routes/console/account/mfa.svelte +++ b/src/routes/console/account/mfa.svelte @@ -2,7 +2,6 @@ import { invalidate } from '$app/navigation'; import { Submit, trackError } from '$lib/actions/analytics'; import { Modal, Output, Copy, Alert } from '$lib/components'; - import LoadingDots from '$lib/components/loadingDots.svelte'; import { Dependencies } from '$lib/constants'; import { Button, FormList, InputDigits } from '$lib/elements/forms'; import { Table, TableBody, TableCell, TableRow } from '$lib/elements/table'; From e51f3106dbbc80f2cfef0f8666312781d4655bb4 Mon Sep 17 00:00:00 2001 From: wess Date: Thu, 29 Feb 2024 09:23:16 -0500 Subject: [PATCH 340/479] Color updates Sentence Case Update webhook button now takes to details view correctly Shows actual webhook id instead of Webhook ID Fixes spacing between Disabled toggle and Created --- .../console/project-[project]/settings/webhooks/+page.svelte | 2 +- .../settings/webhooks/[webhook]/details.svelte | 3 ++- .../settings/webhooks/[webhook]/header.svelte | 2 +- .../project-[project]/settings/webhooks/failedModal.svelte | 5 +++-- .../settings/webhooks/messageStatusPill.svelte | 2 +- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/routes/console/project-[project]/settings/webhooks/+page.svelte b/src/routes/console/project-[project]/settings/webhooks/+page.svelte index 057859cb0..4adbdffad 100644 --- a/src/routes/console/project-[project]/settings/webhooks/+page.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/+page.svelte @@ -51,7 +51,7 @@ diff --git a/src/routes/console/project-[project]/settings/webhooks/[webhook]/details.svelte b/src/routes/console/project-[project]/settings/webhooks/[webhook]/details.svelte index 9b7ffd46e..37424e263 100644 --- a/src/routes/console/project-[project]/settings/webhooks/[webhook]/details.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/[webhook]/details.svelte @@ -66,7 +66,8 @@ id="enable-switch" bind:value={enabled} /> -
  • Created: {toLocaleDateTime($webhook.$createdAt)}
  • + +
  • Created: {toLocaleDateTime($webhook.$createdAt)}
  • Last updated: {toLocaleDateTime($webhook.$updatedAt)}
  • diff --git a/src/routes/console/project-[project]/settings/webhooks/[webhook]/header.svelte b/src/routes/console/project-[project]/settings/webhooks/[webhook]/header.svelte index 9a09cbb01..8debdc385 100644 --- a/src/routes/console/project-[project]/settings/webhooks/[webhook]/header.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/[webhook]/header.svelte @@ -12,6 +12,6 @@ {$webhook?.name} - Webhook ID + {$webhook?.$id} diff --git a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte index a9d0342fd..67437a82b 100644 --- a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte @@ -12,7 +12,8 @@ export let showUpdateButton: boolean = true; const projectId = $page.params.project; - const webhookPath = webhook + + $: webhookPath = webhook ? `${base}/console/project-${projectId}/settings/webhooks/` + (webhook['$id'] ?? '') : ''; @@ -31,7 +32,7 @@

    {#if showUpdateButton} - + {/if}
    diff --git a/src/routes/console/project-[project]/settings/webhooks/messageStatusPill.svelte b/src/routes/console/project-[project]/settings/webhooks/messageStatusPill.svelte index 9681c91a0..2c12a4ee0 100644 --- a/src/routes/console/project-[project]/settings/webhooks/messageStatusPill.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/messageStatusPill.svelte @@ -3,7 +3,7 @@ export let enabled: boolean; - $: style = `color: ${enabled ? 'hsl(var(--color-success-100))' : 'hsl(var(--color-danger-100))'}`; + $: style = `color: ${enabled ? 'hsl(var(--color-success-120))' : 'hsl(var(--color-danger-120))'}`; $: iconClass = (enabled ? 'icon-check-circle' : 'icon-exclamation-circle') + ' u-font-size-12'; From c35ff02df79cf0180dc8ba254510bc1de9856347 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Thu, 29 Feb 2024 21:12:00 +0530 Subject: [PATCH 341/479] chore: add prefix keys --- src/lib/commandCenter/commands.ts | 1 + src/lib/commandCenter/searchers/messages.ts | 17 +++++++++++++-- src/lib/commandCenter/searchers/providers.ts | 15 ++++++++++++- src/routes/auth/+layout.svelte | 21 ------------------- src/routes/console/+layout.svelte | 8 +++---- .../console/project-[project]/+layout.svelte | 19 +++++++++-------- .../project-[project]/auth/+layout.svelte | 19 ++++++++++++++++- .../messaging/+layout.svelte | 7 ++++--- .../topics/topic-[topic]/+layout.svelte | 18 ++++++++++++---- 9 files changed, 80 insertions(+), 45 deletions(-) diff --git a/src/lib/commandCenter/commands.ts b/src/lib/commandCenter/commands.ts index 304ccf603..c24491b6d 100644 --- a/src/lib/commandCenter/commands.ts +++ b/src/lib/commandCenter/commands.ts @@ -18,6 +18,7 @@ const groups = [ 'databases', 'functions', 'messaging', + 'messages', 'providers', 'topics', 'storage', diff --git a/src/lib/commandCenter/searchers/messages.ts b/src/lib/commandCenter/searchers/messages.ts index 42f871337..a9d8fc54f 100644 --- a/src/lib/commandCenter/searchers/messages.ts +++ b/src/lib/commandCenter/searchers/messages.ts @@ -18,6 +18,19 @@ const getLabel = (message) => { } }; +const getIcon = (message) => { + switch (message.providerType) { + case MessagingProviderType.Push: + return 'device-mobile'; + case MessagingProviderType.Sms: + return 'annotation'; + case MessagingProviderType.Email: + return 'mail'; + default: + return 'send'; + } +} + export const messagesSearcher = (async (query: string) => { const { messages } = await sdk.forProject.messaging.listMessages([], query || undefined); @@ -29,12 +42,12 @@ export const messagesSearcher = (async (query: string) => { .map( (message) => ({ - group: 'messaging', + group: 'messages', label: getLabel(message), callback: () => { goto(`/console/project-${projectId}/messaging/message-${message.$id}`); }, - icon: 'send', + icon: getIcon(message), }) as const ); }) satisfies Searcher; diff --git a/src/lib/commandCenter/searchers/providers.ts b/src/lib/commandCenter/searchers/providers.ts index 289bbe826..d52877db9 100644 --- a/src/lib/commandCenter/searchers/providers.ts +++ b/src/lib/commandCenter/searchers/providers.ts @@ -4,6 +4,19 @@ import { get } from 'svelte/store'; import type { Searcher } from '../commands'; import { sdk } from '$lib/stores/sdk'; +const getIcon = (provider) => { + switch (provider.type) { + case MessagingProviderType.Push: + return 'device-mobile'; + case MessagingProviderType.Sms: + return 'annotation'; + case MessagingProviderType.Email: + return 'mail'; + default: + return 'send'; + } +} + export const providersSearcher = (async (query: string) => { const { providers } = await sdk.forProject.messaging.listProviders([], query || undefined); @@ -20,7 +33,7 @@ export const providersSearcher = (async (query: string) => { callback: () => { goto(`/console/project-${projectId}/messaging/providers/provider-${provider.$id}`); }, - icon: 'cloud', + icon: getIcon(provider), }) as const ); }) satisfies Searcher; diff --git a/src/routes/auth/+layout.svelte b/src/routes/auth/+layout.svelte index 68866be64..f2ffcf1d2 100644 --- a/src/routes/auth/+layout.svelte +++ b/src/routes/auth/+layout.svelte @@ -1,29 +1,8 @@ diff --git a/src/routes/console/+layout.svelte b/src/routes/console/+layout.svelte index 98ce25767..cca3baecb 100644 --- a/src/routes/console/+layout.svelte +++ b/src/routes/console/+layout.svelte @@ -56,7 +56,7 @@ $: $registerCommands([ { - label: 'Go to projects', + label: 'Go to Projects', callback: () => { goto('/console'); }, @@ -66,7 +66,7 @@ $page.url.pathname.includes('/console/organization-') && !$page.url.pathname.endsWith('/members') && !$page.url.pathname.endsWith('/settings'), - rank: -1 + rank: -1 }, { label: 'Ask the AI', @@ -78,11 +78,11 @@ disabled: !isAssistantEnabled }, { - label: 'Go to account', + label: 'Go to Account', callback: () => { goto('/console/account'); }, - keys: ['i'], + keys: ['g', 'i'], group: 'navigation', rank: -2 }, diff --git a/src/routes/console/project-[project]/+layout.svelte b/src/routes/console/project-[project]/+layout.svelte index f025da2ec..11c9ba940 100644 --- a/src/routes/console/project-[project]/+layout.svelte +++ b/src/routes/console/project-[project]/+layout.svelte @@ -15,6 +15,7 @@ userSearcher } from '$lib/commandCenter/searchers'; import { MigrationBox } from '$lib/components'; + import { page } from '$app/stores'; onMount(() => { return sdk.forConsole.client.subscribe(['project', 'console'], (response) => { @@ -32,7 +33,7 @@ callback: () => { goto(`/console/project-${$project.$id}/auth`); }, - keys: ['a'], + keys: ['g', 'a'], group: 'navigation' }, { @@ -40,7 +41,7 @@ callback: () => { goto(`/console/project-${$project.$id}/databases`); }, - keys: ['d'], + keys: ['g', 'd'], group: 'navigation' }, { @@ -48,7 +49,7 @@ callback: () => { goto(`/console/project-${$project.$id}/functions`); }, - keys: ['f'], + keys: ['g', 'f'], group: 'navigation' }, { @@ -56,7 +57,7 @@ callback: () => { goto(`/console/project-${$project.$id}/messaging`); }, - keys: ['m'], + keys: $page.url.pathname.includes('messaging') ? ['m'] : ['g', 'm'], group: 'navigation' }, { @@ -64,23 +65,23 @@ callback: () => { goto(`/console/project-${$project.$id}/storage`); }, - keys: ['s'], + keys: ['g', 's'], group: 'navigation' }, { - label: 'Go to settings', + label: 'Go to Settings', callback: () => { goto(`/console/project-${$project.$id}/settings`); }, - keys: ['p'], + keys: ['g', 'e'], group: 'navigation' }, { - label: 'Go to overview', + label: 'Go to Overview', callback: () => { goto(`/console/project-${$project.$id}`); }, - keys: ['o'], + keys: ['g', 'o'], group: 'navigation' } ]); diff --git a/src/routes/console/project-[project]/auth/+layout.svelte b/src/routes/console/project-[project]/auth/+layout.svelte index cfb6a198b..ca114d653 100644 --- a/src/routes/console/project-[project]/auth/+layout.svelte +++ b/src/routes/console/project-[project]/auth/+layout.svelte @@ -1,7 +1,8 @@
    -
    -
    - - - From 2d8bf22cd80c0f568b1bf99e60e7f08cf36666f7 Mon Sep 17 00:00:00 2001 From: wess Date: Thu, 29 Feb 2024 13:48:23 -0500 Subject: [PATCH 344/479] linting --- src/lib/layout/unauthenticated.svelte | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/lib/layout/unauthenticated.svelte b/src/lib/layout/unauthenticated.svelte index a62b2e952..7c16c7a8d 100644 --- a/src/lib/layout/unauthenticated.svelte +++ b/src/lib/layout/unauthenticated.svelte @@ -56,7 +56,6 @@ - From ec1c6ac65c97563c2d07b9ed3e4da1ad90d479da Mon Sep 17 00:00:00 2001 From: wess Date: Thu, 29 Feb 2024 13:49:11 -0500 Subject: [PATCH 345/479] Shows details if hook is disabled --- .../console/project-[project]/settings/webhooks/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/settings/webhooks/+page.svelte b/src/routes/console/project-[project]/settings/webhooks/+page.svelte index 4adbdffad..ea1a2cbe6 100644 --- a/src/routes/console/project-[project]/settings/webhooks/+page.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/+page.svelte @@ -94,7 +94,7 @@   - {#if webhook.enabled === false && webhook.attempts > 0} + {#if webhook.enabled === false} +
    +
    + + +
    + + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    + {#if data.subscribers.total} +
    + + + {:else if $hasPageQueries} + + {:else if data.search} + +
    + Sorry, we couldn't find '{data.search}' +

    There are no subscribers that match your search.

    +
    + +
    + {:else} + (showAdd = true)} + href="https://appwrite.io/docs/products/messaging/topics#subscribe-targets-to-topics" + target="subscriber" /> + {/if} + + + +

    + Add subscribers to this topic by selecting the targets for directing messages. Learn more about subscribers. +

    +
    +
    diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/+page.ts b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+page.ts similarity index 100% rename from src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/+page.ts rename to src/routes/console/project-[project]/messaging/topics/topic-[topic]/+page.ts diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/header.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/header.svelte index 0848e48db..680a967e5 100644 --- a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/header.svelte +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/header.svelte @@ -11,11 +11,6 @@ const tabs = [ { href: path, - title: 'Overview', - event: 'overview' - }, - { - href: `${path}/subscribers`, title: 'Subscribers', event: 'subscribers' }, @@ -23,6 +18,11 @@ href: `${path}/activity`, title: 'Activity', event: 'activity' + }, + { + href: `${path}/settings`, + title: 'Settings', + event: 'settings' } ]; diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/+page.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/+page.svelte new file mode 100644 index 000000000..8c5837596 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/+page.svelte @@ -0,0 +1,14 @@ + + + +
    + + + + diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/dangerZone.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/dangerZone.svelte similarity index 54% rename from src/routes/console/project-[project]/messaging/topics/topic-[topic]/dangerZone.svelte rename to src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/dangerZone.svelte index b9a2801bd..4758bcd6f 100644 --- a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/dangerZone.svelte +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/dangerZone.svelte @@ -1,20 +1,10 @@ - - @@ -37,9 +27,9 @@ - - + diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/details.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/details.svelte similarity index 92% rename from src/routes/console/project-[project]/messaging/topics/topic-[topic]/details.svelte rename to src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/details.svelte index 09e919152..be120ba35 100644 --- a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/details.svelte +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/details.svelte @@ -1,7 +1,7 @@ diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/updateName.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/updateName.svelte similarity index 97% rename from src/routes/console/project-[project]/messaging/topics/topic-[topic]/updateName.svelte rename to src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/updateName.svelte index 4b9305911..ad1e1998b 100644 --- a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/updateName.svelte +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/updateName.svelte @@ -2,7 +2,7 @@ import { CardGrid, Heading } from '$lib/components'; import { Button, Form, InputText } from '$lib/elements/forms'; import { onMount } from 'svelte'; - import { topic } from './store'; + import { topic } from '../store'; import { invalidate } from '$app/navigation'; import { trackEvent, Submit, trackError } from '$lib/actions/analytics'; import { Dependencies } from '$lib/constants'; diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/updatePermissions.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/updatePermissions.svelte similarity index 98% rename from src/routes/console/project-[project]/messaging/topics/topic-[topic]/updatePermissions.svelte rename to src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/updatePermissions.svelte index c74b1ad10..7fff86143 100644 --- a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/updatePermissions.svelte +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/updatePermissions.svelte @@ -10,7 +10,7 @@ import { onMount } from 'svelte'; import { Roles } from '$lib/components/permissions'; import { symmetricDifference } from '$lib/helpers/array'; - import { topic } from './store'; + import { topic } from '../store'; const topicId = $page.params.topic; diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/store.ts b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/store.ts index dec5bf146..29c6212f5 100644 --- a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/store.ts +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/store.ts @@ -1,6 +1,7 @@ -import { derived } from 'svelte/store'; +import { derived, writable } from 'svelte/store'; import { page } from '$app/stores'; import type { Models } from '@appwrite.io/console'; +import type { Column } from '$lib/helpers/types'; export const topic = derived( page, @@ -11,3 +12,11 @@ export const topicTotal = derived( topic, ($topic) => $topic.emailTotal + $topic.smsTotal + $topic.pushTotal ); +export const columns = writable([ + { id: '$id', title: 'Subscriber ID', type: 'string', show: true, width: 140 }, + { id: 'userName', title: 'Name', type: 'string', show: true, filter: false, width: 100 }, + { id: 'targetId', title: 'Target ID', type: 'string', show: true, width: 140 }, + { id: 'target', title: 'Target', type: 'string', show: true, filter: false, width: 140 }, + { id: 'type', title: 'Type', type: 'string', show: true, width: 80 }, + { id: '$createdAt', title: 'Created', type: 'datetime', show: true, width: 100 } +]); \ No newline at end of file diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/+page.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/+page.svelte deleted file mode 100644 index 622b6bf41..000000000 --- a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/+page.svelte +++ /dev/null @@ -1,169 +0,0 @@ - - - -
    -
    - Subscribers -
    - -
    -
    - - -
    - - - -
    -
    -
    -
    - - -
    -
    - - -
    -
    -
    - {#if data.subscribers.total} -
    - - - {:else if $hasPageQueries} - - {:else if data.search} - -
    - Sorry, we couldn't find '{data.search}' -

    There are no subscribers that match your search.

    -
    - -
    - {:else} - (showAdd = true)} - href="https://appwrite.io/docs/products/messaging/topics#subscribe-targets-to-topics" - target="subscriber" /> - {/if} - - - - -

    - Add subscribers to this topic by selecting the targets for directing messages. Learn more about subscribers. -

    -
    -
    diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/store.ts b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/store.ts deleted file mode 100644 index f5186a589..000000000 --- a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/store.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Column } from '$lib/helpers/types'; -import { writable } from 'svelte/store'; - -export const columns = writable([ - { id: '$id', title: 'Subscriber ID', type: 'string', show: true, width: 140 }, - { id: 'userName', title: 'Name', type: 'string', show: true, filter: false, width: 100 }, - { id: 'targetId', title: 'Target ID', type: 'string', show: true, width: 140 }, - { id: 'target', title: 'Target', type: 'string', show: true, filter: false, width: 140 }, - { id: 'type', title: 'Type', type: 'string', show: true, width: 80 }, - { id: '$createdAt', title: 'Created', type: 'datetime', show: true, width: 100 } -]); diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/table.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/table.svelte similarity index 98% rename from src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/table.svelte rename to src/routes/console/project-[project]/messaging/topics/topic-[topic]/table.svelte index 8fce7c8c3..56ccf7cec 100644 --- a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/table.svelte +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/table.svelte @@ -19,12 +19,12 @@ import { addNotification } from '$lib/stores/notifications'; import type { PageData } from './$types'; import { columns } from './store'; - import ProviderType from '../../../providerType.svelte'; + import ProviderType from '../../providerType.svelte'; import { toLocaleDateTime } from '$lib/helpers/date'; import { project } from '$routes/console/project-[project]/store'; import { sdk } from '$lib/stores/sdk'; import { page } from '$app/stores'; - import { targetsById } from '../../../store'; + import { targetsById } from '../../store'; import { MessagingProviderType, type Models } from '@appwrite.io/console'; export let data: PageData; From d8a30856f1dcda74984d06844efc757b5b18f3cc Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Thu, 29 Feb 2024 20:26:23 -0800 Subject: [PATCH 358/479] fix(messaging): localize the subscribers columns When it was global, the state (show values) would persist when switching between different projects rather than resetting back to the default. --- .../messaging/topics/topic-[topic]/+page.svelte | 13 +++++++++++-- .../messaging/topics/topic-[topic]/store.ts | 11 +---------- .../messaging/topics/topic-[topic]/table.svelte | 9 +++++---- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+page.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+page.svelte index cf086e081..7b977d1ee 100644 --- a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+page.svelte +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+page.svelte @@ -23,12 +23,21 @@ import UserTargetsModal from '../../userTargetsModal.svelte'; import { onMount } from 'svelte'; import { Filters, hasPageQueries } from '$lib/components/filters'; - import { columns } from './store'; import { View } from '$lib/helpers/load'; + import { writable } from 'svelte/store'; + import type { Column } from '$lib/helpers/types'; export let data: PageData; let showAdd = false; let subscribersByTargetId: Record = {}; + const columns = writable([ + { id: '$id', title: 'Subscriber ID', type: 'string', show: true, width: 140 }, + { id: 'userName', title: 'Name', type: 'string', show: true, filter: false, width: 100 }, + { id: 'targetId', title: 'Target ID', type: 'string', show: true, width: 140 }, + { id: 'target', title: 'Target', type: 'string', show: true, filter: false, width: 140 }, + { id: 'type', title: 'Type', type: 'string', show: true, width: 80 }, + { id: '$createdAt', title: 'Created', type: 'datetime', show: true, width: 100 } + ]); onMount(() => { $targetsById = {}; @@ -121,7 +130,7 @@ {#if data.subscribers.total} -
    +
    $topic.emailTotal + $topic.smsTotal + $topic.pushTotal ); -export const columns = writable([ - { id: '$id', title: 'Subscriber ID', type: 'string', show: true, width: 140 }, - { id: 'userName', title: 'Name', type: 'string', show: true, filter: false, width: 100 }, - { id: 'targetId', title: 'Target ID', type: 'string', show: true, width: 140 }, - { id: 'target', title: 'Target', type: 'string', show: true, filter: false, width: 140 }, - { id: 'type', title: 'Type', type: 'string', show: true, width: 80 }, - { id: '$createdAt', title: 'Created', type: 'datetime', show: true, width: 100 } -]); \ No newline at end of file diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/table.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/table.svelte index 56ccf7cec..e469b7991 100644 --- a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/table.svelte +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/table.svelte @@ -18,7 +18,6 @@ } from '$lib/elements/table'; import { addNotification } from '$lib/stores/notifications'; import type { PageData } from './$types'; - import { columns } from './store'; import ProviderType from '../../providerType.svelte'; import { toLocaleDateTime } from '$lib/helpers/date'; import { project } from '$routes/console/project-[project]/store'; @@ -26,7 +25,9 @@ import { page } from '$app/stores'; import { targetsById } from '../../store'; import { MessagingProviderType, type Models } from '@appwrite.io/console'; + import type { Column } from '$lib/helpers/types'; + export let columns: Column[]; export let data: PageData; let subscribers: Record = {}; @@ -84,7 +85,7 @@ d.$id)} /> - {#each $columns as column} + {#each columns as column} {#if column.show} {column.title} {/if} @@ -97,10 +98,10 @@ href={`${base}/console/project-${$project.$id}/auth/user-${subscriber.target.userId}`}> - {#each $columns as column} + {#each columns as column} {#if column.show} {#if column.id === '$id'} - {#key $columns} + {#key column.id} {subscriber.$id} From 86af600143f06c941348edbe2e893282e4694853 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Thu, 29 Feb 2024 20:37:01 -0800 Subject: [PATCH 359/479] fix(components): only override columns if prefs found Before this, it didn't matter if a column had show = false as it would default to be show if preferences weren't found. --- src/lib/components/viewSelector.svelte | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/lib/components/viewSelector.svelte b/src/lib/components/viewSelector.svelte index 0ece86889..4aeb21dd7 100644 --- a/src/lib/components/viewSelector.svelte +++ b/src/lib/components/viewSelector.svelte @@ -31,12 +31,15 @@ } else { const prefs = preferences.get($page.route); - columns.set( - $columns.map((column) => { - column.show = prefs.columns?.includes(column.id) ?? true; - return column; - }) - ); + // Override the shown columns only if a preference was set + if (prefs?.columns) { + columns.set( + $columns.map((column) => { + column.show = prefs.columns?.includes(column.id) ?? true; + return column; + }) + ); + } } columns.subscribe((ctx) => { From 6991e5bf32a3ca7fcc77c8e3cccf63a8c736d8cb Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Thu, 29 Feb 2024 20:46:22 -0800 Subject: [PATCH 360/479] fix(messaging): localize the topics columns When it was global, the state (show values) would persist when switching between different projects rather than resetting back to the default. --- .../messaging/topics/+page.svelte | 23 +++++++++++++++++-- .../messaging/topics/store.ts | 11 --------- .../messaging/topics/table.svelte | 9 ++++---- 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/topics/+page.svelte b/src/routes/console/project-[project]/messaging/topics/+page.svelte index 4cd0959c8..118d31a46 100644 --- a/src/routes/console/project-[project]/messaging/topics/+page.svelte +++ b/src/routes/console/project-[project]/messaging/topics/+page.svelte @@ -16,14 +16,33 @@ import { base } from '$app/paths'; import type { Models } from '@appwrite.io/console'; import type { PageData } from './$types'; - import { columns, showCreate } from './store'; + import { showCreate } from './store'; import { View } from '$lib/helpers/load'; import { Filters, hasPageQueries } from '$lib/components/filters'; import Table from './table.svelte'; + import type { Column } from '$lib/helpers/types'; + import { writable } from 'svelte/store'; export let data: PageData; const project = $page.params.project; + const columns = writable([ + { id: '$id', title: 'Topic ID', type: 'string', show: true, width: 140 }, + { id: 'name', title: 'Name', type: 'string', show: true, width: 140 }, + { id: 'emailTotal', title: 'Email Subscribers', type: 'integer', show: false, width: 140 }, + { id: 'smsTotal', title: 'SMS Subscribers', type: 'integer', show: false, width: 140 }, + { id: 'pushTotal', title: 'Push Subscribers', type: 'integer', show: false, width: 140 }, + { + id: 'total', + title: 'Subscribers', + type: 'integer', + show: true, + filter: false, + width: 140 + }, + { id: '$createdAt', title: 'Created', type: 'datetime', show: true, width: 140 } + ]); + const topicCreated = async (event: CustomEvent>>) => { await goto(`${base}/console/project-${project}/messaging/topics/topic-${event.detail.$id}`); }; @@ -73,7 +92,7 @@ {#if data.topics.total} -
    +
    ([ - { id: '$id', title: 'Topic ID', type: 'string', show: true, width: 140 }, - { id: 'name', title: 'Name', type: 'string', show: true, width: 140 }, - { id: 'emailTotal', title: 'Email Subscribers', type: 'integer', show: false, width: 140 }, - { id: 'smsTotal', title: 'SMS Subscribers', type: 'integer', show: false, width: 140 }, - { id: 'pushTotal', title: 'Push Subscribers', type: 'integer', show: false, width: 140 }, - { id: 'total', title: 'Subscribers', type: 'integer', show: true, filter: false, width: 140 }, - { id: '$createdAt', title: 'Created', type: 'datetime', show: true, width: 140 } -]); diff --git a/src/routes/console/project-[project]/messaging/topics/table.svelte b/src/routes/console/project-[project]/messaging/topics/table.svelte index 8e611a83b..9ffc0b2eb 100644 --- a/src/routes/console/project-[project]/messaging/topics/table.svelte +++ b/src/routes/console/project-[project]/messaging/topics/table.svelte @@ -16,13 +16,14 @@ } from '$lib/elements/table'; import { addNotification } from '$lib/stores/notifications'; import type { PageData } from './$types'; - import { columns } from './store'; import { project } from '$routes/console/project-[project]/store'; import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; import { toLocaleDateTime } from '$lib/helpers/date'; + import type { Column } from '$lib/helpers/types'; + export let columns: Column[]; export let data: PageData; let selectedIds: string[] = []; @@ -62,7 +63,7 @@ d.$id)} /> - {#each $columns as column} + {#each columns as column} {#if column.show} {column.title} {/if} @@ -74,10 +75,10 @@ href={`${base}/console/project-${$project.$id}/messaging/topics/topic-${topic.$id}`}> - {#each $columns as column (column.id)} + {#each columns as column (column.id)} {#if column.show} {#if column.id === '$id'} - {#key $columns} + {#key column.id} {topic.$id} From 2c8acf343097b8342a15fda8794ad3f6b9361eb3 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Thu, 29 Feb 2024 20:49:10 -0800 Subject: [PATCH 361/479] fix(messaging): localize the messages columns When it was global, the state (show values) would persist when switching between different projects rather than resetting back to the default. --- .../console/project-[project]/messaging/+page.svelte | 12 +++++++++++- .../console/project-[project]/messaging/store.ts | 10 ---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/+page.svelte b/src/routes/console/project-[project]/messaging/+page.svelte index e27bd3f07..ea367ea75 100644 --- a/src/routes/console/project-[project]/messaging/+page.svelte +++ b/src/routes/console/project-[project]/messaging/+page.svelte @@ -34,12 +34,14 @@ import FailedModal from './failedModal.svelte'; import MessageStatusPill from './messageStatusPill.svelte'; import ProviderType from './providerType.svelte'; - import { columns, showCreate } from './store'; + import { showCreate } from './store'; import { sdk } from '$lib/stores/sdk'; import { invalidate } from '$app/navigation'; import { trackEvent, Submit, trackError } from '$lib/actions/analytics'; import { Dependencies } from '$lib/constants'; import { addNotification } from '$lib/stores/notifications'; + import type { Column } from '$lib/helpers/types'; + import { writable } from 'svelte/store'; export let data: PageData; let selected: string[] = []; @@ -50,6 +52,14 @@ let showCreateDropdownMobile = false; let showCreateDropdownDesktop = false; let showCreateDropdownEmpty = false; + const columns = writable([ + { id: '$id', title: 'Message ID', type: 'string', show: true, width: 140 }, + { id: 'message', title: 'Message', type: 'string', show: false, filter: false, width: 140 }, + { id: 'providerType', title: 'Type', type: 'string', show: true, width: 100 }, + { id: 'status', title: 'Status', type: 'string', show: true, width: 120 }, + { id: 'scheduledAt', title: 'Scheduled at', type: 'datetime', show: true, width: 120 }, + { id: 'deliveredAt', title: 'Delivered at', type: 'datetime', show: false, width: 120 } + ]); const project = $page.params.project; diff --git a/src/routes/console/project-[project]/messaging/store.ts b/src/routes/console/project-[project]/messaging/store.ts index bf214f6c3..cdd4bffdc 100644 --- a/src/routes/console/project-[project]/messaging/store.ts +++ b/src/routes/console/project-[project]/messaging/store.ts @@ -1,17 +1,7 @@ -import type { Column } from '$lib/helpers/types'; import type { Models } from '@appwrite.io/console'; import { writable } from 'svelte/store'; export const showCreate = writable(false); -export const columns = writable([ - { id: '$id', title: 'Message ID', type: 'string', show: true, width: 140 }, - { id: 'message', title: 'Message', type: 'string', show: false, filter: false, width: 140 }, - { id: 'providerType', title: 'Type', type: 'string', show: true, width: 100 }, - { id: 'status', title: 'Status', type: 'string', show: true, width: 120 }, - { id: 'scheduledAt', title: 'Scheduled at', type: 'datetime', show: true, width: 120 }, - { id: 'deliveredAt', title: 'Delivered at', type: 'datetime', show: false, width: 120 } -]); - export const targetsById = writable>({}); export const topicsById = writable>({}); From 6f264cf7812febb2c710314d48818159e11276a1 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Thu, 29 Feb 2024 21:01:14 -0800 Subject: [PATCH 362/479] fix(messaging): provider details design fixes - rename channel label to type for consistency - add spacing below Enabled/Disabled switch --- .../provider-[provider]/updateStatus.svelte | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateStatus.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateStatus.svelte index 6e62a27fc..adb34d307 100644 --- a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateStatus.svelte +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateStatus.svelte @@ -134,16 +134,20 @@
    -
    +
    -

    Provider:

    -

    Channel:

    -

    Created: {toLocaleDateTime($providerData.$createdAt)}

    +
    +

    + Provider: +

    +

    Type:

    +

    Created: {toLocaleDateTime($providerData.$createdAt)}

    +
    From 750a839336d3ae5a47dc603deb32deefaca08188 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Thu, 29 Feb 2024 21:34:01 -0800 Subject: [PATCH 363/479] feat(messaging): validate before moving to the next message wizard step --- .../messaging/wizard/emailFormList.svelte | 3 ++- .../messaging/wizard/pushFormList.svelte | 2 ++ .../project-[project]/messaging/wizard/smsFormList.svelte | 3 ++- .../project-[project]/messaging/wizard/step2.svelte | 8 +++++++- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte b/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte index ca25f281c..693d209fb 100644 --- a/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte +++ b/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte @@ -49,6 +49,7 @@ @@ -56,10 +57,10 @@ - diff --git a/src/routes/console/project-[project]/messaging/wizard/pushFormList.svelte b/src/routes/console/project-[project]/messaging/wizard/pushFormList.svelte index 5137cafa2..7858daa6a 100644 --- a/src/routes/console/project-[project]/messaging/wizard/pushFormList.svelte +++ b/src/routes/console/project-[project]/messaging/wizard/pushFormList.svelte @@ -91,6 +91,7 @@ @@ -99,6 +100,7 @@ id="message" label="Message" placeholder="Type here..." + required maxlength={1000} bind:value={$messageParams[MessagingProviderType.Push]['body']}> diff --git a/src/routes/console/project-[project]/messaging/wizard/smsFormList.svelte b/src/routes/console/project-[project]/messaging/wizard/smsFormList.svelte index c01466df6..9b315caa1 100644 --- a/src/routes/console/project-[project]/messaging/wizard/smsFormList.svelte +++ b/src/routes/console/project-[project]/messaging/wizard/smsFormList.svelte @@ -38,8 +38,9 @@ diff --git a/src/routes/console/project-[project]/messaging/wizard/step2.svelte b/src/routes/console/project-[project]/messaging/wizard/step2.svelte index da25ba1fa..b922dd4a2 100644 --- a/src/routes/console/project-[project]/messaging/wizard/step2.svelte +++ b/src/routes/console/project-[project]/messaging/wizard/step2.svelte @@ -41,13 +41,19 @@ $targetsById = rest; } + async function beforeSubmit() { + if (topicIdsLength === 0 && targetIdsLength === 0) { + throw new Error('At least one topic or target is required.'); + } + } + $: topicIdsLength = Object.keys($topicsById).length; $: targetIdsLength = Object.keys($targetsById).length; $: $messageParams[$providerType].targets = Object.keys($targetsById); $: $messageParams[$providerType].topics = Object.keys($topicsById); - + Targets Select targets to whom this message should be directed. From a4e16750650e4db7bb5257d75c7bef932f5fb550 Mon Sep 17 00:00:00 2001 From: Utkarsh Ahuja Date: Fri, 1 Mar 2024 07:18:08 +0000 Subject: [PATCH 364/479] update zoho icon --- static/icons/dark/color/zoho.svg | 34 ++++--------------------- static/icons/dark/grayscale/zoho.svg | 36 +++++++-------------------- static/icons/light/color/zoho.svg | 34 ++++--------------------- static/icons/light/grayscale/zoho.svg | 36 +++++++-------------------- 4 files changed, 28 insertions(+), 112 deletions(-) diff --git a/static/icons/dark/color/zoho.svg b/static/icons/dark/color/zoho.svg index 106cba2ca..3da204a3d 100644 --- a/static/icons/dark/color/zoho.svg +++ b/static/icons/dark/color/zoho.svg @@ -1,30 +1,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + diff --git a/static/icons/dark/grayscale/zoho.svg b/static/icons/dark/grayscale/zoho.svg index 6f037159c..c0ea49a22 100644 --- a/static/icons/dark/grayscale/zoho.svg +++ b/static/icons/dark/grayscale/zoho.svg @@ -1,28 +1,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + diff --git a/static/icons/light/color/zoho.svg b/static/icons/light/color/zoho.svg index 106cba2ca..3da204a3d 100644 --- a/static/icons/light/color/zoho.svg +++ b/static/icons/light/color/zoho.svg @@ -1,30 +1,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + diff --git a/static/icons/light/grayscale/zoho.svg b/static/icons/light/grayscale/zoho.svg index 6f037159c..a11e6c57e 100644 --- a/static/icons/light/grayscale/zoho.svg +++ b/static/icons/light/grayscale/zoho.svg @@ -1,28 +1,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + From 997b1ec4ee36733aee1fabbc0fad14ad20987a1b Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Fri, 1 Mar 2024 02:31:24 +0100 Subject: [PATCH 365/479] fix: popover --- src/lib/elements/forms/inputDomain.svelte | 8 ++-- src/lib/elements/forms/inputEmail.svelte | 8 ++-- src/lib/elements/forms/inputFile.svelte | 8 ++-- src/lib/elements/forms/inputPassword.svelte | 8 ++-- src/lib/elements/forms/inputPhone.svelte | 8 ++-- src/lib/elements/forms/inputText.svelte | 8 ++-- .../messaging/providers/popoverContent.svelte | 10 ++--- .../providers/settingsFormList.svelte | 43 +++++++++++-------- 8 files changed, 59 insertions(+), 42 deletions(-) diff --git a/src/lib/elements/forms/inputDomain.svelte b/src/lib/elements/forms/inputDomain.svelte index 007c12e97..db798dea7 100644 --- a/src/lib/elements/forms/inputDomain.svelte +++ b/src/lib/elements/forms/inputDomain.svelte @@ -1,5 +1,5 @@
    diff --git a/src/lib/elements/forms/inputEmail.svelte b/src/lib/elements/forms/inputEmail.svelte index 478839bbf..b925a1b62 100644 --- a/src/lib/elements/forms/inputEmail.svelte +++ b/src/lib/elements/forms/inputEmail.svelte @@ -1,5 +1,5 @@
    @@ -10,11 +10,11 @@

    {@html line}

    {/each} - {#if popoverImage} + {#if image} + darkSrc={image.src.dark} + lightSrc={image.src.light} + alt={image.alt} /> {/if}
    diff --git a/src/routes/console/project-[project]/messaging/providers/settingsFormList.svelte b/src/routes/console/project-[project]/messaging/providers/settingsFormList.svelte index e0c330642..92baa0d30 100644 --- a/src/routes/console/project-[project]/messaging/providers/settingsFormList.svelte +++ b/src/routes/console/project-[project]/messaging/providers/settingsFormList.svelte @@ -40,21 +40,31 @@ | FCMProviderParams | APNSProviderParams >; + + function getPopoverProps(input: ProviderInput) { + if (!input.popover) { + return {}; + } + return { + lines: input.popover, + image: input.popoverImage + }; + } {#each inputs as input} - {@const popoverImage = input.popoverImage} + {@const popover = input.popover ? PopoverContent : null} + {@const popoverProps = getPopoverProps(input)} {#if input.type === 'text'} - - - {:else if input.type === 'password'} - - - {:else if input.type === 'email'} - - - {:else if input.type === 'domain'} - - - {:else if input.type === 'phone'} - - - {:else if input.type === 'file'} - - - {:else if input.type === 'switch'} From 3e1cecc40ae41457ac866ef038157b0a395a16dc Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Fri, 1 Mar 2024 02:33:35 +0100 Subject: [PATCH 366/479] fix: use template const for popover props with email input --- .../messaging/providers/popoverContent.svelte | 5 +---- .../messaging/providers/settingsFormList.svelte | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/providers/popoverContent.svelte b/src/routes/console/project-[project]/messaging/providers/popoverContent.svelte index 378e9424d..7b9a1e723 100644 --- a/src/routes/console/project-[project]/messaging/providers/popoverContent.svelte +++ b/src/routes/console/project-[project]/messaging/providers/popoverContent.svelte @@ -11,10 +11,7 @@ {/each} {#if image} - + {/if} diff --git a/src/routes/console/project-[project]/messaging/providers/settingsFormList.svelte b/src/routes/console/project-[project]/messaging/providers/settingsFormList.svelte index 92baa0d30..8d167bbdf 100644 --- a/src/routes/console/project-[project]/messaging/providers/settingsFormList.svelte +++ b/src/routes/console/project-[project]/messaging/providers/settingsFormList.svelte @@ -84,7 +84,7 @@ placeholder={input.placeholder} required={!input.optional} {popover} - popoverProps={getPopoverProps(input)} + {popoverProps} bind:value={params[input.name]}> {:else if input.type === 'domain'} From 0df541c80042c6915bb17e95d01376130eec6d98 Mon Sep 17 00:00:00 2001 From: Arman Date: Fri, 1 Mar 2024 11:55:59 +0100 Subject: [PATCH 367/479] fix: messaging page container header mobile view --- src/lib/components/drop.svelte | 2 + src/lib/components/dropList.svelte | 12 ++++- src/lib/components/filters/filters.svelte | 3 +- src/lib/components/searchQuery.svelte | 3 +- src/lib/components/viewSelector.svelte | 8 +++- .../project-[project]/messaging/+page.svelte | 47 +++++++++---------- 6 files changed, 44 insertions(+), 31 deletions(-) diff --git a/src/lib/components/drop.svelte b/src/lib/components/drop.svelte index f61ff6a24..a1c222e08 100644 --- a/src/lib/components/drop.svelte +++ b/src/lib/components/drop.svelte @@ -12,6 +12,7 @@ export let childStart = false; export let noStyle = false; export let fullWidth = false; + export let wrapperFullWidth = false; export let fixed = false; export let display = 'block'; @@ -104,6 +105,7 @@
    diff --git a/src/lib/components/dropList.svelte b/src/lib/components/dropList.svelte index dd8271f1d..c6ad97dd1 100644 --- a/src/lib/components/dropList.svelte +++ b/src/lib/components/dropList.svelte @@ -11,10 +11,20 @@ export let noStyle = false; export let width: string = null; export let fullWidth = false; + export let wrapperFullWidth = false; export let position: 'relative' | 'static' = 'relative'; - +
    ; + export let fullWidthMobile = false; const parsedQueries = queryParamToMap(query); queries.set(parsedQueries); @@ -55,7 +56,7 @@
    - + + From f10b700dce989d32281654304d40d59993b28cec Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Fri, 1 Mar 2024 20:24:10 -0800 Subject: [PATCH 374/479] feat(databases): show attribute/index failed error in modal --- .../attributes/+page.svelte | 29 +++++++++++++----- .../indexes/+page.svelte | 30 ++++++++++++++----- 2 files changed, 45 insertions(+), 14 deletions(-) diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/attributes/+page.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/attributes/+page.svelte index bd48e7807..3ca3f4a97 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/attributes/+page.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/attributes/+page.svelte @@ -16,6 +16,7 @@ import { Container } from '$lib/layout'; import Create from '../createAttribute.svelte'; import { isRelationship } from '../document-[document]/attributes/store'; + import FailedModal from '../failedModal.svelte'; import CreateIndex from '../indexes/createIndex.svelte'; import { attributes, type Attributes } from '../store'; import CreateAttributeDropdown from './createAttributeDropdown.svelte'; @@ -35,6 +36,8 @@ let showDelete = false; let showEdit = false; let showCreateIndex = false; + let showFailed = false; + let error = ''; enum attributeFormatIcon { ip = 'location-marker', @@ -89,13 +92,24 @@ {attribute.key}
    {#if attribute.status !== 'available'} - - {attribute.status} - +
    + + {attribute.status} + + {#if attribute.error} + + {/if} +
    {:else if attribute.required} Required {/if} @@ -214,3 +228,4 @@ + diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/indexes/+page.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/indexes/+page.svelte index 4cc2d4263..a3d50bb09 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/indexes/+page.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/indexes/+page.svelte @@ -20,6 +20,7 @@ import { Button } from '$lib/elements/forms'; import CreateAttributeDropdown from '../attributes/createAttributeDropdown.svelte'; import type { Option } from '../attributes/store'; + import FailedModal from '../failedModal.svelte'; let showDropdown = []; let selectedIndex: Models.Index = null; @@ -29,6 +30,8 @@ let showCreateAttribute = false; let showCreateDropdown = false; let selectedAttribute: Option['name'] = null; + let showFailed = false; + let error = ''; @@ -60,13 +63,24 @@
    {index.key} {#if index.status !== 'available'} - - {index.status} - +
    + + {index.status} + + {#if index.error} + + {/if} +
    {/if}
    @@ -162,3 +176,5 @@ {/if} + + From c24e7b1c9ee4073e49e210bad215c8b38f295323 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Fri, 1 Mar 2024 20:27:45 -0800 Subject: [PATCH 375/479] feat(databases): prevent deleting processing attributes Most of the time, develoeprs should just wait for processing attributes. If they delete it, it will most likely become stuck. As such, hide the delete button to reduce the occurrence of stuck attributes. --- .../attributes/+page.svelte | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/attributes/+page.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/attributes/+page.svelte index 3ca3f4a97..88bc3bef7 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/attributes/+page.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/attributes/+page.svelte @@ -172,15 +172,17 @@ Create Index {/if} - { - selectedAttribute = attribute; - showDelete = true; - showDropdown[index] = false; - }}> - Delete - + {#if attribute.status !== 'processing'} + { + selectedAttribute = attribute; + showDelete = true; + showDropdown[index] = false; + }}> + Delete + + {/if}
    From 0802237e9a01516ac9d8134c7f6f0a3cf779efe2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Mon, 4 Mar 2024 11:10:09 +0100 Subject: [PATCH 376/479] Update console for new MFA methods --- package-lock.json | 8 ++++---- package.json | 2 +- src/routes/console/account/+layout.ts | 2 +- src/routes/console/account/deleteMfa.svelte | 2 +- src/routes/console/account/mfa.svelte | 12 +++++++----- .../project-[project]/auth/user-[user]/+layout.ts | 2 +- .../auth/user-[user]/deleteMfa.svelte | 2 +- src/routes/mfa/+page.svelte | 14 ++------------ 8 files changed, 18 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 875763d65..3a1c153f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "@appwrite/console", "dependencies": { - "@appwrite.io/console": "^0.6.0-rc.14", + "@appwrite.io/console": "^0.6.0-rc.17", "@appwrite.io/pink": "0.4.0", "@appwrite.io/pink-icons": "0.4.0", "@popperjs/core": "^2.11.8", @@ -158,9 +158,9 @@ "integrity": "sha512-TD+xbmsBLyYy/IxFimW/YL/9L2IEnM7/EoV9Aeh56U64Ify8o27HJcKjo38XY9Tcn0uOq1AX3thkKgvtWvwFQg==" }, "node_modules/@appwrite.io/console": { - "version": "0.6.0-rc.14", - "resolved": "https://registry.npmjs.org/@appwrite.io/console/-/console-0.6.0-rc.14.tgz", - "integrity": "sha512-7Od0RuGRF01YUCWGTAvlTvgUG7sUCVHG9ig11OKz9jjBxE91BVcWsmqGWiXw+xb4HhF2jiyHd9ZU3sKAo0IC3w==", + "version": "0.6.0-rc.17", + "resolved": "https://registry.npmjs.org/@appwrite.io/console/-/console-0.6.0-rc.17.tgz", + "integrity": "sha512-QCUMpvQIt9NseNHlVNFk8wuTro0i6UXeGxO9nuXtIOC9oC20vi5tdiFz1ImjYS2SVtlB0PJRGf58Q/p2WPoR1g==", "dependencies": { "cross-fetch": "3.1.5", "isomorphic-form-data": "2.0.0" diff --git a/package.json b/package.json index c608c667c..1afb8d285 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "e2e": "playwright test tests/e2e" }, "dependencies": { - "@appwrite.io/console": "^0.6.0-rc.14", + "@appwrite.io/console": "^0.6.0-rc.17", "@appwrite.io/pink": "0.4.0", "@appwrite.io/pink-icons": "0.4.0", "@popperjs/core": "^2.11.8", diff --git a/src/routes/console/account/+layout.ts b/src/routes/console/account/+layout.ts index 4511cbb1f..2341ee3c0 100644 --- a/src/routes/console/account/+layout.ts +++ b/src/routes/console/account/+layout.ts @@ -8,7 +8,7 @@ export const load: LayoutLoad = async ({ depends }) => { depends(Dependencies.FACTORS); return { - factors: await sdk.forConsole.account.listFactors(), + factors: await sdk.forConsole.account.listMfaFactors(), header: Header, breadcrumbs: Breadcrumbs }; diff --git a/src/routes/console/account/deleteMfa.svelte b/src/routes/console/account/deleteMfa.svelte index d1fc639f9..f6dc1449c 100644 --- a/src/routes/console/account/deleteMfa.svelte +++ b/src/routes/console/account/deleteMfa.svelte @@ -17,7 +17,7 @@ async function deleteProvider() { try { - await sdk.forConsole.account.deleteAuthenticator(AuthenticatorType.Totp, code); + await sdk.forConsole.account.deleteMfaAuthenticator(AuthenticatorType.Totp, code); await invalidate(Dependencies.ACCOUNT); await invalidate(Dependencies.FACTORS); showDelete = false; diff --git a/src/routes/console/account/mfa.svelte b/src/routes/console/account/mfa.svelte index 11d8db720..5f38068bd 100644 --- a/src/routes/console/account/mfa.svelte +++ b/src/routes/console/account/mfa.svelte @@ -16,15 +16,17 @@ let copyParent: HTMLElement; let code: string; let type: Models.MfaType = null; + let codes: Models.MfaRecoveryCodes = null; async function addAuthenticator(): Promise { - type = await sdk.forConsole.account.addAuthenticator(AuthenticatorType.Totp); + type = await sdk.forConsole.account.createMfaAuthenticator(AuthenticatorType.Totp); return sdk.forConsole.avatars.getQR(type.uri, 192 * 2); } async function verifyAuthenticator() { try { - await sdk.forConsole.account.verifyAuthenticator(AuthenticatorType.Totp, code); + await sdk.forConsole.account.updateMfaAuthenticator(AuthenticatorType.Totp, code); + codes = await sdk.forConsole.account.createMfaRecoveryCodes(); await invalidate(Dependencies.ACCOUNT); await invalidate(Dependencies.FACTORS); showSetup = false; @@ -103,8 +105,8 @@ description="Learn more about multi-factor authentication in our documentation." bind:show={showRecoveryCodes} onSubmit={verifyAuthenticator}> - {#if type} - {@const formattedBackupCodes = type.backups.join('\n')} + {#if type && codes} + {@const formattedBackupCodes = codes.recoveryCodes.join('\n')} It is highly recommended to securely store your recovery codes @@ -140,7 +142,7 @@
    - {#each type.backups as code} + {#each codes.recoveryCodes as code} {code} diff --git a/src/routes/console/project-[project]/auth/user-[user]/+layout.ts b/src/routes/console/project-[project]/auth/user-[user]/+layout.ts index a695abc55..e0cc98485 100644 --- a/src/routes/console/project-[project]/auth/user-[user]/+layout.ts +++ b/src/routes/console/project-[project]/auth/user-[user]/+layout.ts @@ -13,7 +13,7 @@ export const load: LayoutLoad = async ({ params, depends }) => { header: Header, breadcrumbs: Breadcrumbs, user: await sdk.forProject.users.get(params.user), - userFactors: await sdk.forProject.users.listFactors(params.user) + userFactors: await sdk.forProject.users.listMfaFactors(params.user) }; } catch (e) { error(e.code, e.message); diff --git a/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte b/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte index 3727ffcba..4e66a6a30 100644 --- a/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte +++ b/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte @@ -15,7 +15,7 @@ async function deleteProvider() { try { - await sdk.forConsole.users.deleteAuthenticator($user.$id, AuthenticatorType.Totp); + await sdk.forConsole.users.deleteMfaAuthenticator($user.$id, AuthenticatorType.Totp); await invalidate(Dependencies.ACCOUNT); await invalidate(Dependencies.FACTORS); showDelete = false; diff --git a/src/routes/mfa/+page.svelte b/src/routes/mfa/+page.svelte index eedc50900..46653e270 100644 --- a/src/routes/mfa/+page.svelte +++ b/src/routes/mfa/+page.svelte @@ -16,10 +16,10 @@ async function verify() { try { disabled = true; - const challenge = await sdk.forConsole.account.createChallenge( + const challenge = await sdk.forConsole.account.createMfaChallenge( AuthenticationFactor.Totp ); - await sdk.forConsole.account.updateChallenge(challenge.$id, code); + await sdk.forConsole.account.updateMfaChallenge(challenge.$id, code); await invalidate(Dependencies.ACCOUNT); trackEvent(Submit.AccountCreate); if ($page.url.searchParams) { @@ -61,14 +61,4 @@ - - - - From 3d710ce3a3a76e987fc97575194223596128d653 Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 5 Mar 2024 18:21:36 +0100 Subject: [PATCH 377/479] fix: setting page missing on selfhosted, heading trim and alignment --- src/lib/components/drop.svelte | 6 ++- src/lib/components/heading.svelte | 6 ++- .../organization-[organization]/header.svelte | 41 ++++++++++++------- .../settings/+page.ts | 14 +++++-- .../settings/deleteOrganizationModal.svelte | 4 +- 5 files changed, 49 insertions(+), 22 deletions(-) diff --git a/src/lib/components/drop.svelte b/src/lib/components/drop.svelte index d6c899df2..42d46324d 100644 --- a/src/lib/components/drop.svelte +++ b/src/lib/components/drop.svelte @@ -100,7 +100,11 @@ -
    +
    diff --git a/src/lib/components/heading.svelte b/src/lib/components/heading.svelte index 440693da1..cfb52ea77 100644 --- a/src/lib/components/heading.svelte +++ b/src/lib/components/heading.svelte @@ -10,6 +10,10 @@ export { classes as class }; - + diff --git a/src/routes/console/organization-[organization]/header.svelte b/src/routes/console/organization-[organization]/header.svelte index 23c2d23d8..b42a09643 100644 --- a/src/routes/console/organization-[organization]/header.svelte +++ b/src/routes/console/organization-[organization]/header.svelte @@ -2,7 +2,15 @@ import { base } from '$app/paths'; import { page } from '$app/stores'; import { tooltip } from '$lib/actions/tooltip'; - import { AvatarGroup, DropList, DropListItem, DropListLink, Tab, Tabs } from '$lib/components'; + import { + AvatarGroup, + DropList, + DropListItem, + DropListLink, + Heading, + Tab, + Tabs + } from '$lib/components'; import { BillingPlan } from '$lib/constants'; import { Pill } from '$lib/elements'; import { Button } from '$lib/elements/forms'; @@ -41,6 +49,13 @@ $: avatars = $members.memberships?.map((m) => m.userName) ?? []; $: organizationId = $page.params.organization; $: path = `/console/organization-${organizationId}`; + $: permanentTabSettings = [ + { + href: `${path}/settings`, + event: 'settings', + title: 'Settings' + } + ]; $: permanentTabs = [ { href: path, @@ -55,13 +70,7 @@ hasChildren: true } ]; - $: permanentTabSettings = [ - { - href: `${path}/settings`, - event: 'settings', - title: 'Settings' - } - ]; + $: tabs = isCloud ? [ ...permanentTabs, @@ -78,19 +87,21 @@ }, ...permanentTabSettings ] - : permanentTabs; + : [...permanentTabs, ...permanentTabSettings]; {#if $organization?.$id} - + {#each $organizationList.teams as org} diff --git a/src/routes/console/organization-[organization]/settings/+page.ts b/src/routes/console/organization-[organization]/settings/+page.ts index f4db3678f..e97b456ee 100644 --- a/src/routes/console/organization-[organization]/settings/+page.ts +++ b/src/routes/console/organization-[organization]/settings/+page.ts @@ -2,12 +2,18 @@ import type { PageLoad } from './$types'; import { Dependencies } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; import { Query } from '@appwrite.io/console'; +import { isCloud } from '$lib/system'; export const load: PageLoad = async ({ depends, parent }) => { const { organization } = await parent(); depends(Dependencies.ORGANIZATION); - return { - projects: await sdk.forConsole.projects.list([Query.equal('teamId', organization.$id)]), - invoices: await sdk.forConsole.billing.listInvoices(organization.$id) - }; + + const projects = await sdk.forConsole.projects.list([Query.equal('teamId', organization.$id)]); + + if (isCloud) { + return { + projects, + invoices: await sdk.forConsole.billing.listInvoices(organization.$id) + }; + } else return { projects }; }; diff --git a/src/routes/console/organization-[organization]/settings/deleteOrganizationModal.svelte b/src/routes/console/organization-[organization]/settings/deleteOrganizationModal.svelte index b017bff83..824c50ddd 100644 --- a/src/routes/console/organization-[organization]/settings/deleteOrganizationModal.svelte +++ b/src/routes/console/organization-[organization]/settings/deleteOrganizationModal.svelte @@ -51,7 +51,9 @@ } } - $: upcomingInvoice = invoices.invoices.find((i) => i.status === 'upcoming' && i.amount > 0); + $: upcomingInvoice = isCloud + ? invoices.invoices.find((i) => i.status === 'upcoming' && i.amount > 0) + : null; Date: Tue, 5 Mar 2024 13:09:06 -0800 Subject: [PATCH 378/479] fix(messaging): fix provider card height in provider wizard Don't make the height the same or else there will be extra space. --- .../project-[project]/messaging/providers/wizard/provider.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/src/routes/console/project-[project]/messaging/providers/wizard/provider.svelte b/src/routes/console/project-[project]/messaging/providers/wizard/provider.svelte index 9b41f6d63..e56bf339d 100644 --- a/src/routes/console/project-[project]/messaging/providers/wizard/provider.svelte +++ b/src/routes/console/project-[project]/messaging/providers/wizard/provider.svelte @@ -179,6 +179,7 @@ .grid-box { --grid-gap: 1rem; grid-template-columns: 1fr 1fr; + grid-auto-rows: auto; } :global(body:not(.theme-dark)) .grid-box :global(.card) { From c2640a33f9b6d9dd2a65322f91e78a9ca9371856 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Tue, 5 Mar 2024 13:40:08 -0800 Subject: [PATCH 379/479] fix(messaging): fix messaging container header The create message button should be in the same row as the search input and filter and column buttons on desktop. --- .../console/project-[project]/messaging/+page.svelte | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/+page.svelte b/src/routes/console/project-[project]/messaging/+page.svelte index d27f3e37c..a9272aee3 100644 --- a/src/routes/console/project-[project]/messaging/+page.svelte +++ b/src/routes/console/project-[project]/messaging/+page.svelte @@ -50,6 +50,7 @@ let showFailed = false; let errors: string[] = []; let showCreateDropdownDesktop = false; + let showCreateDropdownMobile = false; let showCreateDropdownEmpty = false; const columns = writable([ { id: '$id', title: 'Message ID', type: 'string', show: true, width: 140 }, @@ -92,7 +93,9 @@ - +
    + +
    - +
    From 731159cb89b83e4aab09f602018243c91ae2458b Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 6 Mar 2024 11:19:15 +0100 Subject: [PATCH 380/479] fix: file picker --- src/lib/components/filePicker.svelte | 562 +++++++++++++++------------ 1 file changed, 309 insertions(+), 253 deletions(-) diff --git a/src/lib/components/filePicker.svelte b/src/lib/components/filePicker.svelte index 8ab23a8c7..a7c0a34a2 100644 --- a/src/lib/components/filePicker.svelte +++ b/src/lib/components/filePicker.svelte @@ -23,6 +23,8 @@ import Heading from './heading.svelte'; import { clickOnEnter } from '$lib/helpers/a11y'; import Empty from './empty.svelte'; + import { base } from '$app/paths'; + import { page } from '$app/stores'; export let show: boolean; export let selectedBucket: string = null; @@ -88,13 +90,22 @@ resetBucket(); } + function handleVisibilityChange() { + if (!document.hidden) { + buckets = loadBuckets(); + } + } + let currentBucket: Models.Bucket = null; let currentFile: Models.File = null; - const buckets = sdk.forProject.storage.listBuckets().then((n) => { - currentBucket = n.buckets[0] ?? null; + let buckets: Promise = loadBuckets(); + async function loadBuckets() { + const response = await sdk.forProject.storage.listBuckets(); - return n; - }); + currentBucket = response.buckets[0] ?? null; + + return response; + } $: files = currentBucket && @@ -122,6 +133,8 @@ } + +
    - - {#if currentBucket} -
    -
    -
    - {currentBucket?.name} -
    - - {currentBucket?.$id} - -
    + {#await buckets} +
    - -
    -
    -
      -
    • - -
    • -
    • - -
    • -
    + class="u-position-absolute u-width-full-line u-flex u-flex-vertical u-main-center u-cross-center u-gap-16 u-margin-block-start-32" + style="inset-inline-start: 0;"> +
    +

    Loading files...

    +
    +
    + {:then response} + {#if response?.total} + {#if currentBucket} +
    +
    +
    + {currentBucket?.name} +
    + + {currentBucket?.$id} +
    +
    + +
    +
    +
      +
    • + +
    • +
    • + +
    • +
    +
    + +
    +
    +
    + + {#if files} + {#await files then response} +
    + {#if response?.files?.length} + {#if view === 'grid'} +
      + {#each response?.files as file} +
    • +
      +
      + selectFile(file)} + on:keyup={clickOnEnter} + tabindex="0" + style:aspect-ratio="1/1" + style:display="flex" + style:align-items="flex-end" + style:flex-direction="row-reverse" + style:box-shadow="none" + class="card u-height-100-percent u-gap-16" + style="--card-padding:0.5rem;--card-padding-mobile:0.5rem; --card-border-radius:var(--border-radius-medium);"> + +
      + {file.name} +
      +
    • + {/each} +
    + {/if} + {#if view === 'list'} +
    + + Filename + + ID + + + Type + + + Size + + + Created + + + + {#each response?.files as file} + + selectFile(file)}> + +
    + + + {file.name} + + + {file.name} + +
    +
    + + {file.$id} + + + {file.mimeType} + + + {calculateSize( + file.sizeOriginal + )} + + + {toLocaleDate( + file.$createdAt + )} + +
    + {/each} +
    +
    + {/if} + {:else if $search} + +
    +
    + Sorry we couldn't find "{$search}" +

    + There are no files that match your + search. +

    +
    +
    + +
    +
    +
    + {:else} + +
    +
    + + No files found within this bucket. + +

    + Need a hand? Learn more in our + documentation. +

    +
    +
    +
    + {/if} +
    + {/await} + {/if} + {/if} + {:else} + +
    + + No buckets found +
    - - - {#if files} - {#await files} -
    -
    -
    -

    Loading files...

    -
    -
    - {:then response} -
    - {#if response?.files?.length} - {#if view === 'grid'} -
      - {#each response?.files as file} -
    • -
      -
      selectFile(file)} - on:keyup={clickOnEnter} - tabindex="0" - style:aspect-ratio="1/1" - style:display="flex" - style:align-items="flex-end" - style:flex-direction="row-reverse" - style:box-shadow="none" - class="card u-height-100-percent u-gap-16" - style="--card-padding:0.5rem;--card-padding-mobile:0.5rem; --card-border-radius:var(--border-radius-medium);"> - -
      - {file.name} -
      -
    • - {/each} -
    - {/if} - {#if view === 'list'} - - - Filename - - ID - - - Type - - - Size - - - Created - - - - {#each response?.files as file} - selectFile(file)}> - -
    - - - {file.name} - - - {file.name} - -
    -
    - - {file.$id} - - - {file.mimeType} - - - {calculateSize(file.sizeOriginal)} - - - {toLocaleDate(file.$createdAt)} - -
    - {/each} -
    -
    - {/if} - {:else if $search} - -
    -
    - Sorry we couldn't find "{$search}" -

    - There are no files that match your search. -

    -
    -
    - -
    -
    -
    - {:else} - -
    -
    - - No files found within this bucket. - -

    - Need a hand? Learn more in our - documentation. -

    -
    -
    -
    - {/if} -
    - {/await} + {/if} - {/if} + {/await}
    From 3699cb85db7bac2afd9d58e4a2f605afe43f9a13 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 6 Mar 2024 11:38:02 +0100 Subject: [PATCH 381/479] fix: build --- .../messaging/providers/settingsFormInput.svelte | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/providers/settingsFormInput.svelte b/src/routes/console/project-[project]/messaging/providers/settingsFormInput.svelte index 93062d19a..8b17b758c 100644 --- a/src/routes/console/project-[project]/messaging/providers/settingsFormInput.svelte +++ b/src/routes/console/project-[project]/messaging/providers/settingsFormInput.svelte @@ -41,7 +41,8 @@ >; export let fullWidth = false; - let popoverImage = input.popoverImage; + const popover = input.popover ? PopoverContent : null; + const popoverProps = getPopoverProps(input); function getPopoverProps(input: ProviderInput) { if (!input.popover) { @@ -54,8 +55,6 @@ } -{@const popover = input.popover ? PopoverContent : null} -{@const popoverProps = getPopoverProps(input)} {#if input.type === 'text'} Date: Wed, 6 Mar 2024 11:41:55 +0100 Subject: [PATCH 382/479] fix: formatting --- .../messaging/providers/settingsFormInput.svelte | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/providers/settingsFormInput.svelte b/src/routes/console/project-[project]/messaging/providers/settingsFormInput.svelte index 8b17b758c..615e13353 100644 --- a/src/routes/console/project-[project]/messaging/providers/settingsFormInput.svelte +++ b/src/routes/console/project-[project]/messaging/providers/settingsFormInput.svelte @@ -65,7 +65,7 @@ {popover} {popoverProps} {fullWidth} - bind:value={params[input.name]}/> + bind:value={params[input.name]} /> {:else if input.type === 'password'} + bind:value={params[input.name]} /> {:else if input.type === 'email'} + bind:value={params[input.name]} /> {:else if input.type === 'domain'} + bind:value={params[input.name]} /> {:else if input.type === 'phone'} + bind:value={params[input.name]} /> {:else if input.type === 'file'} + bind:files={files[input.name]} /> {:else if input.type === 'switch'} From f1c0b8210320e93926de9975c6041c91d6ec15fd Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 7 Mar 2024 10:17:46 +0100 Subject: [PATCH 383/479] fix: usage stat reduce function --- src/lib/layout/usage.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/layout/usage.svelte b/src/lib/layout/usage.svelte index bec778df3..381b61899 100644 --- a/src/lib/layout/usage.svelte +++ b/src/lib/layout/usage.svelte @@ -45,8 +45,8 @@ ): Array<[string, number]> { return metrics.reduceRight( (acc, curr) => { - acc.total -= curr.value; acc.data.unshift([curr.date, acc.total]); + acc.total -= curr.value; return acc; }, { From 795c182fb1ebc5bf355ba26ff9a9fff14f595eb2 Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 7 Mar 2024 15:59:36 +0100 Subject: [PATCH 384/479] refactor: first load redirection --- src/routes/+layout.svelte | 48 ++++++++++++++++++++++----------------- vite.config.ts | 3 ++- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 49e6ea616..1452936b0 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -7,7 +7,6 @@ import { reportWebVitals } from '$lib/helpers/vitals'; import { Notifications, Progress } from '$lib/layout'; import { app } from '$lib/stores/app'; - import { user } from '$lib/stores/user'; import { ENV, isCloud } from '$lib/system'; import * as Sentry from '@sentry/svelte'; import LogRocket from 'logrocket'; @@ -17,6 +16,7 @@ import { loading, requestedMigration } from './store'; import { parseIfString } from '$lib/helpers/object'; import Consent, { consent } from '$lib/components/consent.svelte'; + import type { Models } from '@appwrite.io/console'; if (browser) { window.VERCEL_ANALYTICS_ID = import.meta.env.VERCEL_ANALYTICS_ID?.toString() ?? false; @@ -64,37 +64,43 @@ /** * Handle initial load. */ - if (!$page.url.pathname.startsWith('/auth') && !$page.url.pathname.startsWith('/git')) { - const acceptedRoutes = [ - '/login', - '/register', - '/recover', - '/invite', - '/card', - '/hackathon' - ]; - if ($user) { - if ( - !$page.url.pathname.startsWith('/console') && - !$page.url.pathname.startsWith('/invite') && - !$page.url.pathname.startsWith('/card') && - !$page.url.pathname.startsWith('/hackathon') - ) { + + function shouldRedirect(route: string, routes: string[]) { + return !routes.some((n) => route.startsWith(n)); + } + + const authenticationRoutes = ['/auth', '/git']; + const acceptedUnauthenticatedRoutes = [ + '/login', + '/register', + '/recover', + '/invite', + '/card', + '/hackathon', + '/test' + ]; + const acceptedAuthenticatedRoutes = ['/console', '/invite', '/card', '/hackathon']; + + const pathname = $page.url.pathname; + const user = $page.data.account as Models.User>; + + if (shouldRedirect(pathname, authenticationRoutes)) { + if (user?.$id) { + if (shouldRedirect(pathname, acceptedAuthenticatedRoutes)) { await goto(`${base}/console`, { replaceState: true }); } - loading.set(false); } else { - if (acceptedRoutes.some((n) => $page.url.pathname.startsWith(n))) { - await goto(`${base}${$page.url.pathname}${$page.url.search}`); + if (acceptedUnauthenticatedRoutes.some((n) => pathname.startsWith(n))) { + await goto(`${base}${pathname}${$page.url.search}`); } else { await goto(`${base}/login`, { replaceState: true }); } - loading.set(false); } + loading.set(false); } }); diff --git a/vite.config.ts b/vite.config.ts index 754fb4acc..d1d53436e 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -13,7 +13,8 @@ const config = defineConfig({ '@analytics/google-analytics', 'analytics', 'dayjs', - 'dotenv' + 'dotenv', + 'zrender' ] }, define: { From 844f47677a3e020d640121c3a32e2ca930ec3a42 Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 7 Mar 2024 16:02:59 +0100 Subject: [PATCH 385/479] fix: remove test route --- src/routes/+layout.svelte | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 1452936b0..eadc302f3 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -76,8 +76,7 @@ '/recover', '/invite', '/card', - '/hackathon', - '/test' + '/hackathon' ]; const acceptedAuthenticatedRoutes = ['/console', '/invite', '/card', '/hackathon']; From 611b9b9d76c7c8f33f54c400420275ed65e924f7 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Fri, 8 Mar 2024 00:31:14 +0100 Subject: [PATCH 386/479] fix: design review --- src/lib/components/filePicker.svelte | 106 ++++++++++++------ src/lib/elements/forms/inputFilePicker.svelte | 6 +- .../project-[project]/messaging/create.svelte | 4 +- .../message-[message]/pushMessage.svelte | 32 ++++-- 4 files changed, 103 insertions(+), 45 deletions(-) diff --git a/src/lib/components/filePicker.svelte b/src/lib/components/filePicker.svelte index a7c0a34a2..3ec802af3 100644 --- a/src/lib/components/filePicker.svelte +++ b/src/lib/components/filePicker.svelte @@ -1,8 +1,8 @@ Date: Mon, 11 Mar 2024 02:07:09 +0100 Subject: [PATCH 396/479] fix(auth): use project sdk when deleting user authenticator --- .../console/project-[project]/auth/user-[user]/deleteMfa.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte b/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte index 4e66a6a30..89df333ed 100644 --- a/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte +++ b/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte @@ -15,7 +15,7 @@ async function deleteProvider() { try { - await sdk.forConsole.users.deleteMfaAuthenticator($user.$id, AuthenticatorType.Totp); + await sdk.forProject.users.deleteMfaAuthenticator($user.$id, AuthenticatorType.Totp); await invalidate(Dependencies.ACCOUNT); await invalidate(Dependencies.FACTORS); showDelete = false; From e6511afa6281691e393cddf66fb2db8e4fa70c2c Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 11 Mar 2024 02:29:06 +0100 Subject: [PATCH 397/479] fix(auth): reload card after deleting authenticator --- .../project-[project]/auth/user-[user]/deleteMfa.svelte | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte b/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte index 89df333ed..74e9c2673 100644 --- a/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte +++ b/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte @@ -16,8 +16,7 @@ async function deleteProvider() { try { await sdk.forProject.users.deleteMfaAuthenticator($user.$id, AuthenticatorType.Totp); - await invalidate(Dependencies.ACCOUNT); - await invalidate(Dependencies.FACTORS); + await invalidate(Dependencies.USER); showDelete = false; addNotification({ type: 'success', From 40fcc629f6c3b53786e99105ad29302e1a2f9e31 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 11 Mar 2024 02:29:39 +0100 Subject: [PATCH 398/479] fix(auth): fix delete user authenticator event --- src/lib/actions/analytics.ts | 1 + .../project-[project]/auth/user-[user]/deleteMfa.svelte | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib/actions/analytics.ts b/src/lib/actions/analytics.ts index 4a5b473e9..139312f05 100644 --- a/src/lib/actions/analytics.ts +++ b/src/lib/actions/analytics.ts @@ -164,6 +164,7 @@ export enum Submit { UserUpdateVerificationPhone = 'submit_user_update_verification_phone', UserTargetCreate = 'submit_user_target_create', UserTargetDelete = 'submit_user_target_delete', + UserAuthenticatorDelete = 'submit_user_authenticator_delete', OrganizationCreate = 'submit_organization_create', OrganizationDelete = 'submit_organization_delete', OrganizationUpdateName = 'submit_organization_update_name', diff --git a/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte b/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte index 74e9c2673..26d586c60 100644 --- a/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte +++ b/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte @@ -22,10 +22,10 @@ type: 'success', message: 'The authenticator has been removed' }); - trackEvent(Submit.AccountDelete); + trackEvent(Submit.UserAuthenticatorDelete); } catch (e) { error = e.message; - trackError(e, Submit.AccountDelete); + trackError(e, Submit.UserAuthenticatorDelete); } } From 751b3b81ddc04db2d244d2dde15951e80894a9a3 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 11 Mar 2024 02:31:42 +0100 Subject: [PATCH 399/479] fix(account): fix delete account authenticator event --- src/lib/actions/analytics.ts | 1 + src/routes/console/account/deleteMfa.svelte | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib/actions/analytics.ts b/src/lib/actions/analytics.ts index 139312f05..7c957adf8 100644 --- a/src/lib/actions/analytics.ts +++ b/src/lib/actions/analytics.ts @@ -151,6 +151,7 @@ export enum Submit { AccountDelete = 'submit_account_delete', AccountDeleteSession = 'submit_account_delete_session', AccountDeleteAllSessions = 'submit_account_delete_all_sessions', + AccountAuthenticatorDelete = 'submit_account_authenticator_delete', UserCreate = 'submit_user_create', UserDelete = 'submit_user_delete', UserUpdateEmail = 'submit_user_update_email', diff --git a/src/routes/console/account/deleteMfa.svelte b/src/routes/console/account/deleteMfa.svelte index f6dc1449c..15d0b629f 100644 --- a/src/routes/console/account/deleteMfa.svelte +++ b/src/routes/console/account/deleteMfa.svelte @@ -25,10 +25,10 @@ type: 'success', message: 'The authenticator has been removed' }); - trackEvent(Submit.AccountDelete); + trackEvent(Submit.AccountAuthenticatorDelete); } catch (e) { error = e.message; - trackError(e, Submit.AccountDelete); + trackError(e, Submit.AccountAuthenticatorDelete); } } From 363968bbfd665d0e84a0baa0155e0d6a5f7d88ce Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 11 Mar 2024 10:46:13 +0100 Subject: [PATCH 400/479] fix: tests --- vite.config.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/vite.config.ts b/vite.config.ts index fe5794f12..ca167b2f9 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -41,6 +41,11 @@ const testConfig = defineConfig({ include: ['@analytics/type-utils'] } } + }, + server: { + deps: { + inline: ['@analytics/type-utils'] + } } } }); From 94fd7847c113dfaebf977d4ad3f7ffcc2053c50c Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 11 Mar 2024 10:57:45 +0100 Subject: [PATCH 401/479] chore: remove unused config --- vite.config.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/vite.config.ts b/vite.config.ts index ca167b2f9..de1c825dd 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -35,13 +35,6 @@ const testConfig = defineConfig({ globals: true, pool: 'threads', setupFiles: ['./tests/unit/setup.ts'], - deps: { - optimizer: { - web: { - include: ['@analytics/type-utils'] - } - } - }, server: { deps: { inline: ['@analytics/type-utils'] From 4810c2aede86982aca489011660831cd45403592 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 11 Mar 2024 14:40:19 +0100 Subject: [PATCH 402/479] feat: messaging confirmation modal --- .../project-[project]/messaging/create.svelte | 4 +- .../messaging/wizard/step3.svelte | 52 ++++++++++++++----- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/create.svelte b/src/routes/console/project-[project]/messaging/create.svelte index 7cf554d2a..8d137a0fc 100644 --- a/src/routes/console/project-[project]/messaging/create.svelte +++ b/src/routes/console/project-[project]/messaging/create.svelte @@ -148,6 +148,8 @@ } ] }); + + $wizard.finalAction = create; - + diff --git a/src/routes/console/project-[project]/messaging/wizard/step3.svelte b/src/routes/console/project-[project]/messaging/wizard/step3.svelte index 47b9c2b2e..f240a4041 100644 --- a/src/routes/console/project-[project]/messaging/wizard/step3.svelte +++ b/src/routes/console/project-[project]/messaging/wizard/step3.svelte @@ -5,6 +5,9 @@ import { MessagingProviderType } from '@appwrite.io/console'; import { messageParams, providerType } from './store'; import { isSameDay, toLocaleDateISO, toLocaleTimeISO } from '$lib/helpers/date'; + import { wizard } from '$lib/stores/wizard'; + import { Modal } from '$lib/components'; + import { topicsById } from '../store'; let when: 'now' | 'later' = 'now'; let now = new Date(); @@ -13,6 +16,21 @@ let time: string; let dateTime: Date; let docsUrl = `https://appwrite.io/docs/products/messaging`; + let showConfimation = false; + + let totalTargets = $messageParams[$providerType].targets?.length ?? 0; + + const topics = $messageParams[$providerType].topics; + + for (const topic of topics) { + if ($providerType == MessagingProviderType.Push) { + totalTargets += $topicsById[topic].pushTotal; + } else if ($providerType == MessagingProviderType.Email) { + totalTargets += $topicsById[topic].emailTotal; + } else if ($providerType == MessagingProviderType.Sms) { + totalTargets += $topicsById[topic].smsTotal; + } + } switch ($providerType) { case MessagingProviderType.Email: @@ -40,6 +58,18 @@ timeZoneName: 'longGeneric' }; + async function askForConfirmation() { + $wizard.interceptorNotificationEnabled = false; + showConfimation = true; + throw 'Show confirmation'; + } + + async function submit() { + $wizard.interceptorNotificationEnabled = true; + await $wizard.finalAction(); + showConfimation = false; + } + $: if (when === 'now') { date = time = ''; } @@ -56,7 +86,7 @@ } - + Schedule Schedule the time you want to deliver this message. Learn more in our From 94b79f34ff7e98bf1c49fa7a546b3565beed99b9 Mon Sep 17 00:00:00 2001 From: ItzNotABug Date: Sun, 14 Apr 2024 18:19:58 +0530 Subject: [PATCH 427/479] update: navigate to onboarding page as before, after org. deletion. --- .../settings/deleteOrganizationModal.svelte | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/routes/console/organization-[organization]/settings/deleteOrganizationModal.svelte b/src/routes/console/organization-[organization]/settings/deleteOrganizationModal.svelte index 7cc7c3537..0af3f11db 100644 --- a/src/routes/console/organization-[organization]/settings/deleteOrganizationModal.svelte +++ b/src/routes/console/organization-[organization]/settings/deleteOrganizationModal.svelte @@ -37,8 +37,6 @@ : $organizationList.teams[0].$id; await goto(`${base}/console/organization-${teamId}`); - } else if ($organizationList?.total == 1) { - await goto(`${base}/console/organization-${$organizationList.teams[0].$id}`); } else { await goto(`${base}/console/onboarding`); } From 2cb51f16b1bf75824ee6d2011a015fb88111a02a Mon Sep 17 00:00:00 2001 From: Elad Shechter Date: Mon, 15 Apr 2024 09:59:08 +0100 Subject: [PATCH 428/479] - Fix alignment Use Is-only-icon button --- .../document-[document]/attributeItem.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributeItem.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributeItem.svelte index 1be558a2d..75d7d054b 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributeItem.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributeItem.svelte @@ -73,6 +73,7 @@ From f832cce5e2a8e241243b76eae26be3c49435d164 Mon Sep 17 00:00:00 2001 From: Khushboo Verma <43381712+vermakhushboo@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:15:01 +0530 Subject: [PATCH 429/479] Update building gifs --- static/images/vcs/status-building-dark.gif | Bin 176992 -> 89167 bytes static/images/vcs/status-building-light.gif | Bin 169466 -> 88132 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/static/images/vcs/status-building-dark.gif b/static/images/vcs/status-building-dark.gif index 30298127a636750ce715256d1aa2a734eeb61485..6d4afe72a19dd3d8c674b92750500023192c6733 100644 GIT binary patch literal 89167 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 literal 176992 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 diff --git a/static/images/vcs/status-building-light.gif b/static/images/vcs/status-building-light.gif index b1580f8484646b141c95f97ae59b433ed738b60c..c64a7643c12ffccb92d695526357c2f35d46d9ba 100644 GIT binary patch literal 88132 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

    eaKPUlv2ADGh=%hxu5ex;;(pId~ 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

    TX44!0GNFt?J!g1qVa?ks0aw*m-8yiO5n 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 z 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 Date: Mon, 15 Apr 2024 16:22:51 +0200 Subject: [PATCH 430/479] refactor: credits type --- src/lib/sdk/billing.ts | 6 +++--- .../billing/availableCredit.svelte | 8 +++----- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/lib/sdk/billing.ts b/src/lib/sdk/billing.ts index d935bd84e..ee46ba85c 100644 --- a/src/lib/sdk/billing.ts +++ b/src/lib/sdk/billing.ts @@ -94,11 +94,11 @@ export type Credit = { /** * Provided credit amount */ - credits: number; + total: number; /** - * Remaining up credit amount + * Remaining credit amount */ - creditsRemaining: number; + credits: number; /** * Credit expiration time in ISO 8601 format. */ diff --git a/src/routes/console/organization-[organization]/billing/availableCredit.svelte b/src/routes/console/organization-[organization]/billing/availableCredit.svelte index a2eed718b..716605913 100644 --- a/src/routes/console/organization-[organization]/billing/availableCredit.svelte +++ b/src/routes/console/organization-[organization]/billing/availableCredit.svelte @@ -56,10 +56,8 @@ request(); } - $: balance = creditList?.credits?.reduce( - (acc: number, curr: Credit) => acc + curr.creditsRemaining, - 0 - ); + $: balance = + creditList?.credits?.reduce((acc: number, curr: Credit) => acc + curr.credits, 0) ?? 0; $: { if (reloadOnWizardClose && !$wizard.show) { @@ -115,7 +113,7 @@ {toLocaleDate(credit.expiration)} - {formatCurrency(credit.credits)} + {formatCurrency(credit.total)} {/each} From 7e25aeb2dfb71a7987df33b0ee7ee7f7a165bd4c Mon Sep 17 00:00:00 2001 From: Darshan Date: Tue, 16 Apr 2024 14:34:18 +0530 Subject: [PATCH 431/479] revert: modal confirmation message. --- .../settings/deleteOrganizationModal.svelte | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/routes/console/organization-[organization]/settings/deleteOrganizationModal.svelte b/src/routes/console/organization-[organization]/settings/deleteOrganizationModal.svelte index 0af3f11db..48f168cd4 100644 --- a/src/routes/console/organization-[organization]/settings/deleteOrganizationModal.svelte +++ b/src/routes/console/organization-[organization]/settings/deleteOrganizationModal.svelte @@ -73,16 +73,9 @@

    {:else}

    - Are you sure you want to delete {$organization.name}? - {#if $projects.total > 0} - All projects ({$projects.total}) and data associated with this organization will be - deleted. - {:else} - There are no projects associated with this organization. - {/if} + Are you sure you want to delete {$organization.name}? All projects ({$projects.total}) + and data associated with this organization will be deleted. This action is irreversible.

    - -

    This action is irreversible.

    {/if} From 6d85d134ff6daf0674dbf52657b107dae8cfbcdf Mon Sep 17 00:00:00 2001 From: Arman Date: Wed, 17 Apr 2024 14:37:28 +0200 Subject: [PATCH 432/479] refactor: remove global variable and use backend data --- src/lib/sdk/billing.ts | 1 + src/lib/stores/billing.ts | 3 +-- src/lib/system.ts | 1 - .../console/account/organizations/+page.svelte | 6 +++--- .../billing/planSummary.svelte | 5 ++--- .../organization-[organization]/header.svelte | 12 +++++++++--- .../wizard/cloudOrganization/confirmDetails.svelte | 5 ++--- .../cloudOrganization/organizationDetails.svelte | 3 +-- .../wizard/cloudOrganization/paymentDetails.svelte | 9 +++++---- src/routes/console/wizard/cloudOrganization/store.ts | 8 ++++---- .../cloudOrganizationChangeTier/choosePlan.svelte | 5 ++--- .../confirmDetails.svelte | 7 ++++--- .../wizard/cloudOrganizationChangeTier/store.ts | 8 ++++---- 13 files changed, 38 insertions(+), 35 deletions(-) diff --git a/src/lib/sdk/billing.ts b/src/lib/sdk/billing.ts index d935bd84e..0dda5f294 100644 --- a/src/lib/sdk/billing.ts +++ b/src/lib/sdk/billing.ts @@ -261,6 +261,7 @@ export type Plan = { storage: AdditionalResource; users: AdditionalResource; }; + trialDays: number; }; export type PlansInfo = { diff --git a/src/lib/stores/billing.ts b/src/lib/stores/billing.ts index 1462f5125..fcdb3ab83 100644 --- a/src/lib/stores/billing.ts +++ b/src/lib/stores/billing.ts @@ -10,7 +10,7 @@ import type { PlansMap, PaymentMethodData } from '$lib/sdk/billing'; -import { IS_TRIAL_DISABLED, isCloud } from '$lib/system'; +import { isCloud } from '$lib/system'; import { cachedStore } from '$lib/helpers/cache'; import { Query } from '@appwrite.io/console'; import { headerAlert } from './headerAlert'; @@ -169,7 +169,6 @@ export function isServiceLimited(serviceId: PlanServices, plan: Tier, total: num } export function calculateTrialDay(org: Organization) { - if (IS_TRIAL_DISABLED) return; if (org?.billingPlan === BillingPlan.STARTER) return false; const endDate = new Date(org?.billingStartDate); const today = new Date(); diff --git a/src/lib/system.ts b/src/lib/system.ts index adc04027e..5cb998dca 100644 --- a/src/lib/system.ts +++ b/src/lib/system.ts @@ -24,4 +24,3 @@ export const isCloud = MODE === Mode.CLOUD; export const isSelfHosted = MODE !== Mode.CLOUD; export const hasStripePublicKey = !!VARS.STRIPE_PUBLIC_KEY; export const GRACE_PERIOD_OVERRIDE = false; -export const IS_TRIAL_DISABLED = true; diff --git a/src/routes/console/account/organizations/+page.svelte b/src/routes/console/account/organizations/+page.svelte index be2b778a2..33811a134 100644 --- a/src/routes/console/account/organizations/+page.svelte +++ b/src/routes/console/account/organizations/+page.svelte @@ -13,11 +13,11 @@ import CreateOrganization from '../../createOrganization.svelte'; import { sdk } from '$lib/stores/sdk'; import type { PageData } from './$types'; - import { IS_TRIAL_DISABLED, isCloud } from '$lib/system'; + import { isCloud } from '$lib/system'; import { Pill } from '$lib/elements'; import type { Models } from '@appwrite.io/console'; import type { Organization } from '$lib/stores/organization'; - import { daysLeftInTrial } from '$lib/stores/billing'; + import { daysLeftInTrial, plansInfo } from '$lib/stores/billing'; import { tooltip } from '$lib/actions/tooltip'; import { toLocaleDate } from '$lib/helpers/date'; import { wizard } from '$lib/stores/wizard'; @@ -82,7 +82,7 @@ FREE {/if} - {#if organization?.billingTrialStartDate && $daysLeftInTrial > 0 && organization.billingPlan !== BillingPlan.STARTER && !IS_TRIAL_DISABLED} + {#if organization?.billingTrialStartDate && $daysLeftInTrial > 0 && organization.billingPlan !== BillingPlan.STARTER && $plansInfo.get(organization.billingPlan)?.trialDays}
    0 && - !IS_TRIAL_DISABLED; + $plansInfo.get($organization.billingPlan)?.trialDays; {#if $organization} @@ -56,7 +55,7 @@
    {tierToPlan($organization?.billingPlan)?.name} plan
    - {#if $organization?.billingPlan !== BillingPlan.STARTER && isTrial && !IS_TRIAL_DISABLED} + {#if $organization?.billingPlan !== BillingPlan.STARTER && isTrial} TRIAL {/if}
    diff --git a/src/routes/console/organization-[organization]/header.svelte b/src/routes/console/organization-[organization]/header.svelte index c77fecedf..9b600ea44 100644 --- a/src/routes/console/organization-[organization]/header.svelte +++ b/src/routes/console/organization-[organization]/header.svelte @@ -9,7 +9,13 @@ import { toLocaleDate } from '$lib/helpers/date'; import { isTabSelected } from '$lib/helpers/load'; import { Cover } from '$lib/layout'; - import { daysLeftInTrial, getServiceLimit, readOnly, tierToPlan } from '$lib/stores/billing'; + import { + daysLeftInTrial, + getServiceLimit, + plansInfo, + readOnly, + tierToPlan + } from '$lib/stores/billing'; import { members, newMemberModal, @@ -18,7 +24,7 @@ organizationList } from '$lib/stores/organization'; import { wizard } from '$lib/stores/wizard'; - import { GRACE_PERIOD_OVERRIDE, IS_TRIAL_DISABLED, isCloud } from '$lib/system'; + import { GRACE_PERIOD_OVERRIDE, isCloud } from '$lib/system'; import CreateOrganizationCloud from '../createOrganizationCloud.svelte'; let areMembersLimited: boolean; @@ -94,7 +100,7 @@ {#if isCloud && $organization?.billingPlan === BillingPlan.STARTER} FREE {/if} - {#if isCloud && $organization?.billingTrialStartDate && $daysLeftInTrial > 0 && $organization.billingPlan !== BillingPlan.STARTER && !IS_TRIAL_DISABLED} + {#if isCloud && $organization?.billingTrialStartDate && $daysLeftInTrial > 0 && $organization.billingPlan !== BillingPlan.STARTER && $plansInfo.get($organization.billingPlan)?.trialDays}
    Confirm your details - Confirm the details of your new organization{IS_TRIAL_DISABLED + Confirm the details of your new organization{!plan.trialDays ? '.' : ' and start your free trial.'} @@ -126,7 +125,7 @@ {#if $createOrganization.billingPlan !== BillingPlan.STARTER}

    This amount, and any additional usage fees, will be charged on a recurring 30-day - billing cycle{IS_TRIAL_DISABLED + billing cycle{!plan.trialDays ? '' : ` after your trial period ends on ${toLocaleDate(billingPayDate.toString())}`}.

    diff --git a/src/routes/console/wizard/cloudOrganization/organizationDetails.svelte b/src/routes/console/wizard/cloudOrganization/organizationDetails.svelte index dfe8c80d6..67bed9a75 100644 --- a/src/routes/console/wizard/cloudOrganization/organizationDetails.svelte +++ b/src/routes/console/wizard/cloudOrganization/organizationDetails.svelte @@ -8,7 +8,6 @@ import { plansInfo, tierFree, tierPro, tierScale } from '$lib/stores/billing'; import { organizationList, type Organization } from '$lib/stores/organization'; import { updateStepStatus } from '$lib/stores/wizard'; - import { IS_TRIAL_DISABLED } from '$lib/system'; import { createOrganization, createOrgSteps } from './store'; let showCustomId = false; @@ -109,7 +108,7 @@ {tierPro.description}

    - {#if !IS_TRIAL_DISABLED} + {#if proPlan?.trialDays} 14 DAY FREE TRIAL {/if}
    diff --git a/src/routes/console/wizard/cloudOrganization/paymentDetails.svelte b/src/routes/console/wizard/cloudOrganization/paymentDetails.svelte index 5b03cee1e..956064b66 100644 --- a/src/routes/console/wizard/cloudOrganization/paymentDetails.svelte +++ b/src/routes/console/wizard/cloudOrganization/paymentDetails.svelte @@ -10,9 +10,8 @@ import { initializeStripe, isStripeInitialized, submitStripeCard } from '$lib/stores/stripe'; import { sdk } from '$lib/stores/sdk'; import { toLocaleDate } from '$lib/helpers/date'; - import { showUsageRatesModal } from '$lib/stores/billing'; + import { plansInfo, showUsageRatesModal } from '$lib/stores/billing'; import { PaymentBoxes } from '$lib/components/billing'; - import { IS_TRIAL_DISABLED } from '$lib/system'; const today = new Date(); const billingPayDate = new Date(today.getTime() + 44 * 24 * 60 * 60 * 1000); @@ -75,8 +74,10 @@ Payment details - Add a payment method to your organization. {#if !IS_TRIAL_DISABLED}You will not be charged - until your trial ends on {toLocaleDate(billingPayDate.toString())}. + Add a payment method to your organization. {#if $plansInfo.get($createOrganization.billingPlan)?.trialDays}You + will not be charged until your trial ends on {toLocaleDate(billingPayDate.toString())}. {/if} diff --git a/src/routes/console/wizard/cloudOrganization/store.ts b/src/routes/console/wizard/cloudOrganization/store.ts index 73b050b60..f25d7d5f8 100644 --- a/src/routes/console/wizard/cloudOrganization/store.ts +++ b/src/routes/console/wizard/cloudOrganization/store.ts @@ -1,12 +1,12 @@ import { BillingPlan } from '$lib/constants'; import type { WizardStepsType } from '$lib/layout/wizard.svelte'; -import type { Tier } from '$lib/stores/billing'; -import { IS_TRIAL_DISABLED } from '$lib/system'; -import { writable } from 'svelte/store'; +import { plansInfo, type Tier } from '$lib/stores/billing'; +import { organization } from '$lib/stores/organization'; +import { get, writable } from 'svelte/store'; export const createOrgSteps = writable(new Map()); export const createOrganizationFinalAction = writable( - IS_TRIAL_DISABLED ? 'Create' : 'Start trial' + get(plansInfo)?.get(get(organization)?.billingPlan)?.trialDays ? 'Start trial' : 'Create' ); export const createOrganization = writable<{ diff --git a/src/routes/console/wizard/cloudOrganizationChangeTier/choosePlan.svelte b/src/routes/console/wizard/cloudOrganizationChangeTier/choosePlan.svelte index ad1d62aa1..84b9ff788 100644 --- a/src/routes/console/wizard/cloudOrganizationChangeTier/choosePlan.svelte +++ b/src/routes/console/wizard/cloudOrganizationChangeTier/choosePlan.svelte @@ -13,7 +13,6 @@ import { Pill } from '$lib/elements'; import { BillingPlan } from '$lib/constants'; import { formatCurrency } from '$lib/helpers/numbers'; - import { IS_TRIAL_DISABLED } from '$lib/system'; let usage: OrganizationUsage = null; let members: Models.MembershipList = null; @@ -162,8 +161,8 @@
    {#if $organization.billingPlan === BillingPlan.PRO} CURRENT PLAN - {:else if !IS_TRIAL_DISABLED} - 14 DAY FREE TRIAL + {:else if proPlan?.trialDays} + {proPlan?.trialDays} DAY FREE TRIAL {/if}
    diff --git a/src/routes/console/wizard/cloudOrganizationChangeTier/confirmDetails.svelte b/src/routes/console/wizard/cloudOrganizationChangeTier/confirmDetails.svelte index dc5e16fb1..9b87670bf 100644 --- a/src/routes/console/wizard/cloudOrganizationChangeTier/confirmDetails.svelte +++ b/src/routes/console/wizard/cloudOrganizationChangeTier/confirmDetails.svelte @@ -16,7 +16,6 @@ feedbackDowngradeOptions, isUpgrade } from './store'; - import { IS_TRIAL_DISABLED } from '$lib/system'; const plan = $plansInfo.get($changeOrganizationTier.billingPlan); const collaboratorPrice = plan?.addons.member?.price ?? 0; @@ -78,7 +77,9 @@ Confirm your details - Confirm the details of your new organization{IS_TRIAL_DISABLED + Confirm the details of your new organization{!$plansInfo.get( + $changeOrganizationTier.billingPlan + )?.trialDays ? '.' : ' and start your free trial.'} @@ -147,7 +148,7 @@

    This amount, and any additional usage fees, will be charged on a recurring 30-day - billing cycle{IS_TRIAL_DISABLED + billing cycle{!$plansInfo.get($changeOrganizationTier.billingPlan)?.trialDays ? '' : ` after your trial period ends on ${toLocaleDate(billingPayDate.toString())}`}.

    diff --git a/src/routes/console/wizard/cloudOrganizationChangeTier/store.ts b/src/routes/console/wizard/cloudOrganizationChangeTier/store.ts index 2c3ae0501..8d5fad783 100644 --- a/src/routes/console/wizard/cloudOrganizationChangeTier/store.ts +++ b/src/routes/console/wizard/cloudOrganizationChangeTier/store.ts @@ -1,13 +1,13 @@ import { BillingPlan } from '$lib/constants'; import type { WizardStepsType } from '$lib/layout/wizard.svelte'; -import type { Tier } from '$lib/stores/billing'; -import { IS_TRIAL_DISABLED } from '$lib/system'; -import { writable } from 'svelte/store'; +import { plansInfo, type Tier } from '$lib/stores/billing'; +import { organization } from '$lib/stores/organization'; +import { get, writable } from 'svelte/store'; export const changeTierSteps = writable(new Map()); export const isUpgrade = writable(false); export const changeOrganizationFinalAction = writable( - IS_TRIAL_DISABLED ? 'Create' : 'Start trial' + get(plansInfo)?.get(get(organization)?.billingPlan)?.trialDays ? 'Start trial' : 'Create' ); export const changeOrganizationTier = writable<{ From 16c1f6b39764f7318a4bdc8fb085636370f90d61 Mon Sep 17 00:00:00 2001 From: Arman Date: Wed, 17 Apr 2024 14:46:43 +0200 Subject: [PATCH 433/479] fix: plan final action text --- src/routes/console/+layout.svelte | 7 +++++-- .../wizard/cloudOrganization/confirmDetails.svelte | 7 +++++++ src/routes/console/wizard/cloudOrganization/store.ts | 9 +++------ .../cloudOrganizationChangeTier/confirmDetails.svelte | 4 ++++ .../console/wizard/cloudOrganizationChangeTier/store.ts | 9 +++------ 5 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/routes/console/+layout.svelte b/src/routes/console/+layout.svelte index dd45948cc..81fdcc85e 100644 --- a/src/routes/console/+layout.svelte +++ b/src/routes/console/+layout.svelte @@ -21,7 +21,8 @@ paymentExpired, checkForMarkedForDeletion, checkForMandate, - checkForMissingPaymentMethod + checkForMissingPaymentMethod, + plansInfo } from '$lib/stores/billing'; import { goto } from '$app/navigation'; import { CommandCenter, registerCommands, registerSearchers } from '$lib/commandCenter'; @@ -269,10 +270,12 @@ await checkForUsageLimit(org); checkForMarkedForDeletion(org); if (org?.billingPlan !== BillingPlan.STARTER) { - calculateTrialDay(org); await paymentExpired(org); await checkPaymentAuthorizationRequired(org); await checkForMandate(org); + if ($plansInfo.get(org.billingPlan)?.trialDays) { + calculateTrialDay(org); + } } } }); diff --git a/src/routes/console/wizard/cloudOrganization/confirmDetails.svelte b/src/routes/console/wizard/cloudOrganization/confirmDetails.svelte index 214a2cc24..36b0ec6df 100644 --- a/src/routes/console/wizard/cloudOrganization/confirmDetails.svelte +++ b/src/routes/console/wizard/cloudOrganization/confirmDetails.svelte @@ -9,6 +9,7 @@ import type { Coupon } from '$lib/sdk/billing'; import { plansInfo } from '$lib/stores/billing'; import { sdk } from '$lib/stores/sdk'; + import { onMount } from 'svelte'; import { createOrganization, createOrganizationFinalAction } from './store'; const plan = $plansInfo?.get($createOrganization.billingPlan); @@ -18,6 +19,8 @@ const today = new Date(); const billingPayDate = new Date(today.getTime() + 44 * 24 * 60 * 60 * 1000); + onMount(() => {}); + let coupon: string = null; let couponData: Partial = { code: null, @@ -48,6 +51,10 @@ $: if ($createOrganization.billingPlan === BillingPlan.STARTER) { $createOrganizationFinalAction = 'Create organization'; } + + $: if (plan?.trialDays) { + $createOrganizationFinalAction = 'Start trial'; + } diff --git a/src/routes/console/wizard/cloudOrganization/store.ts b/src/routes/console/wizard/cloudOrganization/store.ts index f25d7d5f8..55a53175c 100644 --- a/src/routes/console/wizard/cloudOrganization/store.ts +++ b/src/routes/console/wizard/cloudOrganization/store.ts @@ -1,13 +1,10 @@ import { BillingPlan } from '$lib/constants'; import type { WizardStepsType } from '$lib/layout/wizard.svelte'; -import { plansInfo, type Tier } from '$lib/stores/billing'; -import { organization } from '$lib/stores/organization'; -import { get, writable } from 'svelte/store'; +import { type Tier } from '$lib/stores/billing'; +import { writable } from 'svelte/store'; export const createOrgSteps = writable(new Map()); -export const createOrganizationFinalAction = writable( - get(plansInfo)?.get(get(organization)?.billingPlan)?.trialDays ? 'Start trial' : 'Create' -); +export const createOrganizationFinalAction = writable('Create'); export const createOrganization = writable<{ id?: string; diff --git a/src/routes/console/wizard/cloudOrganizationChangeTier/confirmDetails.svelte b/src/routes/console/wizard/cloudOrganizationChangeTier/confirmDetails.svelte index 9b87670bf..a0545d583 100644 --- a/src/routes/console/wizard/cloudOrganizationChangeTier/confirmDetails.svelte +++ b/src/routes/console/wizard/cloudOrganizationChangeTier/confirmDetails.svelte @@ -49,6 +49,10 @@ $: if (!$isUpgrade) { $changeOrganizationFinalAction = 'Confirm plan change'; } + + $: if (plan?.trialDays) { + $changeOrganizationFinalAction = 'Start trial'; + } {#if downgradeToStarter} diff --git a/src/routes/console/wizard/cloudOrganizationChangeTier/store.ts b/src/routes/console/wizard/cloudOrganizationChangeTier/store.ts index 8d5fad783..57463d106 100644 --- a/src/routes/console/wizard/cloudOrganizationChangeTier/store.ts +++ b/src/routes/console/wizard/cloudOrganizationChangeTier/store.ts @@ -1,14 +1,11 @@ import { BillingPlan } from '$lib/constants'; import type { WizardStepsType } from '$lib/layout/wizard.svelte'; -import { plansInfo, type Tier } from '$lib/stores/billing'; -import { organization } from '$lib/stores/organization'; -import { get, writable } from 'svelte/store'; +import { type Tier } from '$lib/stores/billing'; +import { writable } from 'svelte/store'; export const changeTierSteps = writable(new Map()); export const isUpgrade = writable(false); -export const changeOrganizationFinalAction = writable( - get(plansInfo)?.get(get(organization)?.billingPlan)?.trialDays ? 'Start trial' : 'Create' -); +export const changeOrganizationFinalAction = writable('Create'); export const changeOrganizationTier = writable<{ billingPlan: Tier; From 962e895c2bafde29b17267bea1010fcd951e3918 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Thu, 18 Apr 2024 06:25:29 +0000 Subject: [PATCH 434/479] user source --- src/routes/+layout.svelte | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index fad7b4487..7e63cf3f5 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -21,7 +21,50 @@ window.VERCEL_ANALYTICS_ID = import.meta.env.VERCEL_ANALYTICS_ID?.toString() ?? false; } + let getCookie = (name) => { + let nameEQ = name + '='; + let ca = document.cookie.split(';'); + console.log(ca); + for (var i = 0; i < ca.length; i++) { + let c = ca[i]; + while (c.charAt(0) == ' ') c = c.substring(1, c.length); + if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); + } + return null; + }; + + let setCookie = (name, value) => { + document.cookie = + name + + '=' + + (value || '') + + '; path=/; Secure; Domain=.appwrite.io; SameSite=Lax'; + }; + onMount(async () => { + // handle sources + if(browser) { + const source = getCookie('source'); + let sources = source ? decodeURIComponent(source).split(',') : []; + console.log(sources); + + const urlParams = $page.url.searchParams; + const ref = urlParams.get('ref'); + const utm_source = urlParams.get('utm_source'); + const utm_medium = urlParams.get('utm_medium'); + const utm_campaign = urlParams.get('utm_campaign'); + + // Aggregate and display sources from URL parameters + if (ref) sources.push(`ref=${ref}`); + if (utm_source) sources.push(`utm_source=${utm_source}`); + if (utm_medium) sources.push(`utm_medium=${utm_medium}`); + if (utm_campaign) sources.push(`utm_campaign=${utm_campaign}`); + + sources = [...new Set(sources)]; + const encodedSources = encodeURIComponent(sources.join(',')); + setCookie('source', encodedSources); + } + if ($page.url.searchParams.has('migrate')) { const migrateData = $page.url.searchParams.get('migrate'); requestedMigration.set(parseIfString(migrateData) as Record); From 2826fc06122d01926fec656357f39111a04aecf0 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 8 Apr 2024 14:14:16 -0700 Subject: [PATCH 435/479] feat(mfa): show email, phone, and recovery options for MFA verification Show the appropriate text and buttons depending on what factors are enabled and what challenge has been created. --- src/routes/mfa/+page.svelte | 119 +++++++++++++++++++++++++++++++++--- src/routes/mfa/+page.ts | 8 +++ 2 files changed, 118 insertions(+), 9 deletions(-) create mode 100644 src/routes/mfa/+page.ts diff --git a/src/routes/mfa/+page.svelte b/src/routes/mfa/+page.svelte index 46653e270..237dc15c0 100644 --- a/src/routes/mfa/+page.svelte +++ b/src/routes/mfa/+page.svelte @@ -1,24 +1,50 @@ -
      +
        {#each Array.from({ length }) as _}
      1. + + From c86211e974ee01698e23bc5395419f7cbd349e20 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 22 Apr 2024 10:42:50 -0700 Subject: [PATCH 439/479] fix(auth): bump pink to fix centering issue The auth form wasn't vertically centered because it was missing some changes from pink. --- package-lock.json | 18 +++++++++--------- package.json | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7a4750ed6..0d504f8ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,8 +7,8 @@ "name": "@appwrite/console", "dependencies": { "@appwrite.io/console": "^0.6.1", - "@appwrite.io/pink": "0.8.0", - "@appwrite.io/pink-icons": "0.8.0", + "@appwrite.io/pink": "0.11.0", + "@appwrite.io/pink-icons": "0.11.0", "@popperjs/core": "^2.11.8", "@sentry/svelte": "^7.66.0", "@sentry/tracing": "^7.66.0", @@ -166,19 +166,19 @@ } }, "node_modules/@appwrite.io/pink": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@appwrite.io/pink/-/pink-0.8.0.tgz", - "integrity": "sha512-UZKwkUtAo2N0JiTiKDPWC8GHubTF2905DOzuCGl716fYua2gNIlS8D+HA/wd15qyRjZlgQh4MtVUAdHI8GLf8g==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@appwrite.io/pink/-/pink-0.11.0.tgz", + "integrity": "sha512-0/ztJxeV6Cy1FnXy2ClLELzDnR4eRtGAhQ24napCg0VwOFevSIc0S7jcRrWVyA6WRuwex4eGiEn2JeYMTq70Xg==", "dependencies": { - "@appwrite.io/pink-icons": "0.8.0", + "@appwrite.io/pink-icons": "0.11.0", "normalize.css": "^8.0.1", "the-new-css-reset": "^1.11.2" } }, "node_modules/@appwrite.io/pink-icons": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@appwrite.io/pink-icons/-/pink-icons-0.8.0.tgz", - "integrity": "sha512-UQd4mXOohGggXHNhIlYt4u2NLB/ubI6pvkdllrBQnHZEb7JL2iklff8Ne5moW8F9DeXLBt/ZQLRe240lvVjm6Q==" + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@appwrite.io/pink-icons/-/pink-icons-0.11.0.tgz", + "integrity": "sha512-FOvP87m4S17QRQPrLzsSlwrbIeJNJi5RliGUQYONIhmI0PiwE4Xm5LXFE+NqFYsR56w2X3jYdJIHdIdZlH3XjA==" }, "node_modules/@babel/code-frame": { "version": "7.24.2", diff --git a/package.json b/package.json index 453405dd8..5783c798a 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,8 @@ }, "dependencies": { "@appwrite.io/console": "^0.6.1", - "@appwrite.io/pink": "0.8.0", - "@appwrite.io/pink-icons": "0.8.0", + "@appwrite.io/pink": "0.11.0", + "@appwrite.io/pink-icons": "0.11.0", "@popperjs/core": "^2.11.8", "@sentry/svelte": "^7.66.0", "@sentry/tracing": "^7.66.0", From 405f656f98e8beaf4666c8e950ea14ca6bb2ea80 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 22 Apr 2024 11:51:50 -0700 Subject: [PATCH 440/479] fix(layout): move logo to bottom on mobile to match design --- src/lib/layout/unauthenticated.svelte | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/lib/layout/unauthenticated.svelte b/src/lib/layout/unauthenticated.svelte index 81719b189..1ceb0057c 100644 --- a/src/lib/layout/unauthenticated.svelte +++ b/src/lib/layout/unauthenticated.svelte @@ -14,7 +14,7 @@
        -
        -
        +
        @@ -52,10 +52,30 @@
        -
        +
        From 92e995ef63f48e88989f94794673b61a608289a9 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Fri, 19 Apr 2024 17:13:44 -0700 Subject: [PATCH 441/479] fix(modal): ensure no extra spacing is added for modals w/o description Without this, a description with an empty string will still render a paragraph element and the CSS would make it have a tiny margin. --- src/lib/components/modal.svelte | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/lib/components/modal.svelte b/src/lib/components/modal.svelte index 9bcdbdc89..ed85e0cab 100644 --- a/src/lib/components/modal.svelte +++ b/src/lib/components/modal.svelte @@ -64,11 +64,13 @@ {/if} -

        - - {description} - -

        + {#if description.length > 0} +

        + + {description} + +

        + {/if}