trc-client-core
Version:
The core of the TRC Client
82 lines (75 loc) • 2.54 kB
JSX
var React = require('react');
var Reflux = require('reflux');
var _ = require('lodash');
var moment = require('moment');
var {Link} = require('react-router');
var StoreMixin = require('reflux-immutable/StoreMixin');
var DataTable = require('bd-stampy/components/DataTable');
var SodataActions = require('trc-client-core/src/sodata/SodataActions');
var Loader = require('trc-client-core/src/components/Loader');
var SodataStore = require('trc-client-core/src/sodata/SodataStore');
var OverEnrolledView = React.createClass({
displayName: 'OverEnrolledView',
mixins: [
Reflux.listenTo(SodataStore, 'onStoreChange'),
StoreMixin
],
componentDidMount() {
SodataActions.fetchOverEnrolledSoItems();
},
getStoreState() {
return {
soItems: SodataStore.get('overEnrollledSoItems')
};
},
render() {
return (
<div>
<h1>Over Enrolled Courses</h1>
{this.renderTable()}
</div>
);
},
renderTable() {
if(!this.state.soItems) {
return <Loader></Loader>;
}
var sortByCount = (item) => (item.soNoParticipants - item.soMaximumEnrolment) * -1;
var tableSchema = [{
heading: 'Id',
filter: 'soId',
width: 80,
render: (item) => <Link to={`/portal/over_enrolled_courses/${item.soId}`} className="link">{item.soId}</Link>
}, {
heading: 'Name',
filter: 'soItemName'
}, {
heading: 'Course Code',
filter: 'soItemCode',
render: (item) => item.soItemCode || ' - '
}, {
heading: 'Start Date',
filter: 'soStartDate',
render: (item) => moment(new Date(item.soStartDate || 0)).tz(item.soTimeZone).format('DD/MM/YYYY h:mma z')
}, {
heading: 'Size',
filter: 'soNoParticipants',
width: 1
}, {
heading: 'Max',
filter: 'soMaximumEnrolment',
width: 1
}, {
heading: 'Over',
filter: sortByCount,
render: (item) => item.soNoParticipants - item.soMaximumEnrolment,
width: 1
}];
return <DataTable
schema={tableSchema}
data={_(this.state.soItems.toJS()).compact().sortByOrder('soStartDate').reverse().value()}
modifier="data"
/>;
}
});
module.exports = OverEnrolledView;