+
navigate('/deck-creator')}
+ 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"
+ >
Új pakli létrehozása
diff --git a/SerpentRace_Frontend/src/pages/DeckCreator/DeckCreator.jsx b/SerpentRace_Frontend/src/pages/DeckCreator/DeckCreator.jsx
new file mode 100644
index 00000000..3f76ca20
--- /dev/null
+++ b/SerpentRace_Frontend/src/pages/DeckCreator/DeckCreator.jsx
@@ -0,0 +1,201 @@
+// src/pages/DeckCreator/DeckCreator.jsx
+// Deck Creator Page - Deck létrehozás és szerkesztés
+
+import React, { useState, useEffect } from "react"
+import { useParams, useNavigate } from "react-router-dom"
+import Navbar from "../../components/Navbar/Navbar.jsx"
+import DeckHeader from "../../components/DeckCreator/DeckHeader.jsx"
+import CardsList from "../../components/DeckCreator/CardsList.jsx"
+import CardEditor from "../../components/DeckCreator/CardEditor.jsx"
+
+export default function DeckCreator() {
+ const { deckId } = useParams() // URL-ből deck ID (új deck esetén undefined)
+ const navigate = useNavigate()
+
+ // Deck alapadatok
+ const [deck, setDeck] = useState({
+ id: null,
+ name: "Új Deck",
+ type: "Question", // Question, Luck, Fun
+ privacy: "private", // private, public
+ description: "",
+ cards: []
+ })
+
+ // UI állapotok
+ const [selectedCard, setSelectedCard] = useState(null)
+ const [isCreatingCard, setIsCreatingCard] = useState(false)
+ const [newCardType, setNewCardType] = useState(null) // task, joker, luck
+
+ // Betöltés (később API-ból)
+ useEffect(() => {
+ if (deckId) {
+ // TODO: Betöltés API-ból
+ loadDeck(deckId)
+ } else {
+ // Új deck
+ setDeck({
+ id: null,
+ name: "Új Deck",
+ type: "Question",
+ privacy: "private",
+ description: "",
+ cards: []
+ })
+ }
+ }, [deckId])
+
+ const loadDeck = async (id) => {
+ // Mock deck betöltés
+ const mockDeck = {
+ id: id,
+ name: "Quiz Night",
+ type: "Question",
+ privacy: "public",
+ description: "Szórakoztató kvíz este",
+ cards: [
+ {
+ id: 1,
+ type: "task",
+ subType: "quiz",
+ question: "Mi Magyarország fővárosa?",
+ options: ["Budapest", "Debrecen", "Szeged", "Pécs"],
+ correctAnswer: 0,
+ points: 10,
+ timeLimit: 30,
+ explanation: "Budapest 1873 óta Magyarország fővárosa."
+ },
+ {
+ id: 2,
+ type: "task",
+ subType: "truefalse",
+ statement: "A Duna Magyarország leghosszabb folyója.",
+ isTrue: false,
+ points: 5,
+ timeLimit: 15,
+ explanation: "A Tisza a leghosszabb folyó Magyarországon."
+ }
+ ]
+ }
+ setDeck(mockDeck)
+ }
+
+ const handleDeckUpdate = (updates) => {
+ setDeck(prev => ({ ...prev, ...updates }))
+ }
+
+ const handleSaveDeck = async () => {
+ try {
+ // TODO: API mentés
+ console.log("Deck mentése:", deck)
+ alert("✅ Deck sikeresen mentve!")
+ } catch (error) {
+ console.error("Mentési hiba:", error)
+ alert("❌ Hiba történt a mentés során!")
+ }
+ }
+
+ const handleBack = () => {
+ if (confirm("Biztosan visszamész? A nem mentett változtatások elvesznek.")) {
+ navigate("/decks")
+ }
+ }
+
+ const handleCreateCard = (cardType) => {
+ setNewCardType(cardType)
+ setIsCreatingCard(true)
+ setSelectedCard(null)
+ }
+
+ const handleSelectCard = (card) => {
+ setSelectedCard(card)
+ setIsCreatingCard(false)
+ setNewCardType(null)
+ }
+
+ const handleSaveCard = (cardData) => {
+ if (isCreatingCard) {
+ // Új kártya hozzáadása
+ const newCard = {
+ ...cardData,
+ id: Date.now(), // Temporary ID
+ }
+ setDeck(prev => ({
+ ...prev,
+ cards: [...prev.cards, newCard]
+ }))
+ setIsCreatingCard(false)
+ setNewCardType(null)
+ setSelectedCard(newCard)
+ } else {
+ // Meglévő kártya frissítése
+ setDeck(prev => ({
+ ...prev,
+ cards: prev.cards.map(card =>
+ card.id === cardData.id ? cardData : card
+ )
+ }))
+ setSelectedCard(cardData)
+ }
+ }
+
+ const handleDeleteCard = (cardId) => {
+ if (confirm("Biztosan törlöd ezt a kártyát?")) {
+ setDeck(prev => ({
+ ...prev,
+ cards: prev.cards.filter(card => card.id !== cardId)
+ }))
+
+ if (selectedCard?.id === cardId) {
+ setSelectedCard(null)
+ }
+ }
+ }
+
+ return (
+
+
+
+
+ {/* Deck Header */}
+
+
+ {/* Main Content */}
+
+ {/* Left Panel - Cards List */}
+
+
+
+
+ {/* Right Panel - Card Editor */}
+
+ {
+ setIsCreatingCard(false)
+ setNewCardType(null)
+ setSelectedCard(null)
+ }}
+ />
+
+
+
+
+ )
+}
\ No newline at end of file