From f6208cf95df3a3a671fd87eb2edb49696ada0101 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Fri, 27 Mar 2026 16:36:55 +0100 Subject: [PATCH 1/2] Create update task function --- src/utils/tasks/updateTask.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/utils/tasks/updateTask.ts diff --git a/src/utils/tasks/updateTask.ts b/src/utils/tasks/updateTask.ts new file mode 100644 index 0000000..ad18e82 --- /dev/null +++ b/src/utils/tasks/updateTask.ts @@ -0,0 +1,22 @@ +import fetchWrapper from "../fetchWrapper"; +import getXSRFToken from "../getXSRF"; + +interface UpdateTaskParams { + name: string; + description: string; + start: string; + end: string; + location: string; + max_participants: number; +} + +export default async function updateTask(id: number, params: UpdateTaskParams): Promise { + const csrfToken = await getXSRFToken(); + + return fetchWrapper( + `/api/events/tasks/${id}/update`, + params, + "POST", + { "X-XSRF-TOKEN": csrfToken } + ); +} From 2c1da8e93f676923338683ecdde0fee013dfd33b Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Fri, 27 Mar 2026 16:37:03 +0100 Subject: [PATCH 2/2] Create update task component --- .../components/EditTaskBtn/EditTaskBtn.tsx | 124 ++++++++++++++++++ .../components/EventTask/EventTask.tsx | 3 + 2 files changed, 127 insertions(+) create mode 100644 src/pages/EventDetail/components/EditTaskBtn/EditTaskBtn.tsx diff --git a/src/pages/EventDetail/components/EditTaskBtn/EditTaskBtn.tsx b/src/pages/EventDetail/components/EditTaskBtn/EditTaskBtn.tsx new file mode 100644 index 0000000..3da5cf4 --- /dev/null +++ b/src/pages/EventDetail/components/EditTaskBtn/EditTaskBtn.tsx @@ -0,0 +1,124 @@ +import { useContext, useEffect, useState } from "react"; +import { AuthContext } from "../../../../contexts/Auth/AuthContext"; +import { EventDetailContext } from "../../../../contexts/EventDetail/EventDetailContext"; +import Button from "../../../../components/ui/Button/Button"; +import Modal from "../../../../components/ui/Modal/Modal"; +import TextInput from "../../../../components/ui/Input/Input"; +import styles from "../../EventDetailPage.module.css"; +import updateTask from "../../../../utils/tasks/updateTask"; + +type EditTaskBtnProps = { + taskId: number; + eventId: number | string; +}; + +export default function EditTaskBtn({ taskId, eventId }: EditTaskBtnProps) { + const { user } = useContext(AuthContext) as any; + const { tasks, updateEventInfo } = useContext(EventDetailContext) as any; + const task = tasks?.find((t: any) => t.id === taskId); + + const [open, setOpen] = useState(false); + const [name, setName] = useState(""); + const [description, setDescription] = useState(""); + const [start, setStart] = useState(""); + const [end, setEnd] = useState(""); + const [location, setLocation] = useState(""); + const [maxParticipants, setMaxParticipants] = useState(""); + + useEffect(() => { + if (open && task) { + setName(task.name ?? ""); + setDescription(task.description ?? ""); + setStart(task.start ? task.start.slice(0, 16) : ""); + setEnd(task.end ? task.end.slice(0, 16) : ""); + setLocation(task.location ?? ""); + setMaxParticipants(task.max_participants?.toString() ?? ""); + } + }, [open, task]); + + if (!user?.isAdmin) return null; + + const handleSubmit = async () => { + await updateTask(taskId, { + name, + description, + start, + end, + location, + max_participants: Number(maxParticipants), + }); + await updateEventInfo(eventId); + setOpen(false); + }; + + return ( + <> + + + setOpen(false)} title={"Modifier la tâche"}> +
+
+

Nom

+ setName(e.target.value)} + placeholder="Nom de la tâche" + /> +
+ +
+

Description

+ setDescription(e.target.value)} + placeholder="Description" + /> +
+ +
+

Lieu

+ setLocation(e.target.value)} + placeholder="Lieu" + /> +
+ +
+

Participants max

+ setMaxParticipants(e.target.value)} + placeholder="Participants max" + /> +
+ +
+

Début

+ setStart(e.target.value)} + /> +
+ +
+

Fin

+ setEnd(e.target.value)} + /> +
+ + +
+
+ + ); +} diff --git a/src/pages/EventDetail/components/EventTask/EventTask.tsx b/src/pages/EventDetail/components/EventTask/EventTask.tsx index 841227e..7166f27 100644 --- a/src/pages/EventDetail/components/EventTask/EventTask.tsx +++ b/src/pages/EventDetail/components/EventTask/EventTask.tsx @@ -10,6 +10,7 @@ import { AuthContext } from "../../../../contexts/Auth/AuthContext"; import { EventDetailContext } from "../../../../contexts/EventDetail/EventDetailContext"; import DeleteTaskBtn from "../DeleteTaskBtn/DeleteTaskBtn"; import AssignUserBtn from "../AssignUserBtn/AssignUserBtn"; +import EditTaskBtn from "../EditTaskBtn/EditTaskBtn"; type EventTaskProps = { taskId: number; @@ -135,6 +136,8 @@ export default function EventTask({ taskId, index }: EventTaskProps) { )} + +