UNPKG

@freakycoder/react-native-countdown

Version:

Moment based easy to use Countdown for React Native

47 lines 1.76 kB
import * as React from "react"; import { Text } from "react-native"; import moment from "moment"; const momentDurationFormatSetup = require("moment-duration-format"); momentDurationFormatSetup(moment); /** * ? Local Imports */ import styles from "./Countdown.style"; const Countdown = ({ style, textStyle, start, end, format = "hh:mm:ss", onCountdownOver, defaultCountdown = "- : - : -", ...rest }) => { let interval; const [hours, setHours] = React.useState(); const [minutes, setMinutes] = React.useState(); const [seconds, setSeconds] = React.useState(); const [countdown, setCountdown] = React.useState(); const [timer, setTimer] = React.useState(); React.useEffect(() => { interval = setInterval(() => { const countDownStart = start.add(1, "second"); const then = moment(countDownStart).format("DD/MM/YYYY HH:mm:ss"); const now = moment(end).format("DD/MM/YYYY HH:mm:ss"); const ms = moment(now, "DD/MM/YYYY HH:mm:ss").diff(moment(then, "DD/MM/YYYY HH:mm:ss")); const _countdown = moment.duration(ms).format(format); if (ms <= 0) { setHours("00"); setMinutes("00"); setSeconds("00"); clearInterval(interval); } else { setCountdown(_countdown); } }, 1000); }, []); React.useEffect(() => { if (timer === 1) { clearInterval(interval); onCountdownOver?.(); // this.forceUpdate(); } }, [timer]); return (<Text style={[styles.textStyle, textStyle]} {...rest}> {countdown} </Text>); }; export default Countdown; //# sourceMappingURL=Countdown.js.map