From c207fa596145623c5dfc8bb5e0fbccf23d651707 Mon Sep 17 00:00:00 2001 From: GitG0r0 <145980798+GitG0r0@users.noreply.github.com> Date: Wed, 22 Oct 2025 19:35:08 +0200 Subject: [PATCH] =?UTF-8?q?feat(deck-creator):=20dropdown=20men=C3=BCk=20f?= =?UTF-8?q?ejleszt=C3=A9se?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Típus és láthatóság dropdown menük átalakítása - Ikonok hozzáadása mindkét dropdown menühöz - Szöveg színek javítása a jobb láthatóságért - Hover és kijelölési állapotok hozzáadása - Dropdown menük egységes stílusának kialakítása --- .../src/components/DeckCreator/DeckHeader.jsx | 135 +++++++++++++++--- 1 file changed, 112 insertions(+), 23 deletions(-) diff --git a/SerpentRace_Frontend/src/components/DeckCreator/DeckHeader.jsx b/SerpentRace_Frontend/src/components/DeckCreator/DeckHeader.jsx index 2aaa8626..7ca4e98d 100644 --- a/SerpentRace_Frontend/src/components/DeckCreator/DeckHeader.jsx +++ b/SerpentRace_Frontend/src/components/DeckCreator/DeckHeader.jsx @@ -1,7 +1,7 @@ // src/components/DeckCreator/DeckHeader.jsx // Deck alapadatok szerkesztése és mentés -import React from "react" +import React, { useState, useRef, useEffect } from "react" import { FaSave, FaArrowLeft, FaGlobe, FaLock, FaQuestionCircle, FaDice, FaLaughBeam } from "react-icons/fa" const deckTypes = [ @@ -16,9 +16,30 @@ const privacyOptions = [ ] export default function DeckHeader({ deck, onUpdate, onSave, onBack }) { + const [isTypeDropdownOpen, setIsTypeDropdownOpen] = useState(false); + const [isPrivacyDropdownOpen, setIsPrivacyDropdownOpen] = useState(false); + const typeDropdownRef = useRef(null); + const privacyDropdownRef = useRef(null); + const currentDeckType = deckTypes.find(type => type.value === deck.type) || deckTypes[0] const currentPrivacy = privacyOptions.find(option => option.value === deck.privacy) || privacyOptions[0] + useEffect(() => { + function handleClickOutside(event) { + if (typeDropdownRef.current && !typeDropdownRef.current.contains(event.target)) { + setIsTypeDropdownOpen(false); + } + if (privacyDropdownRef.current && !privacyDropdownRef.current.contains(event.target)) { + setIsPrivacyDropdownOpen(false); + } + } + + document.addEventListener('mousedown', handleClickOutside); + return () => { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, []); + const handleInputChange = (field, value) => { onUpdate({ [field]: value }) } @@ -80,17 +101,51 @@ export default function DeckHeader({ deck, onUpdate, onSave, onBack }) { - +
+ + + {isTypeDropdownOpen && ( +
+ {deckTypes.map(type => ( + + ))} +
+ )} +
{/* Privacy */} @@ -98,17 +153,51 @@ export default function DeckHeader({ deck, onUpdate, onSave, onBack }) { - +
+ + + {isPrivacyDropdownOpen && ( +
+ {privacyOptions.map(option => ( + + ))} +
+ )} +
{/* Description */}