navigate("/deck-creator")}
+ onClick={() => goDeckCreator()}
className="flex flex-col items-center justify-center h-48 bg-[color:var(--color-card)] border-2 border-dashed border-[color:var(--color-success)] rounded-2xl cursor-pointer hover:bg-[color:var(--color-success)]/20 transition-all duration-200 shadow-lg"
>
diff --git a/SerpentRace_Frontend/src/components/Landingpage/LandingPage.jsx b/SerpentRace_Frontend/src/components/Landingpage/LandingPage.jsx
index b9e61502..8f95ee75 100644
--- a/SerpentRace_Frontend/src/components/Landingpage/LandingPage.jsx
+++ b/SerpentRace_Frontend/src/components/Landingpage/LandingPage.jsx
@@ -5,9 +5,8 @@ import logoImg from "../../assets/pictures/Logo.png"
import ButtonGreen from "../Buttons/ButtonGreen.jsx"
import { FaUsers, FaPaintBrush, FaHeadset } from "react-icons/fa"
import { motion } from "framer-motion"
-import { isAuthenticated } from "../../hooks/useRequireAuth" // <-- added import
-import { useNavigate } from "react-router-dom" // <-- NEW
-import HandleNavigate from "../../utils/HandleNavigate/HandleNavigate" // <-- NEW
+import { isAuthenticated } from "../../hooks/useRequireAuth"
+import HandleNavigate from "../../utils/HandleNavigate/HandleNavigate"
// 🔧 HIBA JAVÍTVA: függvénydefiníció hozzáadva
const LandingPage = () => {
diff --git a/SerpentRace_Frontend/src/components/Landingpage/PlayMenu.jsx b/SerpentRace_Frontend/src/components/Landingpage/PlayMenu.jsx
index 4e6991bb..3ac7790d 100644
--- a/SerpentRace_Frontend/src/components/Landingpage/PlayMenu.jsx
+++ b/SerpentRace_Frontend/src/components/Landingpage/PlayMenu.jsx
@@ -1,5 +1,5 @@
import React, { useState } from "react"
-import { useNavigate } from "react-router-dom"
+import HandleNavigate from "../../utils/HandleNavigate/HandleNavigate"
import LogoCard from "../../assets/pictures/LogoCard.jsx"
import logoImg from "../../assets/pictures/Logo.png" // <-- EZT ADD HOZZÁ
import ButtonDark from "../Buttons/ButtonDark.jsx"
@@ -13,7 +13,7 @@ const PlayMenu = ({ onJoinGame, onCreateGame, user, setUser }) => {
// gyors username kiolvasás (ha a parent objektum user={ { name: ... } } küldi)
const username = user?.name ?? null
- const navigate = useNavigate()
+ const { goChooseDeck } = HandleNavigate()
const handleJoin = () => {
if (!joinCode.trim()) {
@@ -40,7 +40,7 @@ const PlayMenu = ({ onJoinGame, onCreateGame, user, setUser }) => {
// Do NOT call onCreateGame here to avoid any alert side-effects from parent.
// Just navigate to choose deck and pass username via location.state
- navigate("/choosedeck", { state: { username: nameToSend } })
+ goChooseDeck({ username: nameToSend })
}
// egyszerű segéd a kezdobetűk kinyerésére
diff --git a/SerpentRace_Frontend/src/components/PopUp/DeckInfoPopUp.jsx b/SerpentRace_Frontend/src/components/PopUp/DeckInfoPopUp.jsx
index 1342de73..270ab520 100644
--- a/SerpentRace_Frontend/src/components/PopUp/DeckInfoPopUp.jsx
+++ b/SerpentRace_Frontend/src/components/PopUp/DeckInfoPopUp.jsx
@@ -1,5 +1,5 @@
import React, { useEffect, useState } from "react"
-import { useNavigate } from "react-router-dom"
+import HandleNavigate from "../../utils/HandleNavigate/HandleNavigate"
import {
FaUser,
FaLock,
@@ -14,7 +14,7 @@ import {
import { getUserProfile } from "../../api/userApi"
export default function DeckInfoPopUp({ deck, onClose }) {
- const navigate = useNavigate()
+ const { goDeckDetails, goDeckCreatorEdit } = HandleNavigate()
const [currentUser, setCurrentUser] = useState(null)
if (!deck) return null
@@ -136,7 +136,7 @@ export default function DeckInfoPopUp({ deck, onClose }) {
}
// Navigate to card display page
- navigate(`/deck/${deckId}`)
+ goDeckDetails(deckId)
// Close the popup
onClose()
@@ -152,7 +152,7 @@ export default function DeckInfoPopUp({ deck, onClose }) {
}
// Navigate to deck creator with the deck ID
- navigate(`/deck-creator/${deckId}`)
+ goDeckCreatorEdit(deckId)
// Close the popup
onClose()
diff --git a/SerpentRace_Frontend/src/components/Userdetails/Userdetails.jsx b/SerpentRace_Frontend/src/components/Userdetails/Userdetails.jsx
index 676cfcc6..b36470fb 100644
--- a/SerpentRace_Frontend/src/components/Userdetails/Userdetails.jsx
+++ b/SerpentRace_Frontend/src/components/Userdetails/Userdetails.jsx
@@ -1,5 +1,5 @@
import React, { useState, useEffect } from "react"
-import { useNavigate } from "react-router-dom"
+import HandleNavigate from "../../utils/HandleNavigate/HandleNavigate"
import {
FaCommentDots,
FaUserFriends,
@@ -19,7 +19,7 @@ import { getUserProfile, updateUserProfile, deleteUserProfile } from "../../api/
import { notifySuccess, notifyError, notifyWarning } from "../Toastify/toastifyServices"
const ProfileCard = () => {
- const navigate = useNavigate()
+ const { goLanding } = HandleNavigate()
// State
const [user, setUser] = useState(null)
@@ -120,7 +120,7 @@ const ProfileCard = () => {
notifySuccess("Profil sikeresen törölve!")
localStorage.removeItem("authLevel")
localStorage.removeItem("username")
- navigate("/")
+ goLanding()
} catch (err) {
console.error("Profil törlési hiba:", err)
notifyError(err.response?.data?.message || "Hiba a profil törlésekor!")
diff --git a/SerpentRace_Frontend/src/hooks/useRequireAuth.jsx b/SerpentRace_Frontend/src/hooks/useRequireAuth.jsx
index 8fd4c9b2..d96c587b 100644
--- a/SerpentRace_Frontend/src/hooks/useRequireAuth.jsx
+++ b/SerpentRace_Frontend/src/hooks/useRequireAuth.jsx
@@ -1,5 +1,5 @@
import { useState, useEffect } from "react"
-import { useNavigate } from "react-router-dom"
+import HandleNavigate from "../utils/HandleNavigate/HandleNavigate"
export function requireAuthSync({ key = "username", redirectTo = "/login", replace = true } = {}) {
const value = localStorage.getItem(key)
@@ -22,7 +22,7 @@ export function isAuthenticated(key = "username") {
// Default hook: ad vissza egy [value, setValue] párt, szinkronizálja localStorage-t és opcionálisan átirányít, ha nincs érték
export default function useRequireAuth({ key = "username", redirectTo = "/login", redirect = true } = {}) {
- const navigate = useNavigate()
+ const { goTo } = HandleNavigate()
const [value, setValue] = useState(() => {
try {
return localStorage.getItem(key)
@@ -34,9 +34,9 @@ export default function useRequireAuth({ key = "username", redirectTo = "/login"
// Ha nincs érték és redirect engedélyezve van, átirányítjuk (komponens mount-oláskor)
useEffect(() => {
if (!value && redirect) {
- navigate(redirectTo)
+ goTo(redirectTo)
}
- }, [navigate, value, redirectTo, redirect])
+ }, [goTo, value, redirectTo, redirect])
// Szinkronizáljuk a localStorage-t amikor a state változik
useEffect(() => {
diff --git a/SerpentRace_Frontend/src/pages/Auth/LoginForm.jsx b/SerpentRace_Frontend/src/pages/Auth/LoginForm.jsx
index c0a7dac2..786c509e 100644
--- a/SerpentRace_Frontend/src/pages/Auth/LoginForm.jsx
+++ b/SerpentRace_Frontend/src/pages/Auth/LoginForm.jsx
@@ -3,7 +3,8 @@ import InputBox from "../../components/Inputs/InputBox"
import Button from "../../components/Buttons/Button"
import { motion } from "framer-motion"
import { useState, useEffect } from "react"
-import { useLocation, useNavigate } from "react-router-dom"
+import { useLocation } from "react-router-dom"
+import HandleNavigate from "../../utils/HandleNavigate/HandleNavigate"
import { login, forgotPassword } from "../../api/userApi"
import { FaArrowLeft } from "react-icons/fa"
@@ -12,7 +13,7 @@ export default function LoginForm() {
const [password, setPassword] = useState("")
const [error, setError] = useState("")
const location = useLocation()
- const navigate = useNavigate()
+ const { goHome, goLanding } = HandleNavigate()
const [showSuccess, setShowSuccess] = useState(false)
const [showErrorPopup, setShowErrorPopup] = useState(false)
const [showForgotPasswordModal, setShowForgotPasswordModal] = useState(false)
@@ -63,7 +64,7 @@ export default function LoginForm() {
localStorage.setItem("username", response.data.user.username)
localStorage.setItem("authLevel", response.data.user.authLevel)
}
- navigate("/home")
+ goHome()
} else {
setError("Hibás bejelentkezési adatok.")
setShowErrorPopup(true)
@@ -115,7 +116,7 @@ export default function LoginForm() {
{/* 🔙 Vissza nyíl gomb — most pontosan a fehér box bal felső sarkában */}
navigate("/")}
+ onClick={() => goLanding()}
>
diff --git a/SerpentRace_Frontend/src/pages/Auth/RegisterForm.jsx b/SerpentRace_Frontend/src/pages/Auth/RegisterForm.jsx
index 9c937158..ce175dd1 100644
--- a/SerpentRace_Frontend/src/pages/Auth/RegisterForm.jsx
+++ b/SerpentRace_Frontend/src/pages/Auth/RegisterForm.jsx
@@ -4,7 +4,8 @@ import Button from "../../components/Buttons/Button"
import { motion } from "framer-motion"
import { useState } from "react"
import { register } from "../../api/userApi"
-import { useNavigate, useLocation } from "react-router-dom"
+import { useLocation } from "react-router-dom"
+import HandleNavigate from "../../utils/HandleNavigate/HandleNavigate"
import { ToastConfig } from "../../components/Toastify/toastifyServices"
import { FaArrowLeft } from "react-icons/fa"
@@ -18,7 +19,7 @@ export default function RegisterForm() {
const [phone, setPhone] = useState("")
const [error, setError] = useState("")
const [showErrorPopup, setShowErrorPopup] = useState(false)
- const navigate = useNavigate()
+ const { goLogin, goLanding } = HandleNavigate()
const location = useLocation()
function validateEmail(email) {
@@ -52,10 +53,10 @@ export default function RegisterForm() {
if (response && response.status === 201) {
ToastConfig("✅ Sikeres regisztráció!")
if (location.pathname === "/login") {
- navigate("/login", { state: { success: true } })
+ goLogin({ success: true })
window.location.reload()
} else {
- navigate("/login", { state: { success: true } })
+ goLogin({ success: true })
}
} else {
let msg = "Sikertelen regisztráció."
@@ -84,7 +85,7 @@ export default function RegisterForm() {
{/* 🔙 Vissza nyíl gomb – ugyanott, mint a login oldalon */}
navigate("/")}
+ onClick={() => goLanding()}
>
diff --git a/SerpentRace_Frontend/src/pages/Auth/ResetPassword.jsx b/SerpentRace_Frontend/src/pages/Auth/ResetPassword.jsx
index a7180915..13b06240 100644
--- a/SerpentRace_Frontend/src/pages/Auth/ResetPassword.jsx
+++ b/SerpentRace_Frontend/src/pages/Auth/ResetPassword.jsx
@@ -2,13 +2,14 @@
// Új jelszó megadása
import { useState, useEffect } from "react";
-import { useSearchParams, useNavigate } from "react-router-dom";
+import { useSearchParams } from "react-router-dom";
import Background from "../../assets/backgrounds/Background";
import { motion } from "framer-motion";
import Button from "../../components/Buttons/Button";
import InputBox from "../../components/Inputs/InputBox";
import { resetPassword } from "../../api/userApi";
import { FaArrowLeft } from "react-icons/fa";
+import HandleNavigate from "../../utils/HandleNavigate/HandleNavigate";
export default function ResetPassword() {
const [password, setPassword] = useState("");
@@ -16,7 +17,7 @@ export default function ResetPassword() {
const [error, setError] = useState("");
const [success, setSuccess] = useState(false);
const [searchParams] = useSearchParams();
- const navigate = useNavigate();
+ const { goLogin } = HandleNavigate();
const token = searchParams.get("token");
useEffect(() => {
@@ -53,7 +54,7 @@ export default function ResetPassword() {
await resetPassword(token, password);
setSuccess(true);
setTimeout(() => {
- navigate("/login", { state: { success: true, message: "Jelszó sikeresen megváltoztatva! Jelentkezz be az új jelszóval." } });
+ goLogin({ success: true, message: "Jelszó sikeresen megváltoztatva! Jelentkezz be az új jelszóval." });
}, 2000);
} catch (err) {
setError(err.response?.data?.message || "Hiba történt a jelszó visszaállítása során!");
@@ -73,7 +74,7 @@ export default function ResetPassword() {
{/* Vissza gomb */}
navigate("/login")}
+ onClick={() => goLogin()}
>
diff --git a/SerpentRace_Frontend/src/pages/Auth/VerifyEmailPage.jsx b/SerpentRace_Frontend/src/pages/Auth/VerifyEmailPage.jsx
index 74624d8b..42f7d319 100644
--- a/SerpentRace_Frontend/src/pages/Auth/VerifyEmailPage.jsx
+++ b/SerpentRace_Frontend/src/pages/Auth/VerifyEmailPage.jsx
@@ -1,11 +1,12 @@
import { useEffect, useState, useRef } from "react";
-import { useNavigate, useLocation } from "react-router-dom";
+import { useLocation } from "react-router-dom";
import Background from "../../assets/backgrounds/Background";
import { notifySuccess, notifyError } from "../../components/Toastify/toastifyServices";
import { verifyEmail } from "../../api/userApi";
+import HandleNavigate from "../../utils/HandleNavigate/HandleNavigate";
export default function VerifyEmailPage() {
- const navigate = useNavigate();
+ const { goLogin } = HandleNavigate();
const location = useLocation();
const [status, setStatus] = useState("loading");
const [message, setMessage] = useState("Email címe hitelesítés alatt...");
@@ -37,7 +38,7 @@ export default function VerifyEmailPage() {
notifySuccess("✅ Email címe sikeresen hitelesítve!");
hasNotified.current = true;
}
- setTimeout(() => navigate("/login"), 2500);
+ setTimeout(() => goLogin(), 2500);
} else {
throw new Error(data?.message || "Sikertelen hitelesítés");
}
diff --git a/SerpentRace_Frontend/src/pages/DeckCreator/DeckCreator.jsx b/SerpentRace_Frontend/src/pages/DeckCreator/DeckCreator.jsx
index 2f155388..cf173d5e 100644
--- a/SerpentRace_Frontend/src/pages/DeckCreator/DeckCreator.jsx
+++ b/SerpentRace_Frontend/src/pages/DeckCreator/DeckCreator.jsx
@@ -2,7 +2,8 @@
// Deck Creator Page - Deck létrehozás és szerkesztés
import React, { useState, useEffect } from "react"
-import { useParams, useNavigate } from "react-router-dom"
+import { useParams } from "react-router-dom"
+import HandleNavigate from "../../utils/HandleNavigate/HandleNavigate"
import Navbar from "../../components/Navbar/Navbar.jsx"
import DeckHeader from "../../components/DeckCreator/DeckHeader.jsx"
import CardsList from "../../components/DeckCreator/CardsList.jsx"
@@ -12,7 +13,7 @@ import { notifySuccess, notifyError, notifyWarning } from "../../components/Toas
export default function DeckCreator() {
const { deckId } = useParams()
- const navigate = useNavigate()
+ const { goDecks } = HandleNavigate()
// Deck alapadatok
const [deck, setDeck] = useState({
@@ -92,7 +93,7 @@ export default function DeckCreator() {
} catch (error) {
console.error('Pakli betöltési hiba:', error)
notifyError('Hiba történt a pakli betöltése során: ' + (error?.response?.data?.error || error.message))
- navigate('/decks')
+ goDecks()
} finally {
setIsLoading(false)
}
@@ -237,7 +238,7 @@ export default function DeckCreator() {
}
const handleBack = () => {
- navigate("/decks")
+ goDecks()
}
const handleDeleteDeck = () => {
@@ -254,7 +255,7 @@ export default function DeckCreator() {
await deleteDeck(deck.id)
setShowDeleteModal(false)
notifySuccess('Pakli sikeresen törölve!')
- navigate('/decks')
+ goDecks()
} catch (error) {
console.error('Pakli törlési hiba:', error)
const errorMessage = error?.response?.data?.error
diff --git a/SerpentRace_Frontend/src/pages/Decks/Card_display.jsx b/SerpentRace_Frontend/src/pages/Decks/Card_display.jsx
index 49451377..89561fcf 100644
--- a/SerpentRace_Frontend/src/pages/Decks/Card_display.jsx
+++ b/SerpentRace_Frontend/src/pages/Decks/Card_display.jsx
@@ -1,5 +1,6 @@
import React, { useState, useEffect } from "react"
-import { useParams, useNavigate } from "react-router-dom"
+import { useParams } from "react-router-dom"
+import HandleNavigate from "../../utils/HandleNavigate/HandleNavigate"
import {
FaArrowLeft,
FaFilter,
@@ -18,7 +19,7 @@ import { getDeckById } from "../../api/deckApi"
const Card_display = () => {
const { deckId } = useParams()
- const navigate = useNavigate()
+ const { goDecks } = HandleNavigate()
const [deck, setDeck] = useState(null)
const [cards, setCards] = useState([])
@@ -186,7 +187,7 @@ const Card_display = () => {
{/* Header with back button */}