module Isomorfeus module ReactViewHelper def mount_component(component_name, props = {}, asset = 'application_ssr.js') thread_id_asset = "#{Thread.current.object_id}#{asset}" render_result = "
10 sleep 0.01 transport_busy = Isomorfeus.ssr_contexts[thread_id_asset].exec('return global.Opal.Isomorfeus.Transport["$busy?"]()') end end end # build javascript for second render pass javascript = <<~JAVASCRIPT var rendered_tree = global.Opal.Isomorfeus.TopLevel.$render_component_to_string('#{component_name}', #{Oj.dump(props, mode: :strict)}) var application_state = global.Opal.Isomorfeus.store.native.getState(); if (typeof global.Opal.Isomorfeus.Transport !== 'undefined') { global.Opal.Isomorfeus.Transport.$disconnect(); } return [rendered_tree, application_state]; JAVASCRIPT # execute second render pass rendered_tree, application_state = Isomorfeus.ssr_contexts[thread_id_asset].exec(javascript) # build result render_result << " data-iso-state='#{Oj.dump(application_state, mode: :strict)}'>" render_result << rendered_tree else render_result << '>' end render_result << '
' render_result end end end