git.iko.soy/rowtype-yoga/ry-starter-spa
on main help sign in
Add React to the project
commit1ac4eabb31255bb14df599de3cfca650ac4022fd authorMark Eibes <mark.eibes@gmail.com> dateSat 18 Jul 2020, 01:11 (6 years ago) parentc51be85
4 files changed+95−3
package.json+4 spago.dhall+1−1 src/Main.purs+37−2 yarn.lock+53
package.json+4
@@ -18,5 +18,9 @@
1818 "scripts": {
1919 "start:dev": "webpack-dev-server --open",
2020 "webpack": "webpack --config webpack.config.js"
21+ },
22+ "dependencies": {
23+ "react": "^16.13.1",
24+ "react-dom": "^16.13.1"
2125 }
2226}
spago.dhall+1−1
@@ -3,7 +3,7 @@ Welcome to a Spago project!
33You can edit this file as you like.
44-}
55{ name = "my-project"
6−, dependencies = [ "console", "effect", "psci-support" ]
6+, dependencies = [ "console", "effect", "psci-support", "react-basic-hooks" ]
77, packages = ./packages.dhall
88, sources = [ "src/**/*.purs", "test/**/*.purs" ]
99}
src/Main.purs+37−2
@@ -2,9 +2,44 @@ module Main where
22
33import Prelude
44
5+import Data.Maybe (Maybe(..))
56import Effect (Effect)
6−import Effect.Console (log)
7+import Effect.Exception (throw)
8+import React.Basic (JSX)
9+import React.Basic.DOM (render)
10+import React.Basic.DOM as R
11+import Web.DOM (Element)
12+import Web.DOM.NonElementParentNode (getElementById)
13+import Web.HTML (window)
14+import Web.HTML.HTMLDocument (toNonElementParentNode)
15+import Web.HTML.Window (document)
16+
17+-- | The main JSX/React Component for this single-page-application.
18+app :: JSX
19+app = R.text "Hello, PureScript!"
20+
21+-- | The id of the HTML element which will wrap the React App.
22+-- | It needs to match your `index.html` file, for example:
23+-- |```html
24+-- |<body>
25+-- | <div id="container"></div>
26+-- |</body>
27+-- |```
28+containerId :: String
29+containerId = "container"
730
831main :: Effect Unit
932main = do
10− log "🍝"
33+ container <- getContainerById containerId
34+ render app container
35+
36+-- | Finds an Element based on its ID in
37+-- | the entire document and throws if it
38+-- | can't be found
39+getContainerById :: String -> Effect Element
40+getContainerById id = do
41+ documentNode <- window >>= document <#> toNonElementParentNode
42+ maybeContainerElement <- getElementById id documentNode
43+ case maybeContainerElement of
44+ Just containerElement -> pure containerElement
45+ Nothing -> throw "Container element not found."
yarn.lock+53
@@ -2463,6 +2463,11 @@ isstream@~0.1.2:
24632463 resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
24642464 integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
24652465
2466+"js-tokens@^3.0.0 || ^4.0.0":
2467+ version "4.0.0"
2468+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
2469+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
2470+
24662471jsbn@~0.1.0:
24672472 version "0.1.1"
24682473 resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
@@ -2592,6 +2597,13 @@ loglevel@^1.6.8:
25922597 resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171"
25932598 integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==
25942599
2600+loose-envify@^1.1.0, loose-envify@^1.4.0:
2601+ version "1.4.0"
2602+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
2603+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
2604+ dependencies:
2605+ js-tokens "^3.0.0 || ^4.0.0"
2606+
25952607lower-case@^2.0.1:
25962608 version "2.0.1"
25972609 resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7"
@@ -3301,6 +3313,15 @@ promise-inflight@^1.0.1:
33013313 resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
33023314 integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
33033315
3316+prop-types@^15.6.2:
3317+ version "15.7.2"
3318+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
3319+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
3320+ dependencies:
3321+ loose-envify "^1.4.0"
3322+ object-assign "^4.1.1"
3323+ react-is "^16.8.1"
3324+
33043325proxy-addr@~2.0.5:
33053326 version "2.0.6"
33063327 resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
@@ -3459,6 +3480,30 @@ raw-body@2.4.0:
34593480 iconv-lite "0.4.24"
34603481 unpipe "1.0.0"
34613482
3483+react-dom@^16.13.1:
3484+ version "16.13.1"
3485+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f"
3486+ integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==
3487+ dependencies:
3488+ loose-envify "^1.1.0"
3489+ object-assign "^4.1.1"
3490+ prop-types "^15.6.2"
3491+ scheduler "^0.19.1"
3492+
3493+react-is@^16.8.1:
3494+ version "16.13.1"
3495+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
3496+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
3497+
3498+react@^16.13.1:
3499+ version "16.13.1"
3500+ resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e"
3501+ integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==
3502+ dependencies:
3503+ loose-envify "^1.1.0"
3504+ object-assign "^4.1.1"
3505+ prop-types "^15.6.2"
3506+
34623507"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
34633508 version "2.3.7"
34643509 resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
@@ -3672,6 +3717,14 @@ safe-regex@^1.1.0:
36723717 resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
36733718 integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
36743719
3720+scheduler@^0.19.1:
3721+ version "0.19.1"
3722+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
3723+ integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==
3724+ dependencies:
3725+ loose-envify "^1.1.0"
3726+ object-assign "^4.1.1"
3727+
36753728schema-utils@^1.0.0:
36763729 version "1.0.0"
36773730 resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"