Class: Journeybook::ComponentRenderer

Inherits:
Object
  • Object
show all
Defined in:
app/services/journeybook/component_renderer.rb

Instance Method Summary collapse

Constructor Details

#initialize(registry: Journeybook.components) ⇒ ComponentRenderer

Returns a new instance of ComponentRenderer.

Parameters:



6
7
8
# File 'app/services/journeybook/component_renderer.rb', line 6

def initialize(registry: Journeybook.components)
  @registry = registry
end

Instance Method Details

#render(component, page: nil) ⇒ String

Parameters:

Returns:

  • (String)


12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'app/services/journeybook/component_renderer.rb', line 12

def render(component, page: nil)
  return "" if component.hidden?

  registration = @registry.registered(component.name)
  component_class = @registry.fetch(component.name)
  schema = registration.normalized_props
  props = coerce_props(component.props.except(ComponentParser::HIDDEN_PROP), schema, page)
  link_targets = link_targets(component.props, schema, page)

  html = if component_class.respond_to?(:render)
    if accepts_keyword?(component_class.method(:render), :page)
      component_class.render(**props, page: page).to_s
    else
      component_class.render(**props).to_s
    end
  elsif accepts_keyword?(component_class.instance_method(:initialize), :page)
    component_class.new(**props, page: page).render.to_s
  else
    component_class.new(**props).render.to_s
  end
  apply_link_targets(html, link_targets)
end