From 90bb68af53bbe81a21979548eb689396516ca364 Mon Sep 17 00:00:00 2001 From: theShlavuk Date: Wed, 21 Jan 2026 21:50:15 +0100 Subject: [PATCH] langue select --- assets/js/modules/agenda-modal-select.js | 78 ++++++++++++------------ 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/assets/js/modules/agenda-modal-select.js b/assets/js/modules/agenda-modal-select.js index e01aa74..362c81e 100644 --- a/assets/js/modules/agenda-modal-select.js +++ b/assets/js/modules/agenda-modal-select.js @@ -292,48 +292,48 @@ function filterSelectOptions(data, currentEventData = null) { const isPermanence = extendedProps.type === 'permanence'; const languesDisponibles = extendedProps.langues_disponibles; - console.log('🌐 [LANGUE] Filtrage des langues', { - isPermanence, - languesDisponibles, - totalLangues: (data.langues || []).length - }); - - // Si c'est une permanence ET qu'il y a des langues_disponibles non vides, filtrer - // Sinon (pas de permanence OU pas de langues_disponibles OU vide), afficher toutes les langues - if (isPermanence && languesDisponibles && typeof languesDisponibles === 'string' && languesDisponibles.trim() !== '') { + const langueSelect = document.getElementById('langue'); + if (langueSelect && isPermanence && languesDisponibles && typeof languesDisponibles === 'string' && languesDisponibles.trim() !== '') { const languesPermises = languesDisponibles.split(',').map(l => l.trim()).filter(l => l !== ''); - const languesFiltrees = (data.langues || []).filter(langue => { - // Convertir en string pour comparaison (éviter problème string vs number) - const langueIdStr = langue.id != null ? langue.id.toString() : null; - const langueSlugStr = langue.slug != null ? langue.slug.toString() : null; - const langueStr = typeof langue === 'string' ? langue : null; + + if (languesPermises.length > 0) { + // Parcourir les options et cacher celles dont le data-slug n'est pas dans langues_disponibles + Array.from(langueSelect.options).forEach(option => { + if (option.value === '') { + // Garder l'option vide visible + option.style.display = ''; + option.disabled = false; + return; + } + + const optionSlug = option.getAttribute('data-slug'); + const isPermise = optionSlug && languesPermises.includes(optionSlug); + + if (isPermise) { + option.style.display = ''; + option.disabled = false; + } else { + option.style.display = 'none'; + option.disabled = true; + } + }); - return languesPermises.includes(langueIdStr) || - languesPermises.includes(langueSlugStr) || - languesPermises.includes(langueStr); - }); - - // Calculer les langues cachées - const languesCachees = (data.langues || []).filter(langue => { - const langueIdStr = langue.id != null ? langue.id.toString() : null; - const langueSlugStr = langue.slug != null ? langue.slug.toString() : null; - const langueStr = typeof langue === 'string' ? langue : null; - - return !(languesPermises.includes(langueIdStr) || - languesPermises.includes(langueSlugStr) || - languesPermises.includes(langueStr)); - }); - - console.log('✅ [LANGUE] Langues disponibles (affichées):', languesFiltrees.map(l => ({ id: l.id, nom: l.nom, slug: l.slug }))); - console.log('❌ [LANGUE] Langues cachées:', languesCachees.map(l => ({ id: l.id, nom: l.nom, slug: l.slug }))); - console.log('📋 [LANGUE] Langues permises (slugs):', languesPermises); - - filterSelect('langue', languesFiltrees); - - // Le select langue n'est plus en Select2, donc pas besoin de rafraîchir Select2 + console.log('✅ [LANGUE] Options filtrées selon langues_disponibles:', languesPermises); + } else { + // Si langues_disponibles est vide, afficher toutes les options + Array.from(langueSelect.options).forEach(option => { + option.style.display = ''; + option.disabled = false; + }); + } } else { - // Afficher toutes les langues (pas de permanence OU pas de langues_disponibles OU vide) - console.log('🌍 [LANGUE] Affichage de toutes les langues (pas de filtrage)'); + // Pas de permanence ou pas de langues_disponibles : afficher toutes les options + if (langueSelect) { + Array.from(langueSelect.options).forEach(option => { + option.style.display = ''; + option.disabled = false; + }); + } filterSelect('langue', data.langues || []); } }