react/src/React/Element.hs
2023-07-04 11:35:18 -04:00

27 lines
860 B
Haskell

{-# LANGUAGE OverloadedStrings #-}
module React.Element where
import Control.Monad.Except
import Control.Monad.Reader
import Data.Map (Map)
import Data.Text (Text)
import Language.Javascript.JSaddle hiding (Ref)
import React.Misc
import React.Types
createElement :: Tag -> Map Text JSVal -> [Element] -> Element
createElement etag props children = Element $ do
react <- ask
createdChildren <- mapM unElement children
lift $ react # t "createElement" $ [pure $ unTag etag, toJSVal props] <> fmap pure createdChildren
createFragment :: [Element] -> Element
createFragment = createFragmentWithProps mempty
createFragmentWithProps :: Map Text JSVal -> [Element] -> Element
createFragmentWithProps props children = Element $ do
react <- ask
fragmentTag <- lift $ fmap Tag $ react ! t "Fragment"
unElement $ createElement fragmentTag props children