# frozen_string_literal: true require 'split/dashboard/paginator' module Split module DashboardPaginationHelpers def pagination_per default_per_page = Split.configuration.dashboard_pagination_default_per_page @pagination_per ||= (params[:per] || default_per_page).to_i end def page_number @page_number ||= (params[:page] || 1).to_i end def paginated(collection) Split::DashboardPaginator.new(collection, page_number, pagination_per).paginate end def pagination(collection) html = [] html << first_page_tag if show_first_page_tag? html << ellipsis_tag if show_first_ellipsis_tag? html << prev_page_tag if show_prev_page_tag? html << current_page_tag html << next_page_tag if show_next_page_tag?(collection) html << ellipsis_tag if show_last_ellipsis_tag?(collection) html << last_page_tag(collection) if show_last_page_tag?(collection) html.join end private def show_first_page_tag? page_number > 2 end def first_page_tag %Q(1) end def show_first_ellipsis_tag? page_number >= 4 end def ellipsis_tag '...' end def show_prev_page_tag? page_number > 1 end def prev_page_tag %Q(#{page_number - 1}) end def current_page_tag "#{page_number}" end def show_next_page_tag?(collection) (page_number * pagination_per) < collection.count end def next_page_tag %Q(#{page_number + 1}) end def show_last_ellipsis_tag?(collection) (total_pages(collection) - page_number) >= 3 end def total_pages(collection) collection.count / pagination_per + ((collection.count % pagination_per).zero? ? 0 : 1) end def show_last_page_tag?(collection) page_number < (total_pages(collection) - 1) end def last_page_tag(collection) total = total_pages(collection) %Q(#{total}) end end end