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 '../../hooks/useWorkspace'; import { useModalContext } from '../../contexts/ModalContext'; import { listWorkspaces } from '../../api/workspace'; import CreateWorkspaceModal from '../modals/workspace/CreateWorkspaceModal'; import type { Workspace } from '@/types/models'; import { getConditionalColor, getWorkspacePaperStyle, } from '@/utils/themeStyles'; 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(); await switchWorkspace(newWorkspace.name); }; return ( <> { setPopoverOpened((o) => !o); if (!popoverOpened) { void loadWorkspaces(); } }} >
{currentWorkspace?.name || 'No workspace'}
Workspaces {loading ? (
) : ( workspaces.map((workspace) => { const isSelected = workspace.id === currentWorkspace?.id; return ( getWorkspacePaperStyle(theme, isSelected) } > { void switchWorkspace(workspace.name); setPopoverOpened(false); }} > {workspace.name} {new Date( workspace.createdAt ).toLocaleDateString()} {isSelected && ( { e.stopPropagation(); setSettingsModalVisible(true); setPopoverOpened(false); }} > )} ); }) )}
); }; export default WorkspaceSwitcher;