diff --git a/src/App.js b/src/App.js
index fc26383..e6f5903 100644
--- a/src/App.js
+++ b/src/App.js
@@ -9,7 +9,8 @@ function MyTimer({ expiryTimestamp }) {
days,
start,
pause,
- resume
+ resume,
+ restart
} = useTimer({ expiryTimestamp, onExpire: () => console.warn('onExpire called') });
@@ -23,6 +24,12 @@ function MyTimer({ expiryTimestamp }) {
+
);
}
diff --git a/src/useTimer.js b/src/useTimer.js
index 9bf5106..264e343 100644
--- a/src/useTimer.js
+++ b/src/useTimer.js
@@ -105,7 +105,8 @@ export function useStopwatch(settings) {
/* ---------------------- useTimer --------------------- */
export function useTimer(settings) {
- const { expiryTimestamp, onExpire } = settings || {};
+ const { expiryTimestamp: expiry, onExpire } = settings || {};
+ const [expiryTimestamp, setExpiryTimestamp] = useState(expiry);
const [seconds, setSeconds] = useState(0);
function subtractSecond() {
@@ -164,7 +165,7 @@ export function useTimer(settings) {
function start() {
if(isValidExpiryTimestamp(expiryTimestamp) && !intervalRef.current) {
calculateExpiryDate();
- intervalRef.current = setInterval(() => calculateExpiryDate(), 1000);
+ intervalRef.current = setInterval(() => subtractSecond(), 1000);
}
}
@@ -192,6 +193,12 @@ export function useTimer(settings) {
}
}
+ function restart(newExpiryTimestamp) {
+ reset();
+ setExpiryTimestamp(newExpiryTimestamp);
+ }
+
+
// Timer expiry date calculation
function calculateExpiryDate() {
var now = new Date().getTime();
@@ -215,7 +222,7 @@ export function useTimer(settings) {
useEffect(() => {
start();
return reset;
- },[]);
+ },[expiryTimestamp]);
// Validate expiryTimestamp
@@ -236,7 +243,7 @@ export function useTimer(settings) {
return isValid;
}
- return { seconds, minutes, hours, days, start, pause, resume };
+ return { seconds, minutes, hours, days, start, pause, resume, restart };
}