Show the search navbar when searching for `pool:1234 tag`. Before the search navbar would always be hidden if the search contained a pool: metatag, even if it was a multi-tag search.
57 lines
1.6 KiB
Ruby
57 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class PostNavbarComponent < ApplicationComponent
|
|
extend Memoist
|
|
|
|
attr_reader :post, :current_user, :search
|
|
|
|
def initialize(post:, current_user:, search: nil)
|
|
super
|
|
@post = post
|
|
@current_user = current_user
|
|
@search = search.presence || "status:any"
|
|
end
|
|
|
|
def render?
|
|
has_search_navbar? || pools.any? || favgroups.any?
|
|
end
|
|
|
|
def pools
|
|
@pools ||= post.pools.undeleted.sort_by do |pool|
|
|
[pool == selected_pool ? 0 : 1, pool.is_series? ? 0 : 1, pool.name]
|
|
end
|
|
end
|
|
|
|
def favgroups
|
|
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: selected_favgroup))
|
|
favgroups.sort_by do |favgroup|
|
|
[favgroup == selected_favgroup ? 0 : 1, favgroup.name]
|
|
end
|
|
end
|
|
|
|
def has_search_navbar?
|
|
!query.has_metatag?(:order, :ordfav, :ordpool) && selected_pool.blank? && selected_favgroup.blank?
|
|
end
|
|
|
|
def selected_pool
|
|
return nil unless query.is_metatag?(:pool) || query.is_metatag?(:ordpool)
|
|
value = query.find_metatag(:pool, :ordpool)
|
|
Pool.find_by_name(value) if value.present?
|
|
end
|
|
|
|
def selected_favgroup
|
|
return nil unless query.is_metatag?(:favgroup) || query.is_metatag?(:ordfavgroup)
|
|
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).trim
|
|
end
|
|
|
|
memoize :favgroups, :selected_pool, :selected_favgroup
|
|
end
|