Sha256: ac81f1ecbacb75d51a3a5a33d14275018bd8382495fe3038ef7dbf72f8bb8f9d

Contents?: true

Size: 1.61 KB

Versions: 1

Compression:

Stored size: 1.61 KB

Contents

# frozen_string_literal: true

require "active_support"
require "active_support/concern"

require_relative "backend/sort_form"

module Katalyst
  module Tables
    # Utilities for controllers that are generating collections for visualisation
    # in a table view using Katalyst::Tables::Frontend.
    #
    # Provides `table_sort` for sorting based on column interactions (sort param).
    module Backend
      extend ActiveSupport::Concern

      # Sort the given collection by params[:sort], which is set when a user
      # interacts with a column header in a frontend table view.
      #
      # @return [[SortForm, ActiveRecord::Relation]]
      def table_sort(collection)
        column, direction = params[:sort]&.split(" ")
        direction         = "asc" unless SortForm::DIRECTIONS.include?(direction)

        SortForm.new(self,
                     column: column,
                     direction: direction)
                .apply(collection)
      end

      included do
        class_attribute :_default_table_builder, instance_accessor: false
      end

      class_methods do
        # Set the table builder to be used as the default for all tables
        # in the views rendered by this controller and its subclasses.
        #
        # ==== Parameters
        # * <tt>builder</tt> - Default table builder, an instance of +Katalyst::Tables::Frontend::TableBuilder+
        def default_table_builder(builder)
          self._default_table_builder = builder
        end
      end

      # Default table builder for the controller
      def default_table_builder
        self.class._default_table_builder
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
katalyst-tables-1.0.0 lib/katalyst/tables/backend.rb