From 847d98258ec4e2b4653785c5b02649d40ebed48a Mon Sep 17 00:00:00 2001 From: Yash Goyal Date: Sat, 18 May 2024 03:40:29 +0530 Subject: [PATCH] added poll status --- packages/nextjs/components/PollDetail.tsx | 66 +++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/packages/nextjs/components/PollDetail.tsx b/packages/nextjs/components/PollDetail.tsx index 602a3ce..98088f0 100644 --- a/packages/nextjs/components/PollDetail.tsx +++ b/packages/nextjs/components/PollDetail.tsx @@ -30,6 +30,41 @@ export default function PollDetail({ id }: { id: bigint }) { const [result, setResult] = useState<{ candidate: string; votes: number }[] | null>(null); const [status, setStatus] = useState(); const [voted, setVoted] = useState(false); + const [remaining, setRemaining] = useState({ days: 0, hours: 0, minutes: 0, seconds: 0 }); + + function getRemainingTime(finalTimestamp: number): { days: number; hours: number; minutes: number; seconds: number } { + const now = Date.now(); + let distance = finalTimestamp - now; + + if (distance < 0) { + return { days: 0, hours: 0, minutes: 0, seconds: 0 }; + } + + const days = Math.floor(distance / (60 * 60 * 24)); + distance %= 60 * 60 * 24; + + const hours = Math.floor(distance / (60 * 60)); + distance %= 60 * 60; + + const minutes = Math.floor(distance / 60); + distance %= 60; + + const seconds = Math.floor(distance); + + return { days, hours, minutes, seconds }; + } + + useEffect(() => { + if (!poll) return; + const interval = setInterval(() => { + const _remaining = getRemainingTime(Number(poll.endTime)); + setRemaining(_remaining); + }, 1000); + + return () => { + clearInterval(interval); + }; + }, [poll]); useEffect(() => { if (!poll || !poll.metadata) { @@ -239,6 +274,37 @@ export default function PollDetail({ id }: { id: bigint }) { ) : ( <> + {poll && + (status == PollStatus.OPEN ? ( +
+

Time Left

+ +
+

+ {remaining.days} Days +

+

+ {remaining.hours} Hrs +

+

+ {remaining.minutes} Mins +

+

+ {remaining.seconds} Secs +

+
+ +

Get in before the voting period ends

+
+ ) : ( +
+ {status == PollStatus.NOT_STARTED + ? "Poll Not Started Yet" + : status == PollStatus.CLOSED + ? "Poll Over, results are being calculated" + : "Poll Results are out"} +
+ ))}
{poll?.name}