import { useEffect, useState } from 'react'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { Swiper, SwiperSlide } from 'swiper/react'; import 'swiper/css'; import { IMAGE_ROOT } from '@/shared/constants/common'; import { UserFavorite } from '@/entities/user/model/types'; import { useFavoriteEditOnStore, useMenuOnStore, useStore } from '@/shared/model/store'; import { useTranslation } from 'react-i18next'; import { showAlert } from '@/widgets/show-alert'; import { checkGrant } from '@/shared/lib/check-grant'; export interface FavoriteWrapperProps { usingType: 'home' | 'menu', changeMenuId?: string; }; export const FavoriteWrapper = ({ usingType, changeMenuId, }: FavoriteWrapperProps) => { const { navigate } = useNavigate(); const { i18n, t } = useTranslation(); const { menuOn, setMenuOn } = useMenuOnStore(); const { favoriteEditOn, setFavoriteEditOn } = useFavoriteEditOnStore(); const [favoriteItems, setFavoriteItems] = useState>([]); const itemAdd: UserFavorite = { menuId: -1, menuName: t('favorite.edit'), menuNameEng: t('favorite.edit'), iconFilePath: IMAGE_ROOT + '/ico_menu_plus.svg', programPath: '', }; const onClickToFavoriteEdit = () => { setMenuOn(true); setFavoriteEditOn(true); }; const onClickToNavigate = (menuId?: number, path?: string) => { if(menuId && checkGrant(menuId, 'R')){ if(!!path){ navigate(path); setMenuOn(false); } } else{ showAlert(t('common.nopermission')); } }; const getFavoriteList = () => { let userFavorite = useStore.getState().UserStore.userFavorite; setFavoriteItems(userFavorite); }; const makeFavoriteItems = () => { let rs = []; for(let i=0;i
!favoriteEditOn && onClickToNavigate(favoriteItems[i]?.menuId, favoriteItems[i]?.programPath) } >
{
{ displayName }
); } return rs; }; const makeAddFavoriteItem = () => { let rs = []; if(!favoriteEditOn){ rs.push(
{
{ itemAdd.menuName }
); } return rs; }; useEffect(() => { getFavoriteList(); }, [changeMenuId, favoriteEditOn]); return ( <> { (favoriteItems.length > 0) && makeFavoriteItems() } { makeAddFavoriteItem() } ); };