From dcaa8eb2f5f8d7f4cf8db880c196e5820dda0f6d Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Fri, 16 Feb 2024 11:09:10 -0800 Subject: [PATCH] Replace the update provider wizard with a settings card --- .../messaging/provider.svelte | 89 +++---- .../provider-[provider]/+page.svelte | 147 +++++++++++ .../providers/provider-[provider]/store.ts | 6 +- .../provider-[provider]/updateSettings.svelte | 233 ++++++++++++++++++ .../provider-[provider]/updateStatus.svelte | 144 ----------- .../messaging/providers/update.svelte | 163 ------------ 6 files changed, 428 insertions(+), 354 deletions(-) create mode 100644 src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateSettings.svelte delete mode 100644 src/routes/console/project-[project]/messaging/providers/update.svelte diff --git a/src/routes/console/project-[project]/messaging/provider.svelte b/src/routes/console/project-[project]/messaging/provider.svelte index e130ea23f..a78eb75c0 100644 --- a/src/routes/console/project-[project]/messaging/provider.svelte +++ b/src/routes/console/project-[project]/messaging/provider.svelte @@ -11,6 +11,50 @@ FCM = 'fcm', APNS = 'apns' } + + export function getProviderDisplayNameAndIcon(provider: Providers | string) { + let icon = ''; + let displayName = provider.charAt(0).toUpperCase() + provider.slice(1); + + switch (provider) { + case Providers.FCM: + icon = 'firebase'; + displayName = 'FCM'; + break; + case Providers.APNS: + icon = 'apple'; + displayName = 'APNS'; + break; + case Providers.Sendgrid: + icon = 'sendgrid'; + break; + case Providers.Mailgun: + icon = 'mailgun'; + break; + case Providers.SMTP: + icon = 'smtp'; + displayName = 'SMTP'; + break; + case Providers.Twilio: + icon = 'twilio'; + break; + case Providers.Telesign: + icon = 'telesign'; + break; + case Providers.Msg91: + icon = 'msg91'; + displayName = 'MSG91'; + break; + case Providers.Textmagic: + icon = 'textmagic'; + displayName = 'Textmagic'; + break; + case Providers.Vonage: + icon = 'vonage'; + break; + } + return { icon, displayName }; + } {#if icon === ''} @@ -89,12 +94,12 @@ {displayName} + alt={name || displayName} /> {/if} {/if} - {displayName} + {name || displayName} {/if} 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 index 2262f62ac..e6e4f4a55 100644 --- a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+page.svelte +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+page.svelte @@ -2,11 +2,158 @@ import { Container } from '$lib/layout'; import DangerZone from './dangerZone.svelte'; import UpdateName from './updateName.svelte'; + import UpdateSettings from './updateSettings.svelte'; import UpdateStatus from './updateStatus.svelte'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { MessagingProviderType } from '@appwrite.io/console'; + import { Providers } from '../../provider.svelte'; + import { providers } from '../store'; + import { provider as providerData } from './store'; + + let providerType: MessagingProviderType; + if (isValueOfStringEnum(MessagingProviderType, $providerData.type)) { + providerType = $providerData.type; + } + + let provider: Providers; + if (isValueOfStringEnum(Providers, $providerData.provider)) { + provider = $providerData.provider; + } + + let params: object = {}; + + $: switch (provider) { + case Providers.Twilio: + params = { + providerId: $providerData.$id, + name: $providerData.name, + enabled: $providerData.enabled, + accountSid: $providerData.credentials['accountSid'], + authToken: $providerData.credentials['authToken'], + from: $providerData.options['from'] + }; + break; + case Providers.Msg91: + params = { + providerId: $providerData.$id, + name: $providerData.name, + enabled: $providerData.enabled, + from: $providerData.options['from'], + senderId: $providerData.credentials['senderId'], + authKey: $providerData.credentials['authKey'] + }; + break; + case Providers.Telesign: + params = { + providerId: $providerData.$id, + name: $providerData.name, + enabled: $providerData.enabled, + username: $providerData.credentials['username'], + password: $providerData.credentials['password'], + from: $providerData.options['from'] + }; + break; + case Providers.Textmagic: + params = { + providerId: $providerData.$id, + name: $providerData.name, + enabled: $providerData.enabled, + username: $providerData.credentials['username'], + apiKey: $providerData.credentials['apiKey'], + from: $providerData.options['from'] + }; + break; + case Providers.Vonage: + params = { + providerId: $providerData.$id, + name: $providerData.name, + enabled: $providerData.enabled, + apiKey: $providerData.credentials['apiKey'], + apiSecret: $providerData.credentials['apiSecret'], + from: $providerData.options['from'] + }; + break; + case Providers.Mailgun: + params = { + providerId: $providerData.$id, + name: $providerData.name, + enabled: $providerData.enabled, + isEuRegion: false, + fromEmail: $providerData.options['fromEmail'], + fromName: $providerData.options['fromName'], + replyToEmail: $providerData.options['replyToEmail'], + replyToName: $providerData.options['replyToName'], + apiKey: $providerData.credentials['apiKey'], + domain: $providerData.credentials['domain'] + }; + break; + case Providers.Sendgrid: + params = { + providerId: $providerData.$id, + name: $providerData.name, + enabled: $providerData.enabled, + apiKey: $providerData.credentials['apiKey'], + fromEmail: $providerData.options['fromEmail'], + fromName: $providerData.options['fromName'], + replyToEmail: $providerData.options['replyToEmail'], + replyToName: $providerData.options['replyToName'] + }; + break; + case Providers.SMTP: + params = { + providerId: $providerData.$id, + name: $providerData.name, + enabled: $providerData.enabled, + host: $providerData.credentials['host'], + port: $providerData.credentials['port'], + username: $providerData.credentials['username'], + password: $providerData.credentials['password'], + fromName: $providerData.options['fromName'], + fromEmail: $providerData.options['fromEmail'], + replyToName: $providerData.options['replyToName'], + replyToEmail: $providerData.options['replyToEmail'], + encryption: $providerData.options['encryption'], + autoTLS: $providerData.options['autoTLS'], + mailer: $providerData.options['mailer'] + }; + break; + case Providers.FCM: + params = { + providerId: $providerData.$id, + name: $providerData.name, + enabled: $providerData.enabled + }; + if ('serviceAccountJSON' in $providerData.credentials) { + const serviceAccountJSON = $providerData.credentials['serviceAccountJSON']; + if (typeof serviceAccountJSON === 'string') { + params['serviceAccountJSON'] = serviceAccountJSON; + } else if (serviceAccountJSON instanceof Object) { + params['serviceAccountJSON'] = JSON.stringify(serviceAccountJSON); + } + } + break; + case Providers.APNS: + params = { + providerId: $providerData.$id, + name: $providerData.name, + enabled: $providerData.enabled, + authKey: $providerData.credentials['authKey'], + authKeyId: $providerData.credentials['authKeyId'], + teamId: $providerData.credentials['teamId'], + bundleId: $providerData.credentials['bundleId'] + }; + break; + } + 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 index 441524d17..d4211320e 100644 --- a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/store.ts +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/store.ts @@ -2,8 +2,4 @@ import { derived } from 'svelte/store'; import { page } from '$app/stores'; import type { Models } from '@appwrite.io/console'; -export const provider = derived( - page, - // TODO: Set actual type - ($page) => $page.data.provider as Models.Provider -); +export const provider = derived(page, ($page) => $page.data.provider as Models.Provider); diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateSettings.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateSettings.svelte new file mode 100644 index 000000000..66a39bcbb --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateSettings.svelte @@ -0,0 +1,233 @@ + + +
+ +
+ Settings +
+

+ Configure the settings to to send {message}, or to complete the + provider settings. +

+ + + + + +
+ +
+
+
+
+ + 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 78d81d5d9..27d179154 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 @@ -5,16 +5,11 @@ import { Dependencies } from '$lib/constants'; import { Button, InputSwitch } from '$lib/elements/forms'; import { toLocaleDateTime } from '$lib/helpers/date'; - import { isValueOfStringEnum } from '$lib/helpers/types'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import { wizard } from '$lib/stores/wizard'; import { onMount } from 'svelte'; - import { MessagingProviderType } from '@appwrite.io/console'; import Provider, { Providers } from '../../provider.svelte'; import ProviderType from '../../providerType.svelte'; - import Update from '../update.svelte'; - import { providerParams, providerType, provider } from '../store'; import { provider as providerData } from './store'; let enabled: boolean = null; @@ -23,144 +18,6 @@ enabled ??= $providerData.enabled; }); - function configure() { - if (!isValueOfStringEnum(MessagingProviderType, $providerData.type)) { - throw new Error(`Invalid provider type: ${$providerData.type}`); - } - - if (!isValueOfStringEnum(Providers, $providerData.provider)) { - throw new Error(`Invalid provider: ${$providerData.provider}`); - } - $providerType = $providerData.type; - $provider = $providerData.provider; - - switch ($provider) { - case Providers.Twilio: - $providerParams[$provider] = { - providerId: $providerData.$id, - name: $providerData.name, - enabled: $providerData.enabled, - accountSid: $providerData.credentials['accountSid'], - authToken: $providerData.credentials['authToken'], - from: $providerData.options['from'] - }; - break; - case Providers.Msg91: - $providerParams[$provider] = { - providerId: $providerData.$id, - name: $providerData.name, - enabled: $providerData.enabled, - from: $providerData.options['from'], - senderId: $providerData.credentials['senderId'], - authKey: $providerData.credentials['authKey'] - }; - break; - case Providers.Telesign: - $providerParams[$provider] = { - providerId: $providerData.$id, - name: $providerData.name, - enabled: $providerData.enabled, - username: $providerData.credentials['username'], - password: $providerData.credentials['password'], - from: $providerData.options['from'] - }; - break; - case Providers.Textmagic: - $providerParams[$provider] = { - providerId: $providerData.$id, - name: $providerData.name, - enabled: $providerData.enabled, - username: $providerData.credentials['username'], - apiKey: $providerData.credentials['apiKey'], - from: $providerData.options['from'] - }; - break; - case Providers.Vonage: - $providerParams[$provider] = { - providerId: $providerData.$id, - name: $providerData.name, - enabled: $providerData.enabled, - apiKey: $providerData.credentials['apiKey'], - apiSecret: $providerData.credentials['apiSecret'], - from: $providerData.options['from'] - }; - break; - case Providers.Mailgun: - $providerParams[$provider] = { - providerId: $providerData.$id, - name: $providerData.name, - enabled: $providerData.enabled, - isEuRegion: false, - fromEmail: $providerData.options['fromEmail'], - fromName: $providerData.options['fromName'], - replyToEmail: $providerData.options['replyToEmail'], - replyToName: $providerData.options['replyToName'], - apiKey: $providerData.credentials['apiKey'], - domain: $providerData.credentials['domain'] - }; - break; - case Providers.Sendgrid: - $providerParams[$provider] = { - providerId: $providerData.$id, - name: $providerData.name, - enabled: $providerData.enabled, - apiKey: $providerData.credentials['apiKey'], - fromEmail: $providerData.options['fromEmail'], - fromName: $providerData.options['fromName'], - replyToEmail: $providerData.options['replyToEmail'], - replyToName: $providerData.options['replyToName'] - }; - break; - case Providers.SMTP: - $providerParams[$provider] = { - providerId: $providerData.$id, - name: $providerData.name, - enabled: $providerData.enabled, - host: $providerData.credentials['host'], - port: $providerData.credentials['port'], - username: $providerData.credentials['username'], - password: $providerData.credentials['password'], - fromName: $providerData.options['fromName'], - fromEmail: $providerData.options['fromEmail'], - replyToName: $providerData.options['replyToName'], - replyToEmail: $providerData.options['replyToEmail'], - encryption: $providerData.options['encryption'], - autoTLS: $providerData.options['autoTLS'], - mailer: $providerData.options['mailer'] - }; - break; - case Providers.FCM: - $providerParams[$provider] = { - providerId: $providerData.$id, - name: $providerData.name, - enabled: $providerData.enabled - }; - if ('serviceAccountJSON' in $providerData.credentials) { - const serviceAccountJSON = $providerData.credentials['serviceAccountJSON']; - if (typeof serviceAccountJSON === 'string') { - $providerParams[$provider].serviceAccountJSON = serviceAccountJSON; - } else if (serviceAccountJSON instanceof Object) { - $providerParams[$provider].serviceAccountJSON = - JSON.stringify(serviceAccountJSON); - } - } - break; - case Providers.APNS: - $providerParams[$provider] = { - providerId: $providerData.$id, - name: $providerData.name, - enabled: $providerData.enabled, - authKey: $providerData.credentials['authKey'], - authKeyId: $providerData.credentials['authKeyId'], - teamId: $providerData.credentials['teamId'], - bundleId: $providerData.credentials['bundleId'] - }; - break; - } - - wizard.start(Update); - } - async function updateStatus() { try { let response = { $id: '', name: '' }; @@ -292,7 +149,6 @@
-
diff --git a/src/routes/console/project-[project]/messaging/providers/update.svelte b/src/routes/console/project-[project]/messaging/providers/update.svelte deleted file mode 100644 index f20606214..000000000 --- a/src/routes/console/project-[project]/messaging/providers/update.svelte +++ /dev/null @@ -1,163 +0,0 @@ - - -