application/components/admin/cron.js
import React, {Component} from 'react';
import Immutable from 'immutable';
import {List, ListItem} from 'material-ui/List';
import Subheader from 'material-ui/Subheader';
import Divider from 'material-ui/Divider';
import FlatButton from 'material-ui/FlatButton';
import RaisedButton from 'material-ui/RaisedButton';
import IconButton from 'material-ui/IconButton';
import TextField from 'material-ui/TextField';
import LoadingIndicator from './../common/loading-indicator';
import {Toolbar, ToolbarGroup, ToolbarSeparator, ToolbarTitle} from 'material-ui/Toolbar';
import {Table, TableBody, TableHeader, TableHeaderColumn, TableRow, TableRowColumn} from 'material-ui/Table';
import {connect} from 'react-redux';
import Config from '../../config';
import ExpandingCard from './../expanding-card';
import {
snackbarShowMessage
} from './../../redux/actions/snackbar-actions';
import {Row, Col} from './../flexbox';
import {timeToFormat} from './../../util/strings';
import ApiService from './../../services/api-service';
class CronCard extends Component {
constructor(props) {
super(props);
this.state = {
expanded: false,
hasLoaded: false,
jobs: Immutable.fromJS([])
};
this.api = new ApiService();
}
handleToggle(expanded) {
if (this.props.onToggle) {
this.props.onToggle('cron', expanded);
}
if (expanded && !this.state.hasLoaded) {
const {dispatch} = this.props;
this.api.get('/v3/status/cron')
.then((json) => {
this.setState({
hasLoaded: true,
jobs: json
});
});
}
}
render() {
let jobStatus = [];
if (this.state.jobs.size) {
jobStatus = this.state.jobs.map((job, i) => {
return (
<TableRow
key={i}
selectable={false}
>
<TableRowColumn>{job.get('label')}</TableRowColumn>
<TableRowColumn>{timeToFormat(job.get('lastRun'))}</TableRowColumn>
<TableRowColumn>{timeToFormat(job.get('nextRun'))}</TableRowColumn>
</TableRow>
)
});
}
return (
<ExpandingCard
onToggle={this.handleToggle.bind(this)}
title="Background Tasks"
subtitle="Background processes and importers"
expanded={this.props.openCard === 'cron'}
>
{
!this.state.hasLoaded
? <LoadingIndicator />
: (
<Table
selectable={false}
>
<TableHeader
displaySelectAll={false}
adjustForCheckbox={false}
>
<TableRow>
<TableHeaderColumn>Job</TableHeaderColumn>
<TableHeaderColumn>Last Run</TableHeaderColumn>
<TableHeaderColumn>Next Run</TableHeaderColumn>
</TableRow>
</TableHeader>
<TableBody
displayRowCheckbox={false}
>
{jobStatus}
</TableBody>
</Table>
)
}
</ExpandingCard>
);
}
}
export default CronCard;