// ============================================================================== // Author: Simon-Pierre Boucher // File: pages/Favoris.tsx // Desc: Restos favoris ♥ « Mon univers Ka » du membre connecté — lus au hub // Groupe KA (groupe-ka.com), magasin central des favoris du groupe : // les mêmes ♥ suivent le membre sur toutes les plateformes ·Ka. // ============================================================================== import { useEffect, useState } from "react"; import { Link } from "react-router-dom"; import { useAccount } from "../account"; import { Restaurant, fetchFavorites } from "../api"; import RestoCard from "../components/RestoCard"; import { useFav } from "../favorites"; export default function FavorisPage() { const { me } = useAccount(); const { ready, connected, ids, items } = useFav(); const [restos, setRestos] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { if (!ready) return; if (!connected) { setLoading(false); return; } fetchFavorites() .then((f) => setRestos(f.restaurants)) .catch(() => {}) .finally(() => setLoading(false)); }, [ready, connected]); if (ready && !connected) { return (

Connectez-vous pour vos favoris

Se connecter avec KA ID

Un seul compte Groupe KA : vos ♥ vous suivent sur Resto·Ka, Lou·Ka, Food·Ka et toutes les plateformes ·Ka — c'est « Mon univers Ka ».

); } // fiches locales encore en favoris (le toggle retire la carte sans recharger) const shown = restos.filter((r) => ids.has(r.uid)); // favoris du hub sans fiche locale (resto retiré du catalogue) : carte simple const known = new Set(restos.map((r) => r.uid)); const extras = items.filter((i) => i.item_id && !known.has(i.item_id)); return (
Mon univers Ka{me?.ka_id ? ` — ${me.ka_id}` : ""}

Mes restos favoris

Vos ♥ sont conservés au hub Groupe KA : les mêmes favoris, sur tous vos appareils et toutes les plateformes ·Ka.

{loading || !ready ? (

Chargement…

) : shown.length === 0 && extras.length === 0 ? (

Aucun favori pour l'instant

Touchez le ♥ sur une fiche de resto pour l'épingler ici.

) : (
{shown.map((r) => )} {extras.map((i) => (
{i.image_url ? {i.title} :
}
{i.price_label &&
{i.price_label}
}
{i.title}
{i.subtitle &&
{i.subtitle}
}
))}
)}
); }