UNPKG

trc-client-core

Version:
106 lines (99 loc) 3.94 kB
import React from 'react'; import Reflux from 'reflux'; import moment from 'moment'; import {State} from 'react-router'; import StoreMixin from 'reflux-immutable/StoreMixin'; import DataTable from 'bd-stampy/components/DataTable'; import SodataActions from 'trc-client-core/src/sodata/SodataActions'; import Loader from 'trc-client-core/src/components/Loader'; import SodataStore from 'trc-client-core/src/sodata/SodataStore'; var OverEnrolledView = React.createClass({ displayName: 'OverEnrolledView', mixins: [ Reflux.listenTo(SodataStore, 'onStoreChange'), StoreMixin, State ], componentDidMount() { SodataActions.fetchOverEnrolledSoItem(this.props.params.soId); }, getStoreState() { return { soData: SodataStore.get('soData'), overEnrollledParticipants: SodataStore.get('overEnrollledParticipants') }; }, render() { if(!this.state.soData) { return <Loader></Loader>; } var soData = this.state.soData; var className = "w15 t-muted"; return ( <div> <h1>{soData.get('soId')} <span className="t-muted">{soData.get('soItemName')}</span></h1> <table className="Table Table-tight"> <tr> <td className={className}>Course Page: </td> <td><a href={`/#/course/${soData.get('soItemCode')}`} className="link">{soData.get('soItemName')}</a></td> </tr> <tr> <td className={className}>Course Code: </td> <td>{soData.get('soItemCode')}</td> </tr> <tr> <td className={className}>Current Class Size: </td> <td>{this.state.overEnrollledParticipants.size} / {soData.get('soMaximumEnrolment')}</td> </tr> <tr> <td className={className}>Facility: </td> <td>{soData.get('facilityDesc')}</td> </tr> <tr> <td className={className}>Start Date: </td> <td>{moment(new Date(soData.get('soStartDate'))).tz(soData.get('soTimeZone')).format('DD/MM/YYYY h:mma z')}</td> </tr> </table> {this.renderTable()} </div> ); }, renderTable() { if(!this.state.overEnrollledParticipants) { return <Loader></Loader>; } var tableSchema = [{ heading: '#', filter: 'key', render: this.isOver.bind(null, (item) => item.key + 1) }, { heading: 'Name', filter: 'participantName', render: this.isOver.bind(null, (item) => item.participantName) }, { heading: 'Dealer', filter: 'dealerName', render: this.isOver.bind(null, (item) => item.dealerName) }, { heading: 'Source', filter: 'source', render: this.isOver.bind(null, (item) => item.source) }, { heading: 'Enrolled', filter: 'enrolDate', render: this.isOver.bind(null, (item) => { var timeString = (item.source === 'LMS') ? 'DD/MM/YYYY' : 'DD/MM/YYYY h:mma z'; return moment(new Date(item.enrolDate)).format(timeString); }) }]; return <DataTable schema={tableSchema} data={this.state.overEnrollledParticipants.toJS().reverse()} modifier="data" />; }, isOver(render, item) { return (item.key + 1 > this.state.soData.get('soMaximumEnrolment')) ? <span className="t-red">{render(item)}</span> : render(item); } }); module.exports = OverEnrolledView;