matiasmenares/Nissboard

View on GitHub
server/public/app.jsx

Summary

Maintainability
C
7 hrs
Test Coverage
var Dash = React.createClass({
getInitialState: function () {
return {
rpm: 0,
mph: 0,
coolantTemp: 0,
dash: "defaultDash",
drawer: false
};
},
componentDidMount: function () {
var that = this;
this.socket = io();
this.socket.on('ecuData', function (data) {
that.setState({ rpm: data.rpm });
that.setState({ mph: data.mph });
that.setState({ coolantTemp: data.coolantTemp });
});
this.socket.emit('fetchComments');
},
needlePosition: function (rpm) {
percentRPM = rpm / 12000 * 360 + 90;
needleStyle = {
transform : 'rotate(' + percentRPM + 'deg)'
};
return needleStyle;
},
rpmMarker: function (num, background) {
var rotatePercent = num / 100 * 360 + 180
tickStyle = {
transform : 'rotate(' + rotatePercent + 'deg)'
}
var divClass = !background ? "rpm__marker" : "rpm__marker--background"
return (
<div style={tickStyle} className={divClass}></div>
);
},
Similar blocks of code found in 2 locations. Consider refactoring.
backgroundMarkers: function () {
var rpmMarkers = []
for (var i = 0; i < 75; i++) {
rpmMarkers.push(this.rpmMarker(i, true));
}
return rpmMarkers;
},
rpmMarkers: function () {
var percentRPM = this.state.rpm / 120;
var rpmMarkers = []
var background = false
for (var i = 0; i < 75; i++) {
if (i > percentRPM ){
background = true
}
rpmMarkers.push(this.rpmMarker(i, background));
}
return rpmMarkers;
},
renderMPH: function () {
var mph = this.state.mph;
var hundreds = "mph__number mph__number";
var tens = "mph__number mph__number";
var ones = "mph__number mph__number";
if (mph > 100){
hundreds += "--" + (mph + "")[0]
tens += "--" + (mph + "")[1]
ones += "--" + (mph % 10)
} else if (mph > 9){
tens += "--" + (mph + "")[0]
ones += "--" + (mph % 10)
} else {
ones += "--" + (mph % 10)
}
return (
<div className="mph__container">
<div className="mph--background"><span className='mph__number--default'></span><span className='mph__number--default'></span><span className='mph__number--default'></span></div>
<div className="mph"><span className={hundreds}></span><span className={tens}></span><span className={ones}></span></div>
<p className="mph__label">MPH</p>
</div>
);
},
Function `renderSmallNumbers` has 33 lines of code (exceeds 25 allowed). Consider refactoring.
renderSmallNumbers: function (number) {
var rpm = number;
var thousands = "small-number small-number";
var hundreds = "small-number small-number";
var tens = "small-number small-number";
var ones = "small-number small-number";
var commaClass = rpm > 999 ? "small-number--comma" : "small-number--hidden-comma"
if (rpm > 999){
thousands += "--" + (rpm + "")[0]
hundreds += "--" + (rpm + "")[1]
tens += "--" + (rpm + "")[2]
ones += "--" + (rpm + "")[3]
} else if (rpm > 99){
thousands += "--default"
hundreds += "--" + (rpm + "")[0]
tens += "--" + (rpm + "")[1]
ones += "--" + (rpm % 10)
} else if (rpm > 9){
thousands += "--default"
hundreds += "--default"
tens += "--" + (rpm + "")[0]
ones += "--" + (rpm % 10)
} else {
thousands += "--default"
hundreds += "--default"
tens += "--default"
ones += "--" + (rpm % 10)
}
return (
<div className="rpm-num__container">
<div className="rpm"><span className={thousands}></span><span className={commaClass}><img className='comma-image' src='./comma.svg' /></span><span className={hundreds}></span><span className={tens}></span><span className={ones}></span></div>
<div className="rpm--background"><span className='small-number--default'></span><span className='small-number--default'></span><span className='small-number--default'></span><span className='small-number--default'></span></div>
</div>
);
},
tempMarker: function (num, background) {
var divClass = !background ? "temp__marker" : "temp__marker--background"
var colors = ["#7BE7EC", "#89E8DC", "#96E9CE", "#A0EAC1", "#ABEBB4", "#BAEDA4", "#C5ED96", "#D1EE88", "#DDF07B", "#ECF16A", "#F0E966", "#F0DD68", "#F1D069", "#F2C36B", "#F3C36B", "#F4AA6E", "#F49D6F", "#F58F71", "#F58372", "#F77674"]
style = {}
if (!background){
style = {
backgroundColor : colors[num-1]
}
}
return (
<div style={style} className={divClass}></div>
);
},
tempMarkers: function (temp) {
tempPercent = temp / 210 * 20
var tempMarkers = []
background = true;
 
for (var i = 20; i > 0; i = i - 1) {
if (tempPercent > i){
background = false;
}
tempMarkers.push(this.tempMarker(i, background));
}
return tempMarkers;
},
Similar blocks of code found in 2 locations. Consider refactoring.
backgroundTempMarkers: function () {
var tempMarkers = []
for (var i = 0; i < 20; i++) {
tempMarkers.push(this.tempMarker(i, true));
}
return tempMarkers;
},
defaultDash: function () {
rpmClasses = 'rpm__container'
if (this.state.rpm > 6000) rpmClasses += ' rpm__container--redline';
return (
<span className='neon-dash-container'>
<div className={rpmClasses}>
{ this.rpmMarkers() }
{ this.renderMPH() }
</div>
Similar blocks of code found in 3 locations. Consider refactoring.
<div className="small-num__container">
{ this.renderSmallNumbers(this.state.rpm) }
<p className="small-number__label">RPM</p>
</div>
<div className="temp__container">
{this.tempMarkers(this.state.coolantTemp)}
</div>
</span>
);
},
numbersDash: function () {
return (
<span className='neon-dash-container'>
<ul>
Similar blocks of code found in 3 locations. Consider refactoring.
<li className='rpm-column'>
{ this.renderSmallNumbers(this.state.rpm) }
<p className="small-number__label">RPM</p>
</li>
<li className='mph-column'>
{ this.renderMPH() }
</li>
Similar blocks of code found in 3 locations. Consider refactoring.
<li className='temp-column'>
{ this.renderSmallNumbers(this.state.coolantTemp) }
<p className="small-number__label">Coolant Temp</p>
</li>
</ul>
</span>
);
},
chooseDash: function (dashChoice) {
var dash = {}
this.state.dash = dashChoice;
switch (dashChoice) {
case "defaultDash":
dash = this.defaultDash();
break;
case "numbersDash":
dash = this.numbersDash();
break;
default:
dash = this.defaultDash();
}
return (
dash
);
},
chooseDashCloseDrawer: function (dashChoice) {
this.state.drawer = !this.state.drawer;
this.chooseDash(dashChoice);
},
toggleDrawer: function (dashChoice) {
this.state.drawer = !this.state.drawer;
},
 
render: function() {
drawerClass = 'dash-changer__container'
if ( this.state.drawer ) drawerClass += ' open'
 
return (
<div className="content-container">
 
{this.chooseDash(this.state.dash)}
{<div className={drawerClass}>
<a className="drawer-toggle drawer-toggle--open" onClick={this.toggleDrawer}><img className='dash-icon' src='./dashIcon.svg'/></a>
<a className="drawer-toggle drawer-toggle--close" onClick={this.toggleDrawer}><img className='close-icon' src='./close.svg'/></a>
<a className="dash-button" onClick={() => this.chooseDashCloseDrawer('defaultDash')}>Default Dash</a>
<a className="dash-button" onClick={() => this.chooseDashCloseDrawer('numbersDash')}>Numbers Dash</a>
</div>}
</div>
);
}
});
 
React.render(
<Dash/>,
document.getElementById('content')
);