diff --git a/app/javascript/controllers/dialog_manager_controller.js b/app/javascript/controllers/dialog_manager_controller.js new file mode 100644 index 000000000..71552e2c8 --- /dev/null +++ b/app/javascript/controllers/dialog_manager_controller.js @@ -0,0 +1,24 @@ +import { Controller } from "@hotwired/stimulus" + +export default class extends Controller { + connect() { + this.element.addEventListener("dialog:show", this.handleDialogShow.bind(this)) + } + + disconnect() { + this.element.removeEventListener("dialog:show", this.handleDialogShow.bind(this)) + } + + handleDialogShow(event) { + this.#dialogControllers.forEach(dialogController => { + if (dialogController !== event.target) { + const dialog = dialogController.querySelector("dialog") + dialog.removeAttribute("open") + } + }) + } + + get #dialogControllers() { + return this.element.querySelectorAll('[data-controller~="dialog"]') + } +} diff --git a/app/views/filters/_settings.html.erb b/app/views/filters/_settings.html.erb index ae604011c..52137b5de 100644 --- a/app/views/filters/_settings.html.erb +++ b/app/views/filters/_settings.html.erb @@ -1,7 +1,7 @@ <%= tag.aside \ class: class_names("filters margin-block-end", { "filters--expanded": user_filtering.expanded? }), data: { - controller: "toggle-enable toggle-class filter-settings", + controller: "toggle-enable toggle-class filter-settings dialog-manager", toggle_class_toggle_class: "filters--expanded", filter_settings_filters_set_class: "filters--has-filters-set", filter_settings_no_filtering_url_value: no_filtering_url,