infinity-forge
Version:
52 lines • 2.42 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.useTimer = useTimer;
var react_1 = require("react");
function useTimer(_a) {
var onPause = _a.onPause, onFinish = _a.onFinish, _b = _a.decrementInSeconds, decrementInSeconds = _b === void 0 ? 0 : _b, _c = _a.continuous, continuous = _c === void 0 ? false : _c;
var _d = (0, react_1.useState)({
isPaused: false,
isFinished: false,
elapsedTime: decrementInSeconds,
timeContinuous: decrementInSeconds,
}), timerState = _d[0], setTimerState = _d[1];
var increment = decrementInSeconds ? -1000 : +1000;
(0, react_1.useEffect)(function () {
if (timerState.isPaused) {
onPause === null || onPause === void 0 ? void 0 : onPause(timerState.elapsedTime);
}
var interval = setInterval(function () {
if (timerState.elapsedTime <= 0) {
setTimerState(function (prev) { return (__assign(__assign({}, prev), { isFinished: true })); });
onFinish === null || onFinish === void 0 ? void 0 : onFinish(0);
clearInterval(interval);
return;
}
if (!timerState.isPaused) {
setTimerState(function (prev) { return (__assign(__assign({}, prev), { elapsedTime: prev.elapsedTime + increment })); });
}
if (continuous) {
setTimerState(function (prev) { return (__assign(__assign({}, prev), { timeContinuous: prev.timeContinuous + increment })); });
}
}, 1000);
return function () { return clearInterval(interval); };
}, [timerState.isPaused, timerState.elapsedTime]);
var differenceBetwenContinuoustimerAndElapsedTime = timerState.timeContinuous - timerState.elapsedTime;
return {
timerState: timerState,
setTimerState: setTimerState,
differenceBetwenContinuoustimerAndElapsedTime: differenceBetwenContinuoustimerAndElapsedTime,
};
}
//# sourceMappingURL=use-timer.js.map