fix(M3-M11): clients meta pagination, client detail types, sidebar icon imports, payments error state; add E2E specs for all modules

This commit is contained in:
Forge
2026-03-26 09:41:15 +08:00
parent 562ff9e9b6
commit 9d107ece2f
13 changed files with 390 additions and 24 deletions

View File

@@ -20,7 +20,8 @@ interface Client {
area: { id: string; name: string } | null;
subscriptions: Array<{ status: string; type: string; monthlyPrice: string; plan?: { name: string }; }>;
}
interface ClientsResponse { data: Client[]; total: number; page: number; limit: number; }
interface ClientsMeta { total: number; page: number; limit: number; totalPages: number; }
interface ClientsResponse { data: Client[]; meta: ClientsMeta; }
const statusVariant: Record<string, "success" | "warning" | "danger" | "muted"> = {
ACTIVE: "success", PENDING: "warning", SUSPENDED: "danger", DISCONNECTED: "muted", CANCELLED: "muted",
@@ -78,7 +79,7 @@ export default function ClientsPage() {
});
const clients = data?.data ?? [];
const total = data?.total ?? 0;
const total = data?.meta?.total ?? 0;
return (
<div className="space-y-6">
@@ -155,8 +156,8 @@ export default function ClientsPage() {
<div className="flex items-center justify-between px-4 py-3 border-t text-sm text-gray-500">
<span>Showing {(page - 1) * 20 + 1}{Math.min(page * 20, total)} of {total}</span>
<div className="flex gap-2">
<button disabled={page === 1} onClick={() => setPage(p => p - 1)} className="px-3 py-1 border rounded-md disabled:opacity-40">Prev</button>
<button disabled={page * 20 >= total} onClick={() => setPage(p => p + 1)} className="px-3 py-1 border rounded-md disabled:opacity-40">Next</button>
<button disabled={page === 1} onClick={() => setPage(p => p - 1)} className="px-3 py-1 border rounded-md disabled:opacity-40 cursor-pointer">Prev</button>
<button disabled={page >= (data?.meta?.totalPages ?? 1)} onClick={() => setPage(p => p + 1)} className="px-3 py-1 border rounded-md disabled:opacity-40 cursor-pointer">Next</button>
</div>
</div>
)}