trc-client-core
Version:
The core of the TRC Client
155 lines (145 loc) • 6.29 kB
JSX
import React from 'react';
import _ from 'lodash';
import Input from 'bd-stampy/components/InputElement';
import Label from 'bd-stampy/components/Label';
import Loader from 'trc-client-core/src/components/Loader';
import Tab from 'bd-stampy/components/Tab';
import TabContent from 'bd-stampy/components/TabContent';
import Table from 'bd-stampy/components/Table';
import TabView from 'bd-stampy/components/TabView';
import ToggleGroup from 'trc-client-core/src/components/ToggleGroup';
import PortalStore from 'trc-client-core/src/portal/PortalStore';
var regions = [
{label: 'NRO', value: 'NRO'},
{label: 'ERO', value: 'ERO'},
{label: 'CRO', value: 'CRO'},
{label: 'SRO', value: 'SRO'},
{label: 'WA', value: 'WA'}
];
var NationalStaffList = React.createClass({
getInitialState: function () {
return {
data: null,
search: undefined,
filter: []
};
},
componentDidMount: function () {
this.fetchData();
},
fetchData: function () {
PortalStore.getBodyAndPaintNationalUserList().then(data => this.setState({data: data}));
},
onToggleRegion: function (e, selected) {
var current = _.compact(_.map(selected.value, function (a, b){
return (a) ? b : null;
}));
if (current) {
this.setState({filter: current});
}
},
applyFilter: function (data) {
if (this.state.filter.length >= 1) {
return _.filter(data, function(item) {
return item.regionCode === this.state.filter[0];
}, this);
}
return data;
},
applyEvaluationFilter: function (data) {
if (this.state.filter.length >= 1) {
return _.filter(data, function(item) {
return item.participantData.regionCode === this.state.filter[0];
}, this);
}
return data;
},
onSearch: function(e){
this.setState({search: e.target.value});
},
render: function() {
return (
<div>
<h1>Body & Paint <span className="t-muted">National Staff List</span></h1>
<div className="row hide-print">
<div className="w30 l-right">
<Label className="hug-top">Filter By Text</Label>
<Input name="search" onChange={this.onSearch} placeholder="Search"></Input>
</div>
<Label className="hug-top">Filter By Region</Label>
<ToggleGroup name="Regions" toggles={regions} value={this.state.filter} onChange={this.onToggleRegion}/>
</div>
{this.renderData()}
</div>
);
},
renderData: function () {
if (this.state.data) {
var eval_count = 0;
if(this.state.data.evaluations){
eval_count = this.applyEvaluationFilter(this.state.data.evaluations).length;
}
return (
<TabView transition={false}>
<Tab>Staff List</Tab>
<TabContent>{this.renderStaffList(this.state.data)}</TabContent>
<Tab>Evaluations ({eval_count})</Tab>
<TabContent>{this.renderEvaluationList(this.state.data)}</TabContent>
</TabView>
);
} else {
return <Loader></Loader>;
}
},
renderStaffList: function(){
var dd = this.state.data;
var rows = _.map(this.applyFilter(dd.staffs), function(item) {
return {
_id: item.participantId,
Staff: {
value : <a className="link" href={`/#/portal/${item.participantId}`}>{item.firstName + ' ' + item.lastName}</a>,
sort : item.firstName + item.lastName
},
"Job title" : item.jobPositionDesc,
"Dealer Name" : item.dealerName,
"Dealer Code" : item.dealerCode,
Region : item.regionCode,
"Further Curriculum": (
<div>
<a className={"Button Button-small Button-body w100"} href={`/#/portal/learning-plan/body_cert?participantId=${item.participantId}&dealerCode=${item.dealerCode}`} data-icon="" title="Toyota Body Certification">Body Certification</a>
<a className={"Button Button-small Button-paint w100"} href={`/#/portal/learning-plan/paint_cert?participantId=${item.participantId}&dealerCode=${item.dealerCode}`} data-icon="" title="Toyota Paint Certification">Paint Certification</a>
</div>
)
};
}, this);
return this.renderTable(rows, "No Data to display");
},
renderEvaluationList: function(){
var rows = _.map(this.applyEvaluationFilter(this.state.data.evaluations), function(item){
return {
_id:item.token,
Staff: {
value : <a className="link" href={`/portal/#/view/${item.participantData.participantId}`}>{item.participantData.firstName + ' ' + item.participantData.lastName}</a>,
sort: item.participantData.firstName + item.participantData.lastName
},
"Job title" : item.participantData.jobPositionDesc,
"Dealer Name" : item.participantData.dealerName,
"Dealer Code" : item.participantData.dealerCode,
Region : item.participantData.regionCode,
Course: {
value: item.course.courseCode,
sort: item.course.courseCode
},
"": <a className="Button" href={"/#/portal/evaluation?token=" + item.token}>Launch</a>
};
}, this);
return this.renderTable(rows, "No Evaluation to Display");
},
renderTable: function(rows, emptyText) {
var empty = <em className="InfoBox">{emptyText}</em>;
return (
<Table type="data" modifier="data" search={this.state.search} empty={empty}>{rows}</Table>
);
}
});
module.exports = NationalStaffList;