diff --git a/client/src/App.js b/client/src/App.js index c187cf6b..65fcad5d 100644 --- a/client/src/App.js +++ b/client/src/App.js @@ -10,6 +10,7 @@ import SummaryPage from "./pages/SummaryPage"; import { store, persistor } from "./redux/store"; import Dashboard from "./pages/Dashboard"; import Feedback from "./pages/feedback"; +import Profile from "./pages/Profile"; /** * Renders the main application component. @@ -28,6 +29,7 @@ function App() { element={} /> } /> + } /> } /> } /> { + return ( +
+

{summary.videoId}

+

{summary.summary.body}

+
+

Created at: {summary.createdAt}

+

Updated at: {summary.updatedAt}

+
+
+ ) +} + +export default ProfileCard \ No newline at end of file diff --git a/client/src/pages/Dashboard.jsx b/client/src/pages/Dashboard.jsx index 19f919f7..a1d55e23 100644 --- a/client/src/pages/Dashboard.jsx +++ b/client/src/pages/Dashboard.jsx @@ -24,6 +24,14 @@ const Dashboard = () => { ]; const [open, setOpen] = useState(true); + const handleRedirect = () => { + navigate('/contact'); + }; + + const handleProfileRedirect = () => { + navigate('/profile'); + }; + return (
{
-
-
-

Contact us

+
+
+ +

Contact us

@@ -94,7 +103,7 @@ const Dashboard = () => {
-
+
diff --git a/client/src/pages/Profile.jsx b/client/src/pages/Profile.jsx new file mode 100644 index 00000000..4f46a66f --- /dev/null +++ b/client/src/pages/Profile.jsx @@ -0,0 +1,174 @@ +import React, { useState, useEffect } from 'react'; +import { + fetchOneSummary, + fetchFavSummaries, + fetchAllSummaries, + getAllNotes, + getNote +} from "../https/index" +import { useSelector } from "react-redux"; +import { toast, ToastContainer } from "react-toastify"; +import "react-toastify/dist/ReactToastify.css"; +import ProfileCard from '../components/shared/Card/ProfileCard'; +import axios from "axios"; + +const Profile = () => { + const [activeTab, setActiveTab] = useState('Saved Summaries'); + const user = useSelector((state) => state.user); + const [summaries, setSummaries] = useState([]); + const [favSummaries, setFavSummaries] = useState([]); + const [notes, setNotes] = useState([]); + const [favNotes, setFavNotes] = useState([]); + + const toastOptions = { + position: "bottom-right", + autoClose: 8000, + pauseOnHover: true, + draggable: true, + theme: "dark", + }; + + const handleTabClick = (tab) => { + setActiveTab(tab); + }; + + const handleGetAllSummaries = async () => { + console.log("in handlegetallsummaries"); + console.log(user.id); + const data = { + "userId": user.id, + } + try { + console.log("data", data); + const response = await axios.get("http://localhost:5000/summaries/getAll", { + data + }); + setSummaries(response); // Assuming response contains an array of summaries + console.log(response); + toast.success("Successfully retrieved all summaries", toastOptions) + alert("Successfully retrieved all summaries"); + console.log(data); + } catch (err) { + alert(`Failed to get all summaries: ${err}`); + toast.error("Failed to get all summaries", toastOptions) + } + }; + + useEffect(() => { + handleGetAllSummaries(); + // handleGetfavSummaries(); + // handleGetAllNotes(); + }, []); // Fetch summaries when the component mounts + + const handleGetfavSummaries = async () => { + console.log("in handlegetfavsummaries"); + const data = { + userId: user.id, + } + try { + const response = await fetchFavSummaries(data); + setFavSummaries(response); // Assuming response contains an array of summaries + console.log(response); + toast.success("Successfully retrieved all fav summaries", toastOptions) + alert("Successfully retrieved all fav summaries"); + console.log(data); + } catch (err) { + alert(`Failed to get all fav summaries: ${err}`); + toast.error("Failed to get all fav summaries", toastOptions) + } + }; + + const handleGetAllNotes = async () => { + console.log("in handlegetallNotes"); + const data = { + userId: user.id, + } + try { + const response = await getAllNotes(data); + setNotes(response); + console.log(response); + toast.success("Successfully retrieved all notes", toastOptions) + alert("Successfully retrieved all notes"); + console.log(data); + } catch (err) { + alert(`Failed to get all notes: ${err}`); + toast.error("Failed to get all notes", toastOptions) + } + }; + + return ( +
+ {/* Profile Info */} +
+

Profile

+
+ Email: + example@example.com +
+ +
+ +
+ {/* Tabs */} +
+
handleTabClick('Saved Summaries')}> +

Saved Summaries

+
+
handleTabClick('Saved Notes')}> +

Saved Notes

+
+
handleTabClick('Favorite Summaries')}> +

Favorite Summaries

+
+
handleTabClick('Favorite Notes')}> +

Favorite Notes

+
+
+ + {/* Content */} +
+ {activeTab === 'Saved Summaries' && ( +
+ {/* Content for Saved Summaries tab */} +
+ {summaries.map(summary => ( + + ))} +
+
+ )} + {activeTab === 'Saved Notes' && ( +
+ {/* Content for Saved Notes tab */} +
+ {notes.map(note => ( + + ))} +
+
+ )} + {activeTab === 'Favorite Summaries' && ( +
+ {/* Content for Favorite Summaries tab */} +
+ {summaries.map(summary => ( + + ))} +
+
+ )} + {activeTab === 'Favorite Notes' && ( +
+ {/* Content for Favorite Notes tab */} +
+ )} +
+
+ +
+ ); +}; + +export default Profile; diff --git a/server/controllers/auth.js b/server/controllers/auth.js index dfa72865..a9596d0c 100644 --- a/server/controllers/auth.js +++ b/server/controllers/auth.js @@ -100,7 +100,9 @@ const registerUser = async (req, res) => { httpOnly: true, }); - const { _password, ...user } = newUser._doc; + + // eslint-disable-next-line no-unused-vars + const { _password, ...user } = newUser._doc; res.status(200).json({ success: true, diff --git a/server/controllers/note.js b/server/controllers/note.js index fecc7a4d..13778446 100644 --- a/server/controllers/note.js +++ b/server/controllers/note.js @@ -79,7 +79,9 @@ const modifyNote = async (req, res) => { ); if (noteIndex === -1) { - return res.status(400).json({ success: false, message: "Note not found" }); + return res + .status(400) + .json({ success: false, message: "Note not found" }); } for (const [key, value] of Object.entries(note)) { @@ -103,7 +105,7 @@ const modifyNote = async (req, res) => { const createNote = async (req, res) => { try { - console.log("in create note") + console.log("in create note"); const { userId, videoId, note } = req.body; if (!userId || !note || !note.body) { return res.status(400).json({ @@ -111,10 +113,10 @@ const createNote = async (req, res) => { message: "User Id, video Id and note body cannot be empty", }); } - console.log("creating new note ob") + console.log("creating new note ob"); const newNote = { ...note, videoId }; - console.log("finding user") + console.log("finding user"); const user = await User.findById(userId); if (!user) { return res @@ -122,12 +124,12 @@ const createNote = async (req, res) => { .json({ success: false, message: "User not found" }); } - console.log("adding into database") + console.log("adding into database"); user.notes.push(newNote); await user.save(); - console.log("final step") + console.log("final step"); res.status(200).json({ success: true, message: "Note created successfully", diff --git a/server/controllers/summary.js b/server/controllers/summary.js index 43df227c..6107ccee 100644 --- a/server/controllers/summary.js +++ b/server/controllers/summary.js @@ -30,7 +30,10 @@ const generateSummary = async (req, res) => { const fetchAllSummaries = async (req, res) => { try { - const { userId } = req.body; + console.log("in fetcallsumm backend"); + console.log("req.body: ", req.body) + const { userId } = req.body.data; + console.log("userid from api: ", userId); if (!userId) return res.status(400).send("User ID is required"); // Find user with the given user ID @@ -47,9 +50,9 @@ const fetchAllSummaries = async (req, res) => { const summaries = await Summary.find({ _id: { $in: summaryIds } }); console.log("Found the following summaries:"); - console.log(summaries); return res.status(200).json(summaries); } catch (error) { + console.log("in err block"); console.error("Error occurred while fetching summaries", error); return res.status(400).send(error.message); } @@ -147,7 +150,8 @@ const modifyFavSummaries = async (req, res) => { console.log(`Favorite attribute for summary ID ${summaryId} modified to ${!currentFavVal}`); - return res.status(200).send("Modified summary successfully."); + + return res.status(200).json({ message: "Successfully modified" }); } catch (error) { console.error( "Error occurred while modifying favorite attribute", @@ -160,7 +164,7 @@ const modifyFavSummaries = async (req, res) => { const saveSummary = async (req, res) => { try { const { userId, videoId, summaryBody } = req.body; - console.log(userId) + console.log(userId); if (!userId) return res.status(400).send("User ID is required"); if (!videoId) return res.status(400).send("Video ID is required");