diff --git a/frontend/peepal_react/src/WC_Komponens/Hozzadas/HozzaadForm.jsx b/frontend/peepal_react/src/WC_Komponens/Hozzadas/HozzaadForm.jsx index 93f5b60..85f800e 100644 --- a/frontend/peepal_react/src/WC_Komponens/Hozzadas/HozzaadForm.jsx +++ b/frontend/peepal_react/src/WC_Komponens/Hozzadas/HozzaadForm.jsx @@ -1,4 +1,4 @@ -import React, { useState} from "react"; +import React, { useState } from "react"; import { useNavigate } from "react-router-dom"; export default function HozzaadForm() { @@ -10,43 +10,53 @@ export default function HozzaadForm() { const [nyitva, setNyitva] = useState(""); const [utvonal, setUtvonal] = useState(""); const [koordinatak, setKoordinatak] = useState(""); + const [errors, setErrors] = useState({}); const navigate = useNavigate(); - const handleSubmit = (event) => { + const handleSubmit = async (event) => { event.preventDefault(); - const wcInfo = { - nev: nev, - kerulet_id: kerulet_id, - kozeli_megall: kozeli_megall, - akadalym: akadalym, - ar: ar, - nyitva: nyitva, - utvonal: utvonal, - koordinatak: koordinatak, - felhasznalo_id: null + + // Validáció: egyszerű kötelező mező ellenőrzések + const newErrors = {}; + if (!nev.trim()) newErrors.nev = "A név megadása kötelező."; + if (!kerulet_id) newErrors.kerulet_id = "Kerület kiválasztása kötelező."; + if (!kozeli_megall.trim()) newErrors.kozeli_megall = "A megálló megadása kötelező."; + if (!koordinatak.trim()) newErrors.koordinatak = "A koordináták megadása kötelező."; + if (!/^-?\d+\.\d+, ?-?\d+\.\d+$/.test(koordinatak)) newErrors.koordinatak = "Helytelen formátum. (pl. 47.1234, 19.1234)"; + + if (Object.keys(newErrors).length > 0) { + setErrors(newErrors); + return; } - fetch("http://localhost:8000/api/hozzaadas", { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify(wcInfo) - }) - .then(async (response) => { + const wcInfo = { + nev, + kerulet_id, + kozeli_megall, + akadalym, + ar, + nyitva, + utvonal, + koordinatak, + felhasznalo_id: null + }; + + try { + const response = await fetch("http://localhost:8000/api/hozzaadas", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(wcInfo) + }); + if (!response.ok) { const errorData = await response.json(); console.error("Hiba a POST kérésnél:", errorData); alert("Hiba történt az adatok mentésekor."); return; } - - const newWC = await response.json(); - - console.log("Sikeres mentés:", newWC); - - // csak siker után törlünk mindent és navigálunk + + await response.json(); setNev(""); setKeruletId(""); setKozeli(""); @@ -55,163 +65,131 @@ export default function HozzaadForm() { setNyitva(""); setUtvonal(""); setKoordinatak(""); + setErrors({}); navigate("/"); - }) - .catch((error) => { - console.log("Hálózati hiba:", error); + + } catch (error) { + console.error("Hálózati hiba:", error); alert("Nem sikerült csatlakozni a szerverhez."); - }); - } - - const ToolTip = ({children, text}) => { - return( -
- {children} -
- {text} -
+ } + }; + + const ToolTip = ({ children, text }) => ( +
+ {children} +
+ {text}
+
+ ); - - ) - } + const convertToRoman = (num) => { + const roman = { M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4, I: 1 }; + let str = ""; + for (let i in roman) { + const q = Math.floor(num / roman[i]); + num -= q * roman[i]; + str += i.repeat(q); + } + return str; + }; return (
-
+

Adjon hozzá nyilvános mosdót, ha nem találja az oldalon

- + - setNev(event.target.value)} - placeholder="Mosdó neve" + value={nev} + onChange={(e) => setNev(e.target.value)} className="w-full px-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" + placeholder="Mosdó neve" /> + {errors.nev &&

{errors.nev}

} - - - {/* - setKerulet(event.target.value)} - placeholder="Kerület" - className="w-full px-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" - /> - */} + {errors.kerulet_id &&

{errors.kerulet_id}

} - setKozeli(event.target.value)} - placeholder="Legközelebbi megálló" + value={kozeli_megall} + onChange={(e) => setKozeli(e.target.value)} className="w-full px-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" + placeholder="Legközelebbi megálló" /> + {errors.kozeli_megall &&

{errors.kozeli_megall}

} - setAr(event.target.value)} - placeholder="Ár (HUF)" + setAr(e.target.value)} className="w-full px-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" + placeholder="Ár (HUF)" /> - setNyitva(event.target.value)} - placeholder="Nyitvatartás (Óra:Perc-Óra:Perc)" + setNyitva(e.target.value)} className="w-full px-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" + placeholder="Nyitvatartás (Óra:Perc-Óra:Perc)" />
Akadálymentes:
- +
- setUtvonal(event.target.value)} - placeholder="Útvonal link" + setUtvonal(e.target.value)} className="w-full px-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" + placeholder="Útvonal link" /> -
- +
- setKoordinatak(event.target.value)} - placeholder="Koordináták" + setKoordinatak(e.target.value)} className="w-full px-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" + placeholder="Koordináták" /> + {errors.koordinatak &&

{errors.koordinatak}

} - +
);