Skip to content

Commit 43f08b5

Browse files
authored
Add createPortal (#57)
* Add createPortal * Simplify Makefiles
1 parent 3dc3f53 commit 43f08b5

File tree

5 files changed

+17
-6
lines changed

5 files changed

+17
-6
lines changed

examples/component/Makefile

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
all: node_modules
22
purs compile src/*.purs '../../src/**/*.purs' '../../bower_components/purescript-*/src/**/*.purs'
3-
purs bundle output/*/*.js > output/bundle.js
4-
echo 'PS.Main.main();' >> output/bundle.js
3+
purs bundle -m Main --main Main output/*/*.js > output/bundle.js
54
node_modules/.bin/browserify output/bundle.js -o html/index.js
65

76
node_modules:

examples/controlled-input/Makefile

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
all: node_modules
22
purs compile src/*.purs '../../src/**/*.purs' '../../bower_components/purescript-*/src/**/*.purs'
3-
purs bundle output/*/*.js > output/bundle.js
4-
echo 'PS.Main.main();' >> output/bundle.js
3+
purs bundle -m Main --main Main output/*/*.js > output/bundle.js
54
node_modules/.bin/browserify output/bundle.js -o html/index.js
65

76
node_modules:

examples/counter/Makefile

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
all: node_modules
22
purs compile src/*.purs '../../src/**/*.purs' '../../bower_components/purescript-*/src/**/*.purs'
3-
purs bundle output/*/*.js > output/bundle.js
4-
echo 'PS.Main.main();' >> output/bundle.js
3+
purs bundle -m Main --main Main output/*/*.js > output/bundle.js
54
node_modules/.bin/browserify output/bundle.js -o html/index.js
65

76
node_modules:

src/React/Basic/DOM.js

+4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ exports.findDOMNode_ = function(instance) {
1818
return ReactDOM.findDOMNode(instance);
1919
};
2020

21+
exports.createPortal_ = function(jsx, node) {
22+
return ReactDOM.createPortal(jsx, node);
23+
};
24+
2125
exports.mergeStyles = function(styles) {
2226
return Object.assign.apply(null, [ {} ].concat(styles));
2327
};

src/React/Basic/DOM.purs

+10
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ module React.Basic.DOM
1313
, hydrate'
1414
, unmount
1515
, findDOMNode
16+
, createPortal
1617
, text
1718
, css
1819
, mergeStyles
@@ -22,6 +23,7 @@ module React.Basic.DOM
2223
import Prelude
2324

2425
import Data.Either (Either)
26+
import Data.Function.Uncurried (Fn2, runFn2)
2527
import Data.Maybe (Maybe(..))
2628
import Data.Nullable (Nullable, toMaybe)
2729
import Effect (Effect)
@@ -98,6 +100,14 @@ findDOMNode instance_ = try do
98100
-- | Warning: Relies on `ReactDOM.findDOMNode` which may throw exceptions
99101
foreign import findDOMNode_ :: EffectFn1 ComponentInstance (Nullable Node)
100102

103+
-- | Divert a render tree into a separate DOM node. The node's
104+
-- | content will be overwritten and managed by React, similar
105+
-- | to `render` and `hydrate`.
106+
createPortal :: JSX -> Element -> JSX
107+
createPortal = runFn2 createPortal_
108+
109+
foreign import createPortal_ :: Fn2 JSX Element JSX
110+
101111
-- | Create a text node.
102112
text :: String -> JSX
103113
text = unsafeCoerce

0 commit comments

Comments
 (0)