"use client"; import Link from "next/link"; import { useState } from "react"; import { PARTY_IDS, partyVar, partyLabel, partyName } from "@/lib/parties"; import { Card } from "./ui"; interface Ask { query: string; terms: string[]; parties: Record; note: string } export function AskBox() { const [q, setQ] = useState(""); const [res, setRes] = useState(null); const [busy, setBusy] = useState(false); const run = async (query: string) => { if (query.trim().length < 3) return; setBusy(true); try { setRes(await fetch(`/api/ask?q=${encodeURIComponent(query)}`).then((r) => r.json())); } finally { setBusy(false); } }; return (
Recherche documentaire
{ e.preventDefault(); run(q); }} className="flex gap-2"> setQ(e.target.value)} placeholder="Que proposent les partis pour le logement ?" className="flex-1 card px-3.5 py-2.5 text-[15px] outline-none focus:border-accent" aria-label="Question" />
{["logement", "immigration", "santé", "troisième lien", "français", "impôts", "souveraineté", "Hydro-Québec"].map((s) => )}
{res && (
{PARTY_IDS.map((id) => (
{partyName(id)}
{(res.parties[id] ?? []).length === 0 ?
Aucune proposition trouvée dans les documents ingérés.
: (res.parties[id] ?? []).map((p) => (
{p.proposal}
{p.document.title ?? "Document"}{p.page ? ` · p. ${p.page}` : ""}
))}
))}

{res.note} {PARTY_IDS.map(partyLabel).join(", ")} — classement lexical sur {res.terms.join(", ")}.

)}
); }