diff --git a/app/templates/patching_import.html b/app/templates/patching_import.html index 92f1376..95a46df 100644 --- a/app/templates/patching_import.html +++ b/app/templates/patching_import.html @@ -266,12 +266,13 @@ } function applyFilters(){ - const fi = (fInter.value || '').trim(); - const fe = (fEnv.value || '').trim(); + // Comparaisons case-insensitive (Production == production, etc.) + const fi = (fInter.value || '').trim().toLowerCase(); + const fe = (fEnv.value || '').trim().toLowerCase(); let visibleCount = 0; tbody.querySelectorAll('tr').forEach(tr => { - const i = tr.dataset.intervenant || ''; - const e = tr.dataset.env || ''; + const i = (tr.dataset.intervenant || '').toLowerCase(); + const e = (tr.dataset.env || '').toLowerCase(); const ok = (!fi || i === fi) && (!fe || e === fe); if (ok) { tr.classList.remove('row-hidden'); tr.style.display=''; visibleCount++; } else { tr.classList.add('row-hidden'); tr.style.display='none'; } @@ -281,8 +282,17 @@ } function rebuildSelectOptions(sel, values, placeholder){ + // Dedup case-insensitive : on garde la 1re forme rencontrée comme canonique + // (généralement la majuscule "Production" si elle apparaît avant "production") const cur = sel.value; - const opts = Array.from(new Set(values.filter(x => x))).sort((a,b) => a.localeCompare(b, 'fr', {sensitivity:'base'})); + const seen = new Map(); // lowercase -> canonical form + for (const v of values) { + if (!v) continue; + const k = v.toLowerCase(); + if (!seen.has(k)) seen.set(k, v); + } + const opts = Array.from(seen.values()).sort((a,b) => + a.localeCompare(b, 'fr', {sensitivity:'base'})); sel.innerHTML = '' + opts.map(v => '').join(''); }