From 36939c3860c0459c0a4e0aff87fed3e4de67b083 Mon Sep 17 00:00:00 2001 From: Arman Date: Fri, 2 Sep 2022 19:24:53 +0200 Subject: [PATCH 01/42] feat: create account pages --- src/lib/layout/header.svelte | 3 +- src/lib/layout/shell.svelte | 13 ++ src/lib/stores/user.ts | 3 + src/routes/console/$me.svelte | 20 -- src/routes/console/__layout.svelte | 5 +- src/routes/console/account/__layout.svelte | 51 +++++ src/routes/console/account/activity.svelte | 0 src/routes/console/account/index.svelte | 183 ++++++++++++++++++ .../console/account/organizations.svelte | 0 src/routes/console/account/session.svelte | 0 10 files changed, 256 insertions(+), 22 deletions(-) delete mode 100644 src/routes/console/$me.svelte create mode 100644 src/routes/console/account/__layout.svelte create mode 100644 src/routes/console/account/activity.svelte create mode 100644 src/routes/console/account/index.svelte create mode 100644 src/routes/console/account/organizations.svelte create mode 100644 src/routes/console/account/session.svelte diff --git a/src/lib/layout/header.svelte b/src/lib/layout/header.svelte index bd0dfc233..b704975c0 100644 --- a/src/lib/layout/header.svelte +++ b/src/lib/layout/header.svelte @@ -86,7 +86,8 @@ showDropdown = false; newOrgModal.set(true); }}>New organization - Your Account + Your Account
diff --git a/src/lib/layout/shell.svelte b/src/lib/layout/shell.svelte index 98d62d6bf..0a2108b7e 100644 --- a/src/lib/layout/shell.svelte +++ b/src/lib/layout/shell.svelte @@ -13,6 +13,8 @@ } from '$lib/stores/organization'; import { sdkForConsole } from '$lib/stores/sdk'; import { base } from '$app/paths'; + import { user } from '$lib/stores/user'; + import { goto } from '$app/navigation'; export let isOpen = false; export let showSideNavigation = false; @@ -55,6 +57,11 @@ } }); + const logout = async () => { + await user.logout(); + await goto(`${base}/login`); + }; + const onScroll = () => { if (!tabsList) { return; @@ -159,6 +166,12 @@ {$title} {/if} + {#if $page.url.pathname.includes('/console/account')} +
+ +
+ {/if} + {#if $copyData?.value} diff --git a/src/lib/stores/user.ts b/src/lib/stores/user.ts index fe9993066..12a84121b 100644 --- a/src/lib/stores/user.ts +++ b/src/lib/stores/user.ts @@ -10,6 +10,9 @@ function createUserStore() { set, fetchUser: async () => { set(await sdkForConsole.account.get()); + }, + logout: async () => { + await sdkForConsole.account.deleteSession('current'); } }; } diff --git a/src/routes/console/$me.svelte b/src/routes/console/$me.svelte deleted file mode 100644 index 732f4edb7..000000000 --- a/src/routes/console/$me.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -

hey

- - diff --git a/src/routes/console/__layout.svelte b/src/routes/console/__layout.svelte index 19f720775..c1edbe0df 100644 --- a/src/routes/console/__layout.svelte +++ b/src/routes/console/__layout.svelte @@ -36,7 +36,10 @@ Appwrite - Console - +
diff --git a/src/routes/console/account/__layout.svelte b/src/routes/console/account/__layout.svelte new file mode 100644 index 000000000..d6b6d2ab4 --- /dev/null +++ b/src/routes/console/account/__layout.svelte @@ -0,0 +1,51 @@ + + + + Appwrite - User + + + diff --git a/src/routes/console/account/activity.svelte b/src/routes/console/account/activity.svelte new file mode 100644 index 000000000..e69de29bb diff --git a/src/routes/console/account/index.svelte b/src/routes/console/account/index.svelte new file mode 100644 index 000000000..ca3ffdad8 --- /dev/null +++ b/src/routes/console/account/index.svelte @@ -0,0 +1,183 @@ + + + +
+ +
Update Name
+ + +
    + +
+
+ + + + +
+
+
+ +
Update Email
+ + + + + + + + + + + +
+
+
+ +
Update Password
+

+ Forgot your password? Recover your password +

+ + + + + + + + + + + +
+
+ +
+
Delete Account
+
+

+ Your account will be permanently deleted and access will be lost to any of your teams + and data. This action is irreversible. +

+ + + + + + +
{$user.name}
+
+

{$user.email}

+
+
+ + + + +
+
diff --git a/src/routes/console/account/organizations.svelte b/src/routes/console/account/organizations.svelte new file mode 100644 index 000000000..e69de29bb diff --git a/src/routes/console/account/session.svelte b/src/routes/console/account/session.svelte new file mode 100644 index 000000000..e69de29bb From 5264a2160dd7f1ffd0e8741709df4d92178e26f8 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 5 Sep 2022 12:27:25 +0200 Subject: [PATCH 02/42] chore: bump to 0.0.0-52 --- package-lock.json | 28 +++++++++---------- package.json | 4 +-- .../{session.svelte => sessions.svelte} | 0 3 files changed, 16 insertions(+), 16 deletions(-) rename src/routes/console/account/{session.svelte => sessions.svelte} (100%) diff --git a/package-lock.json b/package-lock.json index 6b75109a5..8c63e3246 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "version": "0.0.1", "dependencies": { "@aw-labs/appwrite-console": "^1.0.0-0", - "@aw-labs/icons": "0.0.0-51", - "@aw-labs/ui": "0.0.0-51", + "@aw-labs/icons": "0.0.0-52", + "@aw-labs/ui": "0.0.0-52", "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-51", - "resolved": "https://registry.npmjs.org/@aw-labs/icons/-/icons-0.0.0-51.tgz", - "integrity": "sha512-fp/ysdMyjbG9lnYTDSE58cOxbHP6xj+N6GCVQm9vYmqZ3/FbE2lTayc8lW7v0FrL/EKWoD7bInwspiniK4jKfQ==" + "version": "0.0.0-52", + "resolved": "https://registry.npmjs.org/@aw-labs/icons/-/icons-0.0.0-52.tgz", + "integrity": "sha512-A2bqLMTETaWUYiXuruw8zkW292rjGOeAtII+FbgasHkoJvC8cf2Ne2av4rzqenJdx6zRDQTRmwJl8FW7hcwI8Q==" }, "node_modules/@aw-labs/ui": { - "version": "0.0.0-51", - "resolved": "https://registry.npmjs.org/@aw-labs/ui/-/ui-0.0.0-51.tgz", - "integrity": "sha512-oTTrnN/Okhl1Yvs5eNpnYHjtxmYdUxW7tUPhgamsK5EwvkU0dxoj5vcI9KK3QbJmD9qxlwJrh9xlyOqQTXsZBQ==", + "version": "0.0.0-52", + "resolved": "https://registry.npmjs.org/@aw-labs/ui/-/ui-0.0.0-52.tgz", + "integrity": "sha512-4xS+rCd/UDI+p0JMceIbNO4uZ3HYz5TcfCWdgHFA5seBJ6rN0wS/bZPxjHd95BL0on5RtruME0t151gD4dFFxQ==", "dependencies": { "@aw-labs/icons": "*" } @@ -7698,14 +7698,14 @@ } }, "@aw-labs/icons": { - "version": "0.0.0-51", - "resolved": "https://registry.npmjs.org/@aw-labs/icons/-/icons-0.0.0-51.tgz", - "integrity": "sha512-fp/ysdMyjbG9lnYTDSE58cOxbHP6xj+N6GCVQm9vYmqZ3/FbE2lTayc8lW7v0FrL/EKWoD7bInwspiniK4jKfQ==" + "version": "0.0.0-52", + "resolved": "https://registry.npmjs.org/@aw-labs/icons/-/icons-0.0.0-52.tgz", + "integrity": "sha512-A2bqLMTETaWUYiXuruw8zkW292rjGOeAtII+FbgasHkoJvC8cf2Ne2av4rzqenJdx6zRDQTRmwJl8FW7hcwI8Q==" }, "@aw-labs/ui": { - "version": "0.0.0-51", - "resolved": "https://registry.npmjs.org/@aw-labs/ui/-/ui-0.0.0-51.tgz", - "integrity": "sha512-oTTrnN/Okhl1Yvs5eNpnYHjtxmYdUxW7tUPhgamsK5EwvkU0dxoj5vcI9KK3QbJmD9qxlwJrh9xlyOqQTXsZBQ==", + "version": "0.0.0-52", + "resolved": "https://registry.npmjs.org/@aw-labs/ui/-/ui-0.0.0-52.tgz", + "integrity": "sha512-4xS+rCd/UDI+p0JMceIbNO4uZ3HYz5TcfCWdgHFA5seBJ6rN0wS/bZPxjHd95BL0on5RtruME0t151gD4dFFxQ==", "requires": { "@aw-labs/icons": "*" } diff --git a/package.json b/package.json index 5bbc0e2ef..73f4f7fb6 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,8 @@ }, "dependencies": { "@aw-labs/appwrite-console": "^1.0.0-0", - "@aw-labs/icons": "0.0.0-51", - "@aw-labs/ui": "0.0.0-51", + "@aw-labs/icons": "0.0.0-52", + "@aw-labs/ui": "0.0.0-52", "echarts": "^5.3.3", "tippy.js": "^6.3.7", "web-vitals": "^2.1.4" diff --git a/src/routes/console/account/session.svelte b/src/routes/console/account/sessions.svelte similarity index 100% rename from src/routes/console/account/session.svelte rename to src/routes/console/account/sessions.svelte From c47e45b092c59162b757e416d17c4e85f74fec49 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 5 Sep 2022 12:38:43 +0200 Subject: [PATCH 03/42] feat: pw field appears after user types email --- src/routes/console/account/index.svelte | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/routes/console/account/index.svelte b/src/routes/console/account/index.svelte index ca3ffdad8..dec31d90b 100644 --- a/src/routes/console/account/index.svelte +++ b/src/routes/console/account/index.svelte @@ -108,13 +108,15 @@ placeholder="Enter email" autocomplete={false} bind:value={email} /> - + {#if email !== $user.email && email} + + {/if} @@ -172,7 +174,6 @@
{$user.name}
-

{$user.email}

From b62d1b45668af3fbf6617009bec6332af63ad362 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 5 Sep 2022 13:13:23 +0200 Subject: [PATCH 04/42] feat: organizations page --- .../console/account/organizations.svelte | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/src/routes/console/account/organizations.svelte b/src/routes/console/account/organizations.svelte index e69de29bb..c862481f1 100644 --- a/src/routes/console/account/organizations.svelte +++ b/src/routes/console/account/organizations.svelte @@ -0,0 +1,110 @@ + + + +
+

Organizations

+ + +
+ + {#if $organizationList?.teams?.length} +
    3 ? '22rem' : '25rem' + };`}> + {#each $organizationList.teams as organization, index} + {@const avatarList = getMemberships(organization.$id)} + {#if index >= offset && index < limit + offset} + + {organization?.total ? organization?.total : 'No'} projects + + {organization.name} + + {#await avatarList} + + {:then avatars} + + {/await} + + {/if} + {/each} + {#if $organizationList?.total < limit + offset && ($organizationList?.total % 2 !== 0 || $organizationList?.total % 4 === 0)} + (addOrganization = true)}> +
    + +
    +
    +

    Create a new organization

    +
    +
    + {/if} +
+ +
+

Total results: {$organizationList?.total}

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

Create a new organization

+
+
+
+
+
+

Total results: {$organizationList?.total}

+ +
+ {/if} +
+ + From 42df43d379e18941374e7342262da1d392f54143 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 5 Sep 2022 13:32:17 +0200 Subject: [PATCH 05/42] feat: add activity page --- src/routes/console/account/activity.svelte | 101 +++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/src/routes/console/account/activity.svelte b/src/routes/console/account/activity.svelte index e69de29bb..9f39e3610 100644 --- a/src/routes/console/account/activity.svelte +++ b/src/routes/console/account/activity.svelte @@ -0,0 +1,101 @@ + + + +
+

Activity

+
+ + {#await request} +
+ {:then response} + {#if response.total} + + + Date + Event + Client + Location + IP + + + {#each response.logs as log} + + {toLocaleDateTime(log.time)} + {log.event} + + +
+
+ {log.clientName} +
+

+ {log.clientName} + {log.clientVersion} + on {log.osName} + {log.osVersion} +

+
+
+ + + {#if log.countryCode !== '--'} + {log.countryName} + {:else} + Unknown + {/if} + + {log.ip} +
+ {/each} +
+
+ {:else} + +
+
+

No logs available

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

Total results: {response.total}

+ +
+ {/await} + From 23dc0aa158bf35936741a99807bbdafd37cfa6ad Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 5 Sep 2022 13:36:13 +0200 Subject: [PATCH 06/42] feat: add unknown option --- src/routes/console/account/activity.svelte | 35 +++++++++++++--------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/routes/console/account/activity.svelte b/src/routes/console/account/activity.svelte index 9f39e3610..b7f6a212f 100644 --- a/src/routes/console/account/activity.svelte +++ b/src/routes/console/account/activity.svelte @@ -48,21 +48,28 @@ {log.event} -
-
- {log.clientName} + {#if log.clientName} +
+
+ {log.clientName} +
+

+ {log.clientName} + {log.clientVersion} + on {log.osName} + {log.osVersion} +

-

- {log.clientName} - {log.clientVersion} - on {log.osName} - {log.osVersion} -

-
+ {:else} +
+ +

Unknown

+
+ {/if} From 463cb1ff716778f8ef39c99abfa724c2249540a1 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 5 Sep 2022 16:48:25 +0200 Subject: [PATCH 07/42] feat: sessions page --- src/lib/layout/header.svelte | 5 +- src/routes/console/account/activity.svelte | 4 - src/routes/console/account/sessions.svelte | 124 +++++++++++++++++++++ 3 files changed, 127 insertions(+), 6 deletions(-) diff --git a/src/lib/layout/header.svelte b/src/lib/layout/header.svelte index b704975c0..b4d0dabff 100644 --- a/src/lib/layout/header.svelte +++ b/src/lib/layout/header.svelte @@ -86,8 +86,9 @@ showDropdown = false; newOrgModal.set(true); }}>New organization - Your Account + (showDropdown = false)}>Your Account
diff --git a/src/routes/console/account/activity.svelte b/src/routes/console/account/activity.svelte index b7f6a212f..a9ecbaa27 100644 --- a/src/routes/console/account/activity.svelte +++ b/src/routes/console/account/activity.svelte @@ -25,10 +25,6 @@ -
-

Activity

-
- {#await request}
{:then response} diff --git a/src/routes/console/account/sessions.svelte b/src/routes/console/account/sessions.svelte index e69de29bb..6bc5c6eca 100644 --- a/src/routes/console/account/sessions.svelte +++ b/src/routes/console/account/sessions.svelte @@ -0,0 +1,124 @@ + + + +
+

Sessions

+ + +
+ {#await request} +
+ {:then response} + {#if response.total} + + + Client + Location + IP + + + + {#each response.sessions as session} + + +
+
+ {#if session.clientName} +
+ {session.clientName} +
+

+ {session.clientName} + {session.clientVersion} + on {session.osName} + {session.osVersion} +

+ {:else} + +

Unknown

+ {/if} +
+ + {session.provider} + {#if session.current} + current session + {/if} +
+
+ + {#if session.countryCode !== '--'} + {session.countryName} + {:else} + Unknown + {/if} + + {session.ip} + + + +
+ {/each} +
+
+ {:else} + +
+
+

No sessions available

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

Total results: {response.total}

+ +
+ {/await} + From 8b52afd21cc17f201ece8c7b7051d41bde3f0a43 Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 6 Sep 2022 14:29:33 +0200 Subject: [PATCH 08/42] feat: replaced icons with svg --- src/lib/layout/unauthenticated.svelte | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/layout/unauthenticated.svelte b/src/lib/layout/unauthenticated.svelte index 564fe2567..f224530a3 100644 --- a/src/lib/layout/unauthenticated.svelte +++ b/src/lib/layout/unauthenticated.svelte @@ -3,6 +3,7 @@ import LoginLight from '$lib/images/login/login-light-mode.svg'; import LoginDark from '$lib/images/login/login-dark-mode.svg'; import { app } from '$lib/stores/app'; + import { base } from '$app/paths'; const technologies = [ 'js', @@ -51,10 +52,9 @@ class="u-flex u-main-center u-flex-wrap u-gap-16 u-margin-block-start-32 u-line-height-1 "> {#each technologies as tech}
  • -
  • {/each} From 75e0b90fabd676a404a3b9f1909501b274cb90a2 Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 6 Sep 2022 15:17:32 +0200 Subject: [PATCH 09/42] feat: start work on invite page --- src/lib/layout/unauthenticated.svelte | 4 ++- src/routes/__layout.svelte | 6 +++- src/routes/invite.svelte | 47 +++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/routes/invite.svelte diff --git a/src/lib/layout/unauthenticated.svelte b/src/lib/layout/unauthenticated.svelte index f224530a3..c73669bb8 100644 --- a/src/lib/layout/unauthenticated.svelte +++ b/src/lib/layout/unauthenticated.svelte @@ -54,7 +54,9 @@
  • {tech} + alt={tech} + aria-hidden="true" + aria-label={tech} />
  • {/each} diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte index 71975c517..f32e855a0 100644 --- a/src/routes/__layout.svelte +++ b/src/routes/__layout.svelte @@ -23,6 +23,8 @@ window.GOOGLE_ANALYTICS = import.meta.env.VITE_GOOGLE_ANALYTICS?.toString() ?? false; } + const acceptedRoutes = ['/login', '/register', '/recover', '/invite']; + onMount(async () => { try { if (!$user) { @@ -33,7 +35,9 @@ await redirectTo(); } } catch (error) { - await goto(`${base}/login`); + if (acceptedRoutes.includes($page.url.pathname)) { + await goto(`${base}${$page.url.pathname}`); + } else await goto(`${base}/login`); } finally { loaded = true; } diff --git a/src/routes/invite.svelte b/src/routes/invite.svelte new file mode 100644 index 000000000..8063113c3 --- /dev/null +++ b/src/routes/invite.svelte @@ -0,0 +1,47 @@ + + + + Appwrite - Accept invite + + + + Invite + +
    + + + + + + +
    +
    +
    From bd019108160e29e55f392e4a596e8fe8c5edcb40 Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 6 Sep 2022 15:47:27 +0200 Subject: [PATCH 10/42] fix: if the user leaves org, logout --- .../organization-[organization]/_deleteMember.svelte | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/routes/console/organization-[organization]/_deleteMember.svelte b/src/routes/console/organization-[organization]/_deleteMember.svelte index 215cee0a8..a17103997 100644 --- a/src/routes/console/organization-[organization]/_deleteMember.svelte +++ b/src/routes/console/organization-[organization]/_deleteMember.svelte @@ -1,4 +1,6 @@
    - +
    diff --git a/src/routes/console/account/activity.svelte b/src/routes/console/account/activity.svelte index a9ecbaa27..5f00d11e2 100644 --- a/src/routes/console/account/activity.svelte +++ b/src/routes/console/account/activity.svelte @@ -53,7 +53,9 @@ src={getBrowser(log.clientCode).toString()} alt={log.clientName} />
    -

    +

    {log.clientName} {log.clientVersion} on {log.osName} From d6a992aad304c4c8b6c477b9e4b595e3461491ac Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 6 Sep 2022 15:48:33 +0200 Subject: [PATCH 12/42] feat: create delete account --- src/routes/console/account/_delete.svelte | 37 +++++++++++++++++++++++ src/routes/console/account/index.svelte | 7 +++-- 2 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 src/routes/console/account/_delete.svelte diff --git a/src/routes/console/account/_delete.svelte b/src/routes/console/account/_delete.svelte new file mode 100644 index 000000000..fea8b5b79 --- /dev/null +++ b/src/routes/console/account/_delete.svelte @@ -0,0 +1,37 @@ + + +

    + + Delete Account +

    Are you sure you want to delete your account?

    + + + + +
    +
    diff --git a/src/routes/console/account/index.svelte b/src/routes/console/account/index.svelte index dec31d90b..df6fadaa2 100644 --- a/src/routes/console/account/index.svelte +++ b/src/routes/console/account/index.svelte @@ -8,13 +8,14 @@ import { addNotification } from '$lib/stores/notifications'; import { title, breadcrumbs } from '$lib/stores/layout'; import { base } from '$app/paths'; + import Delete from './_delete.svelte'; let name: string = null, email: string = null, emailPassword: string = null, newPassword: string = null, oldPassword: string = null; - // let showDelete = false; + let showDelete = false; onMount(async () => { name ??= $user.name; @@ -178,7 +179,9 @@ - +
    + + From 24c1332c806861a848113e8947a79aa71936d720 Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 6 Sep 2022 16:06:17 +0200 Subject: [PATCH 13/42] chore: remove todo --- src/routes/console/account/_delete.svelte | 1 - 1 file changed, 1 deletion(-) diff --git a/src/routes/console/account/_delete.svelte b/src/routes/console/account/_delete.svelte index fea8b5b79..f64b36636 100644 --- a/src/routes/console/account/_delete.svelte +++ b/src/routes/console/account/_delete.svelte @@ -9,7 +9,6 @@ const deleteAccount = async () => { try { - //TODO delete all data beforehand?? await sdkForConsole.users.delete($user.$id); showDelete = false; addNotification({ From ec7f894e4dde7c070987c94e7fcfd1592e22641d Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 6 Sep 2022 18:31:51 +0200 Subject: [PATCH 14/42] feat: update css --- src/lib/layout/unauthenticated.svelte | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/lib/layout/unauthenticated.svelte b/src/lib/layout/unauthenticated.svelte index c73669bb8..8bd6ed1ac 100644 --- a/src/lib/layout/unauthenticated.svelte +++ b/src/lib/layout/unauthenticated.svelte @@ -32,8 +32,9 @@
    +
    {#if $app.themeInUse === 'dark'} @@ -44,8 +45,9 @@
    +

    Integrate with your favourite technologies

    -
    +
    From c81e1ccec086dd501456b348d856a650847bfc37 Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 6 Sep 2022 18:32:17 +0200 Subject: [PATCH 15/42] feat: create inputChoice --- src/lib/elements/forms/index.ts | 1 + src/lib/elements/forms/inputChoice.svelte | 30 +++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/lib/elements/forms/inputChoice.svelte diff --git a/src/lib/elements/forms/index.ts b/src/lib/elements/forms/index.ts index 48988a2fe..7ed7d656f 100644 --- a/src/lib/elements/forms/index.ts +++ b/src/lib/elements/forms/index.ts @@ -15,5 +15,6 @@ export { default as InputSearch } from './inputSearch.svelte'; export { default as InputRadio } from './inputRadio.svelte'; 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 Helper } from './helper.svelte'; diff --git a/src/lib/elements/forms/inputChoice.svelte b/src/lib/elements/forms/inputChoice.svelte new file mode 100644 index 000000000..be04a386a --- /dev/null +++ b/src/lib/elements/forms/inputChoice.svelte @@ -0,0 +1,30 @@ + + + + + From 43ed6e33f5b5f015b4b9980076b3f6056cdcbd32 Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 6 Sep 2022 18:32:46 +0200 Subject: [PATCH 16/42] fix: invite url --- .../console/organization-[organization]/_createMember.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/console/organization-[organization]/_createMember.svelte b/src/routes/console/organization-[organization]/_createMember.svelte index 237c167ca..b3b2f67c5 100644 --- a/src/routes/console/organization-[organization]/_createMember.svelte +++ b/src/routes/console/organization-[organization]/_createMember.svelte @@ -14,7 +14,7 @@ const dispatch = createEventDispatcher(); let email: string, name: string, error: string; - const url = `${$page.url.origin}/console/`; + const url = `${$page.url.origin}/invite`; const create = async () => { try { From e5d623cc14c221eb9a063b21df38441fa8c7d4f5 Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 6 Sep 2022 18:33:15 +0200 Subject: [PATCH 17/42] fix: add notification to resend invite --- .../members.svelte | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/routes/console/organization-[organization]/members.svelte b/src/routes/console/organization-[organization]/members.svelte index 1106e994a..0a3bc0115 100644 --- a/src/routes/console/organization-[organization]/members.svelte +++ b/src/routes/console/organization-[organization]/members.svelte @@ -18,6 +18,7 @@ import type { Models } from '@aw-labs/appwrite-console'; import { pageLimit } from '$lib/stores/layout'; import { page } from '$app/stores'; + import { addNotification } from '$lib/stores/notifications'; let search = ''; let offset: number = null; @@ -29,14 +30,26 @@ const getAvatar = (name: string) => sdkForConsole.avatars.getInitials(name, 120, 120).toString(); const deleted = () => memberList.load($organization.$id, search, $pageLimit, offset ?? 0); - const resend = async (member: Models.Membership) => - await sdkForConsole.teams.createMembership( - $organization.$id, - member.userEmail, - member.roles, - url, - member.userName - ); + const resend = async (member: Models.Membership) => { + try { + await sdkForConsole.teams.createMembership( + $organization.$id, + member.userEmail, + member.roles, + url, + member.userName + ); + addNotification({ + type: 'success', + message: `Invite has been sent to ${member.userEmail}` + }); + } catch (error) { + addNotification({ + type: 'error', + message: error + }); + } + }; $: if (search) offset = 0; $: memberList.load($organization.$id, search, $pageLimit, offset ?? 0); From 0d283a61754d67e3dae1f12f5c0f9b7e26d61038 Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 6 Sep 2022 18:33:43 +0200 Subject: [PATCH 18/42] feat: mantain url search params --- src/routes/__layout.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte index f32e855a0..2b2f30128 100644 --- a/src/routes/__layout.svelte +++ b/src/routes/__layout.svelte @@ -36,7 +36,7 @@ } } catch (error) { if (acceptedRoutes.includes($page.url.pathname)) { - await goto(`${base}${$page.url.pathname}`); + await goto(`${base}${$page.url.pathname}${$page.url.search}`); } else await goto(`${base}/login`); } finally { loaded = true; From 8ce7c6040bf631f1c6feece9ceb1123b092b6e28 Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 6 Sep 2022 18:34:47 +0200 Subject: [PATCH 19/42] feat: accept invite function --- src/routes/invite.svelte | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/routes/invite.svelte b/src/routes/invite.svelte index 8063113c3..fd6814476 100644 --- a/src/routes/invite.svelte +++ b/src/routes/invite.svelte @@ -1,18 +1,26 @@ - +
    From 5d43f42aed57ded224802b33f0d4a52c2c7ac585 Mon Sep 17 00:00:00 2001 From: Arman Date: Wed, 7 Sep 2022 16:14:35 +0200 Subject: [PATCH 24/42] feat: errors scroll into view --- src/lib/components/modal.svelte | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/lib/components/modal.svelte b/src/lib/components/modal.svelte index 05da1e24f..8a85e526b 100644 --- a/src/lib/components/modal.svelte +++ b/src/lib/components/modal.svelte @@ -10,6 +10,7 @@ export let error: string = null; export let closable = true; + let alert: HTMLElement; const dispatch = createEventDispatcher(); const transitionFly: FlyParams = { duration: 150, @@ -48,6 +49,10 @@ document.body.classList.remove('u-overflow-hidden'); } } + + $: if (error) { + alert?.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' }); + } @@ -81,14 +86,16 @@
    From 11cabddc75362656211f48bdc744e9b4a4c4099f Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 8 Sep 2022 09:21:19 +0200 Subject: [PATCH 25/42] feat: initial commit --- src/lib/components/copyInput.svelte | 31 ++++---- .../project-[project]/settings/index.svelte | 70 +++++++++++++++---- 2 files changed, 75 insertions(+), 26 deletions(-) diff --git a/src/lib/components/copyInput.svelte b/src/lib/components/copyInput.svelte index 507d69fcc..782e89c80 100644 --- a/src/lib/components/copyInput.svelte +++ b/src/lib/components/copyInput.svelte @@ -4,6 +4,8 @@ import { addNotification } from '$lib/stores/notifications'; export let value: string; + export let label: string = null; + export let showLabel = false; let content = 'Click to copy'; @@ -21,17 +23,20 @@
    - - + +
    + + +
    diff --git a/src/routes/console/project-[project]/settings/index.svelte b/src/routes/console/project-[project]/settings/index.svelte index d2fb3e02f..9d9c065ec 100644 --- a/src/routes/console/project-[project]/settings/index.svelte +++ b/src/routes/console/project-[project]/settings/index.svelte @@ -1,15 +1,31 @@ -

    Overview

    {#if $project} - -
    - - - - - -
    +
    + +
    Update Name
    + + + + + + + + + + +
    +
    + + +
    API Credentials
    +

    + Access Appwrite services using your API Endpoint and Project ID. You can connect + Appwrite to your applications and server-side code by integrating a new platform + or + creating an API key. +

    + + + + + + +
    {/if}
    From b514a364e91a7811ffdfbc72105470f08db36883 Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 8 Sep 2022 09:42:54 +0200 Subject: [PATCH 26/42] fix: button disabled if data not set --- src/routes/invite.svelte | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/routes/invite.svelte b/src/routes/invite.svelte index e2caedb2d..3c72d44a3 100644 --- a/src/routes/invite.svelte +++ b/src/routes/invite.svelte @@ -9,6 +9,9 @@ import { page } from '$app/stores'; import { onMount } from 'svelte'; + let teamId: string, membershipId: string, userId: string, secret: string; + let terms = false; + onMount(() => { userId = $page.url.searchParams.get('userId'); secret = $page.url.searchParams.get('secret'); @@ -16,12 +19,10 @@ membershipId = $page.url.searchParams.get('membershipId'); }); - let teamId: string, membershipId: string, userId: string, secret: string; - let terms = false; const acceptInvite = async () => { try { await sdkForConsole.teams.updateMembershipStatus(teamId, membershipId, userId, secret); - user.fetchUser(); + await user.fetchUser(); addNotification({ type: 'success', message: 'Successfully logged in.' @@ -58,7 +59,8 @@
    - +
    From 905245dc5e20abe6aab2eafe152cff3e6aa32b80 Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 8 Sep 2022 09:44:53 +0200 Subject: [PATCH 27/42] fix: awaited logout --- .../console/organization-[organization]/_deleteMember.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/console/organization-[organization]/_deleteMember.svelte b/src/routes/console/organization-[organization]/_deleteMember.svelte index a17103997..8a7ba31f5 100644 --- a/src/routes/console/organization-[organization]/_deleteMember.svelte +++ b/src/routes/console/organization-[organization]/_deleteMember.svelte @@ -19,7 +19,7 @@ await sdkForConsole.teams.deleteMembership(selectedMember.teamId, selectedMember.$id); if (isUser) { - user.logout(); + await user.logout(); await goto(`${base}/login`); } else { dispatch('deleted'); From a2973677ba46a09e83ff5ed30d3c33fb6c73e6e4 Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 8 Sep 2022 11:03:16 +0200 Subject: [PATCH 28/42] feat: add services section --- src/lib/stores/project-services.ts | 117 ++++++++++++++++++ .../project-[project]/settings/index.svelte | 51 +++++++- 2 files changed, 165 insertions(+), 3 deletions(-) create mode 100644 src/lib/stores/project-services.ts diff --git a/src/lib/stores/project-services.ts b/src/lib/stores/project-services.ts new file mode 100644 index 000000000..6f4a8cb0d --- /dev/null +++ b/src/lib/stores/project-services.ts @@ -0,0 +1,117 @@ +import { writable } from 'svelte/store'; +import type { Models } from '@aw-labs/appwrite-console'; + +export type Service = { + label: string; + method: string; + value: boolean | null; +}; + +function createServices() { + const { subscribe, set } = writable({ + list: [ + { + label: 'Account', + method: 'account', + value: null + }, + { + label: 'Avatars', + method: 'avatars', + value: null + }, + { + label: 'Databases', + method: 'databases', + value: null + }, + { + label: 'Functions', + method: 'functions', + value: null + }, + { + label: 'Health', + method: 'health', + value: null + }, + { + label: 'Locale', + method: 'locale', + value: null + }, + { + label: 'Storage', + method: 'storage', + value: null + }, + { + label: 'Teams', + method: 'teams', + value: null + }, + { + label: 'Users', + method: 'users', + value: null + } + ] + }); + + return { + subscribe, + set, + load: (project: Models.Project) => { + const list = [ + { + label: 'Account', + method: 'account', + value: project.serviceStatusForAccount + }, + { + label: 'Avatars', + method: 'avatars', + value: project.serviceStatusForAvatars + }, + { + label: 'Databases', + method: 'databases', + value: project.serviceStatusForDatabases + }, + { + label: 'Functions', + method: 'functions', + value: project.serviceStatusForFunctions + }, + { + label: 'Health', + method: 'health', + value: project.serviceStatusForHealth + }, + { + label: 'Locale', + method: 'locale', + value: project.serviceStatusForLocale + }, + { + label: 'Storage', + method: 'storage', + value: project.serviceStatusForStorage + }, + { + label: 'Teams', + method: 'teams', + value: project.serviceStatusForTeams + }, + { + label: 'Users', + method: 'users', + value: project.serviceStatusForUsers + } + ]; + set({ list }); + } + }; +} + +export const services = createServices(); diff --git a/src/routes/console/project-[project]/settings/index.svelte b/src/routes/console/project-[project]/settings/index.svelte index 9d9c065ec..a6ec762ab 100644 --- a/src/routes/console/project-[project]/settings/index.svelte +++ b/src/routes/console/project-[project]/settings/index.svelte @@ -1,19 +1,19 @@ @@ -60,7 +83,7 @@
    API Credentials
    -

    +

    Access Appwrite services using your API Endpoint and Project ID. You can connect Appwrite to your applications and server-side code by integrating a new platform @@ -74,5 +97,27 @@ + + +

    Services
    +

    Choose services you wish to enable or disable.

    + + +
    +
      + {#each $services.list as service} + { + serviceUpdate(service); + }} /> + {/each} +
    +
    +
    +
    +
    {/if}
    From e4a2a2181c567ea915475a5e84f34ec96bb03424 Mon Sep 17 00:00:00 2001 From: Arman Date: Thu, 8 Sep 2022 11:24:31 +0200 Subject: [PATCH 29/42] feat: completed setting page --- .../settings/_deleteProject.svelte | 70 +++++++++++++++++++ .../project-[project]/settings/index.svelte | 39 +++++++++-- 2 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 src/routes/console/project-[project]/settings/_deleteProject.svelte diff --git a/src/routes/console/project-[project]/settings/_deleteProject.svelte b/src/routes/console/project-[project]/settings/_deleteProject.svelte new file mode 100644 index 000000000..c57d5bf12 --- /dev/null +++ b/src/routes/console/project-[project]/settings/_deleteProject.svelte @@ -0,0 +1,70 @@ + + +
    + + Delete Project +

    + This project will be deleted, along with all of its metadata, stats, and other + resources. This action is irreversible. +

    + + + + + + + + + +
    +
    diff --git a/src/routes/console/project-[project]/settings/index.svelte b/src/routes/console/project-[project]/settings/index.svelte index a6ec762ab..29b5069b8 100644 --- a/src/routes/console/project-[project]/settings/index.svelte +++ b/src/routes/console/project-[project]/settings/index.svelte @@ -1,15 +1,18 @@ {#if $notifications} -
    -
      +
      +
        {#each $notifications as notification (notification.id)} Date: Thu, 8 Sep 2022 12:54:02 +0200 Subject: [PATCH 31/42] chore: removed members page (move to org screen) --- .../settings/__layout.svelte | 4 -- .../project-[project]/settings/members.svelte | 50 ------------------- 2 files changed, 54 deletions(-) delete mode 100644 src/routes/console/project-[project]/settings/members.svelte diff --git a/src/routes/console/project-[project]/settings/__layout.svelte b/src/routes/console/project-[project]/settings/__layout.svelte index 5b0ab13ea..133d65fbc 100644 --- a/src/routes/console/project-[project]/settings/__layout.svelte +++ b/src/routes/console/project-[project]/settings/__layout.svelte @@ -29,10 +29,6 @@ { href: `${path}/domains`, title: 'Custom Domains' - }, - { - href: `${path}/members`, - title: 'Members' } ] }); diff --git a/src/routes/console/project-[project]/settings/members.svelte b/src/routes/console/project-[project]/settings/members.svelte deleted file mode 100644 index da6770b55..000000000 --- a/src/routes/console/project-[project]/settings/members.svelte +++ /dev/null @@ -1,50 +0,0 @@ - - - -

        Members

        - {#await request} -
        - {:then response} - {#if response} - - {#each response.memberships as membership} - - -

        - - {membership.userName} - -

        - {#each membership.roles as role} - {role} - {/each} - {#if !membership.confirm} - Pending Approval - {/if} -
        - - {membership.userEmail} - - - - -
        - {:else} -

        No sessions available.

        - {/each} -
        - {/if} - {/await} - From 580c835b60f06ccc7624ee9c68b13020155415fe Mon Sep 17 00:00:00 2001 From: Arman Date: Fri, 9 Sep 2022 11:29:50 +0200 Subject: [PATCH 32/42] fix: hide form causing layout shift on scroll --- src/routes/console/__layout.svelte | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/routes/console/__layout.svelte b/src/routes/console/__layout.svelte index 19f720775..e772abdce 100644 --- a/src/routes/console/__layout.svelte +++ b/src/routes/console/__layout.svelte @@ -47,4 +47,6 @@