'use client'; import { useState, useEffect } from 'react'; import type { Server } from '../../types/server'; 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 [selectedMode, setSelectedMode] = useState<'local' | 'ssh'>('local'); const [selectedServer, setSelectedServer] = useState(null); useEffect(() => { if (isOpen) { void fetchServers(); } }, [isOpen]); 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 (selectedMode === 'ssh' && !selectedServer) { setError('Please select a server for SSH execution'); return; } onExecute(selectedMode, selectedServer ?? undefined); onClose(); }; const handleModeChange = (mode: 'local' | 'ssh') => { setSelectedMode(mode); if (mode === 'local') { setSelectedServer(null); } }; if (!isOpen) return null; return (
{/* Header */}

Execution Mode

{/* Content */}

Where would you like to execute "{scriptName}"?

{error && (

{error}

)} {/* Execution Mode Selection */}
{/* SSH Execution */}
handleModeChange('ssh')} >
handleModeChange('ssh')} className="h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300" />
{/* Server Selection (only for SSH mode) */} {selectedMode === 'ssh' && (
{loading ? (

Loading servers...

) : servers.length === 0 ? (

No servers configured

Add servers in Settings to use SSH execution

) : ( )}
)} {/* Action Buttons */}
); }