on develop help sign in
Fix placeRawElement for hydration mode, add corresponding test
bf3f9c2Tom Smalley
reflex-dom-core/src/Reflex/Dom/Builder/Hydration.hs+3−1
@@ -833,7 +833,9 @@ instance (SupportsHydrationDomBuilder t m) => DomBuilder t (HydrationDomBuilderT
833 , _selectElement_raw = undefined -- TODO domSelectElement
833 , _selectElement_raw = undefined -- TODO domSelectElement
834 }
834 }
835
835
836− placeRawElement = append . toNode
836+ placeRawElement e = getHydrationMode >>= \case
837+ HydrationMode_Immediate -> append $ toNode e
838+ HydrationMode_Hydrating -> addHydrationStep $ insertAfterPreviousNode e
837 wrapRawElement e rawCfg = do
839 wrapRawElement e rawCfg = do
838 ctx <- askJSM
840 ctx <- askJSM
839 events <- askEvents
841 events <- askEvents
reflex-dom-core/test/hydration.hs+11−8
@@ -693,22 +693,25 @@ main = hspec $ beforeAll startSeleniumServer $ do
693 Node.appendChild div text
693 Node.appendChild div text
694 pure div
694 pure div
695 describe "placeRawElement" $ do
695 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"
696 it "is placed correctly in the DOM at switchover" $ do
699 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
701 text "one"
701 text "one"
702 prerender (pure ()) $ placeRawElement =<< createRawElement
702 prerender (pure ()) $ placeRawElement =<< createRawElement
703 text "three"
703 text "three"
704 it "is placed correctly in the DOM in immediate mode" $ do
704 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
709 text "one"
706 text "one"
710 placeRawElement =<< createRawElement
707 placeRawElement =<< createRawElement
711 text "three"
708 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"
712 it "can be clicked" $ do
715 it "can be clicked" $ do
713 clickedRef <- newIORef False
716 clickedRef <- newIORef False
714 let check = WD.click <=< WD.findElem $ WD.ByTag "div"
717 let check = WD.click <=< WD.findElem $ WD.ByTag "div"