[251123] Merge: develop_si base로 develop을 merge함

This commit is contained in:
2025-11-23 18:45:09 +09:00
45 changed files with 1059 additions and 315 deletions

View File

@@ -69,8 +69,15 @@ function PlayerOverlayContents({
}, [dispatch, captionEnable, setIsSubtitleActive]);
const patncLogoPath = useMemo(() => {
// <<<<<<< HEAD
let logo = playListInfo[selectedIndex]?.patncLogoPath;
if (type === 'MEDIA') {
// =======
// let logo = playListInfo[selectedIndex]?.patncLogoPath
// ? playListInfo[selectedIndex]?.patncLogoPath
// : playListInfo[selectedIndex]?.logoImgPath;
// if (type === "MEDIA") {
// >>>>>>> gitlab/develop
logo = panelInfo?.patncLogoPath;
}

View File

@@ -1,16 +1,18 @@
import React, { useMemo } from 'react';
import React, { useEffect, useMemo, useRef, useState } from 'react';
import classNames from 'classnames';
import { useSelector } from 'react-redux';
import TQRCode from '../../../components/TQRCode/TQRCode';
import css from './PlayerOverlayQRCode.module.less';
import { getQRCodeUrl, scaleH, scaleW } from '../../../utils/helperMethods';
import { getQRCodeUrl, scaleH, scaleW, $L } from '../../../utils/helperMethods';
function PlayerOverlayQRCode({ qrCurrentItem, type, modalScale }) {
const { cntry_cd } = useSelector((state) => state.common.httpHeader);
const deviceInfo = useSelector((state) => state.device.deviceInfo);
const [isShowQRCode, setIsShowQRCode] = useState(true);
const timerRef = useRef(null);
const serverHOST = useSelector((state) => state.common.appStatus.serverHOST);
const serverType = useSelector((state) => state.localSettings.serverType);
const { entryMenu, nowMenu } = useSelector((state) => state.common.menu);
@@ -102,6 +104,28 @@ function PlayerOverlayQRCode({ qrCurrentItem, type, modalScale }) {
return qrCurrentItem?.qrcodeUrl;
}, [detailUrl, qrCurrentItem, type]);
useEffect(() => {
const toggleQRCode = () => {
if (isShowQRCode) {
timerRef.current = setTimeout(() => {
setIsShowQRCode(false);
}, 10000);
} else {
timerRef.current = setTimeout(() => {
setIsShowQRCode(true);
}, 5000);
}
};
toggleQRCode();
return () => {
if (timerRef.current) {
clearTimeout(timerRef.current);
}
};
}, [isShowQRCode]);
return (
<>
{innerStylePosition && QRCodeUrl && (
@@ -115,6 +139,7 @@ function PlayerOverlayQRCode({ qrCurrentItem, type, modalScale }) {
)}
style={innerStylePosition}
>
{/* <<<<<<< HEAD */}
<div>
<TQRCode
text={QRCodeUrl}
@@ -124,6 +149,27 @@ function PlayerOverlayQRCode({ qrCurrentItem, type, modalScale }) {
/>
<div className={css.text}>{label}</div>
</div>
{/* =======
{isShowQRCode ? (
<div>
<TQRCode
text={QRCodeUrl}
width={width}
height={height}
ariaLabel='QR CODE, "SCAN TO SHOP" go to Shoptime App'
/>
<div className={css.text}>{label}</div>
</div>
) : (
<div className={css.qrRollingWrap}>
<div className={css.innerText}>
<h3>{$L("Scan QR")}</h3>
<p>{$L("with your phone, Check Product")}</p>
<p>{$L("info & Purchase easily")}</p>
</div>
</div>
)}
>>>>>>> gitlab/develop */}
</div>
)}
</>

View File

@@ -68,4 +68,84 @@
}
}
}
.qrRollingWrap {
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
text-align: center;
width: 100%;
height: 100%;
background: @COLOR_WHITE;
.innerText {
width: 100%;
padding: 0 10px;
h3 {
word-break: break-word;
font-size: 24px;
font-weight: bold;
color: @PRIMARY_COLOR_RED;
& + p {
margin-top: 10px;
}
}
p {
font-size: 16px;
font-weight: bold;
line-height: 1.2;
color: @COLOR_GRAY05;
word-break: keep-all;
}
}
}
// 국가별 롤링 텍스트 크기 조정 (폰트 사이즈만)
&.us .qrRollingWrap {
.innerText {
h3 {
font-size: 27px;
}
p {
font-size: 18px;
}
}
}
&.ru .qrRollingWrap {
.innerText {
h3 {
font-size: 22px;
}
p {
font-size: 15px;
}
}
}
&.de .qrRollingWrap {
.innerText {
h3 {
font-size: 26px;
}
p {
font-size: 17px;
}
}
}
&.gb .qrRollingWrap {
.innerText {
h3 {
font-size: 23px;
}
p {
font-size: 16px;
}
}
}
}

View File

@@ -28,9 +28,16 @@ import {
getMainCategoryShowDetail,
getMainLiveShow,
getMainLiveShowNowProduct,
// <<<<<<< HEAD
} from '../../actions/mainActions';
import * as PanelActions from '../../actions/panelActions';
import { updatePanel } from '../../actions/panelActions';
// =======
// } from "../../actions/mainActions";
// import { getBrandLiveChannelInfo } from "../../actions/brandActions";
// import * as PanelActions from "../../actions/panelActions";
// import { updatePanel } from "../../actions/panelActions";
// >>>>>>> gitlab/develop
import {
CLEAR_PLAYER_INFO,
getChatLog,

View File

@@ -33,16 +33,20 @@ export default function TabContainer({
prevChannelIndex,
currentTime,
spotlightId,
isFilteredByPatnr19,
}) {
const [tab, setTab] = useState(0);
const tabList = [
$L("SHOP NOW"),
panelInfo?.shptmBanrTpNm === "LIVE"
? $L("LIVE CHANNEL")
? isFilteredByPatnr19
? $L("VOD CHANNEL")
: $L("LIVE CHANNEL")
: $L("FEATURED SHOWS"),
];
// console.log("###liveChannelInfos", liveChannelInfos[selectedIndex]);
const handleItemClick = useCallback(
({ index }) => {
if (index === tab) return;
@@ -101,7 +105,6 @@ export default function TabContainer({
},
[videoVerticalVisible]
);
return (
<Container
className={classNames(
@@ -121,7 +124,7 @@ export default function TabContainer({
{tab === 0 && (
<ShopNowContents
tabTitle = {tabList}
tabTitle={tabList}
shopNowInfo={shopNowInfo}
playListInfo={playListInfo && playListInfo[selectedIndex]}
videoVerticalVisible={videoVerticalVisible}
@@ -130,9 +133,25 @@ export default function TabContainer({
handleItemFocus={_handleItemFocus}
/>
)}
{panelInfo?.shptmBanrTpNm === "VOD" &&
panelInfo?.patnrId === "19" &&
tab === 1 && (
<FeaturedShowContents
tabTitle={tabList}
featuredShowsInfos={playListInfo}
currentVideoInfo={playListInfo[selectedIndex]}
setSelectedIndex={setSelectedIndex}
selectedIndex={selectedIndex}
videoVerticalVisible={videoVerticalVisible}
currentVideoShowId={playListInfo[selectedIndex]?.showId}
tabIndex={tab}
panelInfo={panelInfo}
handleItemFocus={_handleItemFocus}
/>
)}
{panelInfo?.shptmBanrTpNm === "VOD" && tab === 1 && (
<FeaturedShowContents
tabTitle = {tabList}
tabTitle={tabList}
featuredShowsInfos={playListInfo}
currentVideoInfo={playListInfo[selectedIndex]}
setSelectedIndex={setSelectedIndex}
@@ -146,7 +165,7 @@ export default function TabContainer({
)}
{panelInfo?.shptmBanrTpNm === "LIVE" && tab === 1 && liveChannelInfos && (
<LiveChannelContents
tabTitle = {tabList}
tabTitle={tabList}
selectedIndex={selectedIndex}
setSelectedIndex={setSelectedIndex}
videoVerticalVisible={videoVerticalVisible}
@@ -156,6 +175,7 @@ export default function TabContainer({
handleItemFocus={_handleItemFocus}
panelInfo={panelInfo}
currentTime={currentTime}
isFilteredByPatnr19={isFilteredByPatnr19}
/>
)}

View File

@@ -4,6 +4,7 @@ import { useDispatch } from 'react-redux';
import Spotlight from '@enact/spotlight';
// <<<<<<< HEAD
import defaultImage from '../../../../../assets/images/img-thumb-empty-144@3x.png';
import { updatePanel } from '../../../../actions/panelActions';
import TVirtualGridList from '../../../../components/TVirtualGridList/TVirtualGridList';
@@ -14,6 +15,23 @@ import ListEmptyContents from '../TabContents/ListEmptyContents/ListEmptyContent
import css from './LiveChannelContents.module.less';
import { getMainCategoryShowDetail } from '../../../../actions/mainActions';
import { sendLogTotalRecommend } from '../../../../actions/logActions';
// =======
// import defaultImage from "../../../../../assets/images/img-thumb-empty-144@3x.png";
// import { updatePanel } from "../../../../actions/panelActions";
// import TVirtualGridList from "../../../../components/TVirtualGridList/TVirtualGridList";
// import {
// LOG_CONTEXT_NAME,
// LOG_MENU,
// LOG_MESSAGE_ID,
// panel_names,
// } from "../../../../utils/Config";
// import { $L, removeSpecificTags } from "../../../../utils/helperMethods";
// import PlayerItemCard, { TYPES } from "../../PlayerItemCard/PlayerItemCard";
// import ListEmptyContents from "../TabContents/ListEmptyContents/ListEmptyContents";
// import css from "./LiveChannelContents.module.less";
// import { getMainCategoryShowDetail } from "../../../../actions/mainActions";
// import { sendLogTotalRecommend } from "../../../../actions/logActions";
// >>>>>>> gitlab/develop
export default function FeaturedShowContents({
featuredShowsInfos,
@@ -44,6 +62,8 @@ export default function FeaturedShowContents({
({ index, ...rest }) => {
const {
thumbnailUrl,
logoImgPath,
thumbnailImgPath,
patncLogoPath,
patnrId,
showId,
@@ -106,8 +126,14 @@ export default function FeaturedShowContents({
{...rest}
key={prdtId}
imageAlt={prdtId}
logo={patncLogoPath}
imageSource={thumbnailUrl ? thumbnailUrl : defaultImage}
logo={logoImgPath ? logoImgPath : patncLogoPath}
imageSource={
thumbnailUrl
? thumbnailUrl
: thumbnailImgPath
? thumbnailImgPath
: defaultImage
}
productName={showNameDangerouslySetInnerHTML}
patnerName={patncNm}
onClick={handleItemClick}

View File

@@ -4,6 +4,7 @@ import { useDispatch } from 'react-redux';
import Spotlight from '@enact/spotlight';
// <<<<<<< HEAD
import { updatePanel } from '../../../../actions/panelActions';
import TVirtualGridList from '../../../../components/TVirtualGridList/TVirtualGridList';
import { LOG_CONTEXT_NAME, LOG_MENU, LOG_MESSAGE_ID, panel_names } from '../../../../utils/Config';
@@ -13,6 +14,21 @@ import ListEmptyContents from '../TabContents/ListEmptyContents/ListEmptyContent
import css from './LiveChannelContents.module.less';
import cssV2 from './LiveChannelContents.v2.module.less';
import { sendLogTotalRecommend } from '../../../../actions/logActions';
// =======
// import { updatePanel } from "../../../../actions/panelActions";
// import TVirtualGridList from "../../../../components/TVirtualGridList/TVirtualGridList";
// import {
// LOG_CONTEXT_NAME,
// LOG_MENU,
// LOG_MESSAGE_ID,
// panel_names,
// } from "../../../../utils/Config";
// import { $L } from "../../../../utils/helperMethods";
// import PlayerItemCard, { TYPES } from "../../PlayerItemCard/PlayerItemCard";
// import ListEmptyContents from "../TabContents/ListEmptyContents/ListEmptyContents";
// import css from "./LiveChannelContents.module.less";
// import { sendLogTotalRecommend } from "../../../../actions/logActions";
// >>>>>>> gitlab/develop
export default function LiveChannelContents({
liveInfos,
@@ -24,13 +40,22 @@ export default function LiveChannelContents({
handleItemFocus,
tabTitle,
panelInfo,
// <<<<<<< HEAD
direction = 'vertical',
version = 1,
isFilteredByPatnr19,
}) {
const dispatch = useDispatch();
const isClickBlocked = useRef(false);
const blockTimeoutRef = useRef(null);
// =======
// isFilteredByPatnr19,
// }) {
// const dispatch = useDispatch();
// const isClickBlocked = useRef(false);
const scrollToRef = useRef(null);
// >>>>>>> gitlab/develop
const handleFocus = useCallback(
() => () => {
if (handleItemFocus) {
@@ -40,6 +65,18 @@ export default function LiveChannelContents({
[handleItemFocus]
);
// cbScrollTo 콜백으로 scrollTo 함수 받기
const handleScrollTo = useCallback((scrollToFn) => {
scrollToRef.current = scrollToFn;
}, []);
// VOD Channel로 전환될 때 스크롤을 최상단으로 이동
useEffect(() => {
if (isFilteredByPatnr19 && scrollToRef.current) {
scrollToRef.current({ index: 0, animate: false, focus: false });
}
}, [isFilteredByPatnr19]);
const renderItem = useCallback(
({ index, ...rest }) => {
const {
@@ -144,7 +181,11 @@ export default function LiveChannelContents({
startDt={strtDt}
endDt={endDt}
currentTime={currentTime}
// <<<<<<< HEAD
version={version}
// =======
// currentVideoVisible={currentVideoShowId === liveInfos[index].showId}
// >>>>>>> gitlab/develop
/>
);
},
@@ -167,6 +208,7 @@ export default function LiveChannelContents({
<div className={containerClass}>
{liveInfos && liveInfos.length > 0 ? (
<TVirtualGridList
cbScrollTo={handleScrollTo}
dataSize={liveInfos.length}
direction={direction}
renderItem={renderItem}

View File

@@ -27,7 +27,6 @@ export default function YouMayLikeContents({
const youmaylikeInfos = useSelector((state) => state.main.youmaylikeInfos);
const gridStyle = useMemo(() => ({ height: `${height}px` }), [height]);
useEffect(() => {
if (shopNowInfo && shopNowInfo.length === 2) {
setHeight(scaleH(300));
@@ -82,7 +81,12 @@ export default function YouMayLikeContents({
showNm: playListInfo?.showNm,
showId: playListInfo?.showId,
liveFlag: playListInfo?.liveFlag,
// <<<<<<< HEAD
thumbnailUrl: playListInfo?.thumbnailUrl,
// =======
catDpTh3: playListInfo?.catDpTh3,
catDpTh4: playListInfo?.catDpTh4,
// >>>>>>> gitlab/develop
patnrId,
prdtId,
launchedFromPlayer: true,