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