mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-09-30 08:03:13 +00:00
36 lines
1.4 KiB
TypeScript
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
|
|
);
|
|
}
|