[251012] fix: PlayerPanel,TabContainerV2 focus - 1
🕐 커밋 시간: 2025. 10. 12. 18:13:40 📊 변경 통계: • 총 파일: 7개 • 추가: +169줄 • 삭제: -25줄 📝 수정된 파일: ~ com.twin.app.shoptime/src/components/VideoPlayer/VideoPlayer.js ~ com.twin.app.shoptime/src/views/PlayerPanel/PlayerOverlay/PlayerOverlayContents.jsx ~ com.twin.app.shoptime/src/views/PlayerPanel/PlayerPanel.jsx ~ com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/TabContents/LiveChannelContents.jsx ~ com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/TabContents/ShopNowContents.jsx ~ com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/v2/ShopNowButton.jsx ~ com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/v2/TabContainer.v2.jsx 🔧 함수 변경 내용: 📄 com.twin.app.shoptime/src/views/PlayerPanel/PlayerOverlay/PlayerOverlayContents.jsx (javascript): ✅ Added: onSpotlightMoveBelowTab() 📄 com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/TabContents/ShopNowContents.jsx (javascript): 🔄 Modified: SpotlightContainerDecorator() 🔧 주요 변경 내용: • UI 컴포넌트 아키텍처 개선
This commit is contained in:
@@ -1,33 +1,25 @@
|
||||
import React, {
|
||||
useCallback,
|
||||
useEffect,
|
||||
} from 'react';
|
||||
import React, { useCallback, useEffect } from 'react';
|
||||
|
||||
import classNames from 'classnames';
|
||||
|
||||
import Spotlight from '@enact/spotlight';
|
||||
import SpotlightContainerDecorator
|
||||
from '@enact/spotlight/SpotlightContainerDecorator';
|
||||
import SpotlightContainerDecorator from '@enact/spotlight/SpotlightContainerDecorator';
|
||||
import Spottable from '@enact/spotlight/Spottable';
|
||||
|
||||
import icon_arrow_dwon
|
||||
from '../../../../../assets/images/player/icon_tabcontainer_arrow_down.png';
|
||||
import icon_shop_now
|
||||
from '../../../../../assets/images/player/icon_tabcontainer_shopnow.png';
|
||||
import icon_arrow_dwon from '../../../../../assets/images/player/icon_tabcontainer_arrow_down.png';
|
||||
import icon_shop_now from '../../../../../assets/images/player/icon_tabcontainer_shopnow.png';
|
||||
import { LOG_MENU } from '../../../../utils/Config';
|
||||
import { $L } from '../../../../utils/helperMethods';
|
||||
import { SpotlightIds } from '../../../../utils/SpotlightIds';
|
||||
import LiveChannelContents from '../TabContents/LiveChannelContents';
|
||||
import ShopNowContents from '../TabContents/ShopNowContents';
|
||||
import YouMayLikeContents from '../TabContents/YouMayLikeContents';
|
||||
import ShopNowButton from './ShopNowButton';
|
||||
import css from './TabContainer.v2.module.less';
|
||||
|
||||
const Container = SpotlightContainerDecorator(
|
||||
{ enterTo: "last-focused" },
|
||||
"div"
|
||||
);
|
||||
const Container = SpotlightContainerDecorator({ enterTo: 'last-focused' }, 'div');
|
||||
|
||||
const SpottableDiv = Spottable("div");
|
||||
const SpottableDiv = Spottable('div');
|
||||
|
||||
export default function TabContainerV2({
|
||||
panelInfo,
|
||||
@@ -48,10 +40,8 @@ export default function TabContainerV2({
|
||||
tabVisible,
|
||||
}) {
|
||||
const tabList = [
|
||||
$L("SHOP NOW"),
|
||||
panelInfo?.shptmBanrTpNm === "LIVE"
|
||||
? $L("LIVE CHANNEL")
|
||||
: $L("FEATURED SHOWS"),
|
||||
$L('SHOP NOW'),
|
||||
panelInfo?.shptmBanrTpNm === 'LIVE' ? $L('LIVE CHANNEL') : $L('FEATURED SHOWS'),
|
||||
];
|
||||
|
||||
useEffect(() => {
|
||||
@@ -62,10 +52,8 @@ export default function TabContainerV2({
|
||||
}
|
||||
|
||||
if (tabIndex === 1) {
|
||||
const isLive = panelInfo?.shptmBanrTpNm === "LIVE";
|
||||
nowMenu = isLive
|
||||
? LOG_MENU.FULL_LIVE_CHANNELS
|
||||
: LOG_MENU.FULL_FEATURED_SHOWS;
|
||||
const isLive = panelInfo?.shptmBanrTpNm === 'LIVE';
|
||||
nowMenu = isLive ? LOG_MENU.FULL_LIVE_CHANNELS : LOG_MENU.FULL_FEATURED_SHOWS;
|
||||
}
|
||||
|
||||
if (nowMenu) {
|
||||
@@ -87,7 +75,7 @@ export default function TabContainerV2({
|
||||
if (videoVerticalVisible) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
Spotlight.focus("spotlightId-video-contaienr");
|
||||
Spotlight.focus('spotlightId-video-contaienr');
|
||||
}
|
||||
},
|
||||
[videoVerticalVisible]
|
||||
@@ -98,12 +86,22 @@ export default function TabContainerV2({
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
if (onTabClose) {
|
||||
onTabClose(1); // tabIndex를 -1로 설정
|
||||
onTabClose(1); // tabIndex를 1로 설정
|
||||
}
|
||||
},
|
||||
[onTabClose]
|
||||
);
|
||||
|
||||
// 위 방향 포커스 이동 시 백 버튼으로 이동
|
||||
const handleSpotlightUpToBackButton = useCallback((e) => {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
|
||||
// VideoPlayer가 belowContentsVisible prop을 감지해서 이미 controls를 표시했으므로
|
||||
// 바로 포커스 이동
|
||||
Spotlight.focus(SpotlightIds.PLAYER_BACK_BUTTON);
|
||||
}, []);
|
||||
|
||||
// useEffect(()=>{
|
||||
// console.log('[tabIndex]',tabIndex)
|
||||
// },[tabIndex])
|
||||
@@ -122,17 +120,21 @@ export default function TabContainerV2({
|
||||
<div className={css.shopNowHeader}>
|
||||
<div className={css.shopNowHeaderLeft}>
|
||||
<div className={css.shopNowIconWrapper}>
|
||||
<img
|
||||
src={icon_shop_now}
|
||||
alt="shop now icon"
|
||||
className={css.shopNowIcon}
|
||||
/>
|
||||
<img src={icon_shop_now} alt="shop now icon" className={css.shopNowIcon} />
|
||||
</div>
|
||||
<div className={css.shopNowHeaderText}>SHOP NOW</div>
|
||||
</div>
|
||||
<SpottableDiv
|
||||
className={css.closeButton}
|
||||
onClick={handleCloseButtonClick}
|
||||
spotlightId="below-tab-close-button"
|
||||
onSpotlightUp={handleSpotlightUpToBackButton}
|
||||
onSpotlightDown={(e) => {
|
||||
// 첫 번째 ShopNow 아이템으로 포커스 이동
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
Spotlight.focus('shop-now-item-0');
|
||||
}}
|
||||
>
|
||||
×
|
||||
</SpottableDiv>
|
||||
@@ -166,6 +168,11 @@ export default function TabContainerV2({
|
||||
className={css.liveChannelButton}
|
||||
onClick={onLiveChannelButtonClick}
|
||||
spotlightId="below-tab-live-channel-button"
|
||||
onSpotlightUp={handleSpotlightUpToBackButton}
|
||||
onSpotlightDown={(e) => {
|
||||
// 첫 번째 PlayerItem으로 포커스 이동
|
||||
Spotlight.focus('tabChannel-video-0');
|
||||
}}
|
||||
>
|
||||
<span className={css.buttonText}>LIVE CHANNEL</span>
|
||||
<div className={css.arrowIcon}>
|
||||
@@ -173,7 +180,7 @@ export default function TabContainerV2({
|
||||
</div>
|
||||
</SpottableDiv>
|
||||
|
||||
{panelInfo?.shptmBanrTpNm === "LIVE" && playListInfo && (
|
||||
{panelInfo?.shptmBanrTpNm === 'LIVE' && playListInfo && (
|
||||
<LiveChannelContents
|
||||
tabTitle={tabList}
|
||||
selectedIndex={selectedIndex}
|
||||
@@ -192,9 +199,7 @@ export default function TabContainerV2({
|
||||
</>
|
||||
)}
|
||||
|
||||
{tabVisible && tabIndex === 2 && (
|
||||
<ShopNowButton onClick={onShopNowButtonClick} />
|
||||
)}
|
||||
{tabVisible && tabIndex === 2 && <ShopNowButton onClick={onShopNowButtonClick} />}
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user