Skip to content

Commit 3d8cb28

Browse files
committed
Merge pull request #3318 from mitchkettzend/default_filter_operator
Enhancement: Default filter operator for fields
2 parents 54fb4f2 + cd955e5 commit 3d8cb28

5 files changed

Lines changed: 30 additions & 3 deletions

File tree

app/helpers/rails_admin/main_helper.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def ordered_filter_options
7676
options[:type] = field.type
7777
options[:value] = filter_hash['v']
7878
options[:label] = field.label
79-
options[:operator] = filter_hash['o']
79+
options[:operator] = filter_hash['o'] || field.default_filter_operator
8080
options[:required] = field.required
8181
options
8282
end if ordered_filters

app/views/rails_admin/main/index.html.haml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
- else
3636
- ''
3737
%li
38-
%a{href: '#', :"data-field-label" => field.label, :"data-field-name" => field.name, :"data-field-options" => field_options.html_safe, :"data-field-required" => field.required.to_s, :"data-field-type" => field.type, :"data-field-value" => "", :"data-field-datetimepicker-format" => (field.try(:parser) && field.parser.to_momentjs)}= capitalize_first_letter(field.label)
38+
%a{href: '#', :"data-field-label" => field.label, :"data-field-name" => field.name, :"data-field-operator" => field.default_filter_operator, :"data-field-options" => field_options.html_safe, :"data-field-required" => field.required.to_s, :"data-field-type" => field.type, :"data-field-value" => "", :"data-field-datetimepicker-format" => (field.try(:parser) && field.parser.to_momentjs)}= capitalize_first_letter(field.label)
3939
4040
%style
4141
- properties.select{ |p| p.column_width.present? }.each do |property|

lib/rails_admin/config/fields/base.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,10 @@ def virtual?
227227
bindings[:view].render partial: "rails_admin/main/#{partial}", locals: {field: self, form: bindings[:form]}
228228
end
229229

230+
register_instance_option :default_filter_operator do
231+
nil
232+
end
233+
230234
def editable?
231235
!(@properties && @properties.read_only?)
232236
end

spec/integration/actions/index_spec.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,12 @@
304304
it 'displays base filters when no filters are present in the params' do
305305
RailsAdmin.config Player do
306306
list { filters([:name, :team]) }
307+
field :name do
308+
default_filter_operator 'is'
309+
end
310+
field :team do
311+
filterable true
312+
end
307313
end
308314
visit index_path(model_name: 'player')
309315

@@ -314,7 +320,7 @@
314320
name: 'name',
315321
type: 'string',
316322
value: '',
317-
operator: nil,
323+
operator: 'is',
318324
required: true,
319325
},
320326
{

spec/rails_admin/config/fields/base_spec.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,4 +556,21 @@ class FieldVisibilityTest < Tableless
556556
expect(RailsAdmin.config(Team).field(:name).allowed_methods).to eq [:name]
557557
end
558558
end
559+
560+
describe '#default_filter_operator' do
561+
it 'has a default and be user customizable' do
562+
RailsAdmin.config Team do
563+
list do
564+
field :division
565+
field :name do
566+
default_filter_operator 'is'
567+
end
568+
end
569+
end
570+
name_field = RailsAdmin.config('Team').list.fields.detect { |f| f.name == :name }
571+
expect(name_field.default_filter_operator).to eq('is') # custom via user specification
572+
division_field = RailsAdmin.config('Team').list.fields.detect { |f| f.name == :division }
573+
expect(division_field.default_filter_operator).to be nil # rails_admin generic fallback
574+
end
575+
end
559576
end

0 commit comments

Comments
 (0)