Sha256: 193ec5d541b2f81374605ec16454ffe73e7e8dee4a694e39fb99605d9f72b7ae

Contents?: true

Size: 1.45 KB

Versions: 3

Compression:

Stored size: 1.45 KB

Contents

module Coco
  module App
    class PlanCard < Coco::Component
      include Concerns::AcceptsOptions

      accepts_option :variant, from: [:active, :recommended, :negated, :selected, nil]

      renders_one :action, ->(*args, **kwargs, &block) do
        coco_button(*args,
          **kwargs,
          size: :sm,
          fit: :full,
          disabled: active?,
          &block)
      end

      renders_one :badge, ->(label, **kwargs) do
        coco_badge(label,
          class: "plan-badge",
          **kwargs,
          icon: :award,
          size: :sm)
      end

      renders_many :benefits, ->(benefit, &block) do
        @benefits[benefit] = block&.call
      end

      before_render do
        unless badge?
          if recommended?
            with_badge("Recommended")
          elsif active?
            with_badge("Current Plan")
          end
        end
      end

      attr_reader :name, :price, :promo, :qualifier

      def initialize(name:, price:, promo: nil, qualifier: nil, **kwargs)
        @name = name
        @price = price
        @promo = promo
        @qualifier = qualifier
        @benefits = {}
      end

      def active?
        get_option_value(:variant) == :active
      end

      def recommended?
        get_option_value(:variant) == :recommended
      end

      def negated?
        get_option_value(:variant) == :negated
      end

      def selected?
        get_option_value(:variant) == :selected
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
coveragebook_components-0.16.0 app/components/coco/app/plan_card/plan_card.rb
coveragebook_components-0.15.0 app/components/coco/app/plan_card/plan_card.rb
coveragebook_components-0.14.0 app/components/coco/app/plan_card/plan_card.rb