Sha256: 249eaa99d10d61dce555b81799ebe711a74488cc751f148ac3b7d960e4ba5078

Contents?: true

Size: 1.18 KB

Versions: 2

Compression:

Stored size: 1.18 KB

Contents

module Agilibox::SortingHelper
  def sortable_column(name, column)
    unless column.is_a?(Symbol)
      raise ArgumentError, "invalid column, please use symbol"
    end

    current_column, current_direction = sortable_column_order

    if current_column == column
      if current_direction == :asc
        name           = "#{name} ↓"
        new_sort_param = "-#{column}"
      end

      if current_direction == :desc
        name           = "#{name} ↑"
        new_sort_param = column
      end

      klass = "sort #{current_direction}"
    else
      new_sort_param = column
      klass          = "sort"
    end

    url_params = (params.try(:permit!) || params).to_h.symbolize_keys.merge(sort: new_sort_param)

    link_to(name, url_params, class: klass)
  end

  def sortable_column_order(sort_param = params[:sort])
    sort_param = sort_param.to_s

    if sort_param.present?
      if sort_param.start_with?("-")
        column     = sort_param[1..-1].to_sym
        direction  = :desc
      else
        column     = sort_param.to_sym
        direction  = :asc
      end
    end

    if block_given?
      yield(column, direction)
    else
      [column, direction]
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
agilibox-1.0.13 app/helpers/agilibox/sorting_helper.rb
agilibox-1.0.12 app/helpers/agilibox/sorting_helper.rb