trc-client-core
Version:
The core of the TRC Client
105 lines (97 loc) • 3.5 kB
JSX
import React from 'react';
import {connect} from 'react-redux';
import {fetchServiceExcellenceReport} from 'trc-client-core/src/report/ServiceExcellenceActions';
import {Inline} from 'jsxstyle';
import Col from 'trc-client-core/src/components/Col';
import Grid from 'trc-client-core/src/components/Grid';
import Loader from 'trc-client-core/src/components/Loader';
import TriangleChart from 'trc-client-core/src/report/TriangleChart';
import {color} from 'trc-client-core/src/global/ThemeStore';
import DataTable from 'bd-stampy/components/DataTable';
import Icon from 'trc-client-core/src/components/Icon';
var ServiceExcellenceChart = React.createClass({
displayName: 'ServiceExcellenceChart',
getDefaultProps() {
return {
regionCode: null,
dealerCode: null
};
},
componentWillReceiveProps(nextProps) {
if(
this.props.regionCode !== nextProps.regionCode ||
this.props.dealerCode !== nextProps.dealerCode
) {
this.fetchData(nextProps);
}
},
componentWillMount() {
this.fetchData(this.props);
},
fetchData(props) {
var regionCode = (props.dealerCode) ? null : props.regionCode;
this.props.dispatch(fetchServiceExcellenceReport({
region: regionCode,
dealer: props.dealerCode
}));
},
getResult(row) {
return Math.round(((row.value / row.required) * 100) * 100) / 100;
},
render() {
if(!this.props.serviceExcellence) {
return <Loader></Loader>
}
return (
<Grid>
<Col width="4">{this.renderChart()}</Col>
<Col>{this.renderTable()}</Col>
</Grid>
);
},
renderChart() {
return <TriangleChart data={this.props.serviceExcellence.filter(this.removeExtraRoles).toJS()} />;
},
renderTable() {
var tableSchema = [{
heading: 'Role',
filter: 'key',
render: (row) => <Inline color={row.backgroundColor}>{row.key}</Inline>
}, {
heading: 'Actual',
filter: 'value'
}, {
heading: 'Required',
filter: 'required'
}, {
heading: 'Result',
filter: (row) => row.value / row.required,
render: (row) => {
if(row.required) {
return <Inline
children={this.getResult(row) + '%'}
color={(this.getResult(row) >= 100) ? color('green') : color('red')}
/>;
} else {
return '-';
}
}
}, {
heading: '',
render: (row) => {
if(row.required) {
return (row.value >= row.required) ? <Icon modifier="small" className="t-green" hexCode="e207"/> : <Icon modifier="small" className="t-red" hexCode="e208"/>;
} else {
return '-';
}
}
}];
return <DataTable modifier="data" schema={tableSchema} data={this.props.serviceExcellence.pop().toJS()} />;
},
removeExtraRoles(row) {
return row.get('key') !== 'DT Hybrid Specialist' && row.get('key') !== 'DT Electrical Specialist';
}
});
export default connect(state => ({
serviceExcellence: state.serviceExcellence
}))(ServiceExcellenceChart);