import VersionStatus from '@app/components/Layout/VersionStatus'; import useClickOutside from '@app/hooks/useClickOutside'; import { Permission, useUser } from '@app/hooks/useUser'; import { Transition } from '@headlessui/react'; import { ClockIcon, CogIcon, ExclamationTriangleIcon, FilmIcon, SparklesIcon, TvIcon, UsersIcon, XMarkIcon, } from '@heroicons/react/24/outline'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { Fragment, useRef } from 'react'; import { defineMessages, useIntl } from 'react-intl'; export const menuMessages = defineMessages({ dashboard: 'Discover', browsemovies: 'Movies', browsetv: 'Series', requests: 'Requests', issues: 'Issues', users: 'Users', settings: 'Settings', }); interface SidebarProps { open?: boolean; setClosed: () => void; } interface SidebarLinkProps { href: string; svgIcon: React.ReactNode; messagesKey: keyof typeof menuMessages; activeRegExp: RegExp; as?: string; requiredPermission?: Permission | Permission[]; permissionType?: 'and' | 'or'; dataTestId?: string; } const SidebarLinks: SidebarLinkProps[] = [ { href: '/', messagesKey: 'dashboard', svgIcon: , activeRegExp: /^\/(discover\/?)?$/, }, { href: '/discover/movies', messagesKey: 'browsemovies', svgIcon: , activeRegExp: /^\/discover\/movies$/, }, { href: '/discover/tv', messagesKey: 'browsetv', svgIcon: , activeRegExp: /^\/discover\/tv$/, }, { href: '/requests', messagesKey: 'requests', svgIcon: , activeRegExp: /^\/requests/, }, { href: '/issues', messagesKey: 'issues', svgIcon: , activeRegExp: /^\/issues/, requiredPermission: [ Permission.MANAGE_ISSUES, Permission.CREATE_ISSUES, Permission.VIEW_ISSUES, ], permissionType: 'or', }, { href: '/users', messagesKey: 'users', svgIcon: , activeRegExp: /^\/users/, requiredPermission: Permission.MANAGE_USERS, dataTestId: 'sidebar-menu-users', }, { href: '/settings', messagesKey: 'settings', svgIcon: , activeRegExp: /^\/settings/, requiredPermission: Permission.ADMIN, dataTestId: 'sidebar-menu-settings', }, ]; const Sidebar = ({ open, setClosed }: SidebarProps) => { const navRef = useRef(null); const router = useRouter(); const intl = useIntl(); const { hasPermission } = useUser(); useClickOutside(navRef, () => setClosed()); return ( <>
<>
{hasPermission(Permission.ADMIN) && (
setClosed()} />
)}
{/* */}
{hasPermission(Permission.ADMIN) && (
)}
); }; export default Sidebar;