// ----------------------------------------------------------------------------- // Lou-Ka — Agrégateur de logements à louer (province de Québec) // Auteur : Simon-Pierre Boucher — contact@spboucher.ai // pages/Gestion.tsx : tableau de bord gestionnaire — réclamer SA page (source) // puis la personnaliser (accroche, description, coordonnées, logo). La page // publique correspondante vit sur /g/{source}. // ----------------------------------------------------------------------------- import { useEffect, useMemo, useState } from "react"; import { Link } from "react-router-dom"; import { Source, claimOrg, fetchMyOrg, fetchSources, updateOrg, } from "../api"; import { useAccount } from "../account"; import { IcoBuilding } from "../components/Icons"; interface OrgMine { source: string | null; name?: string; active_listings?: number; profile?: Record; } export default function GestionPage() { const { me, loaded, refresh } = useAccount(); const [org, setOrg] = useState(null); const [sources, setSources] = useState([]); const [pick, setPick] = useState(""); const [saving, setSaving] = useState(false); const [saved, setSaved] = useState(false); const [error, setError] = useState(""); const [form, setForm] = useState({ tagline: "", description: "", website: "", phone: "", email: "", logo_url: "", }); useEffect(() => { if (me) fetchMyOrg().then((o) => { setOrg(o); const p = o.profile ?? {}; setForm({ tagline: p.tagline ?? "", description: p.description ?? "", website: p.website ?? "", phone: p.phone ?? "", email: p.email ?? "", logo_url: p.logo_url ?? "", }); }).catch(() => setOrg({ source: null })); }, [me]); useEffect(() => { if (me && org && !org.source) { fetchSources().then((r) => setSources(r.sources)).catch(() => {}); } }, [me, org]); const claimable = useMemo( () => sources .filter((s) => s.connector && s.active_listings > 0) .sort((a, b) => a.name.localeCompare(b.name, "fr")), [sources]); if (loaded && !me) { return (
Espace gestionnaire

Connectez-vous pour gérer votre page.

Se connecter avec KA ID
); } if (me && me.role !== "gestionnaire") { return (
Espace gestionnaire

Réservé aux gestionnaires.

Votre compte est en mode locataire. Si vous gérez des logements affichés sur Lou-Ka, changez de profil.

Changer de profil
); } const doClaim = async () => { if (!pick) return; setError(""); const res = await claimOrg(pick); if (!res.ok) { setError(res.status === 409 ? "Cette page est déjà réclamée par un autre compte." : "Impossible de réclamer cette page."); return; } refresh(); const o = await fetchMyOrg(); setOrg(o); }; const doSave = async () => { setSaving(true); setError(""); const res = await updateOrg(form); setSaving(false); if (!res.ok) { setError("Enregistrement impossible — réessayez."); return; } setSaved(true); setTimeout(() => setSaved(false), 2000); }; return (
Espace gestionnaire {org && !org.source && ( <>

Réclamez la page de votre gestion.

Choisissez votre organisation parmi les sources affichées sur Lou-Ka. Vous pourrez ensuite personnaliser sa page publique — votre inventaire y est déjà relié automatiquement.

{error &&

{error}

}

Vous ne trouvez pas votre organisation ? Écrivez-nous à{" "} contact@groupe-ka.com et nous ajouterons votre site comme source.

)} {org && org.source && ( <>

{org.name}

{org.active_listings ?? 0} logements actifs reliés Voir ma page publique ↗

Personnaliser ma page