mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-10-02 15:33:12 +00:00
74 lines
1.8 KiB
TypeScript
74 lines
1.8 KiB
TypeScript
|
|
export interface PaginatedResult<T> {
|
||
|
|
items: T[];
|
||
|
|
totalCount: number;
|
||
|
|
page: number;
|
||
|
|
pageSize: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
||
|
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function handleApiResponse<T>(data: unknown): T {
|
||
|
|
if (Array.isArray(data)) {
|
||
|
|
return data as T;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (isRecord(data)) {
|
||
|
|
const nested = data.data ?? data.Data ?? data.value;
|
||
|
|
if (nested !== undefined) {
|
||
|
|
return nested as T;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return data as T;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function handlePaginatedResponse<T>(
|
||
|
|
data: unknown,
|
||
|
|
params?: { page?: number; pageSize?: number },
|
||
|
|
): PaginatedResult<T> {
|
||
|
|
const page = params?.page ?? 1;
|
||
|
|
const pageSize = params?.pageSize ?? 12;
|
||
|
|
|
||
|
|
if (Array.isArray(data)) {
|
||
|
|
return {
|
||
|
|
items: data as T[],
|
||
|
|
totalCount: data.length,
|
||
|
|
page,
|
||
|
|
pageSize,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
if (isRecord(data)) {
|
||
|
|
const nested = data.data ?? data.Data ?? data.value ?? data;
|
||
|
|
const items = Array.isArray(nested) ? (nested as T[]) : [];
|
||
|
|
|
||
|
|
const totalCount =
|
||
|
|
(typeof data.totalCount === "number" ? data.totalCount : undefined) ??
|
||
|
|
(typeof data.TotalCount === "number" ? data.TotalCount : undefined) ??
|
||
|
|
(typeof data.Count === "number" ? data.Count : undefined) ??
|
||
|
|
items.length;
|
||
|
|
|
||
|
|
return {
|
||
|
|
items,
|
||
|
|
totalCount,
|
||
|
|
page:
|
||
|
|
(typeof data.pageNumber === "number" ? data.pageNumber : undefined) ??
|
||
|
|
(typeof data.PageNumber === "number" ? data.PageNumber : undefined) ??
|
||
|
|
page,
|
||
|
|
pageSize:
|
||
|
|
(typeof data.pageSize === "number" ? data.pageSize : undefined) ??
|
||
|
|
(typeof data.PageSize === "number" ? data.PageSize : undefined) ??
|
||
|
|
pageSize,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
return {
|
||
|
|
items: [],
|
||
|
|
totalCount: 0,
|
||
|
|
page,
|
||
|
|
pageSize,
|
||
|
|
};
|
||
|
|
}
|