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
|
// Mettre à jour les selects Select2
|
||||||
updateSelect2Fields();
|
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
|
// Filtrer les traducteurs selon la langue
|
||||||
if (filterTraducteursByLangue) {
|
if (filterTraducteursByLangue) {
|
||||||
setTimeout(() => filterTraducteursByLangue(), 50);
|
setTimeout(() => filterTraducteursByLangue(), 50);
|
||||||
@ -118,7 +149,6 @@ export function fillFormWithEvent(event, filterTraducteursByLangue = null) {
|
|||||||
handleTraducteurExistingCheckbox(extendedProps.id_traducteur || event.id_traducteur);
|
handleTraducteurExistingCheckbox(extendedProps.id_traducteur || event.id_traducteur);
|
||||||
|
|
||||||
// Gérer les champs conditionnels selon le type
|
// Gérer les champs conditionnels selon le type
|
||||||
const type = extendedProps.type || event.type || '';
|
|
||||||
handleTypeConditionalFields(type, event, extendedProps);
|
handleTypeConditionalFields(type, event, extendedProps);
|
||||||
|
|
||||||
// Charger le statut liste rouge si bénéficiaire sélectionné
|
// Charger le statut liste rouge si bénéficiaire sélectionné
|
||||||
|
|||||||
@ -298,6 +298,7 @@ function filterSelectOptions(data, currentEventData = null) {
|
|||||||
|
|
||||||
if (languesPermises.length > 0) {
|
if (languesPermises.length > 0) {
|
||||||
// Parcourir les options et cacher celles dont le data-slug n'est pas dans langues_disponibles
|
// 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 => {
|
Array.from(langueSelect.options).forEach(option => {
|
||||||
if (option.value === '') {
|
if (option.value === '') {
|
||||||
// Garder l'option vide visible
|
// Garder l'option vide visible
|
||||||
@ -306,10 +307,12 @@ function filterSelectOptions(data, currentEventData = null) {
|
|||||||
return;
|
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 optionSlug = option.getAttribute('data-slug');
|
||||||
const isPermise = optionSlug && languesPermises.includes(optionSlug);
|
const isPermise = optionSlug && languesPermises.includes(optionSlug);
|
||||||
|
|
||||||
if (isPermise) {
|
if (isPermise || isCurrentlySelected) {
|
||||||
option.style.display = '';
|
option.style.display = '';
|
||||||
option.disabled = false;
|
option.disabled = false;
|
||||||
} else {
|
} else {
|
||||||
@ -372,7 +375,7 @@ function preselectValues(eventData) {
|
|||||||
'id_local': extendedProps.id_local,
|
'id_local': extendedProps.id_local,
|
||||||
'id_departement': extendedProps.id_departement,
|
'id_departement': extendedProps.id_departement,
|
||||||
'id_type_intervention': extendedProps.id_type_intervention,
|
'id_type_intervention': extendedProps.id_type_intervention,
|
||||||
'langue': extendedProps.langue
|
'langue': extendedProps.langue || eventData.langue
|
||||||
};
|
};
|
||||||
|
|
||||||
Object.entries(fieldsToPreselect).forEach(([fieldId, value]) => {
|
Object.entries(fieldsToPreselect).forEach(([fieldId, value]) => {
|
||||||
@ -381,6 +384,13 @@ function preselectValues(eventData) {
|
|||||||
const element = document.getElementById(fieldId);
|
const element = document.getElementById(fieldId);
|
||||||
if (!element || element.tagName !== 'SELECT') return;
|
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
|
// Si Select2 est actif
|
||||||
if (window.jQuery && jQuery(element).hasClass('select2-hidden-accessible')) {
|
if (window.jQuery && jQuery(element).hasClass('select2-hidden-accessible')) {
|
||||||
// Définir la valeur et déclencher l'événement change.select2
|
// Définir la valeur et déclencher l'événement change.select2
|
||||||
@ -388,6 +398,8 @@ function preselectValues(eventData) {
|
|||||||
} else {
|
} else {
|
||||||
// Select natif
|
// Select natif
|
||||||
element.value = value;
|
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
|
// S'assurer que Select2 est initialisé avant de présélectionner
|
||||||
initializeSelect2();
|
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);
|
preselectValues(eventData);
|
||||||
|
}, 100);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -458,7 +474,11 @@ export async function populateSelects(eventData = null) {
|
|||||||
|
|
||||||
// S'assurer que Select2 est initialisé avant de présélectionner
|
// S'assurer que Select2 est initialisé avant de présélectionner
|
||||||
initializeSelect2();
|
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);
|
preselectValues(eventData);
|
||||||
|
}, 100);
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Erreur lors de la récupération des disponibilités:', error);
|
console.error('Erreur lors de la récupération des disponibilités:', error);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user