@@ -220,26 +220,30 @@ class StoreRenderer {
220220
221221const renderedRoots = new Map < string , ComponentRenderer > ( ) ;
222222
223- export function renderOrHydrateComponent ( domIdOrElement : string | Element ) : ComponentRenderer | undefined {
223+ export function renderOrHydrateComponent ( domIdOrElement : string | Element ) {
224224 const domId = getDomId ( domIdOrElement ) ;
225225 debugTurbolinks ( 'renderOrHydrateComponent' , domId ) ;
226226 let root = renderedRoots . get ( domId ) ;
227227 if ( ! root ) {
228228 root = new ComponentRenderer ( domIdOrElement ) ;
229229 renderedRoots . set ( domId , root ) ;
230230 }
231- return root ;
231+ return root . waitUntilRendered ( ) ;
232232}
233233
234- export function renderOrHydrateForceLoadedComponents ( ) : void {
235- const els = document . querySelectorAll ( `.js-react-on-rails-component[data-force-load="true"]` ) ;
236- els . forEach ( ( el ) => renderOrHydrateComponent ( el ) ) ;
234+ async function forAllElementsAsync (
235+ selector : string ,
236+ callback : ( el : Element ) => Promise < void > ,
237+ ) : Promise < void > {
238+ const els = document . querySelectorAll ( selector ) ;
239+ await Promise . all ( Array . from ( els ) . map ( callback ) ) ;
237240}
238241
239- export function renderOrHydrateAllComponents ( ) : void {
240- const els = document . querySelectorAll ( `.js-react-on-rails-component` ) ;
241- els . forEach ( ( el ) => renderOrHydrateComponent ( el ) ) ;
242- }
242+ export const renderOrHydrateForceLoadedComponents = ( ) =>
243+ forAllElementsAsync ( '.js-react-on-rails-component[data-force-load="true"]' , renderOrHydrateComponent ) ;
244+
245+ export const renderOrHydrateAllComponents = ( ) =>
246+ forAllElementsAsync ( '.js-react-on-rails-component' , renderOrHydrateComponent ) ;
243247
244248function unmountAllComponents ( ) : void {
245249 renderedRoots . forEach ( ( root ) => root . unmount ( ) ) ;
@@ -270,15 +274,11 @@ export async function hydrateStore(storeNameOrElement: string | Element) {
270274 await storeRenderer . waitUntilHydrated ( ) ;
271275}
272276
273- export async function hydrateForceLoadedStores ( ) : Promise < void > {
274- const els = document . querySelectorAll ( `[${ REACT_ON_RAILS_STORE_ATTRIBUTE } ][data-force-load="true"]` ) ;
275- await Promise . all ( Array . from ( els ) . map ( ( el ) => hydrateStore ( el ) ) ) ;
276- }
277+ export const hydrateForceLoadedStores = ( ) =>
278+ forAllElementsAsync ( `[${ REACT_ON_RAILS_STORE_ATTRIBUTE } ][data-force-load="true"]` , hydrateStore ) ;
277279
278- export async function hydrateAllStores ( ) : Promise < void > {
279- const els = document . querySelectorAll ( `[${ REACT_ON_RAILS_STORE_ATTRIBUTE } ]` ) ;
280- await Promise . all ( Array . from ( els ) . map ( ( el ) => hydrateStore ( el ) ) ) ;
281- }
280+ export const hydrateAllStores = ( ) =>
281+ forAllElementsAsync ( `[${ REACT_ON_RAILS_STORE_ATTRIBUTE } ]` , hydrateStore ) ;
282282
283283function unmountAllStores ( ) : void {
284284 storeRenderers . forEach ( ( storeRenderer ) => storeRenderer . unmount ( ) ) ;
0 commit comments