import { Group } from '@mantine/core'; import { closeAllModals, openModal } from '@mantine/modals'; import { useQueryClient } from '@tanstack/react-query'; import { RiLock2Line, RiLogoutBoxLine, RiMenu3Fill, RiSearch2Line, RiSettings2Fill, RiSettings2Line, RiEdit2Line, RiUserAddLine, RiProfileLine, } from 'react-icons/ri'; import { useNavigate } from 'react-router'; import { queryKeys } from '@/renderer/api/query-keys'; import { UserDetailResponse } from '@/renderer/api/users.api'; import { Button, DropdownMenu, Text } from '@/renderer/components'; import { ServerList, useServerList } from '@/renderer/features/servers'; import { Settings } from '@/renderer/features/settings'; import { usePermissions } from '@/renderer/features/shared'; import { UserList } from '@/renderer/features/users'; import { EditUserForm } from '@/renderer/features/users/components/edit-user-form'; import { useAuthStore } from '@/renderer/store'; export const AppMenu = () => { const queryClient = useQueryClient(); const navigate = useNavigate(); const logout = useAuthStore((state) => state.logout); const currentServer = useAuthStore((state) => state.currentServer); const setCurrentServer = useAuthStore((state) => state.setCurrentServer); const serverCredentials = useAuthStore((state) => state.serverCredentials); const permissions = usePermissions(); const { data: servers } = useServerList(); const userId = useAuthStore((state) => state.permissions.id); const user = queryClient.getQueryData( queryKeys.users.detail(userId) ); const serverList = servers?.data?.map((s) => ({ id: s.id, label: `${s.name}`, noCredential: s.noCredential, })) ?? []; const handleLogout = () => { logout(); navigate('/login'); }; const handleManageServersModal = () => { openModal({ centered: true, children: , exitTransitionDuration: 300, overflow: 'inside', title: 'Manage Servers', transition: 'slide-down', }); }; const handleEditProfileModal = () => { openModal({ centered: true, children: ( ), exitTransitionDuration: 300, overflow: 'inside', size: 'lg', title: 'Edit Profile', transition: 'slide-down', }); }; const handleManageUsersModal = () => { openModal({ centered: true, children: , exitTransitionDuration: 300, overflow: 'inside', title: 'Manage Users', transition: 'slide-down', }); }; const handleSettingsModal = () => { openModal({ centered: true, children: , exitTransitionDuration: 300, overflow: 'inside', size: 'xl', title: ( Settings ), transition: 'slide-down', }); }; const handleSetCurrentServer = (serverId: string) => { const server = servers?.data.find((s) => s.id === serverId); if (!server) return; setCurrentServer(server); queryClient.invalidateQueries(queryKeys.server.root(serverId)); }; return ( Server switcher {serverList.map((s) => { const requiresCredential = !serverCredentials.some( (c) => c.serverId === s.id && c.enabled ); return ( handleSetCurrentServer(s.id)} > {requiresCredential && ( )} {s.label} ); })} }> Search } onClick={handleSettingsModal} > Settings } onClick={handleEditProfileModal} > Edit profile {(permissions.isAdmin || permissions.isMusicServerAdmin) && ( } onClick={handleManageUsersModal} > Manage users )} } onClick={handleManageServersModal} > Manage servers } onClick={handleLogout} > Log out ); };