[Log] IF-LGSP-LOG-004, 2ndLayer 이력 반영 (logic 수정 필요)

This commit is contained in:
younghoon100.park
2024-06-11 18:02:44 +09:00
parent 8a517e3cad
commit 27949586cd
4 changed files with 286 additions and 215 deletions

View File

@@ -8,7 +8,6 @@ import ThemeDecorator from "@enact/sandstone/ThemeDecorator";
import Spotlight from "@enact/spotlight";
import appinfo from "../../webos-meta/appinfo.json";
import { types } from "../actions/actionTypes";
import {
changeAppStatus,
getDeviceId,
@@ -26,6 +25,7 @@ import {
import { pushPanel } from "../actions/panelActions";
import { countryCode, ricCode } from "../api/apiConfig";
import TPopUp from "../components/TPopUp/TPopUp";
import useLogService from "../hooks/useLogService";
import usePrevious from "../hooks/usePrevious";
import { checkValidCountry } from "../lunaSend/common";
import { lunaTest } from "../lunaSend/lunaTest";
@@ -33,7 +33,7 @@ import * as Config from "../utils/Config";
import { $L, clearLaunchParams, getLaunchParams } from "../utils/helperMethods";
import MainView from "../views/MainView/MainView";
import css from "./App.module.less";
import { getMenuByLinkTpCd, handleDeepLink } from "./deepLinkHandler";
import { handleDeepLink } from "./deepLinkHandler";
let foreGroundChangeTimer = null;
@@ -57,6 +57,7 @@ const disableConsole = () => {
console.info = function () {};
};
function AppBase(props) {
const { sendLogSecondLayer } = useLogService();
const dispatch = useDispatch();
const panels = useSelector((state) => state.panels.panels);
const [isValidCountry, setIsValidCountry] = useState(false);
@@ -102,7 +103,6 @@ function AppBase(props) {
})
);
}
dispatch(getHomeMenu());
dispatch(getMyRecommandedKeyword());
dispatch(getMyUpcomingAlertShow());
@@ -116,19 +116,16 @@ function AppBase(props) {
launchParams
);
let linkTpCd;
if (launchParams?.contentTarget) {
//todo deeplink
linkTpCd = launchParams.contentTarget.split("_")[1];
dispatch(handleDeepLink(launchParams.contentTarget));
}
// if (launchParams?.contentTarget) {
// dispatch(
// handleDeepLink(launchParams?.contentTarget, sendLogSecondLayer)
// );
// }
// pyh todo, edit
dispatch({
type: types.SET_GNB_MENU,
payload: linkTpCd ? getMenuByLinkTpCd(linkTpCd) : Config.LOG_MENU.APP,
});
dispatch(
handleDeepLink(launchParams?.contentTarget, sendLogSecondLayer)
);
clearLaunchParams();
// loading 임시 주석 pjh

View File

@@ -1,8 +1,10 @@
import { pushPanel } from "../actions/panelActions";
import { LOG_MENU, panel_names } from "../utils/Config";
import { LOG_MENU, LOG_TP_NO, panel_names } from "../utils/Config";
export const getMenuByLinkTpCd = (linkTpCd) => {
switch (linkTpCd) {
case "1000":
return LOG_MENU.APP;
case "2000":
return LOG_MENU.HOME_BANNER_1;
case "2001":
@@ -36,223 +38,289 @@ export const getMenuByLinkTpCd = (linkTpCd) => {
}
};
export const getMenuByTargetContent = (contentTarget) => {
if (!contentTarget) {
return LOG_MENU.HOME_TOP;
}
const tokken = contentTarget.split("_");
const type = tokken[3];
if (type === "MT") {
return LOG_MENU.HOME_TOP;
} else if (type === "PD") {
const patnrId = tokken[4];
return patnrId === "11"
? LOG_MENU.DETAIL_PAGE_BILLING_PRODUCT_DETAIL
: LOG_MENU.DETAIL_PAGE_PRODUCT_DETAIL;
} else if (type === "LS" || type === "VS") {
return LOG_MENU.FULL_SHOP_NOW;
} else if (type === "TD" || type === "HD") {
return LOG_MENU.DETAIL_PAGE_TRAVEL_THEME_DETAIL;
} else if (type === "HP") {
return LOG_MENU.HOT_PICKS;
} else if (type === "WE") {
return "Temp, Welcome Event"; // pyh todo, menu 문의
} else if (type === "OS") {
return LOG_MENU.ON_SALE;
} else if (type === "BS") {
return LOG_MENU.TRENDING_NOW_BEST_SELLER;
} else if (type === "PS") {
return LOG_MENU.TRENDING_NOW_POPULAR_SHOWS;
} else if (type === "SC") {
const tabType = tokken[6];
return tabType.toLowerCase() === "show"
? LOG_MENU.CATEGORY_SHOWS
: LOG_MENU.CATEGORY_ITEM;
} else if (type === "PB") {
return LOG_MENU.FEATURED_BRANDS_QUICK_MENU;
}
return null;
};
//V2_진입경로코드_진입경로명_MT_노출순번
export const handleDeepLink = (contentTarget) => (dispatch, getState) => {
const tokens = contentTarget.split("_");
if (tokens[0] === "V2" || tokens[0] === "V3") {
const linkTpCd = tokens[1]; // 진입경로코드
const linkTpNm = tokens[2]; // 진입경로명
const type = tokens[3]; // 링크 타입.
export const handleDeepLink =
(contentTarget, callback) => (dispatch, getState) => {
let linkTpCd; // 진입경로코드
let linkTpNm; // 진입경로
let type; // 링크 타입
let patnrId; // 파트너아이디
let prdtId; // 상품아이디
let curationId; // 큐레이션아이디
let showId; // 방송아이디
let chanId; // 채널아이디
let exposureOrder; // 노출순번
let expsOrd; // 노출순번
let grNumber; // 그룹번호
let evntId; // 이벤트아이디
let lgCatCd; // LG카테고리Code
let lgCatNm; // 서브카테고리명
let tabType; // 카테고리 탭명
let lnkCurationId; // 큐래이션 아이디
let panelName = "";
let panelInfo = {};
if (contentTarget === null || contentTarget === undefined) {
linkTpCd = "1000";
} else {
const tokens = contentTarget.split("_");
switch (type) {
case "MT":
// "MT": Main TOP
// V3_진입경로코드_진입경로명_MT_노출순번
panelName = panel_names.HOME_PANEL;
break;
case "PD":
// "PD": Product Detail
// V3_진입경로코드_진입경로명_PD_파트너아이디_상품아이디_노출순번_큐레이션아이디
patnrId = tokens[4]; // 파트너아이디
prdtId = tokens[5]; // 상품아이디
exposureOrder = tokens[6]; // 노출순번
curationId = tokens[7]; // 큐레이션아이디
if (tokens[0] === "V2" || tokens[0] === "V3") {
linkTpCd = tokens[1];
linkTpNm = tokens[2];
type = tokens[3];
panelName = panel_names.DETAIL_PANEL;
panelInfo = {
patnrId: patnrId,
prdtId: prdtId,
// exposureOrder: exposureOrder,
};
break;
case "LS":
// "LS": Live Show
// V3_진입경로코드_진입경로명_LS_파트너아이디_채널아이디_노출순번_큐레이션아이디
patnrId = tokens[4]; // 파트너아이디
chanId = tokens[5]; // 채널아이디
exposureOrder = tokens[6]; // 노출순번
curationId = tokens[7]; // 큐레이션아이디
let panelName = "";
let panelInfo = {};
panelName = panel_names.PLAYER_PANEL;
panelInfo = {
patnrId: patnrId,
chanId: chanId,
shptmBanrTpNm: "LIVE",
// exposureOrder: exposureOrder,
};
break;
case "VS":
// "VS": VOD Show
// V3_진입경로코드_진입경로명_VS_파트너아이디_방송아이디_노출순번_큐레이션아이디
patnrId = tokens[4]; // 파트너아이디
showId = tokens[5]; // 방송아이디
exposureOrder = tokens[6]; // 노출순번
curationId = tokens[7]; // 큐레이션아이디
switch (type) {
case "MT":
// "MT": Main TOP
// V3_진입경로코드_진입경로명_MT_노출순번
panelName = panel_names.HOME_PANEL;
break;
panelName = panel_names.PLAYER_PANEL;
panelInfo = {
patnrId: patnrId,
showId: showId,
shptmBanrTpNm: "VOD",
// exposureOrder: exposureOrder,
};
break;
case "TD":
// "TD": Theme Detail
// V3_진입경로코드_진입경로명_TD_파트너아이디_큐레이션아이디_상품아이디_노출순번_그룹번호
// 상품아이디 (M): 테마상세 진입시 상품을 포커싱하기 위함
// 노출순번 (O) : 상품아이디+그룹번호가 설정된 경우 필수 (없을시 "0" 설정)
// 그룹번호 (O) : TCHH 유형만 적용
patnrId = tokens[4]; // 파트너아이디
curationId = tokens[5]; // 큐레이션아이디\
prdtId = tokens[6]; // 상품아이디
exposureOrder = tokens[7]; // 노출순번
grNumber = tokens[8]; // 그룹번호
case "PD":
// "PD": Product Detail
// V3_진입경로코드_진입경로명_PD_파트너아이디_상품아이디_노출순번_큐레이션아이디
patnrId = tokens[4]; // 파트너아이디
prdtId = tokens[5]; // 상품아이디
expsOrd = tokens[6]; // 노출순번
curationId = tokens[7]; // 큐레이션아이디
panelName = panel_names.DETAIL_PANEL;
panelInfo = {
patnrId: patnrId,
prdtId: prdtId,
// expsOrd: expsOrd,
};
break;
panelName = panel_names.DETAIL_PANEL;
panelInfo = {
patnrId: patnrId,
curationId: curationId,
themePrdtId: prdtId, // 포커스 아이디
prdtId: prdtId, // 데이터 조회
grNumber: grNumber,
type: "theme",
// exposureOrder: exposureOrder,
};
break;
case "HD":
// "HD": Hotel Detail
// V3_진입경로코드_진입경로명_HD_파트너아이디_큐레이션아이디_노출순번
patnrId = tokens[4]; // 파트너아이디
curationId = tokens[5]; // 큐레이션아이디
exposureOrder = tokens[6]; // 노출순번
case "LS":
// "LS": Live Show
// V3_진입경로코드_진입경로명_LS_파트너아이디_채널아이디_노출순번_큐레이션아이디
patnrId = tokens[4]; // 파트너아이디
chanId = tokens[5]; // 채널아이디
expsOrd = tokens[6]; // 노출순번
curationId = tokens[7]; // 큐레이션아이디
panelName = panel_names.PLAYER_PANEL;
panelInfo = {
patnrId: patnrId,
chanId: chanId,
shptmBanrTpNm: "LIVE",
// expsOrd: expsOrd,
};
break;
panelName = panel_names.DETAIL_PANEL;
panelInfo = {
patnrId: patnrId,
curationId: curationId,
type: "hotel",
// exposureOrder: exposureOrder,
};
break;
case "HP":
// "HP": Hot Picks
// V3_진입경로코드_진입경로명_HP_파트너아이디_큐레이션아이디_노출순번
patnrId = tokens[4]; // 파트너아이디
curationId = tokens[5]; // 큐레이션아이디
exposureOrder = tokens[6]; // 노출순번
case "VS":
// "VS": VOD Show
// V3_진입경로코드_진입경로명_VS_파트너아이디_방송아이디_노출순번_큐레이션아이디
patnrId = tokens[4]; // 파트너아이디
showId = tokens[5]; // 방송아이디
expsOrd = tokens[6]; // 노출순번
curationId = tokens[7]; // 큐레이션아이디
panelName = panel_names.PLAYER_PANEL;
panelInfo = {
patnrId: patnrId,
showId: showId,
shptmBanrTpNm: "VOD",
// expsOrd: expsOrd,
};
break;
panelName = panel_names.HOT_PICKS_PANEL;
panelInfo = {
patnrId: patnrId,
curationId: curationId,
// exposureOrder: exposureOrder,
};
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;
panelInfo = {
patnrId: patnrId,
curationId: curationId,
themePrdtId: prdtId, // 포커스 아이디
prdtId: prdtId, // 데이터 조회
grNumber: grNumber,
type: "theme",
// expsOrd: expsOrd,
};
break;
case "WE":
// "WE": Welcome Event
// V3_진입경로코드_진입경로명_WE_이벤트아이디
evntId = tokens[4]; // 이벤트아이디
case "HD":
// "HD": Hotel Detail
// V3_진입경로코드_진입경로명_HD_파트너아이디_큐레이션아이디_노출순번
patnrId = tokens[4]; // 파트너아이디
curationId = tokens[5]; // 큐레이션아이디
expsOrd = tokens[6]; // 노출순번
panelName = panel_names.DETAIL_PANEL;
panelInfo = {
patnrId: patnrId,
curationId: curationId,
type: "hotel",
// expsOrd: expsOrd,
};
break;
panelName = panel_names.WELCOME_EVENT_PANEL;
panelInfo = {
evntId: evntId,
};
break;
case "OS":
// "OS": On Sale
// V3_진입경로코드_진입경로명_OS_LG카테고리Code_서브카테고리명
lgCatCd = tokens[4]; // LG카테고리Code
lgCatNm = tokens[5]; // 서브카테고리명
case "HP":
// "HP": Hot Picks
// V3_진입경로코드_진입경로명_HP_파트너아이디_큐레이션아이디_노출순번
patnrId = tokens[4]; // 파트너아이디
curationId = tokens[5]; // 큐레이션아이디
expsOrd = tokens[6]; // 노출순번
panelName = panel_names.HOT_PICKS_PANEL;
panelInfo = {
patnrId: patnrId,
curationId: curationId,
// expsOrd: expsOrd,
};
break;
panelName = panel_names.ON_SALE_PANEL;
panelInfo = {
lgCatCd: lgCatCd,
lgCatNm: lgCatNm,
};
break;
case "BS":
// "BS": Best Sellers
// V3_진입경로코드_진입경로명_BS
panelName = panel_names.TRENDING_NOW_PANEL;
panelInfo = {
pageName: "BS",
};
break;
case "PS":
// "PS": Popular Shows
// V3_진입경로코드_진입경로명_PS_노출순번
panelName = panel_names.TRENDING_NOW_PANEL;
break;
case "WE":
// "WE": Welcome Event
// V3_진입경로코드_진입경로명_WE_이벤트아이디
evntId = tokens[4]; // 이벤트아이디
panelName = panel_names.WELCOME_EVENT_PANEL;
panelInfo = {
evntId: evntId,
};
break;
case "SC":
// "SC": Sub Category
// V3_진입경로코드_진입경로명_SC_LG카테고리Code_서브카테고리명_컨텐츠타입
// * 컨텐츠 타입 : Show / Item
lgCatCd = tokens[4]; // LG카테고리Code
lgCatNm = tokens[5]; // 서브카테고리명
tabType = tokens[6].toLowerCase(); // 컨텐츠타입
case "OS":
// "OS": On Sale
// V3_진입경로코드_진입경로명_OS_LG카테고리Code_서브카테고리명
lgCatCd = tokens[4]; // LG카테고리Code
lgCatNm = tokens[5]; // 서브카테고리
panelName = panel_names.ON_SALE_PANEL;
panelInfo = {
lgCatCd: lgCatCd,
lgCatNm: lgCatNm,
};
break;
panelName = panel_names.CATEGORY_PANEL;
panelInfo = {
lgCatCd: lgCatCd,
lgCatNm: lgCatNm,
tab: tabType === "show" ? 0 : 1,
};
case "BS":
// "BS": Best Sellers
// V3_진입경로코드_진입경로명_BS
panelName = panel_names.TRENDING_NOW_PANEL;
panelInfo = {
pageName: "BS",
};
break;
break;
case "FB":
// "FB": Featured Brands
// V3_진입경로코드_진입경로명_FB_파트너아이디_노출순번
patnrId = tokens[4]; // 파트너아이디
case "PS":
// "PS": Popular Shows
// V3_진입경로코드_진입경로명_PS_노출순번
panelName = panel_names.TRENDING_NOW_PANEL;
break;
panelName = panel_names.FEATURED_BRANDS_PANEL;
panelInfo = {
patnrId: patnrId,
};
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;
panelInfo = {
lgCatCd: lgCatCd,
lgCatNm: lgCatNm,
tab: tabType === "show" ? 0 : 1,
};
break;
case "TC":
patnrId = tokens[4]; // 파트너아이디
case "FB":
// "FB": Featured Brands
// V3_진입경로코드_진입경로명_FB_파트너아이디_노출순번
patnrId = tokens[4]; // 파트너아이디
panelName = panel_names.FEATURED_BRANDS_PANEL;
panelInfo = {
patnrId: patnrId,
};
break;
panelName = panel_names.THEME_CURATION_PANEL;
panelInfo = {
lnkCurationId: lnkCurationId,
};
break;
case "TC":
patnrId = tokens[4]; // 파트너아이디
panelName = panel_names.THEME_CURATION_PANEL;
panelInfo = {
lnkCurationId: curationId,
};
break;
}
if (panelName) {
console.log("handleDeepLink - panelName", panelName, panelInfo);
dispatch(
pushPanel({
name: panelName,
panelInfo: { ...panelInfo, linkTpCd },
})
);
}
} else {
console.log("handleDeepLink - no target");
}
}
if (panelName) {
console.log("handleDeepLink - panelName", panelName, panelInfo);
if (callback) {
const params = {
curationId: curationId ?? "",
curationNm: "",
entryMenu: getMenuByLinkTpCd(linkTpCd),
expsOrd: expsOrd ?? "0",
lgCatCd: lgCatCd ?? "",
lgCatNm: lgCatNm ?? "",
linkTpCd: linkTpCd,
logTpNo: LOG_TP_NO.SECOND_LAYER,
nowMenu: getMenuByTargetContent(contentTarget),
patncNm: "",
patnrId: patnrId ?? "",
prdtId: prdtId ?? "",
prdtNm: "",
showId: showId ?? "",
showNm: "",
};
dispatch(
pushPanel({
name: panelName,
panelInfo: { ...panelInfo, linkTpCd },
})
);
// todo deeplink log
callback(params);
}
}
//
else {
console.log("handleDeepLink - no target");
}
};
};

View File

@@ -27,6 +27,10 @@ export const getUrlByLogTpNo = (logTpNo) => {
case LOG_TP_NO.CURATION.CATEGORY:
return URLS.LOG_CURATION;
// IF-LGSP-LOG-004 / 2ndLayer 이력
case LOG_TP_NO.SECOND_LAYER:
return URLS.LOG_SECOND_LAYER;
// IF-LGSP-LOG-005 / GNB 클릭 이력
case LOG_TP_NO.GNB:
return URLS.LOG_GNB;
@@ -113,11 +117,11 @@ export const postLog = (params) => (dispatch, getState) => {
const { logTpNo } = params;
const onSuccess = (response) => {
// console.log(
// `%c Log ---------- postLog onSuccess logTpNo ${logTpNo} ----------`,
// "background: steelblue; color: white",
// JSON.parse(response.config.data)
// );
console.log(
`%c Log ---------- postLog onSuccess logTpNo ${logTpNo} ----------`,
"background: steelblue; color: white",
JSON.parse(response.config.data)
);
};
const onFail = (error) => {

View File

@@ -169,15 +169,17 @@ export default function useLogService() {
*/
const sendLogSecondLayer = useCallback(
(params) => {
const newParams = {
...params,
// entryMenu: '',
// nowMenu: '',
};
const { entryMenu } = params;
dispatch(postLog(newParams));
if (!entryMenu) {
console.error("sendLogSecondLayer invalid params", params);
return;
}
dispatch({ type: types.SET_GNB_MENU, payload: entryMenu });
dispatch(postLog(params));
},
[dispatch, entryMenuRef, nowMenuRef]
[dispatch]
);
/**