diff --git a/src/lib/helpers/faker.ts b/src/lib/helpers/faker.ts index e05cbc85d3..c7ce16e9dd 100644 --- a/src/lib/helpers/faker.ts +++ b/src/lib/helpers/faker.ts @@ -6,12 +6,15 @@ import type { DatabaseType, Field } from '$database/(entity)'; import { coerceToNumber, isWithinSafeRange } from '$lib/helpers/numbers'; export async function generateFields( - project: Models.Project, + project: { + id: string; + region: string; + }, databaseId: string, tableId: string, databaseType: DatabaseType ): Promise { - const client = sdk.forProject(project.region, project.$id); + const client = sdk.forProject(project.region, project.id); switch (databaseType) { case 'legacy': diff --git a/src/routes/(console)/project-[region]-[project]/auth/+layout.svelte b/src/routes/(console)/project-[region]-[project]/auth/+layout.svelte index 674167aa30..92f4242424 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/+layout.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/+layout.svelte @@ -1,111 +1,122 @@ Auth - Appwrite - +{@render children?.()} diff --git a/src/routes/(console)/project-[region]-[project]/auth/+page.svelte b/src/routes/(console)/project-[region]-[project]/auth/+page.svelte index e8b9c7a298..e32114a8b6 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/+page.svelte @@ -34,7 +34,6 @@ import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; import { Dependencies } from '$lib/constants'; import { invalidate } from '$app/navigation'; - import type { PageProps } from './$types'; let { data }: PageProps = $props(); diff --git a/src/routes/(console)/project-[region]-[project]/auth/breadcrumbs.svelte b/src/routes/(console)/project-[region]-[project]/auth/breadcrumbs.svelte index db806d0381..f0806be09a 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/breadcrumbs.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/breadcrumbs.svelte @@ -1,8 +1,8 @@ - - - + + + - - + + diff --git a/src/routes/(console)/project-[region]-[project]/auth/security/updateMembershipPrivacy.svelte b/src/routes/(console)/project-[region]-[project]/auth/security/updateMembershipPrivacy.svelte index bcd7116b8a..69c4deb979 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/security/updateMembershipPrivacy.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/security/updateMembershipPrivacy.svelte @@ -7,16 +7,22 @@ import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; import { Selector } from '@appwrite.io/pink-svelte'; - import { project } from '../../store'; + import type { Models } from '@appwrite.io/console'; - let authMembershipsUserName = $project?.authMembershipsUserName ?? true; - let authMembershipsUserEmail = $project?.authMembershipsUserEmail ?? true; - let authMembershipsMfa = $project?.authMembershipsMfa ?? true; + const { + project + }: { + project: Models.Project; + } = $props(); + + let authMembershipsMfa = $state(project?.authMembershipsMfa ?? true); + let authMembershipsUserName = $state(project?.authMembershipsUserName ?? true); + let authMembershipsUserEmail = $state(project?.authMembershipsUserEmail ?? true); async function updateMembershipsPrivacy() { try { await sdk.forConsole.projects.updateMembershipsPrivacy({ - projectId: $project.$id, + projectId: project.$id, userName: authMembershipsUserName, userEmail: authMembershipsUserEmail, mfa: authMembershipsMfa @@ -60,9 +66,9 @@ 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..72002ae96b 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/templates/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/templates/+page.svelte @@ -1,4 +1,4 @@ - @@ -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..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 @@ -1,24 +1,31 @@ @@ -52,7 +59,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 +68,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..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 @@ -1,29 +1,35 @@ @@ -37,4 +48,4 @@ {/key} - +{@render children()} diff --git a/src/routes/(console)/project-[region]-[project]/databases/+page.svelte b/src/routes/(console)/project-[region]-[project]/databases/+page.svelte index 0b154fb4ad..692098fb3d 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/+page.svelte @@ -111,4 +111,4 @@ {/if} - + diff --git a/src/routes/(console)/project-[region]-[project]/databases/create.svelte b/src/routes/(console)/project-[region]-[project]/databases/create.svelte index 164a8dd0ea..a48ef0d1f6 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/create.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/create.svelte @@ -4,7 +4,7 @@ import { Button, InputText } from '$lib/elements/forms'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import { ID } from '@appwrite.io/console'; + import { ID, type Models } from '@appwrite.io/console'; import { createEventDispatcher } from 'svelte'; import { isCloud } from '$lib/system'; import { currentPlan } from '$lib/stores/organization'; @@ -14,9 +14,10 @@ import { Alert, Icon, Tag } from '@appwrite.io/pink-svelte'; import { IconPencil } from '@appwrite.io/pink-icons-svelte'; import { page } from '$app/state'; - import { project } from '../store'; export let showCreate = false; + export let project: Models.Project; + let totalPolicies: UserBackupPolicy[] = []; const dispatch = createEventDispatcher(); @@ -134,11 +135,12 @@ Upgrade your plan to ensure your data stays safe and backed up. - + {: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. 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 @@ - + 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/smtp/+page.svelte b/src/routes/(console)/project-[region]-[project]/settings/smtp/+page.svelte index dbcf482070..a3ff41e3ac 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} {/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.

    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}