diff --git a/app/javascript/controllers/form_controller.js b/app/javascript/controllers/form_controller.js
index 64fc6fad6..eaf246fea 100644
--- a/app/javascript/controllers/form_controller.js
+++ b/app/javascript/controllers/form_controller.js
@@ -1,12 +1,30 @@
import { Controller } from "@hotwired/stimulus"
+import { debounce } from "helpers/timing_helpers";
export default class extends Controller {
static targets = [ "cancel" ]
+ static values = {
+ debounceTimeout: { type: Number, default: 300 }
+ }
+
+ initialize() {
+ this.debouncedSubmit = debounce(this.debouncedSubmit.bind(this), this.debounceTimeoutValue)
+ }
+
submit() {
this.element.requestSubmit()
}
+ debouncedSubmit(event) {
+ this.submit(event)
+ }
+
+ submitToTopTarget(event) {
+ this.element.setAttribute("data-turbo-frame", "_top")
+ this.submit()
+ }
+
cancel() {
this.cancelTarget?.click()
}
diff --git a/app/models/filter.rb b/app/models/filter.rb
index 4748e54a4..6bef679e5 100644
--- a/app/models/filter.rb
+++ b/app/models/filter.rb
@@ -34,7 +34,7 @@ class Filter < ApplicationRecord
result = result.closed_at_window(closure_window) if closure_window
result = result.closed_by(closers) if closers.present?
result = terms.reduce(result) do |result, term|
- result.similar_to(term)
+ result.mentioning(term)
end
result
diff --git a/app/models/filter/fields.rb b/app/models/filter/fields.rb
index a261a23f4..af0966d2a 100644
--- a/app/models/filter/fields.rb
+++ b/app/models/filter/fields.rb
@@ -47,6 +47,10 @@ module Filter::Fields
def terms
Array(super)
end
+
+ def terms=(value)
+ super(Array(value).filter(&:present?))
+ end
end
def with(**fields)
diff --git a/app/views/cards/index/_columns.html.erb b/app/views/cards/index/_columns.html.erb
index a008d1513..9104145fc 100644
--- a/app/views/cards/index/_columns.html.erb
+++ b/app/views/cards/index/_columns.html.erb
@@ -1,11 +1,13 @@
<% cache @cache_key do %>
-
- <% unless user_filtering.only_closed? %>
- <%= render "cards/index/engagement/on_deck", user_filtering: user_filtering, **on_deck.to_h %>
- <%= render "cards/index/engagement/considering", user_filtering: user_filtering, **considering.to_h %>
- <%= render "cards/index/engagement/doing", user_filtering: user_filtering, **doing.to_h %>
- <% end %>
-
+ <%= turbo_frame_tag :card_columns do %>
+
+ <% unless user_filtering.only_closed? %>
+ <%= render "cards/index/engagement/on_deck", user_filtering: user_filtering, **on_deck.to_h %>
+ <%= render "cards/index/engagement/considering", user_filtering: user_filtering, **considering.to_h %>
+ <%= render "cards/index/engagement/doing", user_filtering: user_filtering, **doing.to_h %>
+ <% end %>
+
- <%= render "cards/index/engagement/closed", user_filtering: user_filtering, **closed.to_h %>
+ <%= render "cards/index/engagement/closed", user_filtering: user_filtering, **closed.to_h %>
+ <% end %>
<% end %>
diff --git a/app/views/filters/settings/_terms.html.erb b/app/views/filters/settings/_terms.html.erb
index 9693ce23f..d9f6c448c 100644
--- a/app/views/filters/settings/_terms.html.erb
+++ b/app/views/filters/settings/_terms.html.erb
@@ -1,5 +1,5 @@
<% filter = user_filtering.filter %>
-<%= form_with url: cards_path, method: :get, class: "", data: { controller: "form" } do |form| %>
+<%= form_with url: cards_path, method: :get, class: "", data: { controller: "form", turbo_frame: "card_columns", action: "input->form#debouncedSubmit" } do |form| %>
<% filter.as_params.except(:terms).each do |key, value| %>
<%= filter_hidden_field_tag key, value %>
<% end %>
@@ -12,8 +12,8 @@
<%= hidden_field_tag :expand_all, user_filtering.expanded? %>
<% end %>
- <%= form.text_field "terms[]", placeholder: "Filter these cards…", class: "input txt-x-small filter__terms",
- autofocus: false, autocomplete: :off, autocorrect: "off", data: { "1p-ignore": "true" } %>
+ <%= form.text_field "terms[]", placeholder: "Filter these cards…", class: "input txt-x-small filter__terms",
+ autofocus: false, autocomplete: :off, autocorrect: "off", data: { "1p-ignore": "true", action: "keydown.enter->form#submitToTopTarget" } %>
<% end %>
<% if filter.terms.present? %>