'use client'
import { useEffect, useState } from 'react'
import { useRouter } from 'next/navigation'
import Sidebar from '@/components/layout/Sidebar'
import Header from '@/components/layout/Header'
import { SelectedClientProvider, useSelectedClient } from '@/components/providers/SelectedClientProvider'
import { trpc } from '@/lib/trpc-client'
export default function DashboardLayout({
children,
}: {
children: React.ReactNode
}) {
const router = useRouter()
const meQuery = trpc.auth.me.useQuery(undefined, {
retry: false,
staleTime: 60 * 1000,
})
const logoutMutation = trpc.auth.logout.useMutation({
onSuccess: () => {
window.location.href = '/login'
},
})
useEffect(() => {
if (meQuery.isError) {
router.push('/login')
}
}, [meQuery.isError, router])
const handleLogout = () => {
logoutMutation.mutate()
}
if (meQuery.isLoading || meQuery.isError) {
return (
)
}
const user = meQuery.data
if (!user) return null
return (
{children}
)
}
function DashboardContent({
user,
onLogout,
children,
}: {
user: { nombre: string; email: string; rol: string }
onLogout: () => void
children: React.ReactNode
}) {
return (
{children}
)
}
function DashboardContentInner({
user,
onLogout,
children,
}: {
user: { nombre: string; email: string; rol: string }
onLogout: () => void
children: React.ReactNode
}) {
const { selectedClientId } = useSelectedClient()
const clienteId = selectedClientId ?? undefined
const activeAlertsCountQuery = trpc.alertas.conteoActivas.useQuery(
{ clienteId },
{ refetchOnWindowFocus: true, staleTime: 30 * 1000 }
)
const activeAlertsCount = activeAlertsCountQuery.data?.total ?? 0
const devicesCountQuery = trpc.equipos.list.useQuery(
{ clienteId, page: 1, limit: 1 },
{ refetchOnWindowFocus: true, staleTime: 30 * 1000 }
)
const devicesCount = devicesCountQuery.data?.pagination?.total ?? 0
const clientsQuery = trpc.clientes.list.useQuery(
{ limit: 100 },
{ staleTime: 60 * 1000 }
)
const clients = (clientsQuery.data?.clientes ?? []).map((c) => ({
id: c.id,
nombre: c.nombre,
codigo: c.codigo,
}))
const [sidebarOpen, setSidebarOpen] = useState(false)
return (
setSidebarOpen(false)}
/>
setSidebarOpen(true)}
/>
{children}
)
}