diff --git a/src/entities/home/ui/favorite-wrapper.tsx b/src/entities/home/ui/favorite-wrapper.tsx index 5c7db5e..2ca2c03 100644 --- a/src/entities/home/ui/favorite-wrapper.tsx +++ b/src/entities/home/ui/favorite-wrapper.tsx @@ -8,6 +8,7 @@ import { useFavoriteEditOnStore, useMenuIds, useMenuOnStore, useStore } from '@/ import { useTranslation } from 'react-i18next'; import { showAlert } from '@/widgets/show-alert'; import { checkGrant } from '@/shared/lib/check-grant'; +import { snackBar } from '@/shared/lib'; export interface FavoriteWrapperProps { usingType: 'home' | 'menu', @@ -27,6 +28,7 @@ export const FavoriteWrapper = ({ const { menuIds, setMenuIds, deleteMenuId} = useMenuIds(); const [isFirst, setIsFirst] = useState(true); const [favoriteItems, setFavoriteItems] = useState>([]); + const [prevMenuOn, setPrevMenuOn] = useState(false); const itemAdd: UserFavorite = { menuId: -1, @@ -73,6 +75,12 @@ export const FavoriteWrapper = ({ }; const onClickToRemoveItem = (item?: UserFavorite) => { + // 삭제 전에 먼저 개수 체크 + if(menuIds.length === 1){ + snackBar(t('favorite.cannotDeleteLastItem')); + return; // 삭제 중단 + } + let idx = -1; let newFavorite: Array = favoriteItems.filter((value, index) => { if(value.menuId === item?.menuId){ @@ -80,18 +88,16 @@ export const FavoriteWrapper = ({ } return value.menuId !== item?.menuId; }); + useStore.getState().UserStore.setUserFavorite(newFavorite); setFavoriteItems(newFavorite); + if(idx > -1){ goToSlide(idx); } - if(menuIds.length <= 1){ - showAlert('바로가기는 1개이상 설정 필요 합니다.'); - } - else{ - if(item?.menuId){ - deleteMenuId(item?.menuId); - } + + if(item?.menuId){ + deleteMenuId(item?.menuId); } }; @@ -162,16 +168,31 @@ export const FavoriteWrapper = ({ useEffect(() => { getFavoriteList(); + if(usingType === 'home'){ goToSlide('first'); } - else if(usingType === 'menu' && !isFirst){ - setTimeout(() => { - goToSlide('last'); - }, 100); + else if(usingType === 'menu'){ + // 메뉴가 새로 열렸는지 확인 (prevMenuOn: false -> menuOn: true) + const isMenuJustOpened = !prevMenuOn && menuOn; + + if(isMenuJustOpened || isFirst){ + // 메뉴가 새로 열렸거나 처음 렌더링 시 맨 앞으로 + setTimeout(() => { + goToSlide('first'); + }, 100); + } + else if(changeMenuId){ + // 즐겨찾기 아이템 추가/삭제 시 마지막으로 (변경된 항목 보여주기) + setTimeout(() => { + goToSlide('last'); + }, 100); + } } + setIsFirst(false); - }, [changeMenuId, favoriteEditOn]); + setPrevMenuOn(menuOn); + }, [changeMenuId, favoriteEditOn, menuOn]); return ( <>