@@ -104,36 +104,42 @@ def self.create_element(type, properties = {}, &block)
104104 params << create_native_react_class ( type )
105105 elsif React ::Component ::Tags ::HTML_TAGS . include? ( type )
106106 params << type
107+ html_tag = true
107108 elsif type . is_a? String
108109 return React ::Element . new ( type )
109110 else
110111 raise "#{ type } not implemented"
111112 end
112113
113- # Passed in properties
114- params << convert_props ( properties )
114+ # Convert Passed in properties
115+ properties = convert_props ( properties , html_tag )
116+ params << properties . shallow_to_n
115117
116118 # Children Nodes
117119 if block_given?
118- children = [ yield ] . flatten . each do |ele |
120+ [ yield ] . flatten . each do |ele |
119121 params << ele . to_n
120122 end
121123 end
122- return React ::Element . new ( `React.createElement.apply(null, #{ params } )` , type , properties , block )
124+ React ::Element . new ( `React.createElement.apply(null, #{ params } )` , type , properties , block )
123125 end
124126
125127 def self . clear_component_class_cache
126128 @@component_classes = { }
127129 end
128130
129- def self . convert_props ( properties )
131+ def self . convert_props ( properties , html_tag )
130132 raise "Component parameters must be a hash. Instead you sent #{ properties } " unless properties . is_a? Hash
131133 props = { }
134+ updated = false
132135 properties . map do |key , value |
133136 if key == "class_name" && value . is_a? ( Hash )
134137 props [ lower_camelize ( key ) ] = `React.addons.classSet(#{ value . to_n } )`
135138 elsif key == "class"
136139 props [ "className" ] = value
140+ elsif key == 'value' && value . nil? && html_tag
141+ updated = true
142+ props [ 'value' ] = ''
137143 elsif [ "style" , "dangerously_set_inner_HTML" ] . include? key
138144 props [ lower_camelize ( key ) ] = value . to_n
139145 elsif React ::HASH_ATTRIBUTES . include? ( key ) && value . is_a? ( Hash )
@@ -142,16 +148,16 @@ def self.convert_props(properties)
142148 props [ React . html_attr? ( lower_camelize ( key ) ) ? lower_camelize ( key ) : key ] = value
143149 end
144150 end
145- props . shallow_to_n
151+ props
146152 end
147153
148154 private
149155
150156 def self . lower_camelize ( snake_cased_word )
151- words = snake_cased_word . split ( "_" )
157+ words = snake_cased_word . split ( '_' )
152158 result = [ words . first ]
153159 result . concat ( words [ 1 ..-1 ] . map { |word | word [ 0 ] . upcase + word [ 1 ..-1 ] } )
154- result . join ( "" )
160+ result . join ( '' )
155161 end
156162 end
157163end
0 commit comments