Add a `z=N` param to the URL when doing a search from the search box, or when clicking a link in the tag list. This is to gather data on how often the links in the tag list are used, and whether it's more common to click tags in the tag list or to perform searches manually. This is temporary and will be removed when enough data is collected.
47 lines
1.2 KiB
Ruby
47 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class PaginatorComponent < ApplicationComponent
|
|
attr_reader :records, :window, :params
|
|
|
|
delegate :current_page, :prev_page, :next_page, :total_pages, :paginator_mode, :paginator_page_limit, to: :records
|
|
delegate :ellipsis_icon, :chevron_left_icon, :chevron_right_icon, to: :helpers
|
|
|
|
def initialize(records:, params:, window: 4)
|
|
super
|
|
@records = records
|
|
@window = window
|
|
@params = params
|
|
end
|
|
|
|
def use_sequential_paginator?
|
|
paginator_mode != :numbered
|
|
end
|
|
|
|
def pages
|
|
last_page = total_pages.clamp(1..)
|
|
left = (current_page - window).clamp(2..)
|
|
right = (current_page + window).clamp(..last_page - 1)
|
|
|
|
[
|
|
1,
|
|
("..." unless left == 2),
|
|
(left..right).to_a,
|
|
("..." unless right == last_page - 1),
|
|
(last_page unless last_page == 1 || last_page.infinite?),
|
|
].flatten.compact
|
|
end
|
|
|
|
def link_to_page(anchor, page = anchor, **options)
|
|
if page.nil?
|
|
tag.span anchor, **options
|
|
else
|
|
hidden = paginator_mode == :numbered && page > paginator_page_limit
|
|
link_to anchor, url_for_page(page), **options, hidden: hidden
|
|
end
|
|
end
|
|
|
|
def url_for_page(page)
|
|
url_for(**params.merge(page: page).except(:z).permit!)
|
|
end
|
|
end
|