diff --git a/src/lib/components/menu/store.ts b/src/lib/components/menu/store.ts
index 571b30b82..829d2b6e6 100644
--- a/src/lib/components/menu/store.ts
+++ b/src/lib/components/menu/store.ts
@@ -1,3 +1,17 @@
import { writable } from 'svelte/store';
+import type { createMenubar } from '@melt-ui/svelte';
export const menuOpen = writable(false);
+
+export const activeMenuId = writable
(null);
+
+/**
+ * Full menu context passed to submenus —
+ * includes `builders` and shared `separator`.
+ */
+export type MenuContext = {
+ separator: ReturnType<
+ ReturnType['builders']['createMenu']
+ >['elements']['separator'];
+ builders: ReturnType['builders']['createMenu']>['builders'];
+};
diff --git a/src/lib/components/menu/subMenu.svelte b/src/lib/components/menu/subMenu.svelte
index 66186bf2a..e6e8e326d 100644
--- a/src/lib/components/menu/subMenu.svelte
+++ b/src/lib/components/menu/subMenu.svelte
@@ -1,15 +1,12 @@
@@ -179,13 +187,13 @@
- {
branch = event.detail.value;
}}
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 d77741486..5c8056398 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
@@ -11,12 +11,22 @@
import { Icon, Layout, Tooltip, Typography, Upload } from '@appwrite.io/pink-svelte';
import { func } from '../store';
import { page } from '$app/state';
+ import { consoleVariables } from '$routes/(console)/store';
+ import { currentPlan } from '$lib/stores/organization';
+ import { isCloud } from '$lib/system';
export let show = false;
let files: FileList;
let error: string = '';
+ $: maxSize =
+ isCloud && $currentPlan
+ ? $currentPlan?.deploymentSize === 0
+ ? 0
+ : $currentPlan?.deploymentSize * 1000000
+ : $consoleVariables._APP_COMPUTE_SIZE_LIMIT; // already in MB
+
async function create() {
try {
await sdk
@@ -69,7 +79,7 @@
diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/redeployModal.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/redeployModal.svelte
index d3f7847cc..6409b9f2b 100644
--- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/redeployModal.svelte
+++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/redeployModal.svelte
@@ -36,7 +36,7 @@
invalidate(Dependencies.DEPLOYMENTS);
if (redirect) {
goto(
- `${base}/project-${page.params.region}-${page.params.project}/functions/function-${$func.$id}/deployments/deployment-${deployment.$id}`
+ `${base}/project-${page.params.region}-${page.params.project}/functions/function-${$func.$id}/deployment-${deployment.$id}`
);
}
show = false;
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 dd26bd21f..e7a55a956 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
@@ -20,6 +20,7 @@
import { isValueOfStringEnum } from '$lib/helpers/types.js';
import { isCloud } from '$lib/system';
import { project } from '$routes/(console)/project-[region]-[project]/store';
+ import { getApexDomain } from '$lib/helpers/tlds';
const routeBase = `${base}/project-${page.params.region}-${page.params.project}/functions/function-${page.params.function}/domains`;
@@ -47,14 +48,12 @@
});
async function addDomain() {
- let domain = data.domains?.domains.find((d) => d.domain === domainName);
+ const apexDomain = getApexDomain(domainName);
+ let domain = data.domains?.domains.find((d) => d.domain === apexDomain);
- if (!domain && isCloud) {
+ if (apexDomain && !domain && isCloud) {
try {
- domain = await sdk.forConsole.domains.create(
- $project.teamId,
- domainName.toLocaleLowerCase()
- );
+ domain = await sdk.forConsole.domains.create($project.teamId, apexDomain);
} catch (error) {
addNotification({
type: 'error',
diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.svelte
index f8b03eb86..0ca8e0f52 100644
--- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.svelte
@@ -20,6 +20,7 @@
import Wizard from '$lib/layout/wizard.svelte';
import { base } from '$app/paths';
import { writable } from 'svelte/store';
+ import { isASubdomain } from '$lib/helpers/tlds';
import { consoleVariables } from '$routes/(console)/store';
import NameserverTable from '$lib/components/domains/nameserverTable.svelte';
import RecordTable from '$lib/components/domains/recordTable.svelte';
@@ -27,7 +28,7 @@
let { data } = $props();
const ruleId = page.url.searchParams.get('rule');
- let isSubDomain = $derived(page.params.domain?.split('.')?.length >= 3);
+ const isSubDomain = $derived.by(() => isASubdomain(page.params.domain));
let selectedTab = $state<'cname' | 'nameserver' | 'a' | 'aaaa'>('nameserver');
$effect(() => {
@@ -126,7 +127,7 @@
Nameservers
{/if}
- {#if !!$consoleVariables._APP_DOMAIN_TARGET_A && $consoleVariables._APP_DOMAIN_TARGET_A !== '127.0.0.1'}
+ {#if !isCloud && !!$consoleVariables._APP_DOMAIN_TARGET_A && $consoleVariables._APP_DOMAIN_TARGET_A !== '127.0.0.1'}
(selectedTab = 'a')}
@@ -134,7 +135,7 @@
A
{/if}
- {#if !!$consoleVariables._APP_DOMAIN_TARGET_AAAA && $consoleVariables._APP_DOMAIN_TARGET_AAAA !== '::1'}
+ {#if !isCloud && !!$consoleVariables._APP_DOMAIN_TARGET_AAAA && $consoleVariables._APP_DOMAIN_TARGET_AAAA !== '::1'}
(selectedTab = 'aaaa')}
diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.ts b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.ts
index 5fbb56d85..a5f6b1910 100644
--- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.ts
+++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.ts
@@ -1,23 +1,17 @@
import { sdk } from '$lib/stores/sdk';
-import { Dependencies } from '$lib/constants.js';
import { isCloud } from '$lib/system';
-import type { Domain, DomainsList } from '$lib/sdk/domains.js';
+import { Dependencies } from '$lib/constants.js';
+import type { DomainsList } from '$lib/sdk/domains.js';
-export const load = async ({ depends, params }) => {
+export const load = async ({ depends }) => {
depends(Dependencies.DOMAINS);
- let domain: Domain;
let domainsList: DomainsList;
if (isCloud) {
domainsList = await sdk.forConsole.domains.list();
- const domainId = domainsList.domains.find(
- (domain: Domain) => domain.domain === params.domain
- ).$id;
- domain = await sdk.forConsole.domains.get(domainId);
}
return {
- domain,
domainsList
};
};
diff --git a/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/+page.svelte b/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/+page.svelte
index 09ff91999..781c68bb2 100644
--- a/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/+page.svelte
@@ -11,6 +11,7 @@
import { onMount } from 'svelte';
import { isCloud } from '$lib/system';
import { project } from '$routes/(console)/project-[region]-[project]/store';
+ import { getApexDomain } from '$lib/helpers/tlds';
const routeBase = `${base}/project-${page.params.region}-${page.params.project}/settings/domains`;
@@ -27,14 +28,12 @@
});
async function addDomain() {
- let domain = data.domains?.domains.find((d) => d.domain === domainName);
+ const apexDomain = getApexDomain(domainName);
+ let domain = data.domains?.domains.find((d) => d.domain === apexDomain);
- if (!domain && isCloud) {
+ if (apexDomain && !domain && isCloud) {
try {
- domain = await sdk.forConsole.domains.create(
- $project.teamId,
- domainName.toLocaleLowerCase()
- );
+ domain = await sdk.forConsole.domains.create($project.teamId, apexDomain);
} catch (error) {
addNotification({
type: 'error',
@@ -48,7 +47,7 @@
try {
const rule = await sdk
.forProject(page.params.region, page.params.project)
- .proxy.createAPIRule(domainName);
+ .proxy.createAPIRule(domainName.toLocaleLowerCase());
if (rule?.status === 'verified') {
await goto(routeBase);
await invalidate(Dependencies.DOMAINS);
diff --git a/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.svelte b/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.svelte
index ac027c30b..dc9946534 100644
--- a/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.svelte
@@ -20,6 +20,7 @@
import Wizard from '$lib/layout/wizard.svelte';
import { base } from '$app/paths';
import { writable } from 'svelte/store';
+ import { isASubdomain } from '$lib/helpers/tlds';
import { consoleVariables } from '$routes/(console)/store';
import NameserverTable from '$lib/components/domains/nameserverTable.svelte';
import RecordTable from '$lib/components/domains/recordTable.svelte';
@@ -27,7 +28,7 @@
let { data } = $props();
const ruleId = page.url.searchParams.get('rule');
- let isSubDomain = $derived(page.params.domain?.split('.')?.length >= 3);
+ const isSubDomain = $derived.by(() => isASubdomain(page.params.domain));
let selectedTab = $state<'cname' | 'nameserver' | 'a' | 'aaaa'>('nameserver');
$effect(() => {
@@ -125,7 +126,7 @@
Nameservers
{/if}
- {#if !!$consoleVariables._APP_DOMAIN_TARGET_A && $consoleVariables._APP_DOMAIN_TARGET_A !== '127.0.0.1'}
+ {#if !isCloud && !!$consoleVariables._APP_DOMAIN_TARGET_A && $consoleVariables._APP_DOMAIN_TARGET_A !== '127.0.0.1'}
(selectedTab = 'a')}
@@ -133,7 +134,7 @@
A
{/if}
- {#if !!$consoleVariables._APP_DOMAIN_TARGET_AAAA && $consoleVariables._APP_DOMAIN_TARGET_AAAA !== '::1'}
+ {#if !isCloud && !!$consoleVariables._APP_DOMAIN_TARGET_AAAA && $consoleVariables._APP_DOMAIN_TARGET_AAAA !== '::1'}
(selectedTab = 'aaaa')}
diff --git a/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.ts b/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.ts
index 5fbb56d85..a5f6b1910 100644
--- a/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.ts
+++ b/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.ts
@@ -1,23 +1,17 @@
import { sdk } from '$lib/stores/sdk';
-import { Dependencies } from '$lib/constants.js';
import { isCloud } from '$lib/system';
-import type { Domain, DomainsList } from '$lib/sdk/domains.js';
+import { Dependencies } from '$lib/constants.js';
+import type { DomainsList } from '$lib/sdk/domains.js';
-export const load = async ({ depends, params }) => {
+export const load = async ({ depends }) => {
depends(Dependencies.DOMAINS);
- let domain: Domain;
let domainsList: DomainsList;
if (isCloud) {
domainsList = await sdk.forConsole.domains.list();
- const domainId = domainsList.domains.find(
- (domain: Domain) => domain.domain === params.domain
- ).$id;
- domain = await sdk.forConsole.domains.get(domainId);
}
return {
- domain,
domainsList
};
};
diff --git a/src/routes/(console)/project-[region]-[project]/settings/updateName.svelte b/src/routes/(console)/project-[region]-[project]/settings/updateName.svelte
index a4ca90b67..af7f27d0d 100644
--- a/src/routes/(console)/project-[region]-[project]/settings/updateName.svelte
+++ b/src/routes/(console)/project-[region]-[project]/settings/updateName.svelte
@@ -11,8 +11,7 @@
import { onMount } from 'svelte';
import { project } from '../store';
import { canWriteProjects } from '$lib/stores/roles';
-
- const endpoint = sdk.forConsole.client.config.endpoint;
+ import { getProjectEndpoint } from '$lib/helpers/project';
let name: string = null;
@@ -45,7 +44,7 @@
Access Appwrite services using this project's API Endpoint and Project ID.
-
+
- {
branch = event.detail.value;
}}
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 cf45a69a6..cd4c9f434 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
@@ -9,6 +9,9 @@
import type { Models } from '@appwrite.io/console';
import { IconInfo } from '@appwrite.io/pink-icons-svelte';
import { Icon, Layout, Tooltip, Typography, Upload } from '@appwrite.io/pink-svelte';
+ import { isCloud } from '$lib/system';
+ import { currentPlan } from '$lib/stores/organization';
+ import { consoleVariables } from '$routes/(console)/store';
export let show = false;
export let site: Models.Site;
@@ -16,6 +19,13 @@
let files: FileList;
let error: string = '';
+ $: maxSize =
+ isCloud && $currentPlan
+ ? $currentPlan?.deploymentSize === 0
+ ? 0
+ : $currentPlan?.deploymentSize * 1000000
+ : $consoleVariables._APP_COMPUTE_SIZE_LIMIT; // already in MB
+
async function createDeployment() {
try {
uploader.uploadSiteDeployment(site.$id, files[0]);
@@ -63,7 +73,7 @@
diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/deployment-[deployment]/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/deployment-[deployment]/+page.svelte
index dc50e9d1f..541b3c00e 100644
--- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/deployment-[deployment]/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/deployment-[deployment]/+page.svelte
@@ -29,8 +29,8 @@
let showDelete = $state(false);
let showCancel = $state(false);
- onMount(async () => {
- sdk.forConsole.client.subscribe(
+ onMount(() => {
+ return sdk.forConsole.client.subscribe(
'console',
async (response: RealtimeResponseEvent) => {
if (
@@ -38,7 +38,7 @@
`sites.${page.params.site}.deployments.${page.params.deployment}.update`
)
) {
- invalidate(Dependencies.DEPLOYMENTS);
+ await invalidate(Dependencies.DEPLOYMENT);
}
}
);
diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/+page.svelte
index 3b053e49f..941c1d563 100644
--- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/+page.svelte
@@ -25,6 +25,7 @@
import { ConnectRepoModal } from '$lib/components/git/index.js';
import { project } from '$routes/(console)/project-[region]-[project]/store';
import { isCloud } from '$lib/system';
+ import { getApexDomain } from '$lib/helpers/tlds';
const routeBase = `${base}/project-${page.params.region}-${page.params.project}/sites/site-${page.params.site}/domains`;
@@ -52,14 +53,12 @@
});
async function addDomain() {
- let domain = data.domains?.domains.find((d) => d.domain === domainName);
+ const apexDomain = getApexDomain(domainName);
+ let domain = data.domains?.domains.find((d) => d.domain === apexDomain);
- if (!domain && isCloud) {
+ if (apexDomain && !domain && isCloud) {
try {
- domain = await sdk.forConsole.domains.create(
- $project.teamId,
- domainName.toLocaleLowerCase()
- );
+ domain = await sdk.forConsole.domains.create($project.teamId, apexDomain);
} catch (error) {
addNotification({
type: 'error',
@@ -175,13 +174,17 @@
value: branch.name
}))}
-
+ on:select={(event) => {
+ branch = event.detail.value;
+ }}
+ {options} />
{#if !data.branches?.total}
No branches found in the selected repository. Create a
diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.svelte
index cc27aa40b..9e30d8a05 100644
--- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.svelte
@@ -20,6 +20,7 @@
import Wizard from '$lib/layout/wizard.svelte';
import { base } from '$app/paths';
import { writable } from 'svelte/store';
+ import { isASubdomain } from '$lib/helpers/tlds';
import { consoleVariables } from '$routes/(console)/store';
import NameserverTable from '$lib/components/domains/nameserverTable.svelte';
import RecordTable from '$lib/components/domains/recordTable.svelte';
@@ -27,9 +28,10 @@
let { data } = $props();
const ruleId = page.url.searchParams.get('rule');
- let isSubDomain = $derived(page.params.domain?.split('.')?.length >= 3);
+ const isSubDomain = $derived.by(() => isASubdomain(page.params.domain));
let selectedTab = $state<'cname' | 'nameserver' | 'a' | 'aaaa'>('nameserver');
+
$effect(() => {
if ($consoleVariables._APP_DOMAIN_TARGET_CNAME && isSubDomain) {
selectedTab = 'cname';
@@ -127,7 +129,7 @@
Nameservers
{/if}
- {#if !!$consoleVariables._APP_DOMAIN_TARGET_A && $consoleVariables._APP_DOMAIN_TARGET_A !== '127.0.0.1'}
+ {#if !isCloud && !!$consoleVariables._APP_DOMAIN_TARGET_A && $consoleVariables._APP_DOMAIN_TARGET_A !== '127.0.0.1'}
(selectedTab = 'a')}
@@ -135,7 +137,7 @@
A
{/if}
- {#if !!$consoleVariables._APP_DOMAIN_TARGET_AAAA && $consoleVariables._APP_DOMAIN_TARGET_AAAA !== '::1'}
+ {#if !isCloud && !!$consoleVariables._APP_DOMAIN_TARGET_AAAA && $consoleVariables._APP_DOMAIN_TARGET_AAAA !== '::1'}
(selectedTab = 'aaaa')}
@@ -150,10 +152,10 @@
{:else}
+ domain={page.params.domain} />
{/if}
diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.ts
index 9a5223cb8..cea7e4b71 100644
--- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.ts
+++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.ts
@@ -1,26 +1,20 @@
import { sdk } from '$lib/stores/sdk';
import { isCloud } from '$lib/system';
import { Dependencies } from '$lib/constants.js';
-import type { Domain, DomainsList } from '$lib/sdk/domains.js';
+import type { DomainsList } from '$lib/sdk/domains';
-export const load = async ({ parent, depends, params }) => {
+export const load = async ({ parent, depends }) => {
const { site } = await parent();
depends(Dependencies.SITES_DOMAINS);
- let domain: Domain;
let domainsList: DomainsList;
if (isCloud) {
domainsList = await sdk.forConsole.domains.list();
- const domainId = domainsList.domains.find(
- (domain: Domain) => domain.domain === params.domain
- ).$id;
- domain = await sdk.forConsole.domains.get(domainId);
}
return {
site,
- domain,
domainsList
};
};
diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/retryDomainModal.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/retryDomainModal.svelte
index f18c1b664..389cbc2f7 100644
--- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/retryDomainModal.svelte
+++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/retryDomainModal.svelte
@@ -11,6 +11,7 @@
import { consoleVariables } from '$routes/(console)/store';
import { isCloud } from '$lib/system';
import { page } from '$app/state';
+ import { isASubdomain } from '$lib/helpers/tlds';
import NameserverTable from '$lib/components/domains/nameserverTable.svelte';
import RecordTable from '$lib/components/domains/recordTable.svelte';
@@ -22,9 +23,7 @@
selectedDomain: Models.ProxyRule;
} = $props();
- let isSubDomain = $derived.by(() =>
- selectedDomain?.domain?.length ? selectedDomain?.domain?.split('.')?.length >= 3 : false
- );
+ const isSubDomain = $derived.by(() => isASubdomain(selectedDomain?.domain));
let selectedTab = $state<'cname' | 'nameserver' | 'a' | 'aaaa'>('nameserver');
$effect(() => {