diff --git a/app/components/blacklight/facet_field_filter_component.rb b/app/components/blacklight/facet_field_filter_component.rb
index 91abe91953..664873e800 100644
--- a/app/components/blacklight/facet_field_filter_component.rb
+++ b/app/components/blacklight/facet_field_filter_component.rb
@@ -1,25 +1,6 @@
# frozen_string_literal: true
module Blacklight
- class FacetFieldFilterComponent < Blacklight::Component
- def initialize(facet_field:)
- @facet_field = facet_field
- end
-
- def render?
- @facet_field.facet_field.index_range.any?
- end
-
- def prefix
- @facet_field.paginator.prefix
- end
-
- def clear_facet_prefix_url
- @facet_field.paginator.params_for_resort_url('index', @facet_field.search_state.to_h.except(@facet_field.paginator.request_keys[:prefix]))
- end
-
- def facet_prefix_url(letter)
- @facet_field.paginator.params_for_resort_url('index', @facet_field.search_state.to_h.merge(@facet_field.paginator.request_keys[:prefix] => letter))
- end
- end
+ class FacetFieldFilterComponent < Facets::IndexNavigationComponent; end
+ FacetFieldFilterComponent = ActiveSupport::Deprecation::DeprecatedConstantProxy.new("FacetFieldFilterComponent", "Blacklight::Facets::IndexNavigationComponent", ActiveSupport::Deprecation.new)
end
diff --git a/app/components/blacklight/facets/filters_component.html.erb b/app/components/blacklight/facets/filters_component.html.erb
index a1a3763acf..244ffeeb6a 100644
--- a/app/components/blacklight/facets/filters_component.html.erb
+++ b/app/components/blacklight/facets/filters_component.html.erb
@@ -1,4 +1,4 @@
<%= render Blacklight::Facets::SuggestComponent.new(presenter: presenter) %>
- <%= render 'facet_index_navigation' if render_index_navigation? %>
+ <%= render Blacklight::Facets::IndexNavigationComponent.new(presenter: presenter) %>
diff --git a/app/components/blacklight/facet_field_filter_component.html.erb b/app/components/blacklight/facets/index_navigation_component.html.erb
similarity index 89%
rename from app/components/blacklight/facet_field_filter_component.html.erb
rename to app/components/blacklight/facets/index_navigation_component.html.erb
index ae5735235c..d0dc195d1f 100644
--- a/app/components/blacklight/facet_field_filter_component.html.erb
+++ b/app/components/blacklight/facets/index_navigation_component.html.erb
@@ -3,7 +3,7 @@
<%= link_to t('blacklight.search.facets.all'), clear_facet_prefix_url, data: { blacklight_modal: "preserve" }, class: 'page-link' %>
- <% @facet_field.facet_field.index_range.each do |letter| %>
+ <% index_range.each do |letter| %>
<%= link_to(letter, facet_prefix_url(letter), class: 'page-link', data: { blacklight_modal: "preserve" }) %>
diff --git a/app/components/blacklight/facets/index_navigation_component.rb b/app/components/blacklight/facets/index_navigation_component.rb
new file mode 100644
index 0000000000..5fe4e19ff0
--- /dev/null
+++ b/app/components/blacklight/facets/index_navigation_component.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+module Blacklight
+ module Facets
+ class IndexNavigationComponent < Blacklight::Component
+ # @params [Blacklight::FacetFieldPresenter] presenter
+ def initialize(presenter:)
+ @presenter = presenter
+ end
+
+ def render?
+ index_range && @presenter.display_facet.index?
+ end
+
+ def index_range
+ @presenter.facet_field.index_range
+ end
+
+ def prefix
+ @presenter.paginator.prefix
+ end
+
+ def clear_facet_prefix_url
+ @presenter.paginator.params_for_resort_url('index', @presenter.search_state.to_h.except(@presenter.paginator.request_keys[:prefix]))
+ end
+
+ def facet_prefix_url(letter)
+ @presenter.paginator.params_for_resort_url('index', @presenter.search_state.to_h.merge(@presenter.paginator.request_keys[:prefix] => letter))
+ end
+ end
+ end
+end
diff --git a/app/controllers/concerns/blacklight/catalog.rb b/app/controllers/concerns/blacklight/catalog.rb
index 0c435f8b76..cd5039e362 100644
--- a/app/controllers/concerns/blacklight/catalog.rb
+++ b/app/controllers/concerns/blacklight/catalog.rb
@@ -79,6 +79,7 @@ def track
# displays values and pagination links for a single facet field
def facet
+ # @facet is a Blacklight::Configuration::FacetField
@facet = blacklight_config.facet_fields[params[:id]]
raise ActionController::RoutingError, 'Not Found' unless @facet
@@ -87,8 +88,10 @@ def facet
else
search_service.facet_field_response(@facet.key)
end
+ # @display_facet is a Blacklight::Solr::Response::Facets::FacetField
@display_facet = @response.aggregations[@facet.field]
+ # @presenter is a Blacklight::FacetFieldPresenter
@presenter = @facet.presenter.new(@facet, @display_facet, view_context)
@pagination = @presenter.paginator
respond_to do |format|
diff --git a/app/views/catalog/_facet_index_navigation.html.erb b/app/views/catalog/_facet_index_navigation.html.erb
deleted file mode 100644
index 97f3447115..0000000000
--- a/app/views/catalog/_facet_index_navigation.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= render(Blacklight::FacetFieldFilterComponent.new(facet_field: facet_field_presenter(@facet, @display_facet))) %>
diff --git a/spec/components/blacklight/facets/index_navigation_component_spec.rb b/spec/components/blacklight/facets/index_navigation_component_spec.rb
new file mode 100644
index 0000000000..0184936547
--- /dev/null
+++ b/spec/components/blacklight/facets/index_navigation_component_spec.rb
@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+
+RSpec.describe Blacklight::Facets::IndexNavigationComponent, type: :component do
+ let(:pagination) { Blacklight::Solr::FacetPaginator.new([]) }
+ let(:facet) { Blacklight::Configuration::FacetField.new(index_range: '0'..'9', presenter: Blacklight::FacetFieldPresenter) }
+ let(:display_facet) { instance_double(Blacklight::Solr::Response::Facets::FacetField, items: [], offset: 0, prefix: '', sort: 'index', index?: true) }
+ let(:blacklight_config) { Blacklight::Configuration.new }
+
+ let(:presenter) { facet.presenter.new(facet, display_facet, vc_test_controller.view_context) }
+
+ before do
+ with_request_url "/catalog/facet/language" do
+ render_inline(described_class.new(presenter: presenter))
+ end
+ end
+
+ it 'renders the facet index navigation range' do
+ expect(page).to have_css '.pagination'
+ expect(page).to have_link '0', href: '/catalog/facet/language.html?facet.prefix=0&facet.sort=index'
+ expect(page).to have_link '1'
+ expect(page).to have_link '8'
+ expect(page).to have_link '9'
+ end
+
+ it 'renders an "all" button' do
+ expect(page).to have_css '.page-link', text: 'All'
+ end
+
+ context 'with a selected index' do
+ let(:display_facet) { instance_double(Blacklight::Solr::Response::Facets::FacetField, items: [], offset: 0, prefix: '5', sort: 'index', index?: true) }
+
+ it 'highlights the selected index' do
+ expect(page).to have_css '.active', text: '5'
+ end
+
+ it 'enables the clear facets button' do
+ expect(page).to have_link 'All'
+ end
+ end
+end
diff --git a/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb b/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb
deleted file mode 100644
index b9ec0f95ef..0000000000
--- a/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# frozen_string_literal: true
-
-RSpec.describe 'catalog/_facet_index_navigation.html.erb' do
- let(:pagination) { Blacklight::Solr::FacetPaginator.new([]) }
- let(:facet) { Blacklight::Configuration::FacetField.new(index_range: '0'..'9', presenter: Blacklight::FacetFieldPresenter) }
- let(:display_facet) { double(items: [], offset: 0, prefix: '', sort: 'index') }
- let(:blacklight_config) { Blacklight::Configuration.new }
-
- before do
- assign(:display_facet, display_facet)
- assign(:facet, facet)
- allow(view).to receive_messages(blacklight_config: blacklight_config, facet_limit_for: 10)
- controller.request.path_parameters[:action] = 'index'
- end
-
- it 'renders the facet index navigation range' do
- render
- expect(rendered).to have_css '.pagination'
- expect(rendered).to have_link '0', href: '/?facet.prefix=0&facet.sort=index'
- expect(rendered).to have_link '1'
- expect(rendered).to have_link '8'
- expect(rendered).to have_link '9'
- end
-
- it 'renders an "all" button' do
- render
- expect(rendered).to have_css '.page-link', text: 'All'
- end
-
- context 'with a selected index' do
- let(:display_facet) { double(items: [], offset: 0, prefix: '5', sort: 'index') }
-
- it 'highlights the selected index' do
- render
- expect(rendered).to have_css '.active', text: '5'
- end
-
- it 'enables the clear facets button' do
- render
- expect(rendered).to have_link 'All'
- end
- end
-end