diff --git a/src/components/admin/devices/admin-devices-overview.tsx b/src/components/admin/devices/admin-devices-overview.tsx index 44ffb54..a907054 100644 --- a/src/components/admin/devices/admin-devices-overview.tsx +++ b/src/components/admin/devices/admin-devices-overview.tsx @@ -66,6 +66,7 @@ import { TableRow, } from "@/components/ui/table" import { Separator } from "@/components/ui/separator" +import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip" import { ChartContainer } from "@/components/ui/chart" import { cn } from "@/lib/utils" import { DEVICE_INVENTORY_COLUMN_METADATA, type DeviceInventoryColumnConfig } from "@/lib/device-inventory-columns" @@ -1050,6 +1051,7 @@ const statusClasses: Record = { online: "border-emerald-200 text-emerald-600", offline: "border-rose-200 text-rose-600", stale: "border-amber-200 text-amber-600", + reprovision: "border-orange-200 text-orange-700", maintenance: "border-amber-300 text-amber-700", blocked: "border-orange-200 text-orange-600", deactivated: "border-slate-200 bg-slate-50 text-slate-500", @@ -1314,6 +1316,16 @@ function getStatusVariant(status?: string | null) { } } +function resolveAdminDeviceStatus(device: DevicesQueryItem): string { + return resolveDeviceStatus({ + status: device.status, + lastHeartbeatAt: device.lastHeartbeatAt, + isActive: device.isActive, + managementMode: device.managementMode, + hasValidToken: Boolean(device.token), + }) +} + function OsIcon({ osName }: { osName?: string | null }) { const name = (osName ?? "").toLowerCase() if (name.includes("mac") || name.includes("darwin") || name.includes("macos")) return @@ -1698,7 +1710,7 @@ export function AdminDevicesOverview({ return devices.filter((m) => { if (onlyAlerts && !(Array.isArray(m.postureAlerts) && m.postureAlerts.length > 0)) return false if (statusFilter !== "all") { - const s = resolveDeviceStatus(m).toLowerCase() + const s = resolveAdminDeviceStatus(m).toLowerCase() if (s !== statusFilter) return false } if (deviceTypeFilter !== "all") { @@ -1971,6 +1983,7 @@ export function AdminDevicesOverview({ Online Offline Sem sinal + Reprovisionar Desconhecido @@ -2106,7 +2119,7 @@ export function AdminDevicesOverview({
    {filteredDevices.map((device) => { - const statusKey = resolveDeviceStatus(device) + const statusKey = resolveAdminDeviceStatus(device) const statusLabel = DEVICE_STATUS_LABELS[statusKey] ?? statusKey const isChecked = exportSelection.includes(device.id) const osParts = [device.osName ?? "", device.osVersion ?? ""].filter(Boolean) @@ -2773,7 +2786,7 @@ export function DeviceDetails({ device }: DeviceDetailsProps) { const normalizedViewerRole = (viewerRole ?? "").toLowerCase() const canManageRemoteAccess = normalizedViewerRole === "admin" || normalizedViewerRole === "agent" const canManageFieldCatalog = normalizedViewerRole === "admin" - const effectiveStatus = device ? resolveDeviceStatus(device) : "unknown" + const effectiveStatus = device ? resolveAdminDeviceStatus(device) : "unknown" const [isActiveLocal, setIsActiveLocal] = useState(device?.isActive ?? true) const isDeactivated = !isActiveLocal || effectiveStatus === "deactivated" const isManualMobile = @@ -3195,6 +3208,7 @@ export function DeviceDetails({ device }: DeviceDetailsProps) { const lastHeartbeatDate = device?.lastHeartbeatAt ? new Date(device.lastHeartbeatAt) : null const tokenExpiry = device?.token?.expiresAt ? new Date(device.token.expiresAt) : null const tokenLastUsed = device?.token?.lastUsedAt ? new Date(device.token.lastUsedAt) : null + const hasActiveToken = Boolean(device?.token) const copyEmail = async () => { if (!device?.authEmail) return @@ -4024,9 +4038,14 @@ export function DeviceDetails({ device }: DeviceDetailsProps) {
    {companyName ? ( -
    - {companyName} -
    + + +
    + {companyName} +
    +
    + {companyName} +
    ) : null} {!isDeactivated ? : null} {!isActiveLocal ? ( @@ -4700,18 +4719,20 @@ export function DeviceDetails({ device }: DeviceDetailsProps) {
    Token expira - {tokenExpiry ? formatRelativeTime(tokenExpiry) : "—"} + {hasActiveToken ? (tokenExpiry ? formatRelativeTime(tokenExpiry) : "-") : "Sem token ativo"}
    Token usado por último - {tokenLastUsed ? formatRelativeTime(tokenLastUsed) : "—"} + {hasActiveToken ? (tokenLastUsed ? formatRelativeTime(tokenLastUsed) : "-") : "Sem token ativo"}
    Uso do token - {device.token?.usageCount ?? 0} trocas + + {hasActiveToken ? `${device.token?.usageCount ?? 0} trocas` : "Sem token ativo"} +
    @@ -6322,7 +6343,7 @@ function DevicesGrid({ devices, companyNameBySlug }: { devices: DevicesQueryItem function DeviceCard({ device, companyName }: { device: DevicesQueryItem; companyName?: string | null }) { const router = useRouter() - const effectiveStatus = resolveDeviceStatus(device) + const effectiveStatus = resolveAdminDeviceStatus(device) const statusIndicator = getDeviceStatusIndicator(effectiveStatus) const isActive = device.isActive const lastHeartbeat = device.lastHeartbeatAt ? new Date(device.lastHeartbeatAt) : null @@ -6406,15 +6427,27 @@ function DeviceCard({ device, companyName }: { device: DevicesQueryItem; company
{collaborator?.email ? (
-
- Usuário vinculado - - {collaborator.name ?? "Usuário"} - - - {collaborator.email} - -
+ + +
+ Usuário vinculado + + {collaborator.name ?? "Usuário"} + + + {collaborator.email} + +
+
+ +
+ + {collaborator.name ?? collaborator.email} + + {collaborator.email} +
+
+