Fix pagination totals for zero counts
This commit is contained in:
@@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -877,13 +877,18 @@ async function safeJson(response: Response): Promise<JsonValue | null> {
|
||||
}
|
||||
}
|
||||
|
||||
function buildPagination(payload: JsonValue | null, defaultCount: number): PaginationMeta {
|
||||
export function buildPagination(payload: JsonValue | null, defaultCount: number): PaginationMeta {
|
||||
const meta = (payload?.meta as Partial<PaginationMeta>) ?? {};
|
||||
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,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user