[251122] fix: DetailPaneel->ProductAllSection Focus-2

🕐 커밋 시간: 2025. 11. 22. 06:32:49

📊 변경 통계:
  • 총 파일: 1개
  • 추가: +51줄
  • 삭제: -27줄

📝 수정된 파일:
  ~ com.twin.app.shoptime/src/views/DetailPanel/ProductAllSection/ProductAllSection.jsx

🔧 함수 변경 내용:
  📄 com.twin.app.shoptime/src/views/DetailPanel/ProductAllSection/ProductAllSection.jsx (javascript):
    🔄 Modified: extractProductMeta()
This commit is contained in:
2025-11-22 06:32:49 +09:00
parent 8b64875bfe
commit bd2a90b6f5

View File

@@ -868,20 +868,20 @@ export default function ProductAllSection({
Spotlight.focus('spotlightId_backBtn'); Spotlight.focus('spotlightId_backBtn');
}, []); }, []);
const handleSpotlightDown = useCallback((e) => { // 아래 방향 이동 시 버튼 영역으로 포커스 이동
e.stopPropagation(); // BUY NOW / ADD TO CART / SHOP BY MOBILE / FavoriteBtn 등에서 공통 사용
}, []); const focusNextButtons = useCallback(() => {
// 1) SHOP BY MOBILE이 있으면 우선 이동
// SHOP BY MOBILE에서 아래로 이동 시 제품 정보 영역으로 포커스 이동 if (SpotlightIds?.DETAIL_SHOPBYMOBILE) {
const handleSpotlightDownFromShopByMobile = useCallback((e) => { if (Spotlight.focus(SpotlightIds.DETAIL_SHOPBYMOBILE)) return;
e.stopPropagation(); }
e.preventDefault(); if (Spotlight.focus('detail_shop_by_mobile')) return;
// 2) 상품 정보 버튼들로 이동
if (!Spotlight.focus('product-details-button')) { if (!Spotlight.focus('product-details-button')) {
Spotlight.focus('user-reviews-button'); Spotlight.focus('user-reviews-button');
} }
// 포커스가 비거나 다른 곳으로 튈 때 다시 보정
// 포커스가 비거나 다른 곳으로 튀는 경우를 방어
setTimeout(() => { setTimeout(() => {
const current = Spotlight.getCurrent(); const current = Spotlight.getCurrent();
const currentId = current?.dataset?.spotlightId; const currentId = current?.dataset?.spotlightId;
@@ -894,6 +894,31 @@ export default function ProductAllSection({
}, 0); }, 0);
}, []); }, []);
const handleSpotlightDown = useCallback((e) => {
e.stopPropagation();
}, []);
// SHOP BY MOBILE에서 아래로 이동 시 제품 정보 영역으로 포커스 이동
const handleSpotlightDownFromShopByMobile = useCallback(
(e) => {
e.stopPropagation();
e.preventDefault();
focusNextButtons();
},
[focusNextButtons]
);
// BUY NOW / ADD TO CART에서 아래로 이동 시 동일하게 전달
const handleSpotlightDownFromBuyButtons = useCallback(
(e) => {
e.stopPropagation();
e.preventDefault();
focusNextButtons();
},
[focusNextButtons]
);
const onFavoriteFlagChanged = useCallback( const onFavoriteFlagChanged = useCallback(
(newFavoriteFlag) => setFavoriteOverride(newFavoriteFlag), (newFavoriteFlag) => setFavoriteOverride(newFavoriteFlag),
[] []
@@ -1275,7 +1300,8 @@ export default function ProductAllSection({
className={css.buyNowButton} className={css.buyNowButton}
onClick={handleBuyNowClick} onClick={handleBuyNowClick}
onSpotlightUp={handleSpotlightUpFromBuyButtons} onSpotlightUp={handleSpotlightUpFromBuyButtons}
onSpotlightDown={handleSpotlightDown} onSpotlightDown={handleSpotlightDownFromBuyButtons}
data-spotlight-next-down={SpotlightIds.DETAIL_SHOPBYMOBILE}
type="detail_small" type="detail_small"
> >
<div className={css.buyNowText}>{$L('BUY NOW')}</div> <div className={css.buyNowText}>{$L('BUY NOW')}</div>
@@ -1286,7 +1312,8 @@ export default function ProductAllSection({
// onClick={handleAddToCartClick} // onClick={handleAddToCartClick}
onClick={handleBuyNowClick} onClick={handleBuyNowClick}
onSpotlightUp={handleSpotlightUpFromBuyButtons} onSpotlightUp={handleSpotlightUpFromBuyButtons}
onSpotlightDown={handleSpotlightDown} onSpotlightDown={handleSpotlightDownFromBuyButtons}
data-spotlight-next-down={SpotlightIds.DETAIL_SHOPBYMOBILE}
type="detail_small" type="detail_small"
> >
<div className={css.addToCartText}>{$L('ADD TO CART')}</div> <div className={css.addToCartText}>{$L('ADD TO CART')}</div>