diff --git a/bower.json b/bower.json index 4243ad6..2d455fe 100644 --- a/bower.json +++ b/bower.json @@ -16,7 +16,8 @@ "url": "git://github.com/purescript-contrib/purescript-react-dom.git" }, "dependencies": { - "purescript-dom": "~0.2.15", - "purescript-react": "~0.7.0" + "purescript-dom": "^1.0.0", + "purescript-react": "~0.7.1", + "purescript-eff-functions": "^0.1.2" } } diff --git a/src/ReactDOM.js b/src/ReactDOM.js index ea7983c..a8913fc 100644 --- a/src/ReactDOM.js +++ b/src/ReactDOM.js @@ -1,34 +1,16 @@ /* global exports */ "use strict"; -// module ReactDOM +var ReactDOM = require("react-dom"); +var ReactDOMServer = require("react-dom/server"); -var ReactDOM = require('react-dom'); +exports.renderImpl = function (nothing, just, element, container) { + var result = ReactDOM.render(element, container); + return result === null ? nothing : just(result); +}; -var ReactDOMServer = require('react-dom/server'); +exports.unmountComponentAtNodeImpl = ReactDOM.unmountComponentAtNode; +exports.findDOMNodeImpl = ReactDOM.findDOMNode; -function renderFn(nothing, just, element, container) { - return function(){ - var result = ReactDOM.render(element, container); - return result === null ? nothing : just(result); - } -} -exports.renderFn = renderFn; - -function unmountComponentAtNode(container) { - return function(){ - return ReactDOM.unmountComponentAtNode(container); - }; -} -exports.unmountComponentAtNode = unmountComponentAtNode; - -function findDOMNode(component) { - return function(){ - return ReactDOM.findDOMNode(component); - }; -} -exports.findDOMNode = findDOMNode; - -exports.renderToString = ReactDOMServer.renderToString; - -exports.renderToStaticMarkup = ReactDOMServer.renderToStaticMarkup; +exports.renderToStringImpl = ReactDOMServer.renderToString; +exports.renderToStaticMarkupImpl = ReactDOMServer.renderToStaticMarkup; diff --git a/src/ReactDOM.purs b/src/ReactDOM.purs index fc2dfb7..428a490 100644 --- a/src/ReactDOM.purs +++ b/src/ReactDOM.purs @@ -6,35 +6,57 @@ module ReactDOM , renderToStaticMarkup ) where -import Control.Monad.Eff (Eff()) - -import Data.Function (Fn4(), runFn4) +import Control.Monad.Eff (Eff) +import DOM (DOM) +import DOM.Node.Types (Element) +import Data.Function.Eff (runEffFn1, EffFn4, EffFn1, runEffFn4) +import Data.Function.Uncurried (runFn1, Fn1) import Data.Maybe (Maybe(..)) - -import DOM (DOM()) -import DOM.Node.Types (Element()) - -import React (ReactElement(), ReactComponent()) +import React (ReactElement, ReactComponent) -- | Render a React element in a document element. Returns Nothing for stateless components. -render :: forall eff. ReactElement -> Element -> Eff (dom :: DOM | eff) (Maybe ReactComponent) -render = runFn4 renderFn Nothing Just - -foreign import renderFn - :: forall eff. Fn4 (Maybe ReactComponent) - (ReactComponent -> Maybe ReactComponent) - ReactElement - Element - (Eff (dom :: DOM | eff) (Maybe ReactComponent)) +render :: forall eff. + ReactElement -> Element -> Eff (dom :: DOM | eff) (Maybe ReactComponent) +render = runEffFn4 renderImpl Nothing Just --- | Removes a mounted React element in a document element. Returns true if it was unmounted, false otherwise. -foreign import unmountComponentAtNode :: forall eff. Element -> Eff (dom :: DOM | eff) Boolean +-- | Removes a mounted React element in a document element. +-- | Returns true if it was unmounted, false otherwise. +unmountComponentAtNode :: forall eff. Element -> Eff (dom :: DOM | eff) Boolean +unmountComponentAtNode = runEffFn1 unmountComponentAtNodeImpl -- | Finds the DOM node rendered by the component. -foreign import findDOMNode :: forall eff. ReactComponent -> Eff (dom :: DOM | eff) Element +findDOMNode :: forall eff. ReactComponent -> Eff (dom :: DOM | eff) Element +findDOMNode = runEffFn1 findDOMNodeImpl -- | Render a React element as a string. -foreign import renderToString :: ReactElement -> String +renderToString :: ReactElement -> String +renderToString = runFn1 renderToStringImpl -- | Render a React element as static markup string without extra DOM attributes. -foreign import renderToStaticMarkup :: ReactElement -> String +renderToStaticMarkup :: ReactElement -> String +renderToStaticMarkup = runFn1 renderToStaticMarkupImpl + +foreign import renderImpl :: forall eff. + EffFn4 + (dom :: DOM | eff) + (Maybe ReactComponent) + (ReactComponent -> Maybe ReactComponent) + ReactElement + Element + (Maybe ReactComponent) + +foreign import unmountComponentAtNodeImpl :: forall eff. + EffFn1 + (dom :: DOM | eff) + Element + Boolean + +foreign import findDOMNodeImpl :: forall eff. + EffFn1 + (dom :: DOM | eff) + ReactComponent + Element + +foreign import renderToStringImpl :: Fn1 ReactElement String + +foreign import renderToStaticMarkupImpl :: Fn1 ReactElement String