fix(machines): hydrate company name without slug flash

This commit is contained in:
Esdras Renan 2025-10-22 22:39:17 -03:00
parent 20a5c902bc
commit c35eb673d3
2 changed files with 63 additions and 18 deletions

View file

@ -696,6 +696,7 @@ export type MachinesQueryItem = {
hostname: string
companyId: string | null
companySlug: string | null
companyName: string | null
osName: string | null
osVersion: string | null
architecture: string | null
@ -1059,11 +1060,35 @@ export function AdminMachinesOverview({ tenantId, initialCompanyFilterSlug = "al
) as Array<{ id: string; name: string; slug?: string }> | undefined
const companyNameBySlug = useMemo(() => {
const map = new Map<string, string>()
;(companies ?? []).forEach((c) => c.slug && map.set(c.slug, c.name))
machines.forEach((m) => {
if (m.companySlug && m.companyName) {
map.set(m.companySlug, m.companyName)
}
})
;(companies ?? []).forEach((c) => {
if (c.slug) {
map.set(c.slug, c.name)
}
})
return map
}, [companies])
}, [machines, companies])
const companyOptions = useMemo(() => (companies ?? []).map((c) => ({ slug: c.slug ?? c.id, name: c.name })).sort((a,b)=>a.name.localeCompare(b.name,"pt-BR")), [companies])
const companyOptions = useMemo(() => {
if (companies && companies.length > 0) {
return companies
.map((c) => ({ slug: c.slug ?? c.id, name: c.name }))
.sort((a, b) => a.name.localeCompare(b.name, "pt-BR"))
}
const fallback = new Map<string, string>()
machines.forEach((m) => {
if (m.companySlug) {
fallback.set(m.companySlug, m.companyName ?? m.companySlug)
}
})
return Array.from(fallback.entries())
.map(([slug, name]) => ({ slug, name }))
.sort((a, b) => a.name.localeCompare(b.name, "pt-BR"))
}, [companies, machines])
const filteredMachines = useMemo(() => {
const text = q.trim().toLowerCase()
@ -1231,17 +1256,10 @@ type MachineDetailsProps = {
}
export function MachineDetails({ machine }: MachineDetailsProps) {
const { convexUserId } = useAuth()
const router = useRouter()
const effectiveStatus = machine ? resolveMachineStatus(machine) : "unknown"
const isActive = machine?.isActive ?? true
const isDeactivated = !isActive || effectiveStatus === "deactivated"
// Company name lookup (by slug)
const companyQueryArgs = convexUserId && machine ? { tenantId: machine.tenantId, viewerId: convexUserId as Id<"users"> } : undefined
const companies = useQuery(
api.companies.list,
companyQueryArgs ?? ("skip" as const)
) as Array<{ id: string; name: string; slug?: string }> | undefined
const alertsHistory = useQuery(
machine ? api.machines.listAlerts : "skip",
machine ? { machineId: machine.id as Id<"machines">, limit: 50 } : ("skip" as const)
@ -1782,11 +1800,7 @@ export function MachineDetails({ machine }: MachineDetailsProps) {
return chips
}, [osNameDisplay, machine?.osVersion, machine?.architecture, windowsVersionLabel, windowsBuildLabel, windowsActivationStatus, primaryGpu, collaborator?.email, collaborator?.name, personaLabel, machine?.osName, remoteAccess])
const companyName = (() => {
if (!companies || !machine?.companySlug) return machine?.companySlug ?? null
const found = companies.find((c) => c.slug === machine.companySlug)
return found?.name ?? machine.companySlug
})()
const companyName = machine?.companyName ?? machine?.companySlug ?? null
const [renaming, setRenaming] = useState(false)
const [newName, setNewName] = useState<string>(machine?.hostname ?? "")
@ -3405,7 +3419,7 @@ function MachinesGrid({ machines, companyNameBySlug }: { machines: MachinesQuery
<MachineCard
key={m.id}
machine={m}
companyName={m.companySlug ? companyNameBySlug.get(m.companySlug) ?? m.companySlug : null}
companyName={m.companyName ?? (m.companySlug ? companyNameBySlug.get(m.companySlug) ?? m.companySlug : null)}
/>
))}
</div>