UNPKG

trc-client-core

Version:
101 lines (88 loc) 3.08 kB
import {Link, History, State} from 'react-router'; import React from 'react'; import _ from 'lodash'; import {connect} from 'react-redux'; import CourseStore from './CourseStore.js'; import {requestCourseList} from 'trc-client-core/src/course/CourseActions'; import Loader from '../components/Loader'; import Paginate from 'bd-stampy/utils/Paginate'; import Pagination from 'bd-stampy/components/Pagination'; import CourseListQueryView from 'trc-client-core/src/course/CourseListQueryView'; import CourseListObject from 'trc-client-core/src/course/CourseListObject'; import UserStore from 'trc-client-core/src/user/UserStore'; var CoursesListView = React.createClass({ displayName: 'CoursesListView', contextTypes: { location: React.PropTypes.object }, mixins: [ require('bd-stampy/mixins/FormMixin'), History, State ], getInitialState() { return { courses: null }; }, FormMixin_initialFormData(nextState) { nextState.formData = _.defaults(this.context.location.query, { type: 'ALL', stream: 'ALL', departmentCategory: 'ALL' }); return nextState; }, componentDidMount() { this.props.dispatch(requestCourseList()); }, onChange(e, details) { var param = {}; param[details.key] = details.value; this.history.replaceState(null, '/course', _.defaults(param, this.context.location.query)); this.FormMixin_onFormChange(e, details); }, onPagingate(e, page) { this.history.replaceState(null, '/course', { tab: this.context.location.query.tab, page: page }); }, render() { return ( <div> <h1>Courses</h1> <CourseListQueryView onChange={this.onChange} value={this.state.formData}/> {this.renderCourseTable()} </div> ); }, renderCourseTable() { var currentPage = parseInt(this.context.location.query.page, 10) || 0; var paginateCount = 50; if(!this.props.courses) { return <Loader></Loader>; } var filtered = this.props.courses .filter(CourseStore.filterCourses(this.state.formData)) .filter(cc => { if(!UserStore.isDepartment('service')) { return cc.stream !== 'TECH'; } return true; }) var paginated = Paginate(filtered, paginateCount, currentPage); var courses = paginated.map((course, key) => { return ( <CourseListObject course={course} icon={course.courseIcon} key={key} /> ); }); return <div> {courses} <Pagination length={filtered.length} ammount={paginateCount} page={currentPage} onClick={this.onPagingate}/> </div>; } }); export default connect( state => ({courses: state.course.get('collection').toList().toJS()}) )(CoursesListView);