From c594888953151ddfb4ca04b7752bfd51edc1d6da Mon Sep 17 00:00:00 2001 From: Determinant Date: Wed, 13 Feb 2019 01:11:31 -0500 Subject: WIP: migrate to TypeScriptX --- src/popup.tsx | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 src/popup.tsx (limited to 'src/popup.tsx') diff --git a/src/popup.tsx b/src/popup.tsx new file mode 100644 index 0000000..5474476 --- /dev/null +++ b/src/popup.tsx @@ -0,0 +1,112 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { withStyles, MuiThemeProvider } from '@material-ui/core/styles'; +import Button from '@material-ui/core/Button'; +import IconButton from '@material-ui/core/IconButton'; +import RefreshIcon from '@material-ui/icons/Refresh'; +import Logo from './Logo'; +import Typography from '@material-ui/core/Typography'; +import { theme } from './theme'; +import CssBaseline from '@material-ui/core/CssBaseline'; +import { PatternEntry } from './pattern'; +import { Duration } from './duration'; +import { MsgType, MsgClient } from './msg'; +import { StyledPatternPieChart } from './Chart'; +import Divider from '@material-ui/core/Divider'; +import moment from 'moment'; + +function openOptions() { + chrome.tabs.create({ url: "index.html" }); +} + +const styles = theme => ({ + content: { + padding: theme.spacing.unit * 1, + overflow: 'auto', + }, + buttons: { + width: 400, + height: 48, + lineHeight: '48px' + }, + buttonSpacer: { + marginBottom: theme.spacing.unit * 2, + }, +}); + +class Popup extends React.Component { + state = { + patternGraphData: [], + loading: false, + }; + constructor(props) { + super(props); + this.msgClient = new MsgClient('main'); + this.loading = true; + this.loadGraphData(false).then(() => this.setState({ loading: false })); + } + + loadGraphData(sync) { + return this.msgClient.sendMsg({ + type: MsgType.getGraphData, + data: { sync } + }).then(msg => { + this.setState({ patternGraphData: msg.data.map(d => ({ + 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.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 data available + } + {idx + 1 < data.length && } +
+ )) + } +
+
+ ); + } +} + +const StyledPopup = withStyles(styles)(Popup); + +ReactDOM.render(, document.getElementById('root')); -- cgit v1.2.3