From db90b9af2eb7bcabf3c9fce92687812909272829 Mon Sep 17 00:00:00 2001 From: Codex Agent Date: Fri, 23 Jan 2026 17:33:18 +0100 Subject: [PATCH] Fix pagination totals for zero counts --- resources/js/admin/__tests__/api.test.ts | 14 +++++++++++++- resources/js/admin/api.ts | 11 ++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/resources/js/admin/__tests__/api.test.ts b/resources/js/admin/__tests__/api.test.ts index c120e22..b93a39f 100644 --- a/resources/js/admin/__tests__/api.test.ts +++ b/resources/js/admin/__tests__/api.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { normalizeTenantPackage } from '../api'; +import { buildPagination, normalizeTenantPackage } from '../api'; describe('normalizeTenantPackage', () => { it('keeps remaining_events null when payload is null', () => { @@ -17,3 +17,15 @@ describe('normalizeTenantPackage', () => { expect(normalized.remaining_events).toBe(2); }); }); + +describe('buildPagination', () => { + it('keeps totals at zero when meta total is zero', () => { + const meta = buildPagination({ meta: { total: 0, per_page: 1, current_page: 1, last_page: 1 } } as any, 1); + expect(meta.total).toBe(0); + }); + + it('falls back to data length when total is missing', () => { + const meta = buildPagination({ data: [] } as any, 1); + expect(meta.total).toBe(0); + }); +}); diff --git a/resources/js/admin/api.ts b/resources/js/admin/api.ts index aa66b15..21e7bfe 100644 --- a/resources/js/admin/api.ts +++ b/resources/js/admin/api.ts @@ -877,13 +877,18 @@ async function safeJson(response: Response): Promise { } } -function buildPagination(payload: JsonValue | null, defaultCount: number): PaginationMeta { +export function buildPagination(payload: JsonValue | null, defaultCount: number): PaginationMeta { const meta = (payload?.meta as Partial) ?? {}; + const data = payload && typeof payload === 'object' ? (payload as { data?: unknown }).data : undefined; + const fallbackTotal = Array.isArray(data) ? data.length : defaultCount ?? 0; + const perPage = Number(meta.per_page ?? payload?.per_page ?? defaultCount ?? 0); + const total = Number(meta.total ?? payload?.total ?? fallbackTotal); + return { current_page: Number(meta.current_page ?? payload?.current_page ?? 1), last_page: Number(meta.last_page ?? payload?.last_page ?? 1), - per_page: Number(meta.per_page ?? payload?.per_page ?? defaultCount ?? 0) || defaultCount || 0, - total: Number(meta.total ?? payload?.total ?? defaultCount ?? 0) || defaultCount || 0, + per_page: Number.isFinite(perPage) ? perPage : defaultCount ?? 0, + total: Number.isFinite(total) ? total : defaultCount ?? 0, }; }