From 4f0d9b57f3e37f23546972f84d91b96ccf62c418 Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 17 May 2024 14:59:41 +0200 Subject: [PATCH] fix: add emulate_field_filtering missing method on customizer --- .../collection_customizer.rb | 16 ++++++++++++++++ .../collection_customizer_spec.rb | 17 +++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/packages/forest_admin_datasource_customizer/lib/forest_admin_datasource_customizer/collection_customizer.rb b/packages/forest_admin_datasource_customizer/lib/forest_admin_datasource_customizer/collection_customizer.rb index b04dab6a6..83286a44f 100644 --- a/packages/forest_admin_datasource_customizer/lib/forest_admin_datasource_customizer/collection_customizer.rb +++ b/packages/forest_admin_datasource_customizer/lib/forest_admin_datasource_customizer/collection_customizer.rb @@ -1,5 +1,6 @@ module ForestAdminDatasourceCustomizer class CollectionCustomizer + include ForestAdminDatasourceToolkit::Validations attr_reader :datasource_customizer, :stack, :name def initialize(datasource_customizer, stack, name) @@ -60,6 +61,21 @@ def emulate_field_operator(name, operator) end end + def emulate_field_filtering(name) + push_customization do + collection = @stack.late_op_emulate.get_collection(@name) + field = collection.schema[:fields][name] + + if field.column_type.is_a?(String) + operators = Rules.get_allowed_operators_for_column_type[field.column_type] + + operators.each do |operator| + emulate_field_operator(name, operator) unless field.filter_operators&.include?(operator) + end + end + end + end + def replace_field_operator(name, operator, &replacer) push_customization do collection = if @stack.early_op_emulate.get_collection(@name).schema[:fields].key?(name) diff --git a/packages/forest_admin_datasource_customizer/spec/lib/forest_admin_datasource_customizer/collection_customizer_spec.rb b/packages/forest_admin_datasource_customizer/spec/lib/forest_admin_datasource_customizer/collection_customizer_spec.rb index 75814b384..4b7e3fc2f 100644 --- a/packages/forest_admin_datasource_customizer/spec/lib/forest_admin_datasource_customizer/collection_customizer_spec.rb +++ b/packages/forest_admin_datasource_customizer/spec/lib/forest_admin_datasource_customizer/collection_customizer_spec.rb @@ -388,6 +388,23 @@ module ForestAdminDatasourceCustomizer end end + context 'when using emulate_field_filtering' do + it 'emulate filtering on field' do + stack = @datasource_customizer.stack + stack.apply_queued_customizations({}) + allow(stack.early_op_emulate).to receive(:get_collection).with('person').and_return(@datasource_customizer.stack.early_op_emulate.get_collection('person')) + + customizer = described_class.new(@datasource_customizer, @datasource_customizer.stack, 'person') + customizer.emulate_field_filtering('name') + stack.apply_queued_customizations({}) + + expected_operators = ForestAdminDatasourceToolkit::Validations::Rules.get_allowed_operators_for_column_type['String'] + op_emulate_collection = @datasource_customizer.stack.early_op_emulate.get_collection('person') + + expect(op_emulate_collection.schema[:fields]['name'].filter_operators).to include(*expected_operators) + end + end + context 'when using replace_field_sorting' do it 'replace sort on field' do stack = @datasource_customizer.stack