From 64a18c7d7783e3a94b3c75871ae4a6e598577970 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EB=8F=99=EC=98=81?= Date: Thu, 15 Feb 2024 09:56:18 +0900 Subject: [PATCH] =?UTF-8?q?detail=20=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83?= =?UTF-8?q?=20=EC=9E=91=EC=97=85=20=EB=B0=8F=20=20indicator=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20TButton=20BackKey=20props=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/actions/actionTypes.js | 3 + .../src/actions/mainActions.js | 27 +++++++ .../src/actions/productActions.js | 58 +++++++++++++++ com.twin.app.shoptime/src/api/apiConfig.js | 23 +++--- .../src/components/TBody/TBody.jsx | 2 +- .../src/components/THeader/THeader.jsx | 7 +- .../components/THeader/THeader.module.less | 14 ++++ .../src/reducers/mainReducer.js | 6 ++ .../src/reducers/productReducer.js | 11 ++- com.twin.app.shoptime/src/utils/Config.js | 1 + .../src/views/DetailPanel/ItemDetail.jsx | 47 ++++++++++++ .../views/DetailPanel/ItemDetail.module.less | 24 +++++++ .../DetailPanel/components/Indicator.jsx | 72 +++++++++++++++++++ .../components/Indicator.module.less | 46 ++++++++++++ .../views/DetailPanel/layout/ItemImage.jsx | 32 +++++++++ .../DetailPanel/layout/ItemImage.module.less | 43 +++++++++++ .../views/DetailPanel/layout/OptionList.jsx | 10 +++ .../DetailPanel/layout/OptionList.module.less | 7 ++ 18 files changed, 419 insertions(+), 14 deletions(-) create mode 100644 com.twin.app.shoptime/src/views/DetailPanel/ItemDetail.jsx create mode 100644 com.twin.app.shoptime/src/views/DetailPanel/ItemDetail.module.less create mode 100644 com.twin.app.shoptime/src/views/DetailPanel/components/Indicator.jsx create mode 100644 com.twin.app.shoptime/src/views/DetailPanel/components/Indicator.module.less create mode 100644 com.twin.app.shoptime/src/views/DetailPanel/layout/ItemImage.jsx create mode 100644 com.twin.app.shoptime/src/views/DetailPanel/layout/ItemImage.module.less create mode 100644 com.twin.app.shoptime/src/views/DetailPanel/layout/OptionList.jsx create mode 100644 com.twin.app.shoptime/src/views/DetailPanel/layout/OptionList.module.less diff --git a/com.twin.app.shoptime/src/actions/actionTypes.js b/com.twin.app.shoptime/src/actions/actionTypes.js index a947d7da..e2627ae3 100644 --- a/com.twin.app.shoptime/src/actions/actionTypes.js +++ b/com.twin.app.shoptime/src/actions/actionTypes.js @@ -34,6 +34,7 @@ export const types = { GET_SUB_CATEGORY: "GET_SUB_CATEGORY", APPEND_SUB_CATEGORY: "APPEND_SUB_CATEGORY", GET_TOP_20_SHOW: "GET_TOP_20_SHOW", + GET_PRODUCT_DETAIL: "GET_PRODUCT_DETAIL", // myPage actions GET_MY_RECOMMANDED_KEYWORD: "GET_MY_RECOMMANDED_KEYWORD", @@ -44,6 +45,8 @@ export const types = { // product actions GET_BEST_SELLER: "GET_BEST_SELLER", + GET_PRODUCT_GROUP: "GET_PRODUCT_GROUP", + GET_PRODUCT_OPTION: "GET_PRODUCT_OPTION", // search actions GET_SEARCH: "GET_SEARCH", diff --git a/com.twin.app.shoptime/src/actions/mainActions.js b/com.twin.app.shoptime/src/actions/mainActions.js index abeedc31..b6e75a67 100644 --- a/com.twin.app.shoptime/src/actions/mainActions.js +++ b/com.twin.app.shoptime/src/actions/mainActions.js @@ -5,6 +5,33 @@ import { types } from "./actionTypes"; // 서브카테고리 조회 IF-LGSP-051 let getSubCategoryKey = null; + +export const getMainCategoryDetail = (props) => (dispatch, getState) => { + const { patnrId, prdtId } = props; + const onSuccess = (response) => { + console.log("getMainCategoryDetail onSuccess ", response.data); + + dispatch({ + type: types.GET_PRODUCT_DETAIL, + payload: response.data.data, + }); + }; + + const onFail = (error) => { + console.error("getMainCategoryDetail onFail", error); + }; + + TAxios( + dispatch, + getState, + "get", + URLS.GET_PRODUCT_DETAIL, + { patnrId, prdtId }, + {}, + onSuccess, + onFail + ); +}; export const getSubCategory = (params, key) => (dispatch, getState) => { const { lgCatCd, patnrIdList, tabType, pageSize, pageNo, filterType } = params; diff --git a/com.twin.app.shoptime/src/actions/productActions.js b/com.twin.app.shoptime/src/actions/productActions.js index 26c31c4a..e564febe 100644 --- a/com.twin.app.shoptime/src/actions/productActions.js +++ b/com.twin.app.shoptime/src/actions/productActions.js @@ -28,3 +28,61 @@ export const getBestSeller = () => (dispatch, getState) => { onFail ); }; + +// Detail 옵션상품 정보 조회 IF-LGSP-319 +export const getProductGroup = (props) => (dispatch, getState) => { + const { patnrId, prdtId } = props; + + const onSuccess = (response) => { + console.log("getProductGroup onSuccess", response.data); + + dispatch({ + type: types.GET_PRODUCT_GROUP, + payload: response.data.data, + }); + }; + + const onFail = (error) => { + console.error("getProductGroup onFail", error); + }; + + TAxios( + dispatch, + getState, + "get", + URLS.GET_PRODUCT_GROUP, + { patnrId, prdtId }, + {}, + onSuccess, + onFail + ); +}; + +// Detail 옵션상품 정보 조회 IF-LGSP-320 +export const getProductOption = (props) => (dispatch, getState) => { + const { patnrId, prdtId } = props; + + const onSuccess = (response) => { + console.log("getProductOption onSuccess", response.data); + + dispatch({ + type: types.GET_PRODUCT_OPTION, + payload: response.data.data, + }); + }; + + const onFail = (error) => { + console.error("getProductOption onFail", error); + }; + + TAxios( + dispatch, + getState, + "get", + URLS.GET_PRODUCT_OPTION, + { patnrId, prdtId }, + {}, + onSuccess, + onFail + ); +}; diff --git a/com.twin.app.shoptime/src/api/apiConfig.js b/com.twin.app.shoptime/src/api/apiConfig.js index cb3efff4..cb9398f4 100644 --- a/com.twin.app.shoptime/src/api/apiConfig.js +++ b/com.twin.app.shoptime/src/api/apiConfig.js @@ -34,7 +34,8 @@ export const URLS = { //product controller GET_PRODUCT_BESTSELLER: "/lgsp/v1/product/bestSeller.lge", - + GET_PRODUCT_GROUP: "/lgsp/v1/product/group.lge", + GET_PRODUCT_OPTION: "/lgsp/v1/product/option.lge", //my-page controller GET_MY_RECOMMANDED_KEYWORD: "/lgsp/v1/mypage/reckeyword.lge", GET_MY_FAQ_INFO: "/lgsp/v1/mypage/support/faq.lge", @@ -47,12 +48,13 @@ export const URLS = { //main controller GET_SUB_CATEGORY: "/lgsp/v1/main/subcategory.lge", GET_TOP20_SHOW: "/lgsp/v1/main/top/show.lge", + GET_PRODUCT_DETAIL: "/lgsp/v1/main/category/product/detail.lge", //event controller GET_WELCOME_EVENT_INFO: "/lgsp/v1/event/event.lge", }; -const getRicCode = (country, ricCodeSetting) =>{ - if(ricCodeSetting !== 'system'){ +const getRicCode = (country, ricCodeSetting) => { + if (ricCodeSetting !== "system") { return ricCodeSetting; } if (country == "US") { @@ -63,27 +65,28 @@ const getRicCode = (country, ricCodeSetting) =>{ return "ruc"; } return null; -} +}; export const getUrl = (getState, endStr) => { const serverHOST = getState().common.appStatus.serverHOST; - const {serverType, ricCodeSetting} = getState().localSettings; - if(!serverHOST){ - console.error('getUrl: Not supported. Host is missing'); + const { serverType, ricCodeSetting } = getState().localSettings; + if (!serverHOST) { + console.error("getUrl: Not supported. Host is missing"); return ""; } let sdpURL = serverHOST.split(".")[0]; - let countryCode = "", ricCode=""; + let countryCode = "", + ricCode = ""; if (sdpURL.indexOf("-") > 0) { countryCode = sdpURL.split("-")[1]; } else { countryCode = sdpURL; } ricCode = getRicCode(countryCode, ricCodeSetting); - if(!ricCode){ + if (!ricCode) { return ""; } sdpURL = sdpURL.toLowerCase(); - if(serverType !== 'system'){ + if (serverType !== "system") { sdpURL = serverType; } let newUrl = ""; diff --git a/com.twin.app.shoptime/src/components/TBody/TBody.jsx b/com.twin.app.shoptime/src/components/TBody/TBody.jsx index 89ce115f..1da9223f 100644 --- a/com.twin.app.shoptime/src/components/TBody/TBody.jsx +++ b/com.twin.app.shoptime/src/components/TBody/TBody.jsx @@ -32,7 +32,7 @@ export default function TBody({ {children} ) : ( - { children } + children )} ); diff --git a/com.twin.app.shoptime/src/components/THeader/THeader.jsx b/com.twin.app.shoptime/src/components/THeader/THeader.jsx index a2a4695e..9f3c0361 100644 --- a/com.twin.app.shoptime/src/components/THeader/THeader.jsx +++ b/com.twin.app.shoptime/src/components/THeader/THeader.jsx @@ -1,17 +1,20 @@ import React from "react"; -import css from "./THeader.module.less"; import classNames from "classnames"; + import SpotlightContainerDecorator from "@enact/spotlight/SpotlightContainerDecorator"; +import css from "./THeader.module.less"; + const Container = SpotlightContainerDecorator( { enterTo: "last-focused" }, "div" ); -export default function THeader({ title, className }) { +export default function THeader({ title, className, onBackButton, onClick }) { return ( + {onBackButton &&