diff --git a/client/src/pages/PollDetail.js b/client/src/pages/PollDetail.js new file mode 100644 index 0000000..5cafbc5 --- /dev/null +++ b/client/src/pages/PollDetail.js @@ -0,0 +1,92 @@ +import React, { useEffect, useState } from 'react'; +import axios from 'axios'; +import { + PieChart, + Pie, + Cell, + Tooltip, + Legend, +} from 'recharts'; + +const COLORS = ['#0088FE', '#FEB43C']; + +export default function PollDetail({ question }) { + const [poll, setPoll] = useState(null); + + useEffect(() => { + fetchPoll(); + }, [question]); + + const fetchPoll = async () => { + try { + const response = await axios.post('/api/admin/view-votes', { question }); + setPoll(response.data[0]); + } catch (error) { + console.error('Error fetching poll:', error); + } + }; + + if (!poll) return
Loading...
; + + const memberData = [ + { name: 'Yes', value: poll.member_yes }, + { name: 'No', value: poll.member_no }, + ]; + + const nonMemberData = [ + { name: 'Yes', value: poll.non_member_yes }, + { name: 'No', value: poll.non_member_no }, + ]; + + return ( +
+

{poll.question}

+

Created At: {new Date(poll.created_at).toLocaleString()}

+ +
+ + + {memberData.map((entry, index) => ( + + ))} + + + + +
+ +
+ + + {nonMemberData.map((entry, index) => ( + + ))} + + + + +
+ +

Member Yes Votes: {poll.member_yes}

+

Member No Votes: {poll.member_no}

+

Non-Member Yes Votes: {poll.non_member_yes}

+

Non-Member No Votes: {poll.non_member_no}

+
+ ); +} diff --git a/client/src/pages/PollDetails.js b/client/src/pages/PollDetails.js new file mode 100644 index 0000000..ed929de --- /dev/null +++ b/client/src/pages/PollDetails.js @@ -0,0 +1,103 @@ +import React, { useState, useEffect } from "react"; +import axios from 'axios'; +import { + PieChart, + Pie, + Tooltip, + Legend, + Cell, +} from 'recharts'; + +const COLORS = ['#0088FE', '#FEB43C']; + +export default function PollDetails() { + const [poll, setPoll] = useState(null); + const [loading, setLoading] = useState(true); + + // Get poll ID from URL parameters + const match = window.location.pathname.match(/\/poll-details\/(\d+)/); + const pollId = match ? parseInt(match[1], 10) : null; + + useEffect(() => { + if (pollId) { + fetchPollDetails(pollId); + } + }, [pollId]); + + const fetchPollDetails = async (id) => { + try { + setLoading(true); + const response = await axios.post(`/api/poll/${id}`); + setPoll(response.data); + } catch (error) { + console.error('Error fetching poll details:', error); + } finally { + setLoading(false); + } + }; + + if (loading || !poll) return
Loading...
; + + // Define data for pie charts + const memberData = [ + { name: 'Yes', value: poll.member_yes }, + { name: 'No', value: poll.member_no } + ]; + + const nonMemberData = [ + { name: 'Yes', value: poll.non_member_yes }, + { name: 'No', value: poll.non_member_no } + ]; + + return ( +
+

{poll.question}

+

Created At: {new Date(poll.created_at).toLocaleString()}

+ +
+ + + {memberData.map((entry, index) => ( + + ))} + + + + +
+ +
+ + + {nonMemberData.map((entry, index) => ( + + ))} + + + + +
+ +

Member Yes Votes: {poll.member_yes}

+

Member No Votes: {poll.member_no}

+

Non-Member Yes Votes: {poll.non_member_yes}

+

Non-Member No Votes: {poll.non_member_no}

+
+ ); +} \ No newline at end of file