From f9a4f9850a14eb8854ea0071636b74b591fa6dff Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 5 Feb 2024 14:32:41 -0800 Subject: [PATCH 01/15] Use enums from the console SDK whenever possible --- .../components/creditCardBrandImage.svelte | 4 +- src/lib/elements/flag.svelte | 3 + src/lib/layout/usage.svelte | 6 +- src/lib/pages/domains/index.svelte | 11 +- src/lib/pages/domains/index.ts | 2 +- src/lib/pages/domains/wizard/step1.svelte | 4 +- src/lib/pages/domains/wizard/store.ts | 5 +- src/lib/stores/auth-methods.ts | 18 +-- src/lib/stores/project-services.ts | 52 +++---- .../wizards/functions/connectExisting.svelte | 5 + src/lib/wizards/functions/createGit.svelte | 6 +- src/lib/wizards/functions/createManual.svelte | 6 +- .../wizards/functions/createTemplate.svelte | 6 +- .../console/account/sessions/+page.svelte | 25 ++- .../organization-[organization]/+page.svelte | 4 +- .../createProject.svelte | 4 +- .../auth/templates/emailTemplate.svelte | 9 ++ .../project-[project]/auth/updateOAuth.ts | 5 + .../auth/usage/[[period]]/+page.ts | 15 +- .../auth/user-[user]/sessions/+page.svelte | 27 +++- .../auth/user-[user]/targets/create.svelte | 19 ++- .../auth/user-[user]/targets/table.svelte | 7 +- .../attributes/relationship.svelte | 12 +- .../indexes/createIndex.svelte | 11 +- .../usage/[[period]]/+page.ts | 17 +-- .../usage/[[period]]/+page.ts | 16 +- .../databases/usage/[[period]]/+page.ts | 15 +- .../functions/createFunction.svelte | 6 +- .../function-[function]/domains/+page.svelte | 5 +- .../function-[function]/domains/+page.ts | 5 +- .../function-[function]/execute.svelte | 16 +- .../settings/disconnectRepo.svelte | 5 + .../settings/gitConfigurationModal.svelte | 6 +- .../settings/updateConfiguration.svelte | 6 +- .../settings/updateEvents.svelte | 5 + .../settings/updateLogging.svelte | 5 + .../settings/updateName.svelte | 5 + .../settings/updatePermissions.svelte | 5 + .../settings/updateRuntime.svelte | 5 + .../settings/updateSchedule.svelte | 5 + .../settings/updateTimeout.svelte | 5 + .../usage/[[period]]/+page.ts | 17 +-- .../project-[project]/messaging/+page.svelte | 9 +- .../messaging/actions.svelte | 4 +- .../messaging/createMessageDropdown.svelte | 14 +- .../messaging/message-[message]/+page.svelte | 25 ++- .../message-[message]/overview.svelte | 9 +- .../messaging/providerType.svelte | 17 +-- .../providers/createProviderDropdown.svelte | 8 +- .../provider-[provider]/updateStatus.svelte | 5 +- .../messaging/providers/store.ts | 10 +- .../messaging/providers/wizard/store.ts | 4 +- .../topic-[topic]/subscribers/table.svelte | 5 +- .../messaging/userTargetsModal.svelte | 12 +- .../project-[project]/messaging/wizard.svelte | 34 ++--- .../messaging/wizard/emailFormList.svelte | 16 +- .../messaging/wizard/pushFormList.svelte | 43 +++--- .../messaging/wizard/smsFormList.svelte | 16 +- .../messaging/wizard/step1.svelte | 12 +- .../messaging/wizard/step3.svelte | 7 +- .../messaging/wizard/store.ts | 27 ++-- .../platforms/wizard/android/step1.svelte | 3 +- .../platforms/wizard/apple/step1.svelte | 26 ++-- .../platforms/wizard/flutter/step1.svelte | 142 ++++++++++++------ .../platforms/wizard/web/step1.svelte | 3 +- .../project-[project]/overview/store.ts | 4 +- .../settings/domains/+page.svelte | 5 +- .../settings/domains/+page.ts | 7 +- .../settings/smtp/+page.svelte | 3 +- .../settings/transferProject.svelte | 15 +- .../settings/updateServices.svelte | 13 +- .../bucket-[bucket]/settings/+page.svelte | 7 +- .../bucket-[bucket]/usage/[[period]]/+page.ts | 7 +- .../storage/usage/[[period]]/+page.ts | 15 +- src/routes/login/+page.svelte | 3 +- src/routes/register/+page.svelte | 4 +- 76 files changed, 525 insertions(+), 424 deletions(-) diff --git a/src/lib/components/creditCardBrandImage.svelte b/src/lib/components/creditCardBrandImage.svelte index 6bfe34c7ce..1a542bb532 100644 --- a/src/lib/components/creditCardBrandImage.svelte +++ b/src/lib/components/creditCardBrandImage.svelte @@ -1,12 +1,14 @@ diff --git a/src/lib/elements/flag.svelte b/src/lib/elements/flag.svelte index d1088bddb5..9f3aebd8ec 100644 --- a/src/lib/elements/flag.svelte +++ b/src/lib/elements/flag.svelte @@ -1,5 +1,7 @@ - @@ -46,15 +51,23 @@ {#each data.sessions.sessions as session} + {@const browser = getBrowser(session.clientCode)}
- {session.clientName} + {#if browser} + {session.clientName} + {:else} +

{session.clientName} diff --git a/src/routes/console/project-[project]/auth/user-[user]/targets/create.svelte b/src/routes/console/project-[project]/auth/user-[user]/targets/create.svelte index 1ad4d5d5ea..40d01d6d5c 100644 --- a/src/routes/console/project-[project]/auth/user-[user]/targets/create.svelte +++ b/src/routes/console/project-[project]/auth/user-[user]/targets/create.svelte @@ -9,12 +9,11 @@ import InputEmail from '$lib/elements/forms/inputEmail.svelte'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import { ProviderTypes } from '$routes/console/project-[project]/messaging/providerType.svelte'; - import { ID } from '@appwrite.io/console'; + import { ID, MessagingProviderType } from '@appwrite.io/console'; export let show = false; - let providerType = ProviderTypes.Push; + let providerType = MessagingProviderType.Push; let identifier = ''; let name = ''; let providerId = ''; @@ -22,9 +21,9 @@ let showCustomId = false; const providerTypeOptions = [ - { label: 'Push', value: ProviderTypes.Push }, - { label: 'Email', value: ProviderTypes.Email }, - { label: 'SMS', value: ProviderTypes.Sms } + { label: 'Push', value: MessagingProviderType.Push }, + { label: 'Email', value: MessagingProviderType.Email }, + { label: 'SMS', value: MessagingProviderType.Sms } ]; const create = async () => { @@ -78,7 +77,7 @@ // Ensure values are reset when modal is opened $: if (show) { showCustomId = false; - providerType = ProviderTypes.Push; + providerType = MessagingProviderType.Push; identifier = ''; name = ''; providerId = ''; @@ -97,7 +96,7 @@ label="Provider Type" bind:value={providerType} options={providerTypeOptions} /> - {#if providerType === ProviderTypes.Push} + {#if providerType === MessagingProviderType.Push} - {:else if providerType === ProviderTypes.Email} + {:else if providerType === MessagingProviderType.Email} - {:else if providerType === ProviderTypes.Sms} + {:else if providerType === MessagingProviderType.Sms} - {#if target.providerType === ProviderTypes.Push} + {#if target.providerType === MessagingProviderType.Push} {target.name} {:else} {target.identifier} diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/attributes/relationship.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/attributes/relationship.svelte index d322ff2f79..bdac933772 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/attributes/relationship.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/attributes/relationship.svelte @@ -1,5 +1,5 @@ @@ -10,7 +11,7 @@ Domains diff --git a/src/routes/console/project-[project]/functions/function-[function]/domains/+page.ts b/src/routes/console/project-[project]/functions/function-[function]/domains/+page.ts index 1f48d6d0da..e5f407297d 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/domains/+page.ts +++ b/src/routes/console/project-[project]/functions/function-[function]/domains/+page.ts @@ -1,15 +1,14 @@ import { Dependencies } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; -import { Query } from '@appwrite.io/console'; +import { Query, ResourceType } from '@appwrite.io/console'; import type { PageLoad } from './$types'; -import { ProxyTypes } from '$lib/pages/domains/index.svelte'; export const load: PageLoad = async ({ depends, params }) => { depends(Dependencies.FUNCTION_DOMAINS); return { rules: await sdk.forProject.proxy.listRules([ - Query.equal('resourceType', ProxyTypes.FUNCTION), + Query.equal('resourceType', ResourceType.Function), Query.equal('resourceId', params.function) ]) }; 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 278a3ceabd..a8460d6db6 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/execute.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/execute.svelte @@ -15,23 +15,23 @@ import Label from '$lib/elements/forms/label.svelte'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import type { Models } from '@appwrite.io/console'; + import { ExecutionMethod, type Models } from '@appwrite.io/console'; export let selectedFunction: Models.Function = null; let path = '/'; - let method = 'GET'; + let method = ExecutionMethod.GET; let body = ''; let headers: [string, string][] = [['', '']]; let error: string = null; const methodOptions = [ - { label: 'GET', value: 'GET' }, - { label: 'POST', value: 'POST' }, - { label: 'PUT', value: 'PUT' }, - { label: 'PATCH', value: 'PATCH' }, - { label: 'DELETE', value: 'DELETE' }, - { label: 'OPTIONS', value: 'OPTIONS' } + { label: 'GET', value: ExecutionMethod.GET }, + { label: 'POST', value: ExecutionMethod.POST }, + { label: 'PUT', value: ExecutionMethod.PUT }, + { label: 'PATCH', value: ExecutionMethod.PATCH }, + { label: 'DELETE', value: ExecutionMethod.DELETE }, + { label: 'OPTIONS', value: ExecutionMethod.OPTIONS } ]; let show = false; diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/disconnectRepo.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/disconnectRepo.svelte index 353d2276bb..c8769402cb 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/disconnectRepo.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/disconnectRepo.svelte @@ -9,6 +9,8 @@ import { sdk } from '$lib/stores/sdk'; import { createEventDispatcher } from 'svelte'; import { func } from '../store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { Runtime } from '@appwrite.io/console'; export let show = false; const functionId = $page.params.function; @@ -18,6 +20,9 @@ const handleSubmit = async () => { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/gitConfigurationModal.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/gitConfigurationModal.svelte index 5e47e5619c..6a8dc10d45 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/gitConfigurationModal.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/gitConfigurationModal.svelte @@ -8,12 +8,13 @@ import { timeFromNow, toLocaleDateTime } from '$lib/helpers/date'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import type { Models } from '@appwrite.io/console'; + import { Runtime, type Models } from '@appwrite.io/console'; import { func, repositories } from '../store'; import { invalidate } from '$app/navigation'; import InputSelectSearch from '$lib/elements/forms/inputSelectSearch.svelte'; import { sortBranches } from './updateConfiguration.svelte'; import { installations } from '$lib/wizards/functions/store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; export let show: boolean; @@ -48,6 +49,9 @@ async function handleSubmit() { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/updateConfiguration.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/updateConfiguration.svelte index c609d0493a..df247fcc8a 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/updateConfiguration.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/updateConfiguration.svelte @@ -36,7 +36,7 @@ } from '$lib/elements/forms'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import type { Models } from '@appwrite.io/console'; + import { Runtime, type Models } from '@appwrite.io/console'; import { func } from '../store'; import GitInstallationModal from '$routes/console/project-[project]/settings/GitInstallationModal.svelte'; import GitConfigurationModal from './gitConfigurationModal.svelte'; @@ -50,6 +50,7 @@ import { installations } from '$lib/wizards/functions/store'; import { isSelfHosted } from '$lib/system'; import { consoleVariables } from '$routes/console/store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; const functionId = $page.params.function; const isVcsEnabled = $consoleVariables?._APP_VCS_ENABLED === true; @@ -114,6 +115,9 @@ async function updateConfiguration() { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/updateEvents.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/updateEvents.svelte index 6de2d80489..853aa61725 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/updateEvents.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/updateEvents.svelte @@ -19,6 +19,8 @@ import { Button } from '$lib/elements/forms'; import DropList from '$lib/components/dropList.svelte'; import DropListItem from '$lib/components/dropListItem.svelte'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { Runtime } from '@appwrite.io/console'; const functionId = $page.params.function; const eventSet: Writable> = writable(new Set($func.events)); @@ -29,6 +31,9 @@ async function updateEvents() { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/updateLogging.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/updateLogging.svelte index 7adfd6a5f8..2f6e4afb87 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/updateLogging.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/updateLogging.svelte @@ -11,6 +11,8 @@ import { project } from '$routes/console/project-[project]/store'; import { onMount } from 'svelte'; import { func } from '../store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { Runtime } from '@appwrite.io/console'; const functionId = $page.params.function; let functionLogging: boolean = null; @@ -21,6 +23,9 @@ async function updateLogging() { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/updateName.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/updateName.svelte index 690c762600..8f44fd549e 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/updateName.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/updateName.svelte @@ -9,6 +9,8 @@ import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; import { func } from '../store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { Runtime } from '@appwrite.io/console'; const functionId = $page.params.function; let functionName: string = null; @@ -19,6 +21,9 @@ async function updateName() { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, functionName, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/updatePermissions.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/updatePermissions.svelte index 949a5f9d54..8af6ef6e3c 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/updatePermissions.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/updatePermissions.svelte @@ -11,6 +11,8 @@ import { func } from '../store'; import { Roles } from '$lib/components/permissions'; import { symmetricDifference } from '$lib/helpers/array'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { Runtime } from '@appwrite.io/console'; const functionId = $page.params.function; @@ -23,6 +25,9 @@ async function updatePermissions() { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/updateRuntime.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/updateRuntime.svelte index fc871f2832..a4a2f806c6 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/updateRuntime.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/updateRuntime.svelte @@ -11,6 +11,8 @@ import { func } from '../store'; import InputSelect from '$lib/elements/forms/inputSelect.svelte'; import { runtimesList } from '../../store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { Runtime } from '@appwrite.io/console'; const functionId = $page.params.function; let runtime: string = null; @@ -29,6 +31,9 @@ async function updateRuntime() { try { + if (!isValueOfStringEnum(Runtime, runtime)) { + throw new Error(`Invalid runtime: ${runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/updateSchedule.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/updateSchedule.svelte index 514a76722d..ecd707039b 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/updateSchedule.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/updateSchedule.svelte @@ -9,6 +9,8 @@ import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; import { func } from '../store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { Runtime } from '@appwrite.io/console'; const functionId = $page.params.function; let functionSchedule: string = null; @@ -19,6 +21,9 @@ async function updateSchedule() { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/updateTimeout.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/updateTimeout.svelte index 797c32030c..c363032791 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/updateTimeout.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/updateTimeout.svelte @@ -9,6 +9,8 @@ import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; import { func } from '../store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { Runtime } from '@appwrite.io/console'; const functionId = $page.params.function; let timeout: number = null; @@ -19,6 +21,9 @@ async function updateTimeout() { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/usage/[[period]]/+page.ts b/src/routes/console/project-[project]/functions/function-[function]/usage/[[period]]/+page.ts index dfeafeb47e..aa8bc11630 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/usage/[[period]]/+page.ts +++ b/src/routes/console/project-[project]/functions/function-[function]/usage/[[period]]/+page.ts @@ -1,19 +1,18 @@ -import type { Metric, UsageFunctions } from '$lib/sdk/usage'; import { sdk } from '$lib/stores/sdk'; +import { FunctionUsageRange } from '@appwrite.io/console'; import type { PageLoad } from './$types'; import { error } from '@sveltejs/kit'; +import { isValueOfStringEnum } from '$lib/helpers/types'; export const load: PageLoad = async ({ params }) => { try { - const response = (await sdk.forProject.functions.getFunctionUsage( + const period = isValueOfStringEnum(FunctionUsageRange, params.period) + ? params.period + : FunctionUsageRange.ThirtyDays; + return sdk.forProject.functions.getFunctionUsage( params.function, - params.period ?? '30d' - )) as unknown as UsageFunctions; - - return { - executionsTotal: response.executionsTotal, - executions: response.executions as Metric[] - }; + period + ); } catch (e) { throw error(e.code, e.message); } diff --git a/src/routes/console/project-[project]/messaging/+page.svelte b/src/routes/console/project-[project]/messaging/+page.svelte index 3290984a14..df5e68d8a6 100644 --- a/src/routes/console/project-[project]/messaging/+page.svelte +++ b/src/routes/console/project-[project]/messaging/+page.svelte @@ -27,11 +27,12 @@ } from '$lib/elements/table'; import { toLocaleDateTime } from '$lib/helpers/date'; import { Container } from '$lib/layout'; + import { MessagingProviderType } from '@appwrite.io/console'; import type { PageData } from './$types'; import CreateMessageDropdown from './createMessageDropdown.svelte'; import FailedModal from './failedModal.svelte'; import MessageStatusPill from './messageStatusPill.svelte'; - import ProviderType, { ProviderTypes } from './providerType.svelte'; + import ProviderType from './providerType.svelte'; import { columns, showCreate } from './store'; export let data: PageData; @@ -117,11 +118,11 @@ {/key} {:else if column.id === 'message'} - {#if message.providerType === ProviderTypes.Push} + {#if message.providerType === MessagingProviderType.Push} {message.data.title} - {:else if message.providerType === ProviderTypes.Sms} + {:else if message.providerType === MessagingProviderType.Sms} {message.data.content} - {:else if message.providerType === ProviderTypes.Email} + {:else if message.providerType === MessagingProviderType.Email} {message.data.subject} {:else} Invalid provider diff --git a/src/routes/console/project-[project]/messaging/actions.svelte b/src/routes/console/project-[project]/messaging/actions.svelte index bf2bb5b7bf..9a6542d20b 100644 --- a/src/routes/console/project-[project]/messaging/actions.svelte +++ b/src/routes/console/project-[project]/messaging/actions.svelte @@ -3,14 +3,14 @@ import { createEventDispatcher } from 'svelte'; import { targetsById } from './wizard/store'; import UserTargetsModal from './userTargetsModal.svelte'; - import type { ProviderTypes } from './providerType.svelte'; import TopicsModal from './topicsModal.svelte'; import { topicsById } from './store'; + import type { MessagingProviderType } from '@appwrite.io/console'; export let showDropdown: boolean; export let showUserTargets: boolean; export let showTopics: boolean; - export let providerType: ProviderTypes = null; + export let providerType: MessagingProviderType = null; const dispatch = createEventDispatcher(); diff --git a/src/routes/console/project-[project]/messaging/createMessageDropdown.svelte b/src/routes/console/project-[project]/messaging/createMessageDropdown.svelte index 7cd6d5814c..db2850cca7 100644 --- a/src/routes/console/project-[project]/messaging/createMessageDropdown.svelte +++ b/src/routes/console/project-[project]/messaging/createMessageDropdown.svelte @@ -5,8 +5,8 @@ import { providers } from './providers/store'; import Wizard from './wizard.svelte'; import { messageParams, operation, providerType, targetsById } from './wizard/store'; - import { ProviderTypes } from './providerType.svelte'; import { topicsById } from './store'; + import { MessagingProviderType } from '@appwrite.io/console'; export let showCreateDropdown = false; @@ -24,9 +24,9 @@ icon={option.icon} on:click={() => { if ( - type !== ProviderTypes.Email && - type !== ProviderTypes.Sms && - type !== ProviderTypes.Push + type !== MessagingProviderType.Email && + type !== MessagingProviderType.Sms && + type !== MessagingProviderType.Push ) return; $providerType = type; @@ -39,20 +39,20 @@ targets: [] }; switch (type) { - case ProviderTypes.Email: + case MessagingProviderType.Email: $messageParams[$providerType] = { ...common, subject: '', content: '' }; break; - case ProviderTypes.Sms: + case MessagingProviderType.Sms: $messageParams[$providerType] = { ...common, content: '' }; break; - case ProviderTypes.Push: + case MessagingProviderType.Push: $messageParams[$providerType] = { ...common, title: '', 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 20dfb2905b..7181173f05 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte @@ -4,11 +4,9 @@ import EmailPreview from './emailPreview.svelte'; import Overview from './overview.svelte'; import { message } from './store'; - import { ProviderTypes } from '../providerType.svelte'; import SMSPreview from './smsPreview.svelte'; import PushPreview from './pushPreview.svelte'; import { - MessageStatuses, messageParams, operation, providerType, @@ -19,11 +17,12 @@ import Wizard from '../wizard.svelte'; import type { PageData } from './$types'; import { isValueOfStringEnum } from '$lib/helpers/types'; + import { MessageType, MessagingProviderType } from '@appwrite.io/console'; export let data: PageData; async function onEdit() { - if (!isValueOfStringEnum(ProviderTypes, $message.providerType)) { + if (!isValueOfStringEnum(MessagingProviderType, $message.providerType)) { throw new Error(`Invalid provider type: ${$message.providerType}`); } $operation = 'update'; @@ -39,12 +38,12 @@ topics: $message.topics, users: $message.users, targets: $message.targets, - status: MessageStatuses.DRAFT, + status: MessageType.Draft, scheduledAt: $message.scheduledAt }; switch ($providerType) { - case ProviderTypes.Email: + case MessagingProviderType.Email: { const { data } = $message; const params = ['subject', 'content', 'html']; @@ -55,7 +54,7 @@ }); } break; - case ProviderTypes.Sms: + case MessagingProviderType.Sms: { const { data } = $message; const params = ['content']; @@ -66,7 +65,7 @@ }); } break; - case ProviderTypes.Push: + case MessagingProviderType.Push: { const { data } = $message; const params = [ @@ -99,18 +98,18 @@ - {#if $message.providerType === ProviderTypes.Email} + {#if $message.providerType === MessagingProviderType.Email} - {:else if $message.providerType === ProviderTypes.Sms} + onEdit={$message.status === MessageType.Draft ? onEdit : null} /> + {:else if $message.providerType === MessagingProviderType.Sms} - {:else if $message.providerType === ProviderTypes.Push} + onEdit={$message.status === MessageType.Draft ? onEdit : null} /> + {:else if $message.providerType === MessagingProviderType.Push} + onEdit={$message.status === MessageType.Draft ? onEdit : null} /> {/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 9dfb7add38..7413cfd794 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte @@ -2,8 +2,9 @@ import { CardGrid, Heading } from '$lib/components'; import { toLocaleDateTime } from '$lib/helpers/date'; import { message } from './store'; - import ProviderType, { ProviderTypes } from '../providerType.svelte'; + import ProviderType from '../providerType.svelte'; import MessageStatusPill from '../messageStatusPill.svelte'; + import { MessagingProviderType } from '@appwrite.io/console'; let scheduledAt: string = ''; if ($message.status === 'sent') { @@ -14,13 +15,13 @@ let providerType = 'Invalid provider type'; switch ($message.providerType) { - case ProviderTypes.Email: + case MessagingProviderType.Email: providerType = 'Email'; break; - case ProviderTypes.Sms: + case MessagingProviderType.Sms: providerType = 'SMS'; break; - case ProviderTypes.Push: + case MessagingProviderType.Push: providerType = 'Push'; break; } diff --git a/src/routes/console/project-[project]/messaging/providerType.svelte b/src/routes/console/project-[project]/messaging/providerType.svelte index 6d5ed9ebc6..91f16310e6 100644 --- a/src/routes/console/project-[project]/messaging/providerType.svelte +++ b/src/routes/console/project-[project]/messaging/providerType.svelte @@ -1,15 +1,8 @@ - - @@ -25,9 +25,9 @@ icon={option.icon} on:click={() => { if ( - type !== ProviderTypes.Email && - type !== ProviderTypes.Sms && - type !== ProviderTypes.Push + type !== MessagingProviderType.Email && + type !== MessagingProviderType.Sms && + type !== MessagingProviderType.Push ) return; $providerType = type; 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 d4134dc73b..70076f9cba 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 @@ -10,8 +10,9 @@ 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, { ProviderTypes } from '../../providerType.svelte'; + import ProviderType from '../../providerType.svelte'; import Update from '../update.svelte'; import { providerParams, providerType, provider as wizardProvider } from '../wizard/store'; import { provider } from './store'; @@ -23,7 +24,7 @@ }); function configure() { - if (!isValueOfStringEnum(ProviderTypes, $provider.type)) { + if (!isValueOfStringEnum(MessagingProviderType, $provider.type)) { throw new Error(`Invalid provider type: ${$provider.type}`); } diff --git a/src/routes/console/project-[project]/messaging/providers/store.ts b/src/routes/console/project-[project]/messaging/providers/store.ts index 59a652b9f9..61cf5e006d 100644 --- a/src/routes/console/project-[project]/messaging/providers/store.ts +++ b/src/routes/console/project-[project]/messaging/providers/store.ts @@ -1,7 +1,7 @@ import type { Column } from '$lib/helpers/types'; import { writable } from 'svelte/store'; import { Providers } from '../provider.svelte'; -import { ProviderTypes } from '../providerType.svelte'; +import { MessagingProviderType } from '@appwrite.io/console'; export const columns = writable([ { id: '$id', title: 'Provider ID', type: 'string', show: true }, @@ -12,7 +12,7 @@ export const columns = writable([ ]); type ProvidersMap = { - [key in ProviderTypes]: { + [key in MessagingProviderType]: { name: string; text: string; icon: string; @@ -36,7 +36,7 @@ type ProvidersMap = { }; export const providers: ProvidersMap = { - [ProviderTypes.Push]: { + [MessagingProviderType.Push]: { name: 'Push notification', text: 'notifications', icon: 'device-mobile', @@ -135,7 +135,7 @@ export const providers: ProvidersMap = { // } } }, - [ProviderTypes.Email]: { + [MessagingProviderType.Email]: { name: 'Email', text: 'emails', icon: 'mail', @@ -245,7 +245,7 @@ export const providers: ProvidersMap = { } }, - [ProviderTypes.Sms]: { + [MessagingProviderType.Sms]: { name: 'SMS', text: 'SMS', icon: 'annotation', diff --git a/src/routes/console/project-[project]/messaging/providers/wizard/store.ts b/src/routes/console/project-[project]/messaging/providers/wizard/store.ts index 50665d03bb..07b097e075 100644 --- a/src/routes/console/project-[project]/messaging/providers/wizard/store.ts +++ b/src/routes/console/project-[project]/messaging/providers/wizard/store.ts @@ -1,6 +1,6 @@ import { writable } from 'svelte/store'; import type { Providers } from '../../provider.svelte'; -import type { ProviderTypes } from '../../providerType.svelte'; +import type { MessagingProviderType } from '@appwrite.io/console'; type ProviderParams = { providerId: string; @@ -83,7 +83,7 @@ export type MQTTProviderParams = ProviderParams & { serverKey: string; }; -export const providerType = writable(null); +export const providerType = writable(null); export const provider = writable(null); export const providerParams = writable<{ twilio: Partial; 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]/subscribers/table.svelte index 13fbbf7f0a..adaf335e49 100644 --- a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/table.svelte +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/subscribers/table.svelte @@ -19,13 +19,14 @@ import { addNotification } from '$lib/stores/notifications'; import type { PageData } from './$types'; import { columns } from './store'; - import ProviderType, { ProviderTypes } 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 type { Subscriber } from './+page'; + import { MessagingProviderType } from '@appwrite.io/console'; export let data: PageData; @@ -125,7 +126,7 @@ {:else if column.id === 'target'} - {#if target.providerType === ProviderTypes.Push} + {#if target.providerType === MessagingProviderType.Push} {target.name} {:else} {target.identifier} diff --git a/src/routes/console/project-[project]/messaging/userTargetsModal.svelte b/src/routes/console/project-[project]/messaging/userTargetsModal.svelte index 5f5559a928..3600b3e0ac 100644 --- a/src/routes/console/project-[project]/messaging/userTargetsModal.svelte +++ b/src/routes/console/project-[project]/messaging/userTargetsModal.svelte @@ -8,13 +8,13 @@ } from '$lib/components'; import { Button, FormList, InputCheckbox, InputSearch } from '$lib/elements/forms'; import { sdk } from '$lib/stores/sdk'; - import { Query, type Models } from '@appwrite.io/console'; + import { Query, type Models, MessagingProviderType } from '@appwrite.io/console'; import { createEventDispatcher } from 'svelte'; - import ProviderType, { ProviderTypes } from './providerType.svelte'; + import ProviderType from './providerType.svelte'; export let show: boolean; export let targetsById: Record; - export let providerType: ProviderTypes = null; + export let providerType: MessagingProviderType = null; export let title = 'Select users'; const dispatch = createEventDispatcher(); @@ -40,9 +40,9 @@ if (!show) return; const queries = [Query.limit(5), Query.offset(offset)]; - if (providerType === ProviderTypes.Email) { + if (providerType === MessagingProviderType.Email) { queries.push(Query.notEqual('email', '')); - } else if (providerType === ProviderTypes.Sms) { + } else if (providerType === MessagingProviderType.Sms) { queries.push(Query.notEqual('phone', '')); } @@ -189,7 +189,7 @@ > - {#if target.providerType !== ProviderTypes.Push} + {#if target.providerType !== MessagingProviderType.Push} {target.identifier} {:else} diff --git a/src/routes/console/project-[project]/messaging/wizard.svelte b/src/routes/console/project-[project]/messaging/wizard.svelte index 51dda10650..1ae337e63b 100644 --- a/src/routes/console/project-[project]/messaging/wizard.svelte +++ b/src/routes/console/project-[project]/messaging/wizard.svelte @@ -14,14 +14,12 @@ import { providerType, messageParams, - MessageStatuses, type PushMessageParams, type SMSMessageParams, type EmailMessageParams, operation } from './wizard/store'; - import { ProviderTypes } from './providerType.svelte'; - import { ID } from '@appwrite.io/console'; + import { ID, MessageType, MessagingProviderType } from '@appwrite.io/console'; import { Dependencies } from '$lib/constants'; async function create() { @@ -48,7 +46,7 @@ }); switch ($providerType) { - case ProviderTypes.Email: + case MessagingProviderType.Email: response = await sdk.forProject.client.call( 'POST', new URL( @@ -65,7 +63,7 @@ } ); break; - case ProviderTypes.Sms: + case MessagingProviderType.Sms: response = await sdk.forProject.client.call( 'POST', new URL(sdk.forProject.client.config.endpoint + '/messaging/messages/sms'), @@ -80,10 +78,10 @@ } ); break; - case ProviderTypes.Push: + case MessagingProviderType.Push: { const customData: Record = {}; - const { data } = $messageParams[ProviderTypes.Push]; + const { data } = $messageParams[MessagingProviderType.Push]; if (data && data.length > 0) { data.forEach((item) => { if (item[0] === '') return; @@ -113,13 +111,13 @@ wizard.hide(); let message = ''; switch (params.status) { - case MessageStatuses.DRAFT: + case MessageType.Draft: message = 'The message has been saved as draft.'; break; - case MessageStatuses.PROCESSING: + case MessageType.Processing: message = 'The message is queued for processing.'; break; - case MessageStatuses.SCHEDULED: + case MessageType.Scheduled: message = 'The message has been scheduled.'; break; } @@ -167,7 +165,7 @@ console.log(payload); switch ($providerType) { - case ProviderTypes.Email: + case MessagingProviderType.Email: response = await sdk.forProject.client.call( 'PATCH', new URL( @@ -184,7 +182,7 @@ } ); break; - case ProviderTypes.Sms: + case MessagingProviderType.Sms: response = await sdk.forProject.client.call( 'PATCH', new URL( @@ -201,10 +199,10 @@ } ); break; - case ProviderTypes.Push: + case MessagingProviderType.Push: { const customData: Record = {}; - const { data } = $messageParams[ProviderTypes.Push]; + const { data } = $messageParams[MessagingProviderType.Push]; if (data && data.length > 0) { data.forEach((item) => { if (item[0] === '') return; @@ -234,13 +232,13 @@ wizard.hide(); let message = ''; switch (params.status) { - case MessageStatuses.DRAFT: + case MessageType.Draft: message = 'The message has been saved as draft.'; break; - case MessageStatuses.PROCESSING: + case MessageType.Processing: message = 'The message is queued for processing.'; break; - case MessageStatuses.SCHEDULED: + case MessageType.Scheduled: message = 'The message has been scheduled.'; break; } @@ -264,7 +262,7 @@ } async function saveDraft() { - $messageParams[$providerType].status = MessageStatuses.DRAFT; + $messageParams[$providerType].status = MessageType.Draft; if ($operation === 'create') { create(); } else { diff --git a/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte b/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte index 4b17e43e19..67fac864a6 100644 --- a/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte +++ b/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte @@ -20,7 +20,6 @@ messageParams, providerType, type EmailMessageParams, - MessageStatuses, operation } from './store'; import { @@ -36,9 +35,8 @@ import { CustomId, Modal } from '$lib/components'; import { user } from '$lib/stores/user'; import { clickOnEnter } from '$lib/helpers/a11y'; - import { ID } from '@appwrite.io/console'; + import { ID, MessageType, MessagingProviderType } from '@appwrite.io/console'; import { sdk } from '$lib/stores/sdk'; - import { ProviderTypes } from '../providerType.svelte'; let showCustomId = false; let showTest = false; @@ -50,15 +48,15 @@ console.log(email); createEmailMessage({ - topics: $messageParams[ProviderTypes.Email]?.topics || [], - targets: $messageParams[ProviderTypes.Email]?.targets || [], - status: MessageStatuses.PROCESSING, + topics: $messageParams[MessagingProviderType.Email]?.topics || [], + targets: $messageParams[MessagingProviderType.Email]?.targets || [], + status: MessageType.Processing, messageId: ID.unique(), // TODO: properly handle the test email address users: ['steven'], - subject: $messageParams[ProviderTypes.Email]?.subject || '', - content: $messageParams[ProviderTypes.Email]?.content || '', - html: $messageParams[ProviderTypes.Email]?.html || false + subject: $messageParams[MessagingProviderType.Email]?.subject || '', + content: $messageParams[MessagingProviderType.Email]?.content || '', + html: $messageParams[MessagingProviderType.Email]?.html || false }); } diff --git a/src/routes/console/project-[project]/messaging/wizard/pushFormList.svelte b/src/routes/console/project-[project]/messaging/wizard/pushFormList.svelte index 8102bd3338..1767a5c932 100644 --- a/src/routes/console/project-[project]/messaging/wizard/pushFormList.svelte +++ b/src/routes/console/project-[project]/messaging/wizard/pushFormList.svelte @@ -42,7 +42,6 @@ import { messageParams, providerType, - MessageStatuses, type PushMessageParams, operation } from './store'; @@ -62,9 +61,8 @@ import { CustomId, Modal } from '$lib/components'; import { user } from '$lib/stores/user'; import { clickOnEnter } from '$lib/helpers/a11y'; - import { ID } from '@appwrite.io/console'; + import { ID, MessageType, MessagingProviderType } from '@appwrite.io/console'; import { sdk } from '$lib/stores/sdk'; - import { ProviderTypes } from '../providerType.svelte'; import PushPhone from '../pushPhone.svelte'; import { onMount } from 'svelte'; @@ -76,7 +74,7 @@ let customData: [string, string][] = []; onMount(() => { - $messageParams[ProviderTypes.Push].data = customData || [['', '']]; + $messageParams[MessagingProviderType.Push].data = customData || [['', '']]; }); async function sendTestMessage() { @@ -84,20 +82,20 @@ console.log(email); createPushMessage({ - topics: $messageParams[ProviderTypes.Push]?.topics || [], - targets: $messageParams[ProviderTypes.Push]?.targets || [], - status: MessageStatuses.PROCESSING, + topics: $messageParams[MessagingProviderType.Push]?.topics || [], + targets: $messageParams[MessagingProviderType.Push]?.targets || [], + status: MessageType.Processing, messageId: ID.unique(), // TODO: properly handle the test email address users: ['steven'], - body: $messageParams[ProviderTypes.Push]?.body || '', - title: $messageParams[ProviderTypes.Push]?.title || '', - data: $messageParams[ProviderTypes.Push]?.data || [] + body: $messageParams[MessagingProviderType.Push]?.body || '', + title: $messageParams[MessagingProviderType.Push]?.title || '', + data: $messageParams[MessagingProviderType.Push]?.data || [] }); } $: otherEmail = selected === 'self' ? '' : otherEmail; - $: customData = $messageParams[ProviderTypes.Push].data; + $: customData = $messageParams[MessagingProviderType.Push].data; $: dataError = validateData(customData || []); @@ -107,14 +105,14 @@ id="title" label="Title" placeholder="Enter title" - bind:value={$messageParams[ProviderTypes.Push]['title']}> + bind:value={$messageParams[MessagingProviderType.Push]['title']}>

+ bind:value={$messageParams[MessagingProviderType.Push]['body']}> Create an {providers[$providerType].text} that will be displayed to your subscribers. Learn more in our documentation. - {#if $providerType === ProviderTypes.Email} + {#if $providerType === MessagingProviderType.Email} - {:else if $providerType === ProviderTypes.Sms} + {:else if $providerType === MessagingProviderType.Sms} - {:else if $providerType === ProviderTypes.Push} + {:else if $providerType === MessagingProviderType.Push} {/if} diff --git a/src/routes/console/project-[project]/messaging/wizard/step3.svelte b/src/routes/console/project-[project]/messaging/wizard/step3.svelte index d7499bff31..d75fc47bdb 100644 --- a/src/routes/console/project-[project]/messaging/wizard/step3.svelte +++ b/src/routes/console/project-[project]/messaging/wizard/step3.svelte @@ -2,7 +2,8 @@ import { FormList, InputDate, InputSelect, InputTime } from '$lib/elements/forms'; import Helper from '$lib/elements/forms/helper.svelte'; import { WizardStep } from '$lib/layout'; - import { MessageStatuses, messageParams, providerType } from './store'; + import { MessageType } from '@appwrite.io/console'; + import { messageParams, providerType } from './store'; let when: 'now' | 'later' = 'now'; let now = new Date(); @@ -27,9 +28,9 @@ }; async function beforeSubmit() { - $messageParams[$providerType].status = MessageStatuses.PROCESSING; + $messageParams[$providerType].status = MessageType.Processing; if (when === 'later') { - $messageParams[$providerType].status = MessageStatuses.SCHEDULED; + $messageParams[$providerType].status = 'scheduled' as MessageType; $messageParams[$providerType].scheduledAt = dateTime.toISOString(); } } diff --git a/src/routes/console/project-[project]/messaging/wizard/store.ts b/src/routes/console/project-[project]/messaging/wizard/store.ts index f651df27d8..087acaf76a 100644 --- a/src/routes/console/project-[project]/messaging/wizard/store.ts +++ b/src/routes/console/project-[project]/messaging/wizard/store.ts @@ -1,21 +1,12 @@ -import type { Models } from '@appwrite.io/console'; +import { MessageType, MessagingProviderType, type Models } from '@appwrite.io/console'; import { writable } from 'svelte/store'; -import { ProviderTypes } from '../providerType.svelte'; - -export enum MessageStatuses { - DRAFT = 'draft', - SCHEDULED = 'scheduled', - PROCESSING = 'processing', - SENT = 'sent', - FAILED = 'failed' -} export type MessageParams = { messageId: string; topics: string[]; users: string[]; targets: string[]; - status: MessageStatuses; + status: MessageType; scheduledAt?: string; }; @@ -42,14 +33,14 @@ export type PushMessageParams = MessageParams & { }; export const operation = writable<'create' | 'update'>('create'); -export const providerType = writable(null); +export const providerType = writable(null); export const targetsById = writable>({}); export const messageParams = writable<{ - [ProviderTypes.Email]: Partial; - [ProviderTypes.Sms]: Partial; - [ProviderTypes.Push]: Partial; + [MessagingProviderType.Email]: Partial; + [MessagingProviderType.Sms]: Partial; + [MessagingProviderType.Push]: Partial; }>({ - [ProviderTypes.Email]: null, - [ProviderTypes.Sms]: null, - [ProviderTypes.Push]: null + [MessagingProviderType.Email]: null, + [MessagingProviderType.Sms]: null, + [MessagingProviderType.Push]: null }); 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 c355c08690..d756e05b97 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 @@ -5,6 +5,7 @@ import { sdk } from '$lib/stores/sdk'; import { createPlatform } from '../store'; import { Submit, trackEvent } from '$lib/actions/analytics'; + import { PlatformType } from '@appwrite.io/console'; const projectId = $page.params.project; @@ -24,7 +25,7 @@ const platform = await sdk.forConsole.projects.createPlatform( projectId, - 'android', + PlatformType.Android, $createPlatform.name, $createPlatform.key || undefined, undefined, 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 7b690ad1b1..46adf251d3 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 @@ -6,15 +6,9 @@ import { sdk } from '$lib/stores/sdk'; import { createPlatform } from '../store'; import { Submit, trackEvent } from '$lib/actions/analytics'; + import { PlatformType } from '@appwrite.io/console'; - enum Platform { - iOS = 'apple-ios', - macOS = 'apple-macos', - watchOS = 'apple-watchos', - tvOS = 'apple-tvos' - } - - let platform: Platform = Platform.iOS; + let platform: PlatformType = PlatformType.Appleios; const projectId = $page.params.project; @@ -50,26 +44,26 @@
(platform = Platform.iOS)} - selected={platform === Platform.iOS}> + on:click={() => (platform = PlatformType.Appleios)} + selected={platform === PlatformType.Appleios}> iOS (platform = Platform.macOS)} - selected={platform === Platform.macOS}> + on:click={() => (platform = PlatformType.Applemacos)} + selected={platform === PlatformType.Applemacos}> macOS (platform = Platform.watchOS)} - selected={platform === Platform.watchOS}> + on:click={() => (platform = PlatformType.Applewatchos)} + selected={platform === PlatformType.Applewatchos}> watchOS (platform = Platform.tvOS)} - selected={platform === Platform.tvOS}> + on:click={() => (platform = PlatformType.Appletvos)} + selected={platform === PlatformType.Appletvos}> tvOS
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 3aeb1ea3cb..3aa0a579ba 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 @@ -6,77 +6,123 @@ import { sdk } from '$lib/stores/sdk'; import { createPlatform } from '../store'; import { Submit, trackEvent } from '$lib/actions/analytics'; + import { PlatformType } from '@appwrite.io/console'; + import { isValueOfStringEnum } from '$lib/helpers/types'; - enum Platform { - Android = 'flutter-android', - Ios = 'flutter-ios', - Linux = 'flutter-linux', - Macos = 'flutter-macos', - Windows = 'flutter-windows', - Web = 'flutter-web' - } + // enum Platform { + // Android = 'flutter-android', + // Ios = 'flutter-ios', + // Linux = 'flutter-linux', + // Macos = 'flutter-macos', + // Windows = 'flutter-windows', + // Web = 'flutter-web' + // } - function isPlatform(value: string): value is Platform { - return Object.values(Platform).includes(value as Platform); - } + // function isPlatform(value: string): value is Platform { + // return Object.values(Platform).includes(value as Platform); + // } - let platform: Platform = isPlatform($createPlatform.type) + let platform: PlatformType = isValueOfStringEnum(PlatformType, $createPlatform.type) ? $createPlatform.type - : Platform.Android; + : PlatformType.Flutterandroid; const projectId = $page.params.project; const suggestions = ['*.vercel.app', '*.netlify.app', '*.gitpod.io']; const placeholder: Record< - Platform, + PlatformType, { name: string; hostname: string; tooltip: string; } > = { - [Platform.Android]: { + [PlatformType.Flutterandroid]: { name: 'My Android App', hostname: 'com.company.appname', tooltip: 'Your package name is generally the applicationId in your app-level build.gradle file.' }, - [Platform.Ios]: { + [PlatformType.Flutterios]: { name: 'My iOS App', hostname: 'com.company.appname', tooltip: "You can find your Bundle Identifier in the General tab for your app's primary target in Xcode." }, - [Platform.Linux]: { + [PlatformType.Flutterlinux]: { name: 'My Linux App', hostname: 'appname', tooltip: 'Your application name' }, - [Platform.Macos]: { + [PlatformType.Fluttermacos]: { name: 'My mac OS App', hostname: 'com.company.appname', tooltip: "You can find your Bundle Identifier in the General tab for your app's primary target in Xcode." }, - [Platform.Web]: { + [PlatformType.Flutterweb]: { name: 'My Web App', hostname: 'localhost', tooltip: 'The hostname that your website will use to interact with the Appwrite APIs in production or development environments. No protocol or port number required.' }, - [Platform.Windows]: { + [PlatformType.Flutterwindows]: { name: 'My Windows App', hostname: 'appname', tooltip: 'Your application name' + }, + // The following are not used, but added to avoid TS errors + [PlatformType.Web]: { + name: '', + hostname: '', + tooltip: '' + }, + [PlatformType.Appleios]: { + name: '', + hostname: '', + tooltip: '' + }, + [PlatformType.Applemacos]: { + name: '', + hostname: '', + tooltip: '' + }, + [PlatformType.Applewatchos]: { + name: '', + hostname: '', + tooltip: '' + }, + [PlatformType.Appletvos]: { + name: '', + hostname: '', + tooltip: '' + }, + [PlatformType.Android]: { + name: '', + hostname: '', + tooltip: '' + }, + [PlatformType.Unity]: { + name: '', + hostname: '', + tooltip: '' } }; - const hostname: Record = { - [Platform.Android]: 'Package Name', - [Platform.Ios]: 'Bundle ID', - [Platform.Linux]: 'Package Name', - [Platform.Macos]: 'Bundle ID', - [Platform.Web]: 'Hostname', - [Platform.Windows]: 'Package Name' + const hostname: Record = { + [PlatformType.Flutterandroid]: 'Package Name', + [PlatformType.Flutterios]: 'Bundle ID', + [PlatformType.Flutterlinux]: 'Package Name', + [PlatformType.Fluttermacos]: 'Bundle ID', + [PlatformType.Flutterweb]: 'Hostname', + [PlatformType.Flutterwindows]: 'Package Name', + // The following are not used, but added to avoid TS errors + [PlatformType.Web]: '', + [PlatformType.Appleios]: '', + [PlatformType.Applemacos]: '', + [PlatformType.Applewatchos]: '', + [PlatformType.Appletvos]: '', + [PlatformType.Android]: '', + [PlatformType.Unity]: '' }; async function beforeSubmit() { @@ -88,9 +134,9 @@ projectId, platform, $createPlatform.name, - platform !== Platform.Web ? $createPlatform.key : undefined, + platform !== PlatformType.Flutterweb ? $createPlatform.key : undefined, undefined, - platform === Platform.Web ? $createPlatform.hostname : undefined + platform === PlatformType.Flutterweb ? $createPlatform.hostname : undefined ); trackEvent(Submit.PlatformCreate, { @@ -102,12 +148,12 @@ } $: registee = { - [Platform.Android]: 'package name', - [Platform.Ios]: 'bundle ID', - [Platform.Linux]: 'package name', - [Platform.Macos]: 'bundle ID', - [Platform.Windows]: 'package name', - [Platform.Web]: 'hostname' + [PlatformType.Flutterandroid]: 'package name', + [PlatformType.Flutterios]: 'bundle ID', + [PlatformType.Flutterlinux]: 'package name', + [PlatformType.Fluttermacos]: 'bundle ID', + [PlatformType.Flutterwindows]: 'package name', + [PlatformType.Flutterweb]: 'hostname' }[platform]; @@ -117,38 +163,38 @@
(platform = Platform.Android)} - selected={platform === Platform.Android}> + on:click={() => (platform = PlatformType.Flutterandroid)} + selected={platform === PlatformType.Flutterandroid}> Android (platform = Platform.Ios)} - selected={platform === Platform.Ios}> + on:click={() => (platform = PlatformType.Flutterios)} + selected={platform === PlatformType.Flutterios}> iOS (platform = Platform.Linux)} - selected={platform === Platform.Linux}> + on:click={() => (platform = PlatformType.Flutterlinux)} + selected={platform === PlatformType.Flutterlinux}> Linux (platform = Platform.Macos)} - selected={platform === Platform.Macos}> + on:click={() => (platform = PlatformType.Fluttermacos)} + selected={platform === PlatformType.Fluttermacos}> macOS (platform = Platform.Windows)} - selected={platform === Platform.Windows}> + on:click={() => (platform = PlatformType.Flutterwindows)} + selected={platform === PlatformType.Flutterwindows}> Windows (platform = Platform.Web)} - selected={platform === Platform.Web}> + on:click={() => (platform = PlatformType.Flutterweb)} + selected={platform === PlatformType.Flutterweb}> Web
@@ -161,7 +207,7 @@ placeholder={placeholder[platform].name} required bind:value={$createPlatform.name} /> - {#if platform === Platform.Web} + {#if platform === PlatformType.Flutterweb}
Promise; + load: (start: string, end: string, period: ProjectUsageRange) => Promise; } >('projectUsage', function ({ set }) { return { diff --git a/src/routes/console/project-[project]/settings/domains/+page.svelte b/src/routes/console/project-[project]/settings/domains/+page.svelte index 6ad7b183b6..f281c55b54 100644 --- a/src/routes/console/project-[project]/settings/domains/+page.svelte +++ b/src/routes/console/project-[project]/settings/domains/+page.svelte @@ -1,14 +1,15 @@ - + Custom Domains diff --git a/src/routes/console/project-[project]/settings/domains/+page.ts b/src/routes/console/project-[project]/settings/domains/+page.ts index 556cd66c26..16a598b515 100644 --- a/src/routes/console/project-[project]/settings/domains/+page.ts +++ b/src/routes/console/project-[project]/settings/domains/+page.ts @@ -1,14 +1,15 @@ import { Dependencies } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; -import { Query } from '@appwrite.io/console'; +import { Query, ResourceType } from '@appwrite.io/console'; import type { PageLoad } from './$types'; -import { ProxyTypes } from '$lib/pages/domains/index.svelte'; export const load: PageLoad = async ({ depends, url }) => { depends(Dependencies.DOMAINS); return { - rules: await sdk.forProject.proxy.listRules([Query.equal('resourceType', ProxyTypes.API)]), + rules: await sdk.forProject.proxy.listRules([ + Query.equal('resourceType', ResourceType.Api) + ]), create: url.searchParams.get('create') !== null }; }; diff --git a/src/routes/console/project-[project]/settings/smtp/+page.svelte b/src/routes/console/project-[project]/settings/smtp/+page.svelte index a35ad9ea7b..c5477d6217 100644 --- a/src/routes/console/project-[project]/settings/smtp/+page.svelte +++ b/src/routes/console/project-[project]/settings/smtp/+page.svelte @@ -23,6 +23,7 @@ import { organization } from '$lib/stores/organization'; import { wizard } from '$lib/stores/wizard'; import ChangeOrganizationTierCloud from '$routes/console/changeOrganizationTierCloud.svelte'; + import { SMTPSecure } from '@appwrite.io/console'; let enabled = false; let senderName: string; @@ -68,7 +69,7 @@ port ? port : undefined, username ? username : undefined, password ? password : undefined, - secure ? 'tls' : undefined + secure ? SMTPSecure.Tls : undefined ); invalidate(Dependencies.PROJECT); diff --git a/src/routes/console/project-[project]/settings/transferProject.svelte b/src/routes/console/project-[project]/settings/transferProject.svelte index 735f3e75d5..9f73063b61 100644 --- a/src/routes/console/project-[project]/settings/transferProject.svelte +++ b/src/routes/console/project-[project]/settings/transferProject.svelte @@ -14,20 +14,7 @@ const handleTransfer = async () => { try { - await sdk.forConsole.client.call( - 'PATCH', - new URL( - sdk.forConsole.client.config.endpoint + '/projects/' + $project.$id + '/team' - ), - { - 'X-Appwrite-Project': sdk.forConsole.client.config.project, - 'content-type': 'application/json' - }, - { - teamId: teamId - } - ); - // await sdk.forConsole.projects.update($project.$id, password); + await sdk.forConsole.projects.updateTeam($project.$id, teamId); show = false; addNotification({ type: 'success', diff --git a/src/routes/console/project-[project]/settings/updateServices.svelte b/src/routes/console/project-[project]/settings/updateServices.svelte index f063c6f9f6..0318f88665 100644 --- a/src/routes/console/project-[project]/settings/updateServices.svelte +++ b/src/routes/console/project-[project]/settings/updateServices.svelte @@ -53,18 +53,7 @@ } try { - const path = '/projects/' + $project.$id + '/service/all'; - await sdk.forConsole.client.call( - 'PATCH', - new URL(sdk.forConsole.client.config.endpoint + path), - { - 'X-Appwrite-Project': sdk.forConsole.client.config.project, - 'content-type': 'application/json' - }, - { - status: status - } - ); + await sdk.forConsole.projects.updateServiceStatusAll($project.$id, status); invalidate(Dependencies.PROJECT); addNotification({ type: 'success', diff --git a/src/routes/console/project-[project]/storage/bucket-[bucket]/settings/+page.svelte b/src/routes/console/project-[project]/storage/bucket-[bucket]/settings/+page.svelte index e229e256c3..d153a39e49 100644 --- a/src/routes/console/project-[project]/storage/bucket-[bucket]/settings/+page.svelte +++ b/src/routes/console/project-[project]/storage/bucket-[bucket]/settings/+page.svelte @@ -14,6 +14,10 @@ const bucketData = get(bucket); const values = { ...bucketData, ...updates }; + if (!isValueOfStringEnum(Compression, values.compression)) { + throw new Error(`Invalid compression: ${values.compression}`); + } + try { await sdk.forProject.storage.updateBucket( values.$id, @@ -74,7 +78,7 @@ import { Container } from '$lib/layout'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import type { Models } from '@appwrite.io/console'; + import { Compression, type Models } from '@appwrite.io/console'; import { onMount } from 'svelte'; import { get, writable } from 'svelte/store'; import Delete from '../deleteBucket.svelte'; @@ -82,6 +86,7 @@ import UpdateMaxFileSize from './updateMaxFileSize.svelte'; import { readOnly } from '$lib/stores/billing'; import { GRACE_PERIOD_OVERRIDE } from '$lib/system'; + import { isValueOfStringEnum } from '$lib/helpers/types'; let showDelete = false; diff --git a/src/routes/console/project-[project]/storage/bucket-[bucket]/usage/[[period]]/+page.ts b/src/routes/console/project-[project]/storage/bucket-[bucket]/usage/[[period]]/+page.ts index f011980604..de6a068c65 100644 --- a/src/routes/console/project-[project]/storage/bucket-[bucket]/usage/[[period]]/+page.ts +++ b/src/routes/console/project-[project]/storage/bucket-[bucket]/usage/[[period]]/+page.ts @@ -1,11 +1,16 @@ import { sdk } from '$lib/stores/sdk'; import type { Metric, UsageBuckets } from '$lib/sdk/usage'; import type { PageLoad } from './$types'; +import { StorageUsageRange } from '@appwrite.io/console'; +import { isValueOfStringEnum } from '$lib/helpers/types'; export const load: PageLoad = async ({ params }) => { + const period = isValueOfStringEnum(StorageUsageRange, params.period) + ? params.period + : StorageUsageRange.ThirtyDays; const response = (await sdk.forProject.storage.getBucketUsage( params.bucket, - params.period ?? '30d' + period )) as unknown as UsageBuckets; return { diff --git a/src/routes/console/project-[project]/storage/usage/[[period]]/+page.ts b/src/routes/console/project-[project]/storage/usage/[[period]]/+page.ts index 9c4f23b735..b16adae7a2 100644 --- a/src/routes/console/project-[project]/storage/usage/[[period]]/+page.ts +++ b/src/routes/console/project-[project]/storage/usage/[[period]]/+page.ts @@ -1,18 +1,15 @@ -import type { Metric, UsageStorage } from '$lib/sdk/usage'; +import { isValueOfStringEnum } from '$lib/helpers/types'; import { sdk } from '$lib/stores/sdk'; +import { StorageUsageRange } from '@appwrite.io/console'; import type { PageLoad } from './$types'; import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ params }) => { try { - const response = (await sdk.forProject.storage.getUsage( - params.period ?? '30d' - )) as unknown as UsageStorage; - - return { - bucketsTotal: response.bucketsTotal, - buckets: response.buckets as Metric[] - }; + const period = isValueOfStringEnum(StorageUsageRange, params.period) + ? params.period + : StorageUsageRange.ThirtyDays; + return sdk.forProject.storage.getUsage(period); } catch (e) { throw error(e.code, e.message); } diff --git a/src/routes/login/+page.svelte b/src/routes/login/+page.svelte index 88df7861e9..43fde46a61 100644 --- a/src/routes/login/+page.svelte +++ b/src/routes/login/+page.svelte @@ -16,6 +16,7 @@ import { Submit, trackEvent, trackError } from '$lib/actions/analytics'; import { isCloud } from '$lib/system'; import { page } from '$app/stores'; + import { OAuthProvider } from '@appwrite.io/console'; let mail: string, pass: string, disabled: boolean; @@ -62,7 +63,7 @@ } } sdk.forConsole.account.createOAuth2Session( - 'github', + OAuthProvider.Github, window.location.origin + url, window.location.origin, undefined, diff --git a/src/routes/register/+page.svelte b/src/routes/register/+page.svelte index cd50e51c07..7d8525bbe3 100644 --- a/src/routes/register/+page.svelte +++ b/src/routes/register/+page.svelte @@ -16,7 +16,7 @@ import FormList from '$lib/elements/forms/formList.svelte'; import { Dependencies } from '$lib/constants'; import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; - import { ID } from '@appwrite.io/console'; + import { ID, OAuthProvider } from '@appwrite.io/console'; import { isCloud } from '$lib/system'; import { page } from '$app/stores'; @@ -53,7 +53,7 @@ function onGithubLogin() { sdk.forConsole.account.createOAuth2Session( - 'github', + OAuthProvider.Github, window.location.origin, window.location.origin, undefined, From c6c8679cae846362db3eaa391f6cad7d97211db5 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 5 Feb 2024 14:33:35 -0800 Subject: [PATCH 02/15] Remove unnecessary backup --- .../messaging/providers/wizard/store.ts.bak | 161 ------------------ 1 file changed, 161 deletions(-) delete mode 100644 src/routes/console/project-[project]/messaging/providers/wizard/store.ts.bak 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 deleted file mode 100644 index 0ee3ba46ca..0000000000 --- a/src/routes/console/project-[project]/messaging/providers/wizard/store.ts.bak +++ /dev/null @@ -1,161 +0,0 @@ -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 a1cd316b6016af7c4c2bffa449d2321de0bfc3f7 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 5 Feb 2024 20:01:36 -0800 Subject: [PATCH 03/15] Fix listInvoices() queries type --- src/lib/sdk/billing.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/sdk/billing.ts b/src/lib/sdk/billing.ts index 96d6baee48..24c77a4dec 100644 --- a/src/lib/sdk/billing.ts +++ b/src/lib/sdk/billing.ts @@ -448,7 +448,7 @@ export class Billing { ); } - async listInvoices(organizationId: string, queries: Query[] = []): Promise { + async listInvoices(organizationId: string, queries: string[] = []): Promise { const path = `/organizations/${organizationId}/invoices`; const params = { organizationId, From ac8a9a96cb666592bcd25c5798ba74c6c6c7226f Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 5 Feb 2024 20:02:15 -0800 Subject: [PATCH 04/15] Add messaging service to sdkForProject --- src/lib/stores/sdk.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib/stores/sdk.ts b/src/lib/stores/sdk.ts index caacafee7a..649681e538 100644 --- a/src/lib/stores/sdk.ts +++ b/src/lib/stores/sdk.ts @@ -10,6 +10,7 @@ import { Functions, Health, Locale, + Messaging, Migrations, Project, Project as ProjectApi, @@ -38,6 +39,7 @@ const sdkForProject = { functions: new Functions(clientProject), health: new Health(clientProject), locale: new Locale(clientProject), + messaging: new Messaging(clientProject), project: new Project(clientProject), projectApi: new ProjectApi(clientProject), storage: new Storage(clientProject), From ec7ebd39e42bfeb833cba20467ebc8d3ec9e07d1 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 5 Feb 2024 20:04:51 -0800 Subject: [PATCH 05/15] Replace client.call() with the respective SDK methods --- .../auth/user-[user]/targets/+page.svelte | 6 +- .../auth/user-[user]/targets/+page.ts | 48 +--- .../auth/user-[user]/targets/create.svelte | 30 +-- .../auth/user-[user]/targets/table.svelte | 18 +- .../auth/user-[user]/updateLabels.svelte | 17 +- .../usage/[[period]]/+page.ts | 5 +- .../project-[project]/messaging/+page.ts | 45 +--- .../messaging/message-[message]/+layout.ts | 43 +--- .../messaging/message-[message]/+page.svelte | 7 +- .../message-[message]/deleteModal.svelte | 12 +- .../messaging/providers/+page.ts | 40 +-- .../messaging/providers/create.svelte | 237 ++++++----------- .../providers/provider-[provider]/+layout.ts | 25 +- .../provider-[provider]/deleteProvider.svelte | 12 +- .../provider-[provider]/updateStatus.svelte | 174 +++---------- .../messaging/providers/table.svelte | 16 +- .../messaging/providers/update.svelte | 238 ++++++------------ .../messaging/topics/+page.ts | 38 +-- .../messaging/topics/create.svelte | 14 +- .../messaging/topics/table.svelte | 14 +- .../messaging/topics/topic-[topic]/+layout.ts | 25 +- .../topics/topic-[topic]/activity/+page.ts | 24 +- .../topics/topic-[topic]/deleteTopic.svelte | 11 +- .../topic-[topic]/subscribers/+page.svelte | 25 +- .../topics/topic-[topic]/subscribers/+page.ts | 58 +---- .../topic-[topic]/subscribers/table.svelte | 19 +- .../topics/topic-[topic]/updateName.svelte | 14 +- .../messaging/topicsModal.svelte | 20 +- .../messaging/userTargetsModal.svelte | 20 +- .../project-[project]/messaging/wizard.svelte | 218 +++++++--------- .../messaging/wizard/emailFormList.svelte | 49 ++-- .../messaging/wizard/pushFormList.svelte | 51 ++-- .../messaging/wizard/smsFormList.svelte | 45 +--- 33 files changed, 417 insertions(+), 1201 deletions(-) diff --git a/src/routes/console/project-[project]/auth/user-[user]/targets/+page.svelte b/src/routes/console/project-[project]/auth/user-[user]/targets/+page.svelte index 316f0def94..d30e178c0b 100644 --- a/src/routes/console/project-[project]/auth/user-[user]/targets/+page.svelte +++ b/src/routes/console/project-[project]/auth/user-[user]/targets/+page.svelte @@ -1,9 +1,7 @@ - - @@ -106,7 +138,10 @@ {#each data.messages.messages as message (message.$id)} - + {#each $columns as column (column.id)} {#if column.show} @@ -176,7 +211,6 @@
- @@ -249,3 +283,21 @@ + + +

+ Are you sure you want to delete {selected.length} + {selected.length > 1 ? 'messages' : 'message'}? +

+ + + + +
diff --git a/src/routes/console/project-[project]/messaging/+page.ts b/src/routes/console/project-[project]/messaging/+page.ts index 3238761caa..39c1151bf6 100644 --- a/src/routes/console/project-[project]/messaging/+page.ts +++ b/src/routes/console/project-[project]/messaging/+page.ts @@ -1,5 +1,5 @@ import { queries, queryParamToMap } from '$lib/components/filters'; -import { CARD_LIMIT } from '$lib/constants'; +import { CARD_LIMIT, Dependencies } from '$lib/constants'; import { View, getLimit, @@ -13,7 +13,9 @@ import { sdk } from '$lib/stores/sdk'; import { Query, type Models } from '@appwrite.io/console'; import type { PageLoad } from './$types'; -export const load: PageLoad = async ({ url, route }) => { +export const load: PageLoad = async ({ depends, url, route }) => { + depends(Dependencies.MESSAGING_MESSAGES); + const page = getPage(url); const search = getSearch(url); const view = getView(url, route, View.Grid); From 79886b470cfa8c53a4736d974fa77cddd9fb61e0 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Tue, 6 Feb 2024 18:00:12 -0800 Subject: [PATCH 10/15] Don't allow deleting processing message --- .../messaging/message-[message]/delete.svelte | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/messaging/message-[message]/delete.svelte b/src/routes/console/project-[project]/messaging/message-[message]/delete.svelte index 7d7a2fb777..707b16c72b 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/delete.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/delete.svelte @@ -2,6 +2,7 @@ import { BoxAvatar, CardGrid, Heading } from '$lib/components'; import { Button } from '$lib/elements/forms'; import { toLocaleDateTime } from '$lib/helpers/date'; + import { MessageType } from '@appwrite.io/console'; import DeleteModal from './deleteModal.svelte'; import { message } from './store'; @@ -31,7 +32,11 @@ - + From c66f5e7e86208958565fb788eeb3fcdcfd41f1e7 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Wed, 7 Feb 2024 14:05:05 -0800 Subject: [PATCH 11/15] Show topics in message details --- .../messaging/message-[message]/+page.svelte | 2 + .../messaging/message-[message]/topics.svelte | 59 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/topics.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 854f2922f8..3c37676f27 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte @@ -13,6 +13,7 @@ import type { PageData } from './$types'; import { isValueOfStringEnum } from '$lib/helpers/types'; import { MessageType, MessagingProviderType } from '@appwrite.io/console'; + import Topics from './topics.svelte'; export let data: PageData; @@ -106,5 +107,6 @@ message={$message} onEdit={$message.status === MessageType.Draft ? onEdit : null} /> {/if} + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/topics.svelte b/src/routes/console/project-[project]/messaging/message-[message]/topics.svelte new file mode 100644 index 0000000000..75589a7e9d --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/topics.svelte @@ -0,0 +1,59 @@ + + + + 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.total} + + + {/each} + +
+
+

Total topics: {sum}

+ +
+
+ {:else} + Edit the message to add a Topic + {/if} +
+
From 4f81e48e8a62c53be229874148d993901dd44249 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Wed, 7 Feb 2024 14:25:41 -0800 Subject: [PATCH 12/15] Show targets in message details --- .../messaging/message-[message]/+layout.ts | 15 ++++- .../messaging/message-[message]/+page.svelte | 2 + .../message-[message]/targets.svelte | 62 +++++++++++++++++++ 3 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 src/routes/console/project-[project]/messaging/message-[message]/targets.svelte diff --git a/src/routes/console/project-[project]/messaging/message-[message]/+layout.ts b/src/routes/console/project-[project]/messaging/message-[message]/+layout.ts index e6523f71b1..7e3985ea37 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/+layout.ts +++ b/src/routes/console/project-[project]/messaging/message-[message]/+layout.ts @@ -4,6 +4,7 @@ import Header from './header.svelte'; import { sdk } from '$lib/stores/sdk'; import { Dependencies } from '$lib/constants'; import { error } from '@sveltejs/kit'; +import type { Models } from '@appwrite.io/console'; export const load: LayoutLoad = async ({ params, depends }) => { depends(Dependencies.MESSAGING_MESSAGE); @@ -11,7 +12,7 @@ export const load: LayoutLoad = async ({ params, depends }) => { try { const message = await sdk.forProject.messaging.getMessage(params.message); - const topicsById = {}; + const topicsById: Record = {}; const topicsPromise = Promise.allSettled( message.topics.map((topicId) => sdk.forProject.messaging.getTopic(topicId)) ).then((results) => { @@ -22,7 +23,7 @@ export const load: LayoutLoad = async ({ params, depends }) => { }); }); - const targetsById = {}; + const targetsById: Record = {}; const targetsPromise = sdk.forProject.messaging .listTargets(params.message) .then((response) => { @@ -33,10 +34,20 @@ export const load: LayoutLoad = async ({ params, depends }) => { await Promise.allSettled([topicsPromise, targetsPromise]); + const usersById: Record> = {}; + const usersPromise = Object.values(targetsById).map((target) => + sdk.forProject.users.get(target.userId).then((user) => { + usersById[user.$id] = user; + }) + ); + + await Promise.allSettled(usersPromise); + return { message, topicsById, targetsById, + usersById, header: Header, breadcrumbs: Breadcrumbs }; 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 3c37676f27..9a094f8c0c 100644 --- a/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte +++ b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte @@ -14,6 +14,7 @@ import { isValueOfStringEnum } from '$lib/helpers/types'; import { MessageType, MessagingProviderType } from '@appwrite.io/console'; import Topics from './topics.svelte'; + import Targets from './targets.svelte'; export let data: PageData; @@ -108,5 +109,6 @@ onEdit={$message.status === MessageType.Draft ? onEdit : null} /> {/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 new file mode 100644 index 0000000000..ca3e6ae031 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/targets.svelte @@ -0,0 +1,62 @@ + + + + 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} +
+
From 0f9e6bdc98a7eacac0ff70a6a36965cd29a982c5 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Wed, 7 Feb 2024 18:14:35 -0800 Subject: [PATCH 13/15] Update messaging related text Ensure the terminology used is consistent. --- .../project-[project]/messaging/topicsModal.svelte | 6 +++++- .../messaging/userTargetsModal.svelte | 13 ++++++++++--- .../project-[project]/messaging/wizard/step2.svelte | 4 ++-- .../project-[project]/messaging/wizard/step3.svelte | 3 +-- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/routes/console/project-[project]/messaging/topicsModal.svelte b/src/routes/console/project-[project]/messaging/topicsModal.svelte index 153063c88f..fb716fb17a 100644 --- a/src/routes/console/project-[project]/messaging/topicsModal.svelte +++ b/src/routes/console/project-[project]/messaging/topicsModal.svelte @@ -4,6 +4,7 @@ import { sdk } from '$lib/stores/sdk'; import { Query, type Models } from '@appwrite.io/console'; import { createEventDispatcher } from 'svelte'; + import { providerType } from './wizard/store'; export let show: boolean; export let topicsById: Record; @@ -79,7 +80,10 @@ -

Select existing topics you want to send this message to its recipients.

+

+ Select existing topics you want to send this message to its subscribers. The message will be + sent only to {$providerType} targets. +

; export let providerType: MessagingProviderType = null; - export let title = 'Select users'; + export let title = 'Select subscribers'; const dispatch = createEventDispatcher(); @@ -117,8 +117,15 @@ } - -

Select recipients for this message from your users.

+ + +

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

Targets Select users to whom this message should be directed. + >Select targets to whom this message should be directed. {#if targetIdsLength === 0 && topicIdsLength === 0}
@@ -67,7 +67,7 @@
- Select recipients to get started + Select targets to get started
diff --git a/src/routes/console/project-[project]/messaging/wizard/step3.svelte b/src/routes/console/project-[project]/messaging/wizard/step3.svelte index d75fc47bdb..fce6731eeb 100644 --- a/src/routes/console/project-[project]/messaging/wizard/step3.svelte +++ b/src/routes/console/project-[project]/messaging/wizard/step3.svelte @@ -54,8 +54,7 @@ Schedule Schedule the time you want your users to receive this message. Learn more in our - documentation. + >Schedule the time you want to deliver this message. Learn more in our documentation.
Date: Thu, 8 Feb 2024 10:19:23 +0100 Subject: [PATCH 14/15] fix: link type for smtp provider store --- .../organization-[organization]/createProjectCloud.svelte | 2 +- .../console/project-[project]/messaging/providers/store.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/routes/console/organization-[organization]/createProjectCloud.svelte b/src/routes/console/organization-[organization]/createProjectCloud.svelte index 4c228c28e2..1989adc557 100644 --- a/src/routes/console/organization-[organization]/createProjectCloud.svelte +++ b/src/routes/console/organization-[organization]/createProjectCloud.svelte @@ -10,7 +10,7 @@ import { Dependencies } from '$lib/constants'; import { page } from '$app/stores'; import { Submit, trackEvent, trackError } from '$lib/actions/analytics'; - import { ID } from '@appwrite.io/console'; + import { ID, Region } from '@appwrite.io/console'; import { createProject } from './wizard/store'; import { wizard } from '$lib/stores/wizard'; diff --git a/src/routes/console/project-[project]/messaging/providers/store.ts b/src/routes/console/project-[project]/messaging/providers/store.ts index fe59d03fc1..dc39148491 100644 --- a/src/routes/console/project-[project]/messaging/providers/store.ts +++ b/src/routes/console/project-[project]/messaging/providers/store.ts @@ -259,6 +259,7 @@ export const providers: ProvidersMap = { [Providers.SMTP]: { classIcon: 'mail', title: 'SMTP', + link: '', description: '', configure: [ { @@ -451,7 +452,7 @@ export const providers: ProvidersMap = { }, [Providers.Textmagic]: { imageIcon: 'textmagic', - title: 'TextMagic', + title: 'TextMagic', link: 'https://app.textmagic.com/login', description: '', configure: [ From d2ca2c3b62dc49879416e194b21d31749f28711e Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 8 Feb 2024 10:21:19 +0100 Subject: [PATCH 15/15] fix: remove unused import --- .../organization-[organization]/createProjectCloud.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/console/organization-[organization]/createProjectCloud.svelte b/src/routes/console/organization-[organization]/createProjectCloud.svelte index 1989adc557..4c228c28e2 100644 --- a/src/routes/console/organization-[organization]/createProjectCloud.svelte +++ b/src/routes/console/organization-[organization]/createProjectCloud.svelte @@ -10,7 +10,7 @@ import { Dependencies } from '$lib/constants'; import { page } from '$app/stores'; import { Submit, trackEvent, trackError } from '$lib/actions/analytics'; - import { ID, Region } from '@appwrite.io/console'; + import { ID } from '@appwrite.io/console'; import { createProject } from './wizard/store'; import { wizard } from '$lib/stores/wizard';