From 872ea83c50a38cacea30c77cd0e64ea67f36d2aa Mon Sep 17 00:00:00 2001 From: tabacoWang <7a6ac0@users.noreply.github.com> Date: Tue, 2 Apr 2024 18:22:56 +0800 Subject: [PATCH] feat: admin panel user list pagination --- src/lib/components/common/Paginator.svelte | 254 +++++++++++++++++++++ src/routes/(app)/admin/+page.svelte | 18 +- 2 files changed, 271 insertions(+), 1 deletion(-) create mode 100644 src/lib/components/common/Paginator.svelte diff --git a/src/lib/components/common/Paginator.svelte b/src/lib/components/common/Paginator.svelte new file mode 100644 index 00000000..dd5c5296 --- /dev/null +++ b/src/lib/components/common/Paginator.svelte @@ -0,0 +1,254 @@ + + +
+ + {#if settings.amounts.length} + + {/if} + +
+ + {#if showFirstLastButtons} + + {/if} + + {#if showPreviousNextButtons} + + {/if} + + {#if showNumerals === false} + + + {:else} + + {#each controlPages as page} + + {/each} + {/if} + + {#if showPreviousNextButtons} + + {/if} + + {#if showFirstLastButtons} + + {/if} +
+
diff --git a/src/routes/(app)/admin/+page.svelte b/src/routes/(app)/admin/+page.svelte index a90b3262..92a8315b 100644 --- a/src/routes/(app)/admin/+page.svelte +++ b/src/routes/(app)/admin/+page.svelte @@ -12,6 +12,7 @@ import { getSignUpEnabledStatus, toggleSignUpEnabledStatus } from '$lib/apis/auths'; import EditUserModal from '$lib/components/admin/EditUserModal.svelte'; import SettingsModal from '$lib/components/admin/SettingsModal.svelte'; + import Paginator from '$lib/components/common/Paginator.svelte'; const i18n = getContext('i18n'); @@ -24,6 +25,13 @@ let showSettingsModal = false; let showEditUserModal = false; + let paginatorSettings = { + page: 0, + limit: 5, + size: users.length, + amounts: [5, 10, 15, 20] + }; + const updateRoleHandler = async (id, role) => { const res = await updateUserRole(localStorage.token, id, role).catch((error) => { toast.error(error); @@ -64,6 +72,13 @@ } loaded = true; }); + + $: paginatedSource = users.slice( + paginatorSettings.page * paginatorSettings.limit, + paginatorSettings.page * paginatorSettings.limit + paginatorSettings.limit + ); + + $: paginatorSettings.size = users.length; @@ -159,7 +174,7 @@ - {#each users.filter((user) => { + {#each paginatedSource.filter((user) => { if (search === '') { return true; } else { @@ -265,6 +280,7 @@ {/each} +