Refresh save filter toggle when changing filter

This commit is contained in:
Jorge Manrubia
2025-09-19 18:37:02 +02:00
parent f1a5aeb7c2
commit 717f921a73
6 changed files with 41 additions and 5 deletions
@@ -0,0 +1,7 @@
class Filters::SaveToggleRefreshesController < ApplicationController
include FilterScoped
def create
turbo_stream.replace("filter-toggle", partial: "filters/filter_toggle", locals: { filter: @filter })
end
end
@@ -1,9 +1,11 @@
import { Controller } from "@hotwired/stimulus"
import { debounce } from "helpers/timing_helpers";
import { post } from "@rails/request.js"
export default class extends Controller {
static classes = ["filtersSet"]
static targets = ["field"]
static targets = ["field", "form"]
static values = { refreshSaveToggleUrl: String }
initialize() {
this.debouncedChange = debounce(this.change.bind(this), 50)
@@ -15,6 +17,7 @@ export default class extends Controller {
change() {
this.#toggleFiltersSetClass()
this.#refreshSaveToggleButton()
}
async fieldTargetConnected(field) {
@@ -42,4 +45,24 @@ export default class extends Controller {
const comboboxContainer = field.closest("[data-combobox-default-value-value]")
return comboboxContainer?.dataset?.comboboxDefaultValueValue
}
#refreshSaveToggleButton() {
post(this.refreshSaveToggleUrlValue, {
body: this.#collectFilterFormData(),
responseKind: "turbo-stream"
})
}
#collectFilterFormData() {
const formData = new FormData()
this.formTargets.forEach(form => {
const hiddenFields = form.querySelectorAll('input[type="hidden"]:not([disabled])[name]')
hiddenFields.forEach(field => {
formData.append(field.name, field.value)
})
})
return formData
}
}
+1 -1
View File
@@ -1,7 +1,7 @@
<% cache user_filtering do %>
<%= tag.aside id: "filter-settings",
class: class_names("filters flex align-center gap-half justify-center center margin-block-end", { "filters--expanded": user_filtering.expanded? }),
data: { controller: "toggle-class filter-settings", toggle_class_toggle_class: "filters--expanded", filter_settings_filters_set_class: "filters--has-filters-set" } do %>
data: { controller: "toggle-class filter-settings", toggle_class_toggle_class: "filters--expanded", filter_settings_filters_set_class: "filters--has-filters-set", filter_settings_refresh_save_toggle_url_value: save_toggle_refresh_path } do %>
<div class="flex-inline center align-center gap-half" data-controller="toggle-enable">
<%= render "filters/settings/terms", user_filtering: user_filtering %>
<%= render "filters/settings/controls", user_filtering: user_filtering %>
@@ -1,5 +1,5 @@
<%= form_with url: cards_path, method: :get, class: "flex-inline center align-center gap-half",
data: { controller: "form", turbo_frame: "card_columns", turbo_action: "advance" } do |form| %>
data: { controller: "form", turbo_frame: "card_columns", turbo_action: "advance", filter_settings_target: "form" } do |form| %>
<%= hidden_field_tag :expand_all, true, disabled: !user_filtering.expanded?, data: { toggle_enable_target: "element" } %>
<% user_filtering.filter.collections.each do |collection| %>
<%= filter_hidden_field_tag "collection_ids[]", collection.id %>
+1 -1
View File
@@ -1,6 +1,6 @@
<% filter = user_filtering.filter %>
<%= form_with url: cards_path, method: :get, class: "", data: { controller: "form", turbo_frame: "card_columns", action: "input->form#debouncedSubmit" } do |form| %>
<%= form_with url: cards_path, method: :get, class: "", data: { controller: "form", turbo_frame: "card_columns", action: "input->form#debouncedSubmit", filter_settings_target: "form" } do |form| %>
<% filter.as_params.except(:terms).each do |key, value| %>
<%= filter_hidden_field_tag key, value %>
<% end %>
+7 -1
View File
@@ -81,7 +81,13 @@ Rails.application.routes.draw do
resources :queries
end
resources :filters
resources :filters do
scope module: :filters do
collection do
resource :save_toggle_refresh, only: :create
end
end
end
resources :events, only: :index
namespace :events do