Home Reference Source

application/components/admin/cron.js

  1. import React, {Component} from 'react';
  2. import Immutable from 'immutable';
  3.  
  4. import {List, ListItem} from 'material-ui/List';
  5. import Subheader from 'material-ui/Subheader';
  6. import Divider from 'material-ui/Divider';
  7.  
  8. import FlatButton from 'material-ui/FlatButton';
  9. import RaisedButton from 'material-ui/RaisedButton';
  10. import IconButton from 'material-ui/IconButton';
  11. import TextField from 'material-ui/TextField';
  12.  
  13. import LoadingIndicator from './../common/loading-indicator';
  14.  
  15. import {Toolbar, ToolbarGroup, ToolbarSeparator, ToolbarTitle} from 'material-ui/Toolbar';
  16. import {Table, TableBody, TableHeader, TableHeaderColumn, TableRow, TableRowColumn} from 'material-ui/Table';
  17.  
  18. import {connect} from 'react-redux';
  19. import Config from '../../config';
  20. import ExpandingCard from './../expanding-card';
  21.  
  22. import {
  23. snackbarShowMessage
  24. } from './../../redux/actions/snackbar-actions';
  25.  
  26. import {Row, Col} from './../flexbox';
  27. import {timeToFormat} from './../../util/strings';
  28.  
  29. import ApiService from './../../services/api-service';
  30.  
  31. class CronCard extends Component {
  32. constructor(props) {
  33. super(props);
  34.  
  35. this.state = {
  36. expanded: false,
  37. hasLoaded: false,
  38. jobs: Immutable.fromJS([])
  39. };
  40.  
  41. this.api = new ApiService();
  42. }
  43.  
  44. handleToggle(expanded) {
  45. if (this.props.onToggle) {
  46. this.props.onToggle('cron', expanded);
  47. }
  48.  
  49. if (expanded && !this.state.hasLoaded) {
  50. const {dispatch} = this.props;
  51. this.api.get('/v3/status/cron')
  52. .then((json) => {
  53. this.setState({
  54. hasLoaded: true,
  55. jobs: json
  56. });
  57. });
  58. }
  59. }
  60.  
  61. render() {
  62. let jobStatus = [];
  63. if (this.state.jobs.size) {
  64. jobStatus = this.state.jobs.map((job, i) => {
  65. return (
  66. <TableRow
  67. key={i}
  68. selectable={false}
  69. >
  70. <TableRowColumn>{job.get('label')}</TableRowColumn>
  71. <TableRowColumn>{timeToFormat(job.get('lastRun'))}</TableRowColumn>
  72. <TableRowColumn>{timeToFormat(job.get('nextRun'))}</TableRowColumn>
  73. </TableRow>
  74. )
  75. });
  76. }
  77. return (
  78. <ExpandingCard
  79. onToggle={this.handleToggle.bind(this)}
  80. title="Background Tasks"
  81. subtitle="Background processes and importers"
  82. expanded={this.props.openCard === 'cron'}
  83. >
  84. {
  85. !this.state.hasLoaded
  86. ? <LoadingIndicator />
  87. : (
  88. <Table
  89. selectable={false}
  90. >
  91. <TableHeader
  92. displaySelectAll={false}
  93. adjustForCheckbox={false}
  94. >
  95. <TableRow>
  96. <TableHeaderColumn>Job</TableHeaderColumn>
  97. <TableHeaderColumn>Last Run</TableHeaderColumn>
  98. <TableHeaderColumn>Next Run</TableHeaderColumn>
  99. </TableRow>
  100. </TableHeader>
  101. <TableBody
  102. displayRowCheckbox={false}
  103. >
  104. {jobStatus}
  105. </TableBody>
  106. </Table>
  107. )
  108. }
  109. </ExpandingCard>
  110. );
  111. }
  112. }
  113.  
  114. export default CronCard;