From d9aebac81691226935d2542e316539548a151189 Mon Sep 17 00:00:00 2001 From: optrader Date: Thu, 20 Nov 2025 17:34:39 +0900 Subject: [PATCH] [251120] fix: PlayerPanel Focus Recovery Done MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🕐 커밋 시간: 2025. 11. 20. 17:34:39 📊 변경 통계: • 총 파일: 2개 • 추가: +27줄 📝 수정된 파일: ~ com.twin.app.shoptime/src/views/DetailPanel/DetailPanel.jsx ~ com.twin.app.shoptime/src/views/PlayerPanel/PlayerPanel.jsx 🔧 주요 변경 내용: • 소규모 기능 개선 --- .../src/views/DetailPanel/DetailPanel.jsx | 2 ++ .../src/views/PlayerPanel/PlayerPanel.jsx | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/com.twin.app.shoptime/src/views/DetailPanel/DetailPanel.jsx b/com.twin.app.shoptime/src/views/DetailPanel/DetailPanel.jsx index 7a569cf3..55ac0cb7 100644 --- a/com.twin.app.shoptime/src/views/DetailPanel/DetailPanel.jsx +++ b/com.twin.app.shoptime/src/views/DetailPanel/DetailPanel.jsx @@ -185,6 +185,7 @@ export default function DetailPanel({ panelInfo, isOnTop, spotlightId }) { detailPanelClosed: true, // ✅ flag detailPanelClosedAt: Date.now(), // ✅ 시점 기록 detailPanelClosedFromSource: sourceMenu, // ✅ 출처 + lastFocusedTargetId: panelInfo?.lastFocusedTargetId, // ✅ 포커스 복원 타겟 전달 } })); break; @@ -288,6 +289,7 @@ export default function DetailPanel({ panelInfo, isOnTop, spotlightId }) { detailPanelClosed: true, // ✅ flag detailPanelClosedAt: Date.now(), // ✅ 시점 기록 detailPanelClosedFromSource: sourceMenu, // ✅ 출처 + lastFocusedTargetId: panelInfo?.lastFocusedTargetId, // ✅ 포커스 복원 타겟 전달 }, }) ); diff --git a/com.twin.app.shoptime/src/views/PlayerPanel/PlayerPanel.jsx b/com.twin.app.shoptime/src/views/PlayerPanel/PlayerPanel.jsx index a2e162ce..9a651d53 100644 --- a/com.twin.app.shoptime/src/views/PlayerPanel/PlayerPanel.jsx +++ b/com.twin.app.shoptime/src/views/PlayerPanel/PlayerPanel.jsx @@ -365,6 +365,30 @@ const PlayerPanel = ({ isTabActivated, panelInfo, isOnTop, spotlightId, ...props // 2. Reset detailPanelClosed flag if (panelInfo.detailPanelClosed) { console.log('[PlayerPanel] detailPanelClosed flag 초기화'); + console.log('[PlayerPanel] Returned from DetailPanel', { + detailPanelClosedAt: panelInfo.detailPanelClosedAt, + detailPanelClosedFromSource: panelInfo.detailPanelClosedFromSource, + lastFocusedTargetId: panelInfo.lastFocusedTargetId, + }); + + // 포커스 복원 로직 추가 (1000ms 지연) + if (panelInfo.lastFocusedTargetId) { + console.log('[PlayerPanel] 🎯 DetailPanel 복귀 후 1000ms 지연 포커스 복원 예약:', panelInfo.lastFocusedTargetId); + + const focusTimeoutId = setTimeout(() => { + console.log('[PlayerPanel] 🎯 DetailPanel 복귀 후 포커스 복원 실행:', panelInfo.lastFocusedTargetId); + Spotlight.focus(panelInfo.lastFocusedTargetId); + }, 1000); + + // cleanup 함수를 통해 컴포넌트 unmount 시 타이머 정리 + return () => { + if (focusTimeoutId) { + clearTimeout(focusTimeoutId); + console.log('[PlayerPanel] 🎯 포커스 복원 타이머 정리'); + } + }; + } + dispatch( updatePanel({ name: panel_names.PLAYER_PANEL, @@ -372,6 +396,7 @@ const PlayerPanel = ({ isTabActivated, panelInfo, isOnTop, spotlightId, ...props detailPanelClosed: false, detailPanelClosedAt: undefined, detailPanelClosedFromSource: undefined, + lastFocusedTargetId: undefined, // 포커스 복원 후 초기화 }, }) );