on develop help sign in
Fix nested prerender
d5dbab2Tom Smalley
reflex-dom-core/src/Reflex/Dom/Builder/Hydration.hs+1
@@ -40,6 +40,7 @@ module Reflex.Dom.Builder.Hydration
40 , localEnv
40 , localEnv
41 , addHydrationStepWithSetup
41 , addHydrationStepWithSetup
42 , addHydrationStep
42 , addHydrationStep
43+ , getHydrationMode
43 , hydrateNode
44 , hydrateNode
44 , getPreviousNode, setPreviousNode
45 , getPreviousNode, setPreviousNode
45 , runHydrationDomBuilderT
46 , runHydrationDomBuilderT
reflex-dom-core/src/Reflex/Dom/Prerender.hs+16−16
@@ -81,22 +81,22 @@ instance (PrerenderClientConstraint' js m, ReflexHost t) => Prerender js (Immedi
81
81
82instance (PrerenderClientConstraint' js m, SupportsImmediateDomBuilder t m, ReflexHost t, PerformEvent t m) => Prerender js (HydrationDomBuilderT t m) where
82instance (PrerenderClientConstraint' js m, SupportsImmediateDomBuilder t m, ReflexHost t, PerformEvent t m) => Prerender js (HydrationDomBuilderT t m) where
83 prerenderClientDict = Just Dict
83 prerenderClientDict = Just Dict
84− prerenderWrapper = do
84+ prerenderWrapper = getHydrationMode >>= \case
85+ HydrationMode_Immediate -> pure (pure ())
86+ HydrationMode_Hydrating -> do
85− parent <- HydrationDomBuilderT $ asks _hydrationDomBuilderEnv_parent
87+ parent <- HydrationDomBuilderT $ asks _hydrationDomBuilderEnv_parent
86− hydrationMode <- HydrationDomBuilderT $ asks _hydrationDomBuilderEnv_hydrationMode
88+ hydrationMode <- HydrationDomBuilderT $ asks _hydrationDomBuilderEnv_hydrationMode
87− df <- Document.createDocumentFragment =<< askDocument
89+ df <- Document.createDocumentFragment =<< askDocument
88− initialParent <- liftIO $ readIORef parent
90+ initialParent <- liftIO $ readIORef parent
89− initialHydrationMode <- liftIO $ readIORef hydrationMode
90− liftIO $ writeIORef parent $ DOM.toNode df
91+ liftIO $ writeIORef parent $ DOM.toNode df
91− liftIO $ writeIORef hydrationMode HydrationMode_Immediate
92+ liftIO $ writeIORef hydrationMode HydrationMode_Immediate
92− pure $ do
93+ pure $ do
93− liftIO $ writeIORef parent initialParent
94+ liftIO $ writeIORef parent initialParent
94− liftIO $ writeIORef hydrationMode initialHydrationMode
95+ liftIO $ writeIORef hydrationMode HydrationMode_Hydrating
95− addHydrationStep $ do
96+ addHydrationStep $ do
96− liftIO $ putStrLn "Hydration step"
97− -- Delete up to the end marker
97+ -- Delete up to the end marker
98− after <- deleteToPrerenderEnd
98+ after <- deleteToPrerenderEnd
99− insertBefore df after
99+ insertBefore df after
100
100
101startMarker, endMarker :: IsString s => s
101startMarker, endMarker :: IsString s => s
102startMarker = "prerender/start"
102startMarker = "prerender/start"