fix(machines): hydrate company name without slug flash
This commit is contained in:
parent
20a5c902bc
commit
c35eb673d3
2 changed files with 63 additions and 18 deletions
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue