class ERBLint::Linters::ArgumentMappers::Button

Maps classes in a button element to arguments for the Button component.

Constants

ATTRIBUTES
DEFAULT_TAG
SCHEME_MAPPINGS
TYPE_OPTIONS
VARIANT_MAPPINGS

Public Instance Methods

attribute_to_args(attribute) click to toggle source
# File lib/primer/view_components/linters/argument_mappers/button.rb, line 34
def attribute_to_args(attribute)
  attr_name = attribute.name

  case attr_name
  when "disabled"
    { disabled: true }
  when "type"
    # button is the default type, so we don't need to do anything.
    return {} if attribute.value == "button"

    raise ConversionError, "Button component does not support type \"#{attribute.value}\"" unless TYPE_OPTIONS.include?(attribute.value)

    { type: ":#{attribute.value}" }
  else
    { attr_name.to_sym => erb_helper.convert(attribute) }
  end
end
classes_to_args(classes) click to toggle source
# File lib/primer/view_components/linters/argument_mappers/button.rb, line 52
def classes_to_args(classes)
  classes.each_with_object({ classes: [] }) do |class_name, acc|
    next if class_name == "btn"

    if SCHEME_MAPPINGS[class_name] && acc[:scheme].nil?
      acc[:scheme] = SCHEME_MAPPINGS[class_name]
    elsif VARIANT_MAPPINGS[class_name] && acc[:variant].nil?
      acc[:variant] = VARIANT_MAPPINGS[class_name]
    elsif class_name == "btn-block"
      acc[:block] = true
    elsif class_name == "BtnGroup-item"
      acc[:group_item] = true
    else
      acc[:classes] << class_name
    end
  end
end