From a109a68f40524b95be20d487ade76d140bcaa13d Mon Sep 17 00:00:00 2001 From: "arthur.bassi" Date: Tue, 18 Aug 2026 17:28:14 -0300 Subject: [PATCH] fix(work-orders): keep SH-188 tooltip when mixed with other gaps Stop copying WO lifecycle status into uplift primaryStatus on flat board rows. --- .../work-orders/mappers/work-order-table-row-mapper.ts | 4 +++- src/domain/work-orders/utils/wo-closability.ts | 2 +- .../work-orders/mappers/work-order-mapper.test.ts | 10 ++++++++++ .../domain/work-orders/utils/wo-closability.test.ts | 10 ++++++++-- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/domain/work-orders/mappers/work-order-table-row-mapper.ts b/src/domain/work-orders/mappers/work-order-table-row-mapper.ts index 0442d420..41ee9924 100644 --- a/src/domain/work-orders/mappers/work-order-table-row-mapper.ts +++ b/src/domain/work-orders/mappers/work-order-table-row-mapper.ts @@ -239,7 +239,9 @@ function readUpliftSummary(item: Record): WorkOrderUpliftSummar hasUplift: hasUplift || pendingCount > 0, pendingCount, }; - const primaryStatus = readString(source, "primaryStatus", "PrimaryStatus", "status", "Status"); + const primaryStatus = + readString(nested, "primaryStatus", "PrimaryStatus") || + readString(item, "primaryStatus", "PrimaryStatus"); if (primaryStatus) { summary.primaryStatus = primaryStatus; } diff --git a/src/domain/work-orders/utils/wo-closability.ts b/src/domain/work-orders/utils/wo-closability.ts index 024a1ca5..be377091 100644 --- a/src/domain/work-orders/utils/wo-closability.ts +++ b/src/domain/work-orders/utils/wo-closability.ts @@ -109,7 +109,7 @@ export function getClosabilityGaps(row: WoClosabilityInput): string[] { } export function formatClosabilityMissingTitle(gaps: string[]): string { - if (gaps.length === 1 && gaps[0] === PENDING_UPLIFT_GAP) { + if (gaps.includes(PENDING_UPLIFT_GAP)) { return UPLIFT_PENDING_COMPLETED_TITLE; } return `Missing: ${gaps.join(", ")}`; diff --git a/src/test/domain/work-orders/mappers/work-order-mapper.test.ts b/src/test/domain/work-orders/mappers/work-order-mapper.test.ts index 76d4af5c..107d63f0 100644 --- a/src/test/domain/work-orders/mappers/work-order-mapper.test.ts +++ b/src/test/domain/work-orders/mappers/work-order-mapper.test.ts @@ -209,6 +209,16 @@ describe("mapWorkOrderTableRow (board DTO)", () => { expect(clear.upliftSummary).toEqual({ hasUplift: false, pendingCount: 0 }); }); + it("does not copy work-order status into uplift primaryStatus on flat board rows", () => { + const row = mapWorkOrderTableRow({ + id: 308, + pendingUpliftCount: 1, + status: "In Progress", + Status: "In Progress", + }); + expect(row.upliftSummary?.primaryStatus).toBeUndefined(); + }); + it("leaves hasPendingUplift undefined when board count is absent", () => { const row = mapWorkOrderTableRow({ id: 307 }); expect(row.hasPendingUplift).toBeUndefined(); diff --git a/src/test/domain/work-orders/utils/wo-closability.test.ts b/src/test/domain/work-orders/utils/wo-closability.test.ts index 7c761560..8af2724e 100644 --- a/src/test/domain/work-orders/utils/wo-closability.test.ts +++ b/src/test/domain/work-orders/utils/wo-closability.test.ts @@ -128,9 +128,15 @@ describe("formatClosabilityMissingTitle", () => { ); }); - it("joins multiple gaps with Missing prefix", () => { + it("uses design Completed title when pending uplift is among mixed gaps", () => { expect(formatClosabilityMissingTitle(["Dispatcher", PENDING_UPLIFT_GAP])).toBe( - `Missing: Dispatcher, ${PENDING_UPLIFT_GAP}`, + UPLIFT_PENDING_COMPLETED_TITLE, + ); + }); + + it("joins multiple non-uplift gaps with Missing prefix", () => { + expect(formatClosabilityMissingTitle(["Dispatcher", "Company"])).toBe( + "Missing: Dispatcher, Company", ); }); });