import React, { useState, useEffect } from "react" import { useNavigate } from "react-router-dom" import { FaPlus, FaFilter, FaCalendarAlt, FaArrowUp, FaArrowDown, FaSortAlphaDown, FaSortAlphaUp, FaQuestionCircle, } from "react-icons/fa" import SearchBox from "../Search/SearchBox" import PopUp from "../PopUp/PopUp" import DeckInfoPopUp from "../PopUp/DeckInfoPopUp" const deckTypes = [ { label: "Luck", color: "var(--color-luck)" }, { label: "Question", color: "var(--color-question)" }, { label: "Joker", color: "var(--color-fun)" }, ] // initial state will be fetched from backend const origins = ["Mind", "Vállalati", "Saját"] const sortOptions = [ { value: "date-asc", label: ( <> ), }, { value: "date-desc", label: ( <> ), }, { value: "abc-asc", label: ( <> ), }, { value: "abc-desc", label: ( <> ), }, ] const DeckManager = () => { const navigate = useNavigate() const [selectedType, setSelectedType] = useState("All") const [selectedOrigin, setSelectedOrigin] = useState("Mind") const [sortBy, setSortBy] = useState("date-desc") const [search, setSearch] = useState("") const [showSortHelp, setShowSortHelp] = useState(false) const [selectedDeck, setSelectedDeck] = useState(null) const [decks, setDecks] = useState([]) const [loading, setLoading] = useState(false) useEffect(() => { let mounted = true const load = async () => { setLoading(true) try { const result = await import('../../api/deckApi').then(m => m.getDecksPage(0, 49)) if (!mounted) return // map backend deck shape to UI shape const mapped = result.decks.map(d => ({ id: d.id, name: d.name, type: d.type === 2 ? 'Question' : d.type === 1 ? 'Joker' : 'Luck', created: d.creationdate ? new Date(d.creationdate).toLocaleDateString() : '', origin: d.ctype === 2 ? 'Vállalati' : d.ctype === 0 ? 'Mind' : 'Saját', raw: d })) setDecks(mapped) } catch (err) { console.error('Failed to load decks', err) } finally { setLoading(false) } } load() return () => { mounted = false } }, []) // Filter logic const sourceDecks = decks let filteredDecks = sourceDecks.filter((deck) => { const typeMatch = selectedType === "All" || deck.type === selectedType const originMatch = selectedOrigin === "Mind" || deck.origin === selectedOrigin const searchMatch = !search || deck.name.toLowerCase().includes(search.toLowerCase()) return typeMatch && originMatch && searchMatch }) // Sort logic filteredDecks = [...filteredDecks].sort((a, b) => { if (sortBy === "date-asc") { return a.created.localeCompare(b.created) } else if (sortBy === "date-desc") { return b.created.localeCompare(a.created) } else if (sortBy === "abc-asc") { return a.name.localeCompare(b.name) } else if (sortBy === "abc-desc") { return b.name.localeCompare(a.name) } return 0 }) return (
{/* Filters */}
setSearch(e.target.value)} width={240} placeholder="Keresés..." className="mr-4" /> Típus: {deckTypes.map((type) => ( ))} Eredet: Rendezés: {showSortHelp && ( setShowSortHelp(false)}>

Rendezési lehetőségek magyarázata

  • 📅↑ – Dátum szerint növekvő sorrendben (legrégebbi elöl)
  • 📅↓ – Dátum szerint csökkenő sorrendben (legújabb elöl)
  • A→Z – Név szerint növekvő sorrendben (A-tól Z-ig)
  • Z→A – Név szerint csökkenő sorrendben (Z-től A-ig)
)}
{/* Decks Grid */}
{/* Create New Deck (Mockup) */}
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
{/* Existing Decks (from backend) */} {loading && (
Betöltés...
)} {!loading && filteredDecks.length === 0 && (
Nincsenek mentett paklik.
)} {!loading && filteredDecks.map((deck) => { const deckType = deckTypes.find((t) => t.label === deck.type) const borderColor = deckType ? deckType.color : "var(--color-success)" return (
setSelectedDeck(deck)} >
{deck.type === "Luck" ? "Szerencse" : deck.type === "Question" ? "Kérdés" : deck.type === "Fun" ? "Joker" : deck.type}

{deck.name}

Létrehozva: {deck.created}
) })}
{/* Deck Info Popup */} {selectedDeck && setSelectedDeck(null)} />}
) } export default DeckManager