From 80bfe3ff3c7188b7cba5858d83c24385aa8fcc8e Mon Sep 17 00:00:00 2001 From: Darshan Date: Wed, 28 Jan 2026 12:26:19 +0530 Subject: [PATCH 1/8] fix: webhook limit on UI not shown. --- .../settings/webhooks/+page.svelte | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/settings/webhooks/+page.svelte b/src/routes/(console)/project-[region]-[project]/settings/webhooks/+page.svelte index e7ec5e8d12..da34dceffc 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/webhooks/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/webhooks/+page.svelte @@ -1,5 +1,5 @@ {#if $canWriteWebhooks} - + +
+ +
+ + You have reached the maximum number of webhooks for your plan. + +
{/if}
From d6a5e73b6d3e986ce28f713aeb663d3ecc32f30d Mon Sep 17 00:00:00 2001 From: Darshan Date: Wed, 28 Jan 2026 13:28:01 +0530 Subject: [PATCH 2/8] fix: bad bug with stores. --- .../settings/smtp/+page.svelte | 127 +++++++++--------- 1 file changed, 65 insertions(+), 62 deletions(-) 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 dbcf482070..dac4c8244a 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/smtp/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/smtp/+page.svelte @@ -2,7 +2,6 @@ import { CardGrid } from '$lib/components'; import { Button, Form, InputText, InputEmail } from '$lib/elements/forms'; import { Container } from '$lib/layout'; - import { project } from '../../store'; import InputPassword from '$lib/elements/forms/inputPassword.svelte'; import { sdk } from '$lib/stores/sdk'; import { invalidate } from '$app/navigation'; @@ -10,24 +9,32 @@ import { addNotification } from '$lib/stores/notifications'; import { Click, Submit, trackError, trackEvent } from '$lib/actions/analytics'; import InputNumber from '$lib/elements/forms/inputNumber.svelte'; - import { base } from '$app/paths'; + import { resolve } from '$app/paths'; import deepEqual from 'deep-equal'; - import { onMount } from 'svelte'; import { currentPlan } from '$lib/stores/organization'; import { type SMTPSecure } from '@appwrite.io/console'; import InputSelect from '$lib/elements/forms/inputSelect.svelte'; import { getChangePlanUrl } from '$lib/stores/billing'; import { Link, Selector, Alert } from '@appwrite.io/pink-svelte'; + import type { PageProps } from './$types'; - let enabled = false; - let senderName: string; - let senderEmail: string; - let replyTo: string; - let host: string; - let port: number; - let username: string; - let password: string; - let secure: string; + const { data }: PageProps = $props(); + + const { project } = data; + + let enabled: boolean = $state(false); + + let replyTo: string = $state(null); + let senderName: string = $state(null); + let senderEmail: string = $state(null); + + let host: string = $state(null); + let port: number = $state(null); + + let username: string = $state(null); + let password: string = $state(null); + + let secure: string = $state(null); const options = [ { value: 'tls', label: 'TLS' }, @@ -35,33 +42,27 @@ { value: '', label: 'None' } ]; - onMount(() => { - enabled = $project.smtpEnabled ?? false; - senderName = $project.smtpSenderName; - senderEmail = $project.smtpSenderEmail; - replyTo = $project.smtpReplyTo; - host = $project.smtpHost; - port = $project.smtpPort; - username = $project.smtpUsername; - password = $project.smtpPassword; - secure = $project.smtpSecure === 'tls' ? 'tls' : $project.smtpSecure === 'ssl' ? 'ssl' : ''; + const isButtonDisabled = $derived.by(() => { + return deepEqual( + { enabled, senderName, senderEmail, replyTo, host, port, username, password, secure }, + { + enabled: project.smtpEnabled, + senderName: project.smtpSenderName, + senderEmail: project.smtpSenderEmail, + replyTo: project.smtpReplyTo, + host: project.smtpHost, + port: project.smtpPort, + username: project.smtpUsername, + password: project.smtpPassword, + secure: project.smtpSecure + } + ) }); async function updateSmtp() { try { - if (!enabled) { - enabled = false; - senderName = undefined; - senderEmail = undefined; - replyTo = undefined; - host = undefined; - port = undefined; - username = undefined; - password = undefined; - } - await sdk.forConsole.projects.updateSMTP({ - projectId: $project.$id, + projectId: project.$id, enabled, senderName: senderName || undefined, senderEmail: senderEmail || undefined, @@ -76,7 +77,7 @@ invalidate(Dependencies.PROJECT); addNotification({ type: 'success', - message: 'SMTP server has been ' + (enabled ? 'enabled.' : 'disabled.') + message: `SMTP server has been ${enabled ? 'enabled.' : 'disabled.'}` }); trackEvent(Submit.ProjectUpdateSMTP); } catch (error) { @@ -88,31 +89,30 @@ } } - $: isButtonDisabled = deepEqual( - { enabled, senderName, senderEmail, replyTo, host, port, username, password, secure }, - { - enabled: $project.smtpEnabled, - senderName: $project.smtpSenderName, - senderEmail: $project.smtpSenderEmail, - replyTo: $project.smtpReplyTo, - host: $project.smtpHost, - port: $project.smtpPort, - username: $project.smtpUsername, - password: $project.smtpPassword, - secure: $project.smtpSecure - } - ); + $effect(() => { + enabled = project.smtpEnabled ?? false; + senderName = project.smtpSenderName; + senderEmail = project.smtpSenderEmail; + replyTo = project.smtpReplyTo; + host = project.smtpHost; + port = project.smtpPort; + username = project.smtpUsername; + password = project.smtpPassword; + secure = project.smtpSecure === 'tls' ? 'tls' : project.smtpSecure === 'ssl' ? 'ssl' : ''; + }); - $: if (!enabled) { - senderName = undefined; - senderEmail = undefined; - replyTo = undefined; - host = undefined; - port = undefined; - username = undefined; - password = undefined; - secure = undefined; - } + $effect(() => { + if (!enabled) { + senderName = undefined; + senderEmail = undefined; + replyTo = undefined; + host = undefined; + port = undefined; + username = undefined; + password = undefined; + secure = undefined; + } + }); @@ -120,8 +120,11 @@ SMTP server You can customize the email service by providing your own SMTP server. View your email templates - here + here {#if !$currentPlan.customSmtp} diff --git a/src/routes/(console)/project-[region]-[project]/auth/security/updateMockNumbers.svelte b/src/routes/(console)/project-[region]-[project]/auth/security/updateMockNumbers.svelte index 8ec2d2e6d7..88c2e91fdf 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/security/updateMockNumbers.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/security/updateMockNumbers.svelte @@ -1,10 +1,8 @@ @@ -138,7 +148,7 @@ fullWidth external={isSelfHosted} href={isCloud - ? getChangePlanUrl($project.teamId) + ? getChangePlanUrl(project.teamId) : 'https://cloud.appwrite.io/register'} on:click={() => { trackEvent(Click.CloudSignupClick, { diff --git a/src/routes/(console)/project-[region]-[project]/auth/security/updateSessionLength.svelte b/src/routes/(console)/project-[region]-[project]/auth/security/updateSessionLength.svelte index 807adba3fe..de62ad3845 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/security/updateSessionLength.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/security/updateSessionLength.svelte @@ -7,11 +7,15 @@ import { createTimeUnitPair } from '$lib/helpers/unit'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import { project as projectStore } from '../../store'; import { Layout } from '@appwrite.io/pink-svelte'; - import { page } from '$app/state'; + import type { Models } from '@appwrite.io/console'; + + let { + project + }: { + project: Models.Project; + } = $props(); - const project = $derived($projectStore ?? page.data?.project); const { value, unit, baseValue, units } = $derived(createTimeUnitPair(project?.authDuration)); const options = $derived(units.map((v) => ({ label: v.name, value: v.name }))); diff --git a/src/routes/(console)/project-[region]-[project]/auth/security/updateSessionsLimit.svelte b/src/routes/(console)/project-[region]-[project]/auth/security/updateSessionsLimit.svelte index eb0bb97c89..1c6f0bb904 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/security/updateSessionsLimit.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/security/updateSessionsLimit.svelte @@ -7,14 +7,20 @@ import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; import { Typography } from '@appwrite.io/pink-svelte'; - import { project } from '../../store'; + import type { Models } from '@appwrite.io/console'; - let maxSessions = $project?.authSessionsLimit; + let { + project + }: { + project: Models.Project; + } = $props(); + + let maxSessions = $state(project?.authSessionsLimit); async function updateSessionsLimit() { try { await sdk.forConsole.projects.updateAuthSessionsLimit({ - projectId: $project.$id, + projectId: project.$id, limit: maxSessions }); await invalidate(Dependencies.PROJECT); @@ -49,7 +55,7 @@ bind:value={maxSessions} /> - + diff --git a/src/routes/(console)/project-[region]-[project]/auth/security/updateUsersLimit.svelte b/src/routes/(console)/project-[region]-[project]/auth/security/updateUsersLimit.svelte index a319a1a08d..5296362cb2 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/security/updateUsersLimit.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/security/updateUsersLimit.svelte @@ -7,29 +7,32 @@ import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; import { Layout, Selector, Input, Badge } from '@appwrite.io/pink-svelte'; - import { project } from '../../store'; import { tick } from 'svelte'; + import type { Models } from '@appwrite.io/console'; - let value = $project?.authLimit !== 0 ? 'limited' : 'unlimited'; + let { + project + }: { + project: Models.Project; + } = $props(); - $: isLimited = value === 'limited'; - let newLimit = isLimited ? $project?.authLimit : 100; + let maxUsersInputField: HTMLInputElement | null = $state(null); - $: btnDisabled = (function isBtnDisabled() { - if ( - (!isLimited && $project?.authLimit === 0) || - (isLimited && $project?.authLimit === newLimit) - ) { - return true; - } + let value = $state(project?.authLimit !== 0 ? 'limited' : 'unlimited'); + let newLimit = $state(project?.authLimit !== 0 ? project?.authLimit : 100); - return false; - })(); + const isLimited = $derived(value === 'limited'); + const btnDisabled = $derived.by(() => { + return ( + (!isLimited && project?.authLimit === 0) || + (isLimited && project?.authLimit === newLimit) + ); + }); async function updateLimit() { try { await sdk.forConsole.projects.updateAuthLimit({ - projectId: $project?.$id, + projectId: project?.$id, limit: isLimited ? newLimit : 0 }); await invalidate(Dependencies.PROJECT); @@ -47,13 +50,13 @@ } } - let maxUsersInputField: HTMLInputElement | null = null; - - $: if (isLimited && maxUsersInputField) { - tick().then(() => { - maxUsersInputField.focus(); - }); - } + $effect(() => { + if (isLimited && maxUsersInputField) { + tick().then(() => { + maxUsersInputField.focus(); + }); + } + }); diff --git a/src/routes/(console)/project-[region]-[project]/auth/settings/+page.svelte b/src/routes/(console)/project-[region]-[project]/auth/settings/+page.svelte index 28a3896a12..5850c6ce73 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/settings/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/settings/+page.svelte @@ -1,5 +1,4 @@ -{#if $authMethods && $project} +{#if $authMethods && project} @@ -73,7 +75,7 @@ OAuth2 Providers
    - {#each $project.oAuthProviders + {#each project.oAuthProviders .filter((p) => p.name !== 'Mock') .sort( (a, b) => (a.enabled === b.enabled ? 0 : a.enabled ? -1 : 1) ) as provider} {@const oAuthProvider = oAuthProviders[provider.key]} @@ -116,9 +118,9 @@ {/if} {#if selectedProvider && showProvider} - {@const oAuthProvider = oAuthProviders[selectedProvider.key]} - { diff --git a/src/routes/(console)/project-[region]-[project]/auth/templates/+page.svelte b/src/routes/(console)/project-[region]-[project]/auth/templates/+page.svelte index da7178906c..446975e3e9 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/templates/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/templates/+page.svelte @@ -58,11 +58,12 @@ import { isCloud } from '$lib/system'; import { Accordion, Alert, Badge, Layout, Link, Typography } from '@appwrite.io/pink-svelte'; import { page } from '$app/state'; + import type { PageProps } from './$types'; - export let data; + let { data }: PageProps = $props(); - let templateType = null; - let isTemplateLoading = false; + let templateType = $state(null); + let isTemplateLoading = $state(false); let openStates = Object.fromEntries(templates.map(({ key }) => [key, false])); loadTemplateFor(EmailTemplateType.Verification); @@ -128,9 +129,11 @@ on:toggle={(event) => event.detail && toggleAccordion(section.key)}> {section.description} - + {@const SectionComponent = section.component} + {/each} @@ -144,7 +147,8 @@ + {#if isCloud && $currentPlan.emailBranding} - + {/if} diff --git a/src/routes/(console)/project-[region]-[project]/auth/templates/email2FATemplate.svelte b/src/routes/(console)/project-[region]-[project]/auth/templates/email2FATemplate.svelte index 536a1aa282..932bd7e2c2 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/templates/email2FATemplate.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/templates/email2FATemplate.svelte @@ -2,19 +2,19 @@ import EmailTemplate from './emailTemplate.svelte'; import LocaleOptions from './localeOptions.svelte'; import { loadEmailTemplate } from './+page.svelte'; - import { page } from '$app/state'; import { baseEmailTemplate, emailTemplate } from './store'; import { addNotification } from '$lib/stores/notifications'; import { Id } from '$lib/components'; import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; import { Layout, Card } from '@appwrite.io/pink-svelte'; - import { EmailTemplateLocale, EmailTemplateType } from '@appwrite.io/console'; + import { EmailTemplateLocale, EmailTemplateType, type Models } from '@appwrite.io/console'; export let loading = false; + export let project: Models.Project; + export let localeCodes: Models.LocaleCode[]; let isUpdating = false; let locale = EmailTemplateLocale.En; - const projectId = page.params.project; async function onLocaleChange() { const timeout = setTimeout(() => { @@ -22,7 +22,7 @@ }, 1000); try { const template = await loadEmailTemplate( - projectId, + project.$id, EmailTemplateType.Mfachallenge, locale ); @@ -44,8 +44,8 @@ - - + + {'{{user}}'} {'{{project}}'} {'{{otp}}'} diff --git a/src/routes/(console)/project-[region]-[project]/auth/templates/emailInviteTemplate.svelte b/src/routes/(console)/project-[region]-[project]/auth/templates/emailInviteTemplate.svelte index f723da9cd1..38ec9c54cd 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/templates/emailInviteTemplate.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/templates/emailInviteTemplate.svelte @@ -2,19 +2,19 @@ import EmailTemplate from './emailTemplate.svelte'; import LocaleOptions from './localeOptions.svelte'; import { loadEmailTemplate } from './+page.svelte'; - import { page } from '$app/state'; import { baseEmailTemplate, emailTemplate } from './store'; import { addNotification } from '$lib/stores/notifications'; import { Id } from '$lib/components'; import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; import { Layout, Card } from '@appwrite.io/pink-svelte'; - import { EmailTemplateLocale, EmailTemplateType } from '@appwrite.io/console'; + import { EmailTemplateLocale, EmailTemplateType, type Models } from '@appwrite.io/console'; export let loading = false; + export let project: Models.Project; + export let localeCodes: Models.LocaleCode[]; let isUpdating = false; let locale = EmailTemplateLocale.En; - const projectId = page.params.project; async function onLocaleChange() { const timeout = setTimeout(() => { @@ -22,7 +22,7 @@ }, 1000); try { const template = await loadEmailTemplate( - projectId, + project.$id, EmailTemplateType.Invitation, locale ); @@ -44,8 +44,9 @@ - - + + + {'{{team}}'} {'{{user}}'} {'{{project}}'} diff --git a/src/routes/(console)/project-[region]-[project]/auth/templates/emailMagicUrlTemplate.svelte b/src/routes/(console)/project-[region]-[project]/auth/templates/emailMagicUrlTemplate.svelte index 1e98218db0..ac962841ce 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/templates/emailMagicUrlTemplate.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/templates/emailMagicUrlTemplate.svelte @@ -3,18 +3,18 @@ import EmailTemplate from './emailTemplate.svelte'; import LocaleOptions from './localeOptions.svelte'; import { baseEmailTemplate, emailTemplate } from './store'; - import { page } from '$app/state'; import { addNotification } from '$lib/stores/notifications'; import { Id } from '$lib/components'; import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; import { Layout, Card } from '@appwrite.io/pink-svelte'; - import { EmailTemplateLocale, EmailTemplateType } from '@appwrite.io/console'; + import { EmailTemplateLocale, EmailTemplateType, type Models } from '@appwrite.io/console'; export let loading = false; + export let project: Models.Project; + export let localeCodes: Models.LocaleCode[]; let isUpdating = false; let locale = EmailTemplateLocale.En; - const projectId = page.params.project; async function onLocaleChange() { const timeout = setTimeout(() => { @@ -22,7 +22,7 @@ }, 1000); try { const template = await loadEmailTemplate( - projectId, + project.$id, EmailTemplateType.Magicsession, locale ); @@ -45,8 +45,8 @@ - - + + {'{{user}}'} {'{{project}}'} {'{{redirect}}'} diff --git a/src/routes/(console)/project-[region]-[project]/auth/templates/emailOtpSessionTemplate.svelte b/src/routes/(console)/project-[region]-[project]/auth/templates/emailOtpSessionTemplate.svelte index 07e6b1bc63..1ec2f24bd2 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/templates/emailOtpSessionTemplate.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/templates/emailOtpSessionTemplate.svelte @@ -3,18 +3,18 @@ import EmailTemplate from './emailTemplate.svelte'; import LocaleOptions from './localeOptions.svelte'; import { baseEmailTemplate, emailTemplate } from './store'; - import { page } from '$app/state'; import { addNotification } from '$lib/stores/notifications'; import { Id } from '$lib/components'; import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; import { Layout, Card } from '@appwrite.io/pink-svelte'; - import { EmailTemplateLocale, EmailTemplateType } from '@appwrite.io/console'; + import { EmailTemplateLocale, EmailTemplateType, type Models } from '@appwrite.io/console'; export let loading = false; + export let project: Models.Project; + export let localeCodes: Models.LocaleCode[]; let isUpdating = false; let locale = EmailTemplateLocale.En; - const projectId = page.params.project; async function onLocaleChange() { const timeout = setTimeout(() => { @@ -22,7 +22,7 @@ }, 1000); try { const template = await loadEmailTemplate( - projectId, + project.$id, EmailTemplateType.Otpsession, locale ); @@ -45,8 +45,8 @@ - - + + {'{{user}}'} {'{{project}}'} {'{{otp}}'} diff --git a/src/routes/(console)/project-[region]-[project]/auth/templates/emailRecoveryTemplate.svelte b/src/routes/(console)/project-[region]-[project]/auth/templates/emailRecoveryTemplate.svelte index 23597970ff..b49a333e17 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/templates/emailRecoveryTemplate.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/templates/emailRecoveryTemplate.svelte @@ -3,25 +3,29 @@ import LocaleOptions from './localeOptions.svelte'; import { baseEmailTemplate, emailTemplate } from './store'; import { loadEmailTemplate } from './+page.svelte'; - import { page } from '$app/state'; import { addNotification } from '$lib/stores/notifications'; import { Id } from '$lib/components'; import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; import { Layout, Card } from '@appwrite.io/pink-svelte'; - import { EmailTemplateLocale, EmailTemplateType } from '@appwrite.io/console'; + import { EmailTemplateLocale, EmailTemplateType, type Models } from '@appwrite.io/console'; export let loading = false; + export let project: Models.Project; + export let localeCodes: Models.LocaleCode[]; let isUpdating = false; let locale = EmailTemplateLocale.En; - const projectId = page.params.project; async function onLocaleChange() { const timeout = setTimeout(() => { isUpdating = true; }, 1000); try { - const template = await loadEmailTemplate(projectId, EmailTemplateType.Recovery, locale); + const template = await loadEmailTemplate( + project.$id, + EmailTemplateType.Recovery, + locale + ); emailTemplate.set(template); $baseEmailTemplate = { ...$emailTemplate }; trackEvent(Submit.EmailChangeLocale, { locale, type: EmailTemplateType.Recovery }); @@ -40,8 +44,8 @@ - - + + {'{{user}}'} {'{{project}}'} {'{{redirect}}'} diff --git a/src/routes/(console)/project-[region]-[project]/auth/templates/emailSessionAlertTemplate.svelte b/src/routes/(console)/project-[region]-[project]/auth/templates/emailSessionAlertTemplate.svelte index ebe9075501..ecd1cbb282 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/templates/emailSessionAlertTemplate.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/templates/emailSessionAlertTemplate.svelte @@ -2,19 +2,19 @@ import EmailTemplate from './emailTemplate.svelte'; import LocaleOptions from './localeOptions.svelte'; import { loadEmailTemplate } from './+page.svelte'; - import { page } from '$app/state'; import { baseEmailTemplate, emailTemplate } from './store'; import { addNotification } from '$lib/stores/notifications'; import { Id } from '$lib/components'; import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; import { Layout, Card } from '@appwrite.io/pink-svelte'; - import { EmailTemplateLocale, EmailTemplateType } from '@appwrite.io/console'; + import { EmailTemplateLocale, EmailTemplateType, type Models } from '@appwrite.io/console'; export let loading = false; + export let project: Models.Project; + export let localeCodes: Models.LocaleCode[]; let isUpdating = false; let locale = EmailTemplateLocale.En; - const projectId = page.params.project; async function onLocaleChange() { const timeout = setTimeout(() => { @@ -22,7 +22,7 @@ }, 1000); try { const template = await loadEmailTemplate( - projectId, + project.$id, EmailTemplateType.Sessionalert, locale ); @@ -44,8 +44,8 @@ - - + + {'{{user}}'} {'{{project}}'} {'{{device}}'} diff --git a/src/routes/(console)/project-[region]-[project]/auth/templates/emailSignature.svelte b/src/routes/(console)/project-[region]-[project]/auth/templates/emailSignature.svelte index 59030bb715..2afc6261a3 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/templates/emailSignature.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/templates/emailSignature.svelte @@ -8,7 +8,13 @@ import EmailLight from './email-footer-light.png'; import EmailMobileDark from './email-footer-mobile-dark.png'; import EmailMobileLight from './email-footer-mobile-light.png'; - import { project } from '$routes/(console)/project-[region]-[project]/store'; + import type { Models } from '@appwrite.io/console'; + + const { + project + }: { + project: Models.Project; + } = $props(); @@ -55,7 +61,7 @@ class="u-margin-block-start-32" secondary fullWidth - href={getChangePlanUrl($project.teamId)} + href={getChangePlanUrl(project.teamId)} on:click={() => { trackEvent(Click.OrganizationClickUpgrade, { from: 'button', 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 0e5757047e..cd5bb6958e 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/templates/emailTemplate.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/templates/emailTemplate.svelte @@ -2,21 +2,37 @@ import { Button, Form, InputEmail, InputText, InputTextarea } from '$lib/elements/forms'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import { project } from '../../store'; import ResetEmail from './resetEmail.svelte'; import { baseEmailTemplate, emailTemplate } from './store'; import deepEqual from 'deep-equal'; import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; - import type { EmailTemplateLocale, EmailTemplateType } from '@appwrite.io/console'; + import { + type EmailTemplateLocale, + type EmailTemplateType, + type Models + } from '@appwrite.io/console'; import { Icon, Layout, Tooltip, Typography } from '@appwrite.io/pink-svelte'; import { IconInfo } from '@appwrite.io/pink-icons-svelte'; import TemplateSkeleton from './templateSkeleton.svelte'; + import type { Snippet } from 'svelte'; - export let loading = false; - export let isUpdating = false; + let { + loading = false, + isUpdating = false, + project, + children = null + }: { + loading: boolean; + isUpdating: boolean; + project: Models.Project; + children: Snippet; + } = $props(); - let openResetModal = false; - let eventType = Submit.EmailUpdateInviteTemplate; + let openResetModal = $state(false); + let eventType = $state(Submit.EmailUpdateInviteTemplate); + + const isSmtpEnabled = $derived(project?.smtpEnabled); + const isButtonDisabled = $derived(deepEqual($emailTemplate, $baseEmailTemplate)); async function saveEmailTemplate() { if (!$emailTemplate.locale) { @@ -51,7 +67,7 @@ } // TODO: fix TemplateType and TemplateLocale typing once SDK is updated await sdk.forConsole.projects.updateEmailTemplate({ - projectId: $project.$id, + projectId: project.$id, type: $emailTemplate.type as EmailTemplateType, locale: $emailTemplate.locale as EmailTemplateLocale, subject: $emailTemplate.subject || undefined, @@ -80,9 +96,6 @@ }); } } - - $: isSmtpEnabled = $project?.smtpEnabled; - $: isButtonDisabled = deepEqual($emailTemplate, $baseEmailTemplate);
    @@ -111,7 +124,7 @@ label="Reply to" placeholder="noreply@appwrite.io" /> - {#if $$slots.default} + {#if children}

    Click to copy variables for the fields below. Learn more here.

    + - + {@render children()} {/if} @@ -154,4 +168,4 @@
    - + diff --git a/src/routes/(console)/project-[region]-[project]/auth/templates/emailVerificationTemplate.svelte b/src/routes/(console)/project-[region]-[project]/auth/templates/emailVerificationTemplate.svelte index 54f257fe4d..4f5f9d9532 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/templates/emailVerificationTemplate.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/templates/emailVerificationTemplate.svelte @@ -3,18 +3,18 @@ import LocaleOptions from './localeOptions.svelte'; import { loadEmailTemplate } from './+page.svelte'; import { baseEmailTemplate, emailTemplate } from './store'; - import { page } from '$app/state'; import { Id } from '$lib/components'; import { addNotification } from '$lib/stores/notifications'; import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; import { Layout, Card } from '@appwrite.io/pink-svelte'; - import { EmailTemplateLocale, EmailTemplateType } from '@appwrite.io/console'; + import { EmailTemplateLocale, EmailTemplateType, type Models } from '@appwrite.io/console'; export let loading = false; + export let project: Models.Project; + export let localeCodes: Models.LocaleCode[]; let isUpdating = false; let locale = EmailTemplateLocale.En; - const projectId = page.params.project; async function onLocaleChange() { const timeout = setTimeout(() => { @@ -22,7 +22,7 @@ }, 1000); try { const template = await loadEmailTemplate( - projectId, + project.$id, EmailTemplateType.Verification, locale ); @@ -44,8 +44,8 @@ - - + + {'{{user}}'} {'{{project}}'} {'{{redirect}}'} diff --git a/src/routes/(console)/project-[region]-[project]/auth/templates/localeOptions.svelte b/src/routes/(console)/project-[region]-[project]/auth/templates/localeOptions.svelte index 4c4c334caf..08613e1591 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/templates/localeOptions.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/templates/localeOptions.svelte @@ -1,10 +1,11 @@ @@ -20,5 +23,5 @@ - + diff --git a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/dangerZone.svelte b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/dangerZone.svelte index 30ecb4d7a5..8a92d9fe41 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/dangerZone.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/dangerZone.svelte @@ -1,24 +1,29 @@ @@ -52,7 +57,7 @@ ? [$user.email, $user.phone].join(',') : $user.email || $user.phone}

    -

    Last activity: {accessedAt ? toLocaleDate(accessedAt) : 'never'}

    +

    Last activity: {$user.accessedAt ? toLocaleDate($user.accessedAt) : 'never'}

    @@ -61,4 +66,4 @@
    - + diff --git a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/deleteUser.svelte b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/deleteUser.svelte index 043cd64ac5..8f9ef79b0e 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/deleteUser.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/deleteUser.svelte @@ -1,29 +1,34 @@ diff --git a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/dangerZone.svelte b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/dangerZone.svelte index 8a92d9fe41..1518c2e57b 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/dangerZone.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/dangerZone.svelte @@ -7,10 +7,12 @@ export const promptDeleteUser = (id: string) => { showDelete.set(true); - goto(resolveRoute('/(console)/project-[region]-[project]/auth/user-[user]', { - ...page.params, - user: id - })); + goto( + resolveRoute('/(console)/project-[region]-[project]/auth/user-[user]', { + ...page.params, + user: id + }) + ); }; diff --git a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/deleteUser.svelte b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/deleteUser.svelte index 8f9ef79b0e..ffd2d48547 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/deleteUser.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/deleteUser.svelte @@ -10,8 +10,8 @@ import { Submit, trackEvent, trackError } from '$lib/actions/analytics'; export let showDelete = false; - export let user: Models.User; export let project: Models.Project; + export let user: Models.User>; let error: string; const deleteUser = async () => { @@ -25,10 +25,11 @@ message: `${user.name ? user.name : 'User'} has been deleted` }); trackEvent(Submit.UserDelete); - await goto(resolveRoute('/(console)/project-[region]-[project]/auth', { - ...page.params - })); - + await goto( + resolveRoute('/(console)/project-[region]-[project]/auth', { + ...page.params + }) + ); } catch (e) { error = e.message; trackError(e, Submit.UserDelete); diff --git a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/updatePrefs.svelte b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/updatePrefs.svelte index 0e9940292e..4c0c0a5869 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/updatePrefs.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/updatePrefs.svelte @@ -97,9 +97,11 @@
    + {:else} { $showCreateBackup = true; @@ -227,7 +229,7 @@
    {:else}
    - +
    {/if} @@ -238,7 +240,11 @@ onSubmit={createPolicies} bind:show={$showCreatePolicy} bind:error={policyCreateError}> - + diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/backups/containerHeader.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/backups/containerHeader.svelte index 5e2cae01d6..11e2c3fa85 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/backups/containerHeader.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/backups/containerHeader.svelte @@ -4,11 +4,12 @@ import { Button } from '$lib/elements/forms'; import { getChangePlanUrl } from '$lib/stores/billing'; import { IconInfo, IconPlus } from '@appwrite.io/pink-icons-svelte'; - import { project } from '$routes/(console)/project-[region]-[project]/store'; import { Badge, Icon, Layout, Tag, Typography } from '@appwrite.io/pink-svelte'; + import type { Models } from '@appwrite.io/console'; export let isFlex = true; export let title: string; + export let project: Models.Project; export let buttonText: string = null; export let policiesCreated: number = 0; @@ -22,8 +23,8 @@
    { showDropdown = !showDropdown; - goto(getChangePlanUrl($project.teamId)); + goto(getChangePlanUrl(project.teamId)); }}>Upgrade your plan to add customized backup policies. diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/backups/createPolicy.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/backups/createPolicy.svelte index 8fe6baa085..b6950baf4a 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/backups/createPolicy.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/backups/createPolicy.svelte @@ -10,7 +10,7 @@ InputTime, Label } from '$lib/elements/forms'; - import { ID } from '@appwrite.io/console'; + import { ID, type Models } from '@appwrite.io/console'; import { capitalize } from '$lib/helpers/string'; import { backupRetainingOptions, customRetainingOptions } from '../store'; import { presetPolicies, showCreatePolicy } from './store'; @@ -26,12 +26,12 @@ import { isSmallViewport } from '$lib/stores/viewport'; import { goto } from '$app/navigation'; import { getChangePlanUrl } from '$lib/stores/billing'; - import { project } from '$routes/(console)/project-[region]-[project]/store'; export let isShowing: boolean; export let isFromBackupsTab: boolean = false; export let title: string | undefined = undefined; export let subtitle: string | undefined = undefined; + export let project: Models.Project; export let totalPolicies: UserBackupPolicy[] = []; @@ -214,7 +214,7 @@ on:click={() => { isShowing = false; $showCreatePolicy = false; - goto(getChangePlanUrl($project.teamId)); + goto(getChangePlanUrl(project.teamId)); }}>Upgrade your plan to add customized backup policies. @@ -230,7 +230,7 @@ { isShowing = false; - goto(getChangePlanUrl($project.teamId)); + goto(getChangePlanUrl(project.teamId)); }}>Upgrade your plan to add customized backup policies. diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/backups/locked.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/backups/locked.svelte index bf12af386c..c456184aac 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/backups/locked.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/backups/locked.svelte @@ -11,15 +11,23 @@ import LockedBackupsDarkTablet from '$lib/images/backups/empty/backups-tablet-dark.png'; import LockedBackupsLightTablet from '$lib/images/backups/empty/backups-tablet-light.png'; + import type { Models } from '@appwrite.io/console'; + + let { + project + }: { + project: Models.Project; + } = $props();
    - +
    +
    @@ -81,7 +81,7 @@ @@ -91,7 +91,7 @@ diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+layout.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+layout.svelte index e56f274dce..8bf9dee80a 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+layout.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+layout.svelte @@ -42,7 +42,6 @@ import CreateColumn from './createColumn.svelte'; import { CreateColumnPanel } from '$lib/commandCenter/panels'; import { showCreateEntity } from '../store'; - import { project } from '../../../store'; import { page } from '$app/state'; import { canWriteTables } from '$lib/stores/roles'; import { @@ -298,8 +297,13 @@ columnCreationHandler = handler; + const project = { + id: page.params.project, + region: page.params.region + }; + columns = await generateFields( - $project, + project, page.params.database, page.params.table, databaseType diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/string.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/string.svelte index c3b3ed8e7f..67ccf95f1d 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/string.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/string.svelte @@ -46,7 +46,6 @@ import { ActionMenu, Selector } from '@appwrite.io/pink-svelte'; import RequiredArrayCheckboxes from './requiredArrayCheckboxes.svelte'; import { InputNumber, InputText, InputTextarea } from '$lib/elements/forms'; - import { project } from '$routes/(console)/project-[region]-[project]/store'; import { Popover, Layout, Tag, Typography, Link } from '@appwrite.io/pink-svelte'; export let data: Partial = { @@ -60,6 +59,8 @@ export let disabled = false; export let autoIncreaseSize = false; + const organizationId = page.data?.organization?.$id ?? page.data?.project?.$id; + let savedDefault = data.default; function handleDefaultState(hideDefault: boolean) { @@ -161,7 +162,7 @@ - Available on Pro plan. Upgrade to enable encrypted columns. From 7a3af231169ae08b2c4d85a2b1e75a774833bc11 Mon Sep 17 00:00:00 2001 From: Darshan Date: Wed, 28 Jan 2026 14:59:13 +0530 Subject: [PATCH 6/8] fix: more fixes on functions. --- .../template-[template]/+page.svelte | 10 +++++++-- .../template-[template]/configuration.svelte | 6 +++--- .../function-[function]/+layout.svelte | 21 +++++++++---------- .../domains/add-domain/+page.svelte | 16 ++++++++------ .../executions/+page.svelte | 5 ++--- .../settings/executeFunction.svelte | 19 ++++++++++------- 6 files changed, 45 insertions(+), 32 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/functions/create-function/template-[template]/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/create-function/template-[template]/+page.svelte index 98c8bf7ea4..421a217d8f 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/create-function/template-[template]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/create-function/template-[template]/+page.svelte @@ -242,7 +242,10 @@ repositoryId={selectedRepository} /> {#if data.template.variables?.length} - + {/if} {:else} @@ -328,7 +331,10 @@ {/if} {:else if data.template.variables?.length} - + {/if} {/if} diff --git a/src/routes/(console)/project-[region]-[project]/functions/create-function/template-[template]/configuration.svelte b/src/routes/(console)/project-[region]-[project]/functions/create-function/template-[template]/configuration.svelte index cd21e5838d..94fdf57c8e 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/create-function/template-[template]/configuration.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/create-function/template-[template]/configuration.svelte @@ -21,8 +21,8 @@ import type { Component } from 'svelte'; import { getApiEndpoint } from '$lib/stores/sdk'; import { page } from '$app/state'; - import { project } from '$routes/(console)/project-[region]-[project]/store'; + export let project: Models.Project; export let variables: Partial[] = []; export let templateVariables: Models.TemplateVariable[] = []; @@ -47,8 +47,8 @@ variable.value = page.params.project; variable.placeholder = page.params.project; } else if (variable.value === '{projectName}') { - variable.value = $project.name; - variable.placeholder = $project.name; + variable.value = project.name; + variable.placeholder = project.name; } else return variable; }); variables = [...variables]; diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/+layout.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/+layout.svelte index aca7e790ee..24aadfb532 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/+layout.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/+layout.svelte @@ -6,7 +6,6 @@ import { invalidate, goto } from '$app/navigation'; import { registerCommands } from '$lib/commandCenter'; import { func, showCreateDeployment } from './store'; - import { project } from '../../store'; import type { Models } from '@appwrite.io/console'; import { base } from '$app/paths'; import { canWriteFunctions } from '$lib/stores/roles'; @@ -52,7 +51,7 @@ async callback() { if (!page.url.pathname.endsWith($func.$id)) { await goto( - `${base}/project-${$project.region}-${$project.$id}/functions/function-${$func.$id}` + `${base}/project-${page.params.region}-${page.params.project}/functions/function-${$func.$id}` ); } showCreateDeployment.set(true); @@ -66,7 +65,7 @@ label: 'Permissions', async callback() { await goto( - `${base}/project-${$project.region}-${$project.$id}/functions/function-${$func.$id}/settings#permissions` + `${base}/project-${page.params.region}-${page.params.project}/functions/function-${$func.$id}/settings#permissions` ); scrollBy({ top: -100 }); }, @@ -78,7 +77,7 @@ label: 'Events', async callback() { await goto( - `${base}/project-${$project.region}-${$project.$id}/functions/function-${$func.$id}/settings#events` + `${base}/project-${page.params.region}-${page.params.project}/functions/function-${$func.$id}/settings#events` ); scrollBy({ top: -100 }); }, @@ -90,7 +89,7 @@ label: 'Variables', async callback() { await goto( - `${base}/project-${$project.region}-${$project.$id}/functions/function-${$func.$id}/settings#variables` + `${base}/project-${page.params.region}-${page.params.project}/functions/function-${$func.$id}/settings#variables` ); }, icon: IconList, @@ -101,7 +100,7 @@ label: 'Timeout', callback() { goto( - `${base}/project-${$project.region}-${$project.$id}/functions/function-${$func.$id}/settings#timeout` + `${base}/project-${page.params.region}-${page.params.project}/functions/function-${$func.$id}/settings#timeout` ); }, icon: IconXCircle, @@ -112,7 +111,7 @@ label: 'Schedule', async callback() { await goto( - `${base}/project-${$project.region}-${$project.$id}/functions/function-${$func.$id}/settings#schedule` + `${base}/project-${page.params.region}-${page.params.project}/functions/function-${$func.$id}/settings#schedule` ); scrollBy({ top: -100 }); }, @@ -124,7 +123,7 @@ label: 'Go to deployments', callback() { goto( - `${base}/project-${$project.region}-${$project.$id}/functions/function-${$func.$id}` + `${base}/project-${page.params.region}-${page.params.project}/functions/function-${$func.$id}` ); }, keys: ['g', 'd'], @@ -136,7 +135,7 @@ label: 'Go to usage', callback() { goto( - `${base}/project-${$project.region}-${$project.$id}/functions/function-${$func.$id}/usage` + `${base}/project-${page.params.region}-${page.params.project}/functions/function-${$func.$id}/usage` ); }, keys: ['g', 'u'], @@ -148,7 +147,7 @@ label: 'Go to executions', callback() { goto( - `${base}/project-${$project.region}-${$project.$id}/functions/function-${$func.$id}/executions` + `${base}/project-${page.params.region}-${page.params.project}/functions/function-${$func.$id}/executions` ); }, keys: ['g', 'e'], @@ -160,7 +159,7 @@ label: 'Go to settings', callback() { goto( - `${base}/project-${$project.region}-${$project.$id}/functions/function-${$func.$id}/settings` + `${base}/project-${page.params.region}-${page.params.project}/functions/function-${$func.$id}/settings` ); }, keys: ['g', 's'], diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/+page.svelte index 6a9d3183aa..add73ffdde 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/+page.svelte @@ -1,5 +1,4 @@ @@ -39,10 +48,6 @@ - + From de14d181379bb04897710da2e237cc7f576a3e6f Mon Sep 17 00:00:00 2001 From: Darshan Date: Wed, 28 Jan 2026 15:01:47 +0530 Subject: [PATCH 7/8] fix: more store fixes. --- .../function-[function]/settings/updateResourceLimits.svelte | 1 + .../settings/usage/[[invoice]]/+page.svelte | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/settings/updateResourceLimits.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/settings/updateResourceLimits.svelte index 021902a711..fce7e945d7 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/settings/updateResourceLimits.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/settings/updateResourceLimits.svelte @@ -17,6 +17,7 @@ export let func: Models.Function; export let specs: Models.SpecificationList; + let specification = func.specification; let originalSpecification = func.specification; $: originalSpecification = func.specification; diff --git a/src/routes/(console)/project-[region]-[project]/settings/usage/[[invoice]]/+page.svelte b/src/routes/(console)/project-[region]-[project]/settings/usage/[[invoice]]/+page.svelte index 962901f18f..830c933754 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/usage/[[invoice]]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/usage/[[invoice]]/+page.svelte @@ -61,7 +61,7 @@ {#if planHasGroup(currentBillingPlan, BillingPlanGroup.Starter)} - {/if} @@ -86,7 +86,7 @@

    If you exceed the limits of the {currentBillingPlan.name} plan, services for your projects may be disrupted. - Upgrade for greater capacity.

    From ad909fdf026dd151d19d3950a951bc0cdc07eba0 Mon Sep 17 00:00:00 2001 From: Darshan Date: Wed, 28 Jan 2026 15:24:09 +0530 Subject: [PATCH 8/8] fix: state. --- .../project-[region]-[project]/auth/templates/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/(console)/project-[region]-[project]/auth/templates/+page.svelte b/src/routes/(console)/project-[region]-[project]/auth/templates/+page.svelte index da54773df1..72002ae96b 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/templates/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/templates/+page.svelte @@ -64,7 +64,7 @@ let templateType = $state(null); let isTemplateLoading = $state(false); - let openStates = Object.fromEntries(templates.map(({ key }) => [key, false])); + let openStates = $state(Object.fromEntries(templates.map(({ key }) => [key, false]))); loadTemplateFor(EmailTemplateType.Verification);