UNPKG

trc-client-core

Version:
82 lines (73 loc) 3.22 kB
import React from 'react'; import Reflux from 'reflux'; import RegistrationStore from 'trc-client-core/src/course/RegistrationStore'; import Loader from 'trc-client-core/src/components/Loader'; import RegistrationActions from 'trc-client-core/src/course/RegistrationActions'; import CourseStore from 'trc-client-core/src/course/CourseStore'; import SoRegistrationBox from 'trc-client-core/src/course/SoRegistrationBox'; import ScheduledOfferingRequest from 'trc-client-core/src/course/ScheduledOfferingRequest'; var RegistrationView = React.createClass({ displayName: 'RegistrationView', mixins: [ require('reflux-immutable/StoreMixin'), Reflux.listenTo(RegistrationStore, 'onStoreChange') ], propTypes: { courseCode: React.PropTypes.string.isRequired }, getStoreState() { return { registrations: RegistrationStore.get('registrations'), cancellations: RegistrationStore.get('cancellations'), course: CourseStore.get('course'), soData: RegistrationStore.get('soData'), candidates: RegistrationStore.get('candidates'), error: RegistrationStore.get('error') }; }, componentDidMount() { RegistrationActions.fetchRegistrationData(this.props.courseId); RegistrationActions.fetchCandidates(this.props.courseId); }, render() { if(this.state.error) { return <div className="InfoBox row2 l-70">{this.state.error}</div>; } if(this.state.candidates && this.state.candidates.size === 0) { return <div className="InfoBox row2 l-70">The user has no staff that they can enrol</div>; } return ( <div className="RegistrationView"> <h2>Enrol</h2> {this.renderSOItems()} </div> ); }, renderSOItems() { var {registrations, soData, candidates, cancellations} = this.state; var {course} = this.props; if(!registrations || !candidates || !soData) { return <Loader></Loader>; } if(soData.size === 0) { return <div className="InfoBox row2 l-70"> <span>There are currently no scheduled classes for this course.</span> {course.get('stream') === 'TECH' ? <span>If you would like to register your interest, <a className="link" href={`/technical/makeRequest?courseCode=${course.get('courseCode')}`}>click here.</a></span> : null} </div>; } return soData.sortBy(so => so.get('soStartDate')).map((soItem, key) => { var soId = soItem.get('soId').toString(); return <SoRegistrationBox key={`so-${key}`} registrations={registrations.get(soId)} cancellations={cancellations.get(soId)} course={course} allRegistrations={registrations.toList().flatten(true).concat(cancellations.toList().flatten(true))} candidates={candidates} courseCode={this.props.courseCode} soData={soItem} />; }).toList().toJS(); } }); module.exports = RegistrationView;