diff --git a/src/routes/(console)/organization-[organization]/change-plan/+page.svelte b/src/routes/(console)/organization-[organization]/change-plan/+page.svelte index ba6e5c820..17be41b65 100644 --- a/src/routes/(console)/organization-[organization]/change-plan/+page.svelte +++ b/src/routes/(console)/organization-[organization]/change-plan/+page.svelte @@ -33,6 +33,7 @@ import { onMount } from 'svelte'; import { loadAvailableRegions } from '$routes/(console)/regions'; import EstimatedTotalBox from '$lib/components/billing/estimatedTotalBox.svelte'; + import { Query } from '@appwrite.io/console'; export let data; @@ -105,6 +106,34 @@ } } + async function trackDowngradeFeedback() { + const paidInvoices = await sdk.forConsole.billing.listInvoices(data.organization.$id, [ + Query.equal('status', 'succeeded'), + Query.greaterThan('grossAmount', 0) + ]); + + await fetch(`${VARS.GROWTH_ENDPOINT}/feedback/billing`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + from: tierToPlan(data.organization.billingPlan).name, + to: tierToPlan(selectedPlan).name, + email: data.account.email, + reason: feedbackDowngradeOptions.find( + (option) => option.value === feedbackDowngradeReason + )?.label, + orgId: data.organization.$id, + userId: data.account.$id, + orgAge: data.organization.$createdAt, + userAge: data.account.$createdAt, + paidInvoices: paidInvoices.total, + message: feedbackMessage ?? '' + }) + }); + } + async function downgrade() { try { await sdk.forConsole.billing.updatePlan( @@ -114,23 +143,7 @@ null ); - await fetch(`${VARS.GROWTH_ENDPOINT}/feedback/billing`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - from: tierToPlan(data.organization.billingPlan).name, - to: tierToPlan(selectedPlan).name, - email: data.account.email, - reason: feedbackDowngradeOptions.find( - (option) => option.value === feedbackDowngradeReason - )?.label, - orgId: data.organization.$id, - userId: data.account.$id, - message: feedbackMessage ?? '' - }) - }); + trackDowngradeFeedback(); await invalidate(Dependencies.ORGANIZATION); diff --git a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/importRecordModal.svelte b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/importRecordModal.svelte index 5d0eeda5a..53df79780 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/importRecordModal.svelte +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/importRecordModal.svelte @@ -37,7 +37,7 @@ } function handleInvalid(e: CustomEvent) { - const reason = e.detail.reason; + const reason = e.detail?.reason ?? ''; if (reason === InvalidFileType.EXTENSION) { error = 'Only .txt files allowed'; } else if (reason === InvalidFileType.SIZE) { diff --git a/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte index bd7f4106b..7650055ef 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte @@ -130,7 +130,7 @@ } function handleInvalid(e: CustomEvent) { - const reason = e.detail.reason; + const reason = e.detail?.reason ?? ''; if (reason === InvalidFileType.EXTENSION) { addNotification({ type: 'error', diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte index 6259d577c..bd063bdfd 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte @@ -48,7 +48,7 @@ } function handleInvalid(e: CustomEvent) { - const reason = e.detail.reason; + const reason = e.detail?.reason ?? ''; if (reason === InvalidFileType.EXTENSION) { error = 'Only .tar.gz files allowed'; } else if (reason === InvalidFileType.SIZE) { diff --git a/src/routes/(console)/project-[region]-[project]/messaging/providers/settingsFormInput.svelte b/src/routes/(console)/project-[region]-[project]/messaging/providers/settingsFormInput.svelte index 35ba274ba..411420a6b 100644 --- a/src/routes/(console)/project-[region]-[project]/messaging/providers/settingsFormInput.svelte +++ b/src/routes/(console)/project-[region]-[project]/messaging/providers/settingsFormInput.svelte @@ -58,7 +58,7 @@ } function handleInvalid(e: CustomEvent) { - const reason = e.detail.reason; + const reason = e.detail?.reason ?? ''; if (reason === InvalidFileType.EXTENSION) { addNotification({ diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte index 0d9f1b58b..b3a8b8a16 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte @@ -14,17 +14,13 @@ import { BuildRuntime, Framework, ID } from '@appwrite.io/console'; import type { Models } from '@appwrite.io/console'; import Configuration from '../configuration.svelte'; - import { buildVerboseDomain } from '../store'; - import { - project, - regionalConsoleVariables - } from '$routes/(console)/project-[region]-[project]/store'; - import { organization } from '$lib/stores/organization'; + import { regionalConsoleVariables } from '../../../store'; import { IconInfo } from '@appwrite.io/pink-icons-svelte'; import { InvalidFileType, removeFile } from '$lib/helpers/files'; import { humanFileSize } from '$lib/helpers/sizeConvertion'; import { isCloud } from '$lib/system'; import { currentPlan } from '$lib/stores/organization'; + import Domain from '../domain.svelte'; export let data; let showExitModal = false; @@ -34,7 +30,8 @@ let name = 'My website'; let id = ID.unique(); - let domain = `${id}.${$regionalConsoleVariables._APP_DOMAIN_SITES}`; + let domain = data.domain; + let domainIsValid = true; let framework: Models.Framework = data.frameworks.frameworks?.find((f) => f.key === 'other') ?? data.frameworks.frameworks?.[0]; @@ -54,13 +51,13 @@ async function create() { try { - domain = await buildVerboseDomain( - $regionalConsoleVariables._APP_DOMAIN_SITES, - name, - $organization.name, - $project.name, - id - ); + if (!domainIsValid) { + addNotification({ + type: 'error', + message: 'Domain is not valid' + }); + return; + } const fr = Object.values(Framework).find((f) => f === framework.key); const buildRuntime = Object.values(BuildRuntime).find( @@ -138,7 +135,7 @@ } function handleInvalid(e: CustomEvent) { - const reason = e.detail.reason; + const reason = e.detail?.reason ?? ''; if (reason === InvalidFileType.EXTENSION) { addNotification({ type: 'error', @@ -233,6 +230,8 @@ bind:selectedFramework={framework} bind:variables frameworks={data.frameworks.frameworks} /> + + diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.ts index 0d16bd7bb..584877a05 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.ts @@ -1,9 +1,20 @@ import { sdk } from '$lib/stores/sdk'; +import { ID } from '@appwrite.io/console'; +import { buildVerboseDomain } from '../store'; export const load = async ({ parent, params }) => { - const { frameworks } = await parent(); + const { frameworks, project, organization, regionalConsoleVariables } = await parent(); + + const domain = await buildVerboseDomain( + regionalConsoleVariables._APP_DOMAIN_SITES, + '', // name + organization.name, + project.name, + ID.unique() + ); return { + domain, frameworks, template: await sdk .forProject(params.region, params.project) diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/store.ts b/src/routes/(console)/project-[region]-[project]/sites/create-site/store.ts index 9f866d869..565925eb2 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/store.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/store.ts @@ -28,10 +28,15 @@ export async function buildVerboseDomain( : ''; const safeUnique = unique ? toURLSafe(unique).toLowerCase() : ID.unique(); let domain = `${safeName}`; - if (await checkDomain(domain, apex)) { + if (domain && (await checkDomain(domain, apex))) { return domain; } - domain += '-' + safeSpecifier; + + if (domain) { + domain += '-'; + } + + domain += safeSpecifier; if (await checkDomain(domain, apex)) { return domain; } diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createManualDeploymentModal.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createManualDeploymentModal.svelte index 3930d56c7..a428f7cc9 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createManualDeploymentModal.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createManualDeploymentModal.svelte @@ -42,7 +42,7 @@ } function handleInvalid(e: CustomEvent) { - const reason = e.detail.reason; + const reason = e.detail?.reason ?? ''; if (reason === InvalidFileType.EXTENSION) { error = 'Only .tar.gz files allowed'; } else if (reason === InvalidFileType.SIZE) { diff --git a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/create/+page.svelte b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/create/+page.svelte index 0e4b0a97f..3bb100c47 100644 --- a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/create/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/create/+page.svelte @@ -76,7 +76,7 @@ } function handleInvalid(e: CustomEvent) { - const reason = e.detail.reason; + const reason = e.detail?.reason ?? ''; if (reason === InvalidFileType.EXTENSION) { addNotification({ type: 'error',