import { useState } from 'react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { Link, useNavigate } from 'react-router-dom'; import toast from 'react-hot-toast'; import { Plus, Trash2 } from 'lucide-react'; import { api } from '../../lib/api-client'; import { AppShell, PageHeader, PageBody } from '../../layout/AppShell'; import { Button, Badge, Card, Input, Label, Select } from '../../components/ui/primitives'; import { Table, THead, TBody, TR, TH, TD } from '../../components/ui/table'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from '../../components/ui/dialog'; interface Template { id: number; name: string; type: string; created_at: string; updated_at: string; } export function EmailsList() { const qc = useQueryClient(); const navigate = useNavigate(); const [newOpen, setNewOpen] = useState(false); const [form, setForm] = useState({ name: '', type: 'newsletter' }); const { data } = useQuery({ queryKey: ['email-templates'], queryFn: () => api.get<{ templates: Template[] }>('/emails'), }); const createMut = useMutation({ mutationFn: () => api.post<{ template: Template }>('/emails', { ...form, blocks_json: [] }), onSuccess: (res) => { setNewOpen(false); navigate(`/cms/emails/${res.template.id}`); }, onError: (e: Error) => toast.error(e.message), }); const deleteMut = useMutation({ mutationFn: (id: number) => api.delete(`/emails/${id}`), onSuccess: () => { toast.success('Template verwijderd'); qc.invalidateQueries({ queryKey: ['email-templates'] }); }, }); const templates = data?.templates ?? []; return ( setNewOpen(true)}> Nieuwe template } /> {templates.map((t) => ( ))}
Naam Type Bijgewerkt
{t.name} {t.type} {new Date(t.updated_at).toLocaleDateString('nl-NL')}
Nieuwe email template
setForm({ ...form, name: e.target.value })} />
); }