From bd415209a524ea598d34104a8f3df57102dc7d39 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Tue, 24 Feb 2026 16:34:23 +0100 Subject: [PATCH 1/8] Merge VolunteerProfilePage into ProfilePage --- src/pages/Profile/ProfilePage.tsx | 251 +++++++++++++----------------- src/router.js | 10 +- 2 files changed, 114 insertions(+), 147 deletions(-) diff --git a/src/pages/Profile/ProfilePage.tsx b/src/pages/Profile/ProfilePage.tsx index 84c2211..fccbfc1 100644 --- a/src/pages/Profile/ProfilePage.tsx +++ b/src/pages/Profile/ProfilePage.tsx @@ -1,165 +1,132 @@ -import { useContext, useEffect } from "react"; +import {useContext, useEffect, useState} from "react"; import styles from "./ProfilePage.module.css"; - -import { AuthContext } from "../../contexts/auth/AuthContext"; +import {AuthContext} from "../../contexts/auth/AuthContext"; import formatDate from "../../utils/date/formatDate"; +import Task from "../../components/Task/Task"; +import SettingsModal from "./components/SettingsModal/SettingsModal"; +import { useParams } from "react-router"; +import { useNavigate } from "react-router"; +import getUserById from "../../utils/users/getUserById.js"; -//import Task from "../../components/Task/Task"; -//import SettingsModal from "./components/SettingsModal/SettingsModal"; interface TaskType { - id: number; - title?: string; - completed?: boolean; - [key: string]: unknown; + id: number; + title?: string; + completed?: boolean; + + [key: string]: unknown; } interface User { - name: string; - lastname: string; - role: string; - email: string; - phone: string | null; - created_at: string; - tasks: TaskType[]; + id: number; + name: string; + lastname: string; + role: string; + email: string; + phone: string | null; + created_at: string; + tasks: TaskType[]; } interface AuthContextType { - user: User | null; - update: () => void; + user: User; + update: () => void; } - -function ProfilePage(){ - const { user, update } = useContext(AuthContext) as AuthContextType; - - useEffect(() => { - update(); - }, []); - - return ( -
-
-
-
- Photo de profil -
- -
-
-

- {user?.name} {user?.lastname} -

-
- -
-
-

- Role : {user?.role} -

-

- Membre depuis :{" "} - {user && formatDate(user.created_at)} -

-
- -
-

- Mail : {user?.email} -

-

- Téléphone :{" "} - {user?.phone ?? "Pas de numéro enregistré"} -

-
- -
- {/* */} -
-
- -

Tâches :

- - {/* {user && user.tasks.length > 0 ? ( - user.tasks.map((task) => ( - - )) - ) : ( -

Aucune tâche pour le moment.

- )}*/} -
-
-
-
- ); -} - -export default ProfilePage; - - -/*import React, { useContext, useEffect } from "react"; -import styles from "./ProfilePage.module.css"; -import { AuthContext } from "../../contexts/auth/AuthContext.js"; -import formatDate from "../../utils/date/formatDate.js"; -import Task from "../../components/Task/Task"; -import SettingsModal from "./components/SettingsModal/SettingsModal.jsx"; - function ProfilePage() { - const { user, update } = useContext(AuthContext); + const navigate = useNavigate(); + const { id } = useParams(); + const { user, update } = useContext(AuthContext) as AuthContextType; + const [profileUser, setProfileUser] = useState(null); + + const isOwnProfile = !id || user.id.toString() === id; useEffect(() => { - update(); - }, []) + update(); + (async () => { - return ( -
-
-
-
- Photo de profil -
-
-
-

{user?.name} {user?.lastname}

+ if(!isOwnProfile) { + console.log(id); + const res = await getUserById(id); + + if (res.status === 404) { + navigate("/404"); + return; + } + + if (res.status !== 200) { + console.error("Erreur lors du chargement du profil", res); + return; + } + + setProfileUser(res.data); + } else setProfileUser(user) + }) () + }, []); + + return ( +
+
+
+
+ Photo de profil +
+ +
+
+

+ {profileUser?.name} {profileUser?.lastname} +

+
+ +
+
+

+ Role : {profileUser?.role} +

+

+ Membre depuis :{" "} + {profileUser && formatDate(profileUser.created_at)} +

+
+ +
+

+ Mail : {profileUser?.email} +

+

+ Téléphone :{" "} + {profileUser?.phone ?? "Pas de numéro enregistré"} +

+
+ + {isOwnProfile && ( +
+ +
+ )} +
+ +

Tâches :

+ + {profileUser && profileUser.tasks.length > 0 ? ( + profileUser.tasks.map((task) => ( + + )) + ) : ( +

Aucune tâche pour le moment.

+ )} +
+
-
-
-

Role : {user?.role}

-

Membre depuis : {user && formatDate(user.created_at)}

-
-
-

Mail : {user?.email}

-

Téléphone : {user?.phone === null ? "Pas de numéro enregistré" : user?.phone}

-
-
- -
-
- -

Tâches :

- {user && user.tasks.length > 0 ? ( - user.tasks.map((task, index) => ( - - )) - ) : ( -

Aucune tâche pour le moment.

- )} - -
-
-
- ); + ); } -export default ProfilePage;*/ \ No newline at end of file +export default ProfilePage; \ No newline at end of file diff --git a/src/router.js b/src/router.js index 9d40c88..f7ee98e 100644 --- a/src/router.js +++ b/src/router.js @@ -47,10 +47,6 @@ const router = createBrowserRouter([ path: "/admin", Component:AdminPage, }, - { - path:"/profile", - Component:ProfilePage, - }, { path: "/events", Component: EventsPage, @@ -59,9 +55,13 @@ const router = createBrowserRouter([ path: "/volunteers", Component: VolunteersPage, }, + { + path:"/profile", + Component:ProfilePage, + }, { path: "/profile/:id", - Component: VolunteerProfilePage, + Component: ProfilePage, }, { path: "/events/:id", From 4ee690a6d5930c9ac98ef8a7a2690785bf630bb3 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Tue, 24 Feb 2026 16:34:34 +0100 Subject: [PATCH 2/8] Fix display --- src/pages/Profile/ProfilePage.module.css | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/pages/Profile/ProfilePage.module.css b/src/pages/Profile/ProfilePage.module.css index 3c5b26b..a03cb05 100644 --- a/src/pages/Profile/ProfilePage.module.css +++ b/src/pages/Profile/ProfilePage.module.css @@ -3,17 +3,20 @@ padding: 12px; box-sizing: border-box; } + .profileboard { width: 100%; padding: 16px; border-radius: 20px; box-sizing: border-box; } -.settingImage{ - width:100%; - display: flex; - justify-content: center; + +.settingImage { + display: flex; + justify-content: center; + align-items: center; } + .contentWrapper { display: flex; flex-direction: column; @@ -49,9 +52,9 @@ .description h2 { font-size: 1.6rem; margin-bottom: 10px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } .description button { From 8871d169df24b1fd0d029b876c1c0a486453bd29 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Tue, 24 Feb 2026 16:46:38 +0100 Subject: [PATCH 3/8] Show ManageMember component --- src/pages/Profile/ProfilePage.tsx | 5 + .../components/manageMember/ManageMember.jsx | 0 .../deactivateMember/deactivateMemberBtn.jsx | 0 .../manageMember/manageMember.module.css | 0 .../manageMember/modifyrole/ModifyRole.jsx | 0 .../VolunteerProfile/VolunteerProfilePage.jsx | 84 --------- .../VolunteerProfilePage.module.css | 163 ------------------ 7 files changed, 5 insertions(+), 247 deletions(-) rename src/pages/{VolunteerProfile => Profile}/components/manageMember/ManageMember.jsx (100%) rename src/pages/{VolunteerProfile => Profile}/components/manageMember/deactivateMember/deactivateMemberBtn.jsx (100%) rename src/pages/{VolunteerProfile => Profile}/components/manageMember/manageMember.module.css (100%) rename src/pages/{VolunteerProfile => Profile}/components/manageMember/modifyrole/ModifyRole.jsx (100%) delete mode 100644 src/pages/VolunteerProfile/VolunteerProfilePage.jsx delete mode 100644 src/pages/VolunteerProfile/VolunteerProfilePage.module.css diff --git a/src/pages/Profile/ProfilePage.tsx b/src/pages/Profile/ProfilePage.tsx index fccbfc1..f0037f9 100644 --- a/src/pages/Profile/ProfilePage.tsx +++ b/src/pages/Profile/ProfilePage.tsx @@ -7,6 +7,7 @@ import SettingsModal from "./components/SettingsModal/SettingsModal"; import { useParams } from "react-router"; import { useNavigate } from "react-router"; import getUserById from "../../utils/users/getUserById.js"; +import ManageMember from "./components/manageMember/ManageMember.jsx"; interface TaskType { @@ -25,6 +26,7 @@ interface User { email: string; phone: string | null; created_at: string; + isAdmin: boolean; tasks: TaskType[]; } @@ -83,6 +85,9 @@ function ProfilePage() {

{profileUser?.name} {profileUser?.lastname}

+ {(user?.isAdmin && profileUser && !isOwnProfile) && ( + + )}
diff --git a/src/pages/VolunteerProfile/components/manageMember/ManageMember.jsx b/src/pages/Profile/components/manageMember/ManageMember.jsx similarity index 100% rename from src/pages/VolunteerProfile/components/manageMember/ManageMember.jsx rename to src/pages/Profile/components/manageMember/ManageMember.jsx diff --git a/src/pages/VolunteerProfile/components/manageMember/deactivateMember/deactivateMemberBtn.jsx b/src/pages/Profile/components/manageMember/deactivateMember/deactivateMemberBtn.jsx similarity index 100% rename from src/pages/VolunteerProfile/components/manageMember/deactivateMember/deactivateMemberBtn.jsx rename to src/pages/Profile/components/manageMember/deactivateMember/deactivateMemberBtn.jsx diff --git a/src/pages/VolunteerProfile/components/manageMember/manageMember.module.css b/src/pages/Profile/components/manageMember/manageMember.module.css similarity index 100% rename from src/pages/VolunteerProfile/components/manageMember/manageMember.module.css rename to src/pages/Profile/components/manageMember/manageMember.module.css diff --git a/src/pages/VolunteerProfile/components/manageMember/modifyrole/ModifyRole.jsx b/src/pages/Profile/components/manageMember/modifyrole/ModifyRole.jsx similarity index 100% rename from src/pages/VolunteerProfile/components/manageMember/modifyrole/ModifyRole.jsx rename to src/pages/Profile/components/manageMember/modifyrole/ModifyRole.jsx diff --git a/src/pages/VolunteerProfile/VolunteerProfilePage.jsx b/src/pages/VolunteerProfile/VolunteerProfilePage.jsx deleted file mode 100644 index 763b7f7..0000000 --- a/src/pages/VolunteerProfile/VolunteerProfilePage.jsx +++ /dev/null @@ -1,84 +0,0 @@ -import styles from "./VolunteerProfilePage.module.css"; -import { useParams, useNavigate } from "react-router"; -import { useEffect, useState, useContext } from "react"; -import getUserById from "../../utils/users/getUserById.js"; -import formatDate from "../../utils/date/formatDate.js"; -import Task from "../../components/Task/Task.jsx"; -import ManageMember from "./components/manageMember/ManageMember.jsx"; -import { AuthContext } from "../../contexts/auth/AuthContext.js"; - -export default function VolunteerProfilePage() { - const { id } = useParams(); - const navigate = useNavigate(); - const { user: currentUser } = useContext(AuthContext); - - const [user, setUser] = useState(null); - - useEffect(() => { - (async () => { - const res = await getUserById(id); - - if (res.status === 404) { - navigate("/404"); - return; - } - - if (res.status !== 200) { - console.error("Erreur lors du chargement du profil", res); - return; - } - - setUser(res.data); - })(); - }, [id, navigate]); - - if (!user) return null; - - return ( -
-
-
-
- Photo de profil -
- -
-
-

{user.name} {user.lastname}

- {currentUser?.isAdmin && ( - - )} -
- -
-
-

Role : {user.role}

-

Membre depuis : {formatDate(user.created_at)}

-
-
-

Mail : {user.email}

-

- Téléphone :{" "} - {user.phone ?? "Pas de numéro enregistré"} -

-
-
- -

Tâches :

- {user.tasks?.length > 0 ? ( - user.tasks.map((task, index) => ( - - )) - ) : ( -

Aucune tâche pour le moment.

- )} -
-
-
-
- ); -} diff --git a/src/pages/VolunteerProfile/VolunteerProfilePage.module.css b/src/pages/VolunteerProfile/VolunteerProfilePage.module.css deleted file mode 100644 index 834af59..0000000 --- a/src/pages/VolunteerProfile/VolunteerProfilePage.module.css +++ /dev/null @@ -1,163 +0,0 @@ -.container { - width: 100%; - padding: 10px; - box-sizing: border-box; -} - -.profileboard { - width: 100%; - padding: 15px; - border-radius: 20px; - box-sizing: border-box; -} - -.contentWrapper { - display: flex; - flex-direction: column; - align-items: center; - width: 100%; -} - -.profilePictureContainer { - width: 120px; - height: 120px; - margin-bottom: 15px; -} - -.profilePicture { - width: 100%; - height: 100%; - border-radius: 50%; - object-fit: cover; -} - -.description { - width: 100%; - text-align: left; - margin-left:4%; -} - -.topDescription { - display: flex; - flex-direction: column; - align-items: center; - gap: 10px; - margin-bottom: 15px; -} - -.infoBlock { - width: 100%; - background: rgba(255, 255, 255, 0.1); - padding: 10px; - border-radius: 5px; -} - -.eventTasks { - max-height: 0; - overflow: hidden; - transition: max-height 0.3s ease-out, opacity 0.2s ease; - opacity: 0; - padding-left: 20px; -} - -.eventTasks.expanded { - max-height: 500px; - opacity: 1; - margin-top: 10px; -} -.description h2{ - font-size:30px; - -} -.profilePicture{ - width:90%; -} - -.settingsBtns { - display: flex; - gap: 5px; - justify-content: right; -} - -@media screen and (min-width: 768px) { - .contentWrapper { - flex-direction: row; - justify-content: flex-start; - align-items: flex-start; - } - - .profilePictureContainer { - width: 150px; - height: 150px; - margin-right: 20px; - margin-bottom: 0; - } - - .description { - width: calc(100% - 170px); - margin-left:4%; - } - - .topDescription { - flex-direction: row; - justify-content: space-between; - } - - .infoBlock { - width: 48%; - } - - .event { - padding: 15px; - } - .description h2{ - font-size:30px; - } - .profilePicture{ - width:90%; - } -} -.description button{ - width:50px; - height:50px; - -} - -.headerProfile { - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - margin-bottom: 20px; -} - -@media screen and (min-width: 1024px) { - .container { - max-width: 100%; - margin: 0 auto; - padding: 20px; - } - - .profileboard { - padding: 25px; - } - - .profilePictureContainer { - width: 30%; - height:auto; - } - .profilePicture{ - width:90%; - } - .description { - width: calc(100% - 200px); - margin-left:4%; - } - - .event { - padding: 18px; - } - .description h2{ - font-size:30px; - } -} From e30dd780ba3d6f6d7963b84f892e7aa7a920f1fe Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Tue, 24 Feb 2026 16:59:25 +0100 Subject: [PATCH 4/8] Remove VolunteerProfilePage import --- src/router.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/router.js b/src/router.js index f7ee98e..662f8f8 100644 --- a/src/router.js +++ b/src/router.js @@ -8,7 +8,6 @@ import ProfilePage from "./pages/Profile/ProfilePage"; import EventsPage from "./pages/Events/EventsPage.jsx"; import AdminPage from "./pages/Admin/AdminPage.jsx"; import ValidationErrorPage from "./pages/waitValidationPage/ValidationErrorPage.jsx"; -import VolunteerProfilePage from "./pages/VolunteerProfile/VolunteerProfilePage.jsx"; import PageNotFound from "./pages/PageNotFound/PageNotFound.jsx"; import eventDetail from "./pages/eventDetail/eventDetail.jsx"; import legalNotices from "./pages/LegalNotices/LegalNotices.jsx"; From c012a2a063d1133d667f1a147299ee499327ba2e Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Tue, 24 Feb 2026 16:59:34 +0100 Subject: [PATCH 5/8] Convert to TS --- .../SettingsModal/SettingsModal.jsx | 86 --------- .../SettingsModal/SettingsModal.tsx | 167 ++++++++++++++++++ 2 files changed, 167 insertions(+), 86 deletions(-) delete mode 100644 src/pages/Profile/components/SettingsModal/SettingsModal.jsx create mode 100644 src/pages/Profile/components/SettingsModal/SettingsModal.tsx diff --git a/src/pages/Profile/components/SettingsModal/SettingsModal.jsx b/src/pages/Profile/components/SettingsModal/SettingsModal.jsx deleted file mode 100644 index c5e0ff3..0000000 --- a/src/pages/Profile/components/SettingsModal/SettingsModal.jsx +++ /dev/null @@ -1,86 +0,0 @@ -import Modal from "../../../../components/ui/modal/modal.tsx"; -import Button from "../../../../components/ui/button/button.tsx"; -import styles from "./SettingsModal.module.css" -import { useContext, useState } from "react"; -import ThemeSwitcher from "../../../../components/ui/themeSwitcher/ThemeSwitcher.jsx"; -import { AuthContext } from "../../../../contexts/auth/AuthContext.js"; -import TextInput from "../../../../components/ui/input/input.tsx"; -import updateUser from "../../../../utils/users/updateUser.js"; -import deleteUser from "../../../../utils/users/deleteUser.js"; - - -export default function SettingsModal() { - - const { user, logout, update } = useContext(AuthContext); - - const [open, setOpen] = useState(false); - const [isDelete, setIsDelete] = useState(false); - - const [name, setName] = useState(user?.name); - const [lastname, setLastName] = useState(user?.lastname); - const [phone, setPhone] = useState(user?.phone); - - const handleLogout = () => { - logout(); - } - - const handleSubmit = async () => { - await updateUser(name, lastname, phone); - update(); - } - - const handleDelete = async () => { - await deleteUser(); - update(); - } - - return ( - <> - - - setOpen(false)}> -
- -
-

Compte

- - - -
-

Changer de Prénom

- setName(e.target.value)} type={"text"} /> -
- -
-

Changer de nom

- setLastName(e.target.value)} type={"text"} /> -
- -
-

Changer de numéro de téléphone

- setPhone(e.target.value)} type={"text"} /> -
- - - -
- -
-

Apparence

- -
-
-
- - - setIsDelete(false)}> -
-

Êtes vous vraiment sûr de vouloir supprimer votre compte ?

- -
-
- - ) -} \ No newline at end of file diff --git a/src/pages/Profile/components/SettingsModal/SettingsModal.tsx b/src/pages/Profile/components/SettingsModal/SettingsModal.tsx new file mode 100644 index 0000000..fa6701f --- /dev/null +++ b/src/pages/Profile/components/SettingsModal/SettingsModal.tsx @@ -0,0 +1,167 @@ +import {useContext, useState, ChangeEvent} from "react"; +import Modal from "../../../../components/ui/modal/modal"; +import Button from "../../../../components/ui/button/button"; +import styles from "./SettingsModal.module.css"; +import ThemeSwitcher from "../../../../components/ui/themeSwitcher/ThemeSwitcher.jsx"; +import {AuthContext} from "../../../../contexts/auth/AuthContext"; +import TextInput from "../../../../components/ui/input/input"; +import updateUser from "../../../../utils/users/updateUser.js"; +import deleteUser from "../../../../utils/users/deleteUser.js"; + +interface TaskType { + id: number; + title?: string; + completed?: boolean; + + [key: string]: unknown; +} + +interface User { + id: number; + name: string; + lastname: string; + role: string; + email: string; + phone: string | null; + created_at: string; + isAdmin: boolean; + tasks: TaskType[]; +} + +interface AuthContextType { + user: User; + update: () => void; + logout: () => void; +} + +export default function SettingsModal() { + const {user, logout, update} = useContext(AuthContext) as AuthContextType; + + const [open, setOpen] = useState(false); + const [isDelete, setIsDelete] = useState(false); + + const [name, setName] = useState(user?.name ?? ""); + const [lastname, setLastName] = useState(user?.lastname ?? ""); + const [phone, setPhone] = useState(user?.phone ?? ""); + + const handleLogout = (): void => { + logout(); + }; + + const handleSubmit = async (): Promise => { + await updateUser(name, lastname, phone || null); + update(); + setOpen(false); + }; + + const handleDelete = async (): Promise => { + await deleteUser(); + update(); + }; + + const handleNameChange = (e: ChangeEvent): void => { + setName(e.target.value); + }; + + const handleLastnameChange = (e: ChangeEvent): void => { + setLastName(e.target.value); + }; + + const handlePhoneChange = (e: ChangeEvent): void => { + setPhone(e.target.value); + }; + + + return ( + <> + + + setOpen(false)} + > +
+
+

Compte

+ + + + + +
+

Changer de Prénom

+ +
+ +
+

Changer de nom

+ +
+ +
+

Changer de numéro de téléphone

+ +
+ + +
+ +
+

Apparence

+ +
+
+
+ + setIsDelete(false)} + > +
+

+ Êtes vous vraiment sûr de vouloir supprimer votre compte ? +

+ +
+
+ + ); +} \ No newline at end of file From d8baa33330c018c5274a0436947c67ed708e0f9c Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Tue, 24 Feb 2026 17:00:45 +0100 Subject: [PATCH 6/8] Fix className error --- src/components/ui/button/button.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ui/button/button.tsx b/src/components/ui/button/button.tsx index 1866c39..b57fc8c 100644 --- a/src/components/ui/button/button.tsx +++ b/src/components/ui/button/button.tsx @@ -7,7 +7,7 @@ interface ButtonProps { children: ReactNode; variant?: ButtonVariant; onClick?: MouseEventHandler; - className?: string; + className?: string | undefined; } const Button = ({ From f0534bd0f5505ac5dbdbbfa63a28b0d7219fd6f1 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Tue, 24 Feb 2026 17:17:47 +0100 Subject: [PATCH 7/8] Fix style --- .../SettingsModal/SettingsModal.module.css | 71 +++++++++++++------ 1 file changed, 48 insertions(+), 23 deletions(-) diff --git a/src/pages/Profile/components/SettingsModal/SettingsModal.module.css b/src/pages/Profile/components/SettingsModal/SettingsModal.module.css index d6b0b12..7808db3 100644 --- a/src/pages/Profile/components/SettingsModal/SettingsModal.module.css +++ b/src/pages/Profile/components/SettingsModal/SettingsModal.module.css @@ -1,73 +1,98 @@ .content { width: 100%; - padding: 16px; + padding: 20px; display: flex; flex-direction: column; - gap: 20px; + gap: 28px; } .modifyIcon { - height: 28px; - width: 28px; + height: 26px; + width: 26px; + transition: transform 0.2s ease, opacity 0.2s ease; +} + +.modifyIcon:hover { + transform: rotate(15deg); + opacity: 0.8; } .section { display: flex; flex-direction: column; - gap: 12px; - margin-top: 10px; + gap: 16px; + padding: 18px; + border-radius: 12px; + background: var(--glass-bg, rgba(255, 255, 255, 0.25)); + backdrop-filter: blur(6px); } .section h3 { - font-size: 1.1rem; - margin-bottom: 5px; + font-size: 1.15rem; + font-weight: 600; } .section h4 { - font-size: 0.95rem; + font-size: 0.9rem; font-weight: 500; -} - -.submitBtn { - width: 100%; - margin-top: 15px; + opacity: 0.85; } .section button { width: 100%; } -@media (min-width: 600px) { +.submitBtn { + width: 100%; + text-align: center; + margin-top: 10px; +} + +.alignText { + text-align: center; + line-height: 1.5; +} + +.section :global(input) { + width: 100%; + box-sizing: border-box; +} + +@media (min-width: 640px) { .content { - padding: 24px; + padding: 28px; + gap: 32px; } - .section h3 { - font-size: 1.2rem; + .section { + padding: 22px; + gap: 18px; } .submitBtn { width: auto; align-self: center; - min-width: 200px; + min-width: 220px; } .section button { width: fit-content; } } + @media (min-width: 900px) { .content { - padding: 30px; - gap: 30px; + padding: 36px; + gap: 36px; } .section { - gap: 14px; + padding: 26px; + border-radius: 16px; } .modifyIcon { height: 30px; width: 30px; } -} +} \ No newline at end of file From 8d7a55c5f85429f0722f8bc291ff2a5bd4ca8514 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Tue, 24 Feb 2026 17:29:24 +0100 Subject: [PATCH 8/8] Fix update --- src/pages/Profile/ProfilePage.tsx | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/pages/Profile/ProfilePage.tsx b/src/pages/Profile/ProfilePage.tsx index f0037f9..8e613d0 100644 --- a/src/pages/Profile/ProfilePage.tsx +++ b/src/pages/Profile/ProfilePage.tsx @@ -4,8 +4,8 @@ import {AuthContext} from "../../contexts/auth/AuthContext"; import formatDate from "../../utils/date/formatDate"; import Task from "../../components/Task/Task"; import SettingsModal from "./components/SettingsModal/SettingsModal"; -import { useParams } from "react-router"; -import { useNavigate } from "react-router"; +import {useParams} from "react-router"; +import {useNavigate} from "react-router"; import getUserById from "../../utils/users/getUserById.js"; import ManageMember from "./components/manageMember/ManageMember.jsx"; @@ -35,21 +35,20 @@ interface AuthContextType { update: () => void; } - function ProfilePage() { const navigate = useNavigate(); - const { id } = useParams(); - const { user, update } = useContext(AuthContext) as AuthContextType; + const {id} = useParams(); + const {user, update} = useContext(AuthContext) as AuthContextType; const [profileUser, setProfileUser] = useState(null); const isOwnProfile = !id || user.id.toString() === id; useEffect(() => { - update(); + (async () => { - if(!isOwnProfile) { + if (!isOwnProfile) { console.log(id); const res = await getUserById(id); @@ -64,9 +63,12 @@ function ProfilePage() { } setProfileUser(res.data); - } else setProfileUser(user) - }) () - }, []); + } else { + update(); + setProfileUser(user) + } + })() + }, [user]); return (
@@ -86,7 +88,7 @@ function ProfilePage() { {profileUser?.name} {profileUser?.lastname} {(user?.isAdmin && profileUser && !isOwnProfile) && ( - + )}
@@ -113,7 +115,7 @@ function ProfilePage() { {isOwnProfile && (
- +
)}