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:
1 parent
71822823f2
commit
19868a451f
16 files changed
+156
-48
No files matched your search
@@ -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
@@ -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 };
|
||||
|
||||
Reference in new issue
Block a user