@freakycoder/react-native-countdown
Version:
Moment based easy to use Countdown for React Native
47 lines • 1.76 kB
JavaScript
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