"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}
) }