From 59441bcc7bfe4b8c071d518b22ae8ec4267e4746 Mon Sep 17 00:00:00 2001 From: "junghoon86.park" Date: Wed, 3 Dec 2025 18:00:36 +0900 Subject: [PATCH 1/5] =?UTF-8?q?[=EC=98=81=EC=83=81=20=ED=8F=AC=EC=BB=A4?= =?UTF-8?q?=EC=8A=A4=20=EC=9D=B4=EB=8F=99=20=EC=B2=98=EB=A6=AC]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - cc버튼에서 아래로 이동시 next 버튼으로 가도록 변경 - next버튼에서 위로 이동시 cc 버튼으로 가도록 변경 --- .../PlayerOverlay/PlayerOverlayContents.jsx | 20 ++++++++++++++----- .../PlayerTabContents/v2/LiveChannelNext.jsx | 14 ++++++++----- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/com.twin.app.shoptime/src/views/PlayerPanel/PlayerOverlay/PlayerOverlayContents.jsx b/com.twin.app.shoptime/src/views/PlayerPanel/PlayerOverlay/PlayerOverlayContents.jsx index a9fab64d..da474dbf 100644 --- a/com.twin.app.shoptime/src/views/PlayerPanel/PlayerOverlay/PlayerOverlayContents.jsx +++ b/com.twin.app.shoptime/src/views/PlayerPanel/PlayerOverlay/PlayerOverlayContents.jsx @@ -1,14 +1,24 @@ -import React, { useCallback, useEffect, useMemo, useRef } from 'react'; +import React, { + useCallback, + useEffect, + useMemo, + useRef, +} from 'react'; import classNames from 'classnames'; -import { useDispatch, useSelector } from 'react-redux'; +import { + useDispatch, + useSelector, +} from 'react-redux'; import Spotlight from '@enact/spotlight'; -import SpotlightContainerDecorator from '@enact/spotlight/SpotlightContainerDecorator'; +import SpotlightContainerDecorator + from '@enact/spotlight/SpotlightContainerDecorator'; import Spottable from '@enact/spotlight/Spottable'; import Marquee from '@enact/ui/Marquee'; -import defaultLogoImg from '../../../../assets/images/ic-tab-partners-default@3x.png'; +import defaultLogoImg + from '../../../../assets/images/ic-tab-partners-default@3x.png'; import { setShowPopup } from '../../../actions/commonActions'; import CustomImage from '../../../components/CustomImage/CustomImage'; import { ACTIVE_POPUP } from '../../../utils/Config'; @@ -388,7 +398,7 @@ function PlayerOverlayContents({ e.preventDefault(); // tabIndexV2가 2일 때만 ShopNowButton으로 포커스 if (tabContainerVersion === 2 && tabIndexV2 === 2) { - Spotlight.focus('below-tab-shop-now-button'); + Spotlight.focus('live-channel-next-button'); } }} aria-label="Caption" diff --git a/com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/v2/LiveChannelNext.jsx b/com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/v2/LiveChannelNext.jsx index c64bac36..ab2c6e76 100644 --- a/com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/v2/LiveChannelNext.jsx +++ b/com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/v2/LiveChannelNext.jsx @@ -1,11 +1,16 @@ import React from 'react'; +import { compose } from 'ramda/src/compose'; + import Spotlight from '@enact/spotlight'; import Spottable from '@enact/spotlight/Spottable'; -import { Marquee, MarqueeController } from '@enact/ui/Marquee'; -import { compose } from 'ramda/src/compose'; +import { + Marquee, + MarqueeController, +} from '@enact/ui/Marquee'; -import icon_arrow_dwon from '../../../../../assets/images/player/icon_tabcontainer_arrow_down.png'; +import icon_arrow_dwon + from '../../../../../assets/images/player/icon_tabcontainer_arrow_down.png'; import CustomImage from '../../../../components/CustomImage/CustomImage'; import { SpotlightIds } from '../../../../utils/SpotlightIds'; import css from './LiveChannelNext.module.less'; @@ -23,9 +28,8 @@ export default function LiveChannelNext({ const handleSpotlightUp = (e) => { e.stopPropagation(); e.preventDefault(); - Spotlight.focus(SpotlightIds.PLAYER_BACK_BUTTON); + Spotlight.focus('player-subtitlebutton'); }; - const handleSpotlightDown = (e) => { e.stopPropagation(); e.preventDefault(); From 86ece1d39d0d3089ea27ceb6c70c4f70c622971b Mon Sep 17 00:00:00 2001 From: "junghoon86.park" Date: Thu, 4 Dec 2025 12:34:19 +0900 Subject: [PATCH 2/5] =?UTF-8?q?[=EC=9E=A5=EB=B0=94=EA=B5=AC=EB=8B=88]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 회원정보없을시 기록되어있는 데이터가 아닌 0으로 노출되도록 변경. - 장바구니 데이터없을시 노출되는 베스트셀러상품부분 노출수정(스타일변경) --- .../src/views/CartPanel/CartEmpty.module.less | 5 +++-- .../src/views/CartPanel/CartSidebar.jsx | 12 ++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/com.twin.app.shoptime/src/views/CartPanel/CartEmpty.module.less b/com.twin.app.shoptime/src/views/CartPanel/CartEmpty.module.less index f63d2942..6f59b66c 100644 --- a/com.twin.app.shoptime/src/views/CartPanel/CartEmpty.module.less +++ b/com.twin.app.shoptime/src/views/CartPanel/CartEmpty.module.less @@ -6,7 +6,7 @@ padding-top: 60px; } .emptyBox { - width: 1320px; + width: 1200px; height: 288px; text-align: center; display: flex; @@ -39,5 +39,6 @@ } .bestSeller { margin-top: 70px; - width: 1320px; + width: 1200px; + padding-right:10px; } diff --git a/com.twin.app.shoptime/src/views/CartPanel/CartSidebar.jsx b/com.twin.app.shoptime/src/views/CartPanel/CartSidebar.jsx index 3ed00e78..60d27462 100644 --- a/com.twin.app.shoptime/src/views/CartPanel/CartSidebar.jsx +++ b/com.twin.app.shoptime/src/views/CartPanel/CartSidebar.jsx @@ -341,24 +341,24 @@ const CartSidebar = ({ cartInfo }) => {
Subtotal
- {itemCount} Items + {userNumber ? itemCount : 0} Items
Subtotal - {formatPrice(subtotal)} + {userNumber ? formatPrice(subtotal) : 0}
Option - {formatPrice(optionTotal)} + {userNumber ? formatPrice(optionTotal) : 0}
S&H - {formatPrice(shippingHandling)} + {userNumber ? formatPrice(shippingHandling) : 0}
@@ -369,7 +369,7 @@ const CartSidebar = ({ cartInfo }) => { (Before Tax) - {formatPrice(orderTotalBeforeTax)} + {userNumber ? formatPrice(orderTotalBeforeTax) : 0}
@@ -391,7 +391,7 @@ const CartSidebar = ({ cartInfo }) => { className={css.checkoutButton} spotlightId="cart-checkout-button" onClick={handleCheckoutClick} - disabled={itemsToCalculate.length === 0} + disabled={itemsToCalculate.length === 0 || !userNumber} > Checkout From 37574c0794aa981c59f98ae8788d13d3ce0fcfb1 Mon Sep 17 00:00:00 2001 From: "junghoon86.park" Date: Thu, 4 Dec 2025 13:25:49 +0900 Subject: [PATCH 3/5] =?UTF-8?q?[=EC=9E=A5=EB=B0=94=EA=B5=AC=EB=8B=88]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 하단 checkout버튼 조건 추가. --- com.twin.app.shoptime/src/views/CartPanel/CartSidebar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.twin.app.shoptime/src/views/CartPanel/CartSidebar.jsx b/com.twin.app.shoptime/src/views/CartPanel/CartSidebar.jsx index 60d27462..4de78502 100644 --- a/com.twin.app.shoptime/src/views/CartPanel/CartSidebar.jsx +++ b/com.twin.app.shoptime/src/views/CartPanel/CartSidebar.jsx @@ -391,7 +391,7 @@ const CartSidebar = ({ cartInfo }) => { className={css.checkoutButton} spotlightId="cart-checkout-button" onClick={handleCheckoutClick} - disabled={itemsToCalculate.length === 0 || !userNumber} + disabled={checkedItems.length === 0 || (itemsToCalculate.length === 0 || !userNumber)} > Checkout From 49f137620b419fed93e1341c08938be2e9fa479e Mon Sep 17 00:00:00 2001 From: "junghoon86.park" Date: Thu, 4 Dec 2025 15:51:19 +0900 Subject: [PATCH 4/5] =?UTF-8?q?[=EC=98=81=EC=83=81=20=EC=9E=91=EB=8F=99=20?= =?UTF-8?q?=EC=88=98=EC=A0=95]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 영상 화면 live next 버튼에 포커스가 가면 영상 리스트가 노출되도록 변경. - onFocus 추가하여 focus시 작동하도록 변경. --- .../views/PlayerPanel/PlayerTabContents/v2/LiveChannelNext.jsx | 2 ++ .../views/PlayerPanel/PlayerTabContents/v2/TabContainer.v2.jsx | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/v2/LiveChannelNext.jsx b/com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/v2/LiveChannelNext.jsx index ab2c6e76..f198efe3 100644 --- a/com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/v2/LiveChannelNext.jsx +++ b/com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/v2/LiveChannelNext.jsx @@ -23,6 +23,7 @@ export default function LiveChannelNext({ programName = 'Sandal Black...', backgroundColor = 'linear-gradient(180deg, #284998 0%, #06B0EE 100%)', onClick, + onFocus, spotlightId = 'live-channel-next-button', }) { const handleSpotlightUp = (e) => { @@ -47,6 +48,7 @@ export default function LiveChannelNext({ state.main.youmaylikeInfos); + const youmaylikeInfos = useSelector((state) => state.main.youmaylikeInfos); // 다음 재생 가능한 쇼 찾기 const findNextPlayableShow = useCallback((currentPlayList, currentIndex) => { @@ -337,6 +337,7 @@ export default function TabContainerV2({ } onClick={onLiveNext} spotlightId="live-channel-next-button" + onFocus={onLiveNext} /> From 44e50521faa4f6f41173f15cba593518413b1cd2 Mon Sep 17 00:00:00 2001 From: "junghoon86.park" Date: Thu, 4 Dec 2025 16:20:52 +0900 Subject: [PATCH 5/5] =?UTF-8?q?[=EB=A1=A4=EB=A7=81=EC=9C=A0=EB=8B=9B=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EA=B1=B4]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 선택약관 미동의시 링크가 남아 다른걸 눌러도 저스트 포유 페이지로 들어가는 문제가 발견되어 수정. --- .../HomePanel/HomeBanner/RollingUnit.jsx | 60 ++++++++++++------- 1 file changed, 39 insertions(+), 21 deletions(-) diff --git a/com.twin.app.shoptime/src/views/HomePanel/HomeBanner/RollingUnit.jsx b/com.twin.app.shoptime/src/views/HomePanel/HomeBanner/RollingUnit.jsx index 64022074..2c5a3ac3 100644 --- a/com.twin.app.shoptime/src/views/HomePanel/HomeBanner/RollingUnit.jsx +++ b/com.twin.app.shoptime/src/views/HomePanel/HomeBanner/RollingUnit.jsx @@ -115,11 +115,16 @@ export default function RollingUnit({ const previousTimeRef = useRef(); const arrRef = useRef([]); const bannerDataRef = useRef(bannerData); - const rollingDataRef = useRef(rollingData); + const filteredRollingDataRef = useRef(filteredRollingData); + + // filteredRollingDataRef 업데이트 + useEffect(() => { + filteredRollingDataRef.current = filteredRollingData; + }, [filteredRollingData]); const topContentsLogInfo = useMemo(() => { - if (rollingDataRef.current) { - const currentRollingData = rollingDataRef.current[startIndex]; + if (filteredRollingDataRef.current && filteredRollingDataRef.current.length > 0) { + const currentRollingData = filteredRollingDataRef.current[startIndex]; let contId, contNm; @@ -172,9 +177,10 @@ export default function RollingUnit({ return {}; }, [shptmTmplCd, startIndex]); + const sendBannerLog = useCallback( (bannerClick) => { - const data = rollingDataRef.current[startIndex]; + const data = filteredRollingDataRef.current[startIndex]; const newParams = bannerData.banrLctnNo === '2' ? { @@ -183,7 +189,7 @@ export default function RollingUnit({ : { bannerType: 'Vertical', }; - if (rollingDataRef.current && nowMenu === LOG_MENU.HOME_TOP) { + if (filteredRollingDataRef.current && nowMenu === LOG_MENU.HOME_TOP) { const logParams = { contextName: LOG_CONTEXT_NAME.HOME, messageId: bannerClick ? LOG_MESSAGE_ID.BANNER_CLICK : LOG_MESSAGE_ID.BANNER, @@ -305,12 +311,13 @@ export default function RollingUnit({ const categoryData = useMemo(() => { if ( - Object.keys(rollingData[startIndex]).length > 0 && - rollingData[startIndex].shptmLnkTpCd === LINK_TYPES.CATEGORY + filteredRollingData.length > 0 && + Object.keys(filteredRollingData[startIndex]).length > 0 && + filteredRollingData[startIndex].shptmLnkTpCd === LINK_TYPES.CATEGORY ) { if (homeCategory && homeCategory.length > 0) { const foundCategory = homeCategory.find( - (data) => data.lgCatCd === rollingData[startIndex].lgCatCd + (data) => data.lgCatCd === filteredRollingData[startIndex].lgCatCd ); if (foundCategory) { return { @@ -321,10 +328,10 @@ export default function RollingUnit({ } } return {}; - }, [homeCategory, rollingData, startIndex]); + }, [homeCategory, filteredRollingData, startIndex]); const { originalPrice, discountedPrice, discountRate, offerInfo } = - usePriceInfo(rollingData[startIndex].priceInfo) || {}; + usePriceInfo(filteredRollingData.length > 0 ? filteredRollingData[startIndex].priceInfo : {}) || {}; const handlePushPanel = useCallback( (name, panelInfo) => { @@ -350,10 +357,16 @@ export default function RollingUnit({ ); const imageBannerClick = useCallback(() => { + // 필터링된 데이터가 비어있으면 return + if (!filteredRollingData || filteredRollingData.length === 0) { + return; + } + if (bannerId) { dispatch(setBannerIndex(bannerId, startIndex)); } - const currentData = rollingData[startIndex]; + + const currentData = filteredRollingData[startIndex]; const linkType = currentData.shptmLnkTpCd; const bannerType = currentData.shptmBanrTpNm; @@ -432,7 +445,7 @@ export default function RollingUnit({ }) ); }, [ - rollingData, + filteredRollingData, startIndex, bannerId, dispatch, @@ -443,6 +456,11 @@ export default function RollingUnit({ ]); const videoClick = useCallback(() => { + // 필터링된 데이터가 비어있으면 return + if (!filteredRollingData || filteredRollingData.length === 0) { + return; + } + const lastFocusedTargetId = getContainerId(Spotlight.getCurrent()); const currentSpot = Spotlight.getCurrent(); @@ -463,7 +481,7 @@ export default function RollingUnit({ dispatch(setBannerIndex(bannerId, startIndex)); } - const currentData = rollingData[startIndex]; + const currentData = filteredRollingData[startIndex]; handleStartVideoPlayer({ showUrl: currentData.showUrl, @@ -485,7 +503,7 @@ export default function RollingUnit({ logTpNo: LOG_TP_NO.TOP_CONTENTS.CLICK, }) ); - }, [rollingData, startIndex, bannerId, dispatch, handleStartVideoPlayer, topContentsLogInfo]); + }, [filteredRollingData, startIndex, bannerId, dispatch, handleStartVideoPlayer, topContentsLogInfo]); // 10초 롤링 useEffect(() => { @@ -537,7 +555,7 @@ export default function RollingUnit({ useEffect(() => { sendBannerLog(); - }, [rollingDataRef, nowMenu, startIndex]); + }, [filteredRollingDataRef, nowMenu, startIndex]); useEffect(() => { if (nowMenu !== LOG_MENU.HOME_TOP) { @@ -551,7 +569,7 @@ export default function RollingUnit({ spotlightId={`container-${spotlightId}`} onFocus={shelfFocus} > - {filteredRollingData !== 1 ? ( + {filteredRollingData.length !== 1 ? ( ) : null} - {filteredRollingData && filteredRollingData[startIndex].shptmBanrTpNm === 'Image Banner' ? ( + {filteredRollingData && filteredRollingData.length > 0 && filteredRollingData[startIndex].shptmBanrTpNm === 'Image Banner' ? ( - ) : filteredRollingData[startIndex].shptmBanrTpNm === 'LIVE' ? ( + ) : filteredRollingData && filteredRollingData.length > 0 && filteredRollingData[startIndex].shptmBanrTpNm === 'LIVE' ? (

- ) : filteredRollingData[startIndex].shptmBanrTpNm === 'VOD' ? ( + ) : filteredRollingData && filteredRollingData.length > 0 && filteredRollingData[startIndex].shptmBanrTpNm === 'VOD' ? ( - ) : filteredRollingData[startIndex].shptmBanrTpNm === "Today's Deals" ? ( + ) : filteredRollingData && filteredRollingData.length > 0 && filteredRollingData[startIndex].shptmBanrTpNm === "Today's Deals" ? ( ) : null} - {filteredRollingData !== 1 ? ( + {filteredRollingData.length !== 1 ? (