import { useCallback, useEffect, useMemo, useState } from 'react'; import { isElectronMode } from '@renderer/api'; import { Badge } from '@renderer/components/ui/badge'; import { Button } from '@renderer/components/ui/button'; import { useStore } from '@renderer/store'; import { Trash2 } from 'lucide-react'; import { useShallow } from 'zustand/react/shallow'; import { CreateTeamDialog } from './dialogs/CreateTeamDialog'; import { TeamEmptyState } from './TeamEmptyState'; export const TeamListView = (): React.JSX.Element => { const electronMode = isElectronMode(); const [showCreateDialog, setShowCreateDialog] = useState(false); const { teams, teamsLoading, teamsError, fetchTeams, openTeamTab, deleteTeam } = useStore( useShallow((s) => ({ teams: s.teams, teamsLoading: s.teamsLoading, teamsError: s.teamsError, fetchTeams: s.fetchTeams, openTeamTab: s.openTeamTab, deleteTeam: s.deleteTeam, })) ); const { connectionMode, createTeam, cancelProvisioning, provisioningRuns, activeProvisioningRunId, provisioningError, } = useStore( useShallow((s) => ({ connectionMode: s.connectionMode, createTeam: s.createTeam, cancelProvisioning: s.cancelProvisioning, provisioningRuns: s.provisioningRuns, activeProvisioningRunId: s.activeProvisioningRunId, provisioningError: s.provisioningError, })) ); const activeProgress = useMemo( () => (activeProvisioningRunId ? (provisioningRuns[activeProvisioningRunId] ?? null) : null), [activeProvisioningRunId, provisioningRuns] ); const canCreate = electronMode && connectionMode === 'local'; const handleDeleteTeam = useCallback( (teamName: string, e: React.MouseEvent) => { e.stopPropagation(); const confirmed = window.confirm(`Удалить команду "${teamName}"? Это действие необратимо.`); if (!confirmed) { return; } void deleteTeam(teamName); }, [deleteTeam] ); useEffect(() => { if (!electronMode) { return; } void fetchTeams(); }, [electronMode, fetchTeams]); if (!electronMode) { return (
Teams доступен только в Electron-режиме
В browser mode доступ к локальным папкам `~/.claude/teams` недоступен.
Доступно только в local Electron-режиме.
) : null}Не удалось загрузить команды
{teamsError}
{team.description || 'Без описания'}