module Engine2::ActionListSupport

Attributes

default_order_field[R]
filters[R]
orders[R]

Public Instance Methods

default_order(order) click to toggle source
# File lib/engine2/action.rb, line 748
def default_order order
    @default_order_field = order
end
field_tabs(hash) click to toggle source
Calls superclass method
# File lib/engine2/action.rb, line 666
def field_tabs hash
    super
    search_template 'scaffold/search_tabs'
end
filter(name, &blk) click to toggle source
# File lib/engine2/action.rb, line 776
def filter name, &blk
    (@filters ||= {})[name] = blk
end
filter_case_insensitive(name) click to toggle source
# File lib/engine2/action.rb, line 780
def filter_case_insensitive name
    model = assets[:model]
    raise E2Error.new("Field '#{name}' needs to be a string") unless model.find_type_info(name)[:otype] == :string
    filter name do |handler, query, hash|
        value = hash[name]
        value ? query.where(model.table_name.q(name).ilike("%#{value}%")) : query
    end
end
order(name, &blk) click to toggle source
# File lib/engine2/action.rb, line 789
def order name, &blk
    (@orders ||= {})[name] = blk
end
post_process() click to toggle source

def find_renderer type_info

renderer = DefaultSearchRenderers[type_info[:type]] || DefaultSearchRenderers[type_info[:otype]]
raise E2Error.new("No search renderer found for field '#{type_info[:name]}'") unless renderer
renderer.(self, type_info)

end

Calls superclass method
# File lib/engine2/action.rb, line 698
def post_process
    model = assets[:model]
    if fields = @meta[:search_field_list]
        fields = fields - static.meta[:search_field_list] if dynamic?

        decorate(fields)
        fields.each do |name|
            type_info = model.find_type_info(name)

            # render = fields[name][:render]
            # if not render
            #     fields[name][:render] = find_renderer(type_info)
            # else
            #     fields[name][:render].merge!(find_renderer(type_info)){|key, v1, v2|v1}
            # end

            fields(name)[:render] ||= begin # set before :field_list
                renderer = DefaultSearchRenderers[type_info[:type]] || DefaultSearchRenderers[type_info[:otype]]
                raise E2Error.new("No search renderer found for field '#{type_info[:name]}'") unless renderer
                renderer.(self, type_info)
            end

            proc = SearchRendererPostProcessors[type_info[:type]] || ListRendererPostProcessors[type_info[:type]] # ?
            proc.(self, name, type_info) if proc
        end
    end

    if fields = @meta[:field_list]
        fields = fields - static.meta[:field_list] if dynamic?

        decorate(fields)
        fields.each do |name|
            type_info = model.find_type_info(name)
            proc = ListRendererPostProcessors[type_info[:type]]
            proc.(self, name, type_info) if proc
        end
    end

    super
end
post_run() click to toggle source
Calls superclass method
# File lib/engine2/action.rb, line 678
def post_run
    super

    unless panel[:class]
        panel_class case @meta[:field_list].size
        when 1..3; ''
        when 4..6; 'modal-large'
        else; 'modal-huge'
        end
    end

    @meta[:primary_fields] = assets[:model].primary_keys
end
pre_run() click to toggle source
Calls superclass method
# File lib/engine2/action.rb, line 640
def pre_run
    super
    config.merge!(per_page: 10, use_count: false, selectable: true) # search_active: false,

    panel_template 'scaffold/list'
    panel_title "#{assets[:model].model_icon.icon} #{LOCS[assets[:model].model_route]}"
    loc! LOCS[:list_locs]
    menu :menu do
        properties break: 2, group_class: "btn-group-sm"
        option :search_toggle, icon: "search", show: "action.meta.search_field_list", active: "action.ui_state.search_active", button_loc: false
        # divider
        option :refresh, icon: "refresh", button_loc: false
        option :default_order, icon: "signal", button_loc: false
        divider
        option :debug_info, icon: "list-alt" do
            option :show_meta, icon: "eye-open"
        end if Handler::development?
    end

    menu :item_menu do
        properties break: 1, group_class: "btn-group-sm"
    end

    @meta[:state] = [:query, :ui_state]
end
search_live(*flds) click to toggle source
# File lib/engine2/action.rb, line 752
def search_live *flds
    if flds.empty?
        flds = @meta[:search_field_list]
        @meta[:disable_search_button] = true
    end
    fields! *flds, search_live: true
end
search_template(template) click to toggle source
# File lib/engine2/action.rb, line 739
def search_template template
    panel[:search_template] = template
end
searchable(*flds) click to toggle source
# File lib/engine2/action.rb, line 760
def searchable *flds
    @meta.delete(:tab_list)
    @meta.delete(:tabs)
    search_template 'scaffold/search'
    @meta[:search_field_list] = *flds
end
searchable_tabs(tabs) click to toggle source
# File lib/engine2/action.rb, line 767
def searchable_tabs tabs
    searchable *tabs.map{|name, fields|fields}.flatten
    field_tabs tabs
end
select_toggle_menu() click to toggle source
# File lib/engine2/action.rb, line 671
def select_toggle_menu
    m = menu :menu
    unless m.option_index(:select_toggle, false)
        m.option_after :default_order, :select_toggle, icon: "check", enabled: "action.meta.config.selectable", active: "action.selection", button_loc: false
    end
end
sortable(*flds) click to toggle source
# File lib/engine2/action.rb, line 743
def sortable *flds
    flds = @meta[:field_list] if flds.empty?
    fields! *flds, sort: true
end
template() click to toggle source
# File lib/engine2/action.rb, line 772
def template
    SearchTemplates
end