diff --git a/src/domain/employees/api/employees-api.ts b/src/domain/employees/api/employees-api.ts index c3c3fb0d..2c9dbe12 100644 --- a/src/domain/employees/api/employees-api.ts +++ b/src/domain/employees/api/employees-api.ts @@ -20,6 +20,37 @@ function buildSearchParams(params: EmployeesListParams): Record { + const targetId = String(id); + let page = 1; + const pageSize = 100; + + while (true) { + const data = await apiGet(API_PATHS.employee.getList, { + searchParams: { search: "", page, pageSize }, + }); + const paginated = handlePaginatedResponse(data, { page, pageSize }); + const match = paginated.items.find((item) => { + const record = (typeof item === "object" && item !== null ? item : {}) as Record< + string, + unknown + >; + const itemId = record.id ?? record.Id; + return String(itemId) === targetId; + }); + + if (match) { + return transformEmployee(match); + } + + if (paginated.items.length === 0 || page * pageSize >= paginated.totalCount) { + return null; + } + + page += 1; + } +} + export const employeesApi = { getList: async (params: EmployeesListParams = {}): Promise => { const searchParams = buildSearchParams(params); @@ -38,10 +69,14 @@ export const employeesApi = { }, getById: async (id: string | number): Promise => { - const data = await apiGet(API_PATHS.employee.getById, { - searchParams: { id }, - }); - return transformEmployee(handleApiResponse(data)); + try { + const data = await apiGet(API_PATHS.employee.getById, { + searchParams: { id }, + }); + return transformEmployee(handleApiResponse(data)); + } catch { + return findEmployeeInList(id); + } }, create: async (payload: Employee): Promise => { @@ -66,5 +101,26 @@ export const employeesApi = { }); }, - getDropdown: () => apiGet(API_PATHS.employee.dropdown), + getDropdown: async () => { + try { + return await apiGet(API_PATHS.employee.dropdown); + } catch { + const data = await apiGet(API_PATHS.employee.getList, { + searchParams: { page: 1, pageSize: 1000 }, + }); + const paginated = handlePaginatedResponse(data); + return paginated.items.map((item) => { + const record = (typeof item === "object" && item !== null ? item : {}) as Record< + string, + unknown + >; + const firstName = String(record.firstName ?? record.FirstName ?? ""); + const lastName = String(record.lastName ?? record.LastName ?? ""); + return { + id: record.id ?? record.Id, + name: `${firstName} ${lastName}`.trim(), + }; + }); + } + }, };