import React, { useState } from 'react'; import { Box, Popover, Stack, Paper, ScrollArea, Group, UnstyledButton, Text, Loader, Center, ActionIcon, Tooltip, useMantineTheme, } from '@mantine/core'; import { IconFolders, IconSettings, IconFolderPlus } from '@tabler/icons-react'; import { useWorkspace } from '../../contexts/WorkspaceContext'; import { useModalContext } from '../../contexts/ModalContext'; import { listWorkspaces } from '../../api/workspace'; import CreateWorkspaceModal from '../modals/workspace/CreateWorkspaceModal'; import type { Workspace } from '../../types/workspace'; const WorkspaceSwitcher: React.FC = () => { const { currentWorkspace, switchWorkspace } = useWorkspace(); const { setSettingsModalVisible, setCreateWorkspaceModalVisible } = useModalContext(); const [workspaces, setWorkspaces] = useState([]); const [loading, setLoading] = useState(false); const [popoverOpened, setPopoverOpened] = useState(false); const theme = useMantineTheme(); const loadWorkspaces = async (): Promise => { setLoading(true); try { const list = await listWorkspaces(); setWorkspaces(list); } catch (error) { console.error('Failed to load workspaces:', error); } setLoading(false); }; const handleCreateWorkspace = (): void => { setPopoverOpened(false); setCreateWorkspaceModalVisible(true); }; const handleWorkspaceCreated = async ( newWorkspace: Workspace ): Promise => { await loadWorkspaces(); switchWorkspace(newWorkspace.name); }; return ( <> { setPopoverOpened((o) => !o); if (!popoverOpened) { loadWorkspaces(); } }} >
{currentWorkspace?.name || 'No workspace'}
Workspaces {loading ? (
) : ( workspaces.map((workspace) => { const isSelected = workspace.name === currentWorkspace?.name; return ( ({ backgroundColor: isSelected ? theme.colors.blue[ theme.colorScheme === 'dark' ? 8 : 1 ] : undefined, borderColor: isSelected ? theme.colors.blue[ theme.colorScheme === 'dark' ? 7 : 5 ] : undefined, })} > { switchWorkspace(workspace.name); setPopoverOpened(false); }} > {workspace.name} {new Date( workspace.createdAt ).toLocaleDateString()} {isSelected && ( { e.stopPropagation(); setSettingsModalVisible(true); setPopoverOpened(false); }} > )} ); }) )}
); }; export default WorkspaceSwitcher;