From a269274359feac820bda8cf0fb3390c75d1c7ac1 Mon Sep 17 00:00:00 2001 From: Mag <166319982+magali-la@users.noreply.github.com> Date: Sun, 23 Nov 2025 11:50:23 -0500 Subject: [PATCH 01/13] feat(dashboard): store user tasks from modal in local storage on save, updated route for save button --- src/components/Dashboard/TaskModal.jsx | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/components/Dashboard/TaskModal.jsx b/src/components/Dashboard/TaskModal.jsx index 1e96f06..f7beaf6 100644 --- a/src/components/Dashboard/TaskModal.jsx +++ b/src/components/Dashboard/TaskModal.jsx @@ -1,8 +1,11 @@ import { useEffect, useState } from 'react'; import Button from "../Button"; import { IoClose } from "react-icons/io5"; +import { useNavigate } from 'react-router-dom'; export default function TaskModal({ isOpen, onClose}) { + const navigate = useNavigate(); + const [selectedTask, setSelectedTask] = useState([]); // log the selectedTask after the array changes to update automatically @@ -22,7 +25,17 @@ export default function TaskModal({ isOpen, onClose}) { console.log(`${challenge} button deselected!`); setSelectedTask(selectedTask.filter(item => item !== challenge)); } - } + } + + // function to save selected tasks in local storage for dashboard states + function saveTasks(){ + // save to local storage + localStorage.setItem("userTasks", JSON.stringify(selectedTask)); + console.log("User saved these tasks:", selectedTask); + + // then route to the challenges page + navigate("/challenges"); + } if (!isOpen) return null; @@ -69,7 +82,7 @@ export default function TaskModal({ isOpen, onClose}) { isActive={selectedTask.includes('Journal Entry: Respond to journal prompts or share your thoughts and feelings each day.')} /> - + ); From 28c657c9f1660862297f0088cab1a5d940f33e90 Mon Sep 17 00:00:00 2001 From: Mag <166319982+magali-la@users.noreply.github.com> Date: Sun, 23 Nov 2025 14:07:49 -0500 Subject: [PATCH 02/13] feat(dashboard): add useEffect and hasTasks state for conditional rendering of empty dashboard state --- public/empty.svg | 29 ++++++++++ src/pages/Dashboard.jsx | 118 ++++++++++++++++++++++++---------------- 2 files changed, 99 insertions(+), 48 deletions(-) create mode 100644 public/empty.svg diff --git a/public/empty.svg b/public/empty.svg new file mode 100644 index 0000000..ce04aba --- /dev/null +++ b/public/empty.svg @@ -0,0 +1,29 @@ + diff --git a/src/pages/Dashboard.jsx b/src/pages/Dashboard.jsx index 4b10d49..57a516a 100644 --- a/src/pages/Dashboard.jsx +++ b/src/pages/Dashboard.jsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useEffect, useState } from "react"; import Button from "../components/Button"; import DashboardTile from "../components/Dashboard/DashboardTile"; import TaskModal from "../components/Dashboard/TaskModal"; @@ -9,68 +9,90 @@ let loginStreak = 1; export default function Dashboard() { const [taskModalOpen, setTaskModalOpen] = useState(false); + // state for whether tasks have been selected or not from dashboard modal + const [hasTasks, setHasTasks] = useState(false); + + useEffect(() => { + // load userTasks from modal from local storage + let userTasks = JSON.parse(localStorage.getItem("userTasks") || '[]'); + console.log("Loaded tasks from local storage:", userTasks); + // if it's not empty, setHasTasks state to true + if (userTasks.length !== 0){ + setHasTasks(true); + } + }, []); return (
Nothing to Display Yet!
+