'use client'; import { useState, useEffect } from 'react'; import type { Server } from '../../types/server'; import { Button } from './ui/button'; import { ColorCodedDropdown } from './ColorCodedDropdown'; import { SettingsModal } from './SettingsModal'; interface ExecutionModeModalProps { isOpen: boolean; onClose: () => void; onExecute: (mode: 'local' | 'ssh', server?: Server) => void; scriptName: string; } export function ExecutionModeModal({ isOpen, onClose, onExecute, scriptName }: ExecutionModeModalProps) { const [servers, setServers] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [selectedServer, setSelectedServer] = useState(null); const [hasAutoExecuted, setHasAutoExecuted] = useState(false); const [settingsModalOpen, setSettingsModalOpen] = useState(false); useEffect(() => { if (isOpen) { setHasAutoExecuted(false); void fetchServers(); } }, [isOpen]); // Auto-execute when exactly one server is available useEffect(() => { if (isOpen && !loading && servers.length === 1 && !hasAutoExecuted) { setHasAutoExecuted(true); onExecute('ssh', servers[0]); onClose(); } }, [isOpen, loading, servers, hasAutoExecuted, onExecute, onClose]); // Refresh servers when settings modal closes const handleSettingsModalClose = () => { setSettingsModalOpen(false); // Refetch servers to reflect any changes made in settings void fetchServers(); }; const fetchServers = async () => { setLoading(true); setError(null); try { const response = await fetch('/api/servers'); if (!response.ok) { throw new Error('Failed to fetch servers'); } const data = await response.json(); setServers(data as Server[]); } catch (err) { setError(err instanceof Error ? err.message : 'An error occurred'); } finally { setLoading(false); } }; const handleExecute = () => { if (!selectedServer) { setError('Please select a server for SSH execution'); return; } onExecute('ssh', selectedServer); onClose(); }; const handleServerSelect = (server: Server | null) => { setSelectedServer(server); }; if (!isOpen) return null; return ( <>
{/* Header */}

Select Server

{/* Content */}

Select server to execute "{scriptName}"

{error && (

{error}

)} {/* Server Selection */}
{loading ? (

Loading servers...

) : servers.length === 0 ? (

No servers configured

Add servers in Settings to execute scripts

) : ( )}
{/* Action Buttons */}
{/* Server Settings Modal */} ); }