format :html do setting_list_view_options = { cache: :never, wrap: { slot: { class: "_setting-list" } } } # rule can be edited in-place view :quick_edit_setting_list, setting_list_view_options do quick_edit_setting_list end # show the settings in bars view :bar_setting_list, setting_list_view_options do group = voo.filter&.to_sym || :all category_setting_list_items(group, :bar, hide: :full_name).join("\n").html_safe end # a click on a setting opens the rule editor in an overlay view :pill_setting_list, setting_list_view_options do pill_setting_list end # a click on a setting opens the rule editor in a modal view :modal_pill_setting_list, setting_list_view_options do pill_setting_list true end view :accordion_rule_list, setting_list_view_options do class_up "accordion", "bar-accordion" category_accordion(:rule_board_link) do |list| board_pills list end end view :accordion_bar_list do class_up "accordion", "bar-accordion" category_accordion(:bar) do |list| list_tag(class: "nav flex-column", items: { class: "nav-item" }) { list } end end def category_accordion view, &block class_up "accordion-item", "_setting-group" wrap_with :div, class: "_setting-list" do accordion do category_accordion_item(view, &block) end end end def category_accordion_item view Card::Setting.groups.keys.map do |group_key| list = card.group_settings(group_key).map do |setting| setting_list_item setting, view end body = yield list accordion_item "#{group_key} #{count_badge(list.size)}", body: body, context: group_key end end def count_badge count "#{count}" end view :overlay_rule_list_link, cache: :never do opts = board_link_opts(class: "edit-rule-link btn btn-primary") # opts[:path].delete(:layout) wrap_with :div do link_to_view(:core, "Show existing rules", opts) end end def quick_edit_setting_list classes = "nav nav-pills flex-column board-pills _setting-list _setting-group" list_tag class: classes do category_setting_list_items :field, :quick_edit end end def pill_setting_list open_rule_in_modal=false item_view = open_rule_in_modal ? :rule_nest_editor_link : :rule_board_link board_pills category_setting_list_items(:all, item_view) end view :pill_setting_list, cache: :never, wrap: { slot: { class: "_setting-list" } } do pill_setting_list end def category_setting_list_items category, item_view, options={} card.category_settings(category).map do |setting| setting_list_item setting, item_view, options end end def setting_list_item setting, view, opts={} return "" unless show_view? setting rule_card = card.fetch setting, new: {} nest(rule_card, opts.merge(view: view)).html_safe end end