diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx
index 714e3a7..3bc6766 100644
--- a/frontend/src/App.jsx
+++ b/frontend/src/App.jsx
@@ -13,6 +13,7 @@ import { QueryClient, QueryClientProvider } from "react-query";
import PrivateRoute from "./components/PrivateRoute/PrivateRoute";
import { ToastContainer } from "react-toastify";
import "react-toastify/dist/ReactToastify.css";
+import Polls from "./pages/Polls";
function App() {
const queryClient = new QueryClient();
@@ -25,6 +26,7 @@ function App() {
} />
} />
} />
+ } />
}>
} />
} />
diff --git a/frontend/src/components/Header/Header.jsx b/frontend/src/components/Header/Header.jsx
index f6f03a7..0c3e2ce 100644
--- a/frontend/src/components/Header/Header.jsx
+++ b/frontend/src/components/Header/Header.jsx
@@ -1,26 +1,37 @@
-import React from 'react'
-import { Link } from 'react-router-dom'
-import useUserStore from '../../store/useStore'
-import ProfileImage from './ProfileImage';
+import React from "react";
+import { Link } from "react-router-dom";
+import useUserStore from "../../store/useStore";
+import ProfileImage from "./ProfileImage";
function Header() {
-
- const {user} = useUserStore();
+ const { user } = useUserStore();
return (
-
- LivePoll
-
-
-
- {user.username ? - Dashboard
: - Login
}
- - Bookmarks
-
-
- {user.username &&
}
-
- )
+
+
+ LivePoll
+
+
+
+
+ {user.username ? (
+ -
+ Dashboard
+
+ ) : (
+ -
+ Login
+
+ )}
+ -
+ Polls
+
+
+
+ {user.username && }
+
+ );
}
-export default Header
+export default Header;
diff --git a/frontend/src/components/Header/ProfileImage.jsx b/frontend/src/components/Header/ProfileImage.jsx
index 8b74525..1e28653 100644
--- a/frontend/src/components/Header/ProfileImage.jsx
+++ b/frontend/src/components/Header/ProfileImage.jsx
@@ -29,6 +29,9 @@ function ProfileImage({userData}) {
Profile
New
+
+ Bookmarks
+
Logout
diff --git a/frontend/src/components/PollCard/PollCard.jsx b/frontend/src/components/PollCard/PollCard.jsx
new file mode 100644
index 0000000..59ad26a
--- /dev/null
+++ b/frontend/src/components/PollCard/PollCard.jsx
@@ -0,0 +1,28 @@
+import React from "react";
+import { useNavigate } from "react-router-dom";
+
+function PollCard({ poll }) {
+
+ const navigator = useNavigate();
+
+ const handleViewOnClick = () => {
+ navigator(`/view/${poll._id}`);
+ };
+
+ return (
+
+
+
{poll.title}
+
{poll.description}
+
+
+ Created by {poll.creatorData.username} on {new Date(poll?.createdAt).toLocaleDateString()}
+
+
+
+
+
+ );
+}
+
+export default PollCard;
diff --git a/frontend/src/pages/Polls.jsx b/frontend/src/pages/Polls.jsx
new file mode 100644
index 0000000..bd5a006
--- /dev/null
+++ b/frontend/src/pages/Polls.jsx
@@ -0,0 +1,38 @@
+import React, { useState } from 'react'
+import { useQuery } from 'react-query'
+import getPollsService from '../services/getPollsService'
+import PollCard from '../components/PollCard/PollCard'
+import ErrorFallback from '../components/Errors/ErrorFallback'
+
+function Polls() {
+
+ const [page, setPage] = useState(1);
+ const [limit, setLimit] = useState(6);
+
+ const {data, isLoading, isError, isSuccess, refetch} = useQuery(["polls", page, limit], () => getPollsService(page, limit), {
+ cacheTime: 1000 * 60 * 5, // 5 minutes
+ staleTime: 1000 * 60 * 10, // 10 minutes
+ })
+
+ return (
+
+
Polls
+ {isSuccess &&
+ {data?.data?.polls?.map((poll) => (
+
+ ))}
+
}
+ {isLoading &&
}
+ {isError &&
+ refetch()} />
+
}
+
+
+
+
+
+
+ )
+}
+
+export default Polls
diff --git a/frontend/src/services/getPollsService.js b/frontend/src/services/getPollsService.js
new file mode 100644
index 0000000..1f41047
--- /dev/null
+++ b/frontend/src/services/getPollsService.js
@@ -0,0 +1,8 @@
+import axiosInstance from "../helper/axiosInstance";
+
+async function getPollsService(page = 1, limit = 10) {
+ const response = await axiosInstance.get(`poll/all?page=${page}&limit=${limit}`);
+ return response.data;
+}
+
+export default getPollsService;
\ No newline at end of file