aboutsummaryrefslogtreecommitdiff
path: root/src/components/Timer/Timer.js
diff options
context:
space:
mode:
authorasketonim <anton.dubik33@gmail.com>2020-01-02 14:53:52 +0300
committerasketonim <anton.dubik33@gmail.com>2020-01-02 15:09:22 +0300
commit48e8c85e742c476205f55e44a5f4111bcde44770 (patch)
tree1a8c124492e653a57232ad050991fdaf65be90c0 /src/components/Timer/Timer.js
parent88475b18f12e16fe32130a9e52ff6fe4297f5ba3 (diff)
downloadchrono-cube-ui-48e8c85e742c476205f55e44a5f4111bcde44770.tar.gz
Implement core timer functionality
Diffstat (limited to 'src/components/Timer/Timer.js')
-rw-r--r--src/components/Timer/Timer.js75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/components/Timer/Timer.js b/src/components/Timer/Timer.js
new file mode 100644
index 0000000..d0f8ff1
--- /dev/null
+++ b/src/components/Timer/Timer.js
@@ -0,0 +1,75 @@
+import React, { useState, useEffect } from 'react';
+
+import styled from 'styled-components';
+
+const Timer = () => {
+ const [minute, setMinute] = useState(0);
+ const [second, setSecond] = useState(0);
+ const [mill, setMill] = useState(0);
+ const [time, setTime] = useState("00:00:00")
+ const [stopwatchStart, setStopwatchStart] = useState(false);
+ const [stopwatchTime, setStopwatchTime] = useState(0);
+
+ const handleKeyDown = event => {
+ if (event.keyCode === 32){
+
+ if (!stopwatchStart) {
+ setStopwatchTime(Date.now());
+ setStopwatchStart(true);
+ }
+
+ const timeGap = Date.now() - stopwatchTime;
+ setMill(Math.floor((timeGap % 1000) / 10));
+ setSecond(Math.floor(timeGap / 1000));
+ setMinute(Math.floor(timeGap / 60000));
+ setTime(() => {
+ let resultTime = "";
+ if (minute < 10) resultTime += '0';
+ resultTime += minute + ':';
+ if (second < 10) resultTime += '0';
+ resultTime += second + ':';
+ if (mill < 10) resultTime += '0';
+ resultTime += mill;
+ return resultTime;
+ });
+ }
+ }
+
+ const handleKeyUp = event => {
+ if (event.keyCode === 32) {
+ setTime("00:00:00");
+ setMill(0);
+ setSecond(0);
+ setMinute(0);
+ setStopwatchStart(false);
+ setStopwatchTime(0);
+ }
+ }
+
+ useEffect(() => {
+ window.addEventListener("keydown", handleKeyDown);
+ window.addEventListener("keyup", handleKeyUp);
+
+ return () => {
+ window.removeEventListener("keydown", handleKeyDown);
+ window.removeEventListener("keyup", handleKeyUp);
+ };
+ })
+
+ return (
+ <Root>
+ <span>{time}</ span>
+ </Root>
+ );
+
+}
+
+const Root = styled.div`
+ background-color: skyblue;
+ padding: 8px;
+ display: inline-block;
+ font-size: 32px;
+ color: pink;
+`;
+
+export default Timer;