WelcomeEventPanel 추가,eventSlice 추가,apiConfig/store 내용 추가,

This commit is contained in:
jiwon93.son
2024-01-31 18:25:49 +09:00
parent be6d521fbb
commit d33b3f9d8e
6 changed files with 216 additions and 2 deletions

View File

@@ -43,6 +43,9 @@ export const URLS = {
//main controller //main controller
GET_SUB_CATEGORY: "/lgsp/v1/main/subcategory.lge", GET_SUB_CATEGORY: "/lgsp/v1/main/subcategory.lge",
GET_TOP20_SHOW: "/lgsp/v1/main/top/show.lge", GET_TOP20_SHOW: "/lgsp/v1/main/top/show.lge",
//event controller
GET_WELCOME_EVENT_INFO: "/lgsp/v1/event/event.lge",
}; };
export const getUrl = (endStr) => { export const getUrl = (endStr) => {

View File

@@ -0,0 +1,51 @@
import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
import { URLS } from "../../api/apiConfig";
import { TAxios } from "../../api/TAxios";
// 이벤트 정보 조회 IF-LGSP-070 :
export const getWelcomeEventInfo = createAsyncThunk(
"event/getWelcomeEventInfo",
async (_, thunkAPI) => {
const onSuccess = (response) => {
console.log("getWelcomeEventInfo onSuccess ", response.data);
thunkAPI.dispatch(eventSlice.actions.updateEventData(response.data.data));
};
const onFail = (error) => {
console.error("getWelcomeEventInfo onFail ", error);
};
TAxios(
thunkAPI.dispatch,
thunkAPI.getState,
"get",
URLS.GET_WELCOME_EVENT_INFO,
{},
{},
onSuccess,
onFail
);
}
);
const initialState = {
eventData: {},
};
export const eventSlice = createSlice({
name: "event",
initialState,
reducers: {
updateEventData: (state, action) => {
// console.log("#action", action);
state.eventData = action.payload;
// console.log("#state", state.eventData);
},
},
});
export const { updateEventData } = eventSlice.actions;
export default eventSlice.reducer;

View File

@@ -4,13 +4,14 @@ import appDataReducer from "../features/appData/appDataSlice";
import brandReducer from "../features/brand/brandsSlice"; import brandReducer from "../features/brand/brandsSlice";
import commonReducer from "../features/common/commonSlice"; import commonReducer from "../features/common/commonSlice";
import deviceReducer from "../features/device/deviceSlice"; import deviceReducer from "../features/device/deviceSlice";
import eventReducer from "../features/event/eventSlice";
import homeReducer from "../features/home/homeSlice"; import homeReducer from "../features/home/homeSlice";
import mainReducer from "../features/main/mainSlice";
import myPageReducer from "../features/mypage/myPageSlice"; import myPageReducer from "../features/mypage/myPageSlice";
import onSaleReducer from "../features/onSale/onSaleSlice"; import onSaleReducer from "../features/onSale/onSaleSlice";
import panelsReducer from "../features/panels/panelsSlice"; import panelsReducer from "../features/panels/panelsSlice";
import searchReducer from "../features/search/searchSlice";
import productReducer from "../features/product/productSlice"; import productReducer from "../features/product/productSlice";
import mainReducer from "../features/main/mainSlice"; import searchReducer from "../features/search/searchSlice";
export const store = configureStore({ export const store = configureStore({
reducer: { reducer: {
@@ -25,5 +26,6 @@ export const store = configureStore({
search: searchReducer, search: searchReducer,
product: productReducer, product: productReducer,
main: mainReducer, main: mainReducer,
event: eventReducer,
}, },
}); });

View File

@@ -0,0 +1,96 @@
import React, { useEffect } from "react";
import { useDispatch, useSelector } from "react-redux";
import Spotlight from "@enact/spotlight";
import SpotlightContainerDecorator from "@enact/spotlight/SpotlightContainerDecorator";
import TButton, { TYPES } from "../../components/TButton/TButton";
import TPanel from "../../components/TPanel/TPanel";
import { getWelcomeEventInfo } from "../../features/event/eventSlice";
import { $L } from "../../utils/helperMethods";
import css from "../WelcomeEventPanel/WelcomeEventPanel.module.less";
const Container = SpotlightContainerDecorator(
{ enterTo: "last-focused" },
"div"
);
// 임시 데이터
const dummyeEvnetData = {
evntId: "", // 이벤트 아이디
evntNm: "Win LG OLED TV and MORE!", // 이벤트 이름
evntTpCd: "", // 이벤트 유형
expsStrtDt: "2021. March 15st", // 전시 시작일시
expsEndtDt: "2021. April 13st", // 전시 종료 일시
evntImgUrl: "", // 이벤트 이미지 URL
trmsBtnExpsFlag: "Y", // 약관 버튼 노출 여부
trmsCntt: "", // 약관 내용
};
const WelcomeEventPanel = () => {
const dispatch = useDispatch();
const EventInfos = useSelector((state) => state.event);
// console.log("#getEventInfos", EventInfos);
useEffect(() => {
dispatch(getWelcomeEventInfo());
Spotlight.focus("agree");
}, []);
return (
<TPanel>
<Container className={css.eventLayout}>
<div className={css.textLayer}>
<div className={css.title}>{$L(dummyeEvnetData.evntNm)}</div>
<div className={css.date}>
{$L(
`(Period : ${dummyeEvnetData.expsStrtDt} ~ ${dummyeEvnetData.expsEndtDt})`
)}
</div>
<div className={css.description}>
{$L(
`Just input your cell phone number and youll be applied automatically!\n`
)}
<span>
{$L(`(Click below `)}
<span className={css.pointColor}>{$L(`Agree`)}</span>
{$L(" button)")}
</span>
</div>
<div className={css.BtnLayer}>
<TButton
className={css.agreeBtn}
// onClick={handleAgree}
spotlightId="agree"
type={TYPES.agree}
>
{$L("Agree")}
</TButton>
<TButton
// onClick={handleDisagree}
className={css.agreeBtn}
type={TYPES.agree}
>
{$L("Do Not Agree")}
</TButton>
</div>
</div>
<div className={css.bottomBtnLayer}>
{dummyeEvnetData.trmsBtnExpsFlag === "Y" && (
<TButton
// onClick={() => handleTermsClick("MST00402")}
className={css.termsBtn}
type={TYPES.terms}
>
{$L("Terms & Conditions")}
</TButton>
)}
</div>
</Container>
</TPanel>
);
};
export default WelcomeEventPanel;

View File

@@ -0,0 +1,56 @@
@import "../../style/CommonStyle.module.less";
@import "../../style/utils.module.less";
.eventLayout {
display: flex;
height: 100%;
flex-direction: column;
align-items: center;
padding-top: 80px;
text-align: center;
.textLayer {
line-height: normal;
}
.title {
color: #2e2e2e;
.font (@arialFontBold, 64px);
}
.date {
.font (@arialFontBold, 38px);
color: @COLOR_GRAY06;
padding: 10px 0 30px 0;
}
.description {
.font (@arialFontBold, 30px);
color: @COLOR_GRAY06;
white-space: pre-line;
.pointColor {
color: #c91d53;
}
}
.BtnLayer {
.flex();
margin: 25px 0 0px;
padding-top: 30px;
.agreeBtn {
min-width: 340px;
height: 80px;
}
}
.bottomBtnLayer {
position: fixed;
top: 788px;
.termsBtn {
width: 440px;
height: 80px;
.font (@arialFont, 34px);
color: @COLOR_GRAY06;
letter-spacing: -1px;
}
}
}

View File

@@ -0,0 +1,6 @@
{
"main": "WelcomeEventPanel.jsx",
"styles": [
"WelcomeEventPanel.module.less"
]
}