Files
shoptime/com.twin.app.shoptime/src/App/deepLinkHandler.js

286 lines
9.5 KiB
JavaScript

import { useDispatch } from "react-redux";
import { updateHomeInfo } from "../actions/homeActions";
import { pushPanel } from "../actions/panelActions";
import {
LOG_CONTEXT_NAME,
LOG_MENU,
LOG_MESSAGE_ID,
panel_names,
} from "../utils/Config";
import { SpotlightIds } from "../utils/SpotlightIds";
import { sendLogTotalRecommend } from "../actions/logActions";
//V2_진입경로코드_진입경로명_MT_노출순번
export const handleDeepLink = (contentTarget) => (dispatch, getState) => {
console.log("[handleDeepLink] ~ contentTarget: ", contentTarget);
let linkTpCd; // 진입경로코드
let linkTpNm; // 진입경로명
let type; // 링크 타입
let patnrId; // 파트너아이디
let prdtId; // 상품아이디
let curationId; // 큐레이션아이디
let showId; // 방송아이디
let chanId; // 채널아이디
let expsOrd; // 노출순번
let grNumber; // 그룹번호
let evntId; // 이벤트아이디
let lgCatCd; // LG카테고리Code
let lgCatNm; // 서브카테고리명
let tabType; // 카테고리 탭명
if (contentTarget === null || contentTarget === undefined) {
linkTpCd = "1000";
linkTpNm = LOG_MENU.APP;
} else {
const tokens = contentTarget.split("_");
if (tokens[0] === "V2" || tokens[0] === "V3") {
linkTpCd = tokens[1];
linkTpNm = tokens[2];
type = tokens[3];
let panelName = "";
let deeplinkPanel = "";
let panelInfo = {};
if (tokens[0] === "V2") {
panelName = panel_names.HOME_PANEL;
return;
}
if (parseInt(linkTpCd) < 2000 || parseInt(linkTpCd) > 8999) {
linkTpCd = "9999";
linkTpNm = LOG_MENU.UNKNOWN;
}
switch (type) {
case "MT":
// "MT": Main TOP
// V3_진입경로코드_진입경로명_MT_노출순번
panelName = panel_names.HOME_PANEL;
deeplinkPanel = "Main TOP";
break;
case "PD":
// "PD": Product Detail
// V3_진입경로코드_진입경로명_PD_파트너아이디_상품아이디_노출순번_큐레이션아이디
patnrId = tokens[4]; // 파트너아이디
prdtId = tokens[5]; // 상품아이디
expsOrd = tokens[6]; // 노출순번
curationId = tokens[7]; // 큐레이션아이디
panelName = panel_names.DETAIL_PANEL;
deeplinkPanel = "Product Detaoil";
panelInfo = {
patnrId: patnrId,
prdtId: prdtId,
// expsOrd: expsOrd,
};
break;
case "LS":
// "LS": Live Show
// V3_진입경로코드_진입경로명_LS_파트너아이디_채널아이디_노출순번_큐레이션아이디
patnrId = tokens[4]; // 파트너아이디
chanId = tokens[5]; // 채널아이디
expsOrd = tokens[6]; // 노출순번
curationId = tokens[7]; // 큐레이션아이디
panelName = panel_names.PLAYER_PANEL;
deeplinkPanel = "Live Show";
panelInfo = {
patnrId: patnrId,
chanId: chanId,
shptmBanrTpNm: "LIVE",
// expsOrd: expsOrd,
};
break;
case "VS":
// "VS": VOD Show
// V3_진입경로코드_진입경로명_VS_파트너아이디_방송아이디_노출순번_큐레이션아이디
patnrId = tokens[4]; // 파트너아이디
showId = tokens[5]; // 방송아이디
expsOrd = tokens[6]; // 노출순번
curationId = tokens[7]; // 큐레이션아이디
panelName = panel_names.PLAYER_PANEL;
deeplinkPanel = "VOD Show";
panelInfo = {
patnrId: patnrId,
showId: showId,
shptmBanrTpNm: "VOD",
// expsOrd: expsOrd,
};
break;
case "TD":
// "TD": Theme Detail
// V3_진입경로코드_진입경로명_TD_파트너아이디_큐레이션아이디_상품아이디_노출순번_그룹번호
// 상품아이디 (M): 테마상세 진입시 상품을 포커싱하기 위함
// 노출순번 (O) : 상품아이디+그룹번호가 설정된 경우 필수 (없을시 "0" 설정)
// 그룹번호 (O) : TCHH 유형만 적용
patnrId = tokens[4]; // 파트너아이디
curationId = tokens[5]; // 큐레이션아이디\
prdtId = tokens[6]; // 상품아이디
expsOrd = tokens[7]; // 노출순번
grNumber = tokens[8]; // 그룹번호
panelName = panel_names.DETAIL_PANEL;
deeplinkPanel = "Theme Detail";
panelInfo = {
patnrId: patnrId,
curationId: curationId,
themePrdtId: prdtId, // 포커스 아이디
prdtId: prdtId, // 데이터 조회
grNumber: grNumber,
type: "theme",
// expsOrd: expsOrd,
};
break;
case "HD":
// "HD": Hotel Detail
// V3_진입경로코드_진입경로명_HD_파트너아이디_큐레이션아이디_노출순번
patnrId = tokens[4]; // 파트너아이디
curationId = tokens[5]; // 큐레이션아이디
expsOrd = tokens[6]; // 노출순번
panelName = panel_names.DETAIL_PANEL;
deeplinkPanel = "Hotel Detail";
panelInfo = {
patnrId: patnrId,
curationId: curationId,
type: "hotel",
// expsOrd: expsOrd,
};
break;
case "HP":
// "HP": Hot Picks
// V3_진입경로코드_진입경로명_HP_파트너아이디_큐레이션아이디_노출순번
patnrId = tokens[4]; // 파트너아이디
curationId = tokens[5]; // 큐레이션아이디
expsOrd = tokens[6]; // 노출순번
panelName = panel_names.HOT_PICKS_PANEL;
deeplinkPanel = "Hot Picks";
panelInfo = {
patnrId: patnrId,
curationId: curationId,
// expsOrd: expsOrd,
};
break;
case "WE":
// "WE": Welcome Event
// V3_진입경로코드_진입경로명_WE_이벤트아이디
evntId = tokens[4]; // 이벤트아이디
panelName = panel_names.WELCOME_EVENT_PANEL;
deeplinkPanel = "Welcome Event";
panelInfo = {
evntId: evntId,
};
break;
case "OS":
// "OS": On Sale
// V3_진입경로코드_진입경로명_OS_LG카테고리Code_서브카테고리명
lgCatCd = tokens[4]; // LG카테고리Code
lgCatNm = tokens[5]; // 서브카테고리명
panelName = panel_names.ON_SALE_PANEL;
deeplinkPanel = "On Sale";
panelInfo = {
lgCatCd: lgCatCd,
lgCatNm: lgCatNm,
};
break;
case "BS":
// "BS": Best Sellers
// V3_진입경로코드_진입경로명_BS
panelName = panel_names.TRENDING_NOW_PANEL;
deeplinkPanel = "Best Sellers";
panelInfo = {
pageName: "BS",
focusedContainerId: SpotlightIds.TRENDING_NOW_BEST_SELLER,
};
break;
case "PS":
// "PS": Popular Shows
// V3_진입경로코드_진입경로명_PS_노출순번
panelName = panel_names.TRENDING_NOW_PANEL;
deeplinkPanel = "Popular Shows";
panelInfo = {
pageName: "PS",
focusedContainerId: SpotlightIds.TRENDING_NOW_POPULAR_SHOW,
};
break;
case "SC":
// "SC": Sub Category
// V3_진입경로코드_진입경로명_SC_LG카테고리Code_서브카테고리명_컨텐츠타입
// * 컨텐츠 타입 : Show / Item
lgCatCd = tokens[4]; // LG카테고리Code
lgCatNm = tokens[5]; // 서브카테고리명
tabType = tokens[6].toLowerCase(); // 컨텐츠타입
panelName = panel_names.CATEGORY_PANEL;
deeplinkPanel = "Sub Category";
panelInfo = {
lgCatCd: lgCatCd,
lgCatNm: lgCatNm,
tab: tabType === "cat00102" ? 0 : 1,
};
break;
case "FB":
// "FB": Featured Brands
// V3_진입경로코드_진입경로명_FB_파트너아이디_노출순번
patnrId = tokens[4]; // 파트너아이디
panelName = panel_names.FEATURED_BRANDS_PANEL;
deeplinkPanel = "Featured Brands";
panelInfo = {
patnrId: patnrId,
};
break;
case "TM":
curationId = tokens[4]; // 큐레이션 아이디
panelName = panel_names.THEME_CURATION_PANEL;
deeplinkPanel = "THEME MENU";
panelInfo = {
curationId: curationId,
};
break;
// case "SR":
// patnrId = tokens[4]; // 파트너 아이디
// panelName = panel_names.IMAGE_PANEL;
// panelInfo = {
// patnrId: patnrId,
// };
// break;
}
dispatch(
sendLogTotalRecommend({
contextName: LOG_CONTEXT_NAME.ENTRY,
messageId: LOG_MESSAGE_ID.ENTRY_INFO,
deeplink: deeplinkPanel,
curationId: curationId ? curationId : showId,
productId: prdtId,
})
);
if (panelName) {
const action =
panelName === panel_names.HOME_PANEL ? updateHomeInfo : pushPanel;
dispatch(
action({
name: panelName,
panelInfo: { ...panelInfo, linkTpCd },
})
);
}
}
}
};