UNPKG

@taglivros/tag-hooks

Version:

A Collection of React Hooks created by [@taglivros](https://site.taglivros.com/)

168 lines (161 loc) 5.97 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var dateFns = require('date-fns'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var React__default = /*#__PURE__*/_interopDefaultLegacy(React); /* eslint-disable no-console */ var CountdownContext = React.createContext({}); var CountdownProvider = function (_a) { var children = _a.children; var _b = React.useState(1), seconds = _b[0], setSeconds = _b[1]; var _c = React.useState(1), minutes = _c[0], setMinutes = _c[1]; var _d = React.useState(1), hours = _d[0], setHours = _d[1]; var _e = React.useState(1), days = _e[0], setDays = _e[1]; var _f = React.useState(true), loading = _f[0], setLoading = _f[1]; var _g = React.useState(false), hasError = _g[0], setHasError = _g[1]; var timer = 0; var negative = false; var initializeCountdown = function (_a) { var days_ = _a.days_, hours_ = _a.hours_, minutes_ = _a.minutes_, seconds_ = _a.seconds_, endTime = _a.endTime; return new Promise(function (resolve) { setSeconds(Math.floor(seconds_ || 0)); setMinutes(Math.floor(minutes_ || 0)); setHours(Math.floor(hours_ || 0)); setDays(Math.floor(days_ || 0)); if (endTime) { var diffDays = dateFns.differenceInDays(endTime, new Date()); var diffHours = dateFns.differenceInHours(endTime, new Date()); var diffMins = dateFns.differenceInMinutes(endTime, new Date()); var diffSecs = dateFns.differenceInSeconds(endTime, new Date()); if (diffDays < 0 && diffHours < 0 && diffMins < 0 && diffSecs < 0) { negative = true; } setDays(Math.floor(diffDays)); setHours(Math.floor(diffHours % 24)); setMinutes(Math.floor(diffMins % 60)); setSeconds(Math.floor(diffSecs % 60)); } resolve(true); }); }; var mZero = false; var hZero = false; var dZero = false; var lastMinute = false; var setTimerError = function (value) { setHasError(value); }; var handleCountdown = function () { if ((days || hours || minutes || seconds) && !negative) { var changeMinute_1 = false; var changeHour_1 = false; var changeDay_1 = false; setSeconds(function (s) { if (s > 0 && !hZero && !mZero) { return s - 1; } else if (!hZero && !mZero) { changeMinute_1 = true; return 59; } else if (s > 0 && lastMinute) { return s - 1; } else if (lastMinute) { return 0; } else { lastMinute = true; setMinutes(0); return 59; } }); if (changeMinute_1) { setMinutes(function (m) { if (m > 0) { return m - 1; } else { changeHour_1 = true; if (hZero) { mZero = true; return 0; } if (!hZero) { return 59; } else { return 0; } } }); } if (changeHour_1) { setHours(function (h) { if (h > 0) { return h - 1; } else { changeDay_1 = true; if (dZero) { hZero = true; return 0; } if (!dZero) { return 23; } else { return 0; } } }); } if (changeDay_1) { setDays(function (d) { if (d > 0) { return d - 1; } else { dZero = true; return 0; } }); } } else { setDays(0); setMinutes(0); setHours(0); setSeconds(0); clearInterval(timer); } }; var startCountdown = function () { var interval = setInterval(handleCountdown, 1000); setLoading(false); timer = interval; return interval; }; return (React__default['default'].createElement(CountdownContext.Provider, { value: { days: days, hasError: hasError, hours: hours, initializeCountdown: initializeCountdown, loading: loading, minutes: minutes, seconds: seconds, setTimerError: setTimerError, startCountdown: startCountdown, timer: timer } }, children)); }; function useCountdown() { var context = React.useContext(CountdownContext); if (!context) { throw new Error('useCountdown must be used within a CountdownProvider'); } return context; } exports.CountdownProvider = CountdownProvider; exports.useCountdown = useCountdown;