즐겨찾기 끝

This commit is contained in:
focp212@naver.com
2025-11-13 14:59:28 +09:00
parent ba7ed55d32
commit bf2a3f7dcc
3 changed files with 56 additions and 17 deletions

View File

@@ -4,7 +4,7 @@ import { Swiper, SwiperSlide } from 'swiper/react';
import 'swiper/css'; 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 { useFavoriteEditOnStore, useMenuOnStore, useStore } from '@/shared/model/store'; import { useFavoriteEditOnStore, useMenuIds, useMenuOnStore, useStore } from '@/shared/model/store';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { showAlert } from '@/widgets/show-alert'; import { showAlert } from '@/widgets/show-alert';
import { checkGrant } from '@/shared/lib/check-grant'; import { checkGrant } from '@/shared/lib/check-grant';
@@ -23,6 +23,7 @@ export const FavoriteWrapper = ({
const { menuOn, setMenuOn } = useMenuOnStore(); const { menuOn, setMenuOn } = useMenuOnStore();
const { favoriteEditOn, setFavoriteEditOn } = useFavoriteEditOnStore(); const { favoriteEditOn, setFavoriteEditOn } = useFavoriteEditOnStore();
const { menuIds, setMenuIds, deleteMenuId} = useMenuIds();
const [favoriteItems, setFavoriteItems] = useState<Array<UserFavorite>>([]); const [favoriteItems, setFavoriteItems] = useState<Array<UserFavorite>>([]);
@@ -56,6 +57,17 @@ export const FavoriteWrapper = ({
setFavoriteItems(userFavorite); setFavoriteItems(userFavorite);
}; };
const onClickToRemoveItem = (item?: UserFavorite) => {
let newFavorite: Array<UserFavorite> = favoriteItems.filter((value, index) => {
return value.menuId !== item?.menuId;
});
useStore.getState().UserStore.setUserFavorite(newFavorite);
setFavoriteItems(newFavorite);
if(item?.menuId){
deleteMenuId(item?.menuId);
}
};
const makeFavoriteItems = () => { const makeFavoriteItems = () => {
let rs = []; let rs = [];
for(let i=0;i<favoriteItems.length;i++){ for(let i=0;i<favoriteItems.length;i++){
@@ -74,6 +86,17 @@ export const FavoriteWrapper = ({
src={ favoriteItems[i]?.iconFilePath || '' } src={ favoriteItems[i]?.iconFilePath || '' }
alt={ displayName } alt={ displayName }
/> />
{ favoriteEditOn &&
<span
className="btn_delect"
onClick={ () => onClickToRemoveItem(favoriteItems[i]) }
>
<img
src={ IMAGE_ROOT + '/ico_app_delete.svg' }
alt="삭제"
/>
</span>
}
</div> </div>
<span className="swiper-text">{ displayName }</span> <span className="swiper-text">{ displayName }</span>
</div> </div>

View File

@@ -1,5 +1,5 @@
import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { useNavigate } from '@/shared/lib/hooks/use-navigate';
import { useFavoriteEditOnStore, useMenuOnStore, useStore } from '@/shared/model/store'; import { useFavoriteEditOnStore, useMenuIds, useMenuOnStore, useStore } from '@/shared/model/store';
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 { MenuItem } from '../model/types'; import { MenuItem } from '../model/types';
@@ -33,10 +33,11 @@ export const MenuCategory = ({
const { t, i18n } = useTranslation(); const { t, i18n } = useTranslation();
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>>([]);
const { menuOn, setMenuOn } = useMenuOnStore(); const { menuOn, setMenuOn } = useMenuOnStore();
const { favoriteEditOn, setFavoriteEditOn } = useFavoriteEditOnStore(); const { favoriteEditOn, setFavoriteEditOn } = useFavoriteEditOnStore();
const { menuIds, setMenuIds, deleteMenuId} = useMenuIds();
const onClickToNavigate = (menuId?: number, path?: string) => { const onClickToNavigate = (menuId?: number, path?: string) => {
if(menuId && checkGrant(menuId, 'R')){ if(menuId && checkGrant(menuId, 'R')){
@@ -97,27 +98,16 @@ export const MenuCategory = ({
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, _) => { let newArr: Array<number | undefined> = userFavorite.map((value, index) => {
return value.menuId; return value.menuId;
}); });
setMenuIds(newArr); setMenuIds(newArr);
}; };
useEffect(() => {
callFavoiteItems();
}, []);
useEffect(() => { useEffect(() => {
callFavoiteItems(); callFavoiteItems();
}, [changeMenuId]); }, [changeMenuId]);
useEffect(() => {
if(menuIds.length > 0) {
// callShortcutSave();
}
}, [menuIds]);
const getMenuItems = () => { const getMenuItems = () => {
let rs = []; let rs = [];
if(subMenu){ if(subMenu){

View File

@@ -14,12 +14,19 @@ export interface FavoriteEditOnStore {
favoriteEditOn: boolean; favoriteEditOn: boolean;
setFavoriteEditOn: (favoriteEditOn: boolean) => void; setFavoriteEditOn: (favoriteEditOn: boolean) => void;
}; };
export interface MenuIdsStore {
menuIds: Array<number | undefined>;
setMenuIds: (menuIds: Array<number | undefined>) => void;
deleteMenuId: (menuId: number) => void;
};
export const useMenuOnStore = create<MenuOnStore>((set) => ({ export const useMenuOnStore = create<MenuOnStore>((set) => ({
menuOn: false, menuOn: false,
setMenuOn: (menuOn: boolean) => { setMenuOn: (menuOn: boolean) => {
set((state: { menuOn: boolean}) => ({ set((state: { menuOn: boolean}) => ({
menuOn: (state.menuOn = menuOn) menuOn: (state.menuOn = menuOn)
})) }));
} }
})); }));
export const useFavoriteEditOnStore = create<FavoriteEditOnStore>((set) => ({ export const useFavoriteEditOnStore = create<FavoriteEditOnStore>((set) => ({
@@ -27,7 +34,26 @@ export const useFavoriteEditOnStore = create<FavoriteEditOnStore>((set) => ({
setFavoriteEditOn: (favoriteEditOn: boolean) => { setFavoriteEditOn: (favoriteEditOn: boolean) => {
set((state: { favoriteEditOn: boolean}) => ({ set((state: { favoriteEditOn: boolean}) => ({
favoriteEditOn: (state.favoriteEditOn = favoriteEditOn) favoriteEditOn: (state.favoriteEditOn = favoriteEditOn)
})) }));
}
}));
export const useMenuIds = create<MenuIdsStore>((set) => ({
menuIds: [],
setMenuIds: (menuIds: Array<number | undefined>) => {
set((state: {menuIds: Array<number | undefined>}) => ({
menuIds: (state.menuIds = menuIds)
}));
},
deleteMenuId: (menuId: number) => {
set((state: {menuIds: Array<number | undefined>}) => ({
menuIds: (state.menuIds = state.menuIds.filter((
val?: number,
idx?: number
) => {
console.log(val, idx);
return val !== menuId;
}))
}));
} }
})); }));