From f8b1f720a139333d74475221da36ca3f27c98656 Mon Sep 17 00:00:00 2001 From: m09l6d0ur13ii Date: Thu, 2 Jul 2026 18:26:17 +0500 Subject: [PATCH 1/2] fix pagination state and past members styling --- .../app/clan/[clanName]/ClanPlayerCount.tsx | 21 +++++++++++++++++ .../app/clan/[clanName]/PastMembersToggle.tsx | 12 ++++++++-- apps/frontend/app/clan/[clanName]/layout.tsx | 9 +++++++- apps/frontend/app/clan/[clanName]/page.tsx | 23 +++++++++++++++++-- apps/frontend/components/LastSeen.tsx | 6 +++-- apps/frontend/components/Pagination.tsx | 23 +++++++++++-------- apps/frontend/components/PlayerList.tsx | 18 +++++++++++---- 7 files changed, 90 insertions(+), 22 deletions(-) create mode 100644 apps/frontend/app/clan/[clanName]/ClanPlayerCount.tsx diff --git a/apps/frontend/app/clan/[clanName]/ClanPlayerCount.tsx b/apps/frontend/app/clan/[clanName]/ClanPlayerCount.tsx new file mode 100644 index 00000000..7352232d --- /dev/null +++ b/apps/frontend/app/clan/[clanName]/ClanPlayerCount.tsx @@ -0,0 +1,21 @@ +'use client'; + +import { useSearchParams } from 'next/navigation'; + +export function ClanPlayerCount({ + activeCount, + totalCount, +}: { + activeCount: number; + totalCount: number; +}) { + const searchParams = useSearchParams(); + const showPast = searchParams?.has('past') ?? false; + + return ( + + {activeCount} players + {showPast && ({totalCount})} + + ); +} diff --git a/apps/frontend/app/clan/[clanName]/PastMembersToggle.tsx b/apps/frontend/app/clan/[clanName]/PastMembersToggle.tsx index fe9b4013..24a73375 100644 --- a/apps/frontend/app/clan/[clanName]/PastMembersToggle.tsx +++ b/apps/frontend/app/clan/[clanName]/PastMembersToggle.tsx @@ -1,9 +1,10 @@ "use client"; -import { useRouter } from "next/navigation"; +import { useRouter, useSearchParams } from "next/navigation"; export function PastMembersToggle({ clanName, showPastMembers }: { clanName: string, showPastMembers: boolean }) { const router = useRouter(); + const searchParams = useSearchParams(); return (
@@ -12,7 +13,14 @@ export function PastMembersToggle({ clanName, showPastMembers }: { clanName: str type="checkbox" checked={showPastMembers} onChange={(e) => { - const url = `/clan/${encodeURIComponent(clanName)}${e.target.checked ? '?past=true' : ''}`; + const params = new URLSearchParams(searchParams.toString()); + if (e.target.checked) { + params.set('past', 'true'); + } else { + params.delete('past'); + } + const queryString = params.toString(); + const url = `/clan/${encodeURIComponent(clanName)}${queryString ? `?${queryString}` : ''}`; router.replace(url, { scroll: false }); }} className="cursor-pointer" diff --git a/apps/frontend/app/clan/[clanName]/layout.tsx b/apps/frontend/app/clan/[clanName]/layout.tsx index ce50e6ca..5528b038 100644 --- a/apps/frontend/app/clan/[clanName]/layout.tsx +++ b/apps/frontend/app/clan/[clanName]/layout.tsx @@ -4,6 +4,7 @@ import { LayoutTabs } from './LayoutTabs'; import { paramsSchema } from './schema'; import { z } from 'zod'; import { formatPlayTime } from '../../../utils/format'; +import { ClanPlayerCount } from './ClanPlayerCount'; export default async function Index({ params, @@ -19,6 +20,9 @@ export default async function Index({ name: true, playTime: true, activePlayerCount: true, + _count: { + select: { clanPlayerInfos: true }, + }, }, where: { name: clanName, @@ -51,7 +55,10 @@ export default async function Index({

{clan.name}

- {`${clan.activePlayerCount} players`} +