/** * Trouve-KA — panneau client d'état du moteur (auto-refresh 10 s) * Author: Simon-Pierre Boucher * Contact: contact@spboucher.ai */ "use client"; import { useEffect, useState } from "react"; import { Stat } from "@/components/stat"; import { Badge } from "@/components/ui/badge"; import { formatNumber } from "@/lib/format"; import type { StatusResponse } from "@/lib/types"; const REFRESH_MS = 10_000; function crawlerBadge(state: string) { if (state === "running") { return ( ); } if (state === "paused") { return Robot en pause; } return Robot : {state || "état inconnu"}; } export function StatusPanel() { const [status, setStatus] = useState(null); const [error, setError] = useState(false); const [updatedAt, setUpdatedAt] = useState(""); useEffect(() => { let active = true; async function load() { try { const res = await fetch("/api/status"); if (!res.ok) throw new Error(`Erreur ${res.status}`); const data = (await res.json()) as StatusResponse; if (!active) return; setStatus(data); setError(false); setUpdatedAt( new Intl.DateTimeFormat("fr-CA", { hour: "2-digit", minute: "2-digit", second: "2-digit", }).format(new Date()), ); } catch { if (active) setError(true); } } load(); const id = setInterval(load, REFRESH_MS); return () => { active = false; clearInterval(id); }; }, []); if (error && !status) { return (

Impossible de joindre le moteur pour le moment. Réessayez sous peu.

); } if (!status) { return (