From d06c580857bf17038125bcf653867492f5469097 Mon Sep 17 00:00:00 2001 From: Joaquim Verges Date: Fri, 16 May 2025 23:30:44 +1200 Subject: [PATCH] [Dashboard] Add pagination to server wallets page --- .../engine/cloud/server-wallets/page.tsx | 15 +++- .../wallet-table/wallet-table-ui.client.tsx | 69 +++++++++++++++++++ .../wallet-table/wallet-table.tsx | 9 +++ 3 files changed, 91 insertions(+), 2 deletions(-) diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/cloud/server-wallets/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/cloud/server-wallets/page.tsx index 24c1640b341..65653d82cb5 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/cloud/server-wallets/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/cloud/server-wallets/page.tsx @@ -8,12 +8,14 @@ import { ServerWalletsTable } from "./wallet-table/wallet-table"; export default async function TransactionsServerWalletsPage(props: { params: Promise<{ team_slug: string; project_slug: string }>; + searchParams: Promise<{ page?: string }>; }) { const vaultClient = await createVaultClient({ baseUrl: NEXT_PUBLIC_THIRDWEB_VAULT_URL, }); const { team_slug, project_slug } = await props.params; + const { page } = await props.searchParams; const [authToken, project] = await Promise.all([ getAuthToken(), getProject(team_slug, project_slug), @@ -30,6 +32,8 @@ export default async function TransactionsServerWalletsPage(props: { const managementAccessToken = projectEngineCloudService?.managementAccessToken; + const pageSize = 10; + const currentPage = Number.parseInt(page ?? "1"); const eoas = managementAccessToken ? await listEoas({ client: vaultClient, @@ -37,10 +41,14 @@ export default async function TransactionsServerWalletsPage(props: { auth: { accessToken: managementAccessToken, }, - options: {}, + options: { + page: currentPage - 1, + // @ts-expect-error - TODO: fix this + page_size: pageSize, + }, }, }) - : { data: { items: [] }, error: null, success: true }; + : { data: { items: [], totalRecords: 0 }, error: null, success: true }; return ( <> @@ -50,6 +58,9 @@ export default async function TransactionsServerWalletsPage(props: {
+
+
+ Found {totalRecords} server wallets +
+ + + + 1 ? currentPage - 1 : 1 + }`} + passHref + legacyBehavior + > + + + + {Array.from({ length: totalPages }, (_, i) => i + 1).map( + (pageNumber) => ( + + + + {pageNumber} + + + + ), + )} + + + = totalPages + ? "pointer-events-none opacity-50" + : "" + } + /> + + + + +
); } diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/cloud/server-wallets/wallet-table/wallet-table.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/cloud/server-wallets/wallet-table/wallet-table.tsx index 0b604f6102c..2ce07f52645 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/cloud/server-wallets/wallet-table/wallet-table.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/engine/cloud/server-wallets/wallet-table/wallet-table.tsx @@ -6,16 +6,25 @@ export function ServerWalletsTable({ wallets, project, teamSlug, + currentPage, + totalPages, + totalRecords, managementAccessToken, }: { wallets: Wallet[]; project: Project; teamSlug: string; managementAccessToken: string | undefined; + totalRecords: number; + currentPage: number; + totalPages: number; }) { return (