diff --git a/app/components/post_navbar_component.rb b/app/components/post_navbar_component.rb index 979a4d4c3..447838f4e 100644 --- a/app/components/post_navbar_component.rb +++ b/app/components/post_navbar_component.rb @@ -18,35 +18,37 @@ class PostNavbarComponent < ApplicationComponent def pools @pools ||= post.pools.undeleted.sort_by do |pool| - [pool.id == pool_id ? 0 : 1, pool.is_series? ? 0 : 1, pool.name] + [pool == selected_pool ? 0 : 1, pool.is_series? ? 0 : 1, pool.name] end end def favgroups - return [] if current_user.is_anonymous? && favgroup_id.nil? + return [] if current_user.is_anonymous? && selected_favgroup.nil? favgroups = FavoriteGroup.visible(current_user).for_post(post.id) - favgroups = favgroups.where(creator: current_user).or(favgroups.where(id: favgroup_id)) + favgroups = favgroups.where(creator: current_user).or(favgroups.where(id: selected_favgroup)) favgroups.sort_by do |favgroup| - [favgroup.id == favgroup_id ? 0 : 1, favgroup.name] + [favgroup == selected_favgroup ? 0 : 1, favgroup.name] end end def has_search_navbar? - !query.has_metatag?(:order, :ordfav, :ordpool) && pool_id.blank? && favgroup_id.blank? + !query.has_metatag?(:order, :ordfav, :ordpool) && selected_pool.blank? && selected_favgroup.blank? end - def pool_id - @pool_id ||= query.find_metatag(:pool, :ordpool)&.to_i + def selected_pool + value = query.find_metatag(:pool, :ordpool) + Pool.find_by_name(value) if value.present? end - def favgroup_id - @favgroup_id ||= query.find_metatag(:favgroup, :ordfavgroup)&.to_i + def selected_favgroup + value = query.find_metatag(:favgroup, :ordfavgroup) + FavoriteGroup.find_by_name_or_id(value, current_user) if value.present? end def query @query ||= PostQuery.new(search) end - memoize :favgroups + memoize :favgroups, :selected_pool, :selected_favgroup end diff --git a/app/components/post_navbar_component/post_navbar_component.html.erb b/app/components/post_navbar_component/post_navbar_component.html.erb index 138228d83..a886d3e25 100644 --- a/app/components/post_navbar_component/post_navbar_component.html.erb +++ b/app/components/post_navbar_component/post_navbar_component.html.erb @@ -8,7 +8,7 @@ <% end %> <% pools.each do |pool| %> - <% selected = pool_id == pool.id %> + <% selected = selected_pool == pool %> <% first_post_id = pool.post_ids.first %> <% last_post_id = pool.post_ids.last %> <% previous_post_id = pool.previous_post_id(post.id) %> @@ -38,7 +38,7 @@ <% end %> <% favgroups.each do |favgroup| %> - <% selected = favgroup_id == favgroup.id %> + <% selected = selected_favgroup == favgroup %> <% first_post_id = favgroup.post_ids.first %> <% last_post_id = favgroup.post_ids.last %> <% previous_post_id = favgroup.previous_post_id(post.id) %> diff --git a/test/components/post_navbar_component_test.rb b/test/components/post_navbar_component_test.rb index 60a37c0ec..7fb396584 100644 --- a/test/components/post_navbar_component_test.rb +++ b/test/components/post_navbar_component_test.rb @@ -35,12 +35,19 @@ class PostNavbarComponentTest < ViewComponent::TestCase assert_css(".pool-name", text: "Pool: #{@pool2.pretty_name}") end - should "highlight the selected pool" do + should "highlight the selected pool when doing a pool: search" do render_post_navbar(@post, current_user: @user, search: "pool:#{@pool1.id}") assert_css(".pool-navbar[data-selected=true] .pool-name", text: "Pool: #{@pool1.pretty_name}") assert_css(".pool-navbar[data-selected=false] .pool-name", text: "Pool: #{@pool2.pretty_name}") end + + should "highlight the selected pool when doing a pool: search" do + render_post_navbar(@post, current_user: @user, search: "pool:#{@pool1.name}") + + assert_css(".pool-navbar[data-selected=true] .pool-name", text: "Pool: #{@pool1.pretty_name}") + assert_css(".pool-navbar[data-selected=false] .pool-name", text: "Pool: #{@pool2.pretty_name}") + end end context "for a post with favgroups" do @@ -58,13 +65,20 @@ class PostNavbarComponentTest < ViewComponent::TestCase assert_css(".favgroup-name", text: "Favgroup: #{@favgroup2.pretty_name}") end - should "highlight the selected favgroup" do + should "highlight the selected favgroup when doing a favgroup: search" do render_post_navbar(@post, current_user: @user, search: "favgroup:#{@favgroup1.id}") assert_css(".favgroup-navbar[data-selected=true] .favgroup-name", text: "Favgroup: #{@favgroup1.pretty_name}") assert_css(".favgroup-navbar[data-selected=false] .favgroup-name", text: "Favgroup: #{@favgroup2.pretty_name}") end + should "highlight the selected favgroup when doing a favgroup: search" do + render_post_navbar(@post, current_user: @user, search: "favgroup:#{@favgroup1.name}") + + assert_css(".favgroup-navbar[data-selected=true] .favgroup-name", text: "Favgroup: #{@favgroup1.pretty_name}") + assert_css(".favgroup-navbar[data-selected=false] .favgroup-name", text: "Favgroup: #{@favgroup2.pretty_name}") + end + should "show public favgroups that belong to another user when doing a favgroup: search" do render_post_navbar(@post, current_user: create(:user), search: "favgroup:#{@favgroup1.id}")