Lou·Ka — tous les logements à louer du Québec, un seul endroit.
- 264commits
- 1branches
- 0releases
- 180.7 MBon disk
- maindefault branch
- 5 days agolast push
1// -----------------------------------------------------------------------------2// Lou-Ka — Agrégateur de logements à louer (province de Québec)3// Auteur : Simon-Pierre Boucher — contact@spboucher.ai4// components/HydroEstimation.tsx : bloc « Coût d'électricité » (fiche)5// Estimation Hydro-Québec du coût annuel d'électricité à l'adresse6// (louka/hydro.py). Les annonces récentes sont pré-calculées et mises en7// cache : le bloc s'affiche alors automatiquement. Sinon un bouton permet8// de lancer le calcul à la demande (une résolution de captcha par appel).9// -----------------------------------------------------------------------------10import { useEffect, useState } from "react";11import { fetchHydro, fmtPrice, HydroEstimate } from "../api";1213export default function HydroEstimation({ adresse, uid, lat, lng }:14 { adresse: string | null; uid?: string;15 lat?: number | null; lng?: number | null }) {16 const [d, setD] = useState<HydroEstimate | null>(null);17 const [loading, setLoading] = useState(false);18 const [masque, setMasque] = useState(false);1920 // au montage : lecture du cache uniquement (aucun captcha, aucun coût)21 useEffect(() => {22 setD(null);23 if (!adresse) return;24 fetchHydro(adresse, { uid, lat, lng }, false)25 .then((r) => {26 if (r.disponible || r.en_attente) setD(r);27 else if (/captcha|configuré|incomplète/.test(r.raison || ""))28 setMasque(true); // service off ou adresse inexploitable29 else setD(r);30 })31 .catch(() => setMasque(true));32 }, [adresse, uid, lat, lng]);3334 if (masque || !adresse || !d) return null;3536 const lancer = () => {37 setLoading(true);38 fetchHydro(adresse, { uid, lat, lng }, true)39 .then((r) => {40 if (!r.disponible && /captcha|configuré/.test(r.raison || ""))41 setMasque(true);42 else setD(r);43 })44 .catch(() => setMasque(true))45 .finally(() => setLoading(false));46 };4748 return (49 <section className="f-bloc f-hydro" id="hydro">50 <h2>Coût d'électricité</h2>51 {d.disponible ? (52 <>53 <div className="hydro-montant">54 {fmtPrice(d.cout_mensuel!)} <small>/ mois</small>55 <span className="hydro-an">soit ~{fmtPrice(d.cout_annuel!)} / an</span>56 </div>57 <p className="fine">58 Estimation Hydro-Québec pour {d.adresse}59 {d.kwh_annuel ? ` — ${d.kwh_annuel.toLocaleString("fr-CA")} kWh/an` : ""},60 fondée sur la consommation réelle du logement. Le montant réel61 varie selon l'occupation et les habitudes.62 </p>63 </>64 ) : d.en_attente ? (65 <>66 <p className="hydro-intro">67 Obtenez une estimation du coût annuel d'électricité pour ce68 logement, calculée par Hydro-Québec d'après sa consommation réelle.69 </p>70 <button className="hydro-btn" onClick={lancer} disabled={loading}>71 {loading ? "Estimation en cours…" : "Estimer le coût d'électricité"}72 </button>73 </>74 ) : (75 <p className="hydro-vide">76 Hydro-Québec n'a pas d'estimation pour cette adresse.77 </p>78 )}79 </section>80 );81}82