From 77563978ff0d382d37db6b658c3db6bf6f064b58 Mon Sep 17 00:00:00 2001 From: Arman Date: Fri, 16 Sep 2022 10:49:16 +0200 Subject: [PATCH 001/105] feat: functions screen --- src/lib/layout/unauthenticated.svelte | 2 +- .../project-[project]/functions/+page.svelte | 151 +++++++++++++----- .../project-[project]/functions/store.ts | 31 ++++ .../dark/color/{node_js.svg => node.svg} | 0 .../dark/grayscale/{node_js.svg => node.svg} | 0 .../light/color/{node_js.svg => node.svg} | 0 .../light/grayscale/{node_js.svg => node.svg} | 0 7 files changed, 145 insertions(+), 39 deletions(-) create mode 100644 src/routes/console/project-[project]/functions/store.ts rename static/icons/dark/color/{node_js.svg => node.svg} (100%) rename static/icons/dark/grayscale/{node_js.svg => node.svg} (100%) rename static/icons/light/color/{node_js.svg => node.svg} (100%) rename static/icons/light/grayscale/{node_js.svg => node.svg} (100%) diff --git a/src/lib/layout/unauthenticated.svelte b/src/lib/layout/unauthenticated.svelte index 18a634b3f..be86d9b83 100644 --- a/src/lib/layout/unauthenticated.svelte +++ b/src/lib/layout/unauthenticated.svelte @@ -10,7 +10,7 @@ 'flutter', 'apple', 'android', - 'node_js', + 'node', 'php', 'python', 'ruby', diff --git a/src/routes/console/project-[project]/functions/+page.svelte b/src/routes/console/project-[project]/functions/+page.svelte index 623fcd87b..7be6e2caa 100644 --- a/src/routes/console/project-[project]/functions/+page.svelte +++ b/src/routes/console/project-[project]/functions/+page.svelte @@ -1,57 +1,132 @@ -

Functions

- - - +
+

Functions

- {#await request} -
- {:then response} - {#if response.total} -

{response.total} functions found

- - {#each response.functions as func} - - {/each} - + +
- - {:else if search} - - No results found for {search} - - {:else} - - No Functions Found - You haven't created any functions for your project yet. - - {/if} - {/await} + {#if $functionList?.total} +
3 ? '22rem' : '25rem'};`}> + {#each $functionList.functions as func} + + +
+
+ technology +
+ {func.name} +
+
+ + + {#if func.scheduleNext} +
  • +
  • + {/if} + +
    - + + Function ID + +
    + {/each} + {#if ($functionList.total % 2 !== 0 || $functionList.total % 4 === 0) && $functionList.total - offset <= limit} + (showCreate = true)}> +
    + +
    +
    +

    Create a new function

    +
    +
    + {/if} +
    + +
    +

    Total results: {$functionList.total}

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

    Create your first function to get started

    +
    +
    + +
    +
    +
    + {/if} - + diff --git a/src/routes/console/project-[project]/functions/store.ts b/src/routes/console/project-[project]/functions/store.ts new file mode 100644 index 000000000..073e7eae0 --- /dev/null +++ b/src/routes/console/project-[project]/functions/store.ts @@ -0,0 +1,31 @@ +import { sdkForProject } from '$lib/stores/sdk'; +import type { Models } from '@aw-labs/appwrite-console'; +import { cachedStore } from '$lib/helpers/cache'; + +export const functionList = cachedStore< + Models.FunctionList, + { + load: (search: string, limit: number, offset: number) => Promise; + } +>('functionList', function ({ set }) { + return { + load: async (search, limit, offset) => { + const response = await sdkForProject.functions.list(search, limit, offset); + set(response); + } + }; +}); + +export const runtimeList = cachedStore< + Models.RuntimeList, + { + load: () => Promise; + } +>('runtimeList', function ({ set }) { + return { + load: async () => { + const response = await sdkForProject.functions.listRuntimes(); + set(response); + } + }; +}); diff --git a/static/icons/dark/color/node_js.svg b/static/icons/dark/color/node.svg similarity index 100% rename from static/icons/dark/color/node_js.svg rename to static/icons/dark/color/node.svg diff --git a/static/icons/dark/grayscale/node_js.svg b/static/icons/dark/grayscale/node.svg similarity index 100% rename from static/icons/dark/grayscale/node_js.svg rename to static/icons/dark/grayscale/node.svg diff --git a/static/icons/light/color/node_js.svg b/static/icons/light/color/node.svg similarity index 100% rename from static/icons/light/color/node_js.svg rename to static/icons/light/color/node.svg diff --git a/static/icons/light/grayscale/node_js.svg b/static/icons/light/grayscale/node.svg similarity index 100% rename from static/icons/light/grayscale/node_js.svg rename to static/icons/light/grayscale/node.svg From e840aec099a7df9090df9589f754bc8d714ae8df Mon Sep 17 00:00:00 2001 From: Arman Date: Fri, 16 Sep 2022 14:59:49 +0200 Subject: [PATCH 002/105] feat: function page layout --- .../project-[project]/functions/+page.svelte | 16 +- .../function/[function]/+layout.svelte | 16 +- .../function/[function]/+page.svelte | 189 ++++++++++++++---- .../[function]/executions/+page.svelte | 0 .../functions/function/[function]/store.ts | 36 +++- .../project-[project]/functions/store.ts | 14 -- 6 files changed, 186 insertions(+), 85 deletions(-) create mode 100644 src/routes/console/project-[project]/functions/function/[function]/executions/+page.svelte diff --git a/src/routes/console/project-[project]/functions/+page.svelte b/src/routes/console/project-[project]/functions/+page.svelte index 7be6e2caa..df00d138a 100644 --- a/src/routes/console/project-[project]/functions/+page.svelte +++ b/src/routes/console/project-[project]/functions/+page.svelte @@ -44,7 +44,7 @@ -
    +
    technology
    - {func.name} + {func.name}
    @@ -69,18 +69,6 @@ }} /> {/if} - diff --git a/src/routes/console/project-[project]/functions/function/[function]/+layout.svelte b/src/routes/console/project-[project]/functions/function/[function]/+layout.svelte index f10b26ad7..5838c6da9 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/+layout.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/+layout.svelte @@ -1,5 +1,6 @@ -

    Overview

    +
    +

    Deployments

    - -

    Function ID: {$func.$id}

    -

    Runtime: {$func.runtime}

    -

    Last Updated: {$func.$updatedAt}

    -

    Created: {$func.$createdAt}

    -
    + +
    -

    Deployments

    +
    +

    Active

    +
    + {#if activeDeployment} + +
    +
    + technology +
    +
    +

    Function ID: {$func.$id}

    +

    Deployment ID: {$func.deployment}

    +
    +
    + +
    +
    +

    Created at: {toLocaleDateTime($func.$createdAt)}

    +

    Updated at: {toLocaleDateTime($func.$updatedAt)}

    +

    Entrypoint: {activeDeployment?.entrypoint}

    +
    + status +
    +
    - - - + + + + +
    + {:else} + +
    +
    + +
    +
    +

    + Add a new deployment, or activate an existing one to see your function in + action. +

    +

    + Learn more about deployments in our + Documentation. +

    +
    +
    +
    + {/if} - {#await request} -
    - {:then response} - - - ID - Active - - - {#each response.deployments as deployment} - - - {deployment.$id} - - {deployment.activate} - - {/each} - -
    +
    +

    Inactive

    +
    - - {/await} + + + Deployment ID + Created + Status + Build time + Size + + + + {#each $deploymentList.deployments as deployment, index} + + + + + + + + {toLocaleDateTime(deployment.$createdAt)} + + {deployment.activate} + {deployment.entrypoint} + {deployment.size} + + + + + { + console.log('execute now'); + }}>Execute now + { + console.log('output'); + }}>Output + { + console.log('delete'); + }}>Delete + + + + + {/each} + +
    - +
    +

    Total results: {$deploymentList?.total}

    + +
    diff --git a/src/routes/console/project-[project]/functions/function/[function]/executions/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/executions/+page.svelte new file mode 100644 index 000000000..e69de29bb diff --git a/src/routes/console/project-[project]/functions/function/[function]/store.ts b/src/routes/console/project-[project]/functions/function/[function]/store.ts index 7763d1e7a..0dadaad60 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/store.ts +++ b/src/routes/console/project-[project]/functions/function/[function]/store.ts @@ -1,17 +1,35 @@ +import { cachedStore } from '$lib/helpers/cache'; import { sdkForProject } from '$lib/stores/sdk'; import type { Models } from '@aw-labs/appwrite-console'; -import { writable } from 'svelte/store'; - -function createFunctionStore() { - const { subscribe, set } = writable(); +export const func = cachedStore< + Models.Function, + { + load: (functionId: string) => Promise; + } +>('func', function ({ set }) { return { - subscribe, - set, - load: async (functionId: string) => { + load: async (functionId) => { set(await sdkForProject.functions.get(functionId)); } }; -} +}); -export const func = createFunctionStore(); +export const deploymentList = cachedStore< + Models.DeploymentList, + { + load: (functionId: string, search: string, limit: number, offset: number) => Promise; + } +>('deploymentList', function ({ set }) { + return { + load: async (functionId, search, limit, offset) => { + const response = await sdkForProject.functions.listDeployments( + functionId, + search, + limit, + offset + ); + set(response); + } + }; +}); diff --git a/src/routes/console/project-[project]/functions/store.ts b/src/routes/console/project-[project]/functions/store.ts index 073e7eae0..ba401a7e0 100644 --- a/src/routes/console/project-[project]/functions/store.ts +++ b/src/routes/console/project-[project]/functions/store.ts @@ -15,17 +15,3 @@ export const functionList = cachedStore< } }; }); - -export const runtimeList = cachedStore< - Models.RuntimeList, - { - load: () => Promise; - } ->('runtimeList', function ({ set }) { - return { - load: async () => { - const response = await sdkForProject.functions.listRuntimes(); - set(response); - } - }; -}); From 6d97faab76a1b63061789b9ec83428676446b0e8 Mon Sep 17 00:00:00 2001 From: Arman Date: Fri, 16 Sep 2022 15:05:49 +0200 Subject: [PATCH 003/105] feat: add no deployment emply --- .../function/[function]/+page.svelte | 246 ++++++++++-------- 1 file changed, 133 insertions(+), 113 deletions(-) diff --git a/src/routes/console/project-[project]/functions/function/[function]/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/+page.svelte index ee100a892..5362eb001 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/+page.svelte @@ -41,41 +41,134 @@ Create deployment
    - -
    -

    Active

    -
    - {#if activeDeployment} - -
    -
    - technology -
    -
    -

    Function ID: {$func.$id}

    -

    Deployment ID: {$func.deployment}

    -
    -
    - -
    -
    -

    Created at: {toLocaleDateTime($func.$createdAt)}

    -

    Updated at: {toLocaleDateTime($func.$updatedAt)}

    -

    Entrypoint: {activeDeployment?.entrypoint}

    + {#if $deploymentList?.total} +
    +

    Active

    +
    + {#if activeDeployment} + +
    +
    + technology +
    +
    +

    Function ID: {$func.$id}

    +

    Deployment ID: {$func.deployment}

    - status
    - + +
    +
    +

    Created at: {toLocaleDateTime($func.$createdAt)}

    +

    Updated at: {toLocaleDateTime($func.$updatedAt)}

    +

    Entrypoint: {activeDeployment?.entrypoint}

    +
    + status +
    +
    - - - - -
    + + + + + + {:else} + +
    +
    + +
    +
    +

    + Add a new deployment, or activate an existing one to see your function + in action. +

    +

    + Learn more about deployments in our + Documentation. +

    +
    +
    +
    + {/if} + +
    +

    Inactive

    +
    + + + + Deployment ID + Created + Status + Build time + Size + + + + {#each $deploymentList.deployments as deployment, index} + + + + + + + + {toLocaleDateTime(deployment.$createdAt)} + + {deployment.activate} + {deployment.entrypoint} + {deployment.size} + + + + + { + console.log('execute now'); + }}>Execute now + { + console.log('output'); + }}>Output + { + console.log('delete'); + }}>Delete + + + + + {/each} + +
    {:else}
    @@ -85,91 +178,18 @@
    -

    - Add a new deployment, or activate an existing one to see your function in - action. -

    -

    - Learn more about deployments in our - Documentation. -

    +

    Create your first deployment to get started

    +
    +
    +
    {/if} - -
    -

    Inactive

    -
    - - - - Deployment ID - Created - Status - Build time - Size - - - - {#each $deploymentList.deployments as deployment, index} - - - - - - - - {toLocaleDateTime(deployment.$createdAt)} - - {deployment.activate} - {deployment.entrypoint} - {deployment.size} - - - - - { - console.log('execute now'); - }}>Execute now - { - console.log('output'); - }}>Output - { - console.log('delete'); - }}>Delete - - - - - {/each} - -
    -

    Total results: {$deploymentList?.total}

    From 99429e924bd0be15d05f10cd4324dd7852c30d8d Mon Sep 17 00:00:00 2001 From: Arman Date: Fri, 16 Sep 2022 17:38:01 +0200 Subject: [PATCH 004/105] feat: execution page & more work on functions screens --- src/lib/elements/table/row.svelte | 2 +- .../functions/+layout.svelte | 7 +- .../function/[function]/+page.svelte | 28 +++++- .../function/[function]/_delete.svelte | 42 ++++++++ .../function/[function]/_execute.svelte | 6 ++ .../[function]/executions/+page.svelte | 95 +++++++++++++++++++ .../function/[function]/executions/store.ts | 22 +++++ .../function/[function]/logs/+page.svelte | 10 -- 8 files changed, 195 insertions(+), 17 deletions(-) create mode 100644 src/routes/console/project-[project]/functions/function/[function]/_delete.svelte create mode 100644 src/routes/console/project-[project]/functions/function/[function]/_execute.svelte create mode 100644 src/routes/console/project-[project]/functions/function/[function]/executions/store.ts delete mode 100644 src/routes/console/project-[project]/functions/function/[function]/logs/+page.svelte diff --git a/src/lib/elements/table/row.svelte b/src/lib/elements/table/row.svelte index 3a9808d96..5c9ed956d 100644 --- a/src/lib/elements/table/row.svelte +++ b/src/lib/elements/table/row.svelte @@ -1,3 +1,3 @@ -
    +
    diff --git a/src/routes/console/project-[project]/functions/+layout.svelte b/src/routes/console/project-[project]/functions/+layout.svelte index 7aa46d990..84a7d932f 100644 --- a/src/routes/console/project-[project]/functions/+layout.svelte +++ b/src/routes/console/project-[project]/functions/+layout.svelte @@ -3,6 +3,8 @@ import { updateLayout } from '$lib/stores/layout'; import { onMount } from 'svelte'; + let loaded = false; + onMount(handle); afterNavigate(handle); @@ -16,6 +18,7 @@ title: 'Functions' } }); + loaded = true; } @@ -23,4 +26,6 @@ Appwrite - Functions - +{#if loaded} + +{/if} diff --git a/src/routes/console/project-[project]/functions/function/[function]/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/+page.svelte index 5362eb001..208d41c1f 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/+page.svelte @@ -19,17 +19,24 @@ import { app } from '$lib/stores/app'; import { toLocaleDateTime } from '$lib/helpers/date'; import { pageLimit } from '$lib/stores/layout'; + import type { Models } from '@aw-labs/appwrite-console'; + import Execute from './_execute.svelte'; + import Delete from './_delete.svelte'; let search = ''; - let showCreate = false; let offset = 0; + let showCreate = false; let showDropdown = []; + let showDelete = false; + let showExecute = false; + + let selectedDeployment: Models.Deployment = null; const functionId = $page.params.function; $: deploymentList.load(functionId, search, $pageLimit, offset ?? 0); $: if (search) offset = 0; - $: activeDeployment = $deploymentList.deployments.find((d) => d.status === 'active'); + $: activeDeployment = $deploymentList.deployments.find((d) => d.status); @@ -73,7 +80,7 @@ - + {:else} @@ -150,17 +157,23 @@ { - console.log('execute now'); + selectedDeployment = deployment; + showDropdown = []; + showExecute = true; }}>Execute now { + selectedDeployment = deployment; + showDropdown = []; console.log('output'); }}>Output { - console.log('delete'); + selectedDeployment = deployment; + showDropdown = []; + showDelete = true; }}>Delete @@ -197,3 +210,8 @@ + +{#if selectedDeployment} + + +{/if} diff --git a/src/routes/console/project-[project]/functions/function/[function]/_delete.svelte b/src/routes/console/project-[project]/functions/function/[function]/_delete.svelte new file mode 100644 index 000000000..d0db684c9 --- /dev/null +++ b/src/routes/console/project-[project]/functions/function/[function]/_delete.svelte @@ -0,0 +1,42 @@ + + +
    + + Delete Deployment +

    Are you sure you want to delete this deployment?

    + + + + +
    +
    diff --git a/src/routes/console/project-[project]/functions/function/[function]/_execute.svelte b/src/routes/console/project-[project]/functions/function/[function]/_execute.svelte new file mode 100644 index 000000000..6851952d0 --- /dev/null +++ b/src/routes/console/project-[project]/functions/function/[function]/_execute.svelte @@ -0,0 +1,6 @@ + diff --git a/src/routes/console/project-[project]/functions/function/[function]/executions/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/executions/+page.svelte index e69de29bb..c34397951 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/executions/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/executions/+page.svelte @@ -0,0 +1,95 @@ + + + +
    +

    Logs

    +
    + {#if $executionList?.total} + + + Deployment ID + Created + Status + Trigger + Type + Build Time + + + {#each $executionList.executions as execution} + { + // selectedExecution = execution; + // showExecute = true; + }}> + + + + + + + {toLocaleDateTime(execution.$createdAt)} + + {execution.status} + + + {execution.trigger} + + + {execution.trigger} + {execution.time} + + {/each} + +
    + {:else} + +
    +
    + +
    +
    +

    Execute your function to view execution logs

    +
    +
    + +
    +
    +
    + {/if} +
    +

    Total results: {$executionList?.total}

    + +
    +
    diff --git a/src/routes/console/project-[project]/functions/function/[function]/executions/store.ts b/src/routes/console/project-[project]/functions/function/[function]/executions/store.ts new file mode 100644 index 000000000..ea783d8f5 --- /dev/null +++ b/src/routes/console/project-[project]/functions/function/[function]/executions/store.ts @@ -0,0 +1,22 @@ +import { sdkForProject } from '$lib/stores/sdk'; +import type { Models } from '@aw-labs/appwrite-console'; +import { cachedStore } from '$lib/helpers/cache'; + +export const executionList = cachedStore< + Models.ExecutionList, + { + load: (functionId: string, limit: number, offset: number, search: string) => Promise; + } +>('executionList', function ({ set }) { + return { + load: async (functionId, limit, offset, search) => { + const response = await sdkForProject.functions.listExecutions( + functionId, + limit, + offset, + search + ); + set(response); + } + }; +}); diff --git a/src/routes/console/project-[project]/functions/function/[function]/logs/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/logs/+page.svelte deleted file mode 100644 index 8613482b9..000000000 --- a/src/routes/console/project-[project]/functions/function/[function]/logs/+page.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - -

    Logs

    - - -
    From 8bfeac4f2d94592ff3f3fe560316622e1299af88 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 19 Sep 2022 18:01:28 +0200 Subject: [PATCH 005/105] feat: functions screens --- src/lib/elements/forms/form.svelte | 2 +- .../project-[project]/functions/+page.svelte | 13 +- .../function/[function]/+page.svelte | 142 +++++++++++------- .../function/[function]/_activate.svelte | 42 ++++++ .../function/[function]/_execute.svelte | 55 +++++++ .../function/[function]/settings/+page.svelte | 44 +++++- .../project-[project]/functions/store.ts | 4 + 7 files changed, 240 insertions(+), 62 deletions(-) create mode 100644 src/routes/console/project-[project]/functions/function/[function]/_activate.svelte diff --git a/src/lib/elements/forms/form.svelte b/src/lib/elements/forms/form.svelte index 020eabd08..aae39a36e 100644 --- a/src/lib/elements/forms/form.svelte +++ b/src/lib/elements/forms/form.svelte @@ -1,3 +1,3 @@ -
    + diff --git a/src/routes/console/project-[project]/functions/+page.svelte b/src/routes/console/project-[project]/functions/+page.svelte index df00d138a..0cc81387d 100644 --- a/src/routes/console/project-[project]/functions/+page.svelte +++ b/src/routes/console/project-[project]/functions/+page.svelte @@ -19,6 +19,7 @@ const limit = 6; const project = $page.params.project; + const handleCreate = async (event: CustomEvent) => { showCreate = false; await goto(`${base}/console/project-${project}/functions/function/${event.detail.$id}`); @@ -55,7 +56,17 @@ {func.name}
    - + {#await functionList.getDeployment(func.$id, func.deployment)} + status... + {:then deployment} + {#if deployment && deployment.$id} + {deployment.status} + {:else} + No deployment + {/if} + {/await} + {#if func.scheduleNext}
  • diff --git a/src/routes/console/project-[project]/functions/function/[function]/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/+page.svelte index 208d41c1f..d1543f609 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/+page.svelte @@ -22,6 +22,8 @@ import type { Models } from '@aw-labs/appwrite-console'; import Execute from './_execute.svelte'; import Delete from './_delete.svelte'; + import { calculateSize } from '$lib/helpers/sizeConvertion'; + import Activate from './_activate.svelte'; let search = ''; let offset = 0; @@ -29,14 +31,19 @@ let showDropdown = []; let showDelete = false; let showExecute = false; + let showActivate = false; let selectedDeployment: Models.Deployment = null; const functionId = $page.params.function; + const handleActivate = () => { + func.load(functionId); + }; + $: deploymentList.load(functionId, search, $pageLimit, offset ?? 0); $: if (search) offset = 0; - $: activeDeployment = $deploymentList.deployments.find((d) => d.status); + $: activeDeployment = $deploymentList?.deployments?.find((d) => d.$id === $func?.deployment); @@ -62,7 +69,7 @@ }.svg`} alt="technology" />
  • -
    +

    Function ID: {$func.$id}

    Deployment ID: {$func.deployment}

    @@ -74,13 +81,18 @@

    Updated at: {toLocaleDateTime($func.$updatedAt)}

    Entrypoint: {activeDeployment?.entrypoint}

    - status + {activeDeployment.status}
    - +
    {:else} @@ -122,63 +134,78 @@ Build time Size + {#each $deploymentList.deployments as deployment, index} - - - - - - - - {toLocaleDateTime(deployment.$createdAt)} - - {deployment.activate} - {deployment.entrypoint} - {deployment.size} - - - - - { - selectedDeployment = deployment; - showDropdown = []; - showExecute = true; - }}>Execute now - { - selectedDeployment = deployment; - showDropdown = []; - console.log('output'); - }}>Output - { - selectedDeployment = deployment; - showDropdown = []; - showDelete = true; - }}>Delete - - - - + Activate + + + + + + + { + selectedDeployment = deployment; + showDropdown = []; + showExecute = true; + }}>Execute now + { + selectedDeployment = deployment; + showDropdown = []; + console.log('output'); + }}>Output + { + selectedDeployment = deployment; + showDropdown = []; + showDelete = true; + }}>Delete + + + + + {/if} {/each} @@ -214,4 +241,5 @@ {#if selectedDeployment} + {/if} diff --git a/src/routes/console/project-[project]/functions/function/[function]/_activate.svelte b/src/routes/console/project-[project]/functions/function/[function]/_activate.svelte new file mode 100644 index 000000000..1496f2209 --- /dev/null +++ b/src/routes/console/project-[project]/functions/function/[function]/_activate.svelte @@ -0,0 +1,42 @@ + + +
    + + Activate Deployment +

    Are you sure you want to activate this deployment?

    + + + + +
    +
    diff --git a/src/routes/console/project-[project]/functions/function/[function]/_execute.svelte b/src/routes/console/project-[project]/functions/function/[function]/_execute.svelte index 6851952d0..5bf69a224 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/_execute.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/_execute.svelte @@ -1,6 +1,61 @@ + +
    + + Execute Function + + + + Here's an example of some custom data. + {#if showJson} +
    +            
    +{`name: 'John Doe',
    +age: 42,
    +    address: {
    +            street: '123 Main St',
    +            city: 'Anytown',
    +            state: 'CA',
    +            zip: '12345'
    +        }
    +`}
    +            
    +        
    + {/if} +
    + + + + + +
    +
    diff --git a/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte index c270642c7..9029e5d5c 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte @@ -1,10 +1,48 @@ -

    Settings

    + +
    +
    + technology +
    +
    +
    {$func.name}
    +

    {$func.runtime}

    +
    +
    + +
    +
    +

    Function ID: {$func.$id}

    +

    Created at: {toLocaleDateTime($func.$createdAt)}

    +

    Updated at: {toLocaleDateTime($func.$updatedAt)}

    +
    +
    +
    - + + + + +
    diff --git a/src/routes/console/project-[project]/functions/store.ts b/src/routes/console/project-[project]/functions/store.ts index ba401a7e0..d898f74a4 100644 --- a/src/routes/console/project-[project]/functions/store.ts +++ b/src/routes/console/project-[project]/functions/store.ts @@ -6,12 +6,16 @@ export const functionList = cachedStore< Models.FunctionList, { load: (search: string, limit: number, offset: number) => Promise; + getDeployment: (functionId: string, deploymentId: string) => Promise; } >('functionList', function ({ set }) { return { load: async (search, limit, offset) => { const response = await sdkForProject.functions.list(search, limit, offset); set(response); + }, + getDeployment: async (functionId, deploymentId) => { + return await sdkForProject.functions.getDeployment(functionId, deploymentId); } }; }); From 36b6fbb50af1141238c981cc76d8d1eab7dcb64b Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 20 Sep 2022 15:55:56 +0200 Subject: [PATCH 006/105] feat: start work on realtime --- .../project-[project]/functions/+layout.svelte | 17 ++++++++++++++++- .../functions/function/[function]/store.ts | 14 ++++++++++++-- .../project-[project]/functions/store.ts | 1 + 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/routes/console/project-[project]/functions/+layout.svelte b/src/routes/console/project-[project]/functions/+layout.svelte index 84a7d932f..cde79657d 100644 --- a/src/routes/console/project-[project]/functions/+layout.svelte +++ b/src/routes/console/project-[project]/functions/+layout.svelte @@ -1,10 +1,25 @@ - @@ -41,8 +87,52 @@ + + +

    Update Timeout

    +

    Limit the execution time of your function. Maximum value is 900 seconds (15 minutes).

    + +
    +
      + + +
    +
    +
    + + + + +
    + + +
    Delete Function
    +

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

    + + + +
    {$func.name}
    +
    +

    Last Updated: {toLocaleDateTime($func.$updatedAt)}

    +
    +
    + + + + +
    + + diff --git a/src/routes/console/project-[project]/functions/function/[function]/settings/_delete.svelte b/src/routes/console/project-[project]/functions/function/[function]/settings/_delete.svelte new file mode 100644 index 000000000..a3668ebcc --- /dev/null +++ b/src/routes/console/project-[project]/functions/function/[function]/settings/_delete.svelte @@ -0,0 +1,43 @@ + + +
    + + Delete Function +

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

    + + + + +
    +
    diff --git a/src/routes/console/project-[project]/functions/function/[function]/store.ts b/src/routes/console/project-[project]/functions/function/[function]/store.ts index 221fe8e43..0037e4f65 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/store.ts +++ b/src/routes/console/project-[project]/functions/function/[function]/store.ts @@ -1,16 +1,21 @@ import { cachedStore } from '$lib/helpers/cache'; import { sdkForProject } from '$lib/stores/sdk'; import type { Models } from '@aw-labs/appwrite-console'; +import { writable, type Writable } from 'svelte/store'; export const func = cachedStore< Models.Function, { load: (functionId: string) => Promise; + getDeployment: (functionId: string, deploymentId: string) => Promise; } >('func', function ({ set }) { return { load: async (functionId) => { set(await sdkForProject.functions.get(functionId)); + }, + getDeployment: async (functionId, deploymentId) => { + return await sdkForProject.functions.getDeployment(functionId, deploymentId); } }; }); @@ -43,3 +48,10 @@ export const deploymentList = cachedStore< }) }; }); + +export type Execute = { + show: boolean; + selected: Models.Deployment; +}; + +export const execute: Writable = writable({ show: false, selected: null }); diff --git a/src/routes/console/project-[project]/functions/store.ts b/src/routes/console/project-[project]/functions/store.ts index 156072fa8..b80097e44 100644 --- a/src/routes/console/project-[project]/functions/store.ts +++ b/src/routes/console/project-[project]/functions/store.ts @@ -1,12 +1,15 @@ import { sdkForProject } from '$lib/stores/sdk'; import type { Models } from '@aw-labs/appwrite-console'; import { cachedStore } from '$lib/helpers/cache'; +import { browser } from '$app/environment'; export const functionList = cachedStore< Models.FunctionList, { load: (search: string, limit: number, offset: number) => Promise; - getDeployment: (functionId: string, deploymentId: string) => Promise; + getDeployments: ( + functions: Models.Function[] + ) => Promise>; } >('functionList', function ({ set }) { return { @@ -15,8 +18,25 @@ export const functionList = cachedStore< set(response); }, - getDeployment: async (functionId, deploymentId) => { - return await sdkForProject.functions.getDeployment(functionId, deploymentId); + getDeployments: async (functions) => { + let activeDeployments = {}; + activeDeployments = browser + ? JSON.parse(sessionStorage.getItem('activeDeployments')) ?? {} + : {}; + + for (let i = 0; i < functions.length; i++) { + const fn = functions[i]; + if (fn.deployment) { + const response = await sdkForProject.functions.getDeployment( + fn.$id, + fn.deployment + ); + activeDeployments[fn.$id] = response; + } + } + + sessionStorage?.setItem('activeDeployments', JSON.stringify(activeDeployments)); + return activeDeployments; } }; }); From d6fc882186e94e6db9eaad7a569c8ae0f15909f6 Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 22 Sep 2022 11:46:18 +0200 Subject: [PATCH 008/105] feat: set up wizard --- .../project-[project]/functions/+page.svelte | 9 ++- .../functions/createFunction.svelte | 70 +++++++++++++++++ .../functions/wizard/step1.svelte | 76 +++++++++++++++++++ .../functions/wizard/step2.svelte | 16 ++++ .../functions/wizard/step3.svelte | 13 ++++ .../functions/wizard/step4.svelte | 18 +++++ .../functions/wizard/step5.svelte | 13 ++++ .../functions/wizard/store.ts | 21 +++++ 8 files changed, 234 insertions(+), 2 deletions(-) create mode 100644 src/routes/console/project-[project]/functions/createFunction.svelte create mode 100644 src/routes/console/project-[project]/functions/wizard/step1.svelte create mode 100644 src/routes/console/project-[project]/functions/wizard/step2.svelte create mode 100644 src/routes/console/project-[project]/functions/wizard/step3.svelte create mode 100644 src/routes/console/project-[project]/functions/wizard/step4.svelte create mode 100644 src/routes/console/project-[project]/functions/wizard/step5.svelte create mode 100644 src/routes/console/project-[project]/functions/wizard/store.ts diff --git a/src/routes/console/project-[project]/functions/+page.svelte b/src/routes/console/project-[project]/functions/+page.svelte index 716afe310..d9c5cf14b 100644 --- a/src/routes/console/project-[project]/functions/+page.svelte +++ b/src/routes/console/project-[project]/functions/+page.svelte @@ -5,7 +5,7 @@ import { Empty, EmptyGridItem, Pagination, Copy, GridItem1 } from '$lib/components'; import { Pill } from '$lib/elements'; import type { Models } from '@aw-labs/appwrite-console'; - import Create from './_create.svelte'; + import Create from './createFunction.svelte'; import { Container } from '$lib/layout'; import { base } from '$app/paths'; import { tooltip } from '$lib/actions/tooltip'; @@ -13,6 +13,7 @@ import { toLocaleDateTime } from '$lib/helpers/date'; import { app } from '$lib/stores/app'; import { onMount } from 'svelte'; + import { wizard } from '$lib/stores/wizard'; let showCreate = false; let search = ''; @@ -31,6 +32,10 @@ await goto(`${base}/console/project-${project}/functions/function/${event.detail.$id}`); }; + function openWizard() { + wizard.start(Create); + } + $: functionList.load(search, limit, offset ?? 0); @@ -38,7 +43,7 @@

    Functions

    -
    diff --git a/src/routes/console/project-[project]/functions/createFunction.svelte b/src/routes/console/project-[project]/functions/createFunction.svelte new file mode 100644 index 000000000..c19b97de5 --- /dev/null +++ b/src/routes/console/project-[project]/functions/createFunction.svelte @@ -0,0 +1,70 @@ + + + diff --git a/src/routes/console/project-[project]/functions/wizard/step1.svelte b/src/routes/console/project-[project]/functions/wizard/step1.svelte new file mode 100644 index 000000000..6216f4c1f --- /dev/null +++ b/src/routes/console/project-[project]/functions/wizard/step1.svelte @@ -0,0 +1,76 @@ + + + + Create your function + Let’s create a function. + + + + + +
      + {#if !showCustomId} +
      + (showCustomId = !showCustomId)}> + +
      + {:else} + + Function ID + Enter a custom function ID. Leave blank for a randomly generated one. + +
      + + +
      +
      +
      +
      +
      + {/if} +
    +
    +
    diff --git a/src/routes/console/project-[project]/functions/wizard/step2.svelte b/src/routes/console/project-[project]/functions/wizard/step2.svelte new file mode 100644 index 000000000..c70f4eabb --- /dev/null +++ b/src/routes/console/project-[project]/functions/wizard/step2.svelte @@ -0,0 +1,16 @@ + + + + Execute access (optional) + + Choose who can execute this function using the client API. Check out our documentation for + more on + Permissions. + + + ROLE + diff --git a/src/routes/console/project-[project]/functions/wizard/step3.svelte b/src/routes/console/project-[project]/functions/wizard/step3.svelte new file mode 100644 index 000000000..f0c313d68 --- /dev/null +++ b/src/routes/console/project-[project]/functions/wizard/step3.svelte @@ -0,0 +1,13 @@ + + + + Events (optional) + + Set the events that will trigger your function. Maximum 100 events allowed. + + + EVENT + diff --git a/src/routes/console/project-[project]/functions/wizard/step4.svelte b/src/routes/console/project-[project]/functions/wizard/step4.svelte new file mode 100644 index 000000000..494fd3950 --- /dev/null +++ b/src/routes/console/project-[project]/functions/wizard/step4.svelte @@ -0,0 +1,18 @@ + + + + Scheduling (optional) + + Set a CRON schedule to trigger your function. Leave blank for no schedule. More details on CRON syntax here. + + + EVENT + diff --git a/src/routes/console/project-[project]/functions/wizard/step5.svelte b/src/routes/console/project-[project]/functions/wizard/step5.svelte new file mode 100644 index 000000000..359f85468 --- /dev/null +++ b/src/routes/console/project-[project]/functions/wizard/step5.svelte @@ -0,0 +1,13 @@ + + + + Variables (optional) + + Create a variable (or secret key) that will be passed to your function at runtime. + + + EVENT + diff --git a/src/routes/console/project-[project]/functions/wizard/store.ts b/src/routes/console/project-[project]/functions/wizard/store.ts new file mode 100644 index 000000000..84daae263 --- /dev/null +++ b/src/routes/console/project-[project]/functions/wizard/store.ts @@ -0,0 +1,21 @@ +import { writable } from 'svelte/store'; + +export const createFunction = writable<{ + id?: string; + name: string; + execute: string[]; + runtime: string; + vars?: object; + events?: string[]; + schedule?: string; + timeout?: number; +}>({ + id: null, + name: null, + execute: [], + runtime: null, + vars: {}, + events: [], + schedule: null, + timeout: null +}); From 33e7f5aa3a0495710337230502d7a6d95dcfed5b Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 22 Sep 2022 12:07:02 +0200 Subject: [PATCH 009/105] chore: remove unused input --- src/lib/elements/forms/index.ts | 1 - src/lib/elements/forms/inputCustomId.svelte | 49 --------------------- 2 files changed, 50 deletions(-) delete mode 100644 src/lib/elements/forms/inputCustomId.svelte diff --git a/src/lib/elements/forms/index.ts b/src/lib/elements/forms/index.ts index 7ed7d656f..fbc893dac 100644 --- a/src/lib/elements/forms/index.ts +++ b/src/lib/elements/forms/index.ts @@ -10,7 +10,6 @@ export { default as InputNumber } from './inputNumber.svelte'; export { default as InputSwitch } from './inputSwitch.svelte'; export { default as InputTags } from './inputTags.svelte'; export { default as InputFile } from './inputFile.svelte'; -export { default as InputCustomId } from './inputCustomId.svelte'; export { default as InputSearch } from './inputSearch.svelte'; export { default as InputRadio } from './inputRadio.svelte'; export { default as InputSelect } from './inputSelect.svelte'; diff --git a/src/lib/elements/forms/inputCustomId.svelte b/src/lib/elements/forms/inputCustomId.svelte deleted file mode 100644 index 09d43093e..000000000 --- a/src/lib/elements/forms/inputCustomId.svelte +++ /dev/null @@ -1,49 +0,0 @@ - - - - -
    - - -
    -
    From aaf2623fcfe6f1756bcb1a94b6a82ab4c6f6a936 Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 22 Sep 2022 12:08:46 +0200 Subject: [PATCH 010/105] chore: remove old function creation modal --- .../project-[project]/functions/+page.svelte | 13 +------ .../functions/_create.svelte | 39 ------------------- 2 files changed, 2 insertions(+), 50 deletions(-) delete mode 100644 src/routes/console/project-[project]/functions/_create.svelte diff --git a/src/routes/console/project-[project]/functions/+page.svelte b/src/routes/console/project-[project]/functions/+page.svelte index d9c5cf14b..a75965495 100644 --- a/src/routes/console/project-[project]/functions/+page.svelte +++ b/src/routes/console/project-[project]/functions/+page.svelte @@ -1,6 +1,5 @@ - -
    - - Create Function - - - - - - -
    From 93a2609943a9f21cf62334496f8eddc5df658551 Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 22 Sep 2022 17:26:33 +0200 Subject: [PATCH 011/105] feat: WIP step 2 --- .../functions/wizard/step2.svelte | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/routes/console/project-[project]/functions/wizard/step2.svelte b/src/routes/console/project-[project]/functions/wizard/step2.svelte index c70f4eabb..4fc035b21 100644 --- a/src/routes/console/project-[project]/functions/wizard/step2.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step2.svelte @@ -1,6 +1,12 @@ @@ -13,4 +19,19 @@ ROLE + + + + + + Any + All guests + All users + (showUsers = true)}>Select users + (showTeams = true)}>Select teams + + From db71f46c75ca52b0f49de9177ca9830f88c671e2 Mon Sep 17 00:00:00 2001 From: Arman Date: Fri, 23 Sep 2022 12:25:59 +0200 Subject: [PATCH 012/105] feat: execute step --- .../functions/selectTeams.svelte | 86 ++++++++++++++++++ .../functions/selectUsers.svelte | 87 +++++++++++++++++++ .../functions/wizard/step2.svelte | 66 +++++++++++++- 3 files changed, 235 insertions(+), 4 deletions(-) create mode 100644 src/routes/console/project-[project]/functions/selectTeams.svelte create mode 100644 src/routes/console/project-[project]/functions/selectUsers.svelte diff --git a/src/routes/console/project-[project]/functions/selectTeams.svelte b/src/routes/console/project-[project]/functions/selectTeams.svelte new file mode 100644 index 000000000..77960eedf --- /dev/null +++ b/src/routes/console/project-[project]/functions/selectTeams.svelte @@ -0,0 +1,86 @@ + + + + Select teams + + {#if $teamsList?.total} +
    +
    +
      + {#each $teamsList.teams as team} +
    • +
      + { + handleCheck(team.$id); + }} /> + +
      +
    • + {/each} +
    +
    +
    +
    +

    Total results: {$teamsList?.total}

    + +
    + + +
    +
    + {/if} + + + + +
    diff --git a/src/routes/console/project-[project]/functions/selectUsers.svelte b/src/routes/console/project-[project]/functions/selectUsers.svelte new file mode 100644 index 000000000..2fce94ec5 --- /dev/null +++ b/src/routes/console/project-[project]/functions/selectUsers.svelte @@ -0,0 +1,87 @@ + + + + Select Users + + {#if $usersList?.total} +
    +
    +
      + {#each $usersList.users as user} +
    • +
      + { + handleCheck(user.$id); + }} /> + +
      +
    • + {/each} +
    +
    +
    + +
    +

    Total results: {$usersList?.total}

    + +
    + + +
    +
    + {/if} + + + + +
    diff --git a/src/routes/console/project-[project]/functions/wizard/step2.svelte b/src/routes/console/project-[project]/functions/wizard/step2.svelte index 4fc035b21..c31e8cc21 100644 --- a/src/routes/console/project-[project]/functions/wizard/step2.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step2.svelte @@ -2,7 +2,9 @@ import { WizardStep } from '$lib/layout'; import { Button } from '$lib/elements/forms'; import { DropList, DropListItem } from '$lib/components'; - // import { createFunction } from './store'; + import { createFunction } from './store'; + import SelectUsers from '../selectUsers.svelte'; + import SelectTeams from '../selectTeams.svelte'; let showDropdown = false; let showUsers = false; @@ -20,6 +22,41 @@ ROLE +
    +
    +
    +
      + {#each $createFunction.execute as id} +
    • +
      + blahblahkey +
      +
      + {id} +
      +
      + +
      +
    • + {/each} +
    +
    +
    +
    + - Any - All guests - All users + { + $createFunction.execute.push('role:any'); + $createFunction = $createFunction; + }}> + Any + + { + $createFunction.execute.push('role:guest'); + $createFunction = $createFunction; + }}> + All guests + + { + $createFunction.execute.push('role:member'); + $createFunction = $createFunction; + }}> + All users + (showUsers = true)}>Select users (showTeams = true)}>Select teams + + + From efa7e52e9c6422a8457f229416cdb35d4296f02f Mon Sep 17 00:00:00 2001 From: Arman Date: Fri, 23 Sep 2022 15:40:33 +0200 Subject: [PATCH 013/105] feat: more work on step 2 --- .../functions/selectTeams.svelte | 2 +- .../functions/selectUsers.svelte | 2 +- .../functions/wizard/step2.svelte | 86 ++++++++++--------- 3 files changed, 48 insertions(+), 42 deletions(-) diff --git a/src/routes/console/project-[project]/functions/selectTeams.svelte b/src/routes/console/project-[project]/functions/selectTeams.svelte index 77960eedf..0331d32b2 100644 --- a/src/routes/console/project-[project]/functions/selectTeams.svelte +++ b/src/routes/console/project-[project]/functions/selectTeams.svelte @@ -81,6 +81,6 @@ {/if} - + diff --git a/src/routes/console/project-[project]/functions/selectUsers.svelte b/src/routes/console/project-[project]/functions/selectUsers.svelte index 2fce94ec5..5dd584334 100644 --- a/src/routes/console/project-[project]/functions/selectUsers.svelte +++ b/src/routes/console/project-[project]/functions/selectUsers.svelte @@ -82,6 +82,6 @@ {/if} - + diff --git a/src/routes/console/project-[project]/functions/wizard/step2.svelte b/src/routes/console/project-[project]/functions/wizard/step2.svelte index c31e8cc21..41361eadb 100644 --- a/src/routes/console/project-[project]/functions/wizard/step2.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step2.svelte @@ -1,7 +1,7 @@ @@ -21,41 +29,42 @@ ROLE - -
    -
    -
    -
      - {#each $createFunction.execute as id} -
    • -
      - blahblahkey -
      -
      - {id} -
      -
      - -
      -
    • - {/each} -
    + {#if $createFunction?.execute?.length} +
    +
    +
    +
      + {#each $createFunction.execute as id} +
    • +
      + {id} +
      +
      + +
      +
    • + {/each} +
    +
    -
    + {:else} + Add a role to get started + {/if} + + + + diff --git a/src/routes/console/project-[project]/functions/function/[function]/_create.svelte b/src/routes/console/project-[project]/functions/function/[function]/_create.svelte index 27a7459de..2e7507010 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/_create.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/_create.svelte @@ -62,8 +62,8 @@ {/if} - + diff --git a/src/routes/console/project-[project]/functions/wizard/step3.svelte b/src/routes/console/project-[project]/functions/wizard/step3.svelte index f0c313d68..34976572d 100644 --- a/src/routes/console/project-[project]/functions/wizard/step3.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step3.svelte @@ -1,6 +1,11 @@ @@ -10,4 +15,46 @@ EVENT + {#if $createFunction?.events?.length} +
    +
    +
    +
      + {#each $createFunction.events as id} +
    • +
      + {id} +
      +
      + +
      +
    • + {/each} +
    +
    +
    +
    + {:else} + Add a role to get started + {/if} + +
    + + From ce644a26c70fb30cc3e6362fd1eb8eac3207bb49 Mon Sep 17 00:00:00 2001 From: Arman Date: Sun, 25 Sep 2022 13:20:32 +0200 Subject: [PATCH 015/105] feat: input cron & validation (WIP) --- src/lib/elements/forms/form.svelte | 6 +- src/lib/elements/forms/index.ts | 1 + src/lib/elements/forms/inputCron.svelte | 74 +++++++++++++++++ .../function/[function]/settings/+page.svelte | 81 ++++++++++++++----- .../functions/wizard/step4.svelte | 11 ++- 5 files changed, 147 insertions(+), 26 deletions(-) create mode 100644 src/lib/elements/forms/inputCron.svelte diff --git a/src/lib/elements/forms/form.svelte b/src/lib/elements/forms/form.svelte index 4f0114528..e261f6af7 100644 --- a/src/lib/elements/forms/form.svelte +++ b/src/lib/elements/forms/form.svelte @@ -1,4 +1,8 @@ + + -
    + diff --git a/src/lib/elements/forms/index.ts b/src/lib/elements/forms/index.ts index fbc893dac..966eaecaf 100644 --- a/src/lib/elements/forms/index.ts +++ b/src/lib/elements/forms/index.ts @@ -16,4 +16,5 @@ export { default as InputSelect } from './inputSelect.svelte'; export { default as InputCheckbox } from './inputCheckbox.svelte'; export { default as InputChoice } from './inputChoice.svelte'; export { default as InputPhone } from './inputPhone.svelte'; +export { default as InputCron } from './inputCron.svelte'; export { default as Helper } from './helper.svelte'; diff --git a/src/lib/elements/forms/inputCron.svelte b/src/lib/elements/forms/inputCron.svelte new file mode 100644 index 000000000..e91cca949 --- /dev/null +++ b/src/lib/elements/forms/inputCron.svelte @@ -0,0 +1,74 @@ + + + + +
    + +
    + {#if error} + {error} + {/if} +
    diff --git a/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte index c591dee6a..45d114ffe 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte @@ -1,7 +1,14 @@ @@ -12,7 +13,11 @@ rel="noopener noreferrer" class="link">More details on CRON syntax here. + + + - - EVENT From 7ef63a4424c9bd3668994a9fe7d81748964f88f5 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 26 Sep 2022 12:30:20 +0200 Subject: [PATCH 016/105] feat: initial setup steps --- .../functions/wizard/step1.svelte | 8 +-- .../functions/wizard/step4.svelte | 12 ++--- .../functions/wizard/step5.svelte | 51 ++++++++++++++++++- 3 files changed, 59 insertions(+), 12 deletions(-) diff --git a/src/routes/console/project-[project]/functions/wizard/step1.svelte b/src/routes/console/project-[project]/functions/wizard/step1.svelte index 6216f4c1f..cc3ac8485 100644 --- a/src/routes/console/project-[project]/functions/wizard/step1.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step1.svelte @@ -9,10 +9,10 @@ let showCustomId = false; let options = [ - { label: 'Node.js 16.0', value: 'nodejs' }, - { label: 'PHP 8.0', value: 'php' }, - { label: 'Ruby 3.0', value: 'ruby' }, - { label: 'Python 3.9', value: 'python' } + { label: 'Node.js 16.0', value: 'node-16.0' }, + { label: 'PHP 8.0', value: 'php-8.0' }, + { label: 'Ruby 3.0', value: 'ruby-3.0' }, + { label: 'Python 3.9', value: 'python-3.9' } ]; diff --git a/src/routes/console/project-[project]/functions/wizard/step4.svelte b/src/routes/console/project-[project]/functions/wizard/step4.svelte index 6529ddb91..1adcbf147 100644 --- a/src/routes/console/project-[project]/functions/wizard/step4.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step4.svelte @@ -13,11 +13,11 @@ rel="noopener noreferrer" class="link">More details on CRON syntax here. - - - + + + diff --git a/src/routes/console/project-[project]/functions/wizard/step5.svelte b/src/routes/console/project-[project]/functions/wizard/step5.svelte index 359f85468..00768ade1 100644 --- a/src/routes/console/project-[project]/functions/wizard/step5.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step5.svelte @@ -1,6 +1,6 @@ @@ -9,5 +9,52 @@ Create a variable (or secret key) that will be passed to your function at runtime. - EVENT + + + + + + + + + {#if $createFunction.vars} + {#each Object.entries($createFunction.vars) as [key, value]} + + + + + + {/each} + {/if} + +
    + Key + + Value + +
    + {key} + +
    + + +
    +
    + +
    +
    + +
    From c3cad4a1dec8c4ee0a4c9bc09bc6186c966f5a46 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 26 Sep 2022 13:27:07 +0200 Subject: [PATCH 017/105] fix: remove regex --- src/lib/elements/forms/inputCron.svelte | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/lib/elements/forms/inputCron.svelte b/src/lib/elements/forms/inputCron.svelte index e91cca949..b7a2e7c1d 100644 --- a/src/lib/elements/forms/inputCron.svelte +++ b/src/lib/elements/forms/inputCron.svelte @@ -6,7 +6,7 @@ export let showLabel = true; export let id: string; export let value: string = null; - export let placeholder = ''; + export let placeholder = '* * * * *'; export let required = false; export let disabled = false; export let readonly = false; @@ -18,10 +18,6 @@ let element: HTMLInputElement; let error: string; - let pattern = new RegExp( - /^(\*|([0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])|\*\/([0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])) (\*|([0-9]|1[0-9]|2[0-3])|\*\/([0-9]|1[0-9]|2[0-3])) (\*|([1-9]|1[0-9]|2[0-9]|3[0-1])|\*\/([1-9]|1[0-9]|2[0-9]|3[0-1])) (\*|([1-9]|1[0-2])|\*\/([1-9]|1[0-2])) (\*|([0-6])|\*\/([0-6]))$/ - ); - onMount(() => { if (element && autofocus) { element.focus(); @@ -63,7 +59,6 @@ {step} type="text" class="input-text" - {pattern} bind:value bind:this={element} on:invalid={handleInvalid} /> From 1cb98c6f8dc2d7d584404a911f521158b26ed7a9 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 26 Sep 2022 13:55:53 +0200 Subject: [PATCH 018/105] feat: time conversion --- src/lib/helpers/timeConversion.ts | 25 +++++++++++++++++++ .../[function]/executions/+page.svelte | 4 ++- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/lib/helpers/timeConversion.ts diff --git a/src/lib/helpers/timeConversion.ts b/src/lib/helpers/timeConversion.ts new file mode 100644 index 000000000..c98521c53 --- /dev/null +++ b/src/lib/helpers/timeConversion.ts @@ -0,0 +1,25 @@ +export function calculateTime(time: number) { + const milliseconds = Math.floor(time * 1000); + const seconds = Math.floor(time); + const minutes = Math.floor(seconds / 60); + const hours = Math.floor(minutes / 60); + const days = Math.floor(hours / 24); + const months = Math.floor(days / 30); + const years = Math.floor(months / 12); + + if (milliseconds < 1000) { + return milliseconds + 'ms'; + } else if (seconds < 60) { + return `${seconds} s`; + } else if (minutes < 60) { + return `${minutes} m`; + } else if (hours < 24) { + return `${hours} h`; + } else if (days < 30) { + return `${days} d`; + } else if (months < 12) { + return `${months} M`; + } else { + return `${years} y`; + } +} diff --git a/src/routes/console/project-[project]/functions/function/[function]/executions/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/executions/+page.svelte index 00b3d5ac0..fafc3bf15 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/executions/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/executions/+page.svelte @@ -18,6 +18,7 @@ TableCellText } from '$lib/elements/table'; import { toLocaleDateTime } from '$lib/helpers/date'; + import { calculateTime } from '$lib/helpers/timeConversion'; let search = ''; let offset = 0; @@ -62,7 +63,8 @@ {execution.trigger} - {execution.time} + + {calculateTime(execution.time)} {/each} From c3c95d70976bf87fbc70040f327a3649069c5ba6 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 26 Sep 2022 15:00:19 +0200 Subject: [PATCH 019/105] feat: start work on create event --- .../project-[project]/functions/createEvent.svelte | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/routes/console/project-[project]/functions/createEvent.svelte b/src/routes/console/project-[project]/functions/createEvent.svelte index 5f24825f7..088adce3e 100644 --- a/src/routes/console/project-[project]/functions/createEvent.svelte +++ b/src/routes/console/project-[project]/functions/createEvent.svelte @@ -3,6 +3,7 @@ import { Modal } from '$lib/components'; import { createEventDispatcher } from 'svelte'; import { addNotification } from '$lib/stores/notifications'; + import { Pill } from '$lib/elements'; export let showCreate = false; @@ -19,12 +20,21 @@ }); } }; + + const services = ['buckets', 'database', 'functions', 'teams', 'users']; + + // const databases = ['collections', 'documents'];
    Create Event +
    + {#each services as service} + {service} + {/each} +
    From eef12067e7719a255374deb8a15648e28fc70304 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 26 Sep 2022 15:13:23 +0200 Subject: [PATCH 020/105] fix: wizard --- src/routes/console/project-[project]/functions/+page.svelte | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/routes/console/project-[project]/functions/+page.svelte b/src/routes/console/project-[project]/functions/+page.svelte index a75965495..994d8e63e 100644 --- a/src/routes/console/project-[project]/functions/+page.svelte +++ b/src/routes/console/project-[project]/functions/+page.svelte @@ -13,6 +13,7 @@ import { app } from '$lib/stores/app'; import { onMount } from 'svelte'; import { wizard } from '$lib/stores/wizard'; + import { beforeNavigate } from '$app/navigation'; let search = ''; let offset = 0; @@ -29,6 +30,10 @@ wizard.start(Create); } + beforeNavigate(() => { + wizard.hide(); + }); + $: functionList.load(search, limit, offset ?? 0); From 6b257e99eddf13c53e582acd70b49cb1efa0a091 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 26 Sep 2022 17:46:39 +0200 Subject: [PATCH 021/105] feat: start work on create event --- .../functions/createEvent.svelte | 110 +++++++++++++++++- 1 file changed, 104 insertions(+), 6 deletions(-) diff --git a/src/routes/console/project-[project]/functions/createEvent.svelte b/src/routes/console/project-[project]/functions/createEvent.svelte index 088adce3e..041a759e2 100644 --- a/src/routes/console/project-[project]/functions/createEvent.svelte +++ b/src/routes/console/project-[project]/functions/createEvent.svelte @@ -6,6 +6,10 @@ import { Pill } from '$lib/elements'; export let showCreate = false; + let selectedService: typeof services[0] = null; + let selectedRequest: any; + let selectedEvent: string = null; + let selectedAttribute: string = null; const dispatch = createEventDispatcher(); @@ -21,20 +25,114 @@ } }; - const services = ['buckets', 'database', 'functions', 'teams', 'users']; + const events = ['create', 'update', 'delete']; - // const databases = ['collections', 'documents']; + const services = [ + { + name: 'buckets', + requests: [{ name: 'files', events }], + events + }, + { + name: 'databases', + requests: [ + { name: 'collections', events }, + { name: 'documents', events } + ], + events + }, + { + name: 'functions', + requests: [ + { name: 'deployments', events }, + { name: 'executions', events } + ], + events + }, + { + name: 'teams', + requests: [{ name: 'memberships', events }], + events + }, + { + name: 'users', + requests: [ + { name: 'recovery', events: ['create', 'delete'] }, + { name: 'sessions', events: ['create', 'delete'] }, + { name: 'verifications', events: ['create', 'delete'] } + ], + events, + attributes: ['email', 'name', 'password', 'status', 'prefs'] + } + ]; Create Event -
    - {#each services as service} - {service} - {/each} +
    +

    Choose a service

    +
    + {#each services as service} + (selectedService = service)}>{service.name} + {/each} +
    + {#if selectedService} +
    +

    Choose a request (optional)

    +
    + {#each selectedService.requests as request} + { + selectedRequest === request + ? (selectedRequest = null) + : (selectedRequest = request); + }}>{request.name} + {/each} +
    +
    +
    +

    Choose an event (optional)

    +
    + {#each selectedRequest?.events ?? selectedService?.events as event} + { + selectedEvent === event + ? (selectedEvent = null) + : (selectedEvent = event); + }}>{event} + {/each} +
    +
    + {#if selectedService?.name === 'users' && !selectedRequest?.name} +
    +

    Choose an attribute (optional)

    +
    + {#each selectedService?.attributes as attribute} + { + selectedAttribute === attribute + ? (selectedAttribute = null) + : (selectedAttribute = attribute); + }}>{attribute} + {/each} +
    +
    + {/if} + {selectedService?.name}.{selectedRequest?.name}.{selectedEvent} + {/if} + From b8f33f7e95a5f43e11cf2bdc52ef793ff8705321 Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 27 Sep 2022 17:36:53 +0200 Subject: [PATCH 022/105] feat: create function logic --- src/lib/elements/forms/button.svelte | 1 - .../functions/createEvent.svelte | 82 +++++++++++++++---- .../functions/createFunction.svelte | 2 +- .../functions/createVariable.svelte | 37 +++++++++ .../functions/wizard/step5.svelte | 50 +++++++++-- 5 files changed, 148 insertions(+), 24 deletions(-) create mode 100644 src/routes/console/project-[project]/functions/createVariable.svelte diff --git a/src/lib/elements/forms/button.svelte b/src/lib/elements/forms/button.svelte index c89eb1148..51e00f0e1 100644 --- a/src/lib/elements/forms/button.svelte +++ b/src/lib/elements/forms/button.svelte @@ -9,7 +9,6 @@ export let href: string = null; export let fullWidth = false; export let ariaLabel: string = null; - //TODO: add option to add aria-label to buttons that are only icons {#if href} diff --git a/src/routes/console/project-[project]/functions/createEvent.svelte b/src/routes/console/project-[project]/functions/createEvent.svelte index 041a759e2..d3de9866a 100644 --- a/src/routes/console/project-[project]/functions/createEvent.svelte +++ b/src/routes/console/project-[project]/functions/createEvent.svelte @@ -1,28 +1,21 @@ @@ -130,7 +168,19 @@
    {/if} - {selectedService?.name}.{selectedRequest?.name}.{selectedEvent} +
    + {#each eventString as route, i} + + {/each} +
    + {#if showInfo} + {showInfo} + {/if} {/if} diff --git a/src/routes/console/project-[project]/functions/createFunction.svelte b/src/routes/console/project-[project]/functions/createFunction.svelte index c19b97de5..2e609e899 100644 --- a/src/routes/console/project-[project]/functions/createFunction.svelte +++ b/src/routes/console/project-[project]/functions/createFunction.svelte @@ -26,7 +26,7 @@ $createFunction.timeout ); addNotification({ - message: 'Document has been created', + message: 'Function has been created', type: 'success' }); functionList.load('', 12, 0); diff --git a/src/routes/console/project-[project]/functions/createVariable.svelte b/src/routes/console/project-[project]/functions/createVariable.svelte new file mode 100644 index 000000000..e977eebca --- /dev/null +++ b/src/routes/console/project-[project]/functions/createVariable.svelte @@ -0,0 +1,37 @@ + + + + + Create Variable + + + + + + + + + + diff --git a/src/routes/console/project-[project]/functions/wizard/step5.svelte b/src/routes/console/project-[project]/functions/wizard/step5.svelte index 00768ade1..21071a300 100644 --- a/src/routes/console/project-[project]/functions/wizard/step5.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step5.svelte @@ -1,6 +1,13 @@ @@ -23,23 +30,52 @@ {#if $createFunction.vars} - {#each Object.entries($createFunction.vars) as [key, value]} + {#each Object.entries($createFunction.vars) as [key, value], i} {key}
    -
    - + + + + { + selectedKey = key; + showCreate = true; + }}> + Edit + + { + delete $createFunction.vars[key]; + }}> + Delete + + + {/each} @@ -51,10 +87,12 @@ class="button is-text u-padding-inline-0" type="button" on:click={() => { - $createFunction.vars[''] = ''; + showCreate = true; }}>
    + + From 3d173d9cc8cbec99ad23c346535864fda1d121e3 Mon Sep 17 00:00:00 2001 From: Arman Date: Wed, 28 Sep 2022 11:08:30 +0200 Subject: [PATCH 023/105] chore: bump css to 0.0.0-56 --- package-lock.json | 28 ++++++++++++++-------------- package.json | 4 ++-- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3e76041ff..be527892e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "version": "0.0.1", "dependencies": { "@aw-labs/appwrite-console": "^5.0.5", - "@aw-labs/icons": "0.0.0-55", - "@aw-labs/ui": "0.0.0-55", + "@aw-labs/icons": "0.0.0-56", + "@aw-labs/ui": "0.0.0-56", "echarts": "^5.3.3", "tippy.js": "^6.3.7", "web-vitals": "^2.1.4" @@ -77,14 +77,14 @@ } }, "node_modules/@aw-labs/icons": { - "version": "0.0.0-55", - "resolved": "https://registry.npmjs.org/@aw-labs/icons/-/icons-0.0.0-55.tgz", - "integrity": "sha512-d0SkIdojCodV9Amu4l63DzVw6AH3pjyhGSfwS3jWb9KMztVOgMHnJ1tXooFUjvglALToSNHH/C9ATAN5HsqpDQ==" + "version": "0.0.0-56", + "resolved": "https://registry.npmjs.org/@aw-labs/icons/-/icons-0.0.0-56.tgz", + "integrity": "sha512-mtJD3iJM80QlUugyqkOLVolxxKUvrh6+8tXYxzINRaJki4f8jueyYYNO0SIe/dM/w8+3u+CPEyxUzLzRKksSQg==" }, "node_modules/@aw-labs/ui": { - "version": "0.0.0-55", - "resolved": "https://registry.npmjs.org/@aw-labs/ui/-/ui-0.0.0-55.tgz", - "integrity": "sha512-sEWRRwX3Omx7P/q9e52xYFdmSpHlTRPDpVU6ulBVwNcWOO9wduHQeuQyE0wqtGffvd51Fq27I5NWukWu5tkFlw==", + "version": "0.0.0-56", + "resolved": "https://registry.npmjs.org/@aw-labs/ui/-/ui-0.0.0-56.tgz", + "integrity": "sha512-o8vngVXOom3pA3MnE8jzikS0TA8rbn2b0PsA/P+STF5hsgw7AaNLG5IkWO4lzFVDgNgZu2KsmSM44eA+LKSbKw==", "dependencies": { "@aw-labs/icons": "*" } @@ -8201,14 +8201,14 @@ } }, "@aw-labs/icons": { - "version": "0.0.0-55", - "resolved": "https://registry.npmjs.org/@aw-labs/icons/-/icons-0.0.0-55.tgz", - "integrity": "sha512-d0SkIdojCodV9Amu4l63DzVw6AH3pjyhGSfwS3jWb9KMztVOgMHnJ1tXooFUjvglALToSNHH/C9ATAN5HsqpDQ==" + "version": "0.0.0-56", + "resolved": "https://registry.npmjs.org/@aw-labs/icons/-/icons-0.0.0-56.tgz", + "integrity": "sha512-mtJD3iJM80QlUugyqkOLVolxxKUvrh6+8tXYxzINRaJki4f8jueyYYNO0SIe/dM/w8+3u+CPEyxUzLzRKksSQg==" }, "@aw-labs/ui": { - "version": "0.0.0-55", - "resolved": "https://registry.npmjs.org/@aw-labs/ui/-/ui-0.0.0-55.tgz", - "integrity": "sha512-sEWRRwX3Omx7P/q9e52xYFdmSpHlTRPDpVU6ulBVwNcWOO9wduHQeuQyE0wqtGffvd51Fq27I5NWukWu5tkFlw==", + "version": "0.0.0-56", + "resolved": "https://registry.npmjs.org/@aw-labs/ui/-/ui-0.0.0-56.tgz", + "integrity": "sha512-o8vngVXOom3pA3MnE8jzikS0TA8rbn2b0PsA/P+STF5hsgw7AaNLG5IkWO4lzFVDgNgZu2KsmSM44eA+LKSbKw==", "requires": { "@aw-labs/icons": "*" } diff --git a/package.json b/package.json index 69131f47e..e2d075443 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,8 @@ }, "dependencies": { "@aw-labs/appwrite-console": "^5.0.5", - "@aw-labs/icons": "0.0.0-55", - "@aw-labs/ui": "0.0.0-55", + "@aw-labs/icons": "0.0.0-56", + "@aw-labs/ui": "0.0.0-56", "echarts": "^5.3.3", "tippy.js": "^6.3.7", "web-vitals": "^2.1.4" From 1dba08717a3d474dc4e53256245928dc3f6f3526 Mon Sep 17 00:00:00 2001 From: Arman Date: Wed, 28 Sep 2022 11:09:06 +0200 Subject: [PATCH 024/105] feat: function create variable --- .../functions/createVariable.svelte | 22 ++++++--- .../functions/wizard/step5.svelte | 46 ++++++++++++++----- 2 files changed, 51 insertions(+), 17 deletions(-) diff --git a/src/routes/console/project-[project]/functions/createVariable.svelte b/src/routes/console/project-[project]/functions/createVariable.svelte index e977eebca..88032d3b0 100644 --- a/src/routes/console/project-[project]/functions/createVariable.svelte +++ b/src/routes/console/project-[project]/functions/createVariable.svelte @@ -6,18 +6,28 @@ export let showCreate = false; - export let key: string = null; - let value = $createFunction.vars[key]; + export let selectedKey: string = null; + let key = selectedKey; + let value = $createFunction?.vars[key]; - const create = async () => { + const create = () => { + if (selectedKey) { + delete Object.assign($createFunction.vars, { + [key]: $createFunction.vars[selectedKey] + })[selectedKey]; + $createFunction.vars[key] = value; + selectedKey = null; + } else { + $createFunction.vars[key] = value; + } showCreate = false; - $createFunction.vars[key] = value; };
    - Create Variable + {selectedKey ? 'Update' : 'Create'} Variable - +
    diff --git a/src/routes/console/project-[project]/functions/wizard/step5.svelte b/src/routes/console/project-[project]/functions/wizard/step5.svelte index 21071a300..3033917a9 100644 --- a/src/routes/console/project-[project]/functions/wizard/step5.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step5.svelte @@ -2,12 +2,13 @@ import { WizardStep } from '$lib/layout'; import { createFunction } from './store'; import Create from '../createVariable.svelte'; - import { DropList, DropListItem } from '$lib/components'; + import { DropList, DropListItem, Copy } from '$lib/components'; let showCreate = false; let selectedKey: string = null; let showDropdown = []; + let showValue = []; @@ -36,14 +37,32 @@ {key} -
    - - +
    + {#if showValue[i]} + {value} + {:else} + •••••••• + {/if} +
    + + + + +
    @@ -55,7 +74,8 @@ @@ -63,6 +83,7 @@ icon="pencil" on:click={() => { selectedKey = key; + showDropdown[i] = false; showCreate = true; }}> Edit @@ -71,6 +92,7 @@ icon="trash" on:click={() => { delete $createFunction.vars[key]; + showDropdown[i] = false; }}> Delete @@ -95,4 +117,6 @@
    - +{#if showCreate} + +{/if} From e8a36151874fc904e8c9d5a01cc3e0715f8f37a0 Mon Sep 17 00:00:00 2001 From: Arman Date: Wed, 28 Sep 2022 11:29:35 +0200 Subject: [PATCH 025/105] fix: add typings --- .../project-[project]/functions/createEvent.svelte | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/routes/console/project-[project]/functions/createEvent.svelte b/src/routes/console/project-[project]/functions/createEvent.svelte index d3de9866a..f97defcfa 100644 --- a/src/routes/console/project-[project]/functions/createEvent.svelte +++ b/src/routes/console/project-[project]/functions/createEvent.svelte @@ -59,8 +59,12 @@ } ]; - //TODO: add types - function createEventString(service, request, event, attribute) { + function createEventString( + service: typeof selectedService, + request: typeof selectedRequest, + event: string, + attribute: string + ) { let data = []; //SERVICE if (service) { From 888e7405d5350b49f4aaf817abf0d195835ca55e Mon Sep 17 00:00:00 2001 From: Arman Date: Wed, 28 Sep 2022 11:40:42 +0200 Subject: [PATCH 026/105] fix: binding --- .../console/project-[project]/functions/wizard/step3.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/functions/wizard/step3.svelte b/src/routes/console/project-[project]/functions/wizard/step3.svelte index 34976572d..8f08a781f 100644 --- a/src/routes/console/project-[project]/functions/wizard/step3.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step3.svelte @@ -57,4 +57,4 @@ - + From c1f178d480c196c9c923bcf3920e477ac3439c98 Mon Sep 17 00:00:00 2001 From: Arman Date: Wed, 28 Sep 2022 13:42:23 +0200 Subject: [PATCH 027/105] fix: rename `commonSection` to `single` --- src/lib/elements/forms/form.svelte | 4 ++-- .../console/project-[project]/functions/createEvent.svelte | 2 +- .../console/project-[project]/functions/createVariable.svelte | 2 +- .../functions/function/[function]/_activate.svelte | 2 +- .../functions/function/[function]/_create.svelte | 2 +- .../functions/function/[function]/_delete.svelte | 2 +- .../functions/function/[function]/_execute.svelte | 2 +- .../functions/function/[function]/settings/+page.svelte | 4 ++-- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lib/elements/forms/form.svelte b/src/lib/elements/forms/form.svelte index e261f6af7..563942b30 100644 --- a/src/lib/elements/forms/form.svelte +++ b/src/lib/elements/forms/form.svelte @@ -1,8 +1,8 @@ -
    + diff --git a/src/routes/console/project-[project]/functions/createEvent.svelte b/src/routes/console/project-[project]/functions/createEvent.svelte index f97defcfa..750133ba6 100644 --- a/src/routes/console/project-[project]/functions/createEvent.svelte +++ b/src/routes/console/project-[project]/functions/createEvent.svelte @@ -109,7 +109,7 @@ $: console.log(eventString); -
    + Create Event diff --git a/src/routes/console/project-[project]/functions/createVariable.svelte b/src/routes/console/project-[project]/functions/createVariable.svelte index 88032d3b0..0a5fa1440 100644 --- a/src/routes/console/project-[project]/functions/createVariable.svelte +++ b/src/routes/console/project-[project]/functions/createVariable.svelte @@ -24,7 +24,7 @@ }; - + {selectedKey ? 'Update' : 'Create'} Variable diff --git a/src/routes/console/project-[project]/functions/function/[function]/_activate.svelte b/src/routes/console/project-[project]/functions/function/[function]/_activate.svelte index 1496f2209..4e034f938 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/_activate.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/_activate.svelte @@ -30,7 +30,7 @@ }; - + Activate Deployment

    Are you sure you want to activate this deployment?

    diff --git a/src/routes/console/project-[project]/functions/function/[function]/_create.svelte b/src/routes/console/project-[project]/functions/function/[function]/_create.svelte index 2e7507010..a8ab29887 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/_create.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/_create.svelte @@ -31,7 +31,7 @@ }; - + Create Deployment
      diff --git a/src/routes/console/project-[project]/functions/function/[function]/_delete.svelte b/src/routes/console/project-[project]/functions/function/[function]/_delete.svelte index d0db684c9..120ad44d2 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/_delete.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/_delete.svelte @@ -30,7 +30,7 @@ }; - + Delete Deployment

      Are you sure you want to delete this deployment?

      diff --git a/src/routes/console/project-[project]/functions/function/[function]/_execute.svelte b/src/routes/console/project-[project]/functions/function/[function]/_execute.svelte index 5bf69a224..64da347d5 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/_execute.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/_execute.svelte @@ -29,7 +29,7 @@ }; - + Execute Function diff --git a/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte index 45d114ffe..daeb93b11 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte @@ -99,7 +99,7 @@ - console.log($func.schedule)}> + console.log($func.schedule)}>

      Update CRON Schedule

      @@ -125,7 +125,7 @@

      -
      +

      Update Timeout

      From 1f7057b3d363e5893fc398e2296d71b8488dbfb7 Mon Sep 17 00:00:00 2001 From: Arman Date: Wed, 28 Sep 2022 15:10:52 +0200 Subject: [PATCH 028/105] feat: add variables to settings page --- .../functions/createVariable.svelte | 16 +- .../function/[function]/settings/+page.svelte | 152 +++++++++++++++++- .../functions/wizard/step5.svelte | 2 +- 3 files changed, 160 insertions(+), 10 deletions(-) diff --git a/src/routes/console/project-[project]/functions/createVariable.svelte b/src/routes/console/project-[project]/functions/createVariable.svelte index 0a5fa1440..f82e70f9a 100644 --- a/src/routes/console/project-[project]/functions/createVariable.svelte +++ b/src/routes/console/project-[project]/functions/createVariable.svelte @@ -2,24 +2,28 @@ import { Button, Form } from '$lib/elements/forms'; import { Modal } from '$lib/components'; import { InputText, InputPassword, FormList } from '$lib/elements/forms'; - import { createFunction } from './wizard/store'; + import { createEventDispatcher } from 'svelte'; export let showCreate = false; + export let variables: object; export let selectedKey: string = null; let key = selectedKey; - let value = $createFunction?.vars[key]; + let value = variables[key]; + + const dispatch = createEventDispatcher(); const create = () => { if (selectedKey) { - delete Object.assign($createFunction.vars, { - [key]: $createFunction.vars[selectedKey] + delete Object.assign(variables, { + [key]: variables[selectedKey] })[selectedKey]; - $createFunction.vars[key] = value; + variables[key] = value; selectedKey = null; } else { - $createFunction.vars[key] = value; + variables[key] = value; } + dispatch('created'); showCreate = false; }; diff --git a/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte index daeb93b11..d40e12da5 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte @@ -1,5 +1,5 @@ @@ -151,6 +181,115 @@ + +

      Update Function Variables

      +

      Set the variables (or secret keys) that will be passed to your function at runtime.

      + + + + + + + + + + {#if $func.vars} + {#each Object.entries($func.vars) as [key, value], i} + + + + + + {/each} + {/if} + +
      + Key + + Value + +
      + {key} + +
      + {#if showVariablesValue[i]} + {value} + {:else} + •••••••• + {/if} +
      + + + + +
      +
      +
      + + + + { + selectedKey = key; + showVariablesDropdown[i] = false; + showVariablesModal = true; + }}> + Edit + + { + delete $func.vars[key]; + showVariablesDropdown[i] = false; + }}> + Delete + + + +
      +
      + +
      +
      +
      +
      Delete Function

      @@ -173,3 +312,10 @@ +{#if showVariablesModal} + +{/if} diff --git a/src/routes/console/project-[project]/functions/wizard/step5.svelte b/src/routes/console/project-[project]/functions/wizard/step5.svelte index 3033917a9..1a2af9557 100644 --- a/src/routes/console/project-[project]/functions/wizard/step5.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step5.svelte @@ -118,5 +118,5 @@ {#if showCreate} - + {/if} From e2a15eba58b00a8c27f99b7e05dc98b583d86630 Mon Sep 17 00:00:00 2001 From: Arman Date: Wed, 28 Sep 2022 16:12:18 +0200 Subject: [PATCH 029/105] feat: download env function --- .../function/[function]/settings/+page.svelte | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte index d40e12da5..2a8bb7130 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte @@ -91,6 +91,29 @@ }); } } + + function downloadVariables() { + let data = Object.keys($func.vars) + .map((key) => { + return `${key}=${$func.vars[key]}`; + }) + .join('\n'); + const file = new File([data], '.env', { + type: 'application/x-envoy' + }); + + console.log(file); + const link = document.createElement('a'); + const url = URL.createObjectURL(file); + + link.href = url; + link.download = file.name; + document.body.appendChild(link); + link.click(); + + document.body.removeChild(link); + window.URL.revokeObjectURL(url); + } @@ -185,6 +208,16 @@

      Update Function Variables

      Set the variables (or secret keys) that will be passed to your function at runtime.

      +
      + + +
      From 50e066c9b58e4b1bc4213a57b329119ab1d73ffc Mon Sep 17 00:00:00 2001 From: Arman Date: Wed, 28 Sep 2022 16:46:39 +0200 Subject: [PATCH 030/105] feat: start work on upload env variables --- .../function/[function]/settings/+page.svelte | 8 +- .../{_delete.svelte => delete.svelte} | 2 +- .../settings/uploadVariables.svelte | 83 +++++++++++++++++++ 3 files changed, 90 insertions(+), 3 deletions(-) rename src/routes/console/project-[project]/functions/function/[function]/settings/{_delete.svelte => delete.svelte} (97%) create mode 100644 src/routes/console/project-[project]/functions/function/[function]/settings/uploadVariables.svelte diff --git a/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte index 2a8bb7130..2e20dfd28 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte @@ -13,16 +13,18 @@ import { app } from '$lib/stores/app'; import { toLocaleDateTime } from '$lib/helpers/date'; import { execute, func } from '../store'; - import Delete from './_delete.svelte'; + import Delete from './delete.svelte'; import { addNotification } from '$lib/stores/notifications'; import { sdkForProject } from '$lib/stores/sdk'; import { onMount } from 'svelte'; import { page } from '$app/stores'; import type { Models } from '@aw-labs/appwrite-console'; import Variable from '../../../createVariable.svelte'; + import Upload from './uploadVariables.svelte'; const functionId = $page.params.function; let showDelete = false; + let showVariablesUpload = false; let showVariablesModal = false; let showVariablesValue = []; let showVariablesDropdown = []; @@ -213,7 +215,7 @@ Download .env file - @@ -352,3 +354,5 @@ bind:variables={$func.vars} on:created={handleVariableCreated} /> {/if} + + diff --git a/src/routes/console/project-[project]/functions/function/[function]/settings/_delete.svelte b/src/routes/console/project-[project]/functions/function/[function]/settings/delete.svelte similarity index 97% rename from src/routes/console/project-[project]/functions/function/[function]/settings/_delete.svelte rename to src/routes/console/project-[project]/functions/function/[function]/settings/delete.svelte index a3668ebcc..a1107958c 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/settings/_delete.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/settings/delete.svelte @@ -28,7 +28,7 @@ }; -
      + Delete Function

      diff --git a/src/routes/console/project-[project]/functions/function/[function]/settings/uploadVariables.svelte b/src/routes/console/project-[project]/functions/function/[function]/settings/uploadVariables.svelte new file mode 100644 index 000000000..5c67f84e4 --- /dev/null +++ b/src/routes/console/project-[project]/functions/function/[function]/settings/uploadVariables.svelte @@ -0,0 +1,83 @@ + + + + + Upload Variables +

      + Upload multiple variables via a .env file that will be passed to your function at + runtime. +

      + +

      Attach a file

      +
      dropHandler(e)} + on:dragover|preventDefault={(e) => dragOverHandler(e)}> +
      +
      +
      +
      +

      Drag and drop files here to upload

      +
      + + {#if files?.length} + {files.item(0).name} + {/if} +
      +
      +
      +
      + + + + +
      + From 9449596a7b48eee4901b8889ba249fb8e04c5b52 Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 29 Sep 2022 10:37:18 +0200 Subject: [PATCH 031/105] fix: dates and stores --- src/lib/elements/forms/form.svelte | 2 +- src/lib/helpers/date.ts | 2 +- .../console/project-[project]/functions/+page.svelte | 5 +++-- .../functions/function/[function]/+page.svelte | 7 ++++--- .../function/[function]/executions/+page.svelte | 4 ++-- .../functions/function/[function]/executions/store.ts | 7 +++---- .../function/[function]/settings/+page.svelte | 11 ++++++----- 7 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/lib/elements/forms/form.svelte b/src/lib/elements/forms/form.svelte index 563942b30..cfbd1a2ed 100644 --- a/src/lib/elements/forms/form.svelte +++ b/src/lib/elements/forms/form.svelte @@ -3,6 +3,6 @@ -
      + diff --git a/src/lib/helpers/date.ts b/src/lib/helpers/date.ts index 85891a77e..1a7693967 100644 --- a/src/lib/helpers/date.ts +++ b/src/lib/helpers/date.ts @@ -9,7 +9,7 @@ export const toLocaleDate = (datetime: string) => { return date.toLocaleDateString('en', options); }; -export const toLocaleDateTime = (datetime: string) => { +export const toLocaleDateTime = (datetime: string | number) => { const date = new Date(datetime); const options: Intl.DateTimeFormatOptions = { year: 'numeric', diff --git a/src/routes/console/project-[project]/functions/+page.svelte b/src/routes/console/project-[project]/functions/+page.svelte index b9adbc8f1..124329a10 100644 --- a/src/routes/console/project-[project]/functions/+page.svelte +++ b/src/routes/console/project-[project]/functions/+page.svelte @@ -14,6 +14,7 @@ import { wizard } from '$lib/stores/wizard'; import { beforeNavigate } from '$app/navigation'; import { Query } from '@aw-labs/appwrite-console'; + import { toLocaleDateTime } from '$lib/helpers/date'; let search = ''; let offset = 0; @@ -34,7 +35,7 @@ wizard.hide(); }); - $: functionList.load([Query.limit(0), Query.offset(0)], search); + $: functionList.load([Query.limit(6), Query.offset(0)], search); $: if (search) offset = 0; @@ -89,7 +90,7 @@ aria-hidden="true" use:tooltip={{ content: `Next execution: - ${func.scheduleNext}` + ${toLocaleDateTime(func.scheduleNext)}` }} /> {/if} diff --git a/src/routes/console/project-[project]/functions/function/[function]/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/+page.svelte index c4636d948..22880ed3d 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/+page.svelte @@ -23,6 +23,7 @@ import { calculateSize } from '$lib/helpers/sizeConvertion'; import Activate from './_activate.svelte'; import { Query } from '@aw-labs/appwrite-console'; + import { toLocaleDateTime } from '$lib/helpers/date'; let search = ''; let offset = 0; @@ -75,8 +76,8 @@
      -

      Created at: {$func.$createdAt}

      -

      Updated at: {$func.$updatedAt}

      +

      Created at: {toLocaleDateTime($func.$createdAt)}

      +

      Updated at: {toLocaleDateTime($func.$updatedAt)}

      Entrypoint: {activeDeployment?.entrypoint}

      {activeDeployment.status} @@ -146,7 +147,7 @@ - {deployment.$createdAt} + {toLocaleDateTime(deployment.$createdAt)} {deployment.status} diff --git a/src/routes/console/project-[project]/functions/function/[function]/executions/store.ts b/src/routes/console/project-[project]/functions/function/[function]/executions/store.ts index ea783d8f5..a09315308 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/executions/store.ts +++ b/src/routes/console/project-[project]/functions/function/[function]/executions/store.ts @@ -5,15 +5,14 @@ import { cachedStore } from '$lib/helpers/cache'; export const executionList = cachedStore< Models.ExecutionList, { - load: (functionId: string, limit: number, offset: number, search: string) => Promise; + load: (functionId: string, queries?: string[], search?: string) => Promise; } >('executionList', function ({ set }) { return { - load: async (functionId, limit, offset, search) => { + load: async (functionId, queries, search) => { const response = await sdkForProject.functions.listExecutions( functionId, - limit, - offset, + queries, search ); set(response); diff --git a/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte index c4b2c5fdd..23ea0587e 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte @@ -20,6 +20,7 @@ import type { Models } from '@aw-labs/appwrite-console'; import Variable from '../../../createVariable.svelte'; import Upload from './uploadVariables.svelte'; + import { toLocaleDateTime } from '$lib/helpers/date'; const functionId = $page.params.function; let showDelete = false; @@ -136,8 +137,8 @@

      Function ID: {$func.$id}

      -

      Created at: {$func.$createdAt}

      -

      Updated at: {$func.$updatedAt}

      +

      Created at: {toLocaleDateTime($func.$createdAt)}

      +

      Updated at: {toLocaleDateTime($func.$updatedAt)}

      @@ -153,7 +154,7 @@ -
      console.log($func.schedule)}> + console.log($func.schedule)}>

      Update CRON Schedule

      @@ -179,7 +180,7 @@ -
      +

      Update Timeout

      @@ -335,7 +336,7 @@

      {$func.name}
      -

      Last Updated: {$func.$updatedAt}

      +

      Last Updated: {toLocaleDateTime($func.$updatedAt)}

      From 57289f98e59c630e91f695749cee865f436732a8 Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 29 Sep 2022 11:59:54 +0200 Subject: [PATCH 032/105] fix: broken load functions --- .../console/project-[project]/functions/createFunction.svelte | 3 ++- .../console/project-[project]/functions/selectTeams.svelte | 3 ++- .../console/project-[project]/functions/selectUsers.svelte | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/routes/console/project-[project]/functions/createFunction.svelte b/src/routes/console/project-[project]/functions/createFunction.svelte index 2e609e899..a66fabdca 100644 --- a/src/routes/console/project-[project]/functions/createFunction.svelte +++ b/src/routes/console/project-[project]/functions/createFunction.svelte @@ -12,6 +12,7 @@ import Step5 from './wizard/step5.svelte'; import { createFunction } from './wizard/store'; import type { WizardStepsType } from '$lib/layout/wizard.svelte'; + import { Query } from '@aw-labs/appwrite-console'; const create = async () => { try { @@ -29,7 +30,7 @@ message: 'Function has been created', type: 'success' }); - functionList.load('', 12, 0); + functionList.load([Query.limit(6), Query.offset(0)]); wizard.hide(); } catch (error) { addNotification({ diff --git a/src/routes/console/project-[project]/functions/selectTeams.svelte b/src/routes/console/project-[project]/functions/selectTeams.svelte index 0331d32b2..ba0a04ab6 100644 --- a/src/routes/console/project-[project]/functions/selectTeams.svelte +++ b/src/routes/console/project-[project]/functions/selectTeams.svelte @@ -4,6 +4,7 @@ import { teamsList } from '../authentication/store'; import { sdkForProject } from '$lib/stores/sdk'; import { createFunction } from './wizard/store'; + import { Query } from '@aw-labs/appwrite-console'; export let showTeams = false; @@ -24,7 +25,7 @@ $createFunction = $createFunction; } - $: teamsList.load(search, limit, offset ?? 0); + $: teamsList.load([Query.limit(limit), Query.offset(offset)], search); $: if (search) offset = 0; diff --git a/src/routes/console/project-[project]/functions/selectUsers.svelte b/src/routes/console/project-[project]/functions/selectUsers.svelte index 5dd584334..84dd20298 100644 --- a/src/routes/console/project-[project]/functions/selectUsers.svelte +++ b/src/routes/console/project-[project]/functions/selectUsers.svelte @@ -4,6 +4,7 @@ import { usersList } from '../authentication/store'; import { sdkForProject } from '$lib/stores/sdk'; import { createFunction } from './wizard/store'; + import { Query } from '@aw-labs/appwrite-console'; export let showUsers = false; @@ -24,7 +25,7 @@ $createFunction = $createFunction; } - $: usersList.load(search, limit, offset ?? 0); + $: usersList.load([Query.limit(limit), Query.offset(offset)], search); $: if (search) offset = 0; From 6a9a23803901de66a7175753927ad6b004880293 Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 29 Sep 2022 16:45:06 +0200 Subject: [PATCH 033/105] feat: upgrade variables create & update --- .../functions/createVariable.svelte | 41 ++++--- .../function/[function]/settings/+page.svelte | 112 +++++++++++------- .../project-[project]/functions/store.ts | 31 +++++ .../functions/wizard/step5.svelte | 37 ++++-- .../functions/wizard/store.ts | 5 +- 5 files changed, 157 insertions(+), 69 deletions(-) diff --git a/src/routes/console/project-[project]/functions/createVariable.svelte b/src/routes/console/project-[project]/functions/createVariable.svelte index f82e70f9a..b16261dff 100644 --- a/src/routes/console/project-[project]/functions/createVariable.svelte +++ b/src/routes/console/project-[project]/functions/createVariable.svelte @@ -3,49 +3,54 @@ import { Modal } from '$lib/components'; import { InputText, InputPassword, FormList } from '$lib/elements/forms'; import { createEventDispatcher } from 'svelte'; + import type { Models } from '@aw-labs/appwrite-console'; export let showCreate = false; - export let variables: object; - export let selectedKey: string = null; - let key = selectedKey; - let value = variables[key]; + export let selectedVar: Partial = null; + + let pair = { + $id: selectedVar?.$id, + key: selectedVar?.key, + value: selectedVar?.value + }; const dispatch = createEventDispatcher(); - const create = () => { - if (selectedKey) { - delete Object.assign(variables, { - [key]: variables[selectedKey] - })[selectedKey]; - variables[key] = value; - selectedKey = null; + const handleVariable = () => { + if (selectedVar) { + dispatch('updated', pair); } else { - variables[key] = value; + dispatch('created', pair); } - dispatch('created'); showCreate = false; }; - + {selectedKey ? 'Update' : 'Create'} Variable + >{selectedVar ? 'Update' : 'Create'} Variable - + - + diff --git a/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte index 23ea0587e..90679b448 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/settings/+page.svelte @@ -21,14 +21,15 @@ import Variable from '../../../createVariable.svelte'; import Upload from './uploadVariables.svelte'; import { toLocaleDateTime } from '$lib/helpers/date'; + import { variableList } from '../../../store'; const functionId = $page.params.function; let showDelete = false; + let selectedVar: Models.Variable = null; let showVariablesUpload = false; let showVariablesModal = false; let showVariablesValue = []; let showVariablesDropdown = []; - let selectedKey: string = null; let timeout = 0; let deployment: Models.Deployment = null; @@ -36,6 +37,7 @@ if ($func?.$id !== functionId) { await func.load(functionId); } + await variableList.load(functionId); deployment = await func.getDeployment(functionId, $func.deployment); timeout = $func.timeout; }); @@ -51,7 +53,6 @@ functionId, $func.name, $func.execute, - $func.vars, $func.events, $func.schedule, timeout @@ -69,23 +70,51 @@ } } - async function handleVariableCreated() { + async function handleVariableCreated(dispatcedData: CustomEvent) { + const variable = dispatcedData.detail; + try { - console.log($func); - await sdkForProject.functions.update( - functionId, - $func.name, - $func.execute, - $func.vars, - $func.events, - $func.schedule, - timeout - ); + await variableList.create(functionId, variable.key, variable.value); showVariablesModal = false; addNotification({ type: 'success', message: `${$func.name} variables have been updated` }); + variableList.load(functionId); + } catch (error) { + addNotification({ + type: 'error', + message: error.message + }); + } + } + + async function handleVariableUpdated(dispatcedData: CustomEvent) { + const variable = dispatcedData.detail; + try { + await variableList.update(functionId, variable.$id, variable.key, variable.value); + selectedVar = null; + showVariablesModal = false; + addNotification({ + type: 'success', + message: `${$func.name} variables have been updated` + }); + variableList.load(functionId); + } catch (error) { + addNotification({ + type: 'error', + message: error.message + }); + } + } + async function handleVariableDeleted(variableId) { + try { + await variableList.delete(functionId, variableId); + addNotification({ + type: 'success', + message: `Variable has been deleted` + }); + variableList.load(functionId); } catch (error) { addNotification({ type: 'error', @@ -95,26 +124,27 @@ } function downloadVariables() { - let data = Object.keys($func.vars) - .map((key) => { - return `${key}=${$func.vars[key]}`; - }) - .join('\n'); - const file = new File([data], '.env', { - type: 'application/x-envoy' - }); + if ($variableList?.total) { + let data = $variableList.variables + .map((variable) => { + return `${variable.key}=${variable.value}`; + }) + .join('\n'); + const file = new File([data], '.env', { + type: 'application/x-envoy' + }); - console.log(file); - const link = document.createElement('a'); - const url = URL.createObjectURL(file); + const link = document.createElement('a'); + const url = URL.createObjectURL(file); - link.href = url; - link.download = file.name; - document.body.appendChild(link); - link.click(); + link.href = url; + link.download = file.name; + document.body.appendChild(link); + link.click(); - document.body.removeChild(link); - window.URL.revokeObjectURL(url); + document.body.removeChild(link); + window.URL.revokeObjectURL(url); + } } @@ -233,16 +263,16 @@
      - {#if $func.vars} - {#each Object.entries($func.vars) as [key, value], i} + {#if $variableList?.total} + {#each $variableList.variables as variable, i} {#if $createFunction.vars} - {#each Object.entries($createFunction.vars) as [key, value], i} + {#each $createFunction.vars as variable, i}
      - {key} + {variable.key}
      {#if showVariablesValue[i]} - {value} + {variable.value} {:else} •••••••• {/if} @@ -259,7 +289,7 @@
      - {key} + {variable.key}
      {#if showValue[i]} - {value} + {variable.value} {:else} •••••••• {/if} @@ -55,7 +71,7 @@
      + {:else} + +
      +

      Create your first Webhook to get startedNeed a hand?

      +

      Check out our documentation.

      +
      +
      + + +
      +
      + {/if} diff --git a/src/routes/console/project-[project]/settings/webhooks/createWebhook.svelte b/src/routes/console/project-[project]/settings/webhooks/createWebhook.svelte index efa54c796..cdd8d653e 100644 --- a/src/routes/console/project-[project]/settings/webhooks/createWebhook.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/createWebhook.svelte @@ -8,13 +8,13 @@ import { wizard } from '$lib/stores/wizard'; import type { WizardStepsType } from '$lib/layout/wizard.svelte'; import { createWebhook } from './wizard/store'; - import { sdkForProject } from '$lib/stores/sdk'; + import { sdkForConsole } from '$lib/stores/sdk'; import { page } from '$app/stores'; const projectId = $page.params.project; const create = async () => { try { - await sdkForProject.projects.createWebhook( + await sdkForConsole.projects.createWebhook( projectId, $createWebhook.name, $createWebhook.events, diff --git a/src/routes/console/project-[project]/settings/webhooks/store.ts b/src/routes/console/project-[project]/settings/webhooks/store.ts new file mode 100644 index 000000000..bbca4e8bc --- /dev/null +++ b/src/routes/console/project-[project]/settings/webhooks/store.ts @@ -0,0 +1,17 @@ +import { sdkForConsole } from '$lib/stores/sdk'; +import type { Models } from '@aw-labs/appwrite-console'; +import { cachedStore } from '$lib/helpers/cache'; + +export const webhookList = cachedStore< + Models.WebhookList, + { + load: (projectId: string) => Promise; + } +>('webhookList', function ({ set }) { + return { + load: async (projectId) => { + const response = await sdkForConsole.projects.listWebhooks(projectId); + set(response); + } + }; +}); diff --git a/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+layout.svelte b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+layout.svelte new file mode 100644 index 000000000..4f4f7fa85 --- /dev/null +++ b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+layout.svelte @@ -0,0 +1,45 @@ + + + + Appwrite - Webhook + + +{#if $webhook} + +{/if} diff --git a/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte index 4092eed13..c1f4dfa4f 100644 --- a/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte @@ -1,10 +1,136 @@ - -

      TBD

      -
      + + +
      Update Name
      +

      Choose any name that will help you distinguish between Webhooks.

      + + + + + + + + + +
      + +
      + +
      Update Url
      + + + + + + + + + + +
      +
      + + +
      +
      Delete Webhook
      +
      +

      The webhook will be permanently deleted. This action is irreversible.

      + + + +
      {$webhook.name}
      +
      +

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

      +
      +
      + + + + +
      diff --git a/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/store.ts b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/store.ts new file mode 100644 index 000000000..fbbcb7fae --- /dev/null +++ b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/store.ts @@ -0,0 +1,17 @@ +import { sdkForConsole } from '$lib/stores/sdk'; +import type { Models } from '@aw-labs/appwrite-console'; +import { cachedStore } from '$lib/helpers/cache'; + +export const webhook = cachedStore< + Models.Webhook, + { + load: (projectId: string, webhookId: string) => Promise; + } +>('webhook', function ({ set }) { + return { + load: async (projectId, webhookId) => { + const response = await sdkForConsole.projects.getWebhook(projectId, webhookId); + set(response); + } + }; +}); diff --git a/src/routes/console/project-[project]/settings/webhooks/wizard/step1.svelte b/src/routes/console/project-[project]/settings/webhooks/wizard/step1.svelte index 9eb2cfdaa..9fb51ebae 100644 --- a/src/routes/console/project-[project]/settings/webhooks/wizard/step1.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/wizard/step1.svelte @@ -2,6 +2,7 @@ import { InputText, FormList } from '$lib/elements/forms'; import { WizardStep } from '$lib/layout'; import { createWebhook } from './store'; + //TODO: Create InputURL component From 9d7cf7914a293de399279a56799419f6d5ea7a42 Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 6 Oct 2022 11:39:23 +0200 Subject: [PATCH 052/105] feat: more webhook settings --- .../settings/webhooks/+page.svelte | 2 +- .../webhooks/webhook/[webhook]/+page.svelte | 37 ++++++++++++---- .../webhook/[webhook]/regenerate.svelte | 42 +++++++++++++++++++ 3 files changed, 72 insertions(+), 9 deletions(-) create mode 100644 src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/regenerate.svelte diff --git a/src/routes/console/project-[project]/settings/webhooks/+page.svelte b/src/routes/console/project-[project]/settings/webhooks/+page.svelte index 9ca07e5a3..6e17ddeb2 100644 --- a/src/routes/console/project-[project]/settings/webhooks/+page.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/+page.svelte @@ -44,7 +44,7 @@
    - {#if $webhookList.total} + {#if $webhookList?.total} Name diff --git a/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte index c1f4dfa4f..d307d1f61 100644 --- a/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte @@ -1,6 +1,6 @@ + +
    Signature Key
    +

    You can use the Signature Key to validate your webhooks.

    + +
    +

    Key

    + +
    +
    + + + +
    Update Name
    @@ -90,7 +109,7 @@ - +
    @@ -101,16 +120,16 @@ + placeholder="https://example.com/callback" /> - + @@ -134,3 +153,5 @@
    + + diff --git a/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/regenerate.svelte b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/regenerate.svelte new file mode 100644 index 000000000..4de854269 --- /dev/null +++ b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/regenerate.svelte @@ -0,0 +1,42 @@ + + +
    + + Regenerate Key +

    + Are you sure you want to generate a new Signature Key? + You will not be able to recover your current key. +

    + + + + +
    + From 7c3efcf0f4b08cb3f23955926fd23ec5aa17759c Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 6 Oct 2022 12:00:50 +0200 Subject: [PATCH 053/105] feat: webhook settings security --- .../webhooks/webhook/[webhook]/+page.svelte | 82 ++++++++++++++++++- .../settings/webhooks/wizard/step3.svelte | 1 + 2 files changed, 82 insertions(+), 1 deletion(-) diff --git a/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte index d307d1f61..a2b1b1525 100644 --- a/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte @@ -1,7 +1,14 @@ @@ -133,6 +166,53 @@ +
    + +
    Security
    +

    + Set an optional basic HTTP authentication username and password to protect your + endpoint from unauthorized access. +

    + + +
    +

    HTTP Authentication

    +

    Use to secure your endpoint from untrusted sources.

    +
    + + + + + Warning: Untrusted or self-signed certificates + may not be secure. + + Learn more +
    +
    + + + + +
    +
    diff --git a/src/routes/console/project-[project]/settings/webhooks/wizard/step3.svelte b/src/routes/console/project-[project]/settings/webhooks/wizard/step3.svelte index 1cc8256a7..34faf725d 100644 --- a/src/routes/console/project-[project]/settings/webhooks/wizard/step3.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/wizard/step3.svelte @@ -23,6 +23,7 @@ From eb57cd0588255e7f0e40eebf47c72f5f3c3a1620 Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 6 Oct 2022 12:34:06 +0200 Subject: [PATCH 054/105] feat: webhook settings events --- .../webhooks/webhook/[webhook]/+page.svelte | 95 ++++++++++++++++++- 1 file changed, 93 insertions(+), 2 deletions(-) diff --git a/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte index a2b1b1525..37993e5ec 100644 --- a/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte @@ -1,6 +1,6 @@ @@ -146,6 +174,7 @@ +
    Update Url
    @@ -166,6 +195,62 @@
    + +
    + +
    Update Events
    +

    + Set the events that will trigger your webhook. Maximum 100 events allowed. +

    + + {#if events?.length} +
    +
    +
    +
      + {#each events as id} +
    • +
      + {id} +
      +
      + +
      +
    • + {/each} +
    +
    +
    +
    + {:else} + (showCreateEvent = !showCreateEvent)} + >Add a event to get started + {/if} + + +
    + + + + +
    + +
    Security
    @@ -235,3 +320,9 @@
    + { + events.push(e.detail[0]); + events = events; + }} /> From 3ccce7293a791625575478300f8887df4ee535a8 Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 6 Oct 2022 12:39:29 +0200 Subject: [PATCH 055/105] feat: delte webhook --- .../webhooks/webhook/[webhook]/+page.svelte | 3 +- .../webhooks/webhook/[webhook]/delete.svelte | 40 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/delete.svelte diff --git a/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte index 37993e5ec..6adc5ef8d 100644 --- a/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/+page.svelte @@ -15,7 +15,7 @@ import { webhook } from './store'; import { page } from '$app/stores'; import { toLocaleDateTime } from '$lib/helpers/date'; - // import Delete from './delete.svelte'; + import Delete from './delete.svelte'; import Regenerate from './regenerate.svelte'; import { difference } from '$lib/helpers/array'; @@ -319,6 +319,7 @@ + + import { goto } from '$app/navigation'; + import { base } from '$app/paths'; + import { Modal } from '$lib/components'; + import { Button, Form } from '$lib/elements/forms'; + import { addNotification } from '$lib/stores/notifications'; + import { sdkForConsole } from '$lib/stores/sdk'; + import { project } from '../../../../store'; + import { webhook } from './store'; + + export let showDelete = false; + + async function handleDelete() { + try { + await sdkForConsole.projects.deleteWebhook($project.$id, $webhook.$id); + showDelete = false; + addNotification({ + type: 'success', + message: `${$webhook.name} has been deleted` + }); + await goto(`${base}/console/project-${$project.$id}/settings/webhooks`); + } catch (error) { + addNotification({ + type: 'error', + message: error.message + }); + } + } + + + + + Delete Webhook +

    Are you sure you want to delete {$webhook.name} from '{$project.name}'?

    + + + + +
    + From 1b74f4af19da4d91e74415457d5fa8b2de063b58 Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 6 Oct 2022 15:36:03 +0200 Subject: [PATCH 056/105] refactor: use exhisting components where possible --- src/lib/elements/table/index.ts | 1 + src/lib/elements/table/table.svelte | 9 ++- src/lib/elements/table/tableList.svelte | 10 ++++ .../functions/wizard/step2.svelte | 55 ++++++++----------- .../functions/wizard/step3.svelte | 54 ++++++++---------- .../functions/wizard/step5.svelte | 52 ++++++++++-------- .../settings/webhooks/createWebhook.svelte | 2 + .../webhooks/webhook/[webhook]/+page.svelte | 50 +++++++---------- .../webhooks/webhook/[webhook]/delete.svelte | 2 + .../settings/webhooks/wizard/step2.svelte | 54 ++++++++---------- 10 files changed, 140 insertions(+), 149 deletions(-) create mode 100644 src/lib/elements/table/tableList.svelte diff --git a/src/lib/elements/table/index.ts b/src/lib/elements/table/index.ts index b1f0d6082..180d9c475 100644 --- a/src/lib/elements/table/index.ts +++ b/src/lib/elements/table/index.ts @@ -1,5 +1,6 @@ export { default as Table } from './table.svelte'; export { default as TableScroll } from './tableScroll.svelte'; +export { default as TableList } from './tableList.svelte'; export { default as TableBody } from './body.svelte'; export { default as TableHeader } from './header.svelte'; export { default as TableFooter } from './footer.svelte'; diff --git a/src/lib/elements/table/table.svelte b/src/lib/elements/table/table.svelte index 465d4c8f9..9328cf2f0 100644 --- a/src/lib/elements/table/table.svelte +++ b/src/lib/elements/table/table.svelte @@ -1,3 +1,10 @@ -
    + + +
    diff --git a/src/lib/elements/table/tableList.svelte b/src/lib/elements/table/tableList.svelte new file mode 100644 index 000000000..efe0e3ad2 --- /dev/null +++ b/src/lib/elements/table/tableList.svelte @@ -0,0 +1,10 @@ + +
    +
    +
    +
      + +
    +
    +
    +
    diff --git a/src/routes/console/project-[project]/functions/wizard/step2.svelte b/src/routes/console/project-[project]/functions/wizard/step2.svelte index ba7f65349..e04f0a103 100644 --- a/src/routes/console/project-[project]/functions/wizard/step2.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step2.svelte @@ -5,6 +5,7 @@ import { createFunction } from './store'; import SelectUsers from '../selectUsers.svelte'; import SelectTeams from '../selectTeams.svelte'; + import { TableList, TableCellText, TableCell } from '$lib/elements/table'; let showDropdown = false; let showUsers = false; @@ -30,38 +31,28 @@ ROLE {#if $createFunction?.execute?.length} -
    -
    -
    -
      - {#each $createFunction.execute as id} -
    • -
      - {id} -
      -
      - -
      -
    • - {/each} -
    -
    -
    -
    + + {#each $createFunction.execute as id} +
  • + + {id} + + + + +
  • + {/each} +
    {:else} (showDropdown = !showDropdown)}> Add a role to get started diff --git a/src/routes/console/project-[project]/functions/wizard/step3.svelte b/src/routes/console/project-[project]/functions/wizard/step3.svelte index f910708e5..bfae8de80 100644 --- a/src/routes/console/project-[project]/functions/wizard/step3.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step3.svelte @@ -4,6 +4,7 @@ import { Empty } from '$lib/components'; import { createFunction } from './store'; import { EventModal } from '$lib/components'; + import { TableList, TableCellText, TableCell } from '$lib/elements/table'; let showCreate = false; @@ -20,37 +21,28 @@ EVENT {#if $createFunction?.events?.length} -
    -
    -
    -
      - {#each $createFunction.events as id} -
    • -
      - {id} -
      -
      - -
      -
    • - {/each} -
    -
    -
    -
    + + {#each $createFunction.events as id} +
  • + + {id} + + + + +
  • + {/each} +
    {:else} (showCreate = !showCreate)} >Add a event to get started diff --git a/src/routes/console/project-[project]/functions/wizard/step5.svelte b/src/routes/console/project-[project]/functions/wizard/step5.svelte index 3559cbb4b..cf9df3f17 100644 --- a/src/routes/console/project-[project]/functions/wizard/step5.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step5.svelte @@ -4,6 +4,15 @@ import Create from '../createVariable.svelte'; import { DropList, DropListItem, Copy } from '$lib/components'; import type { Models } from '@aw-labs/appwrite-console'; + import { + Table, + TableBody, + TableCell, + TableCellHead, + TableCellText, + TableHeader, + TableRow + } from '$lib/elements/table'; let showCreate = false; @@ -33,26 +42,21 @@ Create a variable (or secret key) that will be passed to your function at runtime. -
    - - - - - - - +
    - Key - - Value - -
    + + Key + Value + + + + {#if $createFunction.vars} {#each $createFunction.vars as variable, i} - - - - - + + {/each} {/if} - -
    - {variable.key} - + + + {variable.key} + +
    {#if showValue[i]} {variable.value} @@ -80,8 +84,8 @@
    -
    + + -
    + +
    -
    - - {/each} - -
    - - + + {#each events as id} +
  • + + {id} + + + + +
  • + {/each} +
    {:else} (showCreateEvent = !showCreateEvent)} >Add a event to get started diff --git a/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/delete.svelte b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/delete.svelte index 52045af83..16234d9d1 100644 --- a/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/delete.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/webhook/[webhook]/delete.svelte @@ -6,6 +6,7 @@ import { addNotification } from '$lib/stores/notifications'; import { sdkForConsole } from '$lib/stores/sdk'; import { project } from '../../../../store'; + import { webhookList } from '../../store'; import { webhook } from './store'; export let showDelete = false; @@ -13,6 +14,7 @@ async function handleDelete() { try { await sdkForConsole.projects.deleteWebhook($project.$id, $webhook.$id); + await webhookList.load($project.$id); showDelete = false; addNotification({ type: 'success', diff --git a/src/routes/console/project-[project]/settings/webhooks/wizard/step2.svelte b/src/routes/console/project-[project]/settings/webhooks/wizard/step2.svelte index da2ca2033..8a1c9437a 100644 --- a/src/routes/console/project-[project]/settings/webhooks/wizard/step2.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/wizard/step2.svelte @@ -4,6 +4,7 @@ import { Empty } from '$lib/components'; import { createWebhook } from './store'; import { EventModal } from '$lib/components'; + import { TableList, TableCellText, TableCell } from '$lib/elements/table'; let showCreate = false; @@ -21,37 +22,28 @@ EVENT {#if $createWebhook?.events?.length} -
    -
    -
    -
      - {#each $createWebhook.events as id} -
    • -
      - {id} -
      -
      - -
      -
    • - {/each} -
    -
    -
    -
    + + {#each $createWebhook.events as id} +
  • + + {id} + + + + +
  • + {/each} +
    {:else} (showCreate = !showCreate)} >Add a event to get started From a6ad8a2f2a07aaf585f0aafba238e250e62ad5f7 Mon Sep 17 00:00:00 2001 From: Arman Date: Fri, 7 Oct 2022 14:55:11 +0200 Subject: [PATCH 057/105] fixes from review --- .../project-[project]/functions/+page.svelte | 23 ++++++--------- .../functions/wizard/step1.svelte | 28 ++----------------- .../webhooks/webhook/[webhook]/+layout.svelte | 4 +-- 3 files changed, 13 insertions(+), 42 deletions(-) diff --git a/src/routes/console/project-[project]/functions/+page.svelte b/src/routes/console/project-[project]/functions/+page.svelte index 9cb9460d5..fb663f8ce 100644 --- a/src/routes/console/project-[project]/functions/+page.svelte +++ b/src/routes/console/project-[project]/functions/+page.svelte @@ -1,7 +1,7 @@ @@ -49,9 +49,7 @@ {#if $functionList?.total} -
    3 ? '22rem' : '25rem'};`}> + {#each $functionList.functions as func} @@ -101,16 +99,13 @@ {/each} - {#if ($functionList.total % 2 !== 0 || $functionList.total % 4 === 0) && $functionList.total - offset <= limit} - -

    Create a new function

    -
    - {/if} -
    - + +

    Create a new function

    +
    +

    Total results: {$functionList.total}

    - +
    {:else} diff --git a/src/routes/console/project-[project]/functions/wizard/step1.svelte b/src/routes/console/project-[project]/functions/wizard/step1.svelte index 5c31b9e5b..d6b17b2d2 100644 --- a/src/routes/console/project-[project]/functions/wizard/step1.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step1.svelte @@ -1,5 +1,5 @@
    - + Create Deployment -
      -
    • - (showCli = true)} - class:is-selected={showCli}> - Files - -
    • -
    • - (showCli = false)} - class:is-selected={!showCli}> - Usage - -
    • -
    - {#if showCli} -

    Unix

    -

    Powershell

    -

    Learn more about creating deployments, installing and using the Appwrite CLI.

    - {:else} - - - +
    +
      +
    • + (mode = 'cli')} + class:is-selected={mode === 'cli'}> + CLI + +
    • +
    • + (mode = 'github')} + class:is-selected={mode === 'github'}> + GitHub - Soon! + +
    • +
    • + (mode = 'manual')} + class:is-selected={mode === 'manual'}> + Manual + +
    • +
    +
    + {#if mode === 'cli'} +

    + You can deploy your function from the Appwrite CLI using Unix, CMD, or PowerShell. + Check out our Documentation to learn more about deploying your functions, or how to install and use the + Appwrite CLI. +

    + + {#each ['Unix', 'CMD', 'PowerShell'] as category} + + {category} + Code + + {/each} + + {:else if mode === 'github'} +

    Coming Soon

    + {:else if mode === 'manual'} + + + + + This deployment will be activated after the build is completed. + {/if} - - + {#if mode === 'manual'} + + + {:else} + + {/if}
    diff --git a/src/routes/console/project-[project]/functions/function/[function]/createDeployment.svelte b/src/routes/console/project-[project]/functions/function/[function]/createDeployment.svelte deleted file mode 100644 index e69de29bb..000000000 From 0fa7a3b8a2a7d140cdd9273301cda01cb8f27321 Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 11 Oct 2022 14:16:40 +0200 Subject: [PATCH 061/105] feat: some work on create deployment --- .../functions/function/[function]/create.svelte | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/routes/console/project-[project]/functions/function/[function]/create.svelte b/src/routes/console/project-[project]/functions/function/[function]/create.svelte index a711422ed..bba4cfd12 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/create.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/create.svelte @@ -37,7 +37,8 @@ Create Deployment (mode = 'cli')} selected={mode === 'cli'}>CLI - (mode = 'github')} selected={mode === 'github'}>GitHub + (mode = 'github')} selected={mode === 'github'} + >GitHub - Soon! (mode = 'manual')} selected={mode === 'manual'}>Manual {#if mode === 'cli'} @@ -70,7 +71,7 @@ id="entrypoint" bind:value={entrypoint} required /> - + Date: Tue, 11 Oct 2022 15:08:39 +0200 Subject: [PATCH 062/105] style: add missing title styling --- .../console/project-[project]/functions/wizard/step2.svelte | 2 +- .../console/project-[project]/functions/wizard/step3.svelte | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/routes/console/project-[project]/functions/wizard/step2.svelte b/src/routes/console/project-[project]/functions/wizard/step2.svelte index e04f0a103..df6c7188b 100644 --- a/src/routes/console/project-[project]/functions/wizard/step2.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step2.svelte @@ -29,7 +29,7 @@ >. - ROLE + ROLE {#if $createFunction?.execute?.length} {#each $createFunction.execute as id} diff --git a/src/routes/console/project-[project]/functions/wizard/step3.svelte b/src/routes/console/project-[project]/functions/wizard/step3.svelte index bfae8de80..17a1e7b22 100644 --- a/src/routes/console/project-[project]/functions/wizard/step3.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step3.svelte @@ -19,7 +19,8 @@ Set the events that will trigger your function. Maximum 100 events allowed. - EVENT + EVENT + {#if $createFunction?.events?.length} {#each $createFunction.events as id} From 948001feded04c4d21706396110d395770541f3a Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 11 Oct 2022 15:24:37 +0200 Subject: [PATCH 063/105] fix: use component --- .../functions/wizard/step5.svelte | 31 ++----------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/src/routes/console/project-[project]/functions/wizard/step5.svelte b/src/routes/console/project-[project]/functions/wizard/step5.svelte index 9138af958..52718f873 100644 --- a/src/routes/console/project-[project]/functions/wizard/step5.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step5.svelte @@ -2,7 +2,7 @@ import { WizardStep } from '$lib/layout'; import { createFunction } from './store'; import Create from '../createVariable.svelte'; - import { DropList, DropListItem, Copy } from '$lib/components'; + import { DropList, DropListItem, Secret } from '$lib/components'; import type { Models } from '@aw-labs/appwrite-console'; import { Table, @@ -18,7 +18,6 @@ let selectedVar: Partial = null; let showDropdown = []; - let showValue = []; function handleCreated(dispatchEvent: CustomEvent) { $createFunction.vars.push(dispatchEvent.detail); @@ -57,33 +56,7 @@ {variable.key} -
    - {#if showValue[i]} - {variable.value} - {:else} - •••••••• - {/if} -
    - - - - -
    -
    +
    Date: Tue, 11 Oct 2022 16:17:00 +0200 Subject: [PATCH 064/105] fix: form class breaking wizard layout --- src/lib/elements/forms/form.svelte | 3 ++- src/lib/layout/wizard.svelte | 2 +- .../functions/function/[function]/create.svelte | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lib/elements/forms/form.svelte b/src/lib/elements/forms/form.svelte index ce34663f5..b8bd25400 100644 --- a/src/lib/elements/forms/form.svelte +++ b/src/lib/elements/forms/form.svelte @@ -1,8 +1,9 @@ -
    + diff --git a/src/lib/layout/wizard.svelte b/src/lib/layout/wizard.svelte index 81ad56cfa..57beba8d5 100644 --- a/src/lib/layout/wizard.svelte +++ b/src/lib/layout/wizard.svelte @@ -68,7 +68,7 @@
    -
    + {#each sortedSteps as [step, { component }]} {#if currentStep === step} diff --git a/src/routes/console/project-[project]/functions/function/[function]/create.svelte b/src/routes/console/project-[project]/functions/function/[function]/create.svelte index bba4cfd12..d4c0e646a 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/create.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/create.svelte @@ -1,5 +1,5 @@ diff --git a/src/routes/console/project-[project]/functions/createFunction.svelte b/src/routes/console/project-[project]/functions/createFunction.svelte index 13fcb0857..47fb363be 100644 --- a/src/routes/console/project-[project]/functions/createFunction.svelte +++ b/src/routes/console/project-[project]/functions/createFunction.svelte @@ -16,7 +16,7 @@ const create = async () => { try { - await sdkForProject.functions.create( + const response = await sdkForProject.functions.create( $createFunction.id ?? 'unique()', $createFunction.name, $createFunction.execute, @@ -27,7 +27,7 @@ ); $createFunction.vars.forEach( async (v) => - await sdkForProject.functions.createVariable($createFunction.id, v.key, v.value) + await sdkForProject.functions.createVariable(response.$id, v.key, v.value) ); addNotification({ message: 'Function has been created', diff --git a/src/routes/console/project-[project]/functions/function/[function]/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/+page.svelte index 9b492f250..8e1cf2c6a 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/+page.svelte @@ -141,9 +141,8 @@ {toLocaleDateTime(deployment.$createdAt)} {deployment.status} - - {deployment.entrypoint} + + TBI {calculateSize(deployment.size)} diff --git a/src/routes/console/project-[project]/functions/wizard/step3.svelte b/src/routes/console/project-[project]/functions/wizard/step3.svelte index 4a6c69ea2..b47323878 100644 --- a/src/routes/console/project-[project]/functions/wizard/step3.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step3.svelte @@ -8,8 +8,11 @@ let showCreate = false; + let eventSet = new Set(); + function handleCreated(event: CustomEvent) { - $createFunction.events = event.detail; + eventSet.add(event.detail); + $createFunction.events = Array.from(eventSet); } @@ -28,7 +31,7 @@ {id} - +
    {:else} - -

    Create your first function to get started

    - + +
    +

    Create your first function to get started

    +

    Need a hand? Check out our documentation.

    +
    +
    + + +
    {/if}
    diff --git a/src/routes/console/project-[project]/functions/wizard/step3.svelte b/src/routes/console/project-[project]/functions/wizard/step3.svelte index b47323878..1d0710cf6 100644 --- a/src/routes/console/project-[project]/functions/wizard/step3.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step3.svelte @@ -26,20 +26,18 @@ {#if $createFunction?.events?.length} - {#each $createFunction.events as id} + {#each $createFunction.events as event}
  • - {id} + {event} diff --git a/src/routes/console/project-[project]/settings/webhooks/wizard/step2.svelte b/src/routes/console/project-[project]/settings/webhooks/wizard/step2.svelte index 8a1c9437a..abc82e60d 100644 --- a/src/routes/console/project-[project]/settings/webhooks/wizard/step2.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/wizard/step2.svelte @@ -8,9 +8,11 @@ let showCreate = false; + let eventSet = new Set(); + function handleCreated(event: CustomEvent) { - console.log('test'); - $createWebhook.events = event.detail; + eventSet.add(event.detail); + $createWebhook.events = Array.from(eventSet); } @@ -23,20 +25,18 @@ EVENT {#if $createWebhook?.events?.length} - {#each $createWebhook.events as id} + {#each $createWebhook.events as event}
  • - {id} + {event} - + @@ -45,14 +45,18 @@ {/each} {:else} - (showCreate = !showCreate)} - >Add a event to get started + (showCreate = !showCreate)}> + Add a event to get started + {/if} - - +
    + +
    - +{#if showCreate} + +{/if} From 5c946cd24aa2246ec668203944651da698e50e5d Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 13 Oct 2022 14:15:21 +0200 Subject: [PATCH 069/105] fix: small fixes --- src/lib/components/step.svelte | 2 -- .../settings/webhooks/createWebhook.svelte | 9 ++++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/lib/components/step.svelte b/src/lib/components/step.svelte index 7d2c5dffd..2405e1b8e 100644 --- a/src/lib/components/step.svelte +++ b/src/lib/components/step.svelte @@ -4,8 +4,6 @@ export let currentSub = 0; export let isSub = false; export let step: { text: string; substeps?: { text: string }[] }; - - //TODO: remove inline styling
  • - + + webhook creation + From ac1df5032ddee6ae3aca7076814b9aa95e4f8dcb Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 13 Oct 2022 17:18:44 +0200 Subject: [PATCH 070/105] feat: upgrade input file --- src/lib/elements/forms/inputFile.svelte | 79 ++++++++++++++++--- .../function/[function]/create.svelte | 57 +++++++++++-- .../settings/uploadVariables.svelte | 57 +------------ .../storage/bucket/[bucket]/_create.svelte | 53 +------------ 4 files changed, 123 insertions(+), 123 deletions(-) diff --git a/src/lib/elements/forms/inputFile.svelte b/src/lib/elements/forms/inputFile.svelte index bb1431cd4..2dc8da1b6 100644 --- a/src/lib/elements/forms/inputFile.svelte +++ b/src/lib/elements/forms/inputFile.svelte @@ -1,17 +1,74 @@ - - -
    - + + +
    + {#if label} +

    {label}

    + {/if} +
    (hovering = false)}> +
    +
    +
    +
    +

    Drag and drop files here to upload

    +
    + + + {#if files?.length} +
    + {files.item(0).name} + +
    + {/if} +
    +
    +
    - +
    diff --git a/src/routes/console/project-[project]/functions/function/[function]/create.svelte b/src/routes/console/project-[project]/functions/function/[function]/create.svelte index d4c0e646a..d2bcb48b5 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/create.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/create.svelte @@ -1,6 +1,6 @@ @@ -45,7 +85,7 @@

    You can deploy your function from the Appwrite CLI using Unix, CMD, or PowerShell. Check out our Documentation to learn more about deploying your functions {category} - Code + {/each} @@ -71,7 +116,7 @@ id="entrypoint" bind:value={entrypoint} required /> - + import { page } from '$app/stores'; import { Modal } from '$lib/components'; - import { Button, Form } from '$lib/elements/forms'; + import { Button, Form, InputFile } from '$lib/elements/forms'; import { addNotification } from '$lib/stores/notifications'; import { createEventDispatcher } from 'svelte'; import { variableList } from '../../../store'; @@ -10,9 +10,7 @@ const dispatch = createEventDispatcher(); const functionId = $page.params.function; - let list = new DataTransfer(); let files: FileList; - let input: HTMLInputElement; const handleSubmit = async () => { if (files?.length) { @@ -51,29 +49,8 @@ return variables; } } - - function dropHandler(ev: DragEvent) { - ev.preventDefault(); - if (ev.dataTransfer.items) { - // Use DataTransferItemList interface to access the file(s) - for (let i = 0; i < ev.dataTransfer.items.length; i++) { - // If dropped items aren't files, reject them - if (ev.dataTransfer.items[i].kind === 'file') { - list.items.clear(); - list.items.add(ev.dataTransfer.items[i].getAsFile()); - files = list.files; - } - } - } - } - - function dragOverHandler(ev: DragEvent) { - ev.preventDefault(); - } - - Upload Variables @@ -82,37 +59,7 @@ runtime.

    -

    Attach a file

    -
    -
    -
    -
    -
    -

    Drag and drop files here to upload

    -
    - - {#if files?.length} - {files.item(0).name} - - {/if} -
    -
    -
    -
    + diff --git a/src/routes/console/project-[project]/storage/bucket/[bucket]/_create.svelte b/src/routes/console/project-[project]/storage/bucket/[bucket]/_create.svelte index 2a5b9b0aa..6fc923157 100644 --- a/src/routes/console/project-[project]/storage/bucket/[bucket]/_create.svelte +++ b/src/routes/console/project-[project]/storage/bucket/[bucket]/_create.svelte @@ -1,5 +1,5 @@ + +
    + {#if status} + + {/if} + +
    diff --git a/src/lib/components/step.svelte b/src/lib/components/step.svelte index 2405e1b8e..fcc762102 100644 --- a/src/lib/components/step.svelte +++ b/src/lib/components/step.svelte @@ -23,7 +23,7 @@ {:else}
    {/if} -
    +
    {step.text} {#if step?.substeps}
      diff --git a/src/routes/console/project-[project]/functions/function/[function]/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/+page.svelte index 8e1cf2c6a..f344d9c61 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/+page.svelte @@ -2,7 +2,15 @@ import { page } from '$app/stores'; import { Button } from '$lib/elements/forms'; import { Pill } from '$lib/elements'; - import { CardGrid, Pagination, Copy, DropList, DropListItem, Empty } from '$lib/components'; + import { + CardGrid, + Pagination, + Copy, + DropList, + DropListItem, + Empty, + Status + } from '$lib/components'; import { Table, TableHeader, @@ -140,7 +148,11 @@ {toLocaleDateTime(deployment.$createdAt)} - {deployment.status} + + + + {deployment.status ?? 'No deployment'} + TBI - import { Modal } from '$lib/components'; + import { Code, Modal } from '$lib/components'; import { Button, Form } from '$lib/elements/forms'; import { InputTextarea, FormList } from '$lib/elements/forms'; import InputChoice from '$lib/elements/forms/inputChoice.svelte'; @@ -37,19 +37,14 @@ Here's an example of some custom data. {#if showJson} -
      -            
      -{`name: 'John Doe',
      -age: 42,
      -    address: {
      -            street: '123 Main St',
      -            city: 'Anytown',
      -            state: 'CA',
      -            zip: '12345'
      -        }
      -`}
      -            
      -        
      + {/if} From 0c124e5830314aaf14cb85697f8f513d95ba2a96 Mon Sep 17 00:00:00 2001 From: Arman Date: Fri, 14 Oct 2022 11:24:31 +0200 Subject: [PATCH 072/105] fix: code example --- .../function/[function]/create.svelte | 36 ++++++++----------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/src/routes/console/project-[project]/functions/function/[function]/create.svelte b/src/routes/console/project-[project]/functions/function/[function]/create.svelte index d2bcb48b5..c059a2ff5 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/create.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/create.svelte @@ -39,34 +39,28 @@ const codeSnippets = { Unix: { - code: ` -appwrite functions createDeployment \\ \n - --functionId=${functionId} \\ \n - --entrypoint='index.js' \\ \n - --code="." \\ \n - --activate=true - `, + code: `appwrite functions createDeployment \\ + --functionId=${functionId} \\ + --entrypoint='index.js' \\ + --code="." \\ + --activate=true`, language: 'bash' }, CMD: { - code: ` -appwrite functions createDeployment ^ \n - --functionId=${functionId} ^ \n - --entrypoint='index.js' ^ \n - --code="." ^ \n - --activate=true - `, + code: `appwrite functions createDeployment ^ + --functionId=${functionId} ^ + --entrypoint='index.js' ^ + --code="." ^ + --activate=true`, language: 'CMD' }, PowerShell: { - code: ` -appwrite functions createDeployment , \n - --functionId=${functionId} , \n - --entrypoint='index.js' , \n - --code="." , \n - --activate=true - `, + code: `appwrite functions createDeployment , + --functionId=${functionId} , + --entrypoint='index.js' , + --code="." , + --activate=true`, language: 'PowerShell' } }; From ef88d0f0aba8ef488c8f471576693964dc62f46a Mon Sep 17 00:00:00 2001 From: Arman Date: Fri, 14 Oct 2022 11:28:39 +0200 Subject: [PATCH 073/105] fix: load after creation, optional steps --- .../functions/createFunction.svelte | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/routes/console/project-[project]/functions/createFunction.svelte b/src/routes/console/project-[project]/functions/createFunction.svelte index 47fb363be..b18299e61 100644 --- a/src/routes/console/project-[project]/functions/createFunction.svelte +++ b/src/routes/console/project-[project]/functions/createFunction.svelte @@ -33,7 +33,7 @@ message: 'Function has been created', type: 'success' }); - functionList.load([Query.limit(6), Query.offset(0)]); + functionList.load([Query.limit(6), Query.offset(0), Query.orderDesc('$createdAt')]); wizard.hide(); } catch (error) { addNotification({ @@ -63,19 +63,23 @@ }); stepsComponents.set(2, { label: 'Execute access', - component: Step2 + component: Step2, + optional: true }); stepsComponents.set(3, { label: 'Events', - component: Step3 + component: Step3, + optional: true }); stepsComponents.set(4, { label: 'Scheduling', - component: Step4 + component: Step4, + optional: true }); stepsComponents.set(5, { label: 'Variables', - component: Step5 + component: Step5, + optional: true }); From e4808c0e42d3dab54904a6ebb98f02a4cea7c51f Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 17 Oct 2022 10:44:19 +0200 Subject: [PATCH 074/105] feat: logs(WIP) --- src/lib/components/index.ts | 1 + src/lib/components/logs.svelte | 65 +++++++++++++++++++ src/lib/images/github-illustration.svg | 1 + src/lib/layout/shell.svelte | 3 +- src/lib/layout/wizard.svelte | 18 ++++- src/lib/layout/wizardStep.svelte | 21 +++++- src/lib/mock/wizard.step1.test.svelte | 15 ++++- src/lib/mock/wizard.step2.test.svelte | 5 +- src/lib/stores/logs.ts | 7 ++ src/lib/stores/user.ts | 4 ++ src/lib/stores/wizard.ts | 11 +++- src/routes/+layout.svelte | 10 ++- src/routes/console/+layout.svelte | 6 ++ src/routes/console/account/+layout.svelte | 3 - .../function/[function]/+page.svelte | 8 ++- .../function/[function]/create.svelte | 17 ++++- .../function/[function]/execute.svelte | 2 +- .../[function]/executions/+page.svelte | 11 ++-- .../settings/webhooks/wizard/step3.svelte | 1 + src/routes/login/+page.svelte | 2 +- tests/unit/layout/wizard.test.ts | 56 ++++++++++++++-- 21 files changed, 237 insertions(+), 30 deletions(-) create mode 100644 src/lib/components/logs.svelte create mode 100644 src/lib/images/github-illustration.svg create mode 100644 src/lib/stores/logs.ts diff --git a/src/lib/components/index.ts b/src/lib/components/index.ts index d9d838dfb..606c2f68e 100644 --- a/src/lib/components/index.ts +++ b/src/lib/components/index.ts @@ -38,3 +38,4 @@ export { default as Tabs } from './tabs.svelte'; export { default as Tab } from './tab.svelte'; export { default as EventModal } from './eventModal.svelte'; export { default as Status } from './status.svelte'; +export { default as Logs } from './logs.svelte'; diff --git a/src/lib/components/logs.svelte b/src/lib/components/logs.svelte new file mode 100644 index 000000000..c3d46fdf4 --- /dev/null +++ b/src/lib/components/logs.svelte @@ -0,0 +1,65 @@ + + +{#if $log.deployment} + {@const size = humanFileSize($log.deployment.size)} +
      +
      +

      Function ID:

      + +
      +
      +
      +
      + Chrome +
      +
      +

      Deployment ID: {$log.deployment.$id}

      + +
      Size: {size.value} {size.unit}
      +
      + +
      + +
      +
      +
      +
        +
      • + +
      • +
      • + +
      • +
      +
      +
      +
      +
      +
      + + +
      +
      + Code will be here +
      +
      +
      +
      +{/if} diff --git a/src/lib/images/github-illustration.svg b/src/lib/images/github-illustration.svg new file mode 100644 index 000000000..3986d7a00 --- /dev/null +++ b/src/lib/images/github-illustration.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/lib/layout/shell.svelte b/src/lib/layout/shell.svelte index 79d720472..ca17ed9ff 100644 --- a/src/lib/layout/shell.svelte +++ b/src/lib/layout/shell.svelte @@ -25,6 +25,7 @@ import { goto } from '$app/navigation'; import { browser } from '$app/environment'; import { wizard } from '$lib/stores/wizard'; + import { log } from '$lib/stores/logs'; export let isOpen = false; export let showSideNavigation = false; @@ -75,7 +76,7 @@ class:grid-with-side={showSideNavigation} class:grid={!showSideNavigation} class:is-open={isOpen} - class:u-hide={$wizard.show}> + class:u-hide={$wizard.show || $log.show}>
      + diff --git a/src/routes/console/project-[project]/settings/webhooks/wizard/step3.svelte b/src/routes/console/project-[project]/settings/webhooks/wizard/step3.svelte index 34faf725d..4403ef024 100644 --- a/src/routes/console/project-[project]/settings/webhooks/wizard/step3.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/wizard/step3.svelte @@ -25,6 +25,7 @@ id="password" showPasswordButton placeholder="Enter password" + minlength={0} bind:value={$createWebhook.httpPass} /> { try { await sdkForConsole.account.createEmailSession(mail, pass); - user.fetchUser(); + await user.fetchUser(); addNotification({ type: 'success', message: 'Successfully logged in.' diff --git a/tests/unit/layout/wizard.test.ts b/tests/unit/layout/wizard.test.ts index f0aa058f6..b985b96d1 100644 --- a/tests/unit/layout/wizard.test.ts +++ b/tests/unit/layout/wizard.test.ts @@ -2,6 +2,7 @@ import '@testing-library/jest-dom'; import { render } from '@testing-library/svelte'; import { wizard } from '../../../src/lib/stores/wizard'; import { tick } from 'svelte'; +import userEvent from '@testing-library/user-event'; import WizardComponent from '../../../src/lib/mock/wizard.test.svelte'; import WizardContainer from '../../../src/lib/mock/wizard.container.test.svelte'; @@ -44,15 +45,15 @@ test('shows wizard and hides it', async () => { }); test('shows next step with submit', async () => { - const { getByTestId, getByRole, queryByText } = render(WizardContainer); + const { container, getByRole, queryByText } = render(WizardContainer); wizard.start(WizardComponent); await tick(); const form = getByRole('form') as HTMLFormElement; const step1 = queryByText('step-1'); - const step1Required = getByTestId('step-1-required'); - const step1Optional = getByTestId('step-1-optional'); + const step1Required = container.querySelector('#step-1-required'); + const step1Optional = container.querySelector('#step-1-optional'); expect(step1).toBeInTheDocument(); expect(step1Required).toBeInTheDocument(); @@ -64,8 +65,53 @@ test('shows next step with submit', async () => { expect(step1).not.toBeInTheDocument(); const step2 = queryByText('step-2'); - const step2First = getByTestId('step-2-first'); - const step2Second = getByTestId('step-2-second'); + const step2First = container.querySelector('#step-2-first'); + const step2Second = container.querySelector('#step-2-second'); + + expect(step2).toBeInTheDocument(); + expect(step2First).toBeInTheDocument(); + expect(step2Second).toBeInTheDocument(); + + form.submit(); + await tick(); + + expect(form).not.toBeInTheDocument(); + expect(step1).not.toBeInTheDocument(); + expect(step2).not.toBeInTheDocument(); +}); + +test('intercepts submit', async () => { + const { container, getByRole, queryByText } = render(WizardContainer); + + wizard.start(WizardComponent); + await tick(); + + const form = getByRole('form') as HTMLFormElement; + const step1 = queryByText('step-1'); + const step1Required = container.querySelector('#step-1-required'); + const step1Optional = container.querySelector('#step-1-optional'); + + expect(step1).toBeInTheDocument(); + expect(step1Required).toBeInTheDocument(); + expect(step1Optional).toBeInTheDocument(); + + await userEvent.type(step1Required, 'fail'); + form.submit(); + await tick(); + + expect(step1).toBeInTheDocument(); + expect(step1Required).toBeInTheDocument(); + expect(step1Optional).toBeInTheDocument(); + + await userEvent.type(step1Required, 'works'); + form.submit(); + await tick(); + + expect(step1).not.toBeInTheDocument(); + + const step2 = queryByText('step-2'); + const step2First = container.querySelector('#step-2-first'); + const step2Second = container.querySelector('#step-2-second'); expect(step2).toBeInTheDocument(); expect(step2First).toBeInTheDocument(); From 78c87c1b2e355e788e7b27ed71038b1547574eac Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 17 Oct 2022 15:16:20 +0200 Subject: [PATCH 075/105] feat: more work on logs --- src/lib/components/code.svelte | 7 +- src/lib/components/logs.svelte | 134 ++++++++++++------ src/lib/components/status.svelte | 4 +- src/lib/stores/logs.ts | 9 +- .../function/[function]/+page.svelte | 5 +- .../function/[function]/execute.svelte | 2 +- .../[function]/executions/+page.svelte | 2 +- .../storage/bucket/[bucket]/_create.svelte | 5 - 8 files changed, 109 insertions(+), 59 deletions(-) diff --git a/src/lib/components/code.svelte b/src/lib/components/code.svelte index f36802033..f1981d9be 100644 --- a/src/lib/components/code.svelte +++ b/src/lib/components/code.svelte @@ -5,6 +5,8 @@ import 'prismjs/components/prism-kotlin'; import 'prismjs/components/prism-json'; import 'prismjs/components/prism-bash'; + import 'prismjs/components/prism-php'; + import 'prismjs/components/prism-python'; import 'prismjs/plugins/autoloader/prism-autoloader'; import 'prismjs/plugins/line-numbers/prism-line-numbers'; import 'prismjs/plugins/line-numbers/prism-line-numbers.css'; @@ -13,16 +15,17 @@ export let label: string = null; export let code: string; - export let language: 'js' | 'html' | 'dart' | 'kotlin' | 'json' | 'sh'; + export let language: 'js' | 'html' | 'dart' | 'kotlin' | 'json' | 'sh' | 'php' | 'python'; export let showLineNumbers = false; export let showCopy = false; + export let scrollable = false; afterUpdate(async () => { Prism.highlightAll(); }); -
      +
      {#if label} {label} diff --git a/src/lib/components/logs.svelte b/src/lib/components/logs.svelte index c3d46fdf4..2db40bd9d 100644 --- a/src/lib/components/logs.svelte +++ b/src/lib/components/logs.svelte @@ -2,64 +2,108 @@ import { toLocaleDateTime } from '$lib/helpers/date'; import { humanFileSize } from '$lib/helpers/sizeConvertion'; import { log } from '$lib/stores/logs'; - import { Status } from '.'; + import { Code, Status, Tab, Tabs } from '.'; + import type { Models } from '@aw-labs/appwrite-console'; + import { Button } from '$lib/elements/forms'; + import { base } from '$app/paths'; + import { app } from '$lib/stores/app'; + import { sdkForConsole } from '$lib/stores/sdk'; + import { page } from '$app/stores'; console.log('test'); + + let selectedTab = 'response'; + let rawData = `${sdkForConsole.client.config.endpoint}/functions/${$log.func.$id}/execution/${$log.data.$id}?mode=admin&project=${$page.params.project}`; + + const languages = { + 'node-16.0': 'js', + 'php-8.0': 'php', + 'ruby-3.0': 'ruby', + 'python-3.9': 'python' + }; + + function isDeployment(data: Models.Deployment | Models.Execution): data is Models.Deployment { + selectedTab = 'logs'; + rawData = `${sdkForConsole.client.config.endpoint}/functions/${$log.func.$id}/deployment/${data.$id}?mode=admin&project=${$page.params.project}`; + + return true; + } -{#if $log.deployment} - {@const size = humanFileSize($log.deployment.size)} +{#if $log.data}
      -

      Function ID:

      +

      Function ID: {$log.func.$id}

      -
      -
      -
      - Chrome + {#if isDeployment($log.data)} + {@const size = humanFileSize($log.data.size)} +
      +
      +
      + technology +
      +
      +

      Deployment ID: {$log.data.$id}

      + +
      Size: {size.value} {size.unit}
      +
      +
      + {$log.data.status} + + +
      -
      -

      Deployment ID: {$log.deployment.$id}

      - -
      Size: {size.value} {size.unit}
      +
      + + (selectedTab = 'logs')}>Logs + (selectedTab = 'errors')}>Errors +
      - -
      - +
      +
      +
      +
      + + +
      +
      + {#if selectedTab === 'logs'} + + {:else} + + {/if} +
      -
      -
        -
      • - -
      • -
      • - -
      • -
      -
      -
      -
      -
      -
      - - -
      -
      - Code will be here -
      -
      -
      + {:else} + lol + {/if}
      {/if} diff --git a/src/lib/components/status.svelte b/src/lib/components/status.svelte index b144e511d..f4cffb78e 100644 --- a/src/lib/components/status.svelte +++ b/src/lib/components/status.svelte @@ -1,5 +1,7 @@
      ({ +export const log = writable<{ + show: boolean; + func: Models.Function; + data: Models.Execution | Models.Deployment; +}>({ show: false, - deployment: null + func: null, + data: null }); diff --git a/src/routes/console/project-[project]/functions/function/[function]/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/+page.svelte index 84833be41..34c9d5987 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/+page.svelte @@ -98,13 +98,14 @@ text on:click={() => { $log.show = true; - $log.deployment = activeDeployment; + $log.func = $func; + $log.data = activeDeployment; }}>Logs diff --git a/src/routes/console/project-[project]/functions/function/[function]/execute.svelte b/src/routes/console/project-[project]/functions/function/[function]/execute.svelte index b24caa8c9..1cd106d1a 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/execute.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/execute.svelte @@ -14,7 +14,7 @@ const handleSubmit = async () => { try { - await sdkForProject.functions.createExecution(selectedDeployment.$id, data); + await sdkForProject.functions.createExecution(selectedDeployment.$id, '{}'); showExecute = false; addNotification({ type: 'success', diff --git a/src/routes/console/project-[project]/functions/function/[function]/executions/+page.svelte b/src/routes/console/project-[project]/functions/function/[function]/executions/+page.svelte index 387d315c7..e6f5195ca 100644 --- a/src/routes/console/project-[project]/functions/function/[function]/executions/+page.svelte +++ b/src/routes/console/project-[project]/functions/function/[function]/executions/+page.svelte @@ -47,7 +47,7 @@ { $log.show = true; - $log.deployment = execution; + $log.data = execution; }}> diff --git a/src/routes/console/project-[project]/storage/bucket/[bucket]/_create.svelte b/src/routes/console/project-[project]/storage/bucket/[bucket]/_create.svelte index 6fc923157..df75e801d 100644 --- a/src/routes/console/project-[project]/storage/bucket/[bucket]/_create.svelte +++ b/src/routes/console/project-[project]/storage/bucket/[bucket]/_create.svelte @@ -15,9 +15,7 @@ const bucketId = $page.params.bucket; const dispatch = createEventDispatcher(); - let list = new DataTransfer(); let files: FileList; - let input: HTMLInputElement; let permissions: string[] = []; let id: string = null; let error: string; @@ -43,13 +41,10 @@ $: if (!showCreate) { id = files = error = null; - list = new DataTransfer(); permissions = []; } - - Upload File From a68afb9b9065a969bfca4ba97599881ebb11e5a2 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 17 Oct 2022 15:37:58 +0200 Subject: [PATCH 076/105] fix: merging errors --- src/lib/components/code.svelte | 22 ++++++++++++++----- src/lib/components/logs.svelte | 6 +++-- .../function/[function]/create.svelte | 4 ++-- .../function/[function]/execute.svelte | 2 +- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/lib/components/code.svelte b/src/lib/components/code.svelte index a94f6c072..d217ef3f9 100644 --- a/src/lib/components/code.svelte +++ b/src/lib/components/code.svelte @@ -19,11 +19,22 @@ export let label: string = null; export let labelIcon: 'code' | 'android' | 'flutter' | 'apple' = null; export let code: string; - export let language: 'js' | 'html' | 'dart' | 'kotlin' | 'json' | 'sh' | 'yml' | 'swift' | 'php' | 'python''' + export let language: + | 'js' + | 'html' + | 'dart' + | 'kotlin' + | 'json' + | 'sh' + | 'yml' + | 'swift' + | 'php' + | 'python'; export let withLineNumbers = false; export let withCopy = false; export let scrollable = false; - + export let noMargin = false; + Prism.plugins.customClass.prefix('prism-'); afterUpdate(async () => { @@ -31,7 +42,7 @@ }); -
      +
      {#if label} @@ -51,8 +62,9 @@ {/if}
      -
      {code}
      +
      +        {code}
      +