Implement UI for Admin Search of Hashtags (#30880)

This commit is contained in:
Emelia Smith 2024-07-29 17:49:44 +02:00 committed by GitHub
parent 6d2ed0dcba
commit c40e481169
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 316 additions and 11 deletions

View file

@ -0,0 +1,74 @@
# frozen_string_literal: true
class Admin::TagFilter
KEYS = %i(
status
name
order
).freeze
attr_reader :params
def initialize(params)
@params = params.to_h.symbolize_keys
end
def results
scope = Tag.reorder(nil)
params.each do |key, value|
next if key == :page
scope.merge!(scope_for(key, value)) if value.present?
end
scope
end
private
def scope_for(key, value)
case key
when :status
status_scope(value)
when :name
Tag.search_for(value.to_s.strip, params[:limit], params[:offset], exclude_unlistable: false)
when :order
order_scope(value)
else
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end
def status_scope(value)
case value.to_s
when 'reviewed'
Tag.reviewed
when 'review_requested'
Tag.pending_review
when 'unreviewed'
Tag.unreviewed
when 'trendable'
Tag.trendable
when 'not_trendable'
Tag.not_trendable
when 'usable'
Tag.usable
when 'not_usable'
Tag.not_usable
else
raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
end
end
def order_scope(value)
case value.to_s
when 'newest'
Tag.order(created_at: :desc)
when 'oldest'
Tag.order(created_at: :asc)
else
raise Mastodon::InvalidParameterError, "Unknown order: #{value}"
end
end
end