From 94ceff82885d9cab6e1819e6a0599f2dd745746e Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Fri, 13 Mar 2026 16:54:00 +0100 Subject: [PATCH] Create AssignUserBtn component --- .../AssignUserBtn/AssignUserBtn.module.css | 23 ++++++ .../AssignUserBtn/AssignUserBtn.tsx | 71 +++++++++++++++++++ .../components/EventTask/EventTask.tsx | 3 + 3 files changed, 97 insertions(+) create mode 100644 src/pages/EventDetail/components/AssignUserBtn/AssignUserBtn.module.css create mode 100644 src/pages/EventDetail/components/AssignUserBtn/AssignUserBtn.tsx diff --git a/src/pages/EventDetail/components/AssignUserBtn/AssignUserBtn.module.css b/src/pages/EventDetail/components/AssignUserBtn/AssignUserBtn.module.css new file mode 100644 index 0000000..c5798dc --- /dev/null +++ b/src/pages/EventDetail/components/AssignUserBtn/AssignUserBtn.module.css @@ -0,0 +1,23 @@ +.usersList { + display: flex; + flex-direction: column; + gap: 10px; + margin-top: 10px; +} + +.userCard { + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 14px; + border-radius: 10px; + background: rgba(255,255,255,0.05); + border: 1px solid rgba(255,255,255,0.08); +} + +.userName { + max-width: 200px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} \ No newline at end of file diff --git a/src/pages/EventDetail/components/AssignUserBtn/AssignUserBtn.tsx b/src/pages/EventDetail/components/AssignUserBtn/AssignUserBtn.tsx new file mode 100644 index 0000000..ee69cc6 --- /dev/null +++ b/src/pages/EventDetail/components/AssignUserBtn/AssignUserBtn.tsx @@ -0,0 +1,71 @@ +import { ReactNode, useEffect, useState } from "react"; +import Button from "../../../../components/ui/Button/Button"; +import Modal from "../../../../components/ui/Modal/Modal"; +import User from "../../../Volunteers/interfaces/user.interface"; +import getAllUser from "../../../../utils/users/getAllUsers"; +import Loading from "../../../../components/ui/Loading/Loading"; +import getUserById from "../../../../utils/users/getUserById"; +import styles from "./AssignUserBtn.module.css"; + +interface AssignUserBtnProps { + taskId: string | number; +} + +export default function AssignUserBtn({ taskId }: AssignUserBtnProps): ReactNode { + + const [open, setOpen] = useState(false); + const [users, setUsers] = useState>([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + (async () => { + setLoading(true); + + const result = await getAllUser(); + + if (result.status !== 200 || !Array.isArray(result.data)) { + console.error("Erreur lors du chargement des utilisateurs", result); + return; + } + + const usersData = await Promise.all( + result.data.map(async (id: number): Promise => { + const res = await getUserById(id); + + if (res.status === 200) { + return res.data as User; + } + + return null; + }) + ); + + setUsers(usersData.filter((user): user is User => user !== null)); + setLoading(false); + })(); + }, []); + + const handleAssign = async (user: User) => { + + }; + + return <> + + + setOpen(false)} title={"Assigner un utilisateur à cette tâche"}> +
+ {loading ? : users.map((user: User, index) => ( +
+

+ {user.name} {user.lastname} +

+ + +
+ ))} +
+
+ +} \ No newline at end of file diff --git a/src/pages/EventDetail/components/EventTask/EventTask.tsx b/src/pages/EventDetail/components/EventTask/EventTask.tsx index bebc62d..4a1188b 100644 --- a/src/pages/EventDetail/components/EventTask/EventTask.tsx +++ b/src/pages/EventDetail/components/EventTask/EventTask.tsx @@ -8,6 +8,7 @@ import isAssigned from "../../../../utils/tasks/isAssigned"; import Modal from "../../../../components/ui/Modal/Modal"; import { AuthContext } from "../../../../contexts/Auth/AuthContext"; import DeleteTaskBtn from "../DeleteTaskBtn/DeleteTaskBtn"; +import AssignUserBtn from "../AssignUserBtn/AssignUserBtn"; type EventTaskProps = { task: any; @@ -108,6 +109,8 @@ export default function EventTask({ task, index, eventId }: EventTaskProps) { taskId={task.id} taskName={task.name} /> + +