diff options
author | Brandon Millman <brandon.millman@gmail.com> | 2018-05-10 01:57:02 +0800 |
---|---|---|
committer | Brandon Millman <brandon.millman@gmail.com> | 2018-05-10 01:57:26 +0800 |
commit | 20f6d8d3d0d7452bd4dc35c7c55b2cfc169216ca (patch) | |
tree | dd549929b0211e42b67f718a36562cd08328ad41 /packages/website | |
parent | 09b26645eebb53e8a730f60998fd689c6bb15528 (diff) | |
download | dexon-sol-tools-20f6d8d3d0d7452bd4dc35c7c55b2cfc169216ca.tar dexon-sol-tools-20f6d8d3d0d7452bd4dc35c7c55b2cfc169216ca.tar.gz dexon-sol-tools-20f6d8d3d0d7452bd4dc35c7c55b2cfc169216ca.tar.bz2 dexon-sol-tools-20f6d8d3d0d7452bd4dc35c7c55b2cfc169216ca.tar.lz dexon-sol-tools-20f6d8d3d0d7452bd4dc35c7c55b2cfc169216ca.tar.xz dexon-sol-tools-20f6d8d3d0d7452bd4dc35c7c55b2cfc169216ca.tar.zst dexon-sol-tools-20f6d8d3d0d7452bd4dc35c7c55b2cfc169216ca.zip |
Implement loading and error state for relayer grid
Diffstat (limited to 'packages/website')
-rw-r--r-- | packages/website/ts/components/relayer_index/relayer_index.tsx | 60 |
1 files changed, 50 insertions, 10 deletions
diff --git a/packages/website/ts/components/relayer_index/relayer_index.tsx b/packages/website/ts/components/relayer_index/relayer_index.tsx index bc84cf9e8..df208753b 100644 --- a/packages/website/ts/components/relayer_index/relayer_index.tsx +++ b/packages/website/ts/components/relayer_index/relayer_index.tsx @@ -1,5 +1,7 @@ import { colors, Styles } from '@0xproject/react-shared'; import * as _ from 'lodash'; +import CircularProgress from 'material-ui/CircularProgress'; +import FlatButton from 'material-ui/FlatButton'; import { GridList } from 'material-ui/GridList'; import * as React from 'react'; @@ -55,7 +57,24 @@ export class RelayerIndex extends React.Component<RelayerIndexProps, RelayerInde } public render() { const readyToRender = _.isUndefined(this.state.error) && !_.isUndefined(this.state.relayerInfos); - if (readyToRender) { + if (!readyToRender) { + return ( + <div className="col col-12" style={{ ...styles.root, height: '100%' }}> + <div + className="relative sm-px2 sm-pt2 sm-m1" + style={{ height: 122, top: '33%', transform: 'translateY(-50%)' }} + > + <div className="center pb2"> + {_.isUndefined(this.state.error) ? ( + <CircularProgress size={40} thickness={5} /> + ) : ( + <Retry onRetry={this._fetchRelayerInfosAsync.bind(this)} /> + )} + </div> + </div> + </div> + ); + } else { return ( <div style={styles.root}> <GridList @@ -64,19 +83,12 @@ export class RelayerIndex extends React.Component<RelayerIndexProps, RelayerInde padding={GRID_PADDING} style={styles.gridList} > - {this.state.relayerInfos.map((relayerInfo: WebsiteBackendRelayerInfo) => ( - <RelayerGridTile - key={relayerInfo.name} - relayerInfo={relayerInfo} - networkId={this.props.networkId} - /> + {this.state.relayerInfos.map((relayerInfo: WebsiteBackendRelayerInfo, index) => ( + <RelayerGridTile key={index} relayerInfo={relayerInfo} networkId={this.props.networkId} /> ))} </GridList> </div> ); - } else { - // TODO: loading and error states with a scrolling container - return null; } } private async _fetchRelayerInfosAsync(): Promise<void> { @@ -96,3 +108,31 @@ export class RelayerIndex extends React.Component<RelayerIndexProps, RelayerInde } } } + +interface RetryProps { + onRetry: () => void; +} +const Retry = (props: RetryProps) => ( + <div className="clearfix center" style={{ color: colors.black }}> + <div className="mx-auto inline-block align-middle" style={{ lineHeight: '44px', textAlign: 'center' }}> + <div className="h2" style={{ fontFamily: 'Roboto Mono' }}> + Something went wrong. + </div> + <div className="py3"> + <FlatButton + label={'reload'} + backgroundColor={colors.black} + labelStyle={{ + fontSize: 18, + fontFamily: 'Roboto Mono', + fontWeight: 'lighter', + color: colors.white, + textTransform: 'lowercase', + }} + style={{ width: 280, height: 62, borderRadius: 5 }} + onClick={props.onRetry} + /> + </div> + </div> + </div> +); |