import styles from './Header.module.scss'; import { CurrentUserDto } from '../../../lib/types/user-response.interface'; import { useEffect, useState } from 'react'; import userHasPrivileges from '../../../lib/utils/has-privileges'; import Link from 'next/link'; import { useRouter } from 'next/router'; import conditionalClass from '../../../lib/utils/conditional-class'; const navItems = [ { title: 'Home', path: '/', }, { path: '/users', title: 'Users', privileges: ['admin', 'admin:user'], }, { path: '/privileges', title: 'Privileges', privileges: ['admin', 'admin:user:privilege'], }, { path: '/oauth2', title: 'OAuth2', privileges: [['admin', 'admin:oauth2'], 'self:oauth2'], }, { path: '/documents', title: 'Documents', privileges: ['admin:document'], }, ]; const useAvailableNavigation = (user?: CurrentUserDto) => { const [stateList, setStateList] = useState( Array.from({ length: navItems.length }, (_, i) => i === 0) ); useEffect(() => { if (!user) { return; } let newList: boolean[] = []; navItems.forEach((item, index) => { newList[index] = item.privileges ? userHasPrivileges(user, ...item.privileges) : true; }); setStateList(newList); }, [user]); return stateList; }; export const Header = ({ user }: { user?: CurrentUserDto }) => { const router = useRouter(); const privileges = useAvailableNavigation(user); return ( ); };