From 31b9c3682d618df3f876ed37ec7d71b1475d1042 Mon Sep 17 00:00:00 2001 From: "focp212@naver.com" Date: Tue, 30 Sep 2025 15:15:02 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EC=A6=90=EA=B2=A8?= =?UTF-8?q?=EC=B0=BE=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/entities/home/ui/favorite-wrapper.tsx | 77 ++++++++++++++--------- src/entities/menu/model/types.ts | 3 +- src/entities/menu/ui/menu-category.tsx | 71 +++++++++++++++++---- src/entities/user/model/store.ts | 1 - src/entities/user/model/types.ts | 1 + src/shared/configs/sentry/index.tsx | 64 ------------------- src/shared/ui/menu/index.tsx | 49 +++++++++------ 7 files changed, 141 insertions(+), 125 deletions(-) diff --git a/src/entities/home/ui/favorite-wrapper.tsx b/src/entities/home/ui/favorite-wrapper.tsx index e6b4026..10e2df7 100644 --- a/src/entities/home/ui/favorite-wrapper.tsx +++ b/src/entities/home/ui/favorite-wrapper.tsx @@ -16,37 +16,46 @@ const items: Array = [ ]; */ export interface FavoriteWrapperProps { - usingType: 'home' | 'menu' + usingType: 'home' | 'menu', + editMode?: boolean, + setEditMode?: (editMode: boolean) => void; + changeMenuId?: string; }; export const FavoriteWrapper = ({ - usingType + usingType, + editMode, + setEditMode, + changeMenuId }: FavoriteWrapperProps) => { const { navigate } = useNavigate(); - - const [edit, setEdit] = useState(false); + const [favoriteItems, setFavoriteItems] = useState>([]); - const itemAdd: UserFavorite = { img: IMAGE_ROOT + '/ico_menu_plus.svg', title: '편집하기' }; const onClickToFavoriteEdit = () => { - setEdit(true); + if(usingType === 'menu' && setEditMode){ + setEditMode(true); + } }; - - //useSetFavoriteEdit(true); - //useSetMenuOn(true); - + const onClickToNavigate = (path?: string) => { if(!!path){ navigate(path); } }; - const getFavoriteItems = () => { + const getFavoriteList = () => { + console.log('1111') + let userFavorite = useStore.getState().UserStore.userFavorite; + setFavoriteItems(userFavorite); + }; + + const makeFavoriteItems = () => { let rs = []; for(let i=0;i ); } - - rs.push( - -
-
- { + return rs; + }; + const makeAddFavoriteItem = () => { + let rs = []; + if(!editMode){ + rs.push( + +
+
+ { +
+ { itemAdd.title }
- { itemAdd.title } -
- - ); + + ); + } return rs; }; + useEffect(() => { + getFavoriteList(); + }, [changeMenuId]); + return ( <> { getFavoriteItems() } + > + { (favoriteItems.length > 0) && makeFavoriteItems() } + { makeAddFavoriteItem() } + ); }; diff --git a/src/entities/menu/model/types.ts b/src/entities/menu/model/types.ts index fcadb80..e0e90b9 100644 --- a/src/entities/menu/model/types.ts +++ b/src/entities/menu/model/types.ts @@ -12,5 +12,6 @@ export interface MenuCategoryProps { menuName?: string; subMenu?: Array; setMenuOn?: (menuOn: boolean) => void; - favoriteEdit?: boolean; + editMode?: boolean; + setChangeMenuId?: (menuId?: string) => void; }; diff --git a/src/entities/menu/ui/menu-category.tsx b/src/entities/menu/ui/menu-category.tsx index 99b2c79..70bd6d3 100644 --- a/src/entities/menu/ui/menu-category.tsx +++ b/src/entities/menu/ui/menu-category.tsx @@ -2,6 +2,8 @@ import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { MenuCategoryProps } from '../model/types'; import { useStore } from '@/shared/model/store'; import { IMAGE_ROOT } from '@/shared/constants/common'; +import { UserFavorite } from '@/entities/user/model/types'; +import { useEffect, useState } from 'react'; export const MenuCategory = ({ menuId, @@ -9,12 +11,16 @@ export const MenuCategory = ({ menuName, subMenu, setMenuOn, - favoriteEdit + editMode, + setChangeMenuId }: MenuCategoryProps) => { const { navigate } = useNavigate(); + const [favoriteItems, setFavoriteItems] = useState>([]); + const [menuIds, setMenuIds] = useState>([]); + const onClickToNavigate = (path?: string) => { - if(!!path && !!setMenuOn && !favoriteEdit){ + if(!!path && !!setMenuOn && !editMode){ setMenuOn(false); navigate(path); } @@ -23,20 +29,53 @@ export const MenuCategory = ({ const favoriteSetting = ( checked: boolean, title?: string, - path?: string + path?: string, + menuId?: string ) => { - useStore.getState().UserStore.setUserFavorite([{ - title: title, - img: IMAGE_ROOT + '/ico_menu_01.svg', - path: path, - }]); + console.log(checked, title, path, menuId) + let userFavorite = useStore.getState().UserStore.userFavorite; + if(checked){ + userFavorite = [ + ...userFavorite, + { + title: title, + img: IMAGE_ROOT + '/ico_menu_01.svg', + path: path, + menuId: menuId + } + ]; + } + else{ + userFavorite = userFavorite.filter((value, index) => { + return value.menuId !== menuId + }); + } + useStore.getState().UserStore.setUserFavorite(userFavorite); + callFavoiteItems(); + if(setChangeMenuId){ + setChangeMenuId(menuId); + } }; + const callFavoiteItems = () => { + let userFavorite = useStore.getState().UserStore.userFavorite; + console.log(userFavorite) + setFavoriteItems(userFavorite); + let newArr: Array = userFavorite.map((value, index) => { + return value.menuId; + }); + setMenuIds(newArr); + }; + + useEffect(() => { + callFavoiteItems(); + }, []); + const getMenuItems = () => { let rs = []; if(subMenu){ for(let i=0;i{ subMenu[i]?.menuName }
favoriteSetting(e.target.checked, subMenu[i]?.menuName, subMenu[i]?.path) } + type="checkbox" + checked={ menuIds.includes(subMenu[i]?.menuId)? true: false } + onChange={ (e) => favoriteSetting( + e.target.checked, + subMenu[i]?.menuName, + subMenu[i]?.path, + subMenu[i]?.menuId + )} />
diff --git a/src/entities/user/model/store.ts b/src/entities/user/model/store.ts index ef4a4ca..de63d32 100644 --- a/src/entities/user/model/store.ts +++ b/src/entities/user/model/store.ts @@ -56,7 +56,6 @@ export const createUserInfoStore = lens((set, get) => ({ return { ...state, userFavorite: [ - ...state.userFavorite, ...newUserFavorite ], }; diff --git a/src/entities/user/model/types.ts b/src/entities/user/model/types.ts index 7dc3ab9..c65c8c9 100644 --- a/src/entities/user/model/types.ts +++ b/src/entities/user/model/types.ts @@ -32,6 +32,7 @@ export interface UserFavorite { title?: string; img?: string; path?: string; + menuId?: string; }; export interface UserInfo extends LoginResponse { status: boolean; diff --git a/src/shared/configs/sentry/index.tsx b/src/shared/configs/sentry/index.tsx index 6c4af87..42c357f 100644 --- a/src/shared/configs/sentry/index.tsx +++ b/src/shared/configs/sentry/index.tsx @@ -84,31 +84,6 @@ const AdditionalServicePages = lazyLoad('/src/pages/additional-service/addition const SupportPages = lazyLoad('/src/pages/support/support-pages'); const SettingPage = lazyLoad('/src/pages/setting/setting-page'); const AlarmPages = lazyLoad('/src/pages/alarm/alarm-pages'); -/* -const IntroPage = lazyLoad('/src/pages/intro/intro-page'); -const StartPage = lazyLoad('/src/pages/sign-up/start/start-page'); -const AppAuthPage = lazyLoad('/src/pages/sign-up/app-auth/app-auth-page'); -const MobileVerificationPage = lazyLoad('/src/pages/sign-up/mobile-verification/mobile-verification-page'); -const SignUpPages = lazyLoad('/src/pages/sign-up/sign-up-pages'); -const IssueWalletPages = lazyLoad('/src/pages/issue-wallet/issue-wallet-pages'); -const MyWalletPages = lazyLoad('/src/pages/my-wallet/my-wallet-pages'); -const ExchangePages = lazyLoad('/src/pages/exchange/exchange-pages'); -const MyBankAccountPage = lazyLoad('/src/pages/my-bank-account/my-bank-account-page'); -const SecurityPage = lazyLoad('/src/pages/security/security-page'); -const AppVersionPage = lazyLoad('/src/pages/app-version/app-version-page'); -const SettingFontSizePage = lazyLoad('/src/pages/setting-font-size/setting-font-size-page'); -const CommunityPages = lazyLoad('/src/pages/community/community-pages'); -const MenuPage = lazyLoad('/src/pages/menu/menu-page'); -const LoginPage = lazyLoad('/src/pages/login/login-page'); -const ReLoginPage = lazyLoad('/src/pages/login/re-login-page'); -const HomePage = lazyLoad('/src/pages/home/home-page'); -const ShopListPage = lazyLoad('/src/pages/shop-list/shop-list-page'); -const NotificationPages = lazyLoad('/src/pages/notification/notification-pages'); -const PaymentPages = lazyLoad('/src/pages/payment/payment-pages'); -const VoucherPages = lazyLoad('/src/pages/voucher/voucher-pages'); -const PaymentGuidePage = lazyLoad('/src/pages/payment/payment-guide-page'); -const InputShopWalletAddressPage = lazyLoad('/src/pages/payment/input-shop-wallet-address-page'); -*/ export const SentryRoutes = Sentry.withSentryReactRouterV6Routing(Routes); const Pages = () => { @@ -139,45 +114,6 @@ const Pages = () => { - - - { - /* - } /> - } /> - } /> - }> - } /> - } /> - }> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - - } /> - - } /> - } /> - }> - }> - } /> - - - } /> - } /> - */ - } - diff --git a/src/shared/ui/menu/index.tsx b/src/shared/ui/menu/index.tsx index 159fab2..0947461 100644 --- a/src/shared/ui/menu/index.tsx +++ b/src/shared/ui/menu/index.tsx @@ -24,14 +24,21 @@ export const Menu = ({ const userInfo = useStore((state) => state.UserStore.userInfo); const [shortBtns, setShortBtns] = useState>>([]); - + const [editMode, setEditMode] = useState(false); + const [changeMenuId, setChangeMenuId] = useState(); + const onClickToNavigate = (path: string) => { onClickToMenuClose(); navigate(path); }; const onClickToMenuClose = () => { - setMenuOn(false); - }; + if(editMode){ + setEditMode(false); + } + else{ + setMenuOn(false); + } + }; const getMenuCategory = () => { let rs = []; @@ -44,7 +51,8 @@ export const Menu = ({ menuName={ MenuItems[i]?.menuName } subMenu={ MenuItems[i]?.subMenu } setMenuOn={ setMenuOn } - favoriteEdit={ favoriteEdit } + editMode={ editMode } + setChangeMenuId= { setChangeMenuId } /> ); } @@ -86,15 +94,17 @@ export const Menu = ({ (madzoneviper)
- + { !editMode && + + }
- { - - } + { + + }