From 4de6350d8af79fd7c4c38bfcdf8d3442c615cc83 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Tue, 24 Oct 2023 17:01:35 -0700 Subject: [PATCH] Add wizard for creating provider --- src/lib/components/labelCard.svelte | 11 ++ .../messaging/providers/+page.svelte | 23 ++-- .../messaging/providers/+page.ts | 7 +- .../messaging/providers/create.svelte | 120 +++++++++--------- .../providers/createProviderDropdown.svelte | 38 ++++++ .../messaging/providers/store.ts | 75 +++++++++++ .../messaging/providers/wizard/step1.svelte | 23 ++++ .../messaging/providers/wizard/step2.svelte | 20 +++ .../messaging/providers/wizard/step3.svelte | 16 +++ .../messaging/providers/wizard/step4.svelte | 17 +++ .../messaging/providers/wizard/store.ts | 4 + 11 files changed, 277 insertions(+), 77 deletions(-) create mode 100644 src/routes/console/project-[project]/messaging/providers/createProviderDropdown.svelte create mode 100644 src/routes/console/project-[project]/messaging/providers/wizard/step1.svelte create mode 100644 src/routes/console/project-[project]/messaging/providers/wizard/step2.svelte create mode 100644 src/routes/console/project-[project]/messaging/providers/wizard/step3.svelte create mode 100644 src/routes/console/project-[project]/messaging/providers/wizard/step4.svelte create mode 100644 src/routes/console/project-[project]/messaging/providers/wizard/store.ts diff --git a/src/lib/components/labelCard.svelte b/src/lib/components/labelCard.svelte index 5565b392e4..a13f4c1d7e 100644 --- a/src/lib/components/labelCard.svelte +++ b/src/lib/components/labelCard.svelte @@ -1,10 +1,14 @@ @@ -47,7 +44,7 @@
Providers
- @@ -64,10 +61,11 @@ hideView allowNoColumns showColsTextMobile /> -
@@ -148,7 +146,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}' @@ -161,10 +159,7 @@ {:else} ($showCreate = true)} href="https://appwrite.io/docs/references/cloud/client-web/teams" target="team" /> {/if} - - diff --git a/src/routes/console/project-[project]/messaging/providers/+page.ts b/src/routes/console/project-[project]/messaging/providers/+page.ts index fa830c8c55..cbb2816a17 100644 --- a/src/routes/console/project-[project]/messaging/providers/+page.ts +++ b/src/routes/console/project-[project]/messaging/providers/+page.ts @@ -138,12 +138,17 @@ export const load = async ({ url, route }) => { const limit = getLimit(url, route, PAGE_LIMIT); const offset = pageToOffset(page, limit); + let providers: { providers: Provider[]; total: number } = { providers: [], total: 0 }; + if (!search) { + providers = data; + } + return { offset, limit, search, page, view, - providers: data + providers }; }; diff --git a/src/routes/console/project-[project]/messaging/providers/create.svelte b/src/routes/console/project-[project]/messaging/providers/create.svelte index 65528f2c00..d0c1d473f0 100644 --- a/src/routes/console/project-[project]/messaging/providers/create.svelte +++ b/src/routes/console/project-[project]/messaging/providers/create.svelte @@ -1,68 +1,64 @@ - - - - {#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 0000000000..f1b8f056c5 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/createProviderDropdown.svelte @@ -0,0 +1,38 @@ + + + + + + + + {#each Object.entries(providers) as [type, provider]} + { + console.log(type); + if (type !== 'email' && type !== 'sms' && type !== 'push') return; + $providerType = type; + showCreateDropdown = false; + openWizard(); + }}> + {provider.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 fe1716cb0b..6d0a068984 100644 --- a/src/routes/console/project-[project]/messaging/providers/store.ts +++ b/src/routes/console/project-[project]/messaging/providers/store.ts @@ -2,6 +2,7 @@ import { writable } from 'svelte/store'; import type { Column } from '$lib/components/viewSelector.svelte'; export let showCreate = writable(false); +export let showCreateDropdown = writable(false); export const columns = writable([ { id: '$id', title: 'Provider ID', show: true, width: 140 }, @@ -10,3 +11,77 @@ export const columns = writable([ { id: 'channel', title: 'Channel', show: true, width: 100 }, { id: 'status', title: 'Status', show: true, width: 120 } ]); + +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: '' + }, + 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' + } + } + } +}; diff --git a/src/routes/console/project-[project]/messaging/providers/wizard/step1.svelte b/src/routes/console/project-[project]/messaging/providers/wizard/step1.svelte new file mode 100644 index 0000000000..90c638c674 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/wizard/step1.svelte @@ -0,0 +1,23 @@ + + + + Provider + + 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/step2.svelte b/src/routes/console/project-[project]/messaging/providers/wizard/step2.svelte new file mode 100644 index 0000000000..ea28bc2fa9 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/wizard/step2.svelte @@ -0,0 +1,20 @@ + + + + Initialize + + Follow the steps below to enable {providers[$providerType].providers[$provider].title} for sending + {providers[$providerType].text}. Need a hand? Follow the full guide in our + + documentation. + + diff --git a/src/routes/console/project-[project]/messaging/providers/wizard/step3.svelte b/src/routes/console/project-[project]/messaging/providers/wizard/step3.svelte new file mode 100644 index 0000000000..789843dd94 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/wizard/step3.svelte @@ -0,0 +1,16 @@ + + + + Events + + Set the events that will trigger your function. Maximum 100 events allowed. + Learn more about events. + . + + diff --git a/src/routes/console/project-[project]/messaging/providers/wizard/step4.svelte b/src/routes/console/project-[project]/messaging/providers/wizard/step4.svelte new file mode 100644 index 0000000000..3d790c658c --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/wizard/step4.svelte @@ -0,0 +1,17 @@ + + + + Schedule + + Set a Cron schedule to trigger your function. Leave blank for no schedule. More details on Cron syntax here. + + + 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 0000000000..40d005f8f4 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/wizard/store.ts @@ -0,0 +1,4 @@ +import { writable } from 'svelte/store'; + +export const providerType = writable<'push' | 'sms' | 'email'>(null); +export const provider = writable('mailgun');