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
);
};