diff --git a/app/scodoc/sco_groups_view.py b/app/scodoc/sco_groups_view.py index d4817ee286f1daaee3de7cad810da38f8d75deac..574ab4d048d68302d35e8e182b560650843f61d1 100644 --- a/app/scodoc/sco_groups_view.py +++ b/app/scodoc/sco_groups_view.py @@ -747,7 +747,7 @@ def groups_table( name="options", html_id="group_list_options", ) - multi_select.change_event("change_list_options(event.target.value);") + multi_select.change_event("change_list_options(values);") H.extend( # ; [ diff --git a/app/static/js/groups_view.js b/app/static/js/groups_view.js index 7f16a580d7f6241decbdb7550e810e267e9fa648..2f26c09b2261dc8d8cfc7044fa37dcbad86c53ee 100644 --- a/app/static/js/groups_view.js +++ b/app/static/js/groups_view.js @@ -54,6 +54,8 @@ function change_list_options(selected_options) { var option = options[i]; if ($.inArray(option, selected_options) >= 0) { urlParams.set(option, "1"); + } else { + urlParams.delete(option); } } window.location = url.href; diff --git a/app/static/js/multi-select.js b/app/static/js/multi-select.js index 178586f81c94422d28c23aa505ded11c9c9b345b..acd2226b32d52def4671d27ed3a78d238c6f449b 100644 --- a/app/static/js/multi-select.js +++ b/app/static/js/multi-select.js @@ -20,7 +20,8 @@ <multi-select>.values() => ["val1",...] <multi-select>.values(["val1",...]) => // sélectionne les options correspondantes (ne vérifie pas les options "single") - <multi-select>.on("change", (values) => {}) => // écoute le changement de valeur + <multi-select>.on((values) => {}) => // écoute le changement de valeur + <multi-select>.format((values)=>{}) // modifie les valeurs avant d'être envoyées / récupérées. values est un tableau des valeurs des options sélectionnées */ class MultiSelect extends HTMLElement { @@ -247,8 +248,6 @@ class MultiSelect extends HTMLElement { (checkbox) => checkbox.checked ); - const values = checkedBoxes.map((checkbox) => checkbox.value); - const opts = checkedBoxes.map((checkbox) => { return this.querySelector(`option[value="${checkbox.value}"]`); }); @@ -263,6 +262,9 @@ class MultiSelect extends HTMLElement { btn.textContent = `${checkedBoxes.length} sélections`; } this.dispatchEvent(new Event("change")); + + // update the form values + this._internals.setFormValue(this._values()); } _values(newValues = null) { @@ -284,7 +286,6 @@ class MultiSelect extends HTMLElement { checkbox.checked = newValues.includes(checkbox.value); }); - this._internals.setFormValue(this._values()); this._updateSelect(); } } @@ -298,7 +299,9 @@ class MultiSelect extends HTMLElement { } on(callback) { - this.addEventListener("change", callback); + this.addEventListener("change", () => { + callback(this._values()); + }); } format(callback) {