V2.5 : VOICI LES MODIFICATIONS MAJEURS APPRTÉES DANS CETTE VERSION :

-> (BÉTA) : SYSTÈME D'ANNONCES EN GARE VIA UN MODEL IA DE SIMONE HERAULT.
This commit is contained in:
Ferrovia committed 2026-07-02 22:22:37 +02:00
1 parent ad3fc8938c
commit ad999aa44f
14 files changed
+517 -62

No files matched your search

@@ -3,6 +3,8 @@ import './ClassiquesDeparts.css';
import supabase from '../../../lib/supabase';
import Logo from '../../../components/Logo';
import MarqueeText from '../../../components/MarqueeText';
import useAnnonceSonoreRealtime from '../../../hooks/useAnnonceSonoreRealtime';
import useAutoAnnonce from '../../../hooks/useAutoAnnonce';
// Helper utilitaire : format HHhMM sans secondes (ex: 06h44)
const formatTimeNoSeconds = (v) => {
@@ -97,15 +99,23 @@ export default function ClassiquesDeparts(){
// debug des données brutes renvoyées par Supabase
const [rawDebug, setRawDebug] = useState({ count: 0, sample: [] });
const [resolvedGareId, setResolvedGareId] = useState(gareIdParam || null);
useAnnonceSonoreRealtime(resolvedGareId);
useAutoAnnonce(horaires, currentTime, false);
// Récupérer le type de gare une seule fois au montage ou quand les paramètres changent
useEffect(() => {
let mounted = true;
const fetchStationType = async () => {
try {
let fetchedType = null;
let fetchedId = gareIdParam || null;
if (gareIdParam) {
const { data: gdata, error: gerr } = await supabase.from('gares').select('id,type').eq('id', gareIdParam).limit(1);
if (!gerr && gdata && gdata.length) fetchedType = gdata[0] && gdata[0].type;
if (!gerr && gdata && gdata.length) {
fetchedType = gdata[0] && gdata[0].type;
fetchedId = gdata[0] && gdata[0].id;
}
} else if (gareDisplay) {
const flexNeedle = `%${String(gareDisplay).replace(/[-_+\s]+/g, '%')}%`;
const { data: gdata, error: gerr } = await supabase.from('gares').select('id,type,nom').ilike('nom', flexNeedle);
@@ -115,11 +125,14 @@ export default function ClassiquesDeparts(){
const n2 = String(gareDisplay || '').normalize('NFD').replace(/\p{M}/gu, '').toLowerCase().replace(/[-_+\s]+/g, ' ').trim();
return n1 === n2;
});
fetchedType = exactMatch ? exactMatch.type : gdata[0].type;
const chosen = exactMatch || gdata[0];
fetchedType = chosen ? chosen.type : null;
fetchedId = chosen ? chosen.id : null;
}
}
if (mounted) {
setStationType(fetchedType ? String(fetchedType).toLowerCase() : null);
setResolvedGareId(fetchedId);
}
} catch (e) { /* ignore */ }
};