# frozen_string_literal: true module PgEventstore module Web module Paginator module Helpers # @param collection [PgEventstore::Web::Paginator::BaseCollection] # @return [String] def previous_page_link(collection) id = collection.prev_page_starting_id disabled = id ? '' : 'disabled' <<~HTML
  • Previous
  • HTML end # @param collection [PgEventstore::Web::Paginator::BaseCollection] # @return [String] def next_page_link(collection) id = collection.next_page_starting_id disabled = id ? '' : 'disabled' <<~HTML
  • Next
  • HTML end # @return [String] def first_page_link path = build_path(params.slice(*(params.keys - ['starting_id']))) <<~HTML
  • First
  • HTML end # @param per_page [String] string representation of items per page. E.g. "10", "20", etc. # @return [String] def per_page_url(per_page) build_path(params.merge(per_page: per_page)) end # @param order [String] "asc"/"desc" # @return [String] def sort_url(order) build_path(params.merge(order: order)) end # @param number [Integer] total number of events by the current filter # @return [String] def total_count(number) prefix = if number > Paginator::EventsCollection::MAX_NUMBER_TO_COUNT "Estimate count: " else "Total count: " end number = number_with_delimiter(number) prefix + number end # Takes an integer and adds delimiters in there. E.g 1002341 becomes this "1,002,341" # @param number [Integer] # @param delimiter [String] # @return [String] number with delimiters def number_with_delimiter(number, delimiter: ',') number = number.to_s symbols_to_skip = number.size % 3 parts = [] parts.push(number[0...symbols_to_skip]) unless symbols_to_skip.zero? parts.push(*number[symbols_to_skip..].scan(/\d{3}/)) parts.join(delimiter) end # @param event [PgEventstore::Event] # @return [String] def stream_path(event) build_path( { filter: { streams: [ { context: event.stream.context, stream_name: event.stream.stream_name, stream_id: event.stream.stream_id } ] } } ) end private # @param starting_id [String, Integer, nil] # @return [String] def build_starting_id_link(starting_id) return 'javascript: void(0);' unless starting_id build_path(params.merge(starting_id: starting_id)) end # @param params [Hash, Array] # @return [String] def build_path(params) encoded_params = Rack::Utils.build_nested_query(params) return request.path if encoded_params.empty? "#{request.path}?#{encoded_params}" end end end end end