mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-10-06 20:32:05 +00:00
fix(work-orders): compose full user names from User list
This commit is contained in:
parent
223a734b11
commit
e9e17dadec
2 changed files with 49 additions and 6 deletions
|
|
@ -110,18 +110,34 @@ function toUrlSearchParams(
|
||||||
return sp;
|
return sp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function readOptionalString(item: Record<string, unknown>, ...keys: string[]): string {
|
||||||
|
for (const key of keys) {
|
||||||
|
const value = item[key];
|
||||||
|
if (typeof value === "string" && value.trim()) {
|
||||||
|
return value.trim();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** GET User exposes `Name` as first name only; prefer FirstName + LastName when present. */
|
||||||
|
function mapUserDisplayName(item: Record<string, unknown>): string {
|
||||||
|
const firstName = readOptionalString(item, "firstName", "FirstName");
|
||||||
|
const lastName = readOptionalString(item, "lastName", "LastName");
|
||||||
|
const fallback = readOptionalString(item, "name", "Name", "userName", "UserName");
|
||||||
|
if (lastName) {
|
||||||
|
return `${firstName || fallback} ${lastName}`.trim();
|
||||||
|
}
|
||||||
|
return firstName || fallback;
|
||||||
|
}
|
||||||
|
|
||||||
function mapUser(raw: unknown): WorkOrderUser {
|
function mapUser(raw: unknown): WorkOrderUser {
|
||||||
const item = (typeof raw === "object" && raw !== null ? raw : {}) as Record<string, unknown>;
|
const item = (typeof raw === "object" && raw !== null ? raw : {}) as Record<string, unknown>;
|
||||||
const id = item.id ?? item.Id;
|
const id = item.id ?? item.Id;
|
||||||
const name =
|
|
||||||
(typeof item.name === "string" ? item.name : undefined) ??
|
|
||||||
(typeof item.Name === "string" ? item.Name : undefined) ??
|
|
||||||
(typeof item.userName === "string" ? item.userName : "") ??
|
|
||||||
"";
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id: typeof id === "string" || typeof id === "number" ? id : "",
|
id: typeof id === "string" || typeof id === "number" ? id : "",
|
||||||
name,
|
name: mapUserDisplayName(item),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -200,6 +200,33 @@ describe("workOrdersApi.fetchDispatchers", () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const GET_USER_SERIALIZED_DIRECTORY = {
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
Id: "s1",
|
||||||
|
Name: "Alex",
|
||||||
|
FirstName: "Alex",
|
||||||
|
LastName: "Smith",
|
||||||
|
UserName: "alex.smith",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
describe("workOrdersApi.fetchUsers", () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
apiGet.mockReset();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("composes a full display name from the serialized GET User shape", async () => {
|
||||||
|
apiGet.mockResolvedValue(GET_USER_SERIALIZED_DIRECTORY);
|
||||||
|
|
||||||
|
const users = await workOrdersApi.fetchUsers();
|
||||||
|
|
||||||
|
expect(apiGet).toHaveBeenCalledWith(API_PATHS.user.list);
|
||||||
|
expect(users).toEqual([{ id: "s1", name: "Alex Smith" }]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("workOrdersApi.getBoard", () => {
|
describe("workOrdersApi.getBoard", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
apiGet.mockReset();
|
apiGet.mockReset();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue