From f5621b0c55a20bfa28de64ca2791d267f75ed6d8 Mon Sep 17 00:00:00 2001 From: optrader Date: Thu, 11 Dec 2025 14:04:15 +0900 Subject: [PATCH] [251211] feat: FeaturedBrandsPanel , TopBannerImage Modal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit πŸ• 컀밋 μ‹œκ°„: 2025. 12. 11. 14:04:14 πŸ“Š λ³€κ²½ 톡계: β€’ 총 파일: 3개 β€’ μΆ”κ°€: +63쀄 β€’ μ‚­μ œ: -25쀄 πŸ“ μˆ˜μ •λœ 파일: ~ com.twin.app.shoptime/src/components/GlobalPopup/GlobalPopup.jsx ~ com.twin.app.shoptime/src/views/FeaturedBrandsPanel/TopBannerImage/TopBannerPopup.jsx ~ com.twin.app.shoptime/src/views/FeaturedBrandsPanel/TopBannerImage/TopBannerPopup.module.less πŸ”§ μ£Όμš” λ³€κ²½ λ‚΄μš©: β€’ UI μ»΄ν¬λ„ŒνŠΈ μ•„ν‚€ν…μ²˜ κ°œμ„  β€’ μ†Œκ·œλͺ¨ κΈ°λŠ₯ κ°œμ„  --- .../components/GlobalPopup/GlobalPopup.jsx | 61 +++++++++++++------ .../TopBannerImage/TopBannerPopup.jsx | 18 +++++- .../TopBannerImage/TopBannerPopup.module.less | 9 ++- 3 files changed, 63 insertions(+), 25 deletions(-) diff --git a/com.twin.app.shoptime/src/components/GlobalPopup/GlobalPopup.jsx b/com.twin.app.shoptime/src/components/GlobalPopup/GlobalPopup.jsx index 96dc3849..35b2291a 100644 --- a/com.twin.app.shoptime/src/components/GlobalPopup/GlobalPopup.jsx +++ b/com.twin.app.shoptime/src/components/GlobalPopup/GlobalPopup.jsx @@ -6,6 +6,7 @@ import React, { useCallback, + useEffect, useMemo, } from 'react'; @@ -14,6 +15,8 @@ import { useSelector, } from 'react-redux'; +import Spotlight from '@enact/spotlight'; + import { setHidePopup } from '../../actions/commonActions'; import { getPopupConfig } from '../../constants/popupConfig'; import usePrevious from '../../hooks/usePrevious'; @@ -139,6 +142,18 @@ const GlobalPopup = () => { setImageDimensions(dimensions); }, []); + // Spotlight μ œμ–΄: νŒμ—… μ˜€ν”ˆ/클둜즈 μ‹œ 포컀슀 νŠΈλž˜ν•‘ + useEffect(() => { + if (popupVisible && activePopup === 'topBannerImagePopup') { + console.log("[GLOBAL-POPUP] Pausing Spotlight for modal popup"); + Spotlight.pause(); + return () => { + console.log("[GLOBAL-POPUP] Resuming Spotlight after modal close"); + Spotlight.resume(); + }; + } + }, [popupVisible, activePopup]); + // ν˜„μž¬ νŒμ—… μ„€μ • const currentConfig = useMemo(() => { if (!activePopup) return null; @@ -231,27 +246,33 @@ const GlobalPopup = () => { const popupHeight = '804px'; return ( -
-
+ justifyContent: 'center', + alignItems: 'center', + zIndex: 9999 + }} + onClick={handlers.handleClose} + > +
e.stopPropagation()} + > { const dispatch = useDispatch(); const [imageDimensions, setImageDimensions] = useState({ width: 0, height: 0 }); + const closeButtonRef = useRef(null); const handleImageLoad = useCallback((e) => { const img = e.target; @@ -29,6 +30,14 @@ const TopBannerPopup = memo(({ title, imageUrl, imageAlt, onImageLoad }) => { dispatch(setHidePopup()); }, [dispatch]); + // νŒμ—…μ΄ λ§ˆμš΄νŠΈλ˜μ—ˆμ„ λ•Œ Close λ²„νŠΌμ— 포컀슀 + useEffect(() => { + console.log("[TOP-BANNER-POPUP] Component mounted - focusing close button"); + if (closeButtonRef.current) { + closeButtonRef.current.focus(); + } + }, []); + return (
{/* Title Section */} @@ -48,7 +57,12 @@ const TopBannerPopup = memo(({ title, imageUrl, imageAlt, onImageLoad }) => { {/* Button Section */}
-
diff --git a/com.twin.app.shoptime/src/views/FeaturedBrandsPanel/TopBannerImage/TopBannerPopup.module.less b/com.twin.app.shoptime/src/views/FeaturedBrandsPanel/TopBannerImage/TopBannerPopup.module.less index bc108b95..d2b4fa6c 100644 --- a/com.twin.app.shoptime/src/views/FeaturedBrandsPanel/TopBannerImage/TopBannerPopup.module.less +++ b/com.twin.app.shoptime/src/views/FeaturedBrandsPanel/TopBannerImage/TopBannerPopup.module.less @@ -1,3 +1,6 @@ +@import "../../../style/CommonStyle.module.less"; +@import "../../../style/utils.module.less"; + .container { width: 100%; height: 100%; @@ -86,12 +89,12 @@ text-align: center; &:hover { - background: #6a7278; + background: @PRIMARY_COLOR_RED; } &:focus { - outline: 2px solid #fff; - outline-offset: 2px; + background: @PRIMARY_COLOR_RED; + outline: none; } &:active {