module React

Constants

HTML_TAGS
VERSION

Public Class Methods

create_element(type, properties = {}) { |].each do |ele| params << ele| ... } click to toggle source
# File lib/react/opal/top_level.rb, line 14
def self.create_element(type, properties = {})
  params = []

  # Component Spec or Normal DOM
  native = `(typeof type === 'function')` || HTML_TAGS.include?(type)
  params << if native
              type
            elsif type.kind_of?(Class)
              raise "Provided class should define `render` method" if !(type.method_defined? :render)
              React::ComponentFactory.native_component_class(type)
            else
              raise "#{type} not implemented"
            end

  # Passed in properties
  props = camel_case_hash_keys(properties) do |key, value|
    if key == "class_name" && value.is_a?(Hash)
      value.inject([]) { |ary, (k, v)| v ? ary.push(k) : ary }.join(" ")
    elsif key == 'value_link'
      process_value_link value
    else
      value
    end
  end

  params << props.shallow_to_n

  # Children Nodes
  if block_given?
    [yield].flatten.each do |ele|
      params << ele
    end
  end