Module: Engine2::ActionListSupport
Instance Attribute Summary collapse
Instance Method Summary
collapse
#hide_pk, #node_defined, #show_pk, #unsupported_association
#config, #decorate, #field_filter, #fields, #fields!, #hide_fields, #loc!, #render, #show_fields
#select_tabs, #tab
#modal_action, #panel, #panel_class, #panel_footer, #panel_header, #panel_panel_template, #panel_template, #panel_title
#menu, #menu?
#on_change
#draggable
Instance Attribute Details
Returns the value of attribute filters.
625
626
627
|
# File 'lib/engine2/action.rb', line 625
def filters
@filters
end
|
Returns the value of attribute orders.
625
626
627
|
# File 'lib/engine2/action.rb', line 625
def orders
@orders
end
|
Instance Method Details
#field_tabs(hash) ⇒ Object
653
654
655
656
|
# File 'lib/engine2/action.rb', line 653
def field_tabs hash
super
search_template 'scaffold/search_tabs'
end
|
#filter(name, &blk) ⇒ Object
755
756
757
|
# File 'lib/engine2/action.rb', line 755
def filter name, &blk
(@filters ||= {})[name] = blk
end
|
#filter_case_insensitive(name) ⇒ Object
759
760
761
762
|
# File 'lib/engine2/action.rb', line 759
def filter_case_insensitive name
raise E2Error.new("Field '#{name}' needs to be a string one") unless assets[:model].find_type_info(name)[:otype] == :string
filter(name){|handler, query, hash| query.where(name.ilike("%#{hash[name]}%")) }
end
|
#order(name, &blk) ⇒ Object
764
765
766
|
# File 'lib/engine2/action.rb', line 764
def order name, &blk
(@orders ||= {})[name] = blk
end
|
#post_process ⇒ Object
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
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
|
# File 'lib/engine2/action.rb', line 684
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)
fields(name)[:render] ||= begin 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
|
665
666
667
668
669
670
671
672
673
674
675
676
|
# File 'lib/engine2/action.rb', line 665
def post_run
unless panel[:class]
panel_class case @meta[:field_list].size
when 1..3; ''
when 4..6; 'modal-large'
else; 'modal-huge'
end
end
super
@meta[:primary_fields] = assets[:model].primary_keys
end
|
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
|
# File 'lib/engine2/action.rb', line 627
def pre_run
super
config.merge!(per_page: 10, use_count: false, selectable: true)
panel_template 'scaffold/list'
panel_title "#{:list.icon} #{LOCS[assets[:model].name.to_sym]}"
loc! LOCS[:list_locs]
:menu do
properties break: 2, group_class: "btn-group-xs"
option :search_toggle, icon: "search", show: "action.meta.search_field_list", active: "action.ui_state.search_active", button_loc: false
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
:item_menu do
properties break: 1, group_class: "btn-group-xs"
end
@meta[:state] = [:query, :ui_state]
end
|
#search_live(*flds) ⇒ Object
734
735
736
737
|
# File 'lib/engine2/action.rb', line 734
def search_live *flds
flds = @meta[:search_field_list] if flds.empty?
fields! *flds, search_live: true
end
|
#search_template(template) ⇒ Object
725
726
727
|
# File 'lib/engine2/action.rb', line 725
def search_template template
panel[:search_template] = template
end
|
#searchable(*flds) ⇒ Object
739
740
741
742
743
744
|
# File 'lib/engine2/action.rb', line 739
def searchable *flds
@meta.delete(:tab_list)
@meta.delete(:tabs)
search_template 'scaffold/search'
@meta[:search_field_list] = *flds
end
|
#searchable_tabs(tabs) ⇒ Object
746
747
748
749
|
# File 'lib/engine2/action.rb', line 746
def searchable_tabs tabs
searchable *tabs.map{|name, fields|fields}.flatten
field_tabs tabs
end
|
658
659
660
661
662
663
|
# File 'lib/engine2/action.rb', line 658
def
m = :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) ⇒ Object
729
730
731
732
|
# File 'lib/engine2/action.rb', line 729
def sortable *flds
flds = @meta[:field_list] if flds.empty?
fields! *flds, sort: true
end
|
751
752
753
|
# File 'lib/engine2/action.rb', line 751
def template
SearchTemplates
end
|