UNPKG

trc-client-core

Version:
82 lines (75 loc) 2.54 kB
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;