UNPKG

trc-client-core

Version:
71 lines (61 loc) 2.27 kB
import Loader from 'trc-client-core/src/components/Loader'; import React from 'react'; import {List} from 'immutable'; import UserStore from 'trc-client-core/src/user/UserStore'; import {connect} from 'react-redux'; import {requestPrerequisiteGet} from 'trc-client-core/src/course/PrerequisiteDuck'; import { courseParticipationRequest, requestCourse, requestCourseListSimilar } from 'trc-client-core/src/course/CourseActions'; var SingleCourseHandler = React.createClass({ displayName: 'SingleCourseHandler', componentWillReceiveProps(nextProps) { var {params} = this.props; if(params.id !== nextProps.params.id) { this.fetchData(nextProps); } }, componentDidMount() { this.fetchData(this.props); }, fetchData(props) { var {dispatch} = props; dispatch(requestCourse(props.params.id)); dispatch(requestCourseListSimilar({courseCode: props.params.id })); dispatch(requestPrerequisiteGet(props.params.id)) dispatch(courseParticipationRequest({ courseCode: props.params.id, participantId: UserStore.get('participantId') })); }, render: function () { if (!this.props.course || !this.props.similarCourses) { return <Loader/>; } return React.cloneElement(this.props.children, { course: this.props.course, similarCourses: this.props.similarCourses, prerequisite: this.props.prerequisite, fetchData: this.fetchData }); } }); export default connect( (state, props) => { function getByCourseCode(courseCode) { return state.course.getIn(['collection', courseCode]); } var course = getByCourseCode(props.params.id); var prerequisite = state.prerequisite.getIn(['collection', props.params.id]); if (course && prerequisite) { course = course.set('prerequisiteExpression', prerequisite.get('expression')) } return { course: course, prerequisite: prerequisite, similarCourses: (course) ? course.get('similarCourses').map(cc => getByCourseCode(cc)).toList() : List() } } )(SingleCourseHandler);