File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
import {useEffect, useState} from 'react';
import {apiClient} from '../../api/apiClient';
import type {MenuItem} from '../component/menu/MenuList';
type BackendMenuItem = {
menuNo?: number | string;
menuNm?: string;
url?: string;
upperMenuId?: number | string;
};
type MenuLeftResponse = {
head?: BackendMenuItem[];
menu?: BackendMenuItem[];
};
function toMenuItem(item: BackendMenuItem): MenuItem {
return {
no: String(item.menuNo ?? ''),
name: item.menuNm ?? '',
url: item.url ?? '#',
upperNo: String(item.upperMenuId ?? '0'),
};
}
export const useMenuList = () => {
const [headMenuList, setHeadMenuList] = useState<MenuItem[]>([]);
const [menuList, setMenuList] = useState<MenuItem[]>([]);
const [isLoading, setIsLoading] = useState(true);
const [errorMessage, setErrorMessage] = useState<string | null>(null);
useEffect(() => {
let mounted = true;
apiClient.get<MenuLeftResponse>('/sym/mms/menuLeft.do')
.then((data) => {
if (!mounted) {
return;
}
const nextHeadMenuList = (data.head ?? []).map(toMenuItem).filter((item) => item.no && item.name);
const nextMenuList = (data.menu ?? []).map(toMenuItem).filter((item) => item.no && item.name);
setHeadMenuList(nextHeadMenuList.length > 0 ? nextHeadMenuList : []);
setMenuList(nextMenuList.length > 0 ? nextMenuList : []);
setErrorMessage(null);
})
.catch((error: Error) => {
if (!mounted) {
return;
}
setErrorMessage(error ? error.message : '메뉴 조회에 실패했습니다.');
})
.finally(() => {
if (mounted) {
setIsLoading(false);
}
});
return () => {
mounted = false;
};
}, []);
return {
headMenuList,
menuList,
isLoading,
errorMessage,
};
};