-
Notifications
You must be signed in to change notification settings - Fork 0
/
Boot.js
68 lines (60 loc) · 1.76 KB
/
Boot.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { PromiseState } from 'react-promiseful';
import CircularProgress from '@material-ui/core/CircularProgress';
import { IpfsProvider } from './components/ipfs';
import './Boot.css';
class Boot extends Component {
render() {
const { promise } = this.props;
return (
<PromiseState
promise={ promise }
onSettle={ this.handlePromiseSettle }>
{ ({ status, value }) => {
switch (status) {
case 'pending': return this.renderLoading();
case 'rejected': return this.renderError(value);
case 'fulfilled': return this.renderSuccess(value);
default: return null;
}
} }
</PromiseState>
);
}
renderLoading() {
return (
<div className="Boot">
<CircularProgress size={ 48 } />
</div>
);
}
renderError(error) {
return (
<div className="Boot">
{ error.code ? `${error.code} - ` : null }
{ error.message }
</div>
);
}
renderSuccess(ipfs) {
return (
<IpfsProvider value={ ipfs }>
{ this.props.children }
</IpfsProvider>
);
}
handlePromiseSettle = ({ status, value }) => {
if (status === 'rejected') {
console.error(value);
}
};
}
Boot.propTypes = {
promise: PropTypes.shape({
then: PropTypes.func.isRequired,
catch: PropTypes.func.isRequired,
}).isRequired,
children: PropTypes.node.isRequired,
};
export default Boot;