From 9cd56a8472a2656c7c777f2e4c69dd0f8f7f47ea Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Mon, 15 Dec 2025 14:25:25 +0100 Subject: [PATCH 1/3] Create event modal --- src/components/ToolBar/ToolBar.jsx | 8 ++------ src/components/ToolBar/ToolBar.module.css | 5 ----- .../createEventBtn/CreateEventBtn.jsx | 20 +++++++++++++++++++ .../createEventBtn/createEventBtn.module.css | 20 +++++++++++++++++++ 4 files changed, 42 insertions(+), 11 deletions(-) create mode 100644 src/components/createEventBtn/CreateEventBtn.jsx create mode 100644 src/components/createEventBtn/createEventBtn.module.css diff --git a/src/components/ToolBar/ToolBar.jsx b/src/components/ToolBar/ToolBar.jsx index d1f069f..67ff494 100644 --- a/src/components/ToolBar/ToolBar.jsx +++ b/src/components/ToolBar/ToolBar.jsx @@ -1,8 +1,8 @@ import styles from "./ToolBar.module.css" -import {Link} from "react-router"; import Filter from "../Filter/Filter.jsx"; import {useEffect, useState} from "react"; import SearchBar from "../SearchBar/SearchBar.jsx"; +import CreateEventBtn from "../createEventBtn/CreateEventBtn.jsx"; function ToolBar({setFilters, filters, showCreate = true}) { @@ -37,11 +37,7 @@ function ToolBar({setFilters, filters, showCreate = true}) { ) : null}
{showCreate ? ( - - + - + ) : null} + + setIsOpen(false)}> + + + + + +} \ No newline at end of file diff --git a/src/components/createEventBtn/createEventBtn.module.css b/src/components/createEventBtn/createEventBtn.module.css new file mode 100644 index 0000000..fae169d --- /dev/null +++ b/src/components/createEventBtn/createEventBtn.module.css @@ -0,0 +1,20 @@ +.createButton { + font-size: 1.5rem; + color: black; +} + +.createButton { + display: flex; + align-items: center; + justify-content: center; + border: none; + border-radius: 50% !important; + width: 55px !important; + height: 55px !important; + transition: all 0.5s ease; +} + +.createButton:hover { + transform: translateY(-5px); + cursor: pointer; +} \ No newline at end of file From 67b02c297f65916dc7ceb8587cb16cbdb52de5fa Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Mon, 15 Dec 2025 15:31:56 +0100 Subject: [PATCH 2/3] Create event function --- src/utils/event/createEvent.js | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/utils/event/createEvent.js diff --git a/src/utils/event/createEvent.js b/src/utils/event/createEvent.js new file mode 100644 index 0000000..4098dd7 --- /dev/null +++ b/src/utils/event/createEvent.js @@ -0,0 +1,36 @@ +import getXSRFToken from "../getXSRF.js"; + +export default async function createEvent(name, description) { + const csrfToken = await getXSRFToken(); + + try { + const response = await fetch(`http://${import.meta.env.VITE_API_URL}/api/events/create`, { + method: 'POST', + credentials: 'include', + headers: { + 'Content-Type': 'application/json', + 'X-XSRF-TOKEN': csrfToken, + 'Accept': 'application/json' + }, + body: JSON.stringify({ name, description }), + }); + + const data = await response.json(); + + if (!response.ok) { + if (response.status === 422) { + return { + status: 422, + errors: data.errors + }; + } + + throw new Error(`Erreur HTTP ${response.status}`); + } + + return { status: response.status, data }; + + } catch (error) { + return { status: "error", error }; + } +} From 9ad78b342e6735bec7bdd04e95b7f81fcc262a2e Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Mon, 15 Dec 2025 15:32:11 +0100 Subject: [PATCH 3/3] Call create function + update style --- .../createEventBtn/CreateEventBtn.jsx | 22 +++++++++++++++++++ .../createEventBtn/createEventBtn.module.css | 21 ++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/components/createEventBtn/CreateEventBtn.jsx b/src/components/createEventBtn/CreateEventBtn.jsx index 9a4a7c2..3e638db 100644 --- a/src/components/createEventBtn/CreateEventBtn.jsx +++ b/src/components/createEventBtn/CreateEventBtn.jsx @@ -2,19 +2,41 @@ import styles from "./createEventBtn.module.css" import { useState } from "react"; import Modal from "../ui/modal/modal.jsx"; import Button from "../ui/button/button.jsx"; +import TextInput from "../ui/input/input.jsx"; +import createEvent from "../../utils/event/createEvent.js" export default function CreateEventBtn() { const [isOpen, setIsOpen] = useState(false); + const [name, setName] = useState(""); + const [description, setDescription] = useState(""); + + const handleCreateEvent = async () => { + + if(name !== "" || description !== "") await createEvent(name, description); + setIsOpen(false); + } return <> setIsOpen(false)}> +
+
+

Titre

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

Description

+ setDescription(e.target.value)} /> +
+ + +
} \ No newline at end of file diff --git a/src/components/createEventBtn/createEventBtn.module.css b/src/components/createEventBtn/createEventBtn.module.css index fae169d..5676052 100644 --- a/src/components/createEventBtn/createEventBtn.module.css +++ b/src/components/createEventBtn/createEventBtn.module.css @@ -17,4 +17,25 @@ .createButton:hover { transform: translateY(-5px); cursor: pointer; +} + +.inputContainer { + + h2 { + margin-bottom: 0.5rem; + } + + margin: 1em; +} + +.create { + align-self: center; +} + +.section { + display: flex; + flex-direction: column; + gap: 10px; + margin-top: 15px; + margin-bottom: 15px; } \ No newline at end of file