"use client"
import { useId, useMemo, useState } from "react"
import dynamic from "next/dynamic"
import { usePathname, useRouter } from "next/navigation"
import { MonitorSmartphone, Building, UserPlus, ChevronRight } from "lucide-react"
import { Button } from "@/components/ui/button"
import { Skeleton } from "@/components/ui/skeleton"
import { NewTicketDialogDeferred } from "@/components/tickets/new-ticket-dialog.client"
import { useAuth } from "@/lib/auth-client"
import { cn } from "@/lib/utils"
import { DEFAULT_TENANT_ID } from "@/lib/constants"
import { QuickCreateDeviceDialog } from "@/components/quick-actions/quick-create-device-dialog"
import { QuickCreateUserDialog } from "@/components/quick-actions/quick-create-user-dialog"
import type { CompanyEditorState } from "@/components/admin/companies/admin-companies-manager"
import type { NormalizedCompany } from "@/server/company-service"
const CompanySheetDialog = dynamic(
() =>
import("@/components/admin/companies/admin-companies-manager").then((mod) => ({
default: mod.CompanySheet,
})),
{
ssr: false,
loading: () => (
Carregando formulário de empresa...
),
}
)
type QuickLink = {
id: "device" | "company" | "user"
label: string
description?: string
icon: React.ComponentType<{ className?: string }>
href: string
visible: boolean
}
export function GlobalQuickActions() {
const { convexUserId, isAdmin, isStaff, isLoading, session } = useAuth()
const router = useRouter()
const pathname = usePathname()
const actionId = useId()
const tenantId = session?.user.tenantId ?? DEFAULT_TENANT_ID
const [isDeviceDialogOpen, setIsDeviceDialogOpen] = useState(false)
const [isUserDialogOpen, setIsUserDialogOpen] = useState(false)
const [companyEditor, setCompanyEditor] = useState(null)
const links = useMemo(() => {
const base: QuickLink[] = [
{
id: "device",
label: "Adicionar dispositivo",
description: "Registrar agente, serial ou ativo remoto",
icon: MonitorSmartphone,
href: "/admin/devices?quick=new-device",
visible: Boolean(isAdmin),
},
{
id: "company",
label: "Adicionar empresa",
description: "Cadastrar novo cliente",
icon: Building,
href: "/admin/companies?quick=new-company",
visible: Boolean(isAdmin),
},
{
id: "user",
label: "Novo usuário",
description: "Gestores / colaboradores",
icon: UserPlus,
href: "/admin/users?quick=new-user",
visible: Boolean(isAdmin),
},
]
return base.filter((link) => link.visible)
}, [isAdmin])
if (!isStaff && !isAdmin) {
return null
}
if (isLoading) {
return (
{Array.from({ length: 3 }).map((_, index) => (
))}
)
}
return (
{links.map((link) => (
))}
{convexUserId ? (
) : null}
{
router.push("/admin/devices")
}}
/>
{
router.push("/admin/users")
}}
/>
{companyEditor ? (
setCompanyEditor(null)}
onCreated={(company: NormalizedCompany) => {
setCompanyEditor(null)
router.push("/admin/companies")
}}
onUpdated={() => {
setCompanyEditor(null)
}}
/>
) : null}
)
}