import { Search } from 'lucide-react'; import React, { useMemo, useState, useEffect } from 'react'; import { useI18n } from '../application/i18n/I18nProvider'; import { Host } from '../types'; import { DistroAvatar } from './DistroAvatar'; import { Button } from './ui/button'; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from './ui/dialog'; import { Input } from './ui/input'; import { Label } from './ui/label'; import { ScrollArea } from './ui/scroll-area'; interface CreateWorkspaceDialogProps { isOpen: boolean; onClose: () => void; hosts: Host[]; onCreate: (name: string, selectedHosts: Host[]) => void; } export const CreateWorkspaceDialog: React.FC = ({ isOpen, onClose, hosts, onCreate, }) => { const { t } = useI18n(); const [name, setName] = useState(''); const [search, setSearch] = useState(''); const [selectedHostIds, setSelectedHostIds] = useState>(new Set()); const filteredHosts = useMemo(() => { if (!search.trim()) return hosts; const term = search.toLowerCase(); return hosts.filter(h => h.label.toLowerCase().includes(term) || h.hostname.toLowerCase().includes(term) || (h.group || '').toLowerCase().includes(term) ); }, [hosts, search]); const toggleHost = (hostId: string) => { setSelectedHostIds(prev => { const next = new Set(prev); if (next.has(hostId)) { next.delete(hostId); } else { next.add(hostId); } return next; }); }; const handleCreate = () => { const selected = hosts.filter(h => selectedHostIds.has(h.id)); onCreate(name, selected); onClose(); }; useEffect(() => { if (isOpen) { setName(''); setSearch(''); setSelectedHostIds(new Set()); } }, [isOpen]); return ( !open && onClose()}> {t('dialog.createWorkspace.title', { defaultValue: 'Create Workspace' })}
setName(e.target.value)} placeholder={t('placeholder.workspaceName', { defaultValue: 'Workspace Name' })} autoFocus />
setSearch(e.target.value)} className="pl-8" />
{filteredHosts.length === 0 ? (
{t('common.noResults', { defaultValue: 'No hosts found' })}
) : ( filteredHosts.map(host => { const isSelected = selectedHostIds.has(host.id); return (
toggleHost(host.id)} >
{isSelected &&
}
{host.label}
{host.hostname}
); }) )}
{selectedHostIds.size} {t('common.selected', { defaultValue: 'selected' })}
); };