lib/react/component/api.rb in isomorfeus-react-16.10.4 vs lib/react/component/api.rb in isomorfeus-react-16.10.5

- old
+ new

@@ -61,10 +61,39 @@ else @native.JS.forceUpdate end end + def get_react_element(arg, &block) + if block_given? + # execute block, fetch last element from buffer + %x{ + let last_buffer_length = Opal.React.render_buffer[Opal.React.render_buffer.length - 1].length; + let last_buffer_element = Opal.React.render_buffer[Opal.React.render_buffer.length - 1][last_buffer_length - 1]; + block.$call(); + // console.log("get_react_element popping", Opal.React.render_buffer, Opal.React.render_buffer.toString()) + let new_element = Opal.React.render_buffer[Opal.React.render_buffer.length - 1].pop(); + if (last_buffer_element === new_element) { #{raise "Block did not create any React element!"} } + return new_element; + } + else + # element was rendered before being passed as arg + # fetch last element from buffer + # `console.log("get_react_element popping", Opal.React.render_buffer, Opal.React.render_buffer.toString())` + `Opal.React.render_buffer[Opal.React.render_buffer.length - 1].pop()` + end + end + alias gre get_react_element + + def render_react_element(el) + # push el to buffer + `Opal.React.render_buffer[Opal.React.render_buffer.length - 1].push(el)` + # `console.log("render_react_element pushed", Opal.React.render_buffer, Opal.React.render_buffer.toString())` + nil + end + alias rre render_react_element + def ref(name) `#@native[name]` end def ruby_ref(name) @@ -75,6 +104,6 @@ def set_state(updater, &callback) @state.set_state(updater, &callback) end end end -end \ No newline at end of file +end