UNPKG

@chatui/core

Version:

The React library for Chatbot UI

61 lines (59 loc) 1.86 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = require("react"); var _useLatest = require("./useLatest"); var calcLeft = function calcLeft(ts) { if (!ts) { return 0; } var left = new Date(ts).getTime() - Date.now(); return left < 0 ? 0 : left; }; var parseMs = function parseMs(ms) { return { // days: Math.floor(ms / 86400000), hours: Math.floor(ms / 3600000) % 24, minutes: Math.floor(ms / 60000) % 60, seconds: Math.floor(ms / 1000) % 60 }; }; var useCountdown = function useCountdown(options) { var _ref = options || {}, targetDate = _ref.targetDate, onEnd = _ref.onEnd; var _useState = (0, _react.useState)(function () { return calcLeft(targetDate); }), _useState2 = (0, _slicedToArray2.default)(_useState, 2), timeLeft = _useState2[0], setTimeLeft = _useState2[1]; var onEndRef = (0, _useLatest.useLatest)(onEnd); (0, _react.useEffect)(function () { if (!targetDate) { // for stop setTimeLeft(0); return; } // 立即执行一次 setTimeLeft(calcLeft(targetDate)); var timer = setInterval(function () { var targetLeft = calcLeft(targetDate); setTimeLeft(targetLeft); if (targetLeft === 0) { var _onEndRef$current; clearInterval(timer); (_onEndRef$current = onEndRef.current) === null || _onEndRef$current === void 0 || _onEndRef$current.call(onEndRef); } }, 1000); return function () { return clearInterval(timer); }; }, [onEndRef, targetDate]); return parseMs(timeLeft); }; var _default = exports.default = useCountdown;