Skip to content

Commit 8e02c0b

Browse files
starperethul
authored andcommitted
Add hydrate function (#14)
1 parent 0730f25 commit 8e02c0b

File tree

3 files changed

+33
-52
lines changed

3 files changed

+33
-52
lines changed

psc-package.json

Lines changed: 4 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,9 @@
11
{
22
"name": "purescript-react-dom",
3-
"set": "psc-0.10.1",
4-
"source": "https://raw.githubusercontent.com/purescript/package-sets/psc-0.10.1/packages.json",
3+
"set": "psc-0.12.5-20190504",
4+
"source": "https://github.com/purescript/package-sets.git",
55
"depends": [
6-
"arrays",
7-
"bifunctors",
8-
"control",
9-
"datetime",
10-
"distributive",
11-
"dom",
12-
"eff",
13-
"eff-functions",
14-
"either",
15-
"enums",
16-
"exceptions",
17-
"foldable-traversable",
18-
"foreign",
19-
"functions",
20-
"generics",
21-
"identity",
22-
"integers",
23-
"invariant",
24-
"js-date",
25-
"lazy",
26-
"lists",
27-
"math",
28-
"maybe",
29-
"media-types",
30-
"monoid",
31-
"newtype",
32-
"nonempty",
33-
"nullable",
34-
"partial",
35-
"prelude",
36-
"proxy",
37-
"react",
38-
"st",
39-
"strings",
40-
"tailrec",
41-
"transformers",
42-
"tuples",
43-
"unfoldable",
44-
"unsafe-coerce"
6+
"web-dom",
7+
"react"
458
]
469
}

src/ReactDOM.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44
var ReactDOM = require("react-dom");
55
var ReactDOMServer = require("react-dom/server");
66

7-
exports.renderImpl = function (nothing, just, element, container) {
8-
var result = ReactDOM.render(element, container);
9-
return result === null ? nothing : just(result);
7+
exports.renderImpl = function (element, container) {
8+
return ReactDOM.render(element, container);
9+
};
10+
11+
exports.hydrateImpl = function (element, container) {
12+
return ReactDOM.hydrate(element, container);
1013
};
1114

1215
exports.unmountComponentAtNodeImpl = ReactDOM.unmountComponentAtNode;

src/ReactDOM.purs

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
module ReactDOM
22
( render
3+
, hydrate
34
, unmountComponentAtNode
45
, findDOMNode
56
, renderToString
67
, renderToStaticMarkup
78
) where
89

9-
import Effect (Effect)
10-
import Effect.Uncurried (runEffectFn1, EffectFn4, EffectFn1, runEffectFn4)
10+
import Prelude
11+
1112
import Data.Function.Uncurried (runFn1, Fn1)
12-
import Data.Maybe (Maybe(..))
13+
import Data.Maybe (Maybe)
14+
import Data.Nullable (Nullable, toMaybe)
15+
import Effect (Effect)
16+
import Effect.Uncurried (EffectFn1, EffectFn2, runEffectFn1, runEffectFn2)
1317
import React (ReactElement, ReactComponent)
1418
import Web.DOM.Element (Element)
1519

@@ -18,7 +22,14 @@ render
1822
:: ReactElement
1923
-> Element
2024
-> Effect (Maybe ReactComponent)
21-
render = runEffectFn4 renderImpl Nothing Just
25+
render rEl el = toMaybe <$> runEffectFn2 renderImpl rEl el
26+
27+
-- | Same as `render`, but is used to hydrate a container whose HTML contents were rendered on the server.
28+
hydrate
29+
:: ReactElement
30+
-> Element
31+
-> Effect (Maybe ReactComponent)
32+
hydrate rEl el = toMaybe <$> runEffectFn2 hydrateImpl rEl el
2233

2334
-- | Removes a mounted React element in a document element.
2435
-- | Returns true if it was unmounted, false otherwise.
@@ -38,12 +49,16 @@ renderToStaticMarkup :: ReactElement -> String
3849
renderToStaticMarkup = runFn1 renderToStaticMarkupImpl
3950

4051
foreign import renderImpl
41-
:: EffectFn4
42-
(Maybe ReactComponent)
43-
(ReactComponent -> Maybe ReactComponent)
52+
:: EffectFn2
53+
ReactElement
54+
Element
55+
(Nullable ReactComponent)
56+
57+
foreign import hydrateImpl
58+
:: EffectFn2
4459
ReactElement
4560
Element
46-
(Maybe ReactComponent)
61+
(Nullable ReactComponent)
4762

4863
foreign import unmountComponentAtNodeImpl
4964
:: EffectFn1

0 commit comments

Comments
 (0)