diff --git a/src/app/_components/ExecutionModeModal.tsx b/src/app/_components/ExecutionModeModal.tsx index 6299dea..6bd6d99 100644 --- a/src/app/_components/ExecutionModeModal.tsx +++ b/src/app/_components/ExecutionModeModal.tsx @@ -3,6 +3,7 @@ import { useState, useEffect } from 'react'; import type { Server } from '../../types/server'; import { Button } from './ui/button'; +import { SettingsModal } from './SettingsModal'; interface ExecutionModeModalProps { isOpen: boolean; @@ -15,15 +16,33 @@ export function ExecutionModeModal({ isOpen, onClose, onExecute, scriptName }: E 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); + 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); @@ -42,110 +61,60 @@ export function ExecutionModeModal({ isOpen, onClose, onExecute, scriptName }: E }; const handleExecute = () => { - if (selectedMode === 'ssh' && !selectedServer) { + if (!selectedServer) { setError('Please select a server for SSH execution'); return; } - onExecute(selectedMode, selectedServer ?? undefined); + onExecute('ssh', selectedServer); 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}"? -

- + <> +
+
+ {/* Header */} +
+

Select Server

+
- {error && ( -
-
-
- - - -
-
-

{error}

-
-
+ {/* Content */} +
+
+

+ Select server to execute "{scriptName}" +

- )} - - {/* Execution Mode Selection */} -
- - {/* SSH Execution */} -
handleModeChange('ssh')} - > -
- handleModeChange('ssh')} - className="h-4 w-4 text-primary focus:ring-primary border-border" - /> -
+ )} - {/* Server Selection (only for SSH mode) */} - {selectedMode === 'ssh' && ( + {/* Server Selection */}