From 85a06b0f309e78fcc33f8fb240bc258857898f77 Mon Sep 17 00:00:00 2001 From: Jonathan Rochkind Date: Tue, 26 Nov 2024 10:15:32 -0500 Subject: [PATCH 1/2] range values clamped by config'd min and max, to avoid solr error --- lib/blacklight_range_limit.rb | 4 ++- .../range_limit_builder.rb | 33 +++++++++++++++---- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/lib/blacklight_range_limit.rb b/lib/blacklight_range_limit.rb index 7051f0e..0189a4a 100644 --- a/lib/blacklight_range_limit.rb +++ b/lib/blacklight_range_limit.rb @@ -31,7 +31,9 @@ def self.default_range_config chart_segment_border_color: 'rgb(54, 162, 235)', chart_segment_bg_color: 'rgba(54, 162, 235, 0.5)', chart_aspect_ratio: 2, - assumed_boundaries: nil + assumed_boundaries: nil, + min_value: -2_147_483_648, # solr intfield min and max + max_value: 2_147_483_648 }, filter_class: BlacklightRangeLimit::FilterField, presenter: BlacklightRangeLimit::FacetFieldPresenter, diff --git a/lib/blacklight_range_limit/range_limit_builder.rb b/lib/blacklight_range_limit/range_limit_builder.rb index 5c2b6f0..802efa3 100644 --- a/lib/blacklight_range_limit/range_limit_builder.rb +++ b/lib/blacklight_range_limit/range_limit_builder.rb @@ -26,13 +26,7 @@ def add_range_limit_params(solr_params) selected_value = search_state.filter(config.key).values.first - range = if selected_value.is_a? Range - selected_value - elsif range_config[:assumed_boundaries] - Range.new(*range_config[:assumed_boundaries]) - else - nil - end + range = bl_create_selected_range_value(selected_value, config) # If we have both ends of a range add_range_segments_to_solr!(solr_params, field_key, range.begin, range.end) if range && range.count != Float::INFINITY @@ -98,5 +92,30 @@ def facet_value_to_fq_string(facet_field, value, use_local_params: true) end end + # @returns Range or nil + # + # Range created from a range value or from assumed boundaries if present, and clamped between min and max + def bl_create_selected_range_value(selected_value, field_config) + range_config = field_config.range_config + + range = if selected_value.is_a? Range + selected_value + elsif range_config[:assumed_boundaries] + Range.new(*range_config[:assumed_boundaries]) + else + nil + end + + # clamp between config'd min and max + min = range_config[:min_value] + max = range_config[:max_value] + + range = Range.new( + (range.begin.clamp(min, max) if range.begin), + (range.end.clamp(min, max) if range.end), + ) if range + + range + end end end From c6564f94918f1db9ea366057ac7d7c051d7e7744 Mon Sep 17 00:00:00 2001 From: Jonathan Rochkind Date: Tue, 26 Nov 2024 10:17:51 -0500 Subject: [PATCH 2/2] use html5 min/max on input field for config'd min/max --- .../range_form_component.html.erb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/components/blacklight_range_limit/range_form_component.html.erb b/app/components/blacklight_range_limit/range_form_component.html.erb index 21b960c..db0affb 100644 --- a/app/components/blacklight_range_limit/range_form_component.html.erb +++ b/app/components/blacklight_range_limit/range_form_component.html.erb @@ -5,12 +5,22 @@
<%= label_tag(begin_input_name, t("blacklight.range_limit.range_begin_short"), class: 'text-muted small mb-1') %> - <%= number_field_tag(begin_input_name, begin_value_default, class: "form-control form-control-sm range_begin") %> + <%= number_field_tag(begin_input_name, + begin_value_default, + min: range_config[:min_value], + max: range_config[:max_value], + class: "form-control form-control-sm range_begin") + %>
<%= label_tag(end_input_name, t("blacklight.range_limit.range_end_short"), class: 'text-muted small mb-1') %> - <%= number_field_tag(end_input_name, end_value_default, class: "form-control form-control-sm range_end") %> + <%= number_field_tag(end_input_name, + end_value_default, + min: range_config[:min_value], + max: range_config[:max_value], + class: "form-control form-control-sm range_end") + %>