From 4830551edc03686fc0319209c4992d912cb31846 Mon Sep 17 00:00:00 2001 From: bytedream Date: Tue, 29 Aug 2023 04:46:42 +0200 Subject: [PATCH] show count of users and admin on admin page --- src/lib/stores.ts | 3 +++ src/routes/admin/+layout.server.ts | 12 ++++++++++++ src/routes/admin/+layout.svelte | 7 +++++++ src/routes/admin/admin/+page.svelte | 5 ++++- 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 src/routes/admin/+layout.server.ts diff --git a/src/lib/stores.ts b/src/lib/stores.ts index 55eba30..67598cd 100644 --- a/src/lib/stores.ts +++ b/src/lib/stores.ts @@ -1,4 +1,7 @@ import { persisted } from 'svelte-local-storage-store'; import type { Writable } from 'svelte/store'; +import { writable } from 'svelte/store'; export const playAudio: Writable = persisted('playAudio', false); + +export const adminCount: Writable = writable(0); diff --git a/src/routes/admin/+layout.server.ts b/src/routes/admin/+layout.server.ts new file mode 100644 index 0000000..638b14d --- /dev/null +++ b/src/routes/admin/+layout.server.ts @@ -0,0 +1,12 @@ +import type { LayoutServerLoad } from './$types'; +import { Admin, User } from '$lib/server/database'; +import { getSession } from '$lib/server/session'; + +export const load: LayoutServerLoad = async ({ cookies }) => { + const session = getSession(cookies); + + return { + userCount: session?.permissions.userRead() ? await User.count() : 0, + adminCount: session?.permissions.adminRead() ? await Admin.count() : 0 + }; +}; diff --git a/src/routes/admin/+layout.svelte b/src/routes/admin/+layout.svelte index 7f5110f..18e652f 100644 --- a/src/routes/admin/+layout.svelte +++ b/src/routes/admin/+layout.svelte @@ -4,6 +4,8 @@ import { IconOutline } from 'svelte-heros-v2'; import { buttonTriggeredRequest } from '$lib/components/utils'; import { goto } from '$app/navigation'; + import type { LayoutData } from './$types'; + import { adminCount } from '$lib/stores'; async function logout() { const response = await fetch(`${env.PUBLIC_BASE_PATH}/admin/logout`, { @@ -15,6 +17,9 @@ throw new Error(); } } + + export let data: LayoutData; + $adminCount = data.adminCount; {#if $page.url.pathname !== `${env.PUBLIC_BASE_PATH}/admin/login`} @@ -25,12 +30,14 @@ Registrierte Nutzer +
{data.userCount}
  • Website Admins +
    {$adminCount}
  • diff --git a/src/routes/admin/admin/+page.svelte b/src/routes/admin/admin/+page.svelte index e8e4bef..61d7cdb 100644 --- a/src/routes/admin/admin/+page.svelte +++ b/src/routes/admin/admin/+page.svelte @@ -8,6 +8,7 @@ import ErrorToast from '$lib/components/Toast/ErrorToast.svelte'; import { buttonTriggeredRequest, resizeTableColumn } from '$lib/components/utils'; import { goto } from '$app/navigation'; + import { adminCount } from '$lib/stores'; let allPermissionBadges = { 'Admin Read': Permissions.AdminRead, @@ -31,6 +32,7 @@ }); if (response.ok) { let res = await response.json(); + $adminCount += 1; res.permissions = new Permissions(res.permissions).asArray(); data.admins.push(res); data.admins = data.admins; @@ -74,6 +76,7 @@ if (id === data.id) { await goto(`${env.PUBLIC_BASE_PATH}/`); } else { + $adminCount -= 1; data.admins.splice( data.admins.findIndex((v) => v.id == id), 1 @@ -193,7 +196,7 @@ {/each} - {data.admins.length} + {data.admins.length + 1}