import { useState } from "react"; import { Plus, Pencil, Trash2, Download } from "lucide-react"; import { useListPolicies, useCreatePolicy, useUpdatePolicy, useDeletePolicy, useSeedTemplate, type PolicyPayload, } from "@/api/policies"; import { PolicyForm } from "@/components/PolicyForm"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Skeleton } from "@/components/ui/skeleton"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import type { RoutingRule } from "@/types/api"; const TEMPLATES = ["hr", "finance", "engineering", "catchall"]; export function PoliciesPage() { const [formOpen, setFormOpen] = useState(false); const [editingRule, setEditingRule] = useState(); const { data: policies, isLoading } = useListPolicies(); const createMutation = useCreatePolicy(); const updateMutation = useUpdatePolicy(); const deleteMutation = useDeletePolicy(); const seedMutation = useSeedTemplate(); const handleSubmit = async (payload: PolicyPayload) => { if (editingRule) { await updateMutation.mutateAsync({ id: editingRule.id, payload }); } else { await createMutation.mutateAsync(payload); } setFormOpen(false); setEditingRule(undefined); }; const handleEdit = (rule: RoutingRule) => { setEditingRule(rule); setFormOpen(true); }; const handleDelete = async (id: string) => { if (confirm("Supprimer cette politique ?")) { await deleteMutation.mutateAsync(id); } }; const handleOpenCreate = () => { setEditingRule(undefined); setFormOpen(true); }; const isPending = createMutation.isPending || updateMutation.isPending; return (

Politiques de routage

Gérez les règles de routage intelligentes par tenant

{/* Seed template */}
{isLoading ? (
{Array.from({ length: 4 }).map((_, i) => ( ))}
) : !policies || policies.length === 0 ? (

Aucune politique configurée

Créez votre première politique ou importez un template.

) : (
Nom Priorité Statut Conditions Action Actions {policies.map((rule) => (

{rule.name}

{rule.description && (

{rule.description}

)}
{rule.priority} {rule.is_enabled ? "Actif" : "Désactivé"} {rule.conditions.length} condition{rule.conditions.length !== 1 ? "s" : ""} {rule.action.provider}/{rule.action.model}
))}
)} { setFormOpen(open); if (!open) setEditingRule(undefined); }} rule={editingRule} onSubmit={handleSubmit} isPending={isPending} />
); }