From daccc0cda388e634a84113d4f50a7ed565eeda5e Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Fri, 27 Mar 2026 16:27:30 +0100 Subject: [PATCH 1/2] Create update event function --- src/utils/events/updateEvent.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/utils/events/updateEvent.ts diff --git a/src/utils/events/updateEvent.ts b/src/utils/events/updateEvent.ts new file mode 100644 index 0000000..a46b610 --- /dev/null +++ b/src/utils/events/updateEvent.ts @@ -0,0 +1,13 @@ +import fetchWrapper from "../fetchWrapper"; +import getXSRFToken from "../getXSRF"; + +export default async function updateEvent(id: number, name: string, description: string, start: string, end: string) { + const csrfToken = await getXSRFToken(); + + return fetchWrapper( + `/api/events/${id}/update`, + { name, description, start, end }, + "POST", + { "X-XSRF-TOKEN": csrfToken } + ); +} From 49d2a0cc22e1c5517daa8403326e9fa93e6dd668 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Fri, 27 Mar 2026 16:27:39 +0100 Subject: [PATCH 2/2] Create update event component --- src/pages/EventDetail/EventDetailPage.tsx | 2 + .../components/EditEventBtn/EditEventBtn.tsx | 92 +++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 src/pages/EventDetail/components/EditEventBtn/EditEventBtn.tsx diff --git a/src/pages/EventDetail/EventDetailPage.tsx b/src/pages/EventDetail/EventDetailPage.tsx index 65e9a64..7c3d37a 100644 --- a/src/pages/EventDetail/EventDetailPage.tsx +++ b/src/pages/EventDetail/EventDetailPage.tsx @@ -7,6 +7,7 @@ import { AuthContext } from "../../contexts/Auth/AuthContext"; import { EventDetailContext } from "../../contexts/EventDetail/EventDetailContext"; import CreateTaskBtn from "./components/CreateTaskBtn/CreateTaskBtn"; import DeleteEventBtn from "./components/DeleteEventBtn/DeleteEventBtn"; +import EditEventBtn from "./components/EditEventBtn/EditEventBtn"; function EventDetailPage() { const params = useParams(); @@ -42,6 +43,7 @@ function EventDetailPage() { {user?.isAdmin && (
+
diff --git a/src/pages/EventDetail/components/EditEventBtn/EditEventBtn.tsx b/src/pages/EventDetail/components/EditEventBtn/EditEventBtn.tsx new file mode 100644 index 0000000..799c9cc --- /dev/null +++ b/src/pages/EventDetail/components/EditEventBtn/EditEventBtn.tsx @@ -0,0 +1,92 @@ +import styles from "../../EventDetailPage.module.css"; +import Button from "../../../../components/ui/Button/Button"; +import Modal from "../../../../components/ui/Modal/Modal"; +import TextInput from "../../../../components/ui/Input/Input"; +import { useContext, useState, useEffect } from "react"; +import { EventDetailContext } from "../../../../contexts/EventDetail/EventDetailContext"; +import updateEvent from "../../../../utils/events/updateEvent"; + +type EditEventBtnProps = { + id: string | number; +}; + +export default function EditEventBtn({ id }: EditEventBtnProps) { + const { eventInfo, updateEventInfo } = useContext(EventDetailContext) as any; + + const [open, setOpen] = useState(false); + const [name, setName] = useState(""); + const [description, setDescription] = useState(""); + const [start, setStart] = useState(""); + const [end, setEnd] = useState(""); + + useEffect(() => { + if (open && eventInfo) { + setName(eventInfo.name ?? ""); + setDescription(eventInfo.description ?? ""); + setStart(eventInfo.start ? eventInfo.start.slice(0, 16) : ""); + setEnd(eventInfo.end ? eventInfo.end.slice(0, 16) : ""); + } + }, [open, eventInfo]); + + const handleSubmit = async () => { + const res = await updateEvent(Number(id), name, description, start, end); + await updateEventInfo(id); + setOpen(false); + }; + + return ( + <> + + + setOpen(false)} title={"Modifier l'événement"}> +
+
+

Nom

+ setName(e.target.value)} + placeholder="Nom de l'événement" + /> +
+ +
+

Description

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

Début

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

Fin

+ setEnd(e.target.value)} + /> +
+ + +
+
+ + ); +}