From 34cf441939de19a399366669febdce25d5e98c6b Mon Sep 17 00:00:00 2001 From: eric thul Date: Sat, 28 Nov 2015 16:22:01 -0500 Subject: [PATCH 1/2] Initial implementation --- README.md | 10 ++++++++++ bower.json | 16 +++++++++++++++- package.json | 7 +++++++ src/ReactDOM.js | 34 ++++++++++++++++++++++++++++++++++ src/ReactDOM.purs | 39 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 package.json create mode 100644 src/ReactDOM.js create mode 100644 src/ReactDOM.purs diff --git a/README.md b/README.md index f263f4e..0934ab0 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,13 @@ Low-level React DOM bindings for PureScript - [Module Documentation](docs/) + +## Installation + +``` +bower install purescript-react-dom +``` + +## Example + +Please refer to [purescript-react-example](https://github.com/purescript-contrib/purescript-react) diff --git a/bower.json b/bower.json index 83da363..a579fb8 100644 --- a/bower.json +++ b/bower.json @@ -1,8 +1,22 @@ { "name": "purescript-react-dom", + "description": "PureScript bindings for react-dom", "main": "", + "keywords": [ + "purescript", + "react" + ], + "license": "MIT", "ignore": [ "*", "!src/**/*" - ] + ], + "repository": { + "type": "git", + "url": "git://github.com/purescript-contrib/purescript-react-dom.git" + }, + "dependencies": { + "purescript-react": "https://github.com/ethul/purescript-react.git#6886401e68dc472b2eb363142048c97b0de86f38", + "purescript-dom": "~0.2.10" + } } diff --git a/package.json b/package.json new file mode 100644 index 0000000..bdb849c --- /dev/null +++ b/package.json @@ -0,0 +1,7 @@ +{ + "name": "purescript-react-dom", + "files": [], + "peerDependencies": { + "react-dom": "^0.14.3" + } +} diff --git a/src/ReactDOM.js b/src/ReactDOM.js new file mode 100644 index 0000000..ea7983c --- /dev/null +++ b/src/ReactDOM.js @@ -0,0 +1,34 @@ +/* global exports */ +"use strict"; + +// module ReactDOM + +var ReactDOM = require('react-dom'); + +var ReactDOMServer = require('react-dom/server'); + +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; diff --git a/src/ReactDOM.purs b/src/ReactDOM.purs new file mode 100644 index 0000000..1d00441 --- /dev/null +++ b/src/ReactDOM.purs @@ -0,0 +1,39 @@ +module ReactDOM + ( render + , unmountComponentAtNode + , findDOMNode + , renderToString + , renderToStaticMarkup + ) where + +import Control.Monad.Eff (Eff()) + +import Data.Function (Fn4(), runFn4) +import Data.Maybe (Maybe(..)) + +import DOM (DOM()) +import DOM.Node.Types (Element()) + +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)) + +-- | 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 + +foreign import findDOMNode :: forall eff. ReactComponent -> Eff (dom :: DOM | eff) Element + +-- | Render a React element as a string. +foreign import renderToString :: ReactElement -> String + +-- | Render a React element as static markup string without extra DOM attributes. +foreign import renderToStaticMarkup :: ReactElement -> String From 14aa53fba2b553ad615ecdfd9acdc0ad60a6d6bd Mon Sep 17 00:00:00 2001 From: eric thul Date: Sun, 24 Jan 2016 21:44:32 -0500 Subject: [PATCH 2/2] Updating to React release supporting 0.14 --- README.md | 2 +- bower.json | 4 ++-- docs/ReactDOM.md | 43 +++++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- src/ReactDOM.purs | 1 + 5 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 docs/ReactDOM.md diff --git a/README.md b/README.md index 0934ab0..2a2e03e 100644 --- a/README.md +++ b/README.md @@ -12,4 +12,4 @@ bower install purescript-react-dom ## Example -Please refer to [purescript-react-example](https://github.com/purescript-contrib/purescript-react) +Please refer to [purescript-react-example](https://github.com/ethul/purescript-react-example) diff --git a/bower.json b/bower.json index a579fb8..5d5d180 100644 --- a/bower.json +++ b/bower.json @@ -16,7 +16,7 @@ "url": "git://github.com/purescript-contrib/purescript-react-dom.git" }, "dependencies": { - "purescript-react": "https://github.com/ethul/purescript-react.git#6886401e68dc472b2eb363142048c97b0de86f38", - "purescript-dom": "~0.2.10" + "purescript-dom": "~0.2.15", + "purescript-react": "~0.6.0" } } diff --git a/docs/ReactDOM.md b/docs/ReactDOM.md new file mode 100644 index 0000000..0fb76be --- /dev/null +++ b/docs/ReactDOM.md @@ -0,0 +1,43 @@ +## Module ReactDOM + +#### `render` + +``` purescript +render :: forall eff. ReactElement -> Element -> Eff (dom :: DOM | eff) (Maybe ReactComponent) +``` + +Render a React element in a document element. Returns Nothing for stateless components. + +#### `unmountComponentAtNode` + +``` purescript +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. + +#### `findDOMNode` + +``` purescript +findDOMNode :: forall eff. ReactComponent -> Eff (dom :: DOM | eff) Element +``` + +Finds the DOM node rendered by the component. + +#### `renderToString` + +``` purescript +renderToString :: ReactElement -> String +``` + +Render a React element as a string. + +#### `renderToStaticMarkup` + +``` purescript +renderToStaticMarkup :: ReactElement -> String +``` + +Render a React element as static markup string without extra DOM attributes. + + diff --git a/package.json b/package.json index bdb849c..7419f60 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,6 @@ "name": "purescript-react-dom", "files": [], "peerDependencies": { - "react-dom": "^0.14.3" + "react-dom": "^0.14.6" } } diff --git a/src/ReactDOM.purs b/src/ReactDOM.purs index 1d00441..fc2dfb7 100644 --- a/src/ReactDOM.purs +++ b/src/ReactDOM.purs @@ -30,6 +30,7 @@ foreign import renderFn -- | 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 +-- | Finds the DOM node rendered by the component. foreign import findDOMNode :: forall eff. ReactComponent -> Eff (dom :: DOM | eff) Element -- | Render a React element as a string.