diff --git a/bun.lock b/bun.lock index c85d19e7c4..df55a454ec 100644 --- a/bun.lock +++ b/bun.lock @@ -6,7 +6,7 @@ "name": "@appwrite/console", "dependencies": { "@ai-sdk/svelte": "^1.1.24", - "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@7789ae4", + "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@0387505", "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@bfe7ce3", "@appwrite.io/pink-legacy": "^1.0.3", @@ -125,7 +125,7 @@ "@analytics/type-utils": ["@analytics/type-utils@0.6.4", "", {}, "sha512-Ou1gQxFakOWLcPnbFVsrPb8g1wLLUZYYJXDPjHkG07+5mustGs5yqACx42UAu4A6NszNN6Z5gGxhyH45zPWRxw=="], - "@appwrite.io/console": ["@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@7789ae4", { "dependencies": { "json-bigint": "1.0.0" } }], + "@appwrite.io/console": ["@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@0387505", { "dependencies": { "json-bigint": "1.0.0" } }], "@appwrite.io/pink-icons": ["@appwrite.io/pink-icons@0.25.0", "", {}, "sha512-0O3i2oEuh5mWvjO80i+X6rbzrWLJ1m5wmv2/M3a1p2PyBJsFxN8xQMTEmTn3Wl/D26SsM7SpzbdW6gmfgoVU9Q=="], diff --git a/package.json b/package.json index c1b9df8208..a0eea62b71 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ }, "dependencies": { "@ai-sdk/svelte": "^1.1.24", - "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@7789ae4", + "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@0387505", "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@bfe7ce3", "@appwrite.io/pink-legacy": "^1.0.3", diff --git a/src/routes/(console)/project-[region]-[project]/auth/templates/emailTemplate.svelte b/src/routes/(console)/project-[region]-[project]/auth/templates/emailTemplate.svelte index 68e30d8b2e..70aea6ca91 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/templates/emailTemplate.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/templates/emailTemplate.svelte @@ -28,6 +28,7 @@ } = $props(); let eventType = $state(Submit.EmailUpdateInviteTemplate); + let isResetting = $state(false); const isSmtpEnabled = $derived(project?.smtpEnabled); const isButtonDisabled = $derived(deepEqual($emailTemplate, $baseEmailTemplate)); @@ -61,12 +62,12 @@ await sdk.forProject(project.region, project.$id).project.updateEmailTemplate({ templateId: $emailTemplate.type as ProjectEmailTemplateId, locale, - subject: $emailTemplate.subject || undefined, - message: $emailTemplate.message || undefined, - senderName: $emailTemplate.senderName || undefined, - senderEmail: $emailTemplate.senderEmail || undefined, - replyToEmail: $emailTemplate.replyToEmail || undefined, - replyToName: $emailTemplate.replyToName || undefined + subject: $emailTemplate.subject ?? undefined, + message: $emailTemplate.message ?? undefined, + senderName: $emailTemplate.senderName ?? undefined, + senderEmail: $emailTemplate.senderEmail ?? undefined, + replyToEmail: $emailTemplate.replyToEmail ?? undefined, + replyToName: $emailTemplate.replyToName ?? undefined }); $baseEmailTemplate = { @@ -88,6 +89,32 @@ }); } } + + async function resetToDefault() { + const locale = ($emailTemplate.locale || + ProjectEmailTemplateLocale.En) as ProjectEmailTemplateLocale; + isResetting = true; + try { + const defaults = await sdk.forConsole.console.getEmailTemplate({ + templateId: $emailTemplate.type as ProjectEmailTemplateId, + locale + }); + $emailTemplate = { + ...$emailTemplate, + subject: defaults.subject, + message: defaults.message, + senderName: defaults.senderName, + senderEmail: defaults.senderEmail, + replyToEmail: defaults.replyToEmail, + replyToName: defaults.replyToName + }; + await saveEmailTemplate(); + } catch (e) { + addNotification({ type: 'error', message: e.message }); + } finally { + isResetting = false; + } + }
@@ -114,13 +141,15 @@ bind:value={$emailTemplate.replyToEmail} id="replyToEmail" label="Reply to email" - placeholder="noreply@appwrite.io" /> + placeholder="noreply@appwrite.io" + disabled={!isSmtpEnabled} /> + placeholder="Enter reply to name" + disabled={!isSmtpEnabled} /> {#if children}

@@ -160,6 +189,9 @@

+
diff --git a/src/routes/(console)/project-[region]-[project]/settings/smtp/+page.svelte b/src/routes/(console)/project-[region]-[project]/settings/smtp/+page.svelte index 68bb18c00d..6c48a2ce7c 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/smtp/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/smtp/+page.svelte @@ -21,7 +21,7 @@ const { data }: PageProps = $props(); - const { project } = data; + const project = $derived(data.project); let enabled: boolean = $state(false); @@ -44,31 +44,35 @@ { value: '', label: 'None' } ]; + function normalizeSecure(v: string): string { + return v === 'tls' || v === 'ssl' ? v : ''; + } + const isButtonDisabled = $derived.by(() => { return deepEqual( { enabled, - senderName, - senderEmail, - replyToEmail, - replyToName, - host, - port: port ?? '', - username, - password, + senderName: senderName ?? '', + senderEmail: senderEmail ?? '', + replyToEmail: replyToEmail ?? '', + replyToName: replyToName ?? '', + host: host ?? '', + port: port ?? null, + username: username ?? '', + password: password ?? '', secure }, { - enabled: project.smtpEnabled, - senderName: project.smtpSenderName, - senderEmail: project.smtpSenderEmail, - replyToEmail: project.smtpReplyToEmail, - replyToName: project.smtpReplyToName, - host: project.smtpHost, - port: project.smtpPort, - username: project.smtpUsername, - password: project.smtpPassword, - secure: project.smtpSecure + enabled: project.smtpEnabled ?? false, + senderName: project.smtpSenderName ?? '', + senderEmail: project.smtpSenderEmail ?? '', + replyToEmail: project.smtpReplyToEmail ?? '', + replyToName: project.smtpReplyToName ?? '', + host: project.smtpHost ?? '', + port: project.smtpPort ?? null, + username: project.smtpUsername ?? '', + password: project.smtpPassword ?? '', + secure: normalizeSecure(project.smtpSecure ?? '') } ); }); @@ -77,14 +81,14 @@ try { await sdk.forProject(project.region, project.$id).project.updateSMTP({ enabled, - senderName: senderName || undefined, - senderEmail: senderEmail || undefined, - replyToEmail: replyToEmail || undefined, - replyToName: replyToName || undefined, - host: host || undefined, - port: port || undefined, - username: username || undefined, - password: password || undefined, + senderName: senderName ?? undefined, + senderEmail: senderEmail ?? undefined, + replyToEmail: replyToEmail ?? undefined, + replyToName: replyToName ?? undefined, + host: host ?? undefined, + port: port ?? undefined, + username: username ?? undefined, + password: password ?? undefined, secure: secure ? (secure as ProjectSMTPSecure) : undefined }); @@ -105,29 +109,15 @@ $effect(() => { enabled = project.smtpEnabled ?? false; - senderName = project.smtpSenderName; - senderEmail = project.smtpSenderEmail; - replyToEmail = project.smtpReplyToEmail; - replyToName = project.smtpReplyToName; - host = project.smtpHost; - port = project.smtpPort; - username = project.smtpUsername; - password = project.smtpPassword; - secure = project.smtpSecure === 'tls' ? 'tls' : project.smtpSecure === 'ssl' ? 'ssl' : ''; - }); - - $effect(() => { - if (!enabled) { - senderName = ''; - senderEmail = ''; - replyToEmail = ''; - replyToName = ''; - host = ''; - port = null; - username = ''; - password = ''; - secure = ''; - } + senderName = project.smtpSenderName ?? ''; + senderEmail = project.smtpSenderEmail ?? ''; + replyToEmail = project.smtpReplyToEmail ?? ''; + replyToName = project.smtpReplyToName ?? ''; + host = project.smtpHost ?? ''; + port = project.smtpPort ?? null; + username = project.smtpUsername ?? ''; + password = project.smtpPassword ?? ''; + secure = normalizeSecure(project.smtpSecure ?? ''); });