|
5 | 5 | # Transform a params hash into SearchFilters::SearchFiklter objects
|
6 | 6 | class SearchFilterService
|
7 | 7 | EXCLUDED = %w[format controller action page per order order_by fields id_search].freeze
|
| 8 | + FILTERABLE_MODELS = [Child, Incident, TracingRequest, RegistryRecord, Family].freeze |
8 | 9 |
|
9 | 10 | def self.build_filters(params, permitted_field_names)
|
10 | 11 | service = SearchFilterService.new
|
11 | 12 | filter_params = service.select_filter_params(params, permitted_field_names)
|
12 | 13 | filter_params = DestringifyService.destringify(filter_params.to_h, true)
|
13 |
| - service.build_filters(filter_params) |
| 14 | + id_params = service.select_id_params(params) |
| 15 | + service.build_filters(filter_params.merge(id_params)) |
14 | 16 | end
|
15 | 17 |
|
16 | 18 | # rubocop:disable Metrics/AbcSize
|
@@ -46,7 +48,16 @@ def build_filters(params)
|
46 | 48 | # rubocop:enable Metrics/PerceivedComplexity
|
47 | 49 |
|
48 | 50 | def select_filter_params(params, permitted_field_names)
|
49 |
| - filter_params = params.except(*EXCLUDED) |
| 51 | + excluded_params = EXCLUDED + filterable_id_fields |
| 52 | + filter_params = params.except(*excluded_params) |
50 | 53 | filter_params.select { |key, _| permitted_field_names.any? { |name| key.match?(/#{name}[0-5]?$/) } }
|
51 | 54 | end
|
| 55 | + |
| 56 | + def select_id_params(params) |
| 57 | + params.select { |key, _| filterable_id_fields.include?(key) } |
| 58 | + end |
| 59 | + |
| 60 | + def filterable_id_fields |
| 61 | + @filterable_id_fields = FILTERABLE_MODELS.map(&:filterable_id_fields).flatten |
| 62 | + end |
52 | 63 | end
|
0 commit comments