feat: 즐겨찾기 메뉴 4개 제한 기능 추가
- 즐겨찾기 메뉴 최대 4개 제한 - 5번째 추가 시 마지막 항목 자동 제거 - menu-category 컴포넌트 아이콘 파일 경로 수정 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -4,13 +4,12 @@ import { IMAGE_ROOT } from '@/shared/constants/common';
|
|||||||
import { UserFavorite } from '@/entities/user/model/types';
|
import { UserFavorite } from '@/entities/user/model/types';
|
||||||
import { RefObject, useEffect, useState } from 'react';
|
import { RefObject, useEffect, useState } from 'react';
|
||||||
import { useLocation } from 'react-router';
|
import { useLocation } from 'react-router';
|
||||||
import { PATHS } from '@/shared/constants/paths';
|
|
||||||
import { MenuItem } from '../model/types';
|
import { MenuItem } from '../model/types';
|
||||||
|
|
||||||
export interface MenuCategoryProps {
|
export interface MenuCategoryProps {
|
||||||
menuId?: number;
|
menuId?: number;
|
||||||
menuIcon?: string;
|
|
||||||
menuName?: string;
|
menuName?: string;
|
||||||
|
iconFilePath?: string;
|
||||||
subMenu?: Array<MenuItem>;
|
subMenu?: Array<MenuItem>;
|
||||||
setMenuOn?: (menuOn: boolean) => void;
|
setMenuOn?: (menuOn: boolean) => void;
|
||||||
editMode?: boolean;
|
editMode?: boolean;
|
||||||
@@ -21,7 +20,7 @@ export interface MenuCategoryProps {
|
|||||||
|
|
||||||
export const MenuCategory = ({
|
export const MenuCategory = ({
|
||||||
menuId,
|
menuId,
|
||||||
menuIcon,
|
iconFilePath,
|
||||||
menuName,
|
menuName,
|
||||||
subMenu,
|
subMenu,
|
||||||
setMenuOn,
|
setMenuOn,
|
||||||
@@ -31,7 +30,7 @@ export const MenuCategory = ({
|
|||||||
itemIndex
|
itemIndex
|
||||||
}: MenuCategoryProps) => {
|
}: MenuCategoryProps) => {
|
||||||
const { navigate } = useNavigate();
|
const { navigate } = useNavigate();
|
||||||
const location = useLocation();
|
// const location = useLocation();
|
||||||
|
|
||||||
const [favoriteItems, setFavoriteItems] = useState<Array<UserFavorite>>([]);
|
const [favoriteItems, setFavoriteItems] = useState<Array<UserFavorite>>([]);
|
||||||
const [menuIds, setMenuIds] = useState<Array<number | undefined>>([]);
|
const [menuIds, setMenuIds] = useState<Array<number | undefined>>([]);
|
||||||
@@ -52,36 +51,39 @@ export const MenuCategory = ({
|
|||||||
programPath?: string,
|
programPath?: string,
|
||||||
) => {
|
) => {
|
||||||
let userFavorite = useStore.getState().UserStore.userFavorite;
|
let userFavorite = useStore.getState().UserStore.userFavorite;
|
||||||
let randomNum = Math.floor(Math.random() * 3) + 1;
|
|
||||||
if(checked){
|
if(checked){
|
||||||
|
// 즐겨찾기가 4개 이상일 경우 마지막 항목 제거
|
||||||
|
if(userFavorite.length >= 4){
|
||||||
|
userFavorite = userFavorite.slice(0, 3);
|
||||||
|
}
|
||||||
userFavorite = [
|
userFavorite = [
|
||||||
...userFavorite,
|
...userFavorite,
|
||||||
{
|
{
|
||||||
menuId: menuId,
|
menuId: menuId,
|
||||||
menuName: menuName,
|
menuName: menuName,
|
||||||
menuNameEng: menuNameEng,
|
menuNameEng: menuNameEng,
|
||||||
iconFilePath: `${IMAGE_ROOT}/ico_menu_0${randomNum}.svg`,
|
iconFilePath: iconFilePath,
|
||||||
programPath: programPath
|
programPath: programPath
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
userFavorite = userFavorite.filter((value, index) => {
|
userFavorite = userFavorite.filter((value, _) => {
|
||||||
return value.menuId !== menuId
|
return value.menuId !== menuId
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
useStore.getState().UserStore.setUserFavorite(userFavorite);
|
useStore.getState().UserStore.setUserFavorite(userFavorite);
|
||||||
setChangeMenuId(`${menuId}-${checked}`);
|
setChangeMenuId(`${menuId}-${checked}`);
|
||||||
callFavoiteItems();
|
callFavoiteItems();
|
||||||
if(location.pathname === PATHS.home){
|
// if(location.pathname === PATHS.home){
|
||||||
|
|
||||||
}
|
// }
|
||||||
};
|
};
|
||||||
|
|
||||||
const callFavoiteItems = () => {
|
const callFavoiteItems = () => {
|
||||||
let userFavorite = useStore.getState().UserStore.userFavorite;
|
let userFavorite = useStore.getState().UserStore.userFavorite;
|
||||||
setFavoriteItems(userFavorite);
|
setFavoriteItems(userFavorite);
|
||||||
let newArr: Array<number | undefined> = userFavorite.map((value, index) => {
|
let newArr: Array<number | undefined> = userFavorite.map((value, _) => {
|
||||||
return value.menuId;
|
return value.menuId;
|
||||||
});
|
});
|
||||||
setMenuIds(newArr);
|
setMenuIds(newArr);
|
||||||
@@ -158,7 +160,7 @@ export const MenuCategory = ({
|
|||||||
} }
|
} }
|
||||||
>
|
>
|
||||||
<div className="category-header">
|
<div className="category-header">
|
||||||
<div className={ 'category-icon ' + menuIcon }></div>
|
<div className={ 'category-icon ' + iconFilePath }></div>
|
||||||
<span>{ menuName }</span>
|
<span>{ menuName }</span>
|
||||||
</div>
|
</div>
|
||||||
<ul className="category-items">
|
<ul className="category-items">
|
||||||
|
|||||||
Reference in New Issue
Block a user