import { useState } from "react"; import { trpc } from "@/providers/trpc"; import { Link } from "react-router-dom"; import { Plus, Copy, Check, Power, Trash2, RefreshCw, Eye, FileText, ChevronDown, ChevronUp } from "lucide-react"; export default function AdminAreaCliente() { const utils = trpc.useUtils(); const { data: forms, isLoading } = trpc.form.list.useQuery(); const createMutation = trpc.form.create.useMutation({ onSuccess: () => { utils.form.list.invalidate(); setShowCreate(false); } }); const statusMutation = trpc.form.updateStatus.useMutation({ onSuccess: () => utils.form.list.invalidate() }); const deleteMutation = trpc.form.delete.useMutation({ onSuccess: () => utils.form.list.invalidate() }); const regenerateMutation = trpc.form.regenerateCode.useMutation({ onSuccess: () => utils.form.list.invalidate() }); const [showCreate, setShowCreate] = useState(false); const [copiedCode, setCopiedCode] = useState(null); const [expandedForm, setExpandedForm] = useState(null); const [formData, setFormData] = useState({ title: "", description: "", clientName: "", clientEmail: "" }); const copyCode = (code: string) => { navigator.clipboard.writeText(`${window.location.origin}/formulario/${code}`); setCopiedCode(code); setTimeout(() => setCopiedCode(null), 2000); }; const handleCreate = (e: React.FormEvent) => { e.preventDefault(); if (!formData.title || !formData.clientName) return; createMutation.mutate(formData); }; const statusColors = { active: "bg-green-500/20 text-green-400 border-green-500/30", inactive: "bg-yellow-500/20 text-yellow-400 border-yellow-500/30", archived: "bg-gray-500/20 text-gray-400 border-gray-500/30", }; const statusLabels = { active: "Ativo", inactive: "Inativo", archived: "Arquivado", }; return (
{/* Header */}

Area do Cliente

Painel administrativo - Gestao de formularios

Voltar ao site
{/* Stats */}
{forms?.length || 0}
Formularios
{forms?.filter(f => f.status === "active").length || 0}
Ativos
{forms?.filter(f => f.status === "inactive").length || 0}
Inativos
{/* Criar Formulario */} {showCreate && (

Criar Novo Formulario

setFormData({ ...formData, title: e.target.value })} className="bg-[#0e0e0e] border border-[#2a2a2a] rounded-xl px-4 py-3 text-white placeholder-gray-500 focus:border-[#cbf400] focus:outline-none" /> setFormData({ ...formData, clientName: e.target.value })} className="bg-[#0e0e0e] border border-[#2a2a2a] rounded-xl px-4 py-3 text-white placeholder-gray-500 focus:border-[#cbf400] focus:outline-none" /> setFormData({ ...formData, clientEmail: e.target.value })} className="bg-[#0e0e0e] border border-[#2a2a2a] rounded-xl px-4 py-3 text-white placeholder-gray-500 focus:border-[#cbf400] focus:outline-none" /> setFormData({ ...formData, description: e.target.value })} className="bg-[#0e0e0e] border border-[#2a2a2a] rounded-xl px-4 py-3 text-white placeholder-gray-500 focus:border-[#cbf400] focus:outline-none" />
{createMutation.isSuccess && (

Formulario criado!

Codigo: {createMutation.data?.code}

URL: {window.location.origin}/formulario/{createMutation.data?.code}

)}
)} {/* Lista de Formularios */} {isLoading ? (
) : !forms?.length ? (

Nenhum formulario criado ainda.

) : (
{forms.map(form => (
{/* Header do card */}

{form.title}

{statusLabels[form.status]}

{form.clientName}

Codigo: {form.accessCode} Criado: {new Date(form.createdAt).toLocaleDateString('pt-BR')}
{/* Copiar URL */} {/* Ativar/Desativar */} {/* Renovar codigo */} {/* Excluir */} {/* Expandir */}
{/* Detalhes expandidos */} {expandedForm === form.accessCode && (

{form.description}

Visualizar formulario
)}
))}
)}
); }