ActiveadminDynamicTable

This is an ActiveAdmin extension that allows managing index table columns from the activeadmin UI.

Goals

  • Show/hide table columns from UI
  • Resize columns
  • Reorder columns

Installation

Add this line to your application's Gemfile:

gem 'activeadmin_dynamic_table'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install activeadmin_dynamic_table

Add at the end of your ActiveAdmin styles (app/assets/stylesheets/active_admin.scss):

@import 'activeadmin_dynamic_table/all';

Add at the end of your ActiveAdmin javascripts (app/assets/javascripts/active_admin.js):

//= require activeadmin_dynamic_table/config

Usage

For index block specify dynamic_table to be used instead of default table

index as: :dynamic_table do
  # ...
end

Inside configuration block register columns that will be configurable through UI

register_column

Method follows standard column dsl but also requires to provide at least key among options. This is key of the column in the provided URL params to detect whether or not column should be rendered.

default: true - specify column should be rendered by default (when columns are not specified in url params) width: 100 - default width of the column if it's not specified in the url params

register_id_column

Method follows standard id_column dsl but also requires to provide at least key among options. All other options are the same as for register_column

register_actions

Method follows standard column dsl but also requires to provide at least key among options. All other options are the same as for register_column

Example:

index as: :dynamic_table do
  selectable_column

  register_id_column 'Student ID', key: :id, default: true, width: 30

  register_column :name, key: :name, default: true, width: 200, &:full_name
  register_column :user_phone, key: :phone, default: true, width: 200, &proc { |st| link_to st.phone, user_path(st.user) }

  register_column :teacher, key: :teacher, default: true, width: 200
  register_column :country, key: :country, width: 150
  register_column :updated_at, key: :updated_at, width: 100

  register_column 'LPD', key: :lpd, &proc { |st| st.last_payment_date&.strftime('%d.%m.%y %H:%M') }

  register_column 'SC', key: :sc, width: 200, default: true do |student|
    student.schedule_slots.map do |slot|
      "#{slot.day_of_week.capitalize}: #{slot.time_slot.utc.strftime('%H:%M')}"
    end.join(', ')
  end

  register_actions 'Actions', key: :actions, default: true, width: 130
end

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/amdj15/activeadmin_dynamic_table.

License

The gem is available as open source under the terms of the MIT License.