// 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, consequence: { type: 0, value: 1 } } switch (type) { case 'QUESTION': return { ...baseData, subType: 'quiz', question: '', options: ['', '', '', ''], correctAnswer: 0, explanation: '', acceptedAnswers: [''], wrongConsequence: { type: 1, value: 1 } } case 'PAIRING': case 'MATCHING': return { ...baseData, type: 'QUESTION', subType: 'matching', taskDescription: '', leftItems: ['', ''], rightItems: ['', ''], correctPairs: { 0: 0, 1: 1 }, wrongConsequence: { type: 1, value: 1 } } case 'JOKER': return { ...baseData, title: '', description: '', effect: '', actionType: 'skip', usage: 'once', wrongConsequence: { type: 1, value: 1 } } case 'LUCK': return { ...baseData, event: '', positiveEffect: '', negativeEffect: '', probability: 50, risk: 'low' } default: return baseData } } // Kártya adatok inicializálása useEffect(() => { try { if (isCreating && cardType) { const defaultData = getDefaultCardData(cardType) setCardData(defaultData) } else if (card) { setCardData({ ...card }) } else { setCardData(null) } } catch (error) { console.error('Kártya inicializálási hiba:', error) setCardData(null) } }, [card, isCreating, cardType]) const validateCard = (data) => { try { if (!data || !data.type) { notifyError("Érvénytelen kártya adatok!") return false } if (data.type === 'QUESTION') { // Quiz típus validálás if (data.subType === 'quiz') { if (!data.text || !data.text.trim()) { notifyError("Kérdés megadása kötelező!") return false } if (data.options && data.options.some(opt => !opt.trim())) { notifyError("Minden válaszlehetőséget ki kell tölteni!") return false } } // Igaz/Hamis típus validálás else if (data.subType === 'truefalse') { if (!data.text || !data.text.trim()) { notifyError("Állítás megadása kötelező!") return false } if (data.isTrue === undefined || data.isTrue === null) { notifyError("Válaszd ki, hogy az állítás igaz vagy hamis!") return false } } // Párosítás típus validálás else if (data.subType === 'matching') { if (!data.text || !data.text.trim()) { notifyError("Feladat leírása kötelező!") return false } if (!data.leftItems || data.leftItems.length === 0) { notifyError("Legalább egy párosítást meg kell adni!") return false } if (data.leftItems.some(item => !item.trim()) || data.rightItems.some(item => !item.trim())) { notifyError("Minden párosítási elemet ki kell tölteni!") return false } } // Szöveges válasz típus validálás else if (data.subType === 'text') { if (!data.text || !data.text.trim()) { notifyError("Kérdés megadása kötelező!") return false } if (!data.acceptedAnswers || data.acceptedAnswers.length === 0 || data.acceptedAnswers.every(ans => !ans.trim())) { notifyError("Legalább egy elfogadott választ meg kell adni!") return false } } // Általános validálás (ha nincs subType megadva) else { if (!data.text || !data.text.trim()) { notifyError("Kérdés vagy állítás megadása kötelező!") 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 } catch (error) { console.error('Validálási hiba:', error) notifyError("Hiba történt a kártya ellenőrzése során") return false } } const updateCardData = (updates) => { setCardData(prev => prev ? { ...prev, ...updates } : null) } const handleSave = () => { if (!cardData) { notifyError("Nincs mentendő kártya adat!") return } if (!validateCard(cardData)) return onSave(cardData) } // Ha nincs kiválasztott kártya vagy új kártya létrehozás if (!cardData) { return null } return (
{/* Type Mismatch Warning */} {cardData?.type && cardType && cardData.type !== cardType && !isCreating && (
⚠️
Figyelmeztetés: Nem megfelelő kártya típus
{`Ez egy ${ cardData.type === 'QUESTION' ? 'Feladat' : cardData.type === 'JOKER' ? 'Joker' : 'Szerencse' } kártya, de a pakli típusa ${ cardType === 'QUESTION' ? 'Feladat' : cardType === 'JOKER' ? 'Joker' : 'Szerencse' }.`}
)} {/* Header */}
{cardData.type === 'QUESTION' && '📋'} {cardData.type === 'JOKER' && '🃏'} {cardData.type === 'LUCK' && '🎲'}

{isCreating ? 'Új' : 'Szerkesztés'} {' '} {(isCreating ? cardType : cardData.type) === 'QUESTION' && 'Feladat kártya'} {(isCreating ? cardType : cardData.type) === 'JOKER' && 'Joker kártya'} {(isCreating ? cardType : cardData.type) === 'LUCK' && 'Szerencse kártya'}

{cardData.type === 'QUESTION' && 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 === 'QUESTION' && ( )} {cardData.type === 'JOKER' && ( )} {cardData.type === 'LUCK' && ( )}
)}
) }