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