Sha256: 99ebbea861e0d7cd187e5d97d066392137bf8363aab07b53dcadff8407356e6b

Contents?: true

Size: 1.92 KB

Versions: 5

Compression:

Stored size: 1.92 KB

Contents

# frozen_string_literal: true

module Phlexi
  module Display
    module Components
      module Concerns
        module DisplaysValue
          def view_template
            return render(field.placeholder_tag(**@placeholder_attributes)) unless field.has_value?

            if field.multiple? && field.value.respond_to?(:each)
              wrapped {
                field.value.each { |value|
                  value = normalize_value(value)
                  render_value(value)
                }
              }
            else
              wrapped {
                value = normalize_value(field.value)
                render_value(value)
              }
            end
          end

          def wrapped(&)
            div(
              id: attributes.delete(:id),
              class: tokens(component_name, "value_wrapper", themed(:value_wrapper), themed(:"#{component_name}_value_wrapper")),
              &
            )
          end

          def render_values(values)
            values.each do |value|
              render_value(normalize_value(value))
            end
          end

          # Renders the field value for display.
          #
          # @return [String] the formatted field value for display.
          def render_value(value)
            raise NotImplementedError, "#{self.class}#render_value"
          end

          protected

          def build_attributes
            super

            @placeholder_attributes = attributes.delete(:placeholder_attributes) || {}
            attributes[:id] = field.dom.id if attributes[:id] == "#{field.dom.id}_#{component_name}"
          end

          def build_component_class
            return if attributes[:class] == false

            super
            attributes[:class] = tokens(component_name, "value", attributes[:class].sub(component_name, ""))
          end

          def normalize_value(value)
            value.to_s
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
phlexi-display-0.0.9 lib/phlexi/display/components/concerns/displays_value.rb
phlexi-display-0.0.8 lib/phlexi/display/components/concerns/displays_value.rb
phlexi-display-0.0.7 lib/phlexi/display/components/concerns/displays_value.rb
phlexi-display-0.0.6 lib/phlexi/display/components/concerns/displays_value.rb
phlexi-display-0.0.5 lib/phlexi/display/components/concerns/displays_value.rb