save home default focus in redux, add eventPopup focus

This commit is contained in:
hyunwoo93.cha
2024-06-14 13:28:05 +09:00
parent c102d00912
commit 3a57d6322c
5 changed files with 37 additions and 7 deletions

View File

@@ -53,6 +53,7 @@ export const types = {
GET_THEME_MENU_SHELF_INFO: "GET_THEME_MENU_SHELF_INFO",
UPDATE_SPOTLIGHTID: "UPDATE_SPOTLIGHTID",
CLEAR_THEME_DETAIL: "CLEAR_THEME_DETAIL",
SET_DEFAULT_FOCUS: "SET_DEFAULT_FOCUS",
// brand actions
GET_BRAND_LIST: "GET_BRAND_LIST",

View File

@@ -239,3 +239,8 @@ export const updateSpotlightId = (currentSpot) => {
export const clearThemeDetail = () => ({
type: types.CLEAR_THEME_DETAIL,
});
export const setDefaultFocus = (focus) => ({
type: types.SET_DEFAULT_FOCUS,
payload: focus,
});

View File

@@ -13,6 +13,7 @@ const initialState = {
data: {},
status: "idle",
},
defaultFocus: null,
};
export const homeReducer = (state = initialState, action) => {
@@ -58,9 +59,9 @@ export const homeReducer = (state = initialState, action) => {
};
case types.GET_HOME_MAIN_CONTENTS: {
const homeTopDisplayInfo = action.payload?.homeTopDisplayInfos?.[0] ?? {};
const homeTopDisplayInfo = action.payload?.homeTopDisplayInfos?.[0] ?? {};
const bannerData = action.payload?.homeMainContentsBannerInfos?.[0] ?? {};
if(bannerData.bannerInfos){
if (bannerData.bannerInfos) {
for (let i = 0; i < bannerData.bannerInfos.length; i++) {
const info = bannerData.bannerInfos[i];
if (info.shptmDspyTpNm === "Random") {
@@ -72,7 +73,7 @@ export const homeReducer = (state = initialState, action) => {
return {
...state,
homeTopDisplayInfo: homeTopDisplayInfo,
bannerData: bannerData
bannerData: bannerData,
};
}
case types.GET_THEME_CURATION_INFO:
@@ -122,6 +123,14 @@ export const homeReducer = (state = initialState, action) => {
hotelData: null,
};
}
case types.SET_DEFAULT_FOCUS: {
return {
...state,
defaultFocus: action.payload,
};
}
default:
return state;
}

View File

@@ -51,6 +51,7 @@ export default function EventPopUpBanner() {
const timerRef = useRef();
const shopByMobileLogRef = useRef(null);
const defaultFocus = useSelector((state) => state.home.defaultFocus);
const evntId = eventPopInfosData?.evntId;
const evntTpCd = eventPopInfosData?.evntTpCd;
@@ -167,7 +168,11 @@ export default function EventPopUpBanner() {
dispatch(setEventPopClickInfo({ evntApplcnFlag: "N", evntId }));
dispatch(setHidePopup());
}
}, [dispatch, eventPopInfosData]);
if (defaultFocus) {
Spotlight.focus(defaultFocus);
}
}, [dispatch, eventPopInfosData, defaultFocus]);
useEffect(() => {
timerRef.current = setTimeout(() => {

View File

@@ -6,7 +6,10 @@ import Spotlight from "@enact/spotlight";
import { SpotlightContainerDecorator } from "@enact/spotlight/SpotlightContainerDecorator";
import Spottable from "@enact/spotlight/Spottable";
import { getHomeMainContents } from "../../../actions/homeActions";
import {
getHomeMainContents,
setDefaultFocus,
} from "../../../actions/homeActions";
import CustomImage from "../../../components/CustomImage/CustomImage";
import useScrollReset from "../../../hooks/useScrollReset";
import css from "./HomeBanner.module.less";
@@ -28,9 +31,12 @@ export default function HomeBanner({
spotlightId,
handleItemFocus,
}) {
const dispatch = useDispatch();
const homeTopDisplayInfo = useSelector(
(state) => state.home.homeTopDisplayInfo
);
const popupVisible = useSelector((state) => state.common.popup.popupVisible);
const bannerDataList = useSelector(
(state) => state.home.bannerData?.bannerInfos
@@ -81,13 +87,17 @@ export default function HomeBanner({
Spotlight.focus(defaultFocus);
}, 0);
}
}, [defaultFocus]);
if (defaultFocus) {
dispatch(setDefaultFocus(defaultFocus));
}
}, [defaultFocus, dispatch]);
const renderItem = useCallback(
(index, isHorizontal) => {
const data = bannerDataList?.[index] ?? {};
return (
<div className={!isHorizontal ? css.imgBox: undefined}>
<div className={!isHorizontal ? css.imgBox : undefined}>
{data.shptmDspyTpNm === "Rolling" ? (
<Rolling
bannerData={data}