Skip to content
This repository was archived by the owner on Mar 11, 2024. It is now read-only.

Commit 19d9677

Browse files
committed
feat: introduce network-aware LoadingContainer
1 parent 4f89b7b commit 19d9677

File tree

3 files changed

+119
-0
lines changed

3 files changed

+119
-0
lines changed

packages/react-components/src/LoadingContainer.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,23 @@ class LoadingContainer extends Component {
2929
);
3030
}
3131

32+
if (this.props.web3.networkMismatch) {
33+
if (this.props.networkMismatchComp) {
34+
return this.props.networkMismatchComp;
35+
}
36+
37+
return (
38+
<main className="container network-warning">
39+
<div className="pure-g">
40+
<div className="pure-u-1-1">
41+
<h1>⚠️</h1>
42+
<p>This dapp does not support this network.</p>
43+
</div>
44+
</div>
45+
</main>
46+
);
47+
}
48+
3249
if (
3350
this.props.web3.status === "initialized" &&
3451
Object.keys(this.props.accounts).length === 0
@@ -81,6 +98,7 @@ LoadingContainer.propTypes = {
8198
web3: PropTypes.object.isRequired,
8299
loadingComp: PropTypes.node,
83100
errorComp: PropTypes.node,
101+
networkMismatchComp: PropTypes.node,
84102
};
85103

86104
/*

packages/react-components/src/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ import LoadingContainer from "./LoadingContainer.js";
55
import AccountDataNew from "./new-context-api/AccountData";
66
import ContractDataNew from "./new-context-api/ContractData";
77
import ContractFormNew from "./new-context-api/ContractForm";
8+
import LoadingContainerNew from "./new-context-api/LoadingContainer";
89

910
const newContextComponents = {
1011
AccountData: AccountDataNew,
1112
ContractData: ContractDataNew,
1213
ContractForm: ContractFormNew,
14+
LoadingContainer: LoadingContainerNew,
1315
};
1416

1517
export {
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
import React, { Children, Component } from "react";
2+
import PropTypes from "prop-types";
3+
4+
/*
5+
* Create component.
6+
*/
7+
8+
class LoadingContainer extends Component {
9+
render() {
10+
if (this.props.drizzleState) {
11+
if (this.props.drizzleState.web3.status === "failed") {
12+
if (this.props.errorComp) {
13+
return this.props.errorComp;
14+
}
15+
16+
return (
17+
<main className="container loading-screen">
18+
<div className="pure-g">
19+
<div className="pure-u-1-1">
20+
<h1>⚠️</h1>
21+
<p>
22+
This browser has no connection to the Ethereum network. Please
23+
use the Chrome/FireFox extension MetaMask, or dedicated
24+
Ethereum browsers Mist or Parity.
25+
</p>
26+
</div>
27+
</div>
28+
</main>
29+
);
30+
}
31+
32+
if (this.props.drizzleState.web3.networkMismatch) {
33+
if (this.props.networkMismatchComp) {
34+
return this.props.networkMismatchComp;
35+
}
36+
37+
return (
38+
<main className="container network-warning">
39+
<div className="pure-g">
40+
<div className="pure-u-1-1">
41+
<h1>⚠️</h1>
42+
<p>This dapp does not support this network.</p>
43+
</div>
44+
</div>
45+
</main>
46+
);
47+
}
48+
49+
if (
50+
this.props.drizzleState.web3.status === "initialized" &&
51+
Object.keys(this.props.drizzleState.accounts).length === 0
52+
) {
53+
return (
54+
<main className="container loading-screen">
55+
<div className="pure-g">
56+
<div className="pure-u-1-1">
57+
<h1>🦊</h1>
58+
<p>
59+
<strong>{"We can't find any Ethereum accounts!"}</strong>{" "}
60+
Please check and make sure Metamask or your browser are
61+
pointed at the correct network and your account is unlocked.
62+
</p>
63+
</div>
64+
</div>
65+
</main>
66+
);
67+
}
68+
69+
if (this.props.drizzleState.drizzleStatus.initialized) {
70+
return Children.only(this.props.children);
71+
}
72+
}
73+
74+
if (this.props.loadingComp) {
75+
return this.props.loadingComp;
76+
}
77+
78+
return (
79+
<main className="container loading-screen">
80+
<div className="pure-g">
81+
<div className="pure-u-1-1">
82+
<h1>⚙️</h1>
83+
<p>Loading dapp...</p>
84+
</div>
85+
</div>
86+
</main>
87+
);
88+
}
89+
}
90+
91+
LoadingContainer.propTypes = {
92+
drizzleState: PropTypes.object,
93+
children: PropTypes.node,
94+
loadingComp: PropTypes.node,
95+
errorComp: PropTypes.node,
96+
networkMismatchComp: PropTypes.node,
97+
};
98+
99+
export default LoadingContainer;

0 commit comments

Comments
 (0)