app/helpers/lookbook/component_helper.rb in lookbook-1.0.8 vs app/helpers/lookbook/component_helper.rb in lookbook-1.1.0
- old
+ new
@@ -1,37 +1,73 @@
module Lookbook
module ComponentHelper
COMPONENT_CLASSES = {} # cache for constantized references
def icon(name, **attrs)
- render Lookbook::Icon::Component.new(name: name, **attrs)
+ lookbook_render :icon, name: name, **attrs
end
def code(language = :html, **attrs, &block)
attrs[:language] ||= language
- render Lookbook::Code::Component.new(**attrs), &block
+ lookbook_render :code, **attrs, &block
end
- def render_component(ref, **attrs, &block)
- klass = component_class(ref)
- comp = attrs.key?(:content) ? klass.new(**attrs.except(:content)).with_content(attrs[:content]) : klass.new(**attrs)
- render comp, &block
+ def lookbook_tag(tag = :div, **attrs, &block)
+ lookbook_render :tag, tag: tag, **attrs, &block
end
- def render_tag(tag = :div, **attrs, &block)
- render Lookbook::TagComponent.new(tag: tag, **attrs), &block
+ def lookbook_render(ref, **attrs, &block)
+ comp = if ref.is_a? ViewComponent::Base
+ ref
+ else
+ klass = component_class(ref)
+ attrs.key?(:content) ? klass.new(**attrs.except(:content)).with_content(attrs[:content]) : klass.new(**attrs)
+ end
+ if block && !attrs.key?(:content)
+ public_send render_method_name, comp, &block
+ else
+ public_send render_method_name, comp
+ end
end
- if Rails.version.to_f < 6.1
+ unless respond_to? :class_names
def class_names(*args)
tokens = build_tag_values(*args).flat_map { |value| value.to_s.split(/\s+/) }.uniq
+
safe_join(tokens, " ")
end
+
+ def build_tag_values(*args)
+ tag_values = []
+
+ args.each do |tag_value|
+ case tag_value
+ when Hash
+ tag_value.each do |key, val|
+ tag_values << key.to_s if val && key.present?
+ end
+ when Array
+ tag_values.concat build_tag_values(*tag_value)
+ else
+ tag_values << tag_value.to_s if tag_value.present?
+ end
+ end
+
+ tag_values
+ end
end
private
+ def render_method_name
+ if Rails.application.config.view_component.render_monkey_patch_enabled || Rails.version.to_f >= 6.1
+ :render
+ else
+ :render_component
+ end
+ end
+
def component_class(ref)
klass = COMPONENT_CLASSES[ref]
if klass.nil?
ref = ref.to_s.tr("-", "_")
class_namespace = ref.camelize
@@ -41,25 +77,8 @@
klass = "Lookbook::#{class_namespace}Component".constantize
end
COMPONENT_CLASSES[ref] = klass
end
klass
- end
-
- def build_tag_values(*args)
- tag_values = []
- args.each do |tag_value|
- case tag_value
- when Hash
- tag_value.each do |key, val|
- tag_values << key.to_s if val && key.present?
- end
- when Array
- tag_values.concat build_tag_values(*tag_value)
- else
- tag_values << tag_value.to_s if tag_value.present?
- end
- end
- tag_values
end
end
end