Sha256: bf8a7c85b62e89bfb135a30474e730067c7629c4641f0ec0f6f8960e895a32fe

Contents?: true

Size: 813 Bytes

Versions: 5

Compression:

Stored size: 813 Bytes

Contents

# frozen_string_literal: true

module Bs5
  class AlertComponent < ViewComponent::Base
    STYLES = %i[primary secondary success danger warning info light dark].freeze

    attr_reader :color, :is_dismissable

    include ActiveModel::Validations
    validates :color, style: true

    def initialize(color: :primary, is_dismissable: false)
      @color = color.to_sym
      @is_dismissable = is_dismissable
    end

    def before_render
      raise errors.full_messages.to_sentence if invalid?
    end

    def render?
      content.present?
    end

    private

    def component_class
      class_names = ['alert', contextual_class]
      class_names << %w[alert-dismissible fade show] if is_dismissable
      class_names.join(' ')
    end

    def contextual_class
      "alert-#{@color}"
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
bs5-0.0.24 app/components/bs5/alert_component.rb
bs5-0.0.23 app/components/bs5/alert_component.rb
bs5-0.0.22 app/components/bs5/alert_component.rb
bs5-0.0.21 app/components/bs5/alert_component.rb
bs5-0.0.20 app/components/bs5/alert_component.rb