diff --git a/app/admin/cdr/cdrs.rb b/app/admin/cdr/cdrs.rb index af436511d..48273e4bc 100644 --- a/app/admin/cdr/cdrs.rb +++ b/app/admin/cdr/cdrs.rb @@ -7,6 +7,7 @@ config.batch_actions = false config.sort_order = 'time_start_desc' acts_as_cdr_stat + enable_visible_columns_feature! decorate_with CdrDecorator @@ -24,10 +25,6 @@ end controller do - def columns_visibility? - true - end - def scoped_collection if params[:as] == 'table' super.preload( diff --git a/app/assets/javascripts/index_as_table_visible_columns.js b/app/assets/javascripts/index_as_table_visible_columns.js index 3245e0fc9..19f8e297e 100644 --- a/app/assets/javascripts/index_as_table_visible_columns.js +++ b/app/assets/javascripts/index_as_table_visible_columns.js @@ -9,10 +9,7 @@ $(document).ready(function(){ var $select = $(this).closest('#block_available_columns').find('select'), selected_fields = $select.val(); $(this).parent().find('.ui-dialog-buttonset').text('Loading...'); - $.getJSON( - this.href, - {index_table_visible_columns: selected_fields} - ).success(function(){ + $.getJSON(window.location.pathname + '/visible_index_columns', { index_table_visible_columns: selected_fields }, function() { window.location.reload(); }); }, @@ -27,7 +24,7 @@ $(document).ready(function(){ }); $('#reset_visible_columns').click(function(){ - $.getJSON(this.href, {index_table_visible_columns: ''}).success(function(){ + $.getJSON(window.location.pathname + '/visible_index_columns', { index_table_visible_columns: '' }, function() { window.location.reload(); }); }); diff --git a/lib/active_admin/index_as_table_visible_columns/controller.rb b/lib/active_admin/index_as_table_visible_columns/controller.rb index dc5014d89..f4565f178 100644 --- a/lib/active_admin/index_as_table_visible_columns/controller.rb +++ b/lib/active_admin/index_as_table_visible_columns/controller.rb @@ -8,7 +8,6 @@ module Controller included do before_action only: :index do if columns_visibility? - set_visible_columns @visible_columns = [] if current_admin_user.visible_columns[visible_columns_key].is_a?(Array) @visible_columns = current_admin_user.visible_columns[visible_columns_key] @@ -16,18 +15,6 @@ module Controller end end - def set_visible_columns - if request.xhr? - # Set or clear values - if params.key?(:index_table_visible_columns) - visible_columns_storage = current_admin_user.visible_columns - visible_columns_storage[visible_columns_key] = params[:index_table_visible_columns] - current_admin_user.update_column(:visible_columns, visible_columns_storage) - render(json: { visible_columns: visible_columns_storage[visible_columns_key] }) && return - end - end - end - protected def columns_visibility? diff --git a/lib/active_admin/index_as_table_visible_columns/dsl.rb b/lib/active_admin/index_as_table_visible_columns/dsl.rb new file mode 100644 index 000000000..3771b2c71 --- /dev/null +++ b/lib/active_admin/index_as_table_visible_columns/dsl.rb @@ -0,0 +1,29 @@ +# frozen_string_literal : true + +module ActiveAdmin + module IndexAsTableVisibleColumns + module DSL + # + # This feature is disabled by default to enable it you need to call this method in your ActiveAdmin resource + # allow you to determine which columns are visible for the index table + def enable_visible_columns_feature! + controller do + def columns_visibility? + true + end + end + + collection_action :visible_index_columns, only: :index do + if params.key?(:index_table_visible_columns) + visible_columns_storage = current_admin_user.visible_columns + visible_columns_storage[visible_columns_key] = params[:index_table_visible_columns] + current_admin_user.update_column(:visible_columns, visible_columns_storage) + render json: { visible_columns: visible_columns_storage[visible_columns_key] } + end + end + end + end + end +end + +ActiveAdmin::ResourceDSL.send :include, ActiveAdmin::IndexAsTableVisibleColumns::DSL diff --git a/spec/features/cdr/cdr_history/cdrs_index_spec.rb b/spec/features/cdr/cdr_history/cdrs_index_spec.rb index 7b01fdf45..6a545d900 100644 --- a/spec/features/cdr/cdr_history/cdrs_index_spec.rb +++ b/spec/features/cdr/cdr_history/cdrs_index_spec.rb @@ -98,4 +98,33 @@ expect(page).to have_table_cell(column: 'ID', exact_text: cdr.id) end end + + describe 'Visible columns feature' do + context 'when click to "Visible columns" link' do + before do + visit cdrs_path + click_link 'Visible columns' + end + + it 'should display "Visible columns" popup', js: true do + expect(page).to have_selector '.ui-widget' + expect(page).to have_selector '.ui-dialog-title', exact_text: 'Visible table columns' + within '.ui-dialog' do + expect(page).to have_button :Show + expect(page).to have_button :Cancel + end + end + end + + context 'when click to "Reset" link' do + let!(:admin_user) { create :admin_user, visible_columns: { cdrs: %w[id] } } + + before { visit cdrs_path } + + it 'should click to "Reset" link', js: true do + click_link :Reset + expect(admin_user.reload).to have_attributes(visible_columns: { 'cdrs' => '' }) + end + end + end end