amélioration select langue
This commit is contained in:
parent
90bb68af53
commit
040a1075e4
@ -109,6 +109,37 @@ export function fillFormWithEvent(event, filterTraducteursByLangue = null) {
|
||||
// Mettre à jour les selects Select2
|
||||
updateSelect2Fields();
|
||||
|
||||
// Filtrer les options langue selon langues_disponibles si c'est une permanence
|
||||
const type = extendedProps.type || event.type || '';
|
||||
if (type === 'permanence') {
|
||||
const languesDisponibles = extendedProps.langues_disponibles;
|
||||
const langueSelect = document.getElementById('langue');
|
||||
if (langueSelect && languesDisponibles && typeof languesDisponibles === 'string' && languesDisponibles.trim() !== '') {
|
||||
const languesPermises = languesDisponibles.split(',').map(l => l.trim()).filter(l => l !== '');
|
||||
if (languesPermises.length > 0) {
|
||||
const currentValue = langueSelect.value; // Récupérer la valeur actuelle (définie juste avant)
|
||||
Array.from(langueSelect.options).forEach(option => {
|
||||
if (option.value === '') {
|
||||
option.style.display = '';
|
||||
option.disabled = false;
|
||||
return;
|
||||
}
|
||||
// Garder l'option sélectionnée visible même si elle n'est pas dans langues_disponibles
|
||||
const isCurrentlySelected = option.value === currentValue;
|
||||
const optionSlug = option.getAttribute('data-slug');
|
||||
const isPermise = optionSlug && languesPermises.includes(optionSlug);
|
||||
if (isPermise || isCurrentlySelected) {
|
||||
option.style.display = '';
|
||||
option.disabled = false;
|
||||
} else {
|
||||
option.style.display = 'none';
|
||||
option.disabled = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Filtrer les traducteurs selon la langue
|
||||
if (filterTraducteursByLangue) {
|
||||
setTimeout(() => filterTraducteursByLangue(), 50);
|
||||
@ -118,7 +149,6 @@ export function fillFormWithEvent(event, filterTraducteursByLangue = null) {
|
||||
handleTraducteurExistingCheckbox(extendedProps.id_traducteur || event.id_traducteur);
|
||||
|
||||
// Gérer les champs conditionnels selon le type
|
||||
const type = extendedProps.type || event.type || '';
|
||||
handleTypeConditionalFields(type, event, extendedProps);
|
||||
|
||||
// Charger le statut liste rouge si bénéficiaire sélectionné
|
||||
|
||||
@ -298,6 +298,7 @@ function filterSelectOptions(data, currentEventData = null) {
|
||||
|
||||
if (languesPermises.length > 0) {
|
||||
// Parcourir les options et cacher celles dont le data-slug n'est pas dans langues_disponibles
|
||||
const currentValue = langueSelect.value; // Récupérer la valeur actuellement sélectionnée
|
||||
Array.from(langueSelect.options).forEach(option => {
|
||||
if (option.value === '') {
|
||||
// Garder l'option vide visible
|
||||
@ -306,10 +307,12 @@ function filterSelectOptions(data, currentEventData = null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Garder l'option sélectionnée visible même si elle n'est pas dans langues_disponibles
|
||||
const isCurrentlySelected = option.value === currentValue;
|
||||
const optionSlug = option.getAttribute('data-slug');
|
||||
const isPermise = optionSlug && languesPermises.includes(optionSlug);
|
||||
|
||||
if (isPermise) {
|
||||
if (isPermise || isCurrentlySelected) {
|
||||
option.style.display = '';
|
||||
option.disabled = false;
|
||||
} else {
|
||||
@ -372,7 +375,7 @@ function preselectValues(eventData) {
|
||||
'id_local': extendedProps.id_local,
|
||||
'id_departement': extendedProps.id_departement,
|
||||
'id_type_intervention': extendedProps.id_type_intervention,
|
||||
'langue': extendedProps.langue
|
||||
'langue': extendedProps.langue || eventData.langue
|
||||
};
|
||||
|
||||
Object.entries(fieldsToPreselect).forEach(([fieldId, value]) => {
|
||||
@ -381,6 +384,13 @@ function preselectValues(eventData) {
|
||||
const element = document.getElementById(fieldId);
|
||||
if (!element || element.tagName !== 'SELECT') return;
|
||||
|
||||
// Vérifier que l'option existe dans le select avant de la sélectionner
|
||||
const optionExists = Array.from(element.options).some(opt => opt.value === value.toString());
|
||||
if (!optionExists) {
|
||||
console.warn(`⚠️ Option avec valeur "${value}" non trouvée dans le select ${fieldId}`);
|
||||
return;
|
||||
}
|
||||
|
||||
// Si Select2 est actif
|
||||
if (window.jQuery && jQuery(element).hasClass('select2-hidden-accessible')) {
|
||||
// Définir la valeur et déclencher l'événement change.select2
|
||||
@ -388,6 +398,8 @@ function preselectValues(eventData) {
|
||||
} else {
|
||||
// Select natif
|
||||
element.value = value;
|
||||
// Déclencher l'événement change pour notifier les autres listeners
|
||||
element.dispatchEvent(new Event('change', { bubbles: true }));
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -434,7 +446,11 @@ export async function populateSelects(eventData = null) {
|
||||
|
||||
// S'assurer que Select2 est initialisé avant de présélectionner
|
||||
initializeSelect2();
|
||||
// Petit délai pour s'assurer que le filtrage des langues est bien appliqué avant la présélection
|
||||
// Et que les options sont bien dans le DOM
|
||||
setTimeout(() => {
|
||||
preselectValues(eventData);
|
||||
}, 100);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -458,7 +474,11 @@ export async function populateSelects(eventData = null) {
|
||||
|
||||
// S'assurer que Select2 est initialisé avant de présélectionner
|
||||
initializeSelect2();
|
||||
// Petit délai pour s'assurer que le filtrage des langues est bien appliqué avant la présélection
|
||||
// Et que les options sont bien dans le DOM
|
||||
setTimeout(() => {
|
||||
preselectValues(eventData);
|
||||
}, 100);
|
||||
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la récupération des disponibilités:', error);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user