This commit is contained in:
MaKarin
2026-04-04 20:37:56 +03:00
parent 698bc64d41
commit 05946a51b5
6 changed files with 72 additions and 44 deletions

View File

@@ -54,6 +54,26 @@ function appendSearchParam(
searchParams.append(key, String(value));
}
function parseListBody(json: unknown): { rows: unknown[]; totalHint?: number } {
if (Array.isArray(json)) {
return { rows: json };
}
if (
json !== null &&
typeof json === "object" &&
"data" in json &&
Array.isArray((json as { data: unknown }).data)
) {
const body = json as { data: unknown[]; total?: unknown };
const totalHint =
typeof body.total === "number" && Number.isFinite(body.total)
? body.total
: undefined;
return { rows: body.data, totalHint };
}
return { rows: [] };
}
function buildListUrl(resource: string, params: any): string {
const resourcePath = resource === "equipment" ? "equipments" : resource;
const searchParams = new URLSearchParams();
@@ -83,16 +103,16 @@ export const dataProvider: DataProvider = {
return { data: [json], total: 1 };
}
const { json, headers } = await fetchJson(buildListUrl(resource, params));
const { rows, totalHint } = parseListBody(json);
const contentRange = headers.get("Content-Range");
const total = contentRange
? Number(
contentRange.split("/").pop() ??
(Array.isArray(json) ? json.length : 0),
totalHint ??
rows.length,
)
: Array.isArray(json)
? json.length
: 0;
return { data: Array.isArray(json) ? json : [], total };
: (totalHint ?? rows.length);
return { data: rows as any[], total };
},
getOne: async (resource, params) => {
const resourcePath = resource === "equipment" ? "equipments" : resource;