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.
642
643
644
|
# File 'lib/engine2/action.rb', line 642
def filters
@filters
end
|
Returns the value of attribute orders.
642
643
644
|
# File 'lib/engine2/action.rb', line 642
def orders
@orders
end
|
Instance Method Details
#field_tabs(hash) ⇒ Object
670
671
672
673
|
# File 'lib/engine2/action.rb', line 670
def field_tabs hash
super
search_template 'scaffold/search_tabs'
end
|
#filter(name, &blk) ⇒ Object
772
773
774
|
# File 'lib/engine2/action.rb', line 772
def filter name, &blk
(@filters ||= {})[name] = blk
end
|
#filter_case_insensitive(name) ⇒ Object
776
777
778
779
|
# File 'lib/engine2/action.rb', line 776
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
781
782
783
|
# File 'lib/engine2/action.rb', line 781
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
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
|
# File 'lib/engine2/action.rb', line 701
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
|
682
683
684
685
686
687
688
689
690
691
692
693
|
# File 'lib/engine2/action.rb', line 682
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
|
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
|
# File 'lib/engine2/action.rb', line 644
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
751
752
753
754
|
# File 'lib/engine2/action.rb', line 751
def search_live *flds
flds = @meta[:search_field_list] if flds.empty?
fields! *flds, search_live: true
end
|
#search_template(template) ⇒ Object
742
743
744
|
# File 'lib/engine2/action.rb', line 742
def search_template template
panel[:search_template] = template
end
|
#searchable(*flds) ⇒ Object
756
757
758
759
760
761
|
# File 'lib/engine2/action.rb', line 756
def searchable *flds
@meta.delete(:tab_list)
@meta.delete(:tabs)
search_template 'scaffold/search'
@meta[:search_field_list] = *flds
end
|
#searchable_tabs(tabs) ⇒ Object
763
764
765
766
|
# File 'lib/engine2/action.rb', line 763
def searchable_tabs tabs
searchable *tabs.map{|name, fields|fields}.flatten
field_tabs tabs
end
|
675
676
677
678
679
680
|
# File 'lib/engine2/action.rb', line 675
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
746
747
748
749
|
# File 'lib/engine2/action.rb', line 746
def sortable *flds
flds = @meta[:field_list] if flds.empty?
fields! *flds, sort: true
end
|
768
769
770
|
# File 'lib/engine2/action.rb', line 768
def template
SearchTemplates
end
|