From be9a75e504edd9a754157a4ddba590e8a5d14149 Mon Sep 17 00:00:00 2001 From: Mitsuhiro Shibuya Date: Sat, 3 Sep 2022 19:13:33 +0900 Subject: [PATCH] Add ability to limit filter operators Useful for tables with a large amount of records. --- app/helpers/rails_admin/main_helper.rb | 20 +- app/views/rails_admin/main/index.html.erb | 17 +- config/locales/rails_admin.en.yml | 4 +- lib/rails_admin/config/fields/base.rb | 26 +- .../fields/types/belongs_to_association.rb | 4 + .../config/fields/types/boolean.rb | 4 + .../config/fields/types/datetime.rb | 10 + lib/rails_admin/config/fields/types/enum.rb | 15 +- .../fields/types/has_one_association.rb | 4 + .../config/fields/types/numeric.rb | 4 + .../config/fields/types/string_like.rb | 4 + lib/rails_admin/config/fields/types/time.rb | 4 + spec/integration/actions/index_spec.rb | 4 +- spec/integration/widgets/filter_box_spec.rb | 24 +- src/rails_admin/filter-box.js | 373 ++++++++---------- 15 files changed, 263 insertions(+), 254 deletions(-) diff --git a/app/helpers/rails_admin/main_helper.rb b/app/helpers/rails_admin/main_helper.rb index 2e1bd91c7a..d80f4e4b09 100644 --- a/app/helpers/rails_admin/main_helper.rb +++ b/app/helpers/rails_admin/main_helper.rb @@ -42,7 +42,6 @@ def ordered_filters def ordered_filter_options if ordered_filters @ordered_filter_options ||= ordered_filters.map do |duplet| - options = {index: duplet[0]} filter_for_field = duplet[1] filter_name = filter_for_field.keys.first filter_hash = filter_for_field.values.first @@ -50,20 +49,11 @@ def ordered_filter_options raise "#{filter_name} is not currently filterable; filterable fields are #{filterable_fields.map(&:name).join(', ')}" end - case field.type - when :enum - options[:select_options] = options_for_select(field.with(object: @abstract_model.model.new).enum, filter_hash['v']) - when :date, :datetime, :time - options[:datetimepicker_options] = field.datepicker_options - end - options[:label] = field.label - options[:name] = field.name - options[:type] = field.type - options[:value] = filter_hash['v'] - options[:label] = field.label - options[:operator] = filter_hash['o'] || field.default_filter_operator - options[:required] = field.required - options + field.filter_options.merge( + index: duplet[0], + operator: filter_hash['o'] || field.default_filter_operator, + value: filter_hash['v'], + ) end end end diff --git a/app/views/rails_admin/main/index.html.erb b/app/views/rails_admin/main/index.html.erb index c5bee0dfe5..dd202cbd5a 100644 --- a/app/views/rails_admin/main/index.html.erb +++ b/app/views/rails_admin/main/index.html.erb @@ -26,26 +26,11 @@