[Log] Log, IF-LGSP-LOG-005, HomePanel 반영

This commit is contained in:
younghoon100.park
2024-05-23 15:41:22 +09:00
parent ab9b3a4ebc
commit 402be5b9a5
9 changed files with 252 additions and 105 deletions

View File

@@ -13,7 +13,7 @@ import TScroller from "../../../components/TScroller/TScroller";
import useScrollReset from "../../../hooks/useScrollReset"; import useScrollReset from "../../../hooks/useScrollReset";
import useScrollTo from "../../../hooks/useScrollTo"; import useScrollTo from "../../../hooks/useScrollTo";
import useScrollTopByDistance from "../../../hooks/useScrollTopByDistance"; import useScrollTopByDistance from "../../../hooks/useScrollTopByDistance";
import { panel_names } from "../../../utils/Config"; import { LOG_MENU, panel_names } from "../../../utils/Config";
import { $L, scaleW } from "../../../utils/helperMethods"; import { $L, scaleW } from "../../../utils/helperMethods";
import css from "./BestSeller.module.less"; import css from "./BestSeller.module.less";
@@ -23,55 +23,66 @@ const Container = SpotlightContainerDecorator(
"div" "div"
); );
const BestSeller = ({ order, scrollTopBody, panelInfo }) => { const BestSeller = ({ order, scrollTopBody, handleItemFocus }) => {
const dispatch = useDispatch();
const bestSellerDatas = useSelector(
(state) => state.product.bestSellerData?.bestSeller
);
const [drawChk, setDrawChk] = useState(false);
const { getScrollTo, scrollLeft } = useScrollTo(); const { getScrollTo, scrollLeft } = useScrollTo();
const { handleScrollReset, handleStopScrolling } = useScrollReset( const { handleScrollReset, handleStopScrolling } = useScrollReset(
scrollLeft, scrollLeft,
true true
); );
const { scrollTopByDistance } = useScrollTopByDistance(); const { scrollTopByDistance } = useScrollTopByDistance();
const dispatch = useDispatch();
const { cursorVisible } = useSelector((state) => state.common.appStatus); const { cursorVisible } = useSelector((state) => state.common.appStatus);
const bestSellerDatas = useSelector(
(state) => state.product.bestSellerData?.bestSeller
);
const [drawChk, setDrawChk] = useState(false);
const orderStyle = useMemo(() => ({ order: order }), [order]);
useEffect(() => { useEffect(() => {
setDrawChk(true); setDrawChk(true);
}, [bestSellerDatas]); }, [bestSellerDatas]);
const handleCardClick = useCallback((patnrId, prdtId) => {
dispatch( const handleCardClick = useCallback(
pushPanel( (patnrId, prdtId) => () => {
{ dispatch(
pushPanel({
name: panel_names.DETAIL_PANEL, name: panel_names.DETAIL_PANEL,
panelInfo: { patnrId: patnrId, prdtId: prdtId }, panelInfo: { patnrId: patnrId, prdtId: prdtId },
}, })
[dispatch] );
) },
); [dispatch]
}); );
const handleMoreCardClick = useCallback(() => { const handleMoreCardClick = useCallback(() => {
dispatch( dispatch(
pushPanel( pushPanel({
{ name: panel_names.TRENDING_NOW_PANEL,
name: panel_names.TRENDING_NOW_PANEL, panelInfo: {
panelInfo: { pageName: "BS",
pageName: "BS",
},
}, },
[dispatch] })
)
); );
}); }, [dispatch]);
const handleBlur = useCallback((itemIndex) => { const handleBlur = useCallback(
if (itemIndex === 0) { (itemIndex) => () => {
handleStopScrolling(); if (itemIndex === 0) {
} handleStopScrolling();
}, []); }
},
[handleStopScrolling]
);
const handleFocus = useCallback( const handleFocus = useCallback(
(itemIndex) => { (itemIndex) => () => {
_handleItemFocus();
if (itemIndex === 0) { if (itemIndex === 0) {
handleScrollReset(); handleScrollReset();
} }
@@ -87,10 +98,15 @@ const BestSeller = ({ order, scrollTopBody, panelInfo }) => {
36 36
); );
}, },
[cursorVisible] [
cursorVisible,
_handleItemFocus,
handleScrollReset,
scrollTopBody,
scrollTopByDistance,
]
); );
const orderStyle = useMemo(() => ({ order: order }), [order]);
const handleScrollRight = (e) => { const handleScrollRight = (e) => {
const container = e.currentTarget?.parentNode; const container = e.currentTarget?.parentNode;
const x = container.scrollWidth - container.clientWidth + 60; const x = container.scrollWidth - container.clientWidth + 60;
@@ -99,6 +115,13 @@ const BestSeller = ({ order, scrollTopBody, panelInfo }) => {
scrollLeft({ x, animate: true }); scrollLeft({ x, animate: true });
}); });
}; };
const _handleItemFocus = useCallback(() => {
if (handleItemFocus) {
handleItemFocus(LOG_MENU.HOME_BEST_SELLER);
}
}, [handleItemFocus]);
return ( return (
<Container className={css.bestSellerWrap} style={orderStyle}> <Container className={css.bestSellerWrap} style={orderStyle}>
<SectionTitle <SectionTitle
@@ -135,9 +158,9 @@ const BestSeller = ({ order, scrollTopBody, panelInfo }) => {
isBestSeller={true} isBestSeller={true}
productId={prdtId} productId={prdtId}
rank={rankOrd} rank={rankOrd}
onFocus={() => handleFocus(itemIndex)} onFocus={handleFocus(itemIndex)}
onBlur={() => handleBlur(itemIndex)} onBlur={handleBlur(itemIndex)}
onClick={() => handleCardClick(patnrId, prdtId)} onClick={handleCardClick(patnrId, prdtId)}
offerInfo={offerInfo} offerInfo={offerInfo}
spotlightId={"bestsellerItem" + itemIndex} spotlightId={"bestsellerItem" + itemIndex}
/> />

View File

@@ -1,4 +1,4 @@
import React, { useEffect, useMemo, useRef } from "react"; import React, { useCallback, useEffect, useMemo, useRef } from "react";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
@@ -13,6 +13,7 @@ import useScrollReset from "../../../hooks/useScrollReset";
import css from "./HomeBanner.module.less"; import css from "./HomeBanner.module.less";
import Random from "./RandomUnit"; import Random from "./RandomUnit";
import Rolling from "./RollingUnit"; import Rolling from "./RollingUnit";
import { LOG_MENU } from "../../../utils/Config";
const SpottableComponent = Spottable("div"); const SpottableComponent = Spottable("div");
@@ -31,6 +32,7 @@ export default function HomeBanner({
selectTemplate, selectTemplate,
order, order,
firstSpot, firstSpot,
handleItemFocus,
}) { }) {
const dispatch = useDispatch(); const dispatch = useDispatch();
const { handleScrollReset, handleStopScrolling } = const { handleScrollReset, handleStopScrolling } =
@@ -162,6 +164,12 @@ export default function HomeBanner({
const forthBanner = homeMainContentsBannerInfos ? templateBanner(3) : null; const forthBanner = homeMainContentsBannerInfos ? templateBanner(3) : null;
const orderStyle = useMemo(() => ({ order: order }), [order]); const orderStyle = useMemo(() => ({ order: order }), [order]);
const _handleItemFocus = useCallback(() => {
if (handleItemFocus) {
handleItemFocus(LOG_MENU.HOME_TOP);
}
}, [handleItemFocus]);
return ( return (
<Container className={css.container} spotlightId={"top"} style={orderStyle}> <Container className={css.container} spotlightId={"top"} style={orderStyle}>
<div className={css.homeTemplateBox}> <div className={css.homeTemplateBox}>
@@ -183,6 +191,7 @@ export default function HomeBanner({
isHorizontal={true} isHorizontal={true}
spotlightId={"banner01"} spotlightId={"banner01"}
scrollTopBody={scrollTopBody} scrollTopBody={scrollTopBody}
handleItemFocus={_handleItemFocus}
/> />
) : firstBanner && firstBanner.shptmDspyTpNm === "Random" ? ( ) : firstBanner && firstBanner.shptmDspyTpNm === "Random" ? (
<Random <Random
@@ -190,6 +199,7 @@ export default function HomeBanner({
isHorizontal={true} isHorizontal={true}
spotlightId={"banner01"} spotlightId={"banner01"}
scrollTopBody={scrollTopBody} scrollTopBody={scrollTopBody}
handleItemFocus={_handleItemFocus}
/> />
) : ( ) : (
<SpottableComponent <SpottableComponent
@@ -210,6 +220,7 @@ export default function HomeBanner({
isHorizontal={true} isHorizontal={true}
spotlightId={"banner02"} spotlightId={"banner02"}
scrollTopBody={scrollTopBody} scrollTopBody={scrollTopBody}
handleItemFocus={_handleItemFocus}
/> />
) : secondBanner && secondBanner.shptmDspyTpNm === "Random" ? ( ) : secondBanner && secondBanner.shptmDspyTpNm === "Random" ? (
<Random <Random
@@ -217,6 +228,7 @@ export default function HomeBanner({
isHorizontal={true} isHorizontal={true}
spotlightId={"banner02"} spotlightId={"banner02"}
scrollTopBody={scrollTopBody} scrollTopBody={scrollTopBody}
handleItemFocus={_handleItemFocus}
/> />
) : ( ) : (
<SpottableComponent <SpottableComponent
@@ -247,6 +259,7 @@ export default function HomeBanner({
isHorizontal={false} isHorizontal={false}
spotlightId={"banner03"} spotlightId={"banner03"}
scrollTopBody={scrollTopBody} scrollTopBody={scrollTopBody}
handleItemFocus={_handleItemFocus}
/> />
) : thirdBanner && thirdBanner.shptmDspyTpNm === "Random" ? ( ) : thirdBanner && thirdBanner.shptmDspyTpNm === "Random" ? (
<Random <Random
@@ -254,6 +267,7 @@ export default function HomeBanner({
isHorizontal={false} isHorizontal={false}
spotlightId={"banner03"} spotlightId={"banner03"}
scrollTopBody={scrollTopBody} scrollTopBody={scrollTopBody}
handleItemFocus={_handleItemFocus}
/> />
) : ( ) : (
<SpottableComponent <SpottableComponent
@@ -283,6 +297,7 @@ export default function HomeBanner({
isHorizontal={false} isHorizontal={false}
spotlightId={"banner04"} spotlightId={"banner04"}
scrollTopBody={scrollTopBody} scrollTopBody={scrollTopBody}
handleItemFocus={_handleItemFocus}
/> />
) : forthBanner && forthBanner.shptmDspyTpNm === "Random" ? ( ) : forthBanner && forthBanner.shptmDspyTpNm === "Random" ? (
<Random <Random
@@ -290,6 +305,7 @@ export default function HomeBanner({
isHorizontal={false} isHorizontal={false}
spotlightId={"banner04"} spotlightId={"banner04"}
scrollTopBody={scrollTopBody} scrollTopBody={scrollTopBody}
handleItemFocus={_handleItemFocus}
/> />
) : ( ) : (
<SpottableComponent <SpottableComponent

View File

@@ -35,6 +35,7 @@ export default function RandomUnit({
spotlightId, spotlightId,
scrollTopBody, scrollTopBody,
isHorizontal, isHorizontal,
handleItemFocus,
}) { }) {
const bannerDetailInfos = bannerData.bannerDetailInfos; const bannerDetailInfos = bannerData.bannerDetailInfos;
@@ -122,10 +123,14 @@ export default function RandomUnit({
}, [isFocused, dispatch]); }, [isFocused, dispatch]);
// 포커스 인 // 포커스 인
const onFocus = (ev) => { const onFocus = useCallback(() => {
if (handleItemFocus) {
handleItemFocus();
}
setIsFocused(true); setIsFocused(true);
handleScrollReset(); handleScrollReset();
}; }, [handleItemFocus, handleScrollReset]);
// 포커스 아웃 // 포커스 아웃
const onBlur = (ev) => { const onBlur = (ev) => {

View File

@@ -32,13 +32,14 @@ export default function RollingUnit({
spotlightId, spotlightId,
scrollTopBody, scrollTopBody,
isHorizontal, isHorizontal,
handleItemFocus,
}) { }) {
const rollingData = bannerData.bannerDetailInfos; const rollingData = bannerData.bannerDetailInfos;
const rollingDataLength = bannerData.bannerDetailInfos.length; const rollingDataLength = bannerData.bannerDetailInfos.length;
const [startIndex, setStartIndex] = useState(0); const [startIndex, setStartIndex] = useState(0);
const [lastIndex, setLastIndex] = useState(rollingDataLength - 1); const [lastIndex, setLastIndex] = useState(rollingDataLength - 1);
const [rollingFocus, setrollingFocus] = useState(false); const [rollingFocus, setRollingFocus] = useState(false);
const [contentsFocus, setContentsFocus] = useState(false); const [contentsFocus, setContentsFocus] = useState(false);
const [prevFocus, setPrevFocus] = useState(false); const [prevFocus, setPrevFocus] = useState(false);
const [nextFocus, setNextFocus] = useState(false); const [nextFocus, setNextFocus] = useState(false);
@@ -59,9 +60,9 @@ export default function RollingUnit({
}; };
// 롤링 시작 여부 true = stop, false = start // 롤링 시작 여부 true = stop, false = start
const rollingStart = (focus) => { const rollingStart = useCallback((focus) => {
setrollingFocus(focus); setRollingFocus(focus);
}; }, []);
// 롤링 이전 버튼 // 롤링 이전 버튼
const handlePrev = useCallback(() => { const handlePrev = useCallback(() => {
@@ -82,16 +83,20 @@ export default function RollingUnit({
}, [startIndex]); }, [startIndex]);
// 베너 포커스 인 // 베너 포커스 인
const onFocus = () => { const onFocus = useCallback(() => {
if (handleItemFocus) {
handleItemFocus();
}
rollingStart(true); rollingStart(true);
setrollingFocus(true); setRollingFocus(true);
handleScrollReset(); handleScrollReset();
}; }, [handleItemFocus, handleScrollReset, rollingStart]);
// 배너 포커스 아웃 // 배너 포커스 아웃
const onBlur = () => { const onBlur = () => {
rollingStart(false); rollingStart(false);
setrollingFocus(false); setRollingFocus(false);
handleStopScrolling(); handleStopScrolling();
}; };
@@ -112,13 +117,17 @@ export default function RollingUnit({
}; };
// 인디케이터 포커스 // 인디케이터 포커스
const indicatorFocus = () => { const indicatorFocus = useCallback(() => {
if (handleItemFocus) {
handleItemFocus();
}
setNextFocus(false); setNextFocus(false);
setContentsFocus(false); setContentsFocus(false);
setPrevFocus(false); setPrevFocus(false);
rollingStart(true); rollingStart(true);
handleScrollReset(); handleScrollReset();
}; }, [handleItemFocus, handleScrollReset, rollingStart]);
// 인디케이터 포커스 아웃 // 인디케이터 포커스 아웃
const indicatorBlur = () => { const indicatorBlur = () => {

View File

@@ -12,18 +12,14 @@ import useScrollTopByDistance from "../../../hooks/useScrollTopByDistance";
import { $L, scaleW } from "../../../utils/helperMethods"; import { $L, scaleW } from "../../../utils/helperMethods";
import css from "./HomeOnSale.module.less"; import css from "./HomeOnSale.module.less";
import HomeOnSaleItem from "./HomeOnSaleItem/HomeOnSaleItem"; import HomeOnSaleItem from "./HomeOnSaleItem/HomeOnSaleItem";
import { LOG_MENU } from "../../../utils/Config";
const Container = SpotlightContainerDecorator( const Container = SpotlightContainerDecorator(
{ enterTo: "last-focused" }, { enterTo: "last-focused" },
"div" "div"
); );
const HomeOnSale = ({ order, scrollTopBody, ...rest }) => { const HomeOnSale = ({ order, scrollTopBody, handleItemFocus, ...rest }) => {
const homeOnSaleInfos = useSelector(
(state) => state.onSale.onSaleData?.data.homeOnSaleInfos
);
const { cursorVisible } = useSelector((state) => state.common.appStatus);
const { scrollTopByDistance } = useScrollTopByDistance(); const { scrollTopByDistance } = useScrollTopByDistance();
const { getScrollTo, scrollLeft } = useScrollTo(); const { getScrollTo, scrollLeft } = useScrollTo();
const { handleScrollReset, handleStopScrolling } = useScrollReset( const { handleScrollReset, handleStopScrolling } = useScrollReset(
@@ -31,7 +27,12 @@ const HomeOnSale = ({ order, scrollTopBody, ...rest }) => {
true true
); );
const homeOnSaleInfosLength = homeOnSaleInfos?.length; const homeOnSaleInfos = useSelector(
(state) => state.onSale.onSaleData?.data.homeOnSaleInfos
);
const { cursorVisible } = useSelector((state) => state.common.appStatus);
const orderStyle = useMemo(() => ({ order: order }), [order]);
const handleScrollRight = (e) => { const handleScrollRight = (e) => {
const container = e.currentTarget?.parentNode; const container = e.currentTarget?.parentNode;
@@ -44,12 +45,14 @@ const HomeOnSale = ({ order, scrollTopBody, ...rest }) => {
}; };
const handleFocus = useCallback( const handleFocus = useCallback(
(e, index) => { (index) => (e) => {
_handleItemFocus();
if (index === 0) { if (index === 0) {
handleScrollReset(); handleScrollReset();
} }
if (index === homeOnSaleInfosLength - 1) { if (index === homeOnSaleInfos?.length - 1) {
handleScrollRight(e); handleScrollRight(e);
} }
@@ -64,15 +67,31 @@ const HomeOnSale = ({ order, scrollTopBody, ...rest }) => {
36 36
); );
}, },
[cursorVisible, homeOnSaleInfos] [
cursorVisible,
_handleItemFocus,
handleScrollReset,
handleScrollRight,
homeOnSaleInfos?.length,
scrollTopBody,
scrollTopByDistance,
]
); );
const handleBlur = useCallback((itemIndex) => {
if (itemIndex === 0) {
handleStopScrolling();
}
}, []);
const orderStyle = useMemo(() => ({ order: order }), [order]); const handleBlur = useCallback(
(itemIndex) => () => {
if (itemIndex === 0) {
handleStopScrolling();
}
},
[handleStopScrolling]
);
const _handleItemFocus = useCallback(() => {
if (handleItemFocus) {
handleItemFocus(LOG_MENU.HOME_ON_SALE);
}
}, [handleItemFocus]);
return ( return (
<Container {...rest} className={css.container} style={orderStyle}> <Container {...rest} className={css.container} style={orderStyle}>
@@ -98,8 +117,8 @@ const HomeOnSale = ({ order, scrollTopBody, ...rest }) => {
key={index} key={index}
homeOnSaleInfos={homeOnSaleInfos} homeOnSaleInfos={homeOnSaleInfos}
itemData={itemData} itemData={itemData}
onFocus={(e) => handleFocus(e, index)} onFocus={handleFocus(index)}
onBlur={() => handleBlur(index)} onBlur={handleBlur(index)}
/> />
); );
})} })}

View File

@@ -33,6 +33,7 @@ import HomeOnSale from "../HomePanel/HomeOnSale/HomeOnSale";
import css from "../HomePanel/HomePanel.module.less"; import css from "../HomePanel/HomePanel.module.less";
import PopularShow from "../HomePanel/PopularShow/PopularShow"; import PopularShow from "../HomePanel/PopularShow/PopularShow";
import SubCategory from "../HomePanel/SubCategory/SubCategory"; import SubCategory from "../HomePanel/SubCategory/SubCategory";
import useLogService from "../../hooks/useLogService";
const TEMPLATE_CODE_CONF = { const TEMPLATE_CODE_CONF = {
TOP: "DSP00101", TOP: "DSP00101",
@@ -54,6 +55,7 @@ const hasTemplateCodeWithValue = (array, value) =>
); );
export default function HomePanel({ isOnTop }) { export default function HomePanel({ isOnTop }) {
const { sendLogGNB } = useLogService();
const dispatch = useDispatch(); const dispatch = useDispatch();
const homeLayoutInfo = useSelector((state) => state.home.layoutData); const homeLayoutInfo = useSelector((state) => state.home.layoutData);
const homeSpotlight = useSelector((state) => state.home.spotData?.panelInfo); const homeSpotlight = useSelector((state) => state.home.spotData?.panelInfo);
@@ -245,6 +247,13 @@ export default function HomePanel({ isOnTop }) {
} }
}; };
const handleItemFocus = useCallback(
(nowMenu) => {
sendLogGNB(nowMenu);
},
[sendLogGNB]
);
return ( return (
<> <>
{homeLayoutInfo && homeTopDisplayInfos && ( {homeLayoutInfo && homeTopDisplayInfos && (
@@ -271,6 +280,7 @@ export default function HomePanel({ isOnTop }) {
)} )}
firstSpot={firstSpot} firstSpot={firstSpot}
className={css.homeBannerWrap} className={css.homeBannerWrap}
handleItemFocus={handleItemFocus}
/> />
)} )}
{hasTemplateCodeWithValue( {hasTemplateCodeWithValue(
@@ -284,6 +294,7 @@ export default function HomePanel({ isOnTop }) {
)} )}
scrollTopBody={scrollTopBody} scrollTopBody={scrollTopBody}
catCd={cateCd} catCd={cateCd}
handleItemFocus={handleItemFocus}
/> />
)} )}
{hasTemplateCodeWithValue( {hasTemplateCodeWithValue(
@@ -296,6 +307,7 @@ export default function HomePanel({ isOnTop }) {
TEMPLATE_CODE_CONF.ON_SALE TEMPLATE_CODE_CONF.ON_SALE
)} )}
scrollTopBody={scrollTopBody} scrollTopBody={scrollTopBody}
handleItemFocus={handleItemFocus}
/> />
)} )}
{hasTemplateCodeWithValue( {hasTemplateCodeWithValue(
@@ -308,6 +320,7 @@ export default function HomePanel({ isOnTop }) {
TEMPLATE_CODE_CONF.POPULAR_SHOW TEMPLATE_CODE_CONF.POPULAR_SHOW
)} )}
scrollTopBody={scrollTopBody} scrollTopBody={scrollTopBody}
handleItemFocus={handleItemFocus}
/> />
)} )}
{hasTemplateCodeWithValue( {hasTemplateCodeWithValue(
@@ -320,6 +333,7 @@ export default function HomePanel({ isOnTop }) {
TEMPLATE_CODE_CONF.BEST_SELLER TEMPLATE_CODE_CONF.BEST_SELLER
)} )}
scrollTopBody={scrollTopBody} scrollTopBody={scrollTopBody}
handleItemFocus={handleItemFocus}
/> />
)} )}
</div> </div>

View File

@@ -16,7 +16,7 @@ import TScroller from "../../../components/TScroller/TScroller";
import useScrollReset from "../../../hooks/useScrollReset"; import useScrollReset from "../../../hooks/useScrollReset";
import useScrollTo from "../../../hooks/useScrollTo"; import useScrollTo from "../../../hooks/useScrollTo";
import useScrollTopByDistance from "../../../hooks/useScrollTopByDistance"; import useScrollTopByDistance from "../../../hooks/useScrollTopByDistance";
import { panel_names } from "../../../utils/Config"; import { LOG_MENU, panel_names } from "../../../utils/Config";
import { $L, scaleW } from "../../../utils/helperMethods"; import { $L, scaleW } from "../../../utils/helperMethods";
import css from "../PopularShow/PopularShow.module.less"; import css from "../PopularShow/PopularShow.module.less";
@@ -26,34 +26,49 @@ const Container = SpotlightContainerDecorator(
"div" "div"
); );
const PopularShow = ({ homeChk = true, order, scrollTopBody, ...rest }) => { const PopularShow = ({
const dispatch = useDispatch(); homeChk = true,
const topInfos = useSelector((state) => state.main.top20ShowData.topInfos); order,
scrollTopBody,
const [drawChk, setDrawChk] = useState(false); handleItemFocus,
...rest
}) => {
const { getScrollTo, scrollLeft } = useScrollTo(); const { getScrollTo, scrollLeft } = useScrollTo();
const { handleScrollReset, handleStopScrolling } = useScrollReset( const { handleScrollReset, handleStopScrolling } = useScrollReset(
scrollLeft, scrollLeft,
true true
); );
const { scrollTopByDistance } = useScrollTopByDistance(); const { scrollTopByDistance } = useScrollTopByDistance();
const dispatch = useDispatch();
const { cursorVisible } = useSelector((state) => state.common.appStatus); const { cursorVisible } = useSelector((state) => state.common.appStatus);
const topInfos = useSelector((state) => state.main.top20ShowData.topInfos);
const [drawChk, setDrawChk] = useState(false);
const orderStyle = useMemo(() => ({ order: order }), [order]);
useEffect(() => { useEffect(() => {
setDrawChk(true); setDrawChk(true);
}, [topInfos]); }, [topInfos]);
const handleCardClick = useCallback((patnrId, showId, catCd, showUrl) => { const handleCardClick = useCallback(
dispatch( (patnrId, showId, catCd, showUrl) => () => {
startVideoPlayer({ dispatch(
showId, startVideoPlayer({
patnrId, showId,
shptmBanrTpNm: "VOD", patnrId,
lgCatCd: catCd, shptmBanrTpNm: "VOD",
modal: false, lgCatCd: catCd,
showUrl: showUrl, modal: false,
}) showUrl: showUrl,
); })
}); );
},
[dispatch]
);
const handleMoreCardClick = useCallback(() => { const handleMoreCardClick = useCallback(() => {
dispatch( dispatch(
@@ -65,14 +80,20 @@ const PopularShow = ({ homeChk = true, order, scrollTopBody, ...rest }) => {
) )
); );
}); });
const handleBlur = useCallback((itemIndex) => {
if (itemIndex === 0) { const handleBlur = useCallback(
handleStopScrolling(); (itemIndex) => () => {
} if (itemIndex === 0) {
}, []); handleStopScrolling();
}
},
[handleStopScrolling]
);
const handleFocus = useCallback( const handleFocus = useCallback(
(itemIndex) => { (itemIndex) => () => {
_handleItemFocus();
if (itemIndex === 0) { if (itemIndex === 0) {
handleScrollReset(); handleScrollReset();
} }
@@ -88,9 +109,15 @@ const PopularShow = ({ homeChk = true, order, scrollTopBody, ...rest }) => {
36 36
); );
}, },
[cursorVisible] [
cursorVisible,
_handleItemFocus,
handleScrollReset,
scrollTopBody,
scrollTopByDistance,
]
); );
const orderStyle = useMemo(() => ({ order: order }), [order]);
const handleScrollRight = (e) => { const handleScrollRight = (e) => {
const container = e.currentTarget?.parentNode; const container = e.currentTarget?.parentNode;
const x = container.scrollWidth - container.clientWidth + 60; const x = container.scrollWidth - container.clientWidth + 60;
@@ -99,6 +126,13 @@ const PopularShow = ({ homeChk = true, order, scrollTopBody, ...rest }) => {
scrollLeft({ x, animate: true }); scrollLeft({ x, animate: true });
}); });
}; };
const _handleItemFocus = useCallback(() => {
if (handleItemFocus) {
handleItemFocus(LOG_MENU.HOME_POPULAR_SHOWS);
}
}, [handleItemFocus]);
return ( return (
<Container className={css.popularShow} style={orderStyle}> <Container className={css.popularShow} style={orderStyle}>
<SectionTitle <SectionTitle
@@ -149,11 +183,9 @@ const PopularShow = ({ homeChk = true, order, scrollTopBody, ...rest }) => {
logo={patncLogoPath} logo={patncLogoPath}
catNm={catNm} catNm={catNm}
productId={showId} productId={showId}
onFocus={() => handleFocus(itemIndex)} onFocus={handleFocus(itemIndex)}
onBlur={() => handleBlur(itemIndex)} onBlur={handleBlur(itemIndex)}
onClick={() => onClick={handleCardClick(patnrId, showId, catCd, showUrl)}
handleCardClick(patnrId, showId, catCd, showUrl)
}
/> />
); );
} }
@@ -164,6 +196,7 @@ const PopularShow = ({ homeChk = true, order, scrollTopBody, ...rest }) => {
<SpottableComponent <SpottableComponent
className={css.displayBox} className={css.displayBox}
onClick={handleMoreCardClick} onClick={handleMoreCardClick}
onFocus={_handleItemFocus}
spotlightId={"home-popularshow-more-btn"} spotlightId={"home-popularshow-more-btn"}
></SpottableComponent> ></SpottableComponent>
</div> </div>

View File

@@ -21,14 +21,20 @@ export default function CategoryNav({
currentCategoryCode, currentCategoryCode,
onCategoryNavClick, onCategoryNavClick,
scrollTopBody, scrollTopBody,
handleItemFocus,
...rest ...rest
}) { }) {
const { cursorVisible } = useSelector((state) => state.common.appStatus); const { cursorVisible } = useSelector((state) => state.common.appStatus);
const { scrollLeft } = useScrollTo(); const { scrollLeft } = useScrollTo();
const { handleScrollReset } = useScrollReset(scrollLeft, true); const { handleScrollReset } = useScrollReset(scrollLeft, true);
const { scrollTopByDistance } = useScrollTopByDistance(); const { scrollTopByDistance } = useScrollTopByDistance();
const handleFocus = useCallback( const handleFocus = useCallback(
(index) => { (index) => () => {
if (handleItemFocus) {
handleItemFocus();
}
if (index === 0) { if (index === 0) {
handleScrollReset(); handleScrollReset();
} }
@@ -44,7 +50,13 @@ export default function CategoryNav({
36 36
); );
}, },
[cursorVisible] [
cursorVisible,
handleItemFocus,
handleScrollReset,
scrollTopBody,
scrollTopByDistance,
]
); );
const renderItem = useCallback( const renderItem = useCallback(
@@ -55,12 +67,12 @@ export default function CategoryNav({
currentCategoryCode={currentCategoryCode} currentCategoryCode={currentCategoryCode}
onCategoryNavClick={onCategoryNavClick} onCategoryNavClick={onCategoryNavClick}
index={index} index={index}
onFocus={() => handleFocus(index)} onFocus={handleFocus(index)}
{...rest} {...rest}
/> />
); );
}, },
[categoryInfos, currentCategoryCode, onCategoryNavClick] [categoryInfos, currentCategoryCode, onCategoryNavClick, handleFocus]
); );
return ( return (

View File

@@ -21,7 +21,7 @@ import TScroller from "../../../components/TScroller/TScroller";
import useScrollReset from "../../../hooks/useScrollReset"; import useScrollReset from "../../../hooks/useScrollReset";
import useScrollTo from "../../../hooks/useScrollTo"; import useScrollTo from "../../../hooks/useScrollTo";
import useScrollTopByDistance from "../../../hooks/useScrollTopByDistance"; import useScrollTopByDistance from "../../../hooks/useScrollTopByDistance";
import { panel_names } from "../../../utils/Config"; import { LOG_MENU, panel_names } from "../../../utils/Config";
import { scaleW } from "../../../utils/helperMethods"; import { scaleW } from "../../../utils/helperMethods";
import CategoryNav from "../../HomePanel/SubCategory/CategoryNav/CategoryNav"; import CategoryNav from "../../HomePanel/SubCategory/CategoryNav/CategoryNav";
import css from "../../HomePanel/SubCategory/SubCategory.module.less"; import css from "../../HomePanel/SubCategory/SubCategory.module.less";
@@ -40,7 +40,7 @@ const ContainerBasic = SpotlightContainerDecorator(
"div" "div"
); );
const SubCategory = ({ order, scrollTopBody, catCd }) => { const SubCategory = ({ order, scrollTopBody, catCd, handleItemFocus }) => {
const dispatch = useDispatch(); const dispatch = useDispatch();
const categoryInfos = useSelector( const categoryInfos = useSelector(
(state) => state.onSale.onSaleData?.data.categoryInfos (state) => state.onSale.onSaleData?.data.categoryInfos
@@ -163,6 +163,8 @@ const SubCategory = ({ order, scrollTopBody, catCd }) => {
const handleFocus = useCallback( const handleFocus = useCallback(
(itemIndex) => { (itemIndex) => {
_handleItemFocus();
if (itemIndex === 0) { if (itemIndex === 0) {
handleScrollReset(); handleScrollReset();
} }
@@ -178,7 +180,13 @@ const SubCategory = ({ order, scrollTopBody, catCd }) => {
36 36
); );
}, },
[cursorVisible] [
cursorVisible,
_handleItemFocus,
handleScrollReset,
scrollTopBody,
scrollTopByDistance,
]
); );
const orderStyle = useMemo(() => ({ order: order }), [order]); const orderStyle = useMemo(() => ({ order: order }), [order]);
@@ -193,6 +201,12 @@ const SubCategory = ({ order, scrollTopBody, catCd }) => {
}); });
}; };
const _handleItemFocus = useCallback(() => {
if (handleItemFocus) {
handleItemFocus(LOG_MENU.HOME_CATEGORY);
}
}, [handleItemFocus]);
return ( return (
<Container style={orderStyle}> <Container style={orderStyle}>
<ContainerBasic> <ContainerBasic>
@@ -203,6 +217,7 @@ const SubCategory = ({ order, scrollTopBody, catCd }) => {
type="home" type="home"
scrollTopBody={scrollTopBody} scrollTopBody={scrollTopBody}
data-title-index="subCategoryNav" data-title-index="subCategoryNav"
handleItemFocus={_handleItemFocus}
/> />
</ContainerBasic> </ContainerBasic>
<ContainerBasic> <ContainerBasic>
@@ -251,6 +266,7 @@ const SubCategory = ({ order, scrollTopBody, catCd }) => {
spotlightId={"home-cate-more-btn"} spotlightId={"home-cate-more-btn"}
data-catcd-num={currentLgCatCd} data-catcd-num={currentLgCatCd}
onClick={handleMoreCardClick} onClick={handleMoreCardClick}
onFocus={_handleItemFocus}
></SpottableComponent> ></SpottableComponent>
</div> </div>
)} )}