From 276ee65979d1d3f353fcde16ecc11efb0abe8241 Mon Sep 17 00:00:00 2001 From: optrader Date: Wed, 19 Nov 2025 19:24:29 +0900 Subject: [PATCH] [251119] feat: FloatingGradientLayer..Experimental..2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿ• ์ปค๋ฐ‹ ์‹œ๊ฐ„: 2025. 11. 19. 19:24:28 ๐Ÿ“Š ๋ณ€๊ฒฝ ํ†ต๊ณ„: โ€ข ์ด ํŒŒ์ผ: 10๊ฐœ โ€ข ์ถ”๊ฐ€: +95์ค„ โ€ข ์‚ญ์ œ: -181์ค„ ๐Ÿ“ ์ˆ˜์ •๋œ ํŒŒ์ผ: ~ com.twin.app.shoptime/src/App/App.js ~ com.twin.app.shoptime/src/actions/panelActions.js ~ com.twin.app.shoptime/src/views/DetailPanel/DetailPanel.jsx ~ com.twin.app.shoptime/src/views/DetailPanel/components/DetailPanelBackground/DetailPanelBackground.jsx ~ com.twin.app.shoptime/src/views/HomePanel/HomePanel.jsx ~ com.twin.app.shoptime/src/views/HomePanel/HomePanel.module.less ~ com.twin.app.shoptime/src/views/MainView/MainView.jsx ~ com.twin.app.shoptime/src/views/MediaPanel/MediaPanel.v3.jsx ๐Ÿ—‘๏ธ ์‚ญ์ œ๋œ ํŒŒ์ผ: - com.twin.app.shoptime/src/components/FloatingGradientBackground/FloatingGradientBackground.jsx - com.twin.app.shoptime/src/components/FloatingGradientBackground/FloatingGradientBackground.module.less ๐Ÿ”ง ์ฃผ์š” ๋ณ€๊ฒฝ ๋‚ด์šฉ: โ€ข ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ฐœ์„  โ€ข UI ์ปดํฌ๋„ŒํŠธ ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์„  โ€ข ์†Œ๊ทœ๋ชจ ๊ธฐ๋Šฅ ๊ฐœ์„  โ€ข ์ฝ”๋“œ ์ •๋ฆฌ ๋ฐ ์ตœ์ ํ™” โ€ข ๋ชจ๋“ˆ ๊ตฌ์กฐ ๊ฐœ์„  Performance: ์ฝ”๋“œ ์ตœ์ ํ™”๋กœ ์„ฑ๋Šฅ ๊ฐœ์„  ๊ธฐ๋Œ€ --- com.twin.app.shoptime/src/App/App.js | 20 ------ .../src/actions/panelActions.js | 11 ++-- .../FloatingGradientBackground.jsx | 60 ----------------- .../FloatingGradientBackground.module.less | 65 ------------------- .../src/views/DetailPanel/DetailPanel.jsx | 20 ++++-- .../DetailPanelBackground.jsx | 19 ++---- .../src/views/HomePanel/HomePanel.jsx | 23 ++++++- .../src/views/HomePanel/HomePanel.module.less | 21 ++++++ .../src/views/MainView/MainView.jsx | 17 ++++- .../src/views/MediaPanel/MediaPanel.v3.jsx | 20 +++--- 10 files changed, 95 insertions(+), 181 deletions(-) delete mode 100644 com.twin.app.shoptime/src/components/FloatingGradientBackground/FloatingGradientBackground.jsx delete mode 100644 com.twin.app.shoptime/src/components/FloatingGradientBackground/FloatingGradientBackground.module.less diff --git a/com.twin.app.shoptime/src/App/App.js b/com.twin.app.shoptime/src/App/App.js index 91e499b9..a52e5f09 100644 --- a/com.twin.app.shoptime/src/App/App.js +++ b/com.twin.app.shoptime/src/App/App.js @@ -46,7 +46,6 @@ import { enqueuePanelHistory } from '../actions/panelHistoryActions'; import NotSupportedVersion from '../components/NotSupportedVersion/NotSupportedVersion'; import ToastContainer from '../components/TToast/ToastContainer'; import GlobalPopup from '../components/GlobalPopup/GlobalPopup'; -import FloatingGradientBackground from '../components/FloatingGradientBackground/FloatingGradientBackground'; import usePrevious from '../hooks/usePrevious'; import { lunaTest } from '../lunaSend/lunaTest'; import { store } from '../store/store'; @@ -442,9 +441,6 @@ if (typeof Spotlight !== 'undefined' && Spotlight.addEventListener) { function AppBase(props) { const dispatch = useDispatch(); - - // ๊ทธ๋ผ๋ฐ์ด์…˜ ๋ฐฐ๊ฒฝ ํ‘œ์‹œ ์ƒํƒœ ๊ด€๋ฆฌ (๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆจ๊น€) - const [showGradientBackground, setShowGradientBackground] = React.useState(false); const httpHeader = useSelector((state) => state.common.httpHeader); const httpHeaderRef = useRef(httpHeader); const webOSVersion = useSelector((state) => state.common.appStatus.webOSVersion); @@ -896,24 +892,8 @@ function AppBase(props) { ); }, [dispatch, initService]); - // โœ… ๊ทธ๋ผ๋ฐ์ด์…˜ ๋ฐฐ๊ฒฝ ์ œ์–ด ํ•จ์ˆ˜๋ฅผ ์ „์—ญ์— ๋…ธ์ถœ - useEffect(() => { - window.toggleFloatingGradient = setShowGradientBackground; - window.showFloatingGradient = () => setShowGradientBackground(true); - window.hideFloatingGradient = () => setShowGradientBackground(false); - - return () => { - delete window.toggleFloatingGradient; - delete window.showFloatingGradient; - delete window.hideFloatingGradient; - }; - }, []); - return ( - {/* ํ•ญ์ƒ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋˜๋Š” ๋–  ์žˆ๋Š” ๊ทธ๋ผ๋ฐ์ด์…˜ ๋ฐฐ๊ฒฝ */} - - {webOSVersion === '' ? null : Number(webOSVersion) < 4 ? ( ) : ( diff --git a/com.twin.app.shoptime/src/actions/panelActions.js b/com.twin.app.shoptime/src/actions/panelActions.js index e7d492a1..677d440f 100644 --- a/com.twin.app.shoptime/src/actions/panelActions.js +++ b/com.twin.app.shoptime/src/actions/panelActions.js @@ -104,10 +104,13 @@ export const navigateToDetail = ({ }); // โœ… ๊ทธ๋ผ๋ฐ์ด์…˜ ๋ฐฐ๊ฒฝ ํ‘œ์‹œ - HomePanelโ†’DetailPanel ์ „ํ™˜ ์‹œ - if (window.showFloatingGradient) { - window.showFloatingGradient(); - console.log('[navigateToDetail] Floating gradient background shown'); - } + dispatch(updateHomeInfo({ + name: panel_names.HOME_PANEL, + panelInfo: { + showGradientBackground: true, + } + })); + console.log('[TRACE-GRADIENT] ๐ŸŸข navigateToDetail set showGradientBackground: true - source:', sourceMenu); // sourceMenu์— ๋”ฐ๋ฅธ ์‚ฌ์ „ ์ฒ˜๋ฆฌ switch (sourceMenu) { diff --git a/com.twin.app.shoptime/src/components/FloatingGradientBackground/FloatingGradientBackground.jsx b/com.twin.app.shoptime/src/components/FloatingGradientBackground/FloatingGradientBackground.jsx deleted file mode 100644 index 72066e04..00000000 --- a/com.twin.app.shoptime/src/components/FloatingGradientBackground/FloatingGradientBackground.jsx +++ /dev/null @@ -1,60 +0,0 @@ -import React, { useCallback, useEffect, useRef } from 'react'; -import { createPortal } from 'react-dom'; - -import css from './FloatingGradientBackground.module.less'; - -/** - * HomePanel๊ณผ ๋ถ„๋ฆฌ๋œ ๋ณ„๋„์˜ ๊ทธ๋ผ๋ฐ์ด์…˜ ๋ฐฐ๊ฒฝ - * React Portal๋กœ ์ „์—ญ body์— ์ง์ ‘ ๋ Œ๋”๋ง๋จ - * ํ•ญ์ƒ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋˜์ง€๋งŒ visible prop์œผ๋กœ ํ‘œ์‹œ/์ˆจ๊น€ ์ œ์–ด - */ -export default function FloatingGradientBackground({ visible = false }) { - // ์ „์—ญ DOM์— ๋ Œ๋”๋งํ•  container ์ฐธ์กฐ - const containerRef = useRef(null); - - // portal container ์ƒ์„ฑ (๋งˆ์šดํŠธ ์‹œ ํ•œ ๋ฒˆ๋งŒ) - useEffect(() => { - // body์— ์ง์ ‘ div ์ถ”๊ฐ€ - const portalContainer = document.createElement('div'); - portalContainer.id = 'floating-gradient-background-container'; - portalContainer.style.position = 'fixed'; - portalContainer.style.top = '0'; - portalContainer.style.left = '0'; - portalContainer.style.width = '100%'; - portalContainer.style.height = '100%'; - portalContainer.style.pointerEvents = 'none'; - portalContainer.style.zIndex = '20'; // HomePanel๊ณผ DetailPanel ์‚ฌ์ด (HomePanel < 20 < DetailPanel(21)) - - document.body.appendChild(portalContainer); - containerRef.current = portalContainer; - - console.log('[FloatingGradientBackground] Portal container created'); - - return () => { - // ์–ธ๋งˆ์šดํŠธ ์‹œ portal container ์ œ๊ฑฐ - if (containerRef.current && containerRef.current.parentNode) { - containerRef.current.parentNode.removeChild(containerRef.current); - console.log('[FloatingGradientBackground] Portal container removed'); - } - }; - }, []); - - // Portal๋กœ ๋ Œ๋”๋ง๋  ๊ทธ๋ผ๋ฐ์ด์…˜ ์ปดํฌ๋„ŒํŠธ - const gradientContent = ( -