diff --git a/app/controllers/concerns/filter_scoped.rb b/app/controllers/concerns/filter_scoped.rb index 6f2dd87de..f191939b9 100644 --- a/app/controllers/concerns/filter_scoped.rb +++ b/app/controllers/concerns/filter_scoped.rb @@ -24,7 +24,11 @@ module FilterScoped end def set_user_filtering - @user_filtering = User::Filtering.new(Current.user, @filter, expanded: params[:expand_all]) + @user_filtering = User::Filtering.new(Current.user, @filter, expanded: expanded_param) + end + + def expanded_param + ActiveRecord::Type::Boolean.new.cast(params[:expand_all]) end def enable_collection_filtering diff --git a/app/controllers/my/filter_expansions_controller.rb b/app/controllers/my/filter_expansions_controller.rb new file mode 100644 index 000000000..785c49613 --- /dev/null +++ b/app/controllers/my/filter_expansions_controller.rb @@ -0,0 +1,7 @@ +class My::FilterExpansionsController < ApplicationController + include FilterScoped + + def create + render turbo_stream: turbo_stream.replace("filter-settings", partial: "filters/settings", locals: { user_filtering: @user_filtering }) + end +end diff --git a/app/views/filters/_settings.html.erb b/app/views/filters/_settings.html.erb index a8e875c3e..c8673e1e3 100644 --- a/app/views/filters/_settings.html.erb +++ b/app/views/filters/_settings.html.erb @@ -1,17 +1,9 @@ -<% cache user_filtering do %> - -<% end %> + diff --git a/app/views/filters/settings/_controls.html.erb b/app/views/filters/settings/_controls.html.erb index 0e1d5f096..25d6479c1 100644 --- a/app/views/filters/settings/_controls.html.erb +++ b/app/views/filters/settings/_controls.html.erb @@ -1,21 +1,8 @@ -<% filter = user_filtering.filter %> - -<% if user_filtering.any? %> - <% if filter.persisted? %> - <%= button_to filter_path(filter), method: :delete, class: "btn txt-x-small btn--reversed", form_class: "inline" do %> - <%= icon_tag "bookmark-outline" %> - Remove saved filter - <% end %> - <% else %> - <% filter_params = filter.as_params.transform_values { |v| v.respond_to?(:to_str) ? v.to_str : v } %> - <%= button_to filters_path, method: :post, params: filter_params, class: "btn txt-x-small", form_class: "inline" do %> - <%= icon_tag "bookmark-outline" %> - Save filter - <% end %> - <% end %> - - <%= link_to cards_path(filter.as_params.except(:assignee_ids, :assignment_status, :card_ids, :creator_ids, :closer_ids, :stage_ids, :tag_ids, :terms, :indexed_by, :sorted_by, :creation, :closure)), class: "btn btn--remove txt-x-small" do %> - <%= icon_tag "close" %> - Clear all - <% end %> -<% end %> +<%= render "filters/settings/sorted_by", user_filtering: user_filtering %> +<%= render "filters/settings/indexed_by", user_filtering: user_filtering %> +<%= render "filters/settings/tags", user_filtering: user_filtering %> +<%= render "filters/settings/assignees", user_filtering: user_filtering %> +<%= render "filters/settings/creators", user_filtering: user_filtering %> +<%= render "filters/settings/closers", user_filtering: user_filtering %> +<%= render "filters/settings/time_window", user_filtering: user_filtering, name: :creation, label: "Created" %> +<%= render "filters/settings/time_window", user_filtering: user_filtering, name: :closure, label: "Closed" %> diff --git a/app/views/filters/settings/_manage.html.erb b/app/views/filters/settings/_manage.html.erb new file mode 100644 index 000000000..0e1d5f096 --- /dev/null +++ b/app/views/filters/settings/_manage.html.erb @@ -0,0 +1,21 @@ +<% filter = user_filtering.filter %> + +<% if user_filtering.any? %> + <% if filter.persisted? %> + <%= button_to filter_path(filter), method: :delete, class: "btn txt-x-small btn--reversed", form_class: "inline" do %> + <%= icon_tag "bookmark-outline" %> + Remove saved filter + <% end %> + <% else %> + <% filter_params = filter.as_params.transform_values { |v| v.respond_to?(:to_str) ? v.to_str : v } %> + <%= button_to filters_path, method: :post, params: filter_params, class: "btn txt-x-small", form_class: "inline" do %> + <%= icon_tag "bookmark-outline" %> + Save filter + <% end %> + <% end %> + + <%= link_to cards_path(filter.as_params.except(:assignee_ids, :assignment_status, :card_ids, :creator_ids, :closer_ids, :stage_ids, :tag_ids, :terms, :indexed_by, :sorted_by, :creation, :closure)), class: "btn btn--remove txt-x-small" do %> + <%= icon_tag "close" %> + Clear all + <% end %> +<% end %> diff --git a/app/views/filters/settings/_toggle.html.erb b/app/views/filters/settings/_toggle.html.erb index d46b6fa96..fb1063c57 100644 --- a/app/views/filters/settings/_toggle.html.erb +++ b/app/views/filters/settings/_toggle.html.erb @@ -1,12 +1,12 @@ <% filter = user_filtering.filter %> <% if user_filtering.expanded? %> - <%= link_to cards_path(filter.as_params), class: "btn txt-x-small btn--reversed", aria: { selected: true } do %> + <%= link_to my_filter_expansion_path(**filter.as_params, expand_all: false), class: "btn txt-x-small btn--reversed", aria: { selected: true }, data: { turbo_method: "post" } do %> <%= icon_tag "filter" %> Close filter options <% end %> <% else %> - <%= link_to cards_path(filter.as_params.merge(expand_all: true)), class: "btn txt-x-small" do %> + <%= link_to my_filter_expansion_path(**filter.as_params, expand_all: true), class: "btn txt-x-small", data: { turbo_method: "post" } do %> <%= icon_tag "filter" %> Expand filter options <% end %> diff --git a/config/routes.rb b/config/routes.rb index 505bcf240..7955c5137 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -125,6 +125,7 @@ Rails.application.routes.draw do resources :pins resource :timezone resource :menu + resource :filter_expansion, only: %i[ create destroy ] end namespace :prompts do