import React from 'react'; import ReactDOM from 'react-dom'; import * as serviceWorker from './serviceWorker'; import { MuiThemeProvider } from '@material-ui/core/styles'; import Button from '@material-ui/core/Button'; import Typography from '@material-ui/core/Typography'; import theme from './theme'; import { PatternEntry } from './pattern'; import { Duration } from './duration'; import { msgType, MsgClient } from './msg'; import { getChartData, StyledPatternPieChart } from './Chart'; import moment from 'moment'; function openOptions() { chrome.tabs.create({ url: "index.html" }); } class Popup extends React.Component { state = { patternGraphData: [], }; constructor(props) { super(props); this.msgClient = new MsgClient('main'); let pm1 = this.msgClient.sendMsg({ type: msgType.getPatterns, data: { id: 'main' } }).then(msg => { this.patterns = msg.data.map(p => PatternEntry.inflate(p)); }); let pm2 = this.msgClient.sendMsg({ type: msgType.getCalendars, data: { enabledOnly: false } }).then(msg => { this.calendars = msg.data; }); let pm3 = this.msgClient.sendMsg({ type: msgType.getConfig, data: ['trackedPeriods'] }).then(msg => { this.trackedPeriods = msg.data.trackedPeriods.map(p => { return { start: Duration.inflate(p.start), end: Duration.inflate(p.end), name: p.name }; }); }); // initial update Promise.all([pm1, pm2, pm3]).then(() => { for (let i = 0; i < this.trackedPeriods.length; i++) this.renderChartData(i); }); } getCalEvents = (id, start, end) => { return this.msgClient.sendMsg({ type: msgType.getCalEvents, data: { id, start: start.getTime(), end: end.getTime() } }) .then(({ data }) => data.map(e => { return { id: e.id, start: new Date(e.start), end: new Date(e.end) } })); } renderChartData(idx) { let p = this.trackedPeriods[idx]; console.log(this.trackedPeriods); let startD = p.start.toMoment(); let endD = p.end.toMoment(); if (!(startD && endD)) return; let start = moment().endOf('day'); if (endD.valueOf() == 0) { switch (p.start.unit) { case 'days': start = moment().endOf('day'); break; case 'weeks': start = moment().endOf('week'); break; case 'months': start = moment().endOf('month'); break; default: } } let end = start.clone(); start.subtract(startD); end.subtract(endD); console.log(start, end); return getChartData(start.toDate(), end.toDate(), this.patterns, this.calendars, this.getCalEvents).then(results => { let patternGraphData = this.state.patternGraphData; patternGraphData[idx] = { start: moment(results.start), end: moment(results.end), data: results.patternGraphData }; this.setState({ patternGraphData }); }); } render() { console.log(this.state.patternGraphData); return ( { this.state.patternGraphData.map((d, idx) => (
{this.trackedPeriods[idx].name} {`${d.start.format('ddd, MMM Do, YYYY')} - ${d.end.format('ddd, MMM Do, YYYY')}`} {(d.data.some(dd => dd.value > 1e-3) && ) || No data available }
)) }
); } } ReactDOM.render(, document.getElementById('root')); // If you want your app to work offline and load faster, you can change // unregister() to register() below. Note this comes with some pitfalls. // Learn more about service workers: http://bit.ly/CRA-PWA serviceWorker.unregister();