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

-> REFONTE DU DESIGN DES AFFICHEURS CLASSIQUES (GÉNÉRAL + QUAIS)
-> IMPLÉMENTATION DU DESIGN AFL : GÉNÉRAL ET QUAIS

-> CHOIX DE LA SÉLECTION DES TYPES D'AFFICHEURS (GÉNÉRAL / QUAIS) UNE FOIS LE TYPE D'AFFICHEUR SÉLECTIONNÉS
This commit is contained in:
Ferrovia committed 2026-07-10 17:55:13 +02:00
1 parent 71822823f2
commit 19868a451f
16 files changed
+156 -48

No files matched your search

+47
View File
@@ -0,0 +1,47 @@
/**
* Récupère TOUTES les lignes d'une table Supabase en paginant automatiquement.
*
* PostgREST (Supabase) limite par défaut à 1000 lignes par requête.
* Cette fonction envoie plusieurs requêtes avec `.range()` pour obtenir
* l'intégralité des résultats, puis les concatène.
*
* Usage :
* fetchAllRows(supabase.from('horaires').select('*'))
*
* En interne, `.range()` modifie le header Range de la requête et chaque
* `await` sur un PostgrestBuilder déclenche un nouveau fetch HTTP, ce qui
* permet de paginer sur le même builder.
*
* @param {object} query - Query Supabase (ex: supabase.from('horaires').select('*'))
* @param {number} [pageSize=500] - Nombre de lignes par page (≤ 1000)
* @returns {Promise<{data: Array, error: object|null}>}
*/
export async function fetchAllRows(query, pageSize = 500) {
let allData = [];
let from = 0;
let hasMore = true;
while (hasMore) {
const to = from + pageSize - 1;
const { data, error } = await query.range(from, to);
if (error) {
return { data: null, error };
}
if (!data || data.length === 0) {
hasMore = false;
} else {
allData = allData.concat(data);
if (data.length < pageSize) {
hasMore = false;
} else {
from += pageSize;
}
}
}
return { data: allData, error: null };
}
export default fetchAllRows;
+13 -1
View File
@@ -19,7 +19,19 @@ if (!supabaseUrl || !supabaseAnonKey) {
'Vérifiez REACT_APP_SUPABASE_URL et REACT_APP_SUPABASE_ANON_KEY dans .env et redémarrez le serveur.'
);
} else {
supabase = createClient(supabaseUrl, supabaseAnonKey);
supabase = createClient(supabaseUrl, supabaseAnonKey, {
realtime: {
// Désactivé : le reverse proxy ne supporte pas le WebSocket vers le port 3001.
// L'appli utilise un fallback par polling (useAnnonceSonoreRealtime).
params: { eventsPerSecond: 0 },
},
// Empêcher la connexion WebSocket automatique
global: {
headers: {},
},
});
// Désactiver complètement le canal Realtime pour éviter les erreurs wss:// dans la console
try { supabase.realtime.disconnect(); } catch (e) { /* ignore */ }
}
export { supabase };