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',