// ----------------------------------------------------------------------------- // Groupe KA — Annuaire des déménageurs du Québec (page partagée Lou-Ka/Immo-Ka) // pages/Demenageurs.tsx : liste complète des entreprises de déménagement de la // province (17 régions), filtrable par région et par texte — /api/demenageurs. // ----------------------------------------------------------------------------- import { useEffect, useMemo, useState } from "react"; type Mover = { id: string; name: string; city: string; region: string; address: string; phone: string; website: string; rating: number | null; reviews: number | null; category: string; }; type Doc = { generated: string | null; total: number; count: number; regions: { region: string; n: number }[]; movers: Mover[]; }; const telHref = (p: string) => "tel:+1" + p.replace(/\D/g, "").slice(-10); const host = (u: string) => { try { return new URL(u).hostname.replace(/^www\./, ""); } catch { return u; } }; export default function DemenageursPage() { const [doc, setDoc] = useState(null); const [error, setError] = useState(null); const [q, setQ] = useState(""); const [region, setRegion] = useState(""); useEffect(() => { fetch("/api/demenageurs") .then((r) => { if (!r.ok) throw new Error("HTTP " + r.status); return r.json(); }) .then(setDoc) .catch((e) => setError(String(e))); }, []); const filtered = useMemo(() => { if (!doc) return []; const needle = q.trim().toLowerCase(); return doc.movers.filter( (m) => (!region || m.region === region) && (!needle || (m.name + " " + m.city).toLowerCase().includes(needle)), ); }, [doc, q, region]); const groups = useMemo(() => { const order = (doc?.regions ?? []).map((r) => r.region); const by: Record = {}; for (const m of filtered) (by[m.region] ??= []).push(m); return order .filter((r) => by[r]?.length) .map((r) => ({ region: r, movers: by[r] })); }, [doc, filtered]); const filtering = q.trim() !== "" || region !== ""; return (
Annuaire — services de déménagement

Déménageurs du Québec

L'annuaire le plus complet des entreprises de déménagement de la province : {doc ? doc.total : "…"} déménageurs répertoriés dans les 17 régions administratives du Québec, avec téléphone, site web et note Google. Recensement continu par le Groupe KA {doc?.generated ? ` — mis à jour le ${doc.generated}` : ""}.

{error &&
⚠️ {error}
} {!doc && !error &&
Chargement…
} {doc && ( <>
setQ(e.target.value)} placeholder="Rechercher un déménageur ou une ville…" aria-label="Rechercher un déménageur ou une ville" style={{ flex: "1 1 240px", maxWidth: 380, padding: "10px 14px", border: "1.5px solid var(--line)", borderRadius: 10, font: "inherit", background: "var(--surface)", color: "inherit", }} /> {filtering && ( {filtered.length} résultat{filtered.length > 1 ? "s" : ""} )}
{filtered.length === 0 && (
Aucun déménageur ne correspond à cette recherche.
)} {groups.map((g) => (

{g.region}{" "} ({g.movers.length})

{g.movers.map((m) => ( ))}
Entreprise Ville Téléphone Site web Note Google
{m.name} {m.category && (
{m.category}
)}
{m.city} {m.phone ? ( {m.phone} ) : ( "—" )} {m.website ? ( {host(m.website)} ) : ( "—" )} {m.rating ? `★ ${m.rating.toFixed(1)} (${m.reviews ?? 0})` : "—"}
))}

Annuaire informatif compilé à partir des fiches publiques Google. Avant d'embaucher un déménageur, vérifiez qu'il est inscrit au Registraire des entreprises du Québec, qu'il détient les assurances requises et demandez toujours une soumission écrite. Le Groupe KA n'a aucun lien d'affaires avec les entreprises listées.

)}
); }