feat: add persistent pull request sort and filter menus
This commit is contained in:
@@ -159,6 +159,8 @@ module Vamp
|
||||
@diff_follow_working_copy = true
|
||||
@pull_request_review_requested_symbol = "🙏"
|
||||
@pull_request_approved_symbol = "👍"
|
||||
@pull_request_sort = nil
|
||||
@pull_request_filters = nil
|
||||
@resolve_history_layout = "columns"
|
||||
end
|
||||
|
||||
@@ -341,6 +343,60 @@ module Vamp
|
||||
@pull_request_approved_symbol = pull_request_symbol!(symbol, "pull_request_approved_symbol")
|
||||
end
|
||||
|
||||
# @param fields [Hash{String, Symbol => Hash}, nil] explicit ranks and sort directions
|
||||
# @return [Hash, nil]
|
||||
def pull_request_sort=(fields)
|
||||
return @pull_request_sort = nil if fields.nil?
|
||||
raise TypeError, "pull_request_sort must be a Hash or nil" unless fields.is_a?(Hash)
|
||||
|
||||
ranks = []
|
||||
normalized = Vamp.chrome_hash!(fields).to_h do |field, options|
|
||||
unless %w[requested updated_at approved created_at].include?(field)
|
||||
raise ArgumentError, "unknown pull_request_sort field: #{field}"
|
||||
end
|
||||
raise TypeError, "pull_request_sort #{field} must be a Hash" unless options.is_a?(Hash)
|
||||
|
||||
options = Vamp.chrome_hash!(options)
|
||||
unknown = options.keys - %w[precedence direction]
|
||||
raise ArgumentError, "unknown pull_request_sort option: #{unknown.first}" unless unknown.empty?
|
||||
rank = options["precedence"]
|
||||
unless rank.nil? || (rank.is_a?(Integer) && rank.between?(1, 4))
|
||||
raise ArgumentError, "pull_request_sort precedence must be between 1 and 4"
|
||||
end
|
||||
raise ArgumentError, "duplicate pull_request_sort precedence: #{rank}" if rank && ranks.include?(rank)
|
||||
ranks << rank if rank
|
||||
if options.key?("direction")
|
||||
direction = options["direction"]
|
||||
direction = direction.to_s if direction.is_a?(Symbol)
|
||||
unless %w[asc desc].include?(direction)
|
||||
raise ArgumentError, "pull_request_sort direction must be asc or desc"
|
||||
end
|
||||
options["direction"] = direction
|
||||
end
|
||||
[field, options]
|
||||
end
|
||||
@pull_request_sort = normalized
|
||||
end
|
||||
|
||||
# @param filters [Array<String, Symbol>, nil] selected personal review buckets
|
||||
# @return [Array<String>, nil]
|
||||
def pull_request_filters=(filters)
|
||||
return @pull_request_filters = nil if filters.nil?
|
||||
raise TypeError, "pull_request_filters must be an Array or nil" unless filters.is_a?(Array)
|
||||
|
||||
normalized = filters.map do |filter|
|
||||
filter = filter.to_s if filter.is_a?(Symbol)
|
||||
unless %w[requested approved other].include?(filter)
|
||||
raise ArgumentError, "unknown pull_request_filters value: #{filter.inspect}"
|
||||
end
|
||||
filter
|
||||
end
|
||||
unless normalized.uniq.length == normalized.length
|
||||
raise ArgumentError, "duplicate pull_request_filters value"
|
||||
end
|
||||
@pull_request_filters = normalized
|
||||
end
|
||||
|
||||
# @param layout [String] "columns" or "base_below"
|
||||
# @return [String]
|
||||
def resolve_history_layout=(layout)
|
||||
@@ -398,6 +454,7 @@ module Vamp
|
||||
"diff_follow_working_copy" => @diff_follow_working_copy,
|
||||
"pull_request_review_requested_symbol" => @pull_request_review_requested_symbol,
|
||||
"pull_request_approved_symbol" => @pull_request_approved_symbol,
|
||||
"pull_request_sort" => @pull_request_sort, "pull_request_filters" => @pull_request_filters,
|
||||
"resolve_history_layout" => @resolve_history_layout }
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user