UNPKG

react-common-use-components

Version:
103 lines (102 loc) 3.67 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const react_1 = __importStar(require("react")); let date; let dater; const CountDown = (props) => { const { children, onClick, style, className, open, initText = '', startText = '', endText = '', duration = 60, onChange, defaultOpen = false } = props; const [counts, setCounts] = (0, react_1.useState)(60); const [isSend, setIsSend] = (0, react_1.useState)(0); const [start, setStart] = (0, react_1.useState)(defaultOpen ? defaultOpen : open); (0, react_1.useEffect)(() => { return () => { clearInterval(dater); }; }, []); (0, react_1.useEffect)(() => { if (defaultOpen) { setStart(true); setIsSend(1); } else { setStart(open); } }, [defaultOpen, open]); (0, react_1.useEffect)(() => { if (start && isSend === 1) { startTimer(); } else if (isSend === 2 || isSend === 0 || !start) { clearInterval(dater); setCounts(duration); } }, [start, isSend]); (0, react_1.useEffect)(() => { if (onChange && counts >= 0) { onChange(counts, isSend); } }, [counts, isSend]); function startTimer() { setCounts(duration); if (dater) { clearInterval(dater); } date = new Date().getTime(); dater = setInterval(() => { let newDate = new Date().getTime(); let count = Math.floor((newDate - date) / 1000); if (count > duration) { clearInterval(dater); setIsSend(2); } let dValue = duration - count; setCounts(dValue); }, 1000); } function getText() { if (isSend === 0) { return initText || duration; } else if (isSend === 1) { return startText || counts; } else if (isSend === 2) { return endText || duration; } } return (<div className={className} style={Object.assign({ color: "#000000", fontSize: '1rem', borderRadius: "0.75rem", display: 'flex', justifyContent: 'center', alignItems: 'center', cursor: "pointer", minWidth: "1.5rem", maxWidth: "100%" }, style)} onClick={() => { if (isSend !== 1) { onClick && onClick(); if (open) { setIsSend(1); setStart(true); } } }}> {children || getText()} </div>); }; exports.default = CountDown;