Active Admin Sortable Table
This gem extends ActiveAdmin so that your index page's table rows can be orderable via a drag-and-drop interface.
Improvements over the @neo version
- Test coverage
- Configurable labels for handler
- Move to top button allows to push any item from any page to the top of the list
- Sorting works on all pages ( not only on the first one)
Prerequisites
This extension assumes that you're using acts_as_list on any model you want to be sortable.
class Page < ActiveRecord::Base
acts_as_list
end
Usage
Add it to your Gemfile
gem "activeadmin_sortable_table"
Include the JavaScript in active_admin.js.coffee
#= require activeadmin_sortable_table
Include the Stylesheet in active_admin.css.scss
@import "activeadmin_sortable_table"
Configure your ActiveAdmin Resource
ActiveAdmin.register Page do
include ActiveAdmin::SortableTable # creates the controller action which handles the sorting
config.sort_order = 'position_asc' # assumes you are using 'position' for your acts_as_list column
index do
handle_column
end
show do |c|
attributes_table do
row :id
row :name
end
panel 'Contents' do
table_for c.collection_memberships do
handle_column
column :position
column :collectable
end
end
end
end
Configure handler
You can override handler column symbol using handle_column options:
You can configure sort_url
using handle column options by providing static value, symbolized instance method name, or blocks.
handle_column sort_url: ->(category) { compute_url_for_category(category) }
handle_column sort_url: '/admin/categories/1/sort'
handle_column sort_url: :sort_category
The same options available for move_to_top_url
:
handle_column move_to_top_url: '/admin/categories/1/move_to_top
It's also possible to override handle lables:
handle_column sort_handle: '☰'.html_safe
handle_column move_to_top_handle: 'Move to top'
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Prepare tests database (
bundle exec rake dummy:prepare
) - Make your changes and runs specs (
bundle exec rspec
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create Pull Request