/** * ============================================================================= * Job·Ka — Groupe KA * Auteur : Simon-Pierre Boucher * Contact : contact@spboucher.ai * Fichier : frontend/src/pages/Favoris.tsx * Rôle : Mes favoris ♥ « Mon univers Ka » — offres mises en favoris, * lues au hub Groupe KA (magasin central, aucun stockage local). * Rangées éditoriales alignées sur la liste d'offres (job-row). * Créé : 2026-08-23 Modifié : 2026-08-25 * ============================================================================= */ import { Link } from "react-router-dom"; import { FavItem, goLogin, useFav } from "../favorites"; /** /emploi/ local si l'url du favori pointe vers job-ka.com. */ function localPath(f: FavItem): string | null { if (!f.url) return `/emploi/${encodeURIComponent(f.item_id)}`; try { const u = new URL(f.url); if (u.hostname.endsWith("job-ka.com")) return u.pathname + u.search; } catch { /* url invalide : lien externe ignoré */ } return null; } function FavCard({ f }: { f: FavItem }) { const { toggle } = useFav(); const path = localPath(f); const inner = ( <>

{f.title}

{f.subtitle &&

{f.subtitle}

}
{f.price_label ? {f.price_label} : Salaire non affiché}
); return path ? {inner} : {inner}; } export default function FavorisPage() { const { ready, connected, items } = useFav(); return (

Mes favoris

Vos offres d'emploi mises en favoris ♥ — synchronisées avec votre compte Mon univers Ka sur toutes les plateformes du Groupe KA.

{!ready &&
Chargement…
} {ready && !connected && (

Connectez-vous avec votre KA ID pour retrouver vos favoris.

)} {ready && connected && items.length === 0 && (

Aucun favori pour l'instant — touchez le cœur ♥ sur une offre pour la retrouver ici.

Parcourir les offres
)} {ready && connected && items.length > 0 && (
{items.map((f) => )}
)} {ready && connected && (

Tous vos favoris Groupe KA (logements, propriétés, produits…) :{" "} Mon univers Ka ↗

)}
); }