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 ? (