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('');
}