{-# LANGUAGE OverloadedStrings, FlexibleContexts, NamedFieldPuns, GADTs #-}

module React.Render
    ( render
    , debugRender
    ) where

import Data.Void

import React.GHCJS
import React.Imports
import React.Interpret
import React.Types


-- | Render a top-level component.
--
-- Note that the rendered component can't possibly emit signals.
render :: ReactNode Void -> Element -> IO ()
render node elem = do
    node' <- reactNodeToJSAny undefined 0 node
    js_render node' elem


-- | Unlike 'render', 'debugRender' can render components that emit signals, as
-- long as they can be shown.
debugRender :: Show sig => ReactNode sig -> Element -> IO ()
debugRender node elem = do
    node' <- reactNodeToJSAny print 0 node
    js_render node' elem