Class: Plutonium::UI::Display::Components::Badge
- Inherits:
-
Phlexi::Display::Components::Base
- Object
- Phlexi::Display::Components::Base
- Plutonium::UI::Display::Components::Badge
- Includes:
- Phlexi::Display::Components::Concerns::DisplaysValue
- Defined in:
- lib/plutonium/ui/display/components/badge.rb
Overview
Renders a scalar value (typically an enum / status) as a colored pill.
display :status, as: :badge
display :status, as: :badge, colors: {archived: :neutral, vip: :accent}
Constant Summary collapse
- VARIANTS =
%i[neutral primary secondary success danger warning info accent].freeze
- DECORATIVE =
Decorative variants used for values with no semantic meaning, chosen deterministically so a given value always gets the same color.
%i[primary secondary info accent].freeze
- SEMANTIC_VARIANTS =
{ "active" => :success, "approved" => :success, "completed" => :success, "complete" => :success, "success" => :success, "succeeded" => :success, "paid" => :success, "published" => :success, "enabled" => :success, "confirmed" => :success, "verified" => :success, "live" => :success, "available" => :success, "fulfilled" => :success, "done" => :success, "pending" => :warning, "processing" => :warning, "in_progress" => :warning, "draft" => :warning, "review" => :warning, "waiting" => :warning, "scheduled" => :warning, "trial" => :warning, "paused" => :warning, "on_hold" => :warning, "partial" => :warning, "failed" => :danger, "rejected" => :danger, "cancelled" => :danger, "canceled" => :danger, "error" => :danger, "inactive" => :danger, "disabled" => :danger, "expired" => :danger, "banned" => :danger, "blocked" => :danger, "closed" => :danger, "unpaid" => :danger, "overdue" => :danger, "refunded" => :danger, "declined" => :danger, "new" => :info, "queued" => :info, "open" => :info, "info" => :info }.freeze
Class Method Summary collapse
-
.decorative_variant_for(key) ⇒ Object
Stable across processes (String#hash is seeded, so we digest instead).
- .humanize(value) ⇒ Object
- .variant_for(value, colors: nil) ⇒ Object
Instance Method Summary collapse
Class Method Details
.decorative_variant_for(key) ⇒ Object
Stable across processes (String#hash is seeded, so we digest instead).
53 54 55 56 |
# File 'lib/plutonium/ui/display/components/badge.rb', line 53 def self.decorative_variant_for(key) index = Digest::SHA256.hexdigest(key)[0, 8].to_i(16) % DECORATIVE.size DECORATIVE[index] end |
.humanize(value) ⇒ Object
58 59 60 |
# File 'lib/plutonium/ui/display/components/badge.rb', line 58 def self.humanize(value) value.to_s.humanize end |
.variant_for(value, colors: nil) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/plutonium/ui/display/components/badge.rb', line 40 def self.variant_for(value, colors: nil) return :neutral if value.nil? if colors override = colors[value] || colors[value.to_s.to_sym] || colors[value.to_s] return override if override && VARIANTS.include?(override.to_sym) end key = value.to_s.downcase SEMANTIC_VARIANTS[key] || decorative_variant_for(key) end |
Instance Method Details
#render_value(value) ⇒ Object
62 63 64 65 66 67 |
# File 'lib/plutonium/ui/display/components/badge.rb', line 62 def render_value(value) variant = self.class.variant_for(value, colors: @colors) span(**attributes, class: tokens("pu-badge", "pu-badge-#{variant}")) do plain self.class.humanize(value) end end |