module Coco module AppHelper def coco_link(*args, **kwargs, &block) href, content = args[0..2].reverse! if kwargs.key?(:modal) modal_name = (kwargs[:modal] == true) ? "default" : kwargs[:modal] kwargs[:data] = kwargs.fetch(:data, {}).merge(coco_modal_data_attributes(modal_name)) kwargs.delete(:modal) end if kwargs.key?(:frame) turbo_data = {turbo: true, turbo_frame: kwargs[:frame]} kwargs[:data] = kwargs.fetch(:data, {}).merge(turbo_data) kwargs.delete(:frame) end link = Coco::App::Elements::Link.new(href: href, **kwargs) link = link.with_content(content) unless block render(link, &block) end def coco_button(href = nil, **kwargs, &block) button = if kwargs.key?(:action) || kwargs.key?(:method) || kwargs.key?(:params) "ButtonTo" else "Button" end kwargs[:button_element] ||= {} if kwargs.key?(:modal) modal_name = (kwargs[:modal] == true) ? "default" : kwargs[:modal] kwargs[:button_element][:data] = kwargs[:button_element].fetch(:data, {}).merge(coco_modal_data_attributes(modal_name)) kwargs.delete(:modal) end if kwargs.key?(:frame) turbo_data = {turbo: true, turbo_frame: kwargs[:frame]} kwargs[:button_element][:data] = kwargs[:button_element].fetch(:data, {}).merge(turbo_data) kwargs.delete(:frame) end component = "Coco::App::Elements::#{button}".constantize.new(href: href, **kwargs) render component, &block end def coco_menu_button(**, &block) render Coco::App::Elements::MenuButton.new(**), &block end def coco_confirm_button(href = nil, **, &block) render Coco::App::Elements::ConfirmButton.new(href: href, **), &block end def coco_color_picker_button(**, &block) render Coco::App::Elements::ColorPickerButton.new(**), &block end def coco_image_picker_button(**, &block) render Coco::App::Elements::ImagePickerButton.new(**), &block end def coco_layout_picker_button(**, &block) render Coco::App::Elements::LayoutPickerButton.new(**), &block end def coco_dropdown_button(**, &block) render Coco::App::Elements::DropdownButton.new(**), &block end def coco_button_group(**, &block) render Coco::App::Elements::ButtonGroup.new(**), &block end def coco_toolbar(**, &block) render Coco::App::Elements::Toolbar.new(**), &block end def coco_seamless_textarea(**, &block) render Coco::App::Elements::SeamlessTextarea.new(**), &block end def coco_snackbar(**, &block) render Coco::App::Elements::Snackbar.new(**), &block end def coco_notice(**, &block) render Coco::App::Elements::Notice.new(**), &block end def coco_toast(**, &block) render Coco::App::Elements::Toast.new(**), &block end def coco_system_banner(**, &block) render Coco::App::Elements::SystemBanner.new(**), &block end def coco_form_with(**, &block) form_with(**, builder: Coco::AppFormBuilder, &block) end def coco_form_for(*, **, &block) form_for(*, **, builder: Coco::AppFormBuilder, &block) end def coco_fields(**, &block) fields(**, builder: Coco::AppFormBuilder, &block) end end end