import { Group } from '@mantine/core'; import { openModal, closeAllModals } from '@mantine/modals'; import { useQueryClient } from '@tanstack/react-query'; import { RiLock2Line, RiLogoutBoxLine, RiMenu3Fill } from 'react-icons/ri'; import { useNavigate } from 'react-router'; import { queryKeys } from '@/renderer/api/query-keys'; import { Button, DropdownMenu } from '@/renderer/components'; import { AddServerForm, ServerList, useServerList, } from '@/renderer/features/servers'; import { Settings } from '@/renderer/features/settings'; import { usePermissions } from '@/renderer/features/shared'; 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 serverList = servers?.data?.map((s) => ({ id: s.id, label: `${s.name}`, noCredential: s.noCredential, })) ?? []; const handleLogout = () => { logout(); navigate('/login'); }; const handleAddServerModal = () => { openModal({ centered: true, children: , title: 'Add server', }); }; const handleManageServersModal = () => { openModal({ centered: true, children: , title: 'Manage servers', }); }; const handleSettingsModal = () => { openModal({ centered: true, children: , size: 'xl', title: 'Settings', }); }; 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 Settings {permissions.createServer && ( Add server )} Manage servers Manage users } onClick={handleLogout} > Log out ); };