From 062d5eec69b436edde0c523dac1198234cfcccb9 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 18 Nov 2024 14:36:32 +0100 Subject: [PATCH] feat: settings page --- .../sites/site-[site]/deployments/+page.ts | 3 +- .../sites/site-[site]/settings/+page.svelte | 41 +++ .../sites/site-[site]/settings/+page.ts | 37 +++ .../site-[site]/settings/dangerZone.svelte | 32 ++ .../site-[site]/settings/deleteModal.svelte | 48 +++ .../settings/disconnectRepo.svelte | 80 +++++ .../settings/gitConfigurationModal.svelte | 295 ++++++++++++++++++ .../site-[site]/settings/updateName.svelte | 74 +++++ 8 files changed, 608 insertions(+), 2 deletions(-) create mode 100644 src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.svelte create mode 100644 src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.ts create mode 100644 src/routes/(console)/project-[project]/sites/site-[site]/settings/dangerZone.svelte create mode 100644 src/routes/(console)/project-[project]/sites/site-[site]/settings/deleteModal.svelte create mode 100644 src/routes/(console)/project-[project]/sites/site-[site]/settings/disconnectRepo.svelte create mode 100644 src/routes/(console)/project-[project]/sites/site-[site]/settings/gitConfigurationModal.svelte create mode 100644 src/routes/(console)/project-[project]/sites/site-[site]/settings/updateName.svelte diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/deployments/+page.ts b/src/routes/(console)/project-[project]/sites/site-[site]/deployments/+page.ts index aad33a0ee..3bacaf09c 100644 --- a/src/routes/(console)/project-[project]/sites/site-[site]/deployments/+page.ts +++ b/src/routes/(console)/project-[project]/sites/site-[site]/deployments/+page.ts @@ -2,10 +2,9 @@ import { Query } from '@appwrite.io/console'; import { sdk } from '$lib/stores/sdk'; import { getLimit, getPage, getQuery, pageToOffset } from '$lib/helpers/load'; import { Dependencies, PAGE_LIMIT } from '$lib/constants'; -import type { PageLoad } from './$types'; import { queries, queryParamToMap } from '$lib/components/filters'; -export const load: PageLoad = async ({ params, depends, url, route, parent }) => { +export const load = async ({ params, depends, url, route, parent }) => { const data = await parent(); depends(Dependencies.DEPLOYMENTS); const page = getPage(url); diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.svelte new file mode 100644 index 000000000..3764822f4 --- /dev/null +++ b/src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.svelte @@ -0,0 +1,41 @@ + + + + Settings + + + + diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.ts b/src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.ts new file mode 100644 index 000000000..25a7f7c42 --- /dev/null +++ b/src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.ts @@ -0,0 +1,37 @@ +import { sdk } from '$lib/stores/sdk'; +import { Dependencies } from '$lib/constants'; + +export const load = async ({ params, depends, parent }) => { + depends(Dependencies.VARIABLES); + depends(Dependencies.SITE); + const { site } = await parent(); + + const [globalVariables, variables] = await Promise.all([ + sdk.forProject.projectApi.listVariables(), + sdk.forProject.sites.listVariables(params.site) + ]); + + // Conflicting variables first + variables.variables = variables.variables.sort((var1, var2) => { + const isVar1Global = + globalVariables.variables.find((variable) => variable.key === var1.key) !== undefined; + const isVar2Global = + globalVariables.variables.find((variable) => variable.key === var2.key) !== undefined; + + if (isVar1Global && isVar2Global) { + return -var1.$createdAt.localeCompare(var2.$createdAt); + } else if (isVar1Global) { + return -1; + } else if (isVar2Global) { + return 1; + } else { + return -var1.$createdAt.localeCompare(var2.$createdAt); + } + }); + + return { + variables, + globalVariables, + site + }; +}; diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/settings/dangerZone.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/settings/dangerZone.svelte new file mode 100644 index 000000000..f75b2af60 --- /dev/null +++ b/src/routes/(console)/project-[project]/sites/site-[site]/settings/dangerZone.svelte @@ -0,0 +1,32 @@ + + + + Delete site +

+ The function will be permanently deleted, including all deployments associated with it. This + action is irreversible. +

+ + + +
{site.name}
+
+

Last updated: {toLocaleDateTime(site.$updatedAt)}

+
+
+ + + + +
+ + diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/settings/deleteModal.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/settings/deleteModal.svelte new file mode 100644 index 000000000..b37110436 --- /dev/null +++ b/src/routes/(console)/project-[project]/sites/site-[site]/settings/deleteModal.svelte @@ -0,0 +1,48 @@ + + + +

+ Are you sure you want to delete this function and all associated deployments from your + project? +

+ + + + +
diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/settings/disconnectRepo.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/settings/disconnectRepo.svelte new file mode 100644 index 000000000..699aebab2 --- /dev/null +++ b/src/routes/(console)/project-[project]/sites/site-[site]/settings/disconnectRepo.svelte @@ -0,0 +1,80 @@ + + + +

+ Are you sure you want to disconnect {$func.name}? This will affect future deployments + to this function. +

+ + + + +
diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/settings/gitConfigurationModal.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/settings/gitConfigurationModal.svelte new file mode 100644 index 000000000..a2f6116a2 --- /dev/null +++ b/src/routes/(console)/project-[project]/sites/site-[site]/settings/gitConfigurationModal.svelte @@ -0,0 +1,295 @@ + + + +

+ Configure a Git repository that will trigger your function deployments when updated. +

+ {#if step === 1} + {#await getRepos()} + Fetching repositories.. + {:then} +
+
+ +
+
+ +
+
+ +

+ Manage organization configuration in your project settings. +

+ {#if repositoriesList.length} +
    + {#each repositoriesList as repo} +
  • + +
  • + {/each} +
+
+

Total results: {repositoriesList.length}

+ +
+ {:else if search} + +
+
+ Sorry we couldn't find "{search}" +

There are no repositories that match your search.

+
+
+ + +
+
+
+ {:else} + +
+
+

You have no repositories.

+

+ Need a hand? Learn more in our + documentation. +

+
+
+
+ {/if} + {/await} + {:else} + {#await getBranches()} + Fetching branches.. + {:then} + + +
+ +
+
+ +
{selectedRepo.name}
+
+

Last updated: {toLocaleDateTime(selectedRepo.pushedAt)}

+
+ + { + selectedBranch = event.detail.value; + }} + name="branch" + options={branchesList?.branches?.map((branch) => { + return { + value: branch.name, + label: branch.name + }; + }) ?? []} /> + + + {/await} + {/if} + + + {#if step === 1} + + + {:else} + + + {/if} + +
diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/settings/updateName.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/settings/updateName.svelte new file mode 100644 index 000000000..634f10da7 --- /dev/null +++ b/src/routes/(console)/project-[project]/sites/site-[site]/settings/updateName.svelte @@ -0,0 +1,74 @@ + + +
+ + Name + + +
    + +
+
+ + + + +
+