diff --git a/SerpentRace_Frontend/src/App.jsx b/SerpentRace_Frontend/src/App.jsx index 5ff35f64..8d5df49d 100644 --- a/SerpentRace_Frontend/src/App.jsx +++ b/SerpentRace_Frontend/src/App.jsx @@ -8,6 +8,7 @@ import ForgotPassword from "./pages/Auth/ForgotPassword" import ResetPassword from "./pages/Auth/ResetPassword" import Landingpage from "./pages/Landing/Landingpage" import Home from "./pages/Landing/Home" +import DeckManagerPage from "./pages/Decks/DeckManagerPage" function App() { const [isMobile, setIsMobile] = useState(false) @@ -46,6 +47,7 @@ function App() { } /> } /> } /> + } /> {/* Add more routes as needed */} diff --git a/SerpentRace_Frontend/src/components/Landingpage/DeckManager.jsx b/SerpentRace_Frontend/src/components/Landingpage/DeckManager.jsx new file mode 100644 index 00000000..2951956a --- /dev/null +++ b/SerpentRace_Frontend/src/components/Landingpage/DeckManager.jsx @@ -0,0 +1,292 @@ +import React, { useState } from "react" +import { + FaPlus, + FaFilter, + FaCalendarAlt, + FaArrowUp, + FaArrowDown, + FaSortAlphaDown, + FaSortAlphaUp, + FaQuestionCircle, +} from "react-icons/fa" +import SearchBox from "../Search/SearchBox" +import PopUp from "../PopUp/PopUp" + +const deckTypes = [ + { label: "Luck", color: "var(--color-luck)" }, + { label: "Question", color: "var(--color-question)" }, + { label: "Fun", color: "var(--color-fun)" }, +] + +const mockDecks = [ + // Just for visual mockup + { id: 1, name: "Party Luck", type: "Luck", created: "2025-07-01", origin: "Vállalati" }, + { id: 2, name: "Quiz Night", type: "Question", created: "2025-07-02", origin: "Saját" }, + { id: 3, name: "Fun Times", type: "Fun", created: "2025-07-03", origin: "Vállalati" }, + { id: 4, name: "Corporate Challenge", type: "Question", created: "2025-07-04", origin: "Vállalati" }, + { id: 5, name: "Randomizer", type: "Luck", created: "2025-07-05", origin: "Saját" }, + { id: 6, name: "Afterwork luck", type: "Luck", created: "2025-07-06", origin: "Saját" }, + { id: 7, name: "Serpent Quiz", type: "Question", created: "2025-07-07", origin: "Vállalati" }, + { id: 8, name: "Green Fortune", type: "Luck", created: "2025-07-08", origin: "Vállalati" }, + { id: 9, name: "Team Builder", type: "Fun", created: "2025-07-09", origin: "Saját" }, + { id: 10, name: "Knowledge Race", type: "Question", created: "2025-07-10", origin: "Saját" }, +] + +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 [selectedType, setSelectedType] = useState("All") + const [selectedOrigin, setSelectedOrigin] = useState("Mind") + const [sortBy, setSortBy] = useState("date-desc") + const [search, setSearch] = useState("") + const [showSortHelp, setShowSortHelp] = useState(false) + + // Filter logic (mock) + let filteredDecks = mockDecks.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) */} +
+ + Új pakli létrehozása +
+ {/* Existing Decks (Mockup) */} + {filteredDecks.map((deck) => { + const deckType = deckTypes.find((t) => t.label === deck.type) + const borderColor = deckType ? deckType.color : "var(--color-success)" + return ( +
+
+ + {deck.type === "Luck" + ? "Szerencse" + : deck.type === "Question" + ? "Kérdés" + : deck.type === "Fun" + ? "Szórakozás" + : deck.type} + +

+ {deck.name} +

+
+
+ Létrehozva: {deck.created} +
+
+ ) + })} +
+
+
+ ) +} + +export default DeckManager diff --git a/SerpentRace_Frontend/src/components/Landingpage/LandingPage.jsx b/SerpentRace_Frontend/src/components/Landingpage/LandingPage.jsx index 5b42dcb2..86f1f507 100644 --- a/SerpentRace_Frontend/src/components/Landingpage/LandingPage.jsx +++ b/SerpentRace_Frontend/src/components/Landingpage/LandingPage.jsx @@ -23,7 +23,7 @@ const LandingPage = ({ onNavigateToPlay, onNavigateToAuth }) => { { { mindezt szórakozva! { animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.7, delay: 1 }} > - - + + @@ -71,7 +71,7 @@ const LandingPage = ({ onNavigateToPlay, onNavigateToAuth }) => { >
{
-

Közösségi élmény

-

+

Közösségi élmény

+

Ismerkedj, nevess, tanulj! A SerpentRace összehozza a társaságot, legyen szó baráti összejövetelről vagy csapatépítésről.

@@ -110,8 +110,8 @@ const LandingPage = ({ onNavigateToPlay, onNavigateToAuth }) => {
-

Személyre szabható

-

+

Személyre szabható

+

Kérdéskártyák, szabályok, design – minden a te igényeidhez igazítható, akár céges brandinggel is!

@@ -128,8 +128,8 @@ const LandingPage = ({ onNavigateToPlay, onNavigateToAuth }) => {
-

Folyamatos támogatás

-

+

Folyamatos támogatás

+

Gyors, segítőkész ügyfélszolgálat – ha bármilyen kérdésed vagy problémád van, mindig számíthatsz ránk!

@@ -154,11 +154,11 @@ const LandingPage = ({ onNavigateToPlay, onNavigateToAuth }) => { viewport={{ once: true }} transition={{ duration: 0.7, delay: 0.3 }} > -

+

Próbáld ki te is a SerpentRace-t!

-

+

Legyél részese egy új közösségi élménynek, vagy rendeld meg saját, személyre szabott társasjátékodat – mi mindenben segítünk!

diff --git a/SerpentRace_Frontend/src/components/PopUp/PopUp.jsx b/SerpentRace_Frontend/src/components/PopUp/PopUp.jsx index c169ab08..ac7a471f 100644 --- a/SerpentRace_Frontend/src/components/PopUp/PopUp.jsx +++ b/SerpentRace_Frontend/src/components/PopUp/PopUp.jsx @@ -1,7 +1,7 @@ // src/components/PopUp/PopUp.jsx // sima komponens, ami megjeleníti a popupot -import React from "react"; +import React from "react" export default function PopUp({ children, onClose }) { return ( @@ -17,5 +17,5 @@ export default function PopUp({ children, onClose }) { {children}
- ); -} \ No newline at end of file + ) +} diff --git a/SerpentRace_Frontend/src/components/Search/SearchBox.jsx b/SerpentRace_Frontend/src/components/Search/SearchBox.jsx new file mode 100644 index 00000000..3d5bb7fd --- /dev/null +++ b/SerpentRace_Frontend/src/components/Search/SearchBox.jsx @@ -0,0 +1,22 @@ +import React from "react" +import { FaSearch } from "react-icons/fa" + +const SearchBox = ({ value, onChange, width = 220, placeholder = "Keresés...", className = "" }) => { + return ( +
+ + +
+ ) +} + +export default SearchBox diff --git a/SerpentRace_Frontend/src/index.css b/SerpentRace_Frontend/src/index.css index 39b0929a..4870f184 100644 --- a/SerpentRace_Frontend/src/index.css +++ b/SerpentRace_Frontend/src/index.css @@ -24,9 +24,16 @@ --color-secondary: #8d8e83; --color-accent: #0d0d0f; + /* Deck típus színek */ + --color-luck: #5fa985; /* zöld, mint a success */ + --color-question: #4f7be6; /* új kék, illik az oldalhoz */ + --color-fun: #e15b64; /* piros, mint az error */ + /* Háttérszínek */ --color-background: #181d23; + --color-background-selected: #232a31; --color-surface: #222d2f; + --color-surface-selected: #314045; --color-card: #2c383b; /* Szövegszínek */ diff --git a/SerpentRace_Frontend/src/pages/Cards/Cards.jsx b/SerpentRace_Frontend/src/pages/Cards/Cards.jsx deleted file mode 100644 index e69de29b..00000000 diff --git a/SerpentRace_Frontend/src/pages/Decks/DeckManagerPage.jsx b/SerpentRace_Frontend/src/pages/Decks/DeckManagerPage.jsx new file mode 100644 index 00000000..ab14944e --- /dev/null +++ b/SerpentRace_Frontend/src/pages/Decks/DeckManagerPage.jsx @@ -0,0 +1,16 @@ +// src/pages/Decks/DeckManagerPage.jsx +// Deck Management Page (with Navbar, no Footer) + +import DeckManager from "../../components/Landingpage/DeckManager.jsx" +import Navbar from "../../components/Navbar/Navbar.jsx" + +export default function DeckManagerPage() { + return ( +
+ +
+ +
+
+ ) +}