diff --git a/app/javascript/controllers/filter_visibility_controller.js b/app/javascript/controllers/filter_visibility_controller.js new file mode 100644 index 00000000..e91a7dcc --- /dev/null +++ b/app/javascript/controllers/filter_visibility_controller.js @@ -0,0 +1,37 @@ +import { Controller } from "@hotwired/stimulus"; + +// Stimulus controller to toggle the visibility of accordions based on checkbox selection +// and submit the form automatically when a checkbox is changed. +export default class extends Controller { + // Define targets for checkboxes and accordions + static targets = ["checkbox", "accordion"]; + + // Called when the controller connects to the DOM + connect() { + // Attach event listeners to each checkbox + this.checkboxTargets.forEach(checkbox => { + checkbox.addEventListener("change", () => { + this.toggleAccordions(); // Update the visibility of accordions + + // Submit the closest form when a checkbox is changed + event.target.closest("form").submit(); + }); + }); + + // Initialize the visibility of accordions on page load + this.toggleAccordions(); + } + + // Function to toggle visibility of accordions based on checkbox states + toggleAccordions() { + this.accordionTargets.forEach(accordionWrapper => { + // Find the checkbox that controls this accordion + const checkbox = this.checkboxTargets.find(cb => cb.id === accordionWrapper.dataset.filterTarget); + + if (checkbox) { + // Toggle the "d-none" class based on the checkbox state (hide if unchecked) + accordionWrapper.classList.toggle("d-none", !checkbox.checked); + } + }); + } +} \ No newline at end of file diff --git a/app/javascript/controllers/index.js b/app/javascript/controllers/index.js index 328fd0e8..87dd03a0 100644 --- a/app/javascript/controllers/index.js +++ b/app/javascript/controllers/index.js @@ -7,6 +7,9 @@ import { application } from "./application" import ArticleEditorController from "./article_editor_controller" application.register("article-editor", ArticleEditorController) +import FilterVisibilityController from "./filter_visibility_controller" +application.register("filter-visibility", FilterVisibilityController) + import FlashController from "./flash_controller" application.register("flash", FlashController) diff --git a/app/views/xronos_data/_filter_fields.html.erb b/app/views/xronos_data/_filter_fields.html.erb index 6a110dd7..7bd8fb1d 100644 --- a/app/views/xronos_data/_filter_fields.html.erb +++ b/app/views/xronos_data/_filter_fields.html.erb @@ -5,9 +5,31 @@ -