Sha256: c69153fc4ed2ae46f841616dd323dd374a14409dac19c1d3c9687edb1c96c0d4

Contents?: true

Size: 1.3 KB

Versions: 11

Compression:

Stored size: 1.3 KB

Contents

module Coco
  class ButtonTo < Coco::Component
    include Concerns::WrapsComponent
    include Concerns::AcceptsOptions

    accepts_option :fit, from: [:auto, :full]

    wraps_component :button do |args|
      Coco::Button.new(
        type: :submit,
        fit: get_option_value(:fit) || :auto,
        **args
      )
    end

    %i[confirmation icon].each do |slot_name|
      renders_one slot_name, ->(**kwargs, &block) do
        button.send(:"with_#{slot_name}", **kwargs, &block)
      end
    end

    attr_reader :method

    def initialize(form: nil, params: nil, method: :post, action: nil, href: nil, turbo: false, turbo_frame: nil, **kwargs)
      @form_args = form.to_h
      @action = action || href
      @method = method
      @params = params.to_h
      @turbo = turbo
      @turbo_frame = turbo_frame
    end

    def params
      to_form_params(@params)
    end

    def form_args
      {
        url: action,
        method: method,
        data: {
          turbo: turbo_data_attr_value,
          turbo_frame: @turbo_frame
        }
      }.deep_merge(@form_args)
    end

    def turbo_data_attr_value
      if @turbo == false
        "false"
      elsif @turbo == true
        "true"
      end
    end

    def action
      @action.is_a?(String) ? @action : helpers.url_for(@action)
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
coveragebook_components-0.19.8 app/components/coco/buttons/button_to/button_to.rb
coveragebook_components-0.19.7 app/components/coco/buttons/button_to/button_to.rb
coveragebook_components-0.19.6 app/components/coco/buttons/button_to/button_to.rb
coveragebook_components-0.19.5 app/components/coco/buttons/button_to/button_to.rb
coveragebook_components-0.19.4 app/components/coco/buttons/button_to/button_to.rb
coveragebook_components-0.19.3 app/components/coco/buttons/button_to/button_to.rb
coveragebook_components-0.19.2 app/components/coco/buttons/button_to/button_to.rb
coveragebook_components-0.19.1 app/components/coco/buttons/button_to/button_to.rb
coveragebook_components-0.19.0 app/components/coco/buttons/button_to/button_to.rb
coveragebook_components-0.18.8 app/components/coco/buttons/button_to/button_to.rb
coveragebook_components-0.18.7 app/components/coco/buttons/button_to/button_to.rb