"use client" import { useEffect, useMemo, useRef, useState } from "react" import { useMutation, useQuery } from "convex/react" import { toast } from "sonner" import { Plus, MoreHorizontal, Archive, RefreshCcw } from "lucide-react" import { api } from "@/convex/_generated/api" import type { Id } from "@/convex/_generated/dataModel" import { DEFAULT_TENANT_ID } from "@/lib/constants" import { useAuth } from "@/lib/auth-client" import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog" import { Input } from "@/components/ui/input" import { Textarea } from "@/components/ui/textarea" import { Badge } from "@/components/ui/badge" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu" import { Checkbox } from "@/components/ui/checkbox" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Skeleton } from "@/components/ui/skeleton" type Template = { id: string key: string label: string description: string defaultEnabled: boolean baseTemplateKey: string | null isSystem: boolean isArchived: boolean order: number } const CLEAR_SELECT_VALUE = "__clear__" export function TicketFormTemplatesManager() { const { session, convexUserId } = useAuth() const tenantId = session?.user.tenantId ?? DEFAULT_TENANT_ID const viewerId = convexUserId as Id<"users"> | null const ensureDefaults = useMutation(api.tickets.ensureTicketFormDefaults) const createTemplate = useMutation(api.ticketFormTemplates.create) const updateTemplate = useMutation(api.ticketFormTemplates.update) const archiveTemplate = useMutation(api.ticketFormTemplates.archive) const hasEnsuredRef = useRef(false) useEffect(() => { if (!viewerId || hasEnsuredRef.current) return hasEnsuredRef.current = true ensureDefaults({ tenantId, actorId: viewerId }).catch((error) => { console.error("[ticket-templates] ensure defaults failed", error) hasEnsuredRef.current = false }) }, [ensureDefaults, tenantId, viewerId]) const templates = useQuery( api.ticketFormTemplates.list, viewerId ? { tenantId, viewerId } : "skip" ) as Template[] | undefined const [createDialogOpen, setCreateDialogOpen] = useState(false) const [newLabel, setNewLabel] = useState("") const [newDescription, setNewDescription] = useState("") const [baseTemplate, setBaseTemplate] = useState("") const [cloneFields, setCloneFields] = useState(true) const [creating, setCreating] = useState(false) const [editingTemplate, setEditingTemplate] = useState