Skip to content

Commit a2c7795

Browse files
committed
Merge pull request #1 from ethul/topic/implementation
Topic/implementation
2 parents 4d98f59 + 14aa53f commit a2c7795

File tree

6 files changed

+149
-1
lines changed

6 files changed

+149
-1
lines changed

README.md

+10
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,13 @@
33
Low-level React DOM bindings for PureScript
44

55
- [Module Documentation](docs/)
6+
7+
## Installation
8+
9+
```
10+
bower install purescript-react-dom
11+
```
12+
13+
## Example
14+
15+
Please refer to [purescript-react-example](https://github.com/ethul/purescript-react-example)

bower.json

+15-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,22 @@
11
{
22
"name": "purescript-react-dom",
3+
"description": "PureScript bindings for react-dom",
34
"main": "",
5+
"keywords": [
6+
"purescript",
7+
"react"
8+
],
9+
"license": "MIT",
410
"ignore": [
511
"*",
612
"!src/**/*"
7-
]
13+
],
14+
"repository": {
15+
"type": "git",
16+
"url": "git://github.com/purescript-contrib/purescript-react-dom.git"
17+
},
18+
"dependencies": {
19+
"purescript-dom": "~0.2.15",
20+
"purescript-react": "~0.6.0"
21+
}
822
}

docs/ReactDOM.md

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
## Module ReactDOM
2+
3+
#### `render`
4+
5+
``` purescript
6+
render :: forall eff. ReactElement -> Element -> Eff (dom :: DOM | eff) (Maybe ReactComponent)
7+
```
8+
9+
Render a React element in a document element. Returns Nothing for stateless components.
10+
11+
#### `unmountComponentAtNode`
12+
13+
``` purescript
14+
unmountComponentAtNode :: forall eff. Element -> Eff (dom :: DOM | eff) Boolean
15+
```
16+
17+
Removes a mounted React element in a document element. Returns true if it was unmounted, false otherwise.
18+
19+
#### `findDOMNode`
20+
21+
``` purescript
22+
findDOMNode :: forall eff. ReactComponent -> Eff (dom :: DOM | eff) Element
23+
```
24+
25+
Finds the DOM node rendered by the component.
26+
27+
#### `renderToString`
28+
29+
``` purescript
30+
renderToString :: ReactElement -> String
31+
```
32+
33+
Render a React element as a string.
34+
35+
#### `renderToStaticMarkup`
36+
37+
``` purescript
38+
renderToStaticMarkup :: ReactElement -> String
39+
```
40+
41+
Render a React element as static markup string without extra DOM attributes.
42+
43+

package.json

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"name": "purescript-react-dom",
3+
"files": [],
4+
"peerDependencies": {
5+
"react-dom": "^0.14.6"
6+
}
7+
}

src/ReactDOM.js

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/* global exports */
2+
"use strict";
3+
4+
// module ReactDOM
5+
6+
var ReactDOM = require('react-dom');
7+
8+
var ReactDOMServer = require('react-dom/server');
9+
10+
function renderFn(nothing, just, element, container) {
11+
return function(){
12+
var result = ReactDOM.render(element, container);
13+
return result === null ? nothing : just(result);
14+
}
15+
}
16+
exports.renderFn = renderFn;
17+
18+
function unmountComponentAtNode(container) {
19+
return function(){
20+
return ReactDOM.unmountComponentAtNode(container);
21+
};
22+
}
23+
exports.unmountComponentAtNode = unmountComponentAtNode;
24+
25+
function findDOMNode(component) {
26+
return function(){
27+
return ReactDOM.findDOMNode(component);
28+
};
29+
}
30+
exports.findDOMNode = findDOMNode;
31+
32+
exports.renderToString = ReactDOMServer.renderToString;
33+
34+
exports.renderToStaticMarkup = ReactDOMServer.renderToStaticMarkup;

src/ReactDOM.purs

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
module ReactDOM
2+
( render
3+
, unmountComponentAtNode
4+
, findDOMNode
5+
, renderToString
6+
, renderToStaticMarkup
7+
) where
8+
9+
import Control.Monad.Eff (Eff())
10+
11+
import Data.Function (Fn4(), runFn4)
12+
import Data.Maybe (Maybe(..))
13+
14+
import DOM (DOM())
15+
import DOM.Node.Types (Element())
16+
17+
import React (ReactElement(), ReactComponent())
18+
19+
-- | Render a React element in a document element. Returns Nothing for stateless components.
20+
render :: forall eff. ReactElement -> Element -> Eff (dom :: DOM | eff) (Maybe ReactComponent)
21+
render = runFn4 renderFn Nothing Just
22+
23+
foreign import renderFn
24+
:: forall eff. Fn4 (Maybe ReactComponent)
25+
(ReactComponent -> Maybe ReactComponent)
26+
ReactElement
27+
Element
28+
(Eff (dom :: DOM | eff) (Maybe ReactComponent))
29+
30+
-- | Removes a mounted React element in a document element. Returns true if it was unmounted, false otherwise.
31+
foreign import unmountComponentAtNode :: forall eff. Element -> Eff (dom :: DOM | eff) Boolean
32+
33+
-- | Finds the DOM node rendered by the component.
34+
foreign import findDOMNode :: forall eff. ReactComponent -> Eff (dom :: DOM | eff) Element
35+
36+
-- | Render a React element as a string.
37+
foreign import renderToString :: ReactElement -> String
38+
39+
-- | Render a React element as static markup string without extra DOM attributes.
40+
foreign import renderToStaticMarkup :: ReactElement -> String

0 commit comments

Comments
 (0)