// VotingPage.js import React, { useState } from "react"; import { Bar } from "react-chartjs-2"; import { Chart as ChartJS, BarElement, CategoryScale, LinearScale } from "chart.js"; import { useMutation, useQuery } from "react-query"; import { useParams } from "react-router-dom"; import getPollData from "../services/getPollData"; import ErrorFallback from "../components/Errors/ErrorFallback"; import createVoteService from "../services/createVoteService"; import { FaBookmark } from "react-icons/fa"; import {toast} from "react-toastify"; ChartJS.register(BarElement, CategoryScale, LinearScale); function VotingPage() { const { pollId } = useParams(); const [seletedOption, setSeletedOption] = useState(null); const { data: poll, isLoading, isError, refetch } = useQuery(["poll", pollId], () => getPollData(pollId), { cacheTime : 10*100*60, // 10 minutes staleTime : 20*100*60, // 20 minutes }); const mutation = useMutation(createVoteService, { onSuccess: (data) => { toast.success("Vote given successfully"); }, onError: (error) => { console.log(error); toast.error(error?.response?.data?.message || "An unexpected error occurred"); }, }) const handleOptionSelect = (id) => { mutation.mutate({ pollId, optionId: id }); } const chartData = { labels: poll?.data?.pollData?.options.map(option => option.name), datasets: [ { label: "Votes", data: poll?.data?.pollData?.options.map(option => option.voteCount), backgroundColor: ["#3B82F6", "#EF4444", "#10B981", "#F59E0B"], borderWidth: 1, }, ], }; if (isLoading) { return
; } if (isError){ return
} return (
{/* Poll Creator Info */}
{poll?.data?.creatorData?.username}

{poll?.data?.creatorData?.username || "Unknown"}

{/* BookMark Button */}
{/* Poll Title */}

{poll?.data?.pollData?.title || "Loading.."}

{/* Poll Description */}

{poll?.data?.pollData?.description || "Loading.."}

{/* Voting Options */}
{poll?.data?.pollData?.options.map(option => (
handleOptionSelect(option._id)} key={option._id} className= {`md:p-4 p-2 ${seletedOption == option._id ? "bg-blue-500" : "bg-base-100"} rounded-lg shadow-md flex items-center justify-center cursor-pointer ${seletedOption == option._id ? "outline" :"hover:bg-base-300"} transition`} > {option.name}
))}
{/* Chart Visualization */}
); } export default VotingPage;