on develop help sign in
Fix placeRawElement for hydration mode, add corresponding test
commitbf3f9c2dacc76792fbe64f736029fa5910cc6285 authorTom Smalley <tfsmalley@gmail.com> dateWed 5 Dec 2018, 15:08 (8 years ago) parentdd6dcd6
2 files changed+14−9
reflex-dom-core/src/Reflex/Dom/Builder/Hydration.hs+3−1 reflex-dom-core/test/hydration.hs+11−8
reflex-dom-core/src/Reflex/Dom/Builder/Hydration.hs+3−1
@@ -833,7 +833,9 @@ instance (SupportsHydrationDomBuilder t m) => DomBuilder t (HydrationDomBuilderT
833833 , _selectElement_raw = undefined -- TODO domSelectElement
834834 }
835835
836− placeRawElement = append . toNode
836+ placeRawElement e = getHydrationMode >>= \case
837+ HydrationMode_Immediate -> append $ toNode e
838+ HydrationMode_Hydrating -> addHydrationStep $ insertAfterPreviousNode e
837839 wrapRawElement e rawCfg = do
838840 ctx <- askJSM
839841 events <- askEvents
reflex-dom-core/test/hydration.hs+11−8
@@ -693,22 +693,25 @@ main = hspec $ beforeAll startSeleniumServer $ do
693693 Node.appendChild div text
694694 pure div
695695 describe "placeRawElement" $ do
696+ let checkOrder = do
697+ shouldContainText "two" <=< WD.findElem $ WD.ByTag "div"
698+ shouldContainText "one\ntwo\nthree" <=< WD.findElem $ WD.ByTag "body"
696699 it "is placed correctly in the DOM at switchover" $ do
697− let check = do
698− shouldContainText "two" <=< WD.findElem $ WD.ByTag "div"
699− shouldContainText "one\ntwo\nthree" <=< WD.findElem $ WD.ByTag "body"
700− testWidget (pure ()) check $ do
700+ testWidget (pure ()) checkOrder $ do
701701 text "one"
702702 prerender (pure ()) $ placeRawElement =<< createRawElement
703703 text "three"
704704 it "is placed correctly in the DOM in immediate mode" $ do
705− let check = do
706− shouldContainText "two" <=< WD.findElem $ WD.ByTag "div"
707− shouldContainText "one\ntwo\nthree" <=< WD.findElem $ WD.ByTag "body"
708− testWidget (pure ()) check $ prerender (pure ()) $ do
705+ testWidget (pure ()) checkOrder $ prerender (pure ()) $ do
709706 text "one"
710707 placeRawElement =<< createRawElement
711708 text "three"
709+ it "is placed correctly in the DOM in hydration mode" $ do
710+ testWidget (pure ()) checkOrder $ do
711+ text "one"
712+ mElement <- prerender (pure Nothing) $ Just <$> createRawElement
713+ traverse_ placeRawElement mElement
714+ text "three"
712715 it "can be clicked" $ do
713716 clickedRef <- newIORef False
714717 let check = WD.click <=< WD.findElem $ WD.ByTag "div"