From a6b9dadfe68921e6c7795518441109e77963ecd9 Mon Sep 17 00:00:00 2001 From: Determinant Date: Tue, 19 Feb 2019 01:03:09 -0500 Subject: support new tab page; fix bugs --- src/tab.tsx | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 src/tab.tsx (limited to 'src/tab.tsx') diff --git a/src/tab.tsx b/src/tab.tsx new file mode 100644 index 0000000..e720844 --- /dev/null +++ b/src/tab.tsx @@ -0,0 +1,135 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Theme, withStyles, StyleRules, MuiThemeProvider } from '@material-ui/core/styles'; +import CssBaseline from '@material-ui/core/CssBaseline'; +import Typography from '@material-ui/core/Typography'; +import Button from '@material-ui/core/Button'; +import IconButton from '@material-ui/core/IconButton'; +import RefreshIcon from '@material-ui/icons/Refresh'; +import Grid from '@material-ui/core/Grid'; +import CircularProgress from '@material-ui/core/CircularProgress'; + +import Logo from './Logo'; +import { theme } from './theme'; +import { StyledPatternPieChart } from './Chart'; +import { MsgType, MsgClient } from './msg'; +import { GraphData } from './graph'; +import moment from 'moment'; + +const styles = (theme: Theme): StyleRules => ({ + content: { + padding: theme.spacing.unit * 1, + overflow: 'auto', + }, + buttons: { + width: '100%', + height: 0, + lineHeight: '48px' + }, + buttonSpacer: { + marginBottom: theme.spacing.unit * 2, + }, + loading: { + textAlign: 'center' + } +}); + +type TabProps = { + classes: { + content: string, + buttons: string, + buttonSpacer: string, + loading: string + } +}; + + +class Tab extends React.Component { + msgClient: MsgClient; + state = { + patternGraphData: [] as GraphData[], + loading: false, + }; + constructor(props: TabProps) { + super(props); + this.msgClient = new MsgClient('main'); + this.state.loading = true; + this.loadGraphData(false).then(() => this.setState({ loading: false })); + } + + loadGraphData(sync: boolean) { + return this.msgClient.sendMsg({ + opt: MsgType.getGraphData, + data: { sync } + }).then(msg => { + this.setState({ patternGraphData: msg.data.map((d: GraphData) => ({ + name: d.name, + data: d.data, + start: new Date(d.start), + end: new Date(d.end) + }))}); + }); + } + + render() { + let { classes } = this.props; + let data = this.state.patternGraphData; + return ( + + +
+
+ + ( + new Promise(resolver => ( + this.setState({ loading: true }, resolver))) + .then(() => this.loadGraphData(true)) + .then(() => this.setState({ loading: false })) + )}> + +
+
+ + { + (data.length > 0 && + data.map((d, idx) => ( + + + {d.name} + + + {`${moment(d.start).format('ddd, MMM Do, YYYY')} - + ${moment(d.end).format('ddd, MMM Do, YYYY')}`} + + {(d.data.some(dd => dd.value > 1e-3) && + + ) || + + No matching events. + } + + ))) || ( +
+ ) + } +
+
+
+ ); + } +} + +const StyledTab = withStyles(styles)(Tab); + +ReactDOM.render(, document.getElementById('root')); -- cgit v1.2.3-70-g09d2