shoc-frontend-new/src/api/paginated-response-fields.ts

36 lines
1.4 KiB
TypeScript

/** Field readers for paginated API payloads that tolerate PascalCase/camelCase and nested envelopes. */
export function readItems<T>(record: Record<string, unknown>): T[] {
const nested = record.data ?? record.Data ?? record.value;
const itemsFromPaged =
(Array.isArray(record.items) ? (record.items as T[]) : undefined) ??
(Array.isArray(record.Items) ? (record.Items as T[]) : undefined);
return itemsFromPaged ?? (Array.isArray(nested) ? (nested as T[]) : []);
}
export function readTotalCount(record: Record<string, unknown>, fallback: number): number {
return (
(typeof record.totalCount === "number" ? record.totalCount : undefined) ??
(typeof record.TotalCount === "number" ? record.TotalCount : undefined) ??
(typeof record.Count === "number" ? record.Count : undefined) ??
fallback
);
}
export function readPage(record: Record<string, unknown>, fallback: number): number {
return (
(typeof record.page === "number" ? record.page : undefined) ??
(typeof record.pageNumber === "number" ? record.pageNumber : undefined) ??
(typeof record.PageNumber === "number" ? record.PageNumber : undefined) ??
fallback
);
}
export function readPageSize(record: Record<string, unknown>, fallback: number): number {
return (
(typeof record.pageSize === "number" ? record.pageSize : undefined) ??
(typeof record.PageSize === "number" ? record.PageSize : undefined) ??
fallback
);
}