From 78abead8b4eedda047600a52295b435fad526e32 Mon Sep 17 00:00:00 2001 From: Klaus Zanders Date: Fri, 29 May 2026 13:38:58 +0200 Subject: [PATCH 1/3] Fix interaction between Filters::FilterForm and the WorkPackage Query --- app/forms/filters/inputs/base_filter_form.rb | 9 +-- .../filter/filter_for_wp_mixin.rb | 21 ++++++ app/models/query.rb | 11 +++ config/locales/en.yml | 17 ++--- .../dynamic/filter/filters-form.controller.ts | 31 +++++--- lookbook/docs/patterns/11-filter-forms.md.erb | 7 +- .../filter/filter_form_preview.rb | 14 ++++ .../for_a_work_package_query.html.erb | 17 +++++ modules/storages/config/locales/en.yml | 71 ++++++++++--------- 9 files changed, 139 insertions(+), 59 deletions(-) create mode 100644 lookbook/previews/open_project/filter/filter_form_preview/for_a_work_package_query.html.erb diff --git a/app/forms/filters/inputs/base_filter_form.rb b/app/forms/filters/inputs/base_filter_form.rb index b10c9e952fbf..91ec5bf89209 100644 --- a/app/forms/filters/inputs/base_filter_form.rb +++ b/app/forms/filters/inputs/base_filter_form.rb @@ -106,11 +106,12 @@ def add_operator(group) "filter-name": @filter.name } ) do |select| - @filter.available_operators.each do |op| + @filter.available_operators.each do |operator| select.option( - label: op.human_name, - value: op.symbol, - selected: op.symbol == selected_operator + label: operator.human_name, + value: operator.symbol, + selected: operator.symbol == selected_operator, + **(operator.requires_value? ? {} : { "data-no-value": true }) ) end end diff --git a/app/models/queries/work_packages/filter/filter_for_wp_mixin.rb b/app/models/queries/work_packages/filter/filter_for_wp_mixin.rb index 9ee968a8b8a1..d2cef34cb119 100644 --- a/app/models/queries/work_packages/filter/filter_for_wp_mixin.rb +++ b/app/models/queries/work_packages/filter/filter_for_wp_mixin.rb @@ -37,6 +37,27 @@ def allowed_values raise NotImplementedError, "There would be too many candidates" end + # Tell `Filters::FilterForm`'s dispatch to render these filters with a + # server-side autocompleter (the candidate set is too large for an inline + # `