[롤링유닛 변경건]

- 선택약관 미동의시 링크가 남아 다른걸 눌러도 저스트 포유 페이지로 들어가는 문제가 발견되어 수정.
This commit is contained in:
junghoon86.park
2025-12-04 16:20:52 +09:00
parent 49f137620b
commit 44e50521fa

View File

@@ -115,11 +115,16 @@ export default function RollingUnit({
const previousTimeRef = useRef(); const previousTimeRef = useRef();
const arrRef = useRef([]); const arrRef = useRef([]);
const bannerDataRef = useRef(bannerData); const bannerDataRef = useRef(bannerData);
const rollingDataRef = useRef(rollingData); const filteredRollingDataRef = useRef(filteredRollingData);
// filteredRollingDataRef 업데이트
useEffect(() => {
filteredRollingDataRef.current = filteredRollingData;
}, [filteredRollingData]);
const topContentsLogInfo = useMemo(() => { const topContentsLogInfo = useMemo(() => {
if (rollingDataRef.current) { if (filteredRollingDataRef.current && filteredRollingDataRef.current.length > 0) {
const currentRollingData = rollingDataRef.current[startIndex]; const currentRollingData = filteredRollingDataRef.current[startIndex];
let contId, contNm; let contId, contNm;
@@ -172,9 +177,10 @@ export default function RollingUnit({
return {}; return {};
}, [shptmTmplCd, startIndex]); }, [shptmTmplCd, startIndex]);
const sendBannerLog = useCallback( const sendBannerLog = useCallback(
(bannerClick) => { (bannerClick) => {
const data = rollingDataRef.current[startIndex]; const data = filteredRollingDataRef.current[startIndex];
const newParams = const newParams =
bannerData.banrLctnNo === '2' bannerData.banrLctnNo === '2'
? { ? {
@@ -183,7 +189,7 @@ export default function RollingUnit({
: { : {
bannerType: 'Vertical', bannerType: 'Vertical',
}; };
if (rollingDataRef.current && nowMenu === LOG_MENU.HOME_TOP) { if (filteredRollingDataRef.current && nowMenu === LOG_MENU.HOME_TOP) {
const logParams = { const logParams = {
contextName: LOG_CONTEXT_NAME.HOME, contextName: LOG_CONTEXT_NAME.HOME,
messageId: bannerClick ? LOG_MESSAGE_ID.BANNER_CLICK : LOG_MESSAGE_ID.BANNER, messageId: bannerClick ? LOG_MESSAGE_ID.BANNER_CLICK : LOG_MESSAGE_ID.BANNER,
@@ -305,12 +311,13 @@ export default function RollingUnit({
const categoryData = useMemo(() => { const categoryData = useMemo(() => {
if ( if (
Object.keys(rollingData[startIndex]).length > 0 && filteredRollingData.length > 0 &&
rollingData[startIndex].shptmLnkTpCd === LINK_TYPES.CATEGORY Object.keys(filteredRollingData[startIndex]).length > 0 &&
filteredRollingData[startIndex].shptmLnkTpCd === LINK_TYPES.CATEGORY
) { ) {
if (homeCategory && homeCategory.length > 0) { if (homeCategory && homeCategory.length > 0) {
const foundCategory = homeCategory.find( const foundCategory = homeCategory.find(
(data) => data.lgCatCd === rollingData[startIndex].lgCatCd (data) => data.lgCatCd === filteredRollingData[startIndex].lgCatCd
); );
if (foundCategory) { if (foundCategory) {
return { return {
@@ -321,10 +328,10 @@ export default function RollingUnit({
} }
} }
return {}; return {};
}, [homeCategory, rollingData, startIndex]); }, [homeCategory, filteredRollingData, startIndex]);
const { originalPrice, discountedPrice, discountRate, offerInfo } = const { originalPrice, discountedPrice, discountRate, offerInfo } =
usePriceInfo(rollingData[startIndex].priceInfo) || {}; usePriceInfo(filteredRollingData.length > 0 ? filteredRollingData[startIndex].priceInfo : {}) || {};
const handlePushPanel = useCallback( const handlePushPanel = useCallback(
(name, panelInfo) => { (name, panelInfo) => {
@@ -350,10 +357,16 @@ export default function RollingUnit({
); );
const imageBannerClick = useCallback(() => { const imageBannerClick = useCallback(() => {
// 필터링된 데이터가 비어있으면 return
if (!filteredRollingData || filteredRollingData.length === 0) {
return;
}
if (bannerId) { if (bannerId) {
dispatch(setBannerIndex(bannerId, startIndex)); dispatch(setBannerIndex(bannerId, startIndex));
} }
const currentData = rollingData[startIndex];
const currentData = filteredRollingData[startIndex];
const linkType = currentData.shptmLnkTpCd; const linkType = currentData.shptmLnkTpCd;
const bannerType = currentData.shptmBanrTpNm; const bannerType = currentData.shptmBanrTpNm;
@@ -432,7 +445,7 @@ export default function RollingUnit({
}) })
); );
}, [ }, [
rollingData, filteredRollingData,
startIndex, startIndex,
bannerId, bannerId,
dispatch, dispatch,
@@ -443,6 +456,11 @@ export default function RollingUnit({
]); ]);
const videoClick = useCallback(() => { const videoClick = useCallback(() => {
// 필터링된 데이터가 비어있으면 return
if (!filteredRollingData || filteredRollingData.length === 0) {
return;
}
const lastFocusedTargetId = getContainerId(Spotlight.getCurrent()); const lastFocusedTargetId = getContainerId(Spotlight.getCurrent());
const currentSpot = Spotlight.getCurrent(); const currentSpot = Spotlight.getCurrent();
@@ -463,7 +481,7 @@ export default function RollingUnit({
dispatch(setBannerIndex(bannerId, startIndex)); dispatch(setBannerIndex(bannerId, startIndex));
} }
const currentData = rollingData[startIndex]; const currentData = filteredRollingData[startIndex];
handleStartVideoPlayer({ handleStartVideoPlayer({
showUrl: currentData.showUrl, showUrl: currentData.showUrl,
@@ -485,7 +503,7 @@ export default function RollingUnit({
logTpNo: LOG_TP_NO.TOP_CONTENTS.CLICK, logTpNo: LOG_TP_NO.TOP_CONTENTS.CLICK,
}) })
); );
}, [rollingData, startIndex, bannerId, dispatch, handleStartVideoPlayer, topContentsLogInfo]); }, [filteredRollingData, startIndex, bannerId, dispatch, handleStartVideoPlayer, topContentsLogInfo]);
// 10초 롤링 // 10초 롤링
useEffect(() => { useEffect(() => {
@@ -537,7 +555,7 @@ export default function RollingUnit({
useEffect(() => { useEffect(() => {
sendBannerLog(); sendBannerLog();
}, [rollingDataRef, nowMenu, startIndex]); }, [filteredRollingDataRef, nowMenu, startIndex]);
useEffect(() => { useEffect(() => {
if (nowMenu !== LOG_MENU.HOME_TOP) { if (nowMenu !== LOG_MENU.HOME_TOP) {
@@ -551,7 +569,7 @@ export default function RollingUnit({
spotlightId={`container-${spotlightId}`} spotlightId={`container-${spotlightId}`}
onFocus={shelfFocus} onFocus={shelfFocus}
> >
{filteredRollingData !== 1 ? ( {filteredRollingData.length !== 1 ? (
<SpottableComponent <SpottableComponent
className={classNames(css.arrow, css.leftBtn)} className={classNames(css.arrow, css.leftBtn)}
onClick={handlePrev} onClick={handlePrev}
@@ -564,7 +582,7 @@ export default function RollingUnit({
/> />
) : null} ) : null}
{filteredRollingData && filteredRollingData[startIndex].shptmBanrTpNm === 'Image Banner' ? ( {filteredRollingData && filteredRollingData.length > 0 && filteredRollingData[startIndex].shptmBanrTpNm === 'Image Banner' ? (
<SpottableComponent <SpottableComponent
className={classNames(css.itemBox, isHorizontal && css.isHorizontal)} className={classNames(css.itemBox, isHorizontal && css.isHorizontal)}
onClick={imageBannerClick} onClick={imageBannerClick}
@@ -582,7 +600,7 @@ export default function RollingUnit({
<img src={filteredRollingData[startIndex].tmnlImgPath} /> <img src={filteredRollingData[startIndex].tmnlImgPath} />
</div> </div>
</SpottableComponent> </SpottableComponent>
) : filteredRollingData[startIndex].shptmBanrTpNm === 'LIVE' ? ( ) : filteredRollingData && filteredRollingData.length > 0 && filteredRollingData[startIndex].shptmBanrTpNm === 'LIVE' ? (
<SpottableComponent <SpottableComponent
className={classNames(css.itemBox, isHorizontal && css.isHorizontal)} className={classNames(css.itemBox, isHorizontal && css.isHorizontal)}
onClick={videoClick} onClick={videoClick}
@@ -634,7 +652,7 @@ export default function RollingUnit({
/> />
</p> </p>
</SpottableComponent> </SpottableComponent>
) : filteredRollingData[startIndex].shptmBanrTpNm === 'VOD' ? ( ) : filteredRollingData && filteredRollingData.length > 0 && filteredRollingData[startIndex].shptmBanrTpNm === 'VOD' ? (
<SpottableComponent <SpottableComponent
className={classNames(css.itemBox, isHorizontal && css.isHorizontal)} className={classNames(css.itemBox, isHorizontal && css.isHorizontal)}
onClick={videoClick} onClick={videoClick}
@@ -682,7 +700,7 @@ export default function RollingUnit({
)} )}
</div> </div>
</SpottableComponent> </SpottableComponent>
) : filteredRollingData[startIndex].shptmBanrTpNm === "Today's Deals" ? ( ) : filteredRollingData && filteredRollingData.length > 0 && filteredRollingData[startIndex].shptmBanrTpNm === "Today's Deals" ? (
<SpottableComponent <SpottableComponent
className={classNames( className={classNames(
css.itemBox, css.itemBox,
@@ -738,7 +756,7 @@ export default function RollingUnit({
</SpottableComponent> </SpottableComponent>
) : null} ) : null}
{filteredRollingData !== 1 ? ( {filteredRollingData.length !== 1 ? (
<SpottableComponent <SpottableComponent
className={classNames(css.arrow, css.rightBtn)} className={classNames(css.arrow, css.rightBtn)}
onClick={handleNext} onClick={handleNext}