// ----------------------------------------------------------------------------- // Lou-Ka — Agrégateur de logements à louer (province de Québec) // Auteur : Simon-Pierre Boucher — contact@spboucher.ai // fiche/KaAssistant.tsx : « ✦ Demander à Ka » — bouton discret (bas droite, // au-dessus du CTA) qui remplace la grosse bulle KA Agent sur la fiche, et // bottom sheet de démarrage : contexte du logement, suggestions prédéfinies, // champ libre. L'envoi passe par le widget KA Agent existant (ka-agent.js, // backend api-ka inchangé) : on ouvre son panneau et on lui transmet la // question, enrichie du contexte de la fiche (titre, ville, prix, lien). // ----------------------------------------------------------------------------- import { useEffect, useState } from "react"; import { Listing, fmtPrice } from "../api"; import { IcoChevronRight, IcoSparkles } from "../components/Icons"; import BottomSheet from "./BottomSheet"; const SUGGESTIONS = [ "Est-ce une bonne affaire ?", "Compare ce loyer au quartier", "Le secteur est-il bon sans voiture ?", "Quels sont les points négatifs ?", "Explique le registre des loyers", ]; /** Ouvre le panneau KA Agent (widget partagé) et envoie la question. */ function envoyerAKa(question: string): boolean { const btn = document.querySelector(".kaa-btn"); const ta = document.querySelector(".kaa-panel textarea"); const send = document.querySelector(".kaa-in button"); if (!btn || !ta || !send) return false; btn.click(); // ouvre le panneau (plein écran) ta.value = question; setTimeout(() => send.click(), 60); return true; } export default function KaAssistant({ l, hidden }: { l: Listing; hidden?: boolean }) { const [open, setOpen] = useState(false); const [q, setQ] = useState(""); const [err, setErr] = useState(false); // ouverture depuis un autre composant (bouton de l'aside desktop) useEffect(() => { const on = () => setOpen(true); window.addEventListener("lk:askka", on); return () => window.removeEventListener("lk:askka", on); }, []); const contexte = () => `(Logement consulté sur Lou-Ka : ${l.title || l.address}${l.city ? `, ${l.city}` : ""}` + `${l.price != null ? ` — ${fmtPrice(l.price)}/mois` : ""}${l.unit_type ? ` — ${l.unit_type}` : ""}` + ` — https://www.lou-ka.com/logement/${encodeURIComponent(l.uid)})`; const poser = (question: string) => { const ok = envoyerAKa(`${question}\n\n${contexte()}`); if (ok) { setOpen(false); setQ(""); setErr(false); } else setErr(true); }; return ( <> setOpen(false)} title="Demander à Ka" sub="Assistant Groupe KA · connaît cette fiche" footer={
{ e.preventDefault(); if (q.trim()) poser(q.trim()); }}> setQ(e.target.value)} placeholder="Posez votre question sur ce logement…" aria-label="Votre question" />
}>

Je peux comparer ce loyer au quartier, expliquer les données de la fiche et chercher dans les autres plateformes Groupe KA.

{l.images?.[0] && } {l.title || l.address} {[l.city, l.price != null ? `${fmtPrice(l.price)}/mois` : null, l.unit_type].filter(Boolean).join(" · ")}
{SUGGESTIONS.map((s) => ( ))}
{err &&

L'assistant n'est pas encore chargé — réessayez dans un instant.

}
); }