Skip to content

Commit e47dfc5

Browse files
authored
Merge pull request #21 from amrlabib/feature/lint
Feature/lint
2 parents 69d6ce1 + a8adf43 commit e47dfc5

File tree

7 files changed

+1510
-168
lines changed

7 files changed

+1510
-168
lines changed

.eslintrc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"parser": "babel-eslint",
3+
"plugins": [
4+
"react-hooks"
5+
],
6+
"rules": {
7+
"react-hooks/rules-of-hooks": "error",
8+
"react-hooks/exhaustive-deps": "warn",
9+
"no-unused-expressions": [ 2,{
10+
"allowShortCircuit": true,
11+
}],
12+
"max-len": 0
13+
},
14+
"extends": "airbnb"
15+
}

package.json

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,13 @@
66
"types": "dist/index.d.ts",
77
"scripts": {
88
"build:dev": "webpack --config webpack.dev.js && webpack-dev-server --open --config webpack.dev.js",
9-
"build:prod": "rm -rf ./dist && webpack --config webpack.prod.js"
9+
"build:prod": "rm -rf ./dist && webpack --config webpack.prod.js",
10+
"lint": "node_modules/.bin/eslint src"
11+
},
12+
"husky": {
13+
"hooks": {
14+
"pre-commit": "yarn lint"
15+
}
1016
},
1117
"repository": {
1218
"type": "git",
@@ -35,12 +41,20 @@
3541
"babel": "^6.23.0",
3642
"babel-cli": "^6.26.0",
3743
"babel-core": "^6.26.3",
44+
"babel-eslint": "^10.0.3",
3845
"babel-loader": "7",
3946
"babel-preset-env": "^1.7.0",
4047
"babel-preset-es2015": "^6.24.1",
4148
"babel-preset-react": "^6.24.1",
4249
"babel-preset-stage-1": "^6.24.1",
4350
"copy-webpack-plugin": "^4.6.0",
51+
"eslint": "^6.8.0",
52+
"eslint-config-airbnb": "^18.0.1",
53+
"eslint-plugin-import": "^2.19.1",
54+
"eslint-plugin-jsx-a11y": "^6.2.3",
55+
"eslint-plugin-react": "^7.17.0",
56+
"eslint-plugin-react-hooks": "^2.3.0",
57+
"husky": "^4.0.1",
4458
"react": "^16.8.0",
4559
"react-dom": "16.8.0",
4660
"webpack": "^4.24.0",

src/index.js

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,24 @@ export {
77
useTimer,
88
useStopwatch,
99
useTime,
10-
}
10+
};
1111

1212
// This deprecated default export is just to avoid breaking old versions code before v1.1.0
13-
export default function deprecatedUseTimer(settings) {
13+
export default function useTimerDeprecated(settings) {
1414
// didMount effect
1515
useEffect(() => {
1616
console.warn('react-timer-hook: default export useTimer is deprecated, use named exports { useTimer, useStopwatch, useTime } instead');
17-
},[]);
17+
}, []);
1818

19-
if(settings.expiryTimestamp) {
20-
const values = useTimer(settings);
21-
return { ...values, startTimer: values.start, stopTimer: values.pause, resetTimer: () => {} };
22-
} else {
23-
const values = useStopwatch(settings);
24-
return { ...values, startTimer: values.start, stopTimer: values.pause, resetTimer: values.reset };
19+
if (settings.expiryTimestamp) {
20+
const values = useTimer(settings); // eslint-disable-line
21+
return {
22+
...values, startTimer: values.start, stopTimer: values.pause, resetTimer: () => {},
23+
};
2524
}
26-
}
25+
26+
const values = useStopwatch(settings); // eslint-disable-line
27+
return {
28+
...values, startTimer: values.start, stopTimer: values.pause, resetTimer: values.reset,
29+
};
30+
}

src/useStopwatch.js

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,30 @@
11
import { useState, useEffect, useRef } from 'react';
22

3-
/* --------------------- useStopwatch ----------------------- */
4-
53
export default function useStopwatch(settings) {
64
const { autoStart } = settings || {};
75

8-
// Seconds
96
const [seconds, setSeconds] = useState(0);
10-
function addSecond() {
11-
setSeconds(prevSeconds => {
12-
if(prevSeconds === 59) {
13-
addMinute();
7+
const [minutes, setMinutes] = useState(0);
8+
const [hours, setHours] = useState(0);
9+
const [days, setDays] = useState(0);
10+
const intervalRef = useRef();
11+
12+
function addDay() {
13+
setDays((prevDays) => (prevDays + 1));
14+
}
15+
16+
function addHour() {
17+
setHours((prevHours) => {
18+
if (prevHours === 23) {
19+
addDay();
1420
return 0;
1521
}
16-
return prevSeconds + 1;
22+
return prevHours + 1;
1723
});
1824
}
1925

20-
// Minutes
21-
const [minutes, setMinutes] = useState(0);
2226
function addMinute() {
23-
setMinutes(prevMinutes => {
27+
setMinutes((prevMinutes) => {
2428
if (prevMinutes === 59) {
2529
addHour();
2630
return 0;
@@ -29,37 +33,24 @@ export default function useStopwatch(settings) {
2933
});
3034
}
3135

32-
// Hours
33-
const [hours, setHours] = useState(0);
34-
function addHour() {
35-
setHours(prevHours => {
36-
if (prevHours === 23) {
37-
addDay();
36+
function addSecond() {
37+
setSeconds((prevSeconds) => {
38+
if (prevSeconds === 59) {
39+
addMinute();
3840
return 0;
3941
}
40-
return prevHours + 1;
41-
});
42-
}
43-
44-
// Days
45-
const [days, setDays] = useState(0);
46-
function addDay() {
47-
setDays(prevDays => {
48-
return prevDays + 1;
42+
return prevSeconds + 1;
4943
});
5044
}
5145

52-
// Control functions
53-
const intervalRef = useRef();
54-
5546
function start() {
56-
if(!intervalRef.current) {
47+
if (!intervalRef.current) {
5748
intervalRef.current = setInterval(() => addSecond(), 1000);
5849
}
5950
}
6051

6152
function pause() {
62-
if(intervalRef.current) {
53+
if (intervalRef.current) {
6354
clearInterval(intervalRef.current);
6455
intervalRef.current = undefined;
6556
}
@@ -78,11 +69,13 @@ export default function useStopwatch(settings) {
7869

7970
// didMount effect
8071
useEffect(() => {
81-
if(autoStart) {
72+
if (autoStart) {
8273
start();
8374
}
8475
return reset;
85-
},[]);
76+
}, []);
8677

87-
return { seconds, minutes, hours, days, start, pause, reset };
88-
}
78+
return {
79+
seconds, minutes, hours, days, start, pause, reset,
80+
};
81+
}

src/useTime.js

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,39 @@
11
import { useState, useEffect, useRef } from 'react';
22

3-
/* ---------------------- useTime --------------------- */
4-
53
export default function useTime(settings) {
64
const { format } = settings || {};
5+
76
const [seconds, setSeconds] = useState(0);
87
const [minutes, setMinutes] = useState(0);
98
const [hours, setHours] = useState(0);
109
const [ampm, setAmPm] = useState('');
11-
1210
const intervalRef = useRef();
11+
12+
function formatHours(hoursValue) {
13+
if (format === '12-hour') {
14+
const ampmValue = hoursValue >= 12 ? 'pm' : 'am';
15+
let formattedHours = hoursValue % 12;
16+
formattedHours = formattedHours || 12;
17+
return { hoursValue: formattedHours, ampmValue };
18+
}
19+
return { hoursValue, ampmValue: '' };
20+
}
21+
22+
function setCurrentTime() {
23+
const now = new Date();
24+
const secondsValue = now.getSeconds();
25+
const minutesValue = now.getMinutes();
26+
const { hoursValue, ampmValue } = formatHours(now.getHours());
27+
28+
setSeconds(secondsValue);
29+
setMinutes(minutesValue);
30+
setHours(hoursValue);
31+
setAmPm(ampmValue);
32+
}
33+
34+
1335
function start() {
14-
if(!intervalRef.current) {
36+
if (!intervalRef.current) {
1537
setCurrentTime();
1638
intervalRef.current = setInterval(() => setCurrentTime(), 1000);
1739
}
@@ -28,36 +50,14 @@ export default function useTime(settings) {
2850
setAmPm('');
2951
}
3052

31-
function formatHours(hours) {
32-
if (format === '12-hour') {
33-
const ampm = hours >= 12 ? 'pm' : 'am';
34-
var formattedHours = hours % 12;
35-
formattedHours = formattedHours || 12;
36-
return { hours: formattedHours, ampm };
37-
}
38-
return { hours, ampm: '' };
39-
}
40-
41-
42-
function setCurrentTime() {
43-
var now = new Date();
44-
const seconds = now.getSeconds();
45-
const minutes = now.getMinutes();
46-
const { hours, ampm } = formatHours(now.getHours());
47-
48-
49-
setSeconds(seconds);
50-
setMinutes(minutes);
51-
setHours(hours);
52-
setAmPm(ampm);
53-
}
54-
5553
// didMount effect
5654
useEffect(() => {
5755
start();
5856
return reset;
59-
},[]);
57+
}, []);
6058

6159

62-
return { seconds, minutes, hours, ampm };
60+
return {
61+
seconds, minutes, hours, ampm,
62+
};
6363
}

0 commit comments

Comments
 (0)