From f6f77f34c8bf237267ee3601187e61a5f176f50e Mon Sep 17 00:00:00 2001 From: Nickolay Loshkarev Date: Thu, 18 Apr 2024 16:32:19 +0400 Subject: [PATCH] Add Lord Lieutenancy assigned filter to Lieutenancy office users page --- app/search/lieutenant_search.rb | 34 +++++++++++++- app/views/admin/lieutenants/index.html.slim | 52 +++++++++++++++++++++ 2 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 app/views/admin/lieutenants/index.html.slim diff --git a/app/search/lieutenant_search.rb b/app/search/lieutenant_search.rb index 4f5bdfc9e..4fa427977 100644 --- a/app/search/lieutenant_search.rb +++ b/app/search/lieutenant_search.rb @@ -1,11 +1,43 @@ class LieutenantSearch < Search DEFAULT_SEARCH = { - sort: "full_name" + sort: "full_name", + search_filter: {} } include FullNameSort + def filter_by_assigned_ceremonial_county(scoped_results, value) + value = value.map do |v| + v == "not_assigned" ? nil : v + end + scoped_results.where(ceremonial_county_id: value) + end + def sort_by_ceremonial_county_name(scoped_results, desc = false) scoped_results.joins(:ceremonial_county).order("ceremonial_counties.name #{sort_order(desc)}") end + + class << self + def ceremonial_county_options + collection_mapping(county_options) + end + + private + + def collection_mapping(options) + options.map do |k, v| + [v[:label], k] + end + end + + def county_options + options = Hash[not_assigned: { label: "Not assigned" }] + + CeremonialCounty.ordered.collect do |county| + options[county.id] = { label: county.name } + end + + options + end + end end diff --git a/app/views/admin/lieutenants/index.html.slim b/app/views/admin/lieutenants/index.html.slim new file mode 100644 index 000000000..43f42f5f4 --- /dev/null +++ b/app/views/admin/lieutenants/index.html.slim @@ -0,0 +1,52 @@ +.dashboard + h1.govuk-heading-xl + | Users + = simple_form_for @search, url: "#", method: :get, as: :search, html: { class: "search-form" } do |f| + = render 'admin/users/navigation' do + .govuk-tabs__panel + .govuk-grid-row + p.govuk-body-l.govuk-grid-column-two-thirds class="govuk-!-font-weight-bold" + | Search Lieutenancy office users + .govuk-grid-row + .govuk-grid-column-one-third + .form-group.search-input + = f.input :query, label: "Name", input_html: { type: "search" } + .govuk-grid-column-two-third + .form-group.search-input + = f.simple_fields_for [:filters, @search.filters] do |g| + = render "shared/form_answers/filters/assigned_lieutenancy_filter", g: g, options: LieutenantSearch.ceremonial_county_options + .govuk-button-group + = f.submit "Search", class: 'govuk-button' + = link_to "Clear search", + [:admin, controller_name.to_sym], + class: "govuk-button govuk-button--secondary", + role: "button", + aria: { label: "Clear search" } + .govuk-grid-row + = render "shared/users/search_count" + .govuk-button-group + - if controller_name == "lieutenants" + - if action_name == "deleted" + = link_to "Show active users", + admin_lieutenants_path, + class: "new-user govuk-button pull-right", + role: "button", + aria: { label: "Show active users" } + + - else + = link_to "Show deleted users", + deleted_admin_lieutenants_path, + class: "new-user govuk-button pull-right", + role: "button", + aria: { label: "Show deleted users" } + + = link_to public_send("new_admin_#{controller_name.singularize}_path", search: params[:search], page: params[:page]), class: 'new-user govuk-button pull-right', role: 'button' do + = t("admin.users.new_button.#{controller_name}") + .clear + + = render 'list', resources: @resources, f: f + + .govuk-grid-row + .col-xs-12.text-right + = paginate @resources + .clear