on develop help sign in
Merge pull request #289 from reflex-frp/hydration/fix-prerender

Fix prerender

commit1069e54d7323f7b7287f4e7dc2c7ed7110242982 authorAli Abrar <aliabrar@gmail.com> dateFri 8 Mar 2019, 22:03 (8 years ago) parent14da2f1045f8a7
2 files changed+14−9
reflex-dom-core/reflex-dom-core.cabal+2−2 reflex-dom-core/src/Reflex/Dom/Prerender.hs+12−7
reflex-dom-core/reflex-dom-core.cabal+2−2
@@ -191,8 +191,8 @@ test-suite hydration
191191 ghc-prof-options: -fprof-auto -optP-DPROFILING
192192 main-is: hydration.hs
193193 type: exitcode-stdio-1.0
194− if !os(linux) || !arch(x86_64)-- || impl(ghc >= 8.4.0)
195− buildable: False
194+ -- if !os(linux) || !arch(x86_64)-- || impl(ghc >= 8.4.0)
195+ buildable: False
196196
197197-- broken test on base 4.11 & ghc 8.4.3
198198-- needs to be updated for changes in GHC.Stats
reflex-dom-core/src/Reflex/Dom/Prerender.hs+12−7
@@ -101,27 +101,32 @@ instance (Adjustable t m, PrerenderBaseConstraints js t m, ReflexHost t) => Prer
101101 env <- HydrationDomBuilderT ask
102102 events <- askEvents
103103 doc <- askDocument
104+ serverDf <- Document.createDocumentFragment doc -- server dom should not be mounted in the window's doc in hydration
104105 df <- Document.createDocumentFragment doc
105106 unreadyChildren <- HydrationDomBuilderT $ asks _hydrationDomBuilderEnv_unreadyChildren
106− hydrationMode <- liftIO $ newIORef HydrationMode_Immediate
107+ immediateMode <- liftIO $ newIORef HydrationMode_Immediate
107108 delayed <- liftIO $ newIORef $ pure ()
108− let env' = HydrationDomBuilderEnv
109+ let clientEnv = env
110+ { _hydrationDomBuilderEnv_parent = Left $ DOM.toNode df
111+ , _hydrationDomBuilderEnv_hydrationMode = immediateMode
112+ }
113+ serverEnv = HydrationDomBuilderEnv
109114 { _hydrationDomBuilderEnv_document = doc
110− , _hydrationDomBuilderEnv_parent = Left $ DOM.toNode df
115+ , _hydrationDomBuilderEnv_parent = Left $ DOM.toNode serverDf
111116 , _hydrationDomBuilderEnv_unreadyChildren = unreadyChildren
112117 , _hydrationDomBuilderEnv_commitAction = pure ()
113118 , _hydrationDomBuilderEnv_delayed = delayed
114− , _hydrationDomBuilderEnv_hydrationMode = hydrationMode
119+ , _hydrationDomBuilderEnv_hydrationMode = immediateMode
115120 , _hydrationDomBuilderEnv_switchover = never
116121 }
117− a0 <- lift $ runHydrationDomBuilderT server (env { _hydrationDomBuilderEnv_delayed = delayed }) events
122+ a0 <- lift $ runHydrationDomBuilderT server serverEnv events
118123 (a', trigger) <- newTriggerEvent
119124 getHydrationMode >>= \case
120125 HydrationMode_Immediate -> do
121− liftIO . trigger <=< lift $ runHydrationDomBuilderT (runPostBuildT client $ void a') env' events
126+ liftIO . trigger <=< lift $ runHydrationDomBuilderT (runPostBuildT client $ void a') clientEnv events
122127 append $ DOM.toNode df
123128 HydrationMode_Hydrating -> addHydrationStep $ do
124− liftIO . trigger <=< lift $ runHydrationDomBuilderT (runPostBuildT client $ void a') env' events
129+ liftIO . trigger <=< lift $ runHydrationDomBuilderT (runPostBuildT client $ void a') clientEnv events
125130 insertBefore df =<< deleteToPrerenderEnd doc
126131 holdDyn a0 a'
127132