// src/components/DeckCreator/CardEditor.jsx // Jobb oldali kártya szerkesztő import React, { useState, useEffect } from "react" import { FaSave, FaTimes, FaEye } from "react-icons/fa" import TaskCardEditor from "./TaskCardEditor.jsx" import JokerCardEditor from "./JokerCardEditor.jsx" import LuckCardEditor from "./LuckCardEditor.jsx" import CardPreview from "./CardPreview.jsx" import { notifySuccess, notifyError,notifyWarning } from "../../components/Toastify/toastifyServices" export default function CardEditor({ card, isCreating, cardType, onSave, onCancel }) { const [cardData, setCardData] = useState(null) const [showPreview, setShowPreview] = useState(false) // Alapértelmezett kártya adatok const getDefaultCardData = (type) => { const baseData = { id: null, type: type, points: 10, timeLimit: 30 } switch (type) { case 'task': return { ...baseData, subType: 'quiz', question: '', options: ['', '', '', ''], correctAnswer: 0, explanation: '' } case 'joker': return { ...baseData, title: '', description: '', effect: '', actionType: 'skip', usage: 'once' } case 'luck': return { ...baseData, event: '', positiveEffect: '', negativeEffect: '', probability: 50, risk: 'low' } default: return baseData } } // Kártya adatok inicializálása useEffect(() => { if (isCreating && cardType) { setCardData(getDefaultCardData(cardType)) } else if (card) { setCardData({ ...card }) } else { setCardData(null) } }, [card, isCreating, cardType]) const validateCard = (data) => { if (data.type === 'task') { if (!data.question && !data.statement) { notifyError("Kérdés vagy állítás megadása kötelező!") return false } if (data.subType === 'quiz' && data.options.some(opt => !opt.trim())) { notifyError("Minden válaszlehetőséget ki kell tölteni!") return false } } else if (data.type === 'joker') { if (!data.text || !data.text.trim()) { notifyError("Joker kártya szövege nem lehet üres!") return false } } else if (data.type === 'luck') { if (!data.text || !data.text.trim()) { notifyError("Szerencse kártya szövege nem lehet üres!") return false } } return true } const updateCardData = (updates) => { setCardData(prev => prev ? { ...prev, ...updates } : null) } const handleSave = () => { if (!cardData) return if (!validateCard(cardData)) return try { onSave(cardData) notifySuccess('Kártya sikeresen mentve!') } catch (error) { notifyError('Hiba történt a kártya mentése során: ' + (error?.message || String(error))) } } // Ha nincs kiválasztott kártya vagy új kártya létrehozás if (!cardData) { return (
🃏
Válassz ki egy kártyát
Klikkelj egy kártyára a bal oldalon a szerkesztéshez,
vagy hozz létre egy újat.
) } return (
{/* Header */}
{cardData.type === 'task' && '📋'} {cardData.type === 'joker' && '🃏'} {cardData.type === 'luck' && '🎲'}

{isCreating ? 'Új' : 'Szerkesztés'}{' '} {cardData.type === 'task' && 'Feladat kártya'} {cardData.type === 'joker' && 'Joker kártya'} {cardData.type === 'luck' && 'Szerencse kártya'}

{cardData.type === 'task' && cardData.subType && ( <> {cardData.subType === 'quiz' && 'Quiz (A/B/C/D)'} {cardData.subType === 'truefalse' && 'Igaz/Hamis'} {cardData.subType === 'matching' && 'Párosítás'} {cardData.subType === 'text' && 'Szöveges válasz'} )}
{/* Content */}
{showPreview ? (
) : (
{cardData.type === 'task' && ( )} {cardData.type === 'joker' && ( )} {cardData.type === 'luck' && ( )}
)}
) }