Skip to content

Commit 9ad7c59

Browse files
Keypress support included - andrewagain#55
1 parent 37b5607 commit 9ad7c59

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed

src/component/App.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React from "react";
22
import Display from "./Display";
33
import ButtonPanel from "./ButtonPanel";
44
import calculate from "../logic/calculate";
5+
import {isAlphaNumericKey, keyCodes} from '../utils/helper_methods';
56
import "./App.css";
67

78
export default class App extends React.Component {
@@ -15,6 +16,33 @@ export default class App extends React.Component {
1516
this.setState(calculate(this.state, buttonName));
1617
};
1718

19+
componentDidMount = ()=>{
20+
document.addEventListener("keydown", this.handleKeyDown);
21+
}
22+
componentWillUnmount = ()=>{
23+
document.removeEventListener("keydown", this.handleKeyDown);
24+
}
25+
26+
handleKeyDown = (orgEvent)=>{
27+
let key = orgEvent.key;
28+
let isENTERKey = orgEvent.keyCode === keyCodes.ENTER;
29+
if(isENTERKey || isAlphaNumericKey(orgEvent)){
30+
if(key !== "x" && key !== "÷"){
31+
if(key === '*'){
32+
key = 'x';
33+
}else if(key === "/"){
34+
key = "÷";
35+
}else if(isENTERKey){
36+
key = "=";
37+
}
38+
let validCalcKeys = ["%", "÷", "7", "8", "9", "x", "4", "5", "6", "-", "1", "2", "3", "+","0", ".", "=", "Backspace"];
39+
if(validCalcKeys.indexOf(key) !== -1){
40+
this.handleClick(key, true);
41+
}
42+
}
43+
}
44+
};
45+
1846
render() {
1947
return (
2048
<div className="component-app">

src/logic/calculate.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,18 @@ export default function calculate(obj, buttonName) {
2020
operation: null,
2121
};
2222
}
23+
if(buttonName === "Backspace"){
24+
let display = obj.total || obj.next;
25+
if(!obj.operation && display && display !== "0"){
26+
display = display.slice(0, display.length-1);
27+
return {
28+
total: obj.total ? display : obj.total,
29+
next: obj.next ? display : obj.next,
30+
operation: obj.operation
31+
}
32+
}
33+
return {};
34+
}
2335

2436
if (isNumber(buttonName)) {
2537
if (buttonName === "0" && obj.next === "0") {

src/utils/helper_methods.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
const keyCodes = {
2+
SPACE: 32,
3+
DELETE: 46,
4+
BACKSPACE: 8,
5+
ENTER: 13
6+
}
7+
const isAlphaNumericKey = function(orgEvent) {
8+
let keyCode = orgEvent.keyCode;
9+
return !(orgEvent.metaKey || orgEvent.ctrlKey) && ((keyCode >= 186 && keyCode <= 192) || (keyCode >= 219 && keyCode <= 222) || (keyCode >= 48 && keyCode <= 57) || (keyCode >= 65 && keyCode <= 90 )|| (keyCode >= 97 && keyCode <= 122) || (keyCode === keyCodes.SPACE || keyCode === keyCodes.DELETE || keyCode === keyCodes.BACKSPACE));
10+
}
11+
const helpers = {
12+
keyCodes,
13+
isAlphaNumericKey
14+
}
15+
module.exports = helpers;

0 commit comments

Comments
 (0)