Skip to content

Commit 50d2c86

Browse files
author
Zach Lysobey
committed
(refactor) start integrating React Router for auth redirects, etc
1 parent d25705a commit 50d2c86

5 files changed

Lines changed: 184 additions & 10 deletions

File tree

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"blockstack": "^19.2.1",
1111
"react": "^16.8.6",
1212
"react-dom": "^16.8.6",
13+
"react-router-dom": "^5.0.1",
1314
"react-scripts": "3.0.1",
1415
"typescript": "3.5.2"
1516
},
@@ -33,5 +34,8 @@
3334
"last 1 firefox version",
3435
"last 1 safari version"
3536
]
37+
},
38+
"devDependencies": {
39+
"@types/react-router-dom": "^4.3.4"
3640
}
3741
}

src/App.tsx

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
import React from 'react';
2-
import { UserSession } from 'blockstack';
1+
import React from 'react'
2+
import { UserSession } from 'blockstack'
3+
import { Route } from 'react-router-dom'
4+
import { PrivateRoute } from './PrivateRoute'
35

46
import './App.css';
57

@@ -16,11 +18,15 @@ const App: React.FC<Props> = ({
1618
<div className="App">
1719
<header className="App-header">
1820
<p>Learning Blockstack!</p>
19-
{
20-
userSession.isUserSignedIn()
21-
? <SignedIn name={'World'}/>
22-
: <Landing userSession={userSession}/>
23-
}
21+
<PrivateRoute
22+
userSession={userSession}
23+
path="/"
24+
component={SignedIn}
25+
/>
26+
<Route
27+
path="/landing/"
28+
component={Landing}
29+
/>
2430
</header>
2531
</div>
2632
);

src/PrivateRoute.tsx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import React from 'react'
2+
import { UserSession } from 'blockstack'
3+
import { Route, Redirect, RouteProps, RouteComponentProps } from 'react-router-dom'
4+
5+
const LandingRedirect: React.StatelessComponent<Partial<RouteProps>> = ({
6+
location
7+
}) =>
8+
<Redirect
9+
to={{
10+
pathname: "/landing/",
11+
state: { from: location }
12+
}}
13+
/>
14+
15+
interface Props extends RouteProps {
16+
userSession: UserSession,
17+
component: React.ComponentType<RouteComponentProps<any>> | React.ComponentType<any>,
18+
}
19+
export const PrivateRoute: React.StatelessComponent<Props> = ({
20+
component: Component,
21+
userSession,
22+
...rest
23+
}) => {
24+
const isSignedIn = userSession.isUserSignedIn()
25+
return (
26+
<Route {...rest}
27+
render={props => isSignedIn
28+
? <Component {...props} />
29+
: <LandingRedirect {...props} />
30+
}
31+
/>
32+
)
33+
}

src/index.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ import * as serviceWorker from './serviceWorker';
66

77
import { UserSession, AppConfig } from 'blockstack';
88

9+
import { BrowserRouter } from 'react-router-dom'
10+
11+
12+
913
const appConfig = new AppConfig(['store_write', 'publish_data'])
1014
const userSession = new UserSession({ appConfig });
1115

@@ -22,7 +26,11 @@ if (!isUserSignedIn && isSignInPending) {
2226
})
2327
}
2428

25-
const app = <App userSession={userSession} />;
29+
const app = (
30+
<BrowserRouter>
31+
<App userSession={userSession} />
32+
</BrowserRouter>
33+
)
2634

2735
const $root = document.getElementById('root');
2836

yarn.lock

Lines changed: 125 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -859,6 +859,13 @@
859859
dependencies:
860860
regenerator-runtime "^0.13.2"
861861

862+
"@babel/runtime@^7.1.2", "@babel/runtime@^7.4.0":
863+
version "7.5.1"
864+
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.1.tgz#51b56e216e87103ab3f7d6040b464c538e242888"
865+
integrity sha512-g+hmPKs16iewFSmW57NkH9xpPkuYD1RV3UE2BCkXx9j+nhhRb9hsiSxPmEa67j35IecTQdn4iyMtHMbt5VoREg==
866+
dependencies:
867+
regenerator-runtime "^0.13.2"
868+
862869
"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4":
863870
version "7.4.4"
864871
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237"
@@ -1233,6 +1240,11 @@
12331240
dependencies:
12341241
"@babel/types" "^7.3.0"
12351242

1243+
"@types/history@*":
1244+
version "4.7.2"
1245+
resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.2.tgz#0e670ea254d559241b6eeb3894f8754991e73220"
1246+
integrity sha512-ui3WwXmjTaY73fOQ3/m3nnajU/Orhi6cEu5rzX+BrAAJxa3eITXZ5ch9suPqtM03OWhAHhPSyBGCN4UKoxO20Q==
1247+
12361248
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
12371249
version "2.0.1"
12381250
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff"
@@ -1292,6 +1304,23 @@
12921304
dependencies:
12931305
"@types/react" "*"
12941306

1307+
"@types/react-router-dom@^4.3.4":
1308+
version "4.3.4"
1309+
resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-4.3.4.tgz#63a7a8558129d2f4ff76e4bdd099bf4b98e25a0d"
1310+
integrity sha512-xrwaWHpnxKk/TTRe7pmoGy3E4SyF/ojFqNfFJacw7OLdfLXRvGfk4r/XePVaZNVfeJzL8fcnNilPN7xOdJ/vGw==
1311+
dependencies:
1312+
"@types/history" "*"
1313+
"@types/react" "*"
1314+
"@types/react-router" "*"
1315+
1316+
"@types/react-router@*":
1317+
version "5.0.3"
1318+
resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.0.3.tgz#855a1606e62de3f4d69ea34fb3c0e50e98e964d5"
1319+
integrity sha512-j2Gge5cvxca+5lK9wxovmGPgpVJMwjyu5lTA/Cd6fLGoPq7FXcUE1jFkEdxeyqGGz8VfHYSHCn5Lcn24BzaNKA==
1320+
dependencies:
1321+
"@types/history" "*"
1322+
"@types/react" "*"
1323+
12951324
"@types/react@*", "@types/react@16.8.22":
12961325
version "16.8.22"
12971326
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.22.tgz#7f18bf5ea0c1cad73c46b6b1c804a3ce0eec6d54"
@@ -4490,6 +4519,11 @@ growly@^1.3.0:
44904519
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
44914520
integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
44924521

4522+
gud@^1.0.0:
4523+
version "1.0.0"
4524+
resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0"
4525+
integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==
4526+
44934527
gzip-size@5.0.0:
44944528
version "5.0.0"
44954529
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80"
@@ -4644,6 +4678,18 @@ hex-color-regex@^1.1.0:
46444678
resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
46454679
integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
46464680

4681+
history@^4.9.0:
4682+
version "4.9.0"
4683+
resolved "https://registry.yarnpkg.com/history/-/history-4.9.0.tgz#84587c2068039ead8af769e9d6a6860a14fa1bca"
4684+
integrity sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA==
4685+
dependencies:
4686+
"@babel/runtime" "^7.1.2"
4687+
loose-envify "^1.2.0"
4688+
resolve-pathname "^2.2.0"
4689+
tiny-invariant "^1.0.2"
4690+
tiny-warning "^1.0.0"
4691+
value-equal "^0.4.0"
4692+
46474693
hmac-drbg@^1.0.0:
46484694
version "1.0.1"
46494695
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
@@ -4653,6 +4699,13 @@ hmac-drbg@^1.0.0:
46534699
minimalistic-assert "^1.0.0"
46544700
minimalistic-crypto-utils "^1.0.1"
46554701

4702+
hoist-non-react-statics@^3.1.0:
4703+
version "3.3.0"
4704+
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b"
4705+
integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==
4706+
dependencies:
4707+
react-is "^16.7.0"
4708+
46564709
hosted-git-info@^2.1.4:
46574710
version "2.7.1"
46584711
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
@@ -5280,6 +5333,11 @@ is-wsl@^1.1.0:
52805333
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
52815334
integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
52825335

5336+
isarray@0.0.1:
5337+
version "0.0.1"
5338+
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
5339+
integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
5340+
52835341
isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
52845342
version "1.0.0"
52855343
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
@@ -6195,7 +6253,7 @@ loglevel@^1.4.1:
61956253
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
61966254
integrity sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=
61976255

6198-
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
6256+
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
61996257
version "1.4.0"
62006258
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
62016259
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@@ -6389,6 +6447,15 @@ mimic-fn@^2.0.0:
63896447
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
63906448
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
63916449

6450+
mini-create-react-context@^0.3.0:
6451+
version "0.3.2"
6452+
resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz#79fc598f283dd623da8e088b05db8cddab250189"
6453+
integrity sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw==
6454+
dependencies:
6455+
"@babel/runtime" "^7.4.0"
6456+
gud "^1.0.0"
6457+
tiny-warning "^1.0.2"
6458+
63926459
mini-css-extract-plugin@0.5.0:
63936460
version "0.5.0"
63946461
resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz#ac0059b02b9692515a637115b0cc9fed3a35c7b0"
@@ -7154,6 +7221,13 @@ path-to-regexp@0.1.7:
71547221
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
71557222
integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
71567223

7224+
path-to-regexp@^1.7.0:
7225+
version "1.7.0"
7226+
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d"
7227+
integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=
7228+
dependencies:
7229+
isarray "0.0.1"
7230+
71577231
path-type@^2.0.0:
71587232
version "2.0.0"
71597233
resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
@@ -8223,11 +8297,40 @@ react-error-overlay@^5.1.6:
82238297
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-5.1.6.tgz#0cd73407c5d141f9638ae1e0c63e7b2bf7e9929d"
82248298
integrity sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q==
82258299

8226-
react-is@^16.8.1, react-is@^16.8.4:
8300+
react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4:
82278301
version "16.8.6"
82288302
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16"
82298303
integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==
82308304

8305+
react-router-dom@^5.0.1:
8306+
version "5.0.1"
8307+
resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.0.1.tgz#ee66f4a5d18b6089c361958e443489d6bab714be"
8308+
integrity sha512-zaVHSy7NN0G91/Bz9GD4owex5+eop+KvgbxXsP/O+iW1/Ln+BrJ8QiIR5a6xNPtrdTvLkxqlDClx13QO1uB8CA==
8309+
dependencies:
8310+
"@babel/runtime" "^7.1.2"
8311+
history "^4.9.0"
8312+
loose-envify "^1.3.1"
8313+
prop-types "^15.6.2"
8314+
react-router "5.0.1"
8315+
tiny-invariant "^1.0.2"
8316+
tiny-warning "^1.0.0"
8317+
8318+
react-router@5.0.1:
8319+
version "5.0.1"
8320+
resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.0.1.tgz#04ee77df1d1ab6cb8939f9f01ad5702dbadb8b0f"
8321+
integrity sha512-EM7suCPNKb1NxcTZ2LEOWFtQBQRQXecLxVpdsP4DW4PbbqYWeRiLyV/Tt1SdCrvT2jcyXAXmVTmzvSzrPR63Bg==
8322+
dependencies:
8323+
"@babel/runtime" "^7.1.2"
8324+
history "^4.9.0"
8325+
hoist-non-react-statics "^3.1.0"
8326+
loose-envify "^1.3.1"
8327+
mini-create-react-context "^0.3.0"
8328+
path-to-regexp "^1.7.0"
8329+
prop-types "^15.6.2"
8330+
react-is "^16.6.0"
8331+
tiny-invariant "^1.0.2"
8332+
tiny-warning "^1.0.0"
8333+
82318334
react-scripts@3.0.1:
82328335
version "3.0.1"
82338336
resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-3.0.1.tgz#e5565350d8069cc9966b5998d3fe3befe3d243ac"
@@ -8582,6 +8685,11 @@ resolve-from@^4.0.0:
85828685
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
85838686
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
85848687

8688+
resolve-pathname@^2.2.0:
8689+
version "2.2.0"
8690+
resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879"
8691+
integrity sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==
8692+
85858693
resolve-url@^0.2.1:
85868694
version "0.2.1"
85878695
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
@@ -9464,6 +9572,11 @@ timsort@^0.3.0:
94649572
resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
94659573
integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
94669574

9575+
tiny-invariant@^1.0.2:
9576+
version "1.0.4"
9577+
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.4.tgz#346b5415fd93cb696b0c4e8a96697ff590f92463"
9578+
integrity sha512-lMhRd/djQJ3MoaHEBrw8e2/uM4rs9YMNk0iOr8rHQ0QdbM7D4l0gFl3szKdeixrlyfm9Zqi4dxHCM2qVG8ND5g==
9579+
94679580
tiny-secp256k1@^1.0.0:
94689581
version "1.1.3"
94699582
resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-1.1.3.tgz#e93b1e1bf62e9bd1ad3ab24af27ff6127ce0e077"
@@ -9475,6 +9588,11 @@ tiny-secp256k1@^1.0.0:
94759588
elliptic "^6.4.0"
94769589
nan "^2.13.2"
94779590

9591+
tiny-warning@^1.0.0, tiny-warning@^1.0.2:
9592+
version "1.0.2"
9593+
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.2.tgz#1dfae771ee1a04396bdfde27a3adcebc6b648b28"
9594+
integrity sha512-rru86D9CpQRLvsFG5XFdy0KdLAvjdQDyZCsRcuu60WtzFylDM3eAWSxEVz5kzL2Gp544XiUvPbVKtOA/txLi9Q==
9595+
94789596
tmp@^0.0.33:
94799597
version "0.0.33"
94809598
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
@@ -9873,6 +9991,11 @@ validator@^10.9.0:
98739991
resolved "https://registry.yarnpkg.com/validator/-/validator-10.11.0.tgz#003108ea6e9a9874d31ccc9e5006856ccd76b228"
98749992
integrity sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==
98759993

9994+
value-equal@^0.4.0:
9995+
version "0.4.0"
9996+
resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7"
9997+
integrity sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==
9998+
98769999
varuint-bitcoin@^1.0.4:
987710000
version "1.1.0"
987810001
resolved "https://registry.yarnpkg.com/varuint-bitcoin/-/varuint-bitcoin-1.1.0.tgz#7a343f50537607af6a3059312b9782a170894540"

0 commit comments

Comments
 (0)