export interface PaginatedResult { items: T[]; totalCount: number; page: number; pageSize: number; } function isRecord(value: unknown): value is Record { return typeof value === "object" && value !== null && !Array.isArray(value); } export function handleApiResponse(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( data: unknown, params?: { page?: number; pageSize?: number }, ): PaginatedResult { 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; const itemsFromPaged = (Array.isArray(data.items) ? (data.items as T[]) : undefined) ?? (Array.isArray(data.Items) ? (data.Items as T[]) : undefined); const items = itemsFromPaged ?? (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.page === "number" ? data.page : undefined) ?? (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, }; }