dere-cbai
Clean deployment with countdown functionality
6d65f0c
import { useState, useEffect } from 'react';
interface CountdownData {
days: number;
hours: number;
minutes: number;
seconds: number;
isExpired: boolean;
}
export const useCountdown = (targetDate: Date | null): CountdownData => {
const [countdown, setCountdown] = useState<CountdownData>({
days: 0,
hours: 0,
minutes: 0,
seconds: 0,
isExpired: false,
});
useEffect(() => {
if (!targetDate) {
setCountdown({
days: 0,
hours: 0,
minutes: 0,
seconds: 0,
isExpired: true,
});
return;
}
const updateCountdown = () => {
const now = new Date().getTime();
const target = targetDate.getTime();
const difference = target - now;
if (difference <= 0) {
setCountdown({
days: 0,
hours: 0,
minutes: 0,
seconds: 0,
isExpired: true,
});
return;
}
const days = Math.floor(difference / (1000 * 60 * 60 * 24));
const hours = Math.floor((difference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((difference % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((difference % (1000 * 60)) / 1000);
setCountdown({
days,
hours,
minutes,
seconds,
isExpired: false,
});
};
// Update immediately
updateCountdown();
// Set up interval to update every second
const interval = setInterval(updateCountdown, 1000);
return () => clearInterval(interval);
}, [targetDate]);
return countdown;
};