홈 배너

This commit is contained in:
focp212@naver.com
2025-10-01 17:15:57 +09:00
parent 0e89a1277c
commit 35f8f1dbd6
9 changed files with 66 additions and 26 deletions

View File

@@ -5,6 +5,7 @@ import 'swiper/css';
import { IMAGE_ROOT } from '@/shared/constants/common'; import { IMAGE_ROOT } from '@/shared/constants/common';
import { UserFavorite } from '@/entities/user/model/types'; import { UserFavorite } from '@/entities/user/model/types';
import { useStore } from '@/shared/model/store'; import { useStore } from '@/shared/model/store';
import { useLocation } from 'react-router';
/* /*
const items: Array<UserFavorite> = [ const items: Array<UserFavorite> = [
@@ -31,7 +32,7 @@ export const FavoriteWrapper = ({
setMenuOn setMenuOn
}: FavoriteWrapperProps) => { }: FavoriteWrapperProps) => {
const { navigate } = useNavigate(); const { navigate } = useNavigate();
const [favoriteItems, setFavoriteItems] = useState<Array<UserFavorite>>([]); const [favoriteItems, setFavoriteItems] = useState<Array<UserFavorite>>([]);
const itemAdd: UserFavorite = { const itemAdd: UserFavorite = {
@@ -40,7 +41,7 @@ export const FavoriteWrapper = ({
}; };
const onClickToFavoriteEdit = () => { const onClickToFavoriteEdit = () => {
if(usingType === 'menu' && setEditMode){ if(setEditMode){
setEditMode(true); setEditMode(true);
} }
}; };
@@ -51,7 +52,6 @@ export const FavoriteWrapper = ({
if(setMenuOn){ if(setMenuOn){
setMenuOn(false); setMenuOn(false);
} }
} }
}; };
@@ -109,12 +109,13 @@ export const FavoriteWrapper = ({
useEffect(() => { useEffect(() => {
getFavoriteList(); getFavoriteList();
}, [changeMenuId]); }, [changeMenuId]);
return ( return (
<> <>
<Swiper <Swiper
spaceBetween={ 9 } spaceBetween={ 9 }
slidesPerView={ 4 } slidesPerView={ 4 }
style={{height: '75px'}}
> >
{ (favoriteItems.length > 0) && makeFavoriteItems() } { (favoriteItems.length > 0) && makeFavoriteItems() }
{ makeAddFavoriteItem() } { makeAddFavoriteItem() }

View File

@@ -0,0 +1,14 @@
import { useSetFavoriteEdit, useSetMenuOn } from '@/widgets/sub-layout/use-sub-layout';
export interface HiddenPageProps {
}
export const HiddenPage = ({
}: HiddenPageProps) => {
useSetMenuOn(true);
useSetFavoriteEdit(true);
return (
<></>
);
};

View File

@@ -4,6 +4,8 @@ import { useStore } from '@/shared/model/store';
import { IMAGE_ROOT } from '@/shared/constants/common'; import { IMAGE_ROOT } from '@/shared/constants/common';
import { UserFavorite } from '@/entities/user/model/types'; import { UserFavorite } from '@/entities/user/model/types';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { useLocation } from 'react-router';
import { PATHS } from '@/shared/constants/paths';
export const MenuCategory = ({ export const MenuCategory = ({
menuId, menuId,
@@ -15,6 +17,7 @@ export const MenuCategory = ({
setChangeMenuId setChangeMenuId
}: MenuCategoryProps) => { }: MenuCategoryProps) => {
const { navigate } = useNavigate(); const { navigate } = useNavigate();
const location = useLocation();
const [favoriteItems, setFavoriteItems] = useState<Array<UserFavorite>>([]); const [favoriteItems, setFavoriteItems] = useState<Array<UserFavorite>>([]);
const [menuIds, setMenuIds] = useState<Array<string | undefined>>([]); const [menuIds, setMenuIds] = useState<Array<string | undefined>>([]);
@@ -53,6 +56,9 @@ export const MenuCategory = ({
useStore.getState().UserStore.setUserFavorite(userFavorite); useStore.getState().UserStore.setUserFavorite(userFavorite);
setChangeMenuId(`${menuId}-${checked}`); setChangeMenuId(`${menuId}-${checked}`);
callFavoiteItems(); callFavoiteItems();
if(location.pathname === PATHS.home){
}
}; };
const callFavoiteItems = () => { const callFavoiteItems = () => {
@@ -123,7 +129,7 @@ export const MenuCategory = ({
<span>{ menuName }</span> <span>{ menuName }</span>
</div> </div>
<ul className="category-items"> <ul className="category-items">
{ getMenuItems() } { getMenuItems() }
</ul> </ul>
</div> </div>
</> </>

View File

@@ -1,6 +1,5 @@
import moment from 'moment'; import moment from 'moment';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { useUserInfo } from '@/entities/user/lib/use-user-info';
import { FavoriteWrapper } from '@/entities/home/ui/favorite-wrapper'; import { FavoriteWrapper } from '@/entities/home/ui/favorite-wrapper';
import { DayStatusBox } from '@/entities/home/ui/day-status-box'; import { DayStatusBox } from '@/entities/home/ui/day-status-box';
import { HomeBottomBanner } from '@/entities/home/ui/home-bottom-banner'; import { HomeBottomBanner } from '@/entities/home/ui/home-bottom-banner';
@@ -14,13 +13,16 @@ import {
useSetHeaderTitle, useSetHeaderTitle,
useSetHeaderType, useSetHeaderType,
useSetFooterMode, useSetFooterMode,
useSetFooterCurrentPage, useSetFooterCurrentPage
useSetFavoriteEdit,
useSetMenuOn
} from '@/widgets/sub-layout/use-sub-layout'; } from '@/widgets/sub-layout/use-sub-layout';
import { HiddenPage } from '@/entities/home/ui/hidden-page';
export let homeReloadKey = 1;
export const setHomeReloadKey = () => {
homeReloadKey++;
};
export const HomePage = () => { export const HomePage = () => {
const { callLogin } = useUserInfo();
const { const {
isNativeEnvironment, isNativeEnvironment,
openBiometricRegistrationPopup, openBiometricRegistrationPopup,
@@ -31,15 +33,14 @@ export const HomePage = () => {
useSetHeaderType(HeaderType.Home); useSetHeaderType(HeaderType.Home);
useSetFooterMode(true); useSetFooterMode(true);
useSetFooterCurrentPage(FooterItemActiveKey.Home); useSetFooterCurrentPage(FooterItemActiveKey.Home);
//useSetFavoriteEdit(true);
//useSetMenuOn(true);
const today = moment().format('YYYYMMDD').toString(); const today = moment().format('YYYYMMDD').toString();
let bannerToday = getLocalStorage(StorageKeys.BottomBannerClose); let bannerToday = getLocalStorage(StorageKeys.BottomBannerClose);
const [bottomBannerOn, setBottomBannerOn] = useState<boolean>(false); const [bottomBannerOn, setBottomBannerOn] = useState<boolean>(false);
const [authRegisterOn, setAuthRegisterOn] = useState<boolean>(false); const [authRegisterOn, setAuthRegisterOn] = useState<boolean>(false);
const [loginSuccess, setLoginSuccess] = useState<boolean>(true); const [loginSuccess, setLoginSuccess] = useState<boolean>(true);
const [homeEditMode, setHomeEditMode] = useState<boolean>(false);
const checkBottomBannerOpen = () => { const checkBottomBannerOpen = () => {
if(!!bannerToday){ if(!!bannerToday){
@@ -54,15 +55,14 @@ export const HomePage = () => {
setAuthRegisterOn(true); setAuthRegisterOn(true);
} }
}).catch((e) => { }).catch((e) => {
console.log('catch', e) console.log('catch', e);
}).finally(() => { }).finally(() => {
console.log('finally') console.log('finally');
setAuthRegisterOn(true); setAuthRegisterOn(true);
}); });
}; };
useEffect(() => { useEffect(() => {
checkBottomBannerOpen(); checkBottomBannerOpen();
checkAuthRegisterOpen(); checkAuthRegisterOpen();
@@ -92,6 +92,9 @@ export const HomePage = () => {
<> <>
<FavoriteWrapper <FavoriteWrapper
usingType='home' usingType='home'
editMode={ homeEditMode }
setEditMode={ setHomeEditMode }
key={ homeReloadKey }
></FavoriteWrapper> ></FavoriteWrapper>
<DayStatusBox></DayStatusBox> <DayStatusBox></DayStatusBox>
</> </>
@@ -109,6 +112,9 @@ export const HomePage = () => {
authRegisterOn={ authRegisterOn } authRegisterOn={ authRegisterOn }
></AuthRegister> ></AuthRegister>
} }
{ (!!homeEditMode) &&
<HiddenPage></HiddenPage>
}
</> </>
); );
}; };

View File

@@ -88,7 +88,9 @@ main {
.billing-label{ .billing-label{
width: 85px; width: 85px;
} }
.full-menu-container{
padding-top: 234px;
}
.full-menu-header{ .full-menu-header{
position: fixed; position: fixed;
z-index: 20; z-index: 20;
@@ -117,8 +119,8 @@ main {
} }
.full-menu-list{ .full-menu-list{
position: absolute; position: relative;
top: calc(234px + env(safe-area-inset-top)); top: calc(env(safe-area-inset-top));
margin-top: 0; margin-top: 0;
width: 100%; width: 100%;
} }

View File

@@ -8,6 +8,7 @@ import { useStore } from '@/shared/model/store';
import { FilterMotionDuration, FilterMotionStyle, FilterMotionVariants, MenuItems } from '@/entities/common/model/constant'; import { FilterMotionDuration, FilterMotionStyle, FilterMotionVariants, MenuItems } from '@/entities/common/model/constant';
import { useEffect, useRef, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import { useLocation } from 'react-router'; import { useLocation } from 'react-router';
import { setHomeReloadKey } from '@/pages/home/home-page';
export interface MenuProps { export interface MenuProps {
menuOn: boolean; menuOn: boolean;
@@ -49,6 +50,9 @@ export const Menu = ({
} }
else{ else{
setMenuOn(false); setMenuOn(false);
if(location.pathname === PATHS.home){
setHomeReloadKey();
}
} }
}; };
@@ -86,6 +90,12 @@ export const Menu = ({
useEffect(() => { useEffect(() => {
shortBtnsSetting(); shortBtnsSetting();
}, []); }, []);
useEffect(() => {
if(favoriteEdit){
setEditMode(favoriteEdit)
}
},[favoriteEdit]);
return ( return (
<> <>

View File

@@ -114,8 +114,7 @@ export const FooterNavigation = ({
setIsFooterOn(true); setIsFooterOn(true);
} }
}; };
}; };
window.addEventListener('touchstart', handleTouchStart); window.addEventListener('touchstart', handleTouchStart);
window.addEventListener('touchmove', handleTouchMove); window.addEventListener('touchmove', handleTouchMove);
@@ -130,7 +129,7 @@ export const FooterNavigation = ({
<> <>
{ isFooterOn && { isFooterOn &&
<nav className="bottom-tabbar"> <nav className="bottom-tabbar">
{ getFooterButtonItems() } { getFooterButtonItems() }
</nav> </nav>
} }
</> </>

View File

@@ -49,7 +49,9 @@ export const HeaderNavigation = ({
let mids = useStore.getState().UserStore.selectOptionsMids; let mids = useStore.getState().UserStore.selectOptionsMids;
setSelectOptions(mids); setSelectOptions(mids);
}, []); }, []);
useEffect(() => {
console.log('menuOn : ', menuOn)
}, [menuOn])
return ( return (
<> <>
{ {
@@ -95,8 +97,8 @@ export const HeaderNavigation = ({
</button> </button>
{ {
/* /*
<button className="header-btn profile-btn" id="profileBtn"> <button className="header-btn profile-btn">
<span className="profile-icon">👤</span> <span className="profile-icon">👤</span>
</button> </button>
*/ */
} }