Skip to content
Snippets Groups Projects
Commit 7d788176 authored by ZAIME Mohammed amine's avatar ZAIME Mohammed amine
Browse files

Merge branch 'features/useProfile' into 'main'

implement user profile

See merge request !21
parents 4a928dd3 5ea9fde2
No related branches found
No related tags found
1 merge request!21implement user profile
...@@ -18,10 +18,9 @@ function App() { ...@@ -18,10 +18,9 @@ function App() {
<Navbar /> <Navbar />
<main className="flex-grow pt-4"> <main className="flex-grow pt-4">
<Routes> <Routes>
<Route path="/signin" element={<SignIn />} /> <Route path="/" element={<SignIn />} />
<Route path="/signup" element={<SignUp />} /> <Route path="/signup" element={<SignUp />} />
<Route path="/" element={<Home />} /> <Route path="/home" element={<Home />} />
<Route path="/todolist" element={<Todolist />} />
</Routes> </Routes>
</main> </main>
<Footer /> <Footer />
......
...@@ -26,7 +26,7 @@ const Navbar = () => { ...@@ -26,7 +26,7 @@ const Navbar = () => {
const handleLogout = () => { const handleLogout = () => {
localStorage.removeItem("user"); localStorage.removeItem("user");
setIsAuthenticated(false); setIsAuthenticated(false);
navigate("/signin"); navigate("/");
}; };
return ( return (
...@@ -34,25 +34,24 @@ const Navbar = () => { ...@@ -34,25 +34,24 @@ const Navbar = () => {
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="flex justify-between h-16"> <div className="flex justify-between h-16">
<div className="flex items-center"> <div className="flex items-center">
<Link to="/" className="flex items-center gap-2"> <Link to="/home" className="flex items-center gap-2">
<CheckCircle className="h-8 w-8 text-violet-600 dark:text-violet-400" /> <CheckCircle className="h-8 w-8 text-violet-600 dark:text-violet-400" />
<span className="text-xl font-semibold text-gray-900 dark:text-white">TaskMaster</span> <span className="text-xl font-semibold text-gray-900 dark:text-white">TaskMaster</span>
</Link> </Link>
</div> </div>
<div className="flex items-center gap-6"> <div className="flex items-center gap-6">
{isAuthenticated ? (
<Link <Link
to="/" to="/home"
className="text-gray-700 dark:text-white hover:text-violet-600 dark:hover:text-violet-400 px-3 py-2 rounded-md text-sm font-medium" className="text-gray-700 dark:text-white hover:text-violet-600 dark:hover:text-violet-400 px-3 py-2 rounded-md text-sm font-medium"
> >
Dashboard Dashboard
</Link> </Link>) : (<p></p>)}
<Link
to="/todolist"
className="text-gray-700 dark:text-white hover:text-violet-600 dark:hover:text-violet-400 px-3 py-2 rounded-md text-sm font-medium"
>
Tasks List
</Link>
{/* Bouton Light/Dark Mode */} {/* Bouton Light/Dark Mode */}
<button onClick={toggleTheme} className="p-2 rounded-md bg-gray-200 dark:bg-gray-700"> <button onClick={toggleTheme} className="p-2 rounded-md bg-gray-200 dark:bg-gray-700">
...@@ -72,7 +71,7 @@ const Navbar = () => { ...@@ -72,7 +71,7 @@ const Navbar = () => {
<> <>
<Link <Link
to="/signin" to="/"
className="text-gray-700 dark:text-white hover:text-violet-600 dark:hover:text-violet-400 px-3 py-2 rounded-md text-sm font-medium" className="text-gray-700 dark:text-white hover:text-violet-600 dark:hover:text-violet-400 px-3 py-2 rounded-md text-sm font-medium"
> >
Login Login
......
...@@ -5,9 +5,10 @@ import { useTasks } from "@context/TasksContext"; ...@@ -5,9 +5,10 @@ import { useTasks } from "@context/TasksContext";
const TaskStats = () => { const TaskStats = () => {
const { tasks } = useTasks(); const { tasks } = useTasks();
const completed = tasks.filter(task => task.isCompleted).length; const currentUser = JSON.parse(localStorage.getItem("currentUser"));
const incompleted = tasks.filter(task => !task.isCompleted).length; const completed = tasks.filter(task => task.isCompleted && task.email == currentUser.email).length;
const total = tasks.length; const incompleted = tasks.filter(task => !task.isCompleted && task.email == currentUser.email).length;
const total = tasks.filter(task => task.email == currentUser.email).length;
return ( return (
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4"> <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4">
......
...@@ -4,8 +4,10 @@ import { useTasks } from "@context/TasksContext"; ...@@ -4,8 +4,10 @@ import { useTasks } from "@context/TasksContext";
const TasksStatPercent = () => { const TasksStatPercent = () => {
const { tasks } = useTasks(); const { tasks } = useTasks();
const totalTasks = tasks.length; const currentUser = JSON.parse(localStorage.getItem("currentUser"));
const completedTasks = tasks.filter(task => task.isCompleted).length;
const totalTasks = tasks.filter(task => task.email == currentUser.email).length;
const completedTasks = tasks.filter(task => task.isCompleted && task.email == currentUser.email).length;
const radius = 50; const radius = 50;
const circumference = 2 * Math.PI * radius; const circumference = 2 * Math.PI * radius;
......
...@@ -8,7 +8,9 @@ export default function Todolist({ selectedDate=null }) { ...@@ -8,7 +8,9 @@ export default function Todolist({ selectedDate=null }) {
const { tasks, setTasks } = useTasks() const { tasks, setTasks } = useTasks()
const newTask = () => { const newTask = () => {
const currentUser = JSON.parse(localStorage.getItem("currentUser"));
return { return {
email : currentUser.email,
name: "", name: "",
isCompleted: false, isCompleted: false,
dueDate: new Date().toISOString().split("T")[0], dueDate: new Date().toISOString().split("T")[0],
...@@ -57,7 +59,8 @@ export default function Todolist({ selectedDate=null }) { ...@@ -57,7 +59,8 @@ export default function Todolist({ selectedDate=null }) {
} }
const filteredTasks = selectedDate ? tasks.filter(task => { const filteredTasks = selectedDate ? tasks.filter(task => {
if (!task.dueDate) return false; const currentUser = JSON.parse(localStorage.getItem("currentUser"));
if (!task.dueDate || task.email != currentUser.email) return false;
const taskDate = new Date(task.dueDate); const taskDate = new Date(task.dueDate);
return taskDate.toDateString() === selectedDate.toDateString(); return taskDate.toDateString() === selectedDate.toDateString();
}) : tasks; }) : tasks;
......
...@@ -16,7 +16,7 @@ const SignIn = () => { ...@@ -16,7 +16,7 @@ const SignIn = () => {
if (result.success) { if (result.success) {
localStorage.setItem("user", JSON.stringify(result.user)); localStorage.setItem("user", JSON.stringify(result.user));
window.dispatchEvent(new Event("storage")); window.dispatchEvent(new Event("storage"));
navigate("/"); // Rediriger vers Home après connexion navigate("/home"); // Rediriger vers Home après connexion
} else { } else {
setError(result.message); setError(result.message);
} }
......
...@@ -15,7 +15,7 @@ const SignUp = () => { ...@@ -15,7 +15,7 @@ const SignUp = () => {
const result = signUp(name, email, password); const result = signUp(name, email, password);
if (result.success) { if (result.success) {
navigate("/signin"); // Rediriger vers Sign In après l'inscription navigate("/"); // Rediriger vers Sign In après l'inscription
} else { } else {
setError(result.message); setError(result.message);
} }
...@@ -72,7 +72,7 @@ const SignUp = () => { ...@@ -72,7 +72,7 @@ const SignUp = () => {
<p className="mt-4 text-center text-sm text-gray-600 dark:text-gray-300"> <p className="mt-4 text-center text-sm text-gray-600 dark:text-gray-300">
Already have an account? Already have an account?
<Link to="/signin" className="text-blue-600 dark:text-blue-400 ml-1">Sign in</Link> <Link to="/" className="text-blue-600 dark:text-blue-400 ml-1">Sign in</Link>
</p> </p>
</div> </div>
</div> </div>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment