From 99c758872ace33e769ef42c9da2a3ce625589753 Mon Sep 17 00:00:00 2001 From: Arthur Bassi Date: Thu, 10 Sep 2026 18:15:02 -0300 Subject: [PATCH] fix(work-orders): extract helpers to satisfy governance complexity --- .../tabs/slide-over-info-tab-display-view.tsx | 231 ++++++++++++------ .../cells/vendor-dialog-company-card.tsx | 92 +++++-- .../work-orders/utils/completion-doc-site.ts | 56 +++-- 3 files changed, 257 insertions(+), 122 deletions(-) diff --git a/src/app/(protected)/workorders/_components/detail/tabs/slide-over-info-tab-display-view.tsx b/src/app/(protected)/workorders/_components/detail/tabs/slide-over-info-tab-display-view.tsx index edc03f69..1109be91 100644 --- a/src/app/(protected)/workorders/_components/detail/tabs/slide-over-info-tab-display-view.tsx +++ b/src/app/(protected)/workorders/_components/detail/tabs/slide-over-info-tab-display-view.tsx @@ -32,6 +32,151 @@ type SlideOverInfoTabDisplayViewProps = { pmTypes: string[]; }; +type FrozenPoc = ReturnType; + +function formatScheduleOn(source: WorkOrderTableRow): string { + if (source.scheduleWeekOnly && source.targetWeek) { + return `Week of ${source.targetWeek}`; + } + return source.scheduledOn || "—"; +} + +function formatApptDisplay(apptTime: string): string { + const appt = parseApptTime(apptTime); + if (appt.start) return formatApptRange(appt.start, appt.end); + return apptTime || "—"; +} + +function formatPocLine(poc: FrozenPoc): string { + const primary = poc.contacts[0]; + const name = primary?.name || "—"; + if (!primary?.phone) return name; + return `${name} · ${primary.phone}`; +} + +function SlideOverTypeField({ type }: { type: WorkOrderTableRow["type"] }) { + if (!type) { + return —; + } + return ; +} + +function SlideOverCompletedSite({ + source, + poc, + sites, +}: { + source: WorkOrderTableRow; + poc: FrozenPoc; + sites: LocationOption[]; +}) { + const primaryPoc = poc.contacts[0]; + return ( + ({ + name: contact.name ?? "", + phone: contact.phone ?? "", + }))} + sites={sites} + viewOnly + frozenSite={source.frozenSite} + onSave={() => undefined} + /> + ); +} + +function SlideOverSiteField({ + source, + isCompleted, + poc, + sites, +}: { + source: WorkOrderTableRow; + isCompleted: boolean; + poc: FrozenPoc; + sites: LocationOption[]; +}) { + if (!isCompleted) { + return ( + + {source.site || "—"} + + ); + } + return ; +} + +function SlideOverOpenService({ source }: { source: WorkOrderTableRow }) { + if (!source.pm) { + return —; + } + return ( + + + {source.pm} + {Boolean(source.avetaRequired) && ( + + )} + + ); +} + +function SlideOverServiceField({ + source, + isCompleted, + pmTypes, +}: { + source: WorkOrderTableRow; + isCompleted: boolean; + pmTypes: string[]; +}) { + if (!isCompleted) return ; + return ( + undefined} + /> + ); +} + +function SlideOverVendorField({ + source, + isCompleted, + vendors, +}: { + source: WorkOrderTableRow; + isCompleted: boolean; + vendors: VendorDropdownItem[]; +}) { + if (!isCompleted) return ; + const company = effectiveCompany(source); + return ( + undefined} + /> + ); +} + export function SlideOverInfoTabDisplayView({ source, isCancelled, @@ -41,11 +186,7 @@ export function SlideOverInfoTabDisplayView({ vendors, pmTypes, }: SlideOverInfoTabDisplayViewProps) { - const appt = parseApptTime(source.apptTime); - const apptDisplay = appt.start ? formatApptRange(appt.start, appt.end) : source.apptTime || "—"; - const company = effectiveCompany(source); const poc = effectivePoc(source); - const primaryPoc = poc.contacts[0]; return (
@@ -53,38 +194,10 @@ export function SlideOverInfoTabDisplayView({ {source.woNumber || "—"} - {isCompleted ? ( - ({ - name: contact.name ?? "", - phone: contact.phone ?? "", - }))} - sites={sites} - viewOnly - frozenSite={source.frozenSite} - onSave={() => undefined} - /> - ) : ( - - {source.site || "—"} - - )} + - {source.type ? ( - - ) : ( - — - )} + - - {source.scheduleWeekOnly && source.targetWeek - ? `Week of ${source.targetWeek}` - : source.scheduledOn || "—"} - + {formatScheduleOn(source)} {source.dueDate || "—"} - {apptDisplay} + {formatApptDisplay(source.apptTime)} - {isCompleted ? ( - undefined} - /> - ) : source.pm ? ( - - - {source.pm} - {Boolean(source.avetaRequired) && ( - - )} - - ) : ( - — - )} + - {isCompleted ? ( - undefined} - /> - ) : ( - - )} + @@ -154,8 +228,7 @@ export function SlideOverInfoTabDisplayView({ - {primaryPoc?.name || "—"} - {primaryPoc?.phone ? ` · ${primaryPoc.phone}` : ""} + {formatPocLine(poc)}
diff --git a/src/app/(protected)/workorders/_components/list/table/cells/vendor-dialog-company-card.tsx b/src/app/(protected)/workorders/_components/list/table/cells/vendor-dialog-company-card.tsx index fc711dc9..1881b797 100644 --- a/src/app/(protected)/workorders/_components/list/table/cells/vendor-dialog-company-card.tsx +++ b/src/app/(protected)/workorders/_components/list/table/cells/vendor-dialog-company-card.tsx @@ -10,6 +10,16 @@ type VendorDialogCompanyCardProps = { frozenCompany?: WorkOrderFrozenCompany; }; +type CompanyCardModel = { + title: string; + distance: string; + contactName: string; + email: string; + address: string; + mapsUrl: string; + phone: string; +}; + function formatFrozenCompanyAddress(company: WorkOrderFrozenCompany): string { const region = [company.city, company.state] .map((part) => part?.trim()) @@ -19,21 +29,68 @@ function formatFrozenCompanyAddress(company: WorkOrderFrozenCompany): string { return [company.address?.trim(), region, company.zip?.trim()].filter(Boolean).join(", "); } +function liveMapsUrl(address: string): string { + if (!address) return ""; + return `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(address)}`; +} + +function resolveFrozenCompanyCard( + company: string, + frozen: WorkOrderFrozenCompany, +): CompanyCardModel { + return { + title: company, + distance: "", + contactName: frozen.contactName?.trim() ?? "", + email: frozen.email?.trim() ?? "", + address: formatFrozenCompanyAddress(frozen), + mapsUrl: frozen.maps ?? "", + phone: frozen.phone ?? "", + }; +} + +function resolveLiveCompanyCard( + company: string, + vendor: VendorDropdownItem | undefined, +): CompanyCardModel { + const address = vendor?.address ?? ""; + return { + title: company, + distance: formatVendorDistance(vendor?.distanceMiles), + contactName: "", + email: vendor?.email?.trim() ?? "", + address, + mapsUrl: liveMapsUrl(address), + phone: "", + }; +} + +function resolveCompanyCardModel( + company: string, + vendor: VendorDropdownItem | undefined, + frozenCompany?: WorkOrderFrozenCompany, +): CompanyCardModel { + if (frozenCompany != null) return resolveFrozenCompanyCard(company, frozenCompany); + return resolveLiveCompanyCard(company, vendor); +} + +function CompanyCardDetails({ model }: { model: CompanyCardModel }) { + return ( + <> + {Boolean(model.address) && } + {Boolean(model.contactName) && } + {Boolean(model.phone) && } + {Boolean(model.email) && } + + ); +} + export function VendorDialogCompanyCard({ company, vendor, frozenCompany, }: VendorDialogCompanyCardProps) { - const isFrozen = frozenCompany != null; - const distance = isFrozen ? "" : formatVendorDistance(vendor?.distanceMiles); - const contactName = isFrozen ? (frozenCompany.contactName?.trim() ?? "") : ""; - const email = isFrozen ? (frozenCompany.email?.trim() ?? "") : (vendor?.email?.trim() ?? ""); - const address = isFrozen ? formatFrozenCompanyAddress(frozenCompany) : (vendor?.address ?? ""); - const mapsUrl = - (isFrozen ? frozenCompany.maps : undefined) || - (!isFrozen && address - ? `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(address)}` - : ""); + const model = resolveCompanyCardModel(company, vendor, frozenCompany); return (
- {company || "—"} + {model.title || "—"}
- {Boolean(distance) && ( + {Boolean(model.distance) && ( - {distance} + {model.distance} )}
- {Boolean(address) && } - {Boolean(contactName) && } - {Boolean(frozenCompany?.phone) && } - {Boolean(email) && } - {Boolean(mapsUrl) && ( + + {Boolean(model.mapsUrl) && ( ): CompDocSiteInfo { + const locationParts = row.location.split(",").map((part) => part.trim()); + const city = locationParts[0] ?? ""; + const state = locationParts[1] ?? ""; + const label = buildLabel(city, state); + const street = row.location && !label ? row.location : ""; + return toCompDocSite(street, city, state, ""); +} + export function resolveCompDocSite( row: Pick, location?: Location | null, ): CompDocSiteInfo { const frozen = effectiveSite(row); if (frozen != null) { - const city = frozen.city ?? ""; - const state = frozen.state ?? ""; - const zip = frozen.zip ?? ""; - const label = buildLabel(city, state); - const street = frozen.address ?? ""; - const fullAddress = [street, label, zip].filter(Boolean).join(", ") || "—"; - return { street, city, state, zip, label, fullAddress }; + return toCompDocSite( + frozen.address ?? "", + frozen.city ?? "", + frozen.state ?? "", + frozen.zip ?? "", + ); } - if (location?.address || location?.city) { - const city = location.city ?? ""; - const state = location.state ?? ""; - const zip = location.zipCode ?? ""; - const label = buildLabel(city, state); - const street = location.address ?? ""; - const fullAddress = [street, label, zip].filter(Boolean).join(", ") || "—"; - return { street, city, state, zip, label, fullAddress }; + return resolveLiveLocationSite(location); } - - const locationParts = row.location.split(",").map((s) => s.trim()); - const city = locationParts[0] ?? ""; - const state = locationParts[1] ?? ""; - const label = buildLabel(city, state); - const street = row.location && !label ? row.location : ""; - const fullAddress = [street, label].filter(Boolean).join(", ") || "—"; - - return { street, city, state, zip: "", label, fullAddress }; + return resolveRowLocationSite(row); }