lib/active_admin/resource/page_presenters.rb in activeadmin-0.5.1 vs lib/active_admin/resource/page_presenters.rb in activeadmin-0.6.0
- old
+ new
@@ -1,27 +1,81 @@
module ActiveAdmin
class Resource
module PagePresenters
+ # for setting default css class in admin ui
+ def default_index_class
+ @default_index
+ end
+
# A hash of page configurations for the controller indexed by action name
def page_presenters
@page_presenters ||= {}
end
# Sets a page config for a given action
#
# @param [String, Symbol] action The action to store this configuration for
# @param [PagePresenter] page_presenter The instance of PagePresenter to store
def set_page_presenter(action, page_presenter)
- page_presenters[action.to_sym] = page_presenter
+
+ if action.to_s == "index" && page_presenter[:as]
+ index_class = find_index_class(page_presenter[:as])
+ page_presenter_key = index_class.index_name.to_sym
+ set_index_presenter page_presenter_key, page_presenter
+ else
+ page_presenters[action.to_sym] = page_presenter
+ end
+
end
# Returns a stored page config
#
# @param [Symbol, String] action The action to get the config for
+ # @param [String] type The string specified in the presenters index_name method
# @returns [PagePresenter, nil]
- def get_page_presenter(action)
- page_presenters[action.to_sym]
+ def get_page_presenter(action, type=nil)
+
+ if action.to_s == "index" && type && page_presenters[:index].kind_of?(Hash)
+ page_presenters[:index][type.to_sym]
+ elsif action.to_s == "index" && page_presenters[:index].kind_of?(Hash)
+ page_presenters[:index].default
+ else
+ page_presenters[action.to_sym]
+ end
+
+ end
+
+ protected
+
+ # Stores a config for all index actions supplied
+ #
+ # @param [Symbol] index_as The index type to store in the configuration
+ # @param [PagePresenter] page_presenter The intance of PagePresenter to store
+ def set_index_presenter(index_as, page_presenter)
+ page_presenters[:index] ||= {}
+
+ #set first index as default value or the index with default param set to to true
+ if page_presenters[:index].empty? || page_presenter[:default] == true
+ page_presenters[:index].default = page_presenter
+ @default_index = find_index_class(page_presenter[:as])
+ end
+
+ page_presenters[:index][index_as] = page_presenter
+ end
+
+ # Returns the actual class for renderering the main content on the index
+ # page. To set this, use the :as option in the page_presenter block.
+ #
+ # @param [Symbol, Class] symbol_or_class The component symbol or class
+ # @return [Class]
+ def find_index_class(symbol_or_class)
+ case symbol_or_class
+ when Symbol
+ ::ActiveAdmin::Views.const_get("IndexAs" + symbol_or_class.to_s.camelcase)
+ when Class
+ symbol_or_class
+ end
end
end
end
end