UNPKG

trc-client-core

Version:
105 lines (97 loc) 3.5 kB
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);