diff --git a/app/assets/images/collection.svg b/app/assets/images/collection.svg index 5d6249839..cdbe7d4da 100644 --- a/app/assets/images/collection.svg +++ b/app/assets/images/collection.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/assets/stylesheets/events.css b/app/assets/stylesheets/events.css index 28d6b7c80..42d129125 100644 --- a/app/assets/stylesheets/events.css +++ b/app/assets/stylesheets/events.css @@ -97,6 +97,17 @@ position: absolute; } + .events__filter-select { + font-weight: inherit; + text-decoration: underline; + + @media (any-hover: hover) { + &:hover { + --btn-color: var(--color-link); + } + } + } + .events__day { position: relative; diff --git a/app/helpers/pagination_helper.rb b/app/helpers/pagination_helper.rb index ee665e98a..6c67400c7 100644 --- a/app/helpers/pagination_helper.rb +++ b/app/helpers/pagination_helper.rb @@ -54,8 +54,8 @@ module PaginationHelper def day_timeline_pagination_link(day_timeline, filter) if day_timeline.next_day - link_to "Load more...", events_days_path(day: day_timeline.next_day.strftime("%Y-%m-%d"), **filter.as_params), - data: { frame: day_timeline_pagination_frame_id_for(day_timeline.next_day), pagination_target: "paginationLink" } + link_to "Load more…", events_days_path(day: day_timeline.next_day.strftime("%Y-%m-%d"), **filter.as_params), + class: "txt-reversed", data: { frame: day_timeline_pagination_frame_id_for(day_timeline.next_day), pagination_target: "paginationLink" } end end diff --git a/app/javascript/controllers/filter_settings_controller.js b/app/javascript/controllers/filter_settings_controller.js index 7a207da80..6be549e5c 100644 --- a/app/javascript/controllers/filter_settings_controller.js +++ b/app/javascript/controllers/filter_settings_controller.js @@ -5,7 +5,7 @@ import { post } from "@rails/request.js" export default class extends Controller { static classes = ["filtersSet"] static targets = ["field", "form"] - static values = { refreshUrl: String, noFilteringUrl: String } + static values = { refreshUrl: String, noFilteringUrl: String, cardsUrl: String } initialize() { this.debouncedToggle = debounce(this.#toggle.bind(this), 50) @@ -31,6 +31,12 @@ export default class extends Controller { this.debouncedToggle() } + submitToGenericCardsView() { + this.formTarget.action = this.cardsUrlValue + this.formTarget.dataset.turboFrame = "top" + this.formTarget.requestSubmit() + } + #toggle() { this.element.classList.toggle(this.filtersSetClass, this.#hasFiltersSet) } diff --git a/app/javascript/controllers/multi_selection_combobox_controller.js b/app/javascript/controllers/multi_selection_combobox_controller.js index 70a853b2b..80d7f0826 100644 --- a/app/javascript/controllers/multi_selection_combobox_controller.js +++ b/app/javascript/controllers/multi_selection_combobox_controller.js @@ -82,15 +82,14 @@ export default class extends Controller { #clearHiddenFields() { this.element.querySelectorAll('input[type="hidden"]').forEach(field => { - if (field !== this.hiddenField) { - field.remove() - } + field.remove() }) } #addHiddenFields() { this.#selectedValues().forEach(value => { - const [field] = this.hiddenFieldTemplateTarget.content.cloneNode(true).children + const [ field ] = this.hiddenFieldTemplateTarget.content.cloneNode(true).children + field.removeAttribute("id") field.value = value this.element.appendChild(field) }) diff --git a/app/models/card.rb b/app/models/card.rb index 9175d6b96..c837c781a 100644 --- a/app/models/card.rb +++ b/app/models/card.rb @@ -22,7 +22,6 @@ class Card < ApplicationRecord case index when "stalled" then stalled when "postponing_soon" then postponing_soon - when "falling_back_soon" then falling_back_soon when "closed" then closed.recently_closed_first when "golden" then golden when "draft" then drafted diff --git a/app/models/filter/fields.rb b/app/models/filter/fields.rb index fc11752fc..027ae8ac6 100644 --- a/app/models/filter/fields.rb +++ b/app/models/filter/fields.rb @@ -1,7 +1,7 @@ module Filter::Fields extend ActiveSupport::Concern - INDEXES = %w[ all stalled postponing_soon falling_back_soon golden draft ] + INDEXES = %w[ all stalled postponing_soon golden draft ] SORTED_BY = %w[ newest oldest latest ] delegate :default_value?, to: :class diff --git a/app/models/user/filtering.rb b/app/models/user/filtering.rb index 9f321bbed..6e00ecbc1 100644 --- a/app/models/user/filtering.rb +++ b/app/models/user/filtering.rb @@ -67,6 +67,10 @@ class User::Filtering filter.closers.any? end + def show_collections? + filter.collections.any? + end + def enable_collection_filtering(&block) @collection_filtering_route_resolver = block end diff --git a/app/views/events/event/_layout.html.erb b/app/views/events/event/_layout.html.erb index 63f8e696d..69a1560e6 100644 --- a/app/views/events/event/_layout.html.erb +++ b/app/views/events/event/_layout.html.erb @@ -1,9 +1,11 @@ <%= link_to event.notifiable_target, class: "event event--#{ event.action } #{ "golden-effect" if event.card.golden? } center-block flex flex-column full-width align-start justify-start position-relative", - style: "--card-color: #{ card.closed? ? "var(--color-card-complete)" : card.color };", target: "_top", - data: { related_element_target: "related", - related_element_group_value: card.id, - action: "mouseover->related-element#highlight mouseout->related-element#unhighlight" } do %> + style: "--card-color: #{ card.closed? ? "var(--color-card-complete)" : card.color };", + target: "_top", + data: { + related_element_target: "related", + related_element_group_value: card.id, + action: "mouseover->related-element#highlight mouseout->related-element#unhighlight" } do %>

<%= card.id %> diff --git a/app/views/events/index.html.erb b/app/views/events/index.html.erb index dad76f7f2..8acc92214 100644 --- a/app/views/events/index.html.erb +++ b/app/views/events/index.html.erb @@ -7,10 +7,9 @@ <%= render "filters/menu", user_filtering: @user_filtering %> <%= render "events/index/add_card_button", user_filtering: @user_filtering %> -

-
- Activity in <%= @user_filtering.selected_collections_label %> -
+

+ Activity in + <%= render "events/index/filter", user_filtering: @user_filtering %>

<% end %> diff --git a/app/views/events/index/_filter.html.erb b/app/views/events/index/_filter.html.erb new file mode 100644 index 000000000..f48ee4a6c --- /dev/null +++ b/app/views/events/index/_filter.html.erb @@ -0,0 +1,43 @@ +<% filter = user_filtering.filter %> + +<%= form_with url: events_path, + method: :get, class: "flex-inline position-relative", + data: { controller: "form", turbo_frame: "cards_container", turbo_action: "advance" } do |form| %> + <%= tag.div class: "flex-inline position-relative quick-filter", + data: { + controller: "dialog multi-selection-combobox", + action: "keydown.esc->dialog#close click@document->dialog#closeOnClickOutside", + filter_show: user_filtering.show_collections?, + multi_selection_combobox_no_selection_label_value: user_filtering.selected_collections_label } do %> + + + + + <%= filter_dialog "Collection…" do %> + Collection… + + <% if user_filtering.collections.many? %> + <%= text_field_tag nil, nil, placeholder: "Filter…", class: "input input--transparent txt-small font-weight-normal", autofocus: true, + type: "search", autocorrect: "off", autocomplete: "off", data: { "1p-ignore": "true", filter_target: "input", action: "input->filter#filter" } %> + <% end %> + + + <% end %> + <% end %> +<% end %> diff --git a/app/views/filters/_settings.html.erb b/app/views/filters/_settings.html.erb index 5642197fb..b8f907c45 100644 --- a/app/views/filters/_settings.html.erb +++ b/app/views/filters/_settings.html.erb @@ -6,8 +6,9 @@ toggle_class_toggle_class: "filters--expanded", filter_settings_filters_set_class: "filters--has-filters-set", filter_settings_no_filtering_url_value: no_filtering_url, - turbo_permanent: true, - filter_settings_refresh_url_value: settings_refresh_path } do %> + filter_settings_refresh_url_value: settings_refresh_path, + filter_settings_cards_url_value: cards_path, + turbo_permanent: true } do %> <%= form_with url: filter_url, method: :get, class: "", data: { controller: "form", turbo_frame: "cards_container", @@ -15,9 +16,6 @@ action: "turbo:submit-end->filter-settings#resetIfNoFiltering", turbo_action: "advance" } 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 %> - <% end %> <%= yield form if block_given? %> diff --git a/app/views/filters/menu/_shortcut_notice.html.erb b/app/views/filters/menu/_shortcut_notice.html.erb index b594b19a0..70f5f5fb7 100644 --- a/app/views/filters/menu/_shortcut_notice.html.erb +++ b/app/views/filters/menu/_shortcut_notice.html.erb @@ -1,5 +1,5 @@ <% if platform.desktop? %> <% end %> diff --git a/app/views/filters/menu/collections/_all_option.html.erb b/app/views/filters/menu/collections/_all_option.html.erb index 4c933510f..8ee95a795 100644 --- a/app/views/filters/menu/collections/_all_option.html.erb +++ b/app/views/filters/menu/collections/_all_option.html.erb @@ -2,15 +2,8 @@ <% if Current.user.collections.many? %> diff --git a/app/views/filters/menu/collections/_collection.html.erb b/app/views/filters/menu/collections/_collection.html.erb index 48a8ac223..b4c1e1cc3 100644 --- a/app/views/filters/menu/collections/_collection.html.erb +++ b/app/views/filters/menu/collections/_collection.html.erb @@ -1,17 +1,5 @@ diff --git a/app/views/filters/settings/_collections.html.erb b/app/views/filters/settings/_collections.html.erb new file mode 100644 index 000000000..c1bf2d9c2 --- /dev/null +++ b/app/views/filters/settings/_collections.html.erb @@ -0,0 +1,40 @@ +<% filter = user_filtering.filter %> + +<%= tag.div class: "quick-filter position-relative", + data: { + controller: "dialog multi-selection-combobox", + action: "keydown.esc->dialog#close click@document->dialog#closeOnClickOutside", + filter_show: user_filtering.show_collections?, + multi_selection_combobox_no_selection_label_value: "Collection…", + multi_selection_combobox_label_prefix_value: "" } do %> + + + + + <%= filter_dialog "Collection…" do %> + Collection… + + <% if user_filtering.collections.many? %> + <%= text_field_tag nil, nil, placeholder: "Filter…", class: "input input--transparent txt-small", autofocus: true, + type: "search", autocorrect: "off", autocomplete: "off", data: { "1p-ignore": "true", filter_target: "input", action: "input->filter#filter" } %> + <% end %> + + + <% end %> +<% end %> diff --git a/app/views/filters/settings/_controls.html.erb b/app/views/filters/settings/_controls.html.erb index 60f3338e3..65fd101ad 100644 --- a/app/views/filters/settings/_controls.html.erb +++ b/app/views/filters/settings/_controls.html.erb @@ -1,3 +1,4 @@ +<%= render "filters/settings/collections", user_filtering: user_filtering %> <%= 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 %> diff --git a/app/views/users/_activity_timeline.html.erb b/app/views/users/_activity_timeline.html.erb index 1c3b84d56..cbe5ce302 100644 --- a/app/views/users/_activity_timeline.html.erb +++ b/app/views/users/_activity_timeline.html.erb @@ -3,8 +3,8 @@ <%= render "events/day", day_timeline: day_timeline %> <% if day_timeline.next_day %> - <%= link_to "Load more...", user_path(user, day: day_timeline.next_day.strftime("%Y-%m-%d"), **filter.as_params), - data: { frame: day_timeline_pagination_frame_id_for(day_timeline.next_day), pagination_target: "paginationLink" } %> + <%= link_to "Load more…", user_path(user, day: day_timeline.next_day.strftime("%Y-%m-%d"), **filter.as_params), + class: "txt-reversed", data: { frame: day_timeline_pagination_frame_id_for(day_timeline.next_day), pagination_target: "paginationLink" } %> <% end %> <% end %>