Render Menu from the backend
Render menu via backend
...
import { fetcher } from 'utils/axios';
// types
import { MenuProps, NavItemType } from 'types/menu';
export const endpoints = {
key: 'api/menu',
dashboard: '/dashboard' // server URL
};
...
export function useGetMenu() {
const { data, isLoading, error, isValidating } = useSWR(endpoints.key + endpoints.dashboard, fetcher, {
revalidateIfStale: false,
revalidateOnFocus: false,
revalidateOnReconnect: false
});
const memoizedValue = useMemo(() => {
let updatedMenu = data?.dashboard;
if (updatedMenu && Array.isArray(updatedMenu.children) && updatedMenu.children.length > 0) {
updatedMenu = {
...updatedMenu,
children: updatedMenu.children.map((group: NavItemType) => {
if (Array.isArray(group.children)) {
return {
...group,
children: [...group.children, staticMenuItem]
};
}
return group;
})
};
}
return {
menu: updatedMenu as NavItemType,
menuLoading: isLoading,
menuError: error,
menuValidating: isValidating,
menuEmpty: !isLoading && !data?.length
};
}, [data, error, isLoading, isValidating]);
return memoizedValue;
}
...Last updated