27 lines
860 B
Haskell
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
|