trc-client-core
Version:
The core of the TRC Client
101 lines (88 loc) • 3.08 kB
JSX
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);