Python 61.6%
TypeScript 20.9%
CSS 11.4%
JavaScript 5.1%
HTML 1.1%
1// -----------------------------------------------------------------------------2// Auto-Ka — Agrégateur de voitures usagées à vendre (province de Québec)3// Auteur : Simon-Pierre Boucher — contact@spboucher.ai4// fiche/useFicheData.ts : données annexes de la fiche véhicule — rappels5// Transports Canada (/api/vehicles/{uid}/recalls), chargés dès que le6// véhicule est connu. Le reste (marché, KA Score, fiche constructeur,7// similaires, historique, autres offres) arrive avec /api/vehicles/{uid}.8// -----------------------------------------------------------------------------9import { useEffect, useState } from "react";10import { Recall, Vehicle, fetchVehicleRecalls } from "../api";1112export type Res<T> =13 | { status: "idle" | "loading" }14 | { status: "ok"; data: T }15 | { status: "error"; error: string }16 | { status: "na" };1718export default function useFicheData(v: Vehicle | null) {19 const [recalls, setRecalls] = useState<Res<Recall[]>>({ status: "idle" });20 const [tick, setTick] = useState(0);21 useEffect(() => {22 if (!v) return;23 let alive = true;24 setRecalls({ status: "loading" });25 fetchVehicleRecalls(v.uid)26 .then((r) => { if (alive) setRecalls({ status: "ok", data: r.recalls }); })27 .catch((e) => { if (alive) setRecalls(/API 404/.test(String(e)) ? { status: "na" } : { status: "error", error: String(e) }); });28 return () => { alive = false; };29 }, [v, tick]);30 return { recalls, retry: () => setTick((t) => t + 1) };31}32