diff --git a/app/frontend/controllers/filter_controller.js b/app/frontend/controllers/filter_controller.js new file mode 100644 index 000000000..ec55b72b5 --- /dev/null +++ b/app/frontend/controllers/filter_controller.js @@ -0,0 +1,16 @@ +import { Controller } from "@hotwired/stimulus"; + +export default class extends Controller { + toggleFilter() { + let filter_panel = document.getElementById("filter-panel"); + let toggle_filter_button = document.getElementById("toggle-filter-button"); + + if (filter_panel.style.display === "none" || !filter_panel.style.display) { + filter_panel.style.display = "block"; + toggle_filter_button.innerText = "Hide filters"; + } else { + filter_panel.style.display = "none"; + toggle_filter_button.innerText = "Show filters"; + } + } +} diff --git a/app/frontend/controllers/index.js b/app/frontend/controllers/index.js index ee3be6037..2227bea58 100644 --- a/app/frontend/controllers/index.js +++ b/app/frontend/controllers/index.js @@ -14,3 +14,6 @@ application.register("govukfrontend", GovukfrontendController) import NumericQuestionController from "./numeric_question_controller.js" application.register("numeric-question", NumericQuestionController) + +import FilterController from "./filter_controller.js" +application.register("filter", FilterController) diff --git a/app/frontend/styles/_filter.scss b/app/frontend/styles/_filter.scss index 53e5c5821..46783534f 100644 --- a/app/frontend/styles/_filter.scss +++ b/app/frontend/styles/_filter.scss @@ -1,109 +1,123 @@ .app-filter { - background-color: govuk-colour("light-grey"); - margin-bottom: govuk-spacing(2); + background-color: govuk-colour("light-grey"); + margin-bottom: govuk-spacing(2); +} + +.app-filter__header { + background-color: govuk-colour("light-grey"); + display: flex; + justify-content: space-between; + padding: govuk-spacing(2) govuk-spacing(3); + position: sticky; + top: 0; + z-index: 10; + + @include govuk-media-query($from: desktop) { + position: static; } - - .app-filter__header { - background-color: govuk-colour("light-grey"); - display: flex; - justify-content: space-between; - padding: govuk-spacing(2) govuk-spacing(3); - position: sticky; - top: 0; - z-index: 10; - - @include govuk-media-query($from: desktop) { - position: static; - } - - [class^=govuk-heading-] { - margin-bottom: 0; - } + + [class^="govuk-heading-"] { + margin-bottom: 0; } - - .app-filter__content { - padding: govuk-spacing(1) govuk-spacing(3) govuk-spacing(4); +} + +.app-filter__content { + padding: govuk-spacing(1) govuk-spacing(3) govuk-spacing(4); +} + +.app-filter__close { + @include govuk-font(19); + + -webkit-appearance: none; + background-color: transparent; + border: none; + border-radius: 0; + color: $govuk-text-colour; + cursor: pointer; + margin: #{govuk-spacing(1) * -1}; + padding: govuk-spacing(1); + + &:focus { + background-color: $govuk-focus-colour; + color: $govuk-focus-text-colour; + box-shadow: 0 -2px $govuk-focus-colour, 0 4px $govuk-focus-text-colour; + outline: none; } - - .app-filter__close { - @include govuk-font(19); - - -webkit-appearance: none; - background-color: transparent; - border: none; - border-radius: 0; - color: $govuk-text-colour; - cursor: pointer; - margin: #{govuk-spacing(1) * -1}; - padding: govuk-spacing(1); - - &:focus { - background-color: $govuk-focus-colour; - color: $govuk-focus-text-colour; - box-shadow: 0 -2px $govuk-focus-colour, 0 4px $govuk-focus-text-colour; - outline: none; - } - - // Fix unwanted button padding in Firefox - &::-moz-focus-inner { - padding: 0; - border: 0; - } - - &::before { - background-image: url("../assets/images/icon-cross.svg"); - content: ""; - display: inline-block; - height: 14px; - margin-right: govuk-spacing(1); - position: relative; - top: -2px; // Alignment tweak - vertical-align: middle; - width: 14px; - } - @include govuk-media-query(desktop) { - display: none; - } + // Fix unwanted button padding in Firefox + &::-moz-focus-inner { + padding: 0; + border: 0; } - .app-filter-layout { - @include govuk-clearfix; + &::before { + background-image: url("../assets/images/icon-cross.svg"); + content: ""; + display: inline-block; + height: 14px; + margin-right: govuk-spacing(1); + position: relative; + top: -2px; // Alignment tweak + vertical-align: middle; + width: 14px; } - - .app-filter-layout__filter { - @include govuk-media-query(desktop) { - float: left; - min-width: govuk-grid-width("one-quarter"); - } + + @include govuk-media-query(desktop) { + display: none; } - - .js-enabled .app-filter-layout__filter { - outline: 0 none; - - @include govuk-media-query($until: desktop) { - background-color: govuk-colour("light-grey"); - bottom: govuk-spacing(1); - border: 1px solid govuk-colour("mid-grey"); - max-width: 310px; - min-width: 260px; - width: 100%; - overflow-y: scroll; - position: fixed; - right: govuk-spacing(1); - top: govuk-spacing(1); - z-index: 100; - - &:focus { - outline: $govuk-focus-width solid $govuk-focus-colour; - } - } +} + +.app-filter-layout { + @include govuk-clearfix; +} + +.app-filter-toggle__button { + min-width: 128px; + @include govuk-media-query(desktop) { + display: none !important; + } +} + +.app-filter-layout__filter { + @include govuk-media-query(desktop) { + float: left; + min-width: govuk-grid-width("one-quarter"); + } + display: none; + + @include govuk-media-query(desktop) { + display: block; } - - .app-filter-layout__content { - @include govuk-media-query(desktop) { - float: right; - max-width: calc(#{govuk-grid-width("three-quarters")} - #{govuk-spacing(6)}); - width: 100%; +} + +.js-enabled .app-filter-layout__filter { + outline: 0 none; + + @include govuk-media-query($until: desktop) { + background-color: govuk-colour("light-grey"); + bottom: govuk-spacing(1); + border: 1px solid govuk-colour("mid-grey"); + max-width: 310px; + min-width: 260px; + width: 100%; + overflow-y: scroll; + position: fixed; + right: govuk-spacing(1); + top: govuk-spacing(1); + z-index: 100; + + &:focus { + outline: $govuk-focus-width solid $govuk-focus-colour; } - } \ No newline at end of file + } +} + +.app-filter-layout__content { + @include govuk-media-query(desktop) { + float: right; + max-width: calc( + #{govuk-grid-width("three-quarters")} - #{govuk-spacing(6)} + ); + width: 100%; + } +} diff --git a/app/views/case_logs/_log_filters.erb b/app/views/case_logs/_log_filters.erb index bb02c44c5..a564107c0 100644 --- a/app/views/case_logs/_log_filters.erb +++ b/app/views/case_logs/_log_filters.erb @@ -1,30 +1,32 @@ -
-
-
-
-
-

Filters

- -
-
-
- <%= form_with url: "/logs/filter", html: { method: :post }, builder: GOVUKDesignSystemFormBuilder::FormBuilder do |f| %> - <%= f.govuk_check_boxes_fieldset :status, legend: { text: "Status", size: "s"} do %> -
- <% statuses = {in_progress: "In progress", submitted: "Completed", not_started: "Not started"} %> - <% statuses.map do |key, option| %> - <%= f.govuk_check_box "status", "#{key}", - label: { text: option }, - checked: filter_selected?(key), - size: "s" %> - <% end %> +
+
+
+

Filters

+ +
+
+
+ <%= form_with url: "/logs/filter", html: { method: :post }, builder: GOVUKDesignSystemFormBuilder::FormBuilder do |f| %> + <%= f.govuk_check_boxes_fieldset :status, legend: { text: "Status", size: "s"} do %> +
+ <% statuses = {in_progress: "In progress", submitted: "Completed", not_started: "Not started"} %> + <% statuses.map do |key, option| %> + <%= f.govuk_check_box "status", "#{key}", + label: { text: option }, + checked: filter_selected?(key), + size: "s" %> + <% end %> +
+ <% end %> + <%= f.govuk_submit "Apply filters", class: "govuk-!-margin-top-4" %> + <% end %>
- <% end %> - <%= f.govuk_submit "Apply filters", class: "govuk-!-margin-top-4" %> - <% end %> -
+
-
-
-
\ No newline at end of file diff --git a/app/views/case_logs/index.html.erb b/app/views/case_logs/index.html.erb index 5f1040274..8060f3c99 100644 --- a/app/views/case_logs/index.html.erb +++ b/app/views/case_logs/index.html.erb @@ -3,17 +3,25 @@

<%= content_for(:title) %>

- -
- <%= govuk_button_link_to 'Hide filters', "", secondary: true %> - <%= govuk_button_to "Create a new lettings log", case_logs_path %> - <%#= govuk_link_to "Upload logs", bulk_upload_case_logs_path %> -
- -
+
+
+ + <%= govuk_button_to "Create a new lettings log", case_logs_path %> + <%#= govuk_link_to "Upload logs", bulk_upload_case_logs_path %> +
+ <%= render partial: "log_filters"%> <% if @case_logs.present? %> -
+
<%= render partial: "log_list", locals: { case_logs: @case_logs, title: "Logs", pagy: @pagy } %> <%== render partial: 'pagy/nav', locals: { pagy: @pagy, item_name: "logs" } %>