From 904c2ef457e95b9e3a31e99f4cecb5fa819aae1c Mon Sep 17 00:00:00 2001 From: codex-bot Date: Tue, 21 Oct 2025 09:08:59 -0300 Subject: [PATCH] UI: Avoid duplicate Windows major version in machine OS label (e.g., 'Windows 11 Pro (26100)') --- .../companies/admin-companies-manager.tsx | 26 +++++++++++++++--- .../machines/admin-machines-overview.tsx | 27 +++++++++++++++++-- 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/src/components/admin/companies/admin-companies-manager.tsx b/src/components/admin/companies/admin-companies-manager.tsx index 3ed5b1c..2aa64b6 100644 --- a/src/components/admin/companies/admin-companies-manager.tsx +++ b/src/components/admin/companies/admin-companies-manager.tsx @@ -952,9 +952,29 @@ export function AdminCompaniesManager({ initialCompanies }: { initialCompanies:
- {machine.osName ?? "SO desconhecido"} - {machine.osVersion ? : null} - {machine.osVersion ? {machine.osVersion} : null} + {(() => { + const name = machine.osName ?? "SO desconhecido" + const ver = ((): string => { + const n = machine.osName ?? null + const v = machine.osVersion ?? null + if (!v) return "" + const m = (n ?? "").match(/^windows\s+(\d+)\b/i) + if (m) { + const major = m[1] + const re = new RegExp(`^\\s*${major}(?:\\b|\\.|-_|\\s)+(.*)$`, "i") + const mm = v.match(re) + if (mm) return (mm[1] ?? "").trim() + } + return v + })() + return ( + <> + {name} + {ver ? : null} + {ver ? {ver} : null} + + ) + })()} {machine.architecture ? ( {machine.architecture.toUpperCase()} diff --git a/src/components/admin/machines/admin-machines-overview.tsx b/src/components/admin/machines/admin-machines-overview.tsx index e05de31..95930a4 100644 --- a/src/components/admin/machines/admin-machines-overview.tsx +++ b/src/components/admin/machines/admin-machines-overview.tsx @@ -353,6 +353,24 @@ type WindowsOsInfo = { experience?: string } +function formatOsVersionDisplay(osName: string | null | undefined, osVersion: string | null | undefined) { + const name = (osName ?? "").trim() + const version = (osVersion ?? "").trim() + if (!version) return "" + // If Windows and version redundantly starts with the same major (e.g., "11 (26100)"), drop leading major + const winMatch = name.match(/^windows\s+(\d+)\b/i) + if (winMatch) { + const major = winMatch[1] + const re = new RegExp(`^\\s*${major}(?:\\b|\\.|-_|\\s)+(.*)$`, "i") + const m = version.match(re) + if (m) { + const rest = (m[1] ?? "").trim() + return rest + } + } + return version +} + function parseWindowsOsInfo(raw: unknown): WindowsOsInfo | null { if (!raw) return null const parseRecord = (value: Record) => { @@ -1581,7 +1599,8 @@ export function MachineDetails({ machine }: MachineDetailsProps) { const summaryChips = useMemo(() => { const chips: Array<{ key: string; label: string; value: string; icon: ReactNode; tone?: "warning" | "muted" }> = [] const osName = osNameDisplay || "Sistema desconhecido" - const osVersion = machine?.osVersion ?? windowsVersionLabel ?? "" + const osVersionRaw = machine?.osVersion ?? windowsVersionLabel ?? "" + const osVersion = formatOsVersionDisplay(osNameDisplay, osVersionRaw) chips.push({ key: "os", label: "Sistema", @@ -3193,7 +3212,11 @@ function MachineCard({ machine, companyName }: { machine: MachinesQueryItem; com
- {machine.osName ?? "SO"} {machine.osVersion ?? ""} + {(() => { + const name = machine.osName ?? "SO" + const ver = formatOsVersionDisplay(machine.osName, machine.osVersion) + return [name, ver].filter(Boolean).join(" ").trim() + })()} {machine.architecture ? (