featuredbrands
This commit is contained in:
@@ -174,6 +174,118 @@ export const postLog = (params) => (dispatch, getState) => {
|
||||
onFail
|
||||
);
|
||||
};
|
||||
/**
|
||||
* IG-LGSP-LOG-001 / Live 시청 이력
|
||||
*
|
||||
* (M) entryMenu 진입 메뉴
|
||||
*
|
||||
* (O) lgCatCd 카테고리 코드
|
||||
*
|
||||
* (O) lgCatNm 카테고리 네임
|
||||
*
|
||||
* (M) linkTpCd 링크 타입 코드
|
||||
*
|
||||
* (M) logTpNo 로그 타입 넘버
|
||||
*
|
||||
* (M) nowMenu 현재 메뉴
|
||||
*
|
||||
* (M) patncNm 파트너 네임
|
||||
*
|
||||
* (M) patnrId 파트너 아이디
|
||||
*
|
||||
* (M) showId 쇼 아이디
|
||||
*
|
||||
* (M) showNm 쇼 네임
|
||||
*
|
||||
* (O) vdoTpNm 영상 가로 세로 여부 ("Vertical" or "Horizontal")
|
||||
*
|
||||
* (M) watchEndDt 시청 종료 시간
|
||||
*
|
||||
* (M) watchStrtDt 시청 시작 시간
|
||||
*/
|
||||
export const sendLogLive = (params, callback) => (dispatch, getState) => {
|
||||
const { logTpNo, patncNm, patnrId, showId, showNm, watchStrtDt } = params;
|
||||
const {entryMenu, nowMenu} = getState().common.menu;
|
||||
if (
|
||||
!logTpNo ||
|
||||
!patncNm ||
|
||||
!patnrId ||
|
||||
!showId ||
|
||||
// !showNm || // pyh todo, state liveShowInfos, showNm: null
|
||||
!watchStrtDt
|
||||
) {
|
||||
console.error("sendLogLive invalid params", params);
|
||||
return;
|
||||
}
|
||||
|
||||
const newParams = {
|
||||
...params,
|
||||
entryMenu: params?.entryMenu ?? entryMenu,
|
||||
nowMenu: params?.nowMenu ?? nowMenu,
|
||||
watchEndDt: params?.watchEndDt ?? formatGMTString(new Date()),
|
||||
};
|
||||
|
||||
if (newParams.watchEndDt !== watchStrtDt) {
|
||||
dispatch(postLog(newParams));
|
||||
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
}
|
||||
};
|
||||
/**
|
||||
* IG-LGSP-LOG-002 / VOD 시청 이력
|
||||
*
|
||||
* (M) entryMenu 진입 메뉴
|
||||
*
|
||||
* (O) lgCatCd 카테고리 코드
|
||||
*
|
||||
* (O) lgCatNm 카테고리 이름
|
||||
*
|
||||
* (O) linkTpCd 딥 링크 타입
|
||||
*
|
||||
* (M) logTpNo 로그 타입 넘버
|
||||
*
|
||||
* (M) nowMenu 현재 메뉴
|
||||
*
|
||||
* (M) patncNm 파트너 이름
|
||||
*
|
||||
* (M) patnrId 파트너 아이디
|
||||
*
|
||||
* (M) showId 방송 아이디 (media case: prdtId)
|
||||
*
|
||||
* (M) showNm 방송 이름 (media case: prdtNm)
|
||||
*
|
||||
* (O) vdoTpNm 영상 가로 세로 여부 ("Vertical" or "Horizontal")
|
||||
*
|
||||
* (M) watchEndDt 시청 종료 시간
|
||||
*
|
||||
* (M) watchStrtDt 시청 시작 시간
|
||||
*/
|
||||
export const sendLogVOD = (params, callback) => (dispatch, getState) => {
|
||||
const { logTpNo, watchStrtDt } = params;
|
||||
const {entryMenu, nowMenu} = getState().common.menu;
|
||||
|
||||
if (!logTpNo || !watchStrtDt) {
|
||||
console.error("sendLogLive invalid params", params);
|
||||
return;
|
||||
}
|
||||
|
||||
const newParams = {
|
||||
...params,
|
||||
entryMenu: params?.entryMenu ?? entryMenu,
|
||||
nowMenu: params?.nowMenu ?? nowMenu,
|
||||
watchEndDt: params?.watchEndDt ?? formatGMTString(new Date()),
|
||||
};
|
||||
|
||||
if (newParams.watchEndDt !== watchStrtDt) {
|
||||
dispatch(postLog(newParams));
|
||||
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
}
|
||||
};
|
||||
/**
|
||||
* IF-LGSP-LOG-003 / Curations View 이력
|
||||
*
|
||||
@@ -205,8 +317,7 @@ export const postLog = (params) => (dispatch, getState) => {
|
||||
*/
|
||||
export const sendLogCuration = (params) => (dispatch, getState) => {
|
||||
const { logTpNo } = params;
|
||||
const entryMenu = getState().common.menu.entryMenu;
|
||||
const nowMenu = getState().common.menu.nowMenu;
|
||||
const {entryMenu, nowMenu} = getState().common.menu;
|
||||
if (!logTpNo) {
|
||||
console.error("sendLogCuration invalid params", params);
|
||||
return;
|
||||
@@ -230,7 +341,50 @@ export const sendLogCuration = (params) => (dispatch, getState) => {
|
||||
|
||||
dispatch(postLog(newParams));
|
||||
};
|
||||
/**
|
||||
* IF-LGSP-LOG-004 / 2ndLayer 이력
|
||||
*
|
||||
* (O) curationId 큐레이션 아이디
|
||||
*
|
||||
* (O) curationNm 큐레이션 이름
|
||||
*
|
||||
* (M) entryMenu 진입 메뉴
|
||||
*
|
||||
* (O) expsOrd 전시 순번
|
||||
*
|
||||
* (O) lgCatCd 카테고리 코드
|
||||
*
|
||||
* (O) lgCatNm 카테고리 이름
|
||||
*
|
||||
* (M) linkTpCd 딥 링크 코드
|
||||
*
|
||||
* (M) logTpNo 로그 타입 넘버
|
||||
*
|
||||
* (M) nowMenu 현재 메뉴
|
||||
*
|
||||
* (M) patncNm 파트너 이름
|
||||
*
|
||||
* (M) patnrId 파트너 아이디
|
||||
*
|
||||
* (O) prdtId 상품 아이디
|
||||
*
|
||||
* (O) prdtNm 상품 이름
|
||||
*
|
||||
* (O) showId 방송 아이디
|
||||
*
|
||||
* (O) showNm 방송 이름
|
||||
*/
|
||||
export const sendLogSecondLayer = (params) => (dispatch, getState) => {
|
||||
const { entryMenu } = params;
|
||||
|
||||
if (!entryMenu) {
|
||||
console.error("sendLogSecondLayer invalid params", params);
|
||||
return;
|
||||
}
|
||||
|
||||
dispatch({ type: types.SET_GNB_MENU, payload: entryMenu });
|
||||
dispatch(postLog(params));
|
||||
};
|
||||
/**
|
||||
* IF-LGSP-LOG-005 / GNB 클릭 이력
|
||||
*
|
||||
@@ -247,8 +401,7 @@ export const sendLogCuration = (params) => (dispatch, getState) => {
|
||||
* (M) outDt 진출 시간
|
||||
*/
|
||||
export const sendLogGNB = (menu) => (dispatch, getState) => {
|
||||
const nowMenu = getState().common.menu.nowMenu;
|
||||
const menuMovSno = getState().common.menu.menuMovSno;
|
||||
const {menuMovSno, nowMenu} = getState().common.menu;
|
||||
|
||||
if (!menu) {
|
||||
console.error("sendLogGNB invalid params", menu);
|
||||
@@ -274,3 +427,211 @@ export const sendLogGNB = (menu) => (dispatch, getState) => {
|
||||
dispatch({ type: types.SET_GNB_MENU, payload: menu });
|
||||
dispatch(postLog(newParams));
|
||||
}
|
||||
/**
|
||||
* IF-LGSP-LOG-006 / 상품 상세 이력
|
||||
*
|
||||
* (M) befPrice 할인 전 가격
|
||||
*
|
||||
* (O) curationId 큐레이션 아이디
|
||||
*
|
||||
* (O) curationNm 큐레이션 이름
|
||||
*
|
||||
* (M) entryMenu 진입 메뉴
|
||||
*
|
||||
* (O) expsOrd 노출 순번
|
||||
*
|
||||
* (M) inDt 진입 시간
|
||||
*
|
||||
* (M) lastPrice 할인 후 가격
|
||||
*
|
||||
* (M) lgCatCd 카테고리 코드
|
||||
*
|
||||
* (M) lgCatNm 카테고리 이름
|
||||
*
|
||||
* (O) linkTpCd 딥 링크 타입
|
||||
*
|
||||
* (M) logTpNo 로그 타입 넘버
|
||||
*
|
||||
* (M) nowMenu 현재 메뉴
|
||||
*
|
||||
* (M) outDt 진출 시간
|
||||
*
|
||||
* (M) patncNm 파트너 이름
|
||||
*
|
||||
* (M) patnrId 파트너 아이디
|
||||
*
|
||||
* (M) prdtId 상품 아이디
|
||||
*
|
||||
* (M) prdtNm 상품 이름
|
||||
*
|
||||
* (O) revwGrd 별점
|
||||
*
|
||||
* (M) rewdAplyFlag 리워드 적용 여부
|
||||
*
|
||||
* (M) tsvFlag TSV 여부
|
||||
*/
|
||||
export const sendLogProductDetail = (params) => (dispatch, getState) => {
|
||||
const { logTpNo } = params;
|
||||
const {entryMenu, nowMenu} = getState().common.menu;
|
||||
|
||||
const outDt =
|
||||
logTpNo === LOG_TP_NO.PRODUCT.PRODUCT_DETAIL_IMAGE
|
||||
? ""
|
||||
: formatGMTString(new Date());
|
||||
|
||||
const newParams = {
|
||||
...params,
|
||||
entryMenu: entryMenu,
|
||||
nowMenu: nowMenu,
|
||||
outDt,
|
||||
};
|
||||
|
||||
dispatch(postLog(newParams));
|
||||
}
|
||||
|
||||
/**
|
||||
* IF-LGSP-LOG-007 / Detail 상세 이력
|
||||
*
|
||||
* (O) curationId 큐레이션 아이디 (Theme의 경우 M, Hotel의 경우 O)
|
||||
*
|
||||
* (O) curationNm 큐레이션 이름 (Theme의 경우 M, Hotel의 경우 O)
|
||||
*
|
||||
* (M) entryMenu 진입 메뉴
|
||||
*
|
||||
* (M) inDt 진입 시간
|
||||
*
|
||||
* (O) linkTpCd 딥 링크 타입
|
||||
*
|
||||
* (M) logTpNo 로그 타입 넘버
|
||||
*
|
||||
* (M) nowMenu 현재 메뉴
|
||||
*
|
||||
* (M) outDt 진출 시간
|
||||
*
|
||||
* (M) patncNm 파트너 이름
|
||||
*
|
||||
* (M) patnrId 파트너 아이디
|
||||
*/
|
||||
export const sendLogDetail = (params) => (dispatch, getState) => {
|
||||
const { logTpNo, patncNm, patnrId } = params;
|
||||
const {entryMenu, nowMenu} = getState().common.menu;
|
||||
|
||||
if (!logTpNo || !patncNm || !patnrId) {
|
||||
console.error("sendLogDetail invalid params", params);
|
||||
return;
|
||||
}
|
||||
|
||||
const outDt =
|
||||
logTpNo === LOG_TP_NO.DETAIL.DETAIL_BUTTON_CLICK
|
||||
? ""
|
||||
: formatGMTString(new Date());
|
||||
|
||||
const newParams = {
|
||||
...params,
|
||||
entryMenu: entryMenu,
|
||||
nowMenu: nowMenu,
|
||||
outDt,
|
||||
};
|
||||
|
||||
dispatch(postLog(newParams));
|
||||
};
|
||||
|
||||
/**
|
||||
* IF-LGSP-LOG-008 / Shop by mobile 이력
|
||||
*
|
||||
* (M) befPrice 할인 전 가격
|
||||
*
|
||||
* (O) curationId 큐레이션 아이디
|
||||
*
|
||||
* (O) curationNm 큐레이션 이름
|
||||
*
|
||||
* (M) entryMenu 진입 메뉴
|
||||
*
|
||||
* (O) evntId 이벤트 아이디
|
||||
*
|
||||
* (O) evntNm 이벤트 이름
|
||||
*
|
||||
* (M) lastPrice 할인 후 가격
|
||||
*
|
||||
* (O) lgCatCd 카테고리 코드
|
||||
*
|
||||
* (O) lgCatNm 카테고리 이름
|
||||
*
|
||||
* (O) liveFlag 라이브 여부
|
||||
*
|
||||
* (M) logTpNo 로그 타입 넘버
|
||||
*
|
||||
* (M) mbphNoFlag 전화 번호 여부 (모바일 폰 넘버 플래그)
|
||||
*
|
||||
* (M) nowMenu 현재 메뉴
|
||||
*
|
||||
* (M) patncNm 파트너 이름
|
||||
*
|
||||
* (M) patnrId 파트너 아이디
|
||||
*
|
||||
* (O) prdtId 상품 아이디
|
||||
*
|
||||
* (O) prdtNm 상품 이름
|
||||
*
|
||||
* (O) revwGrd 별점 (리뷰 그레이드)
|
||||
*
|
||||
* (M) rewdAplyFlag 리워드 적용 여부
|
||||
*
|
||||
* (M) shopByMobileFlag 샵 바이 모바일 여부
|
||||
*
|
||||
* (M) shopTpNm 샵 바이 모바일 타입 이름
|
||||
*
|
||||
* (O) showId 방송 아이디
|
||||
*
|
||||
* (O) showNm 방송 이름
|
||||
*
|
||||
* (M) trmsAgrFlag 약관 동의 여부
|
||||
*
|
||||
* (M) tsvFlag TSV 여부
|
||||
*/
|
||||
export const sendLogShopByMobile = (params) => (dispatch, getState) => {
|
||||
const { logTpNo } = params;
|
||||
const {entryMenu, nowMenu} = getState().common.menu;
|
||||
|
||||
const newParams = {
|
||||
...params,
|
||||
entryMenu: entryMenu,
|
||||
logTpNo,
|
||||
nowMenu: nowMenu,
|
||||
};
|
||||
|
||||
dispatch(postLog(newParams));
|
||||
}
|
||||
|
||||
/**
|
||||
* IF-LGSP-LOG-009 / Partners 클릭 이력
|
||||
*
|
||||
* (M) entryMenu 진입 메뉴
|
||||
*
|
||||
* (M) logTpNo 로그 타입 넘버
|
||||
*
|
||||
* (M) nowMenu 현재 메뉴
|
||||
*
|
||||
* (M) patncNm 파트너 네임
|
||||
*
|
||||
* (M) patnrId 파트너 아이디
|
||||
*/
|
||||
export const sendLogPartners = (params) => (dispatch, getState) => {
|
||||
const { patncNm, patnrId } = params;
|
||||
const {entryMenu, nowMenu} = getState().common.menu;
|
||||
|
||||
if (!patncNm || !patnrId) {
|
||||
console.error("sendLogPartners invalid params", params);
|
||||
return;
|
||||
}
|
||||
|
||||
const newParams = {
|
||||
entryMenu: entryMenu,
|
||||
logTpNo: LOG_TP_NO.PARTNERS,
|
||||
nowMenu: nowMenu,
|
||||
patncNm,
|
||||
patnrId,
|
||||
};
|
||||
|
||||
dispatch(postLog(newParams));
|
||||
};
|
||||
@@ -56,6 +56,7 @@ import Series from "./Series/Series";
|
||||
import Showroom from "./Showroom/Showroom";
|
||||
import TodaysDeals from "./TodaysDeals/TodaysDeals";
|
||||
import UpComing from "./UpComing/UpComing";
|
||||
import { sendLogGNB, sendLogPartners } from "../../actions/logActions";
|
||||
|
||||
const STRING_CONF = {
|
||||
CANCEL: "CANCEL",
|
||||
@@ -174,13 +175,11 @@ const getMessageByPopupType = (type) => {
|
||||
}
|
||||
};
|
||||
|
||||
export default function FeaturedBrandsPanel({
|
||||
const FeaturedBrandsPanel = ({
|
||||
isOnTop,
|
||||
panelInfo,
|
||||
spotlightId,
|
||||
}) {
|
||||
const { sendLogGNB, sendLogPartners } = useLogService();
|
||||
|
||||
}) => {
|
||||
const dispatch = useDispatch();
|
||||
|
||||
const activePopup = useSelector((state) => state.common.popup.activePopup);
|
||||
@@ -494,16 +493,15 @@ export default function FeaturedBrandsPanel({
|
||||
|
||||
useEffect(() => {
|
||||
if (isInitialFocusOccurred && selectedPatnrId && selectedPatncNm) {
|
||||
sendLogPartners({
|
||||
dispatch(sendLogPartners({
|
||||
patncNm: selectedPatncNm,
|
||||
patnrId: selectedPatnrId,
|
||||
});
|
||||
}));
|
||||
}
|
||||
}, [
|
||||
isInitialFocusOccurred,
|
||||
selectedPatnrId,
|
||||
selectedPatncNm,
|
||||
sendLogPartners,
|
||||
selectedPatncNm
|
||||
]);
|
||||
|
||||
useEffect(() => {
|
||||
@@ -629,9 +627,9 @@ export default function FeaturedBrandsPanel({
|
||||
|
||||
const handleItemFocus = useCallback(
|
||||
(nowMenu) => {
|
||||
sendLogGNB(nowMenu);
|
||||
dispatch(sendLogGNB(nowMenu));
|
||||
},
|
||||
[sendLogGNB]
|
||||
[]
|
||||
);
|
||||
|
||||
const onFocusedContainerId = useCallback((containerId) => {
|
||||
@@ -899,3 +897,20 @@ export default function FeaturedBrandsPanel({
|
||||
</TPanel>
|
||||
);
|
||||
}
|
||||
const propsAreEqual = (prev, next) => {
|
||||
const keys = Object.keys(prev);
|
||||
const nextKeys = Object.keys(next);
|
||||
if(!next.isOnTop){ //ignore event on background
|
||||
return true;
|
||||
}
|
||||
if(keys.length !== nextKeys.length){
|
||||
return false;
|
||||
}
|
||||
for(let i=0; i<keys.length; i++){
|
||||
if(prev[keys[i]] !== next[keys[i]]){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
export default React.memo(FeaturedBrandsPanel, propsAreEqual);
|
||||
@@ -34,7 +34,6 @@ import TPanel from "../../components/TPanel/TPanel";
|
||||
import TPopUp from "../../components/TPopUp/TPopUp";
|
||||
import TVerticalPagenator from "../../components/TVerticalPagenator/TVerticalPagenator";
|
||||
import useDebugKey from "../../hooks/useDebugKey";
|
||||
import useLogService from "../../hooks/useLogService";
|
||||
import usePrevious from "../../hooks/usePrevious";
|
||||
import { ACTIVE_POPUP, LOG_MENU, panel_names } from "../../utils/Config";
|
||||
import { $L } from "../../utils/helperMethods";
|
||||
@@ -46,6 +45,7 @@ import css from "../HomePanel/HomePanel.module.less";
|
||||
import PopularShow from "../HomePanel/PopularShow/PopularShow";
|
||||
import SubCategory from "../HomePanel/SubCategory/SubCategory";
|
||||
import EventPopUpBanner from "./EventPopUpBanner/EventPopUpBanner";
|
||||
import { sendLogGNB } from "../../actions/logActions";
|
||||
|
||||
const TEMPLATE_CODE_CONF = {
|
||||
TOP: "DSP00101",
|
||||
@@ -58,8 +58,6 @@ const TEMPLATE_CODE_CONF = {
|
||||
export default function HomePanel({ isOnTop }) {
|
||||
const dispatch = useDispatch();
|
||||
|
||||
const { sendLogGNB } = useLogService();
|
||||
|
||||
useDebugKey({ isLandingPage: true });
|
||||
|
||||
const isGnbOpened = useSelector((state) => state.common.isGnbOpened);
|
||||
@@ -207,11 +205,11 @@ export default function HomePanel({ isOnTop }) {
|
||||
break;
|
||||
}
|
||||
if (nowMenu && nowMenu !== sendedNowMenuRef.current) {
|
||||
sendLogGNB(nowMenu);
|
||||
dispatch(sendLogGNB(nowMenu));
|
||||
sendedNowMenuRef.current = nowMenu;
|
||||
}
|
||||
},
|
||||
[pageSpotIds, sendLogGNB]
|
||||
[pageSpotIds]
|
||||
);
|
||||
|
||||
const handleItemFocus = useCallback(
|
||||
|
||||
Reference in New Issue
Block a user