diff --git a/src/components/sections/ExclusiveDropSection.tsx b/src/components/sections/ExclusiveDropSection.tsx new file mode 100644 index 0000000..0364687 --- /dev/null +++ b/src/components/sections/ExclusiveDropSection.tsx @@ -0,0 +1,139 @@ +'use client' + +import { useEmDashContent } from '@/hooks/useEmDashContent' +import Image from 'next/image' +import Button from '@/components/ui/Button' +import Badge from '@/components/ui/Badge' +import { useEffect, useState } from 'react' + +interface Countdown { + days: number + hours: number + minutes: number + seconds: number +} + +function CountdownTimer({ target }: { target: string }) { + const [timeLeft, setTimeLeft] = useState({ days: 0, hours: 0, minutes: 0, seconds: 0 }) + + useEffect(() => { + const update = () => { + const diff = new Date(target).getTime() - Date.now() + if (diff <= 0) { + setTimeLeft({ days: 0, hours: 0, minutes: 0, seconds: 0 }) + return + } + const days = Math.floor(diff / 86400000) + const hours = Math.floor((diff % 86400000) / 3600000) + const minutes = Math.floor((diff % 3600000) / 60000) + const seconds = Math.floor((diff % 60000) / 1000) + setTimeLeft({ days, hours, minutes, seconds }) + } + update() + const interval = setInterval(update, 1000) + return () => clearInterval(interval) + }, [target]) + + return ( +
+
+ {String(timeLeft.days).padStart(2, '0')} + Days +
+
+ {String(timeLeft.hours).padStart(2, '0')} + Hrs +
+
+ {String(timeLeft.minutes).padStart(2, '0')} + Min +
+
+ {String(timeLeft.seconds).padStart(2, '0')} + Sec +
+
+ ) +} + +export default function ExclusiveDropSection() { + const { items, loading } = useEmDashContent('specials') + + if (loading) { + return ( +
+
+
+ ) + } + + if (items.length === 0) return null + + return ( +
+
+
+

+ Exclusive Drops +

+ Limited +
+
+ {items.map((item) => { + const d = item.data as { + title?: string + description?: string + price?: number + available_until?: string + image?: string + } + return ( +
+
+ {d.image && ( + {d.title + )} +
+
+ {d.title && ( +

{d.title}

+ )} + {d.description && ( +

{d.description}

+ )} +
+ {d.price && ( + + R{(d.price / 100).toFixed(2)} + + )} + {d.available_until && ( + + )} +
+ +
+
+ ) + })} +
+
+
+ ) +}