/** * Trouve-KA — contenu client de la page « Mes favoris » (Mon univers Ka) * Author: Simon-Pierre Boucher * Contact: contact@spboucher.ai * * Liste vivante des favoris du membre, lue au hub Groupe KA via * /api/favorites (magasin partagé du fav-store — mêmes cœurs que les * résultats). Retrait immédiat (toggle optimiste, le hub tranche). */ "use client"; import { useEffect } from "react"; import Link from "next/link"; import { Favicon } from "@/components/favicon"; import { ensureLoaded, toggleFav, useFavorites, type Fav, } from "@/components/fav-store"; function domainOf(url: string | undefined): string { if (!url) return ""; try { return new URL(url).hostname.replace(/^www\./, ""); } catch { return ""; } } function FavCard({ fav }: { fav: Fav }) { const domain = domainOf(fav.url); return (
{domain ? (
{fav.subtitle || domain}
) : null}

{fav.title || fav.url}

{fav.price_label ? (

{fav.price_label}

) : null}
{fav.image_url ? ( // eslint-disable-next-line @next/next/no-img-element ) : null}
); } export function FavorisContent({ name }: { name: string }) { const favs = useFavorites(); useEffect(() => { // Liste fraîche à l'arrivée sur la page (le cache serveur reste à 30 s). void ensureLoaded(true); }, []); const loading = favs.status === "idle" || favs.status === "loading"; return (

Mon univers Ka

Mes favoris

{name ? `${name}, voici` : "Voici"} les pages que vous avez gardées — la même liste vous suit sur toutes les plateformes du Groupe KA.

{loading ? (
); }