From 5191edfc0c37f0414f4a6dfc554469b699095793 Mon Sep 17 00:00:00 2001 From: MacRimi Date: Sat, 6 Dec 2025 19:31:07 +0100 Subject: [PATCH] Update AppImage --- AppImage/components/script-terminal-modal.tsx | 26 ++++++++++++++++++- AppImage/components/terminal-panel.tsx | 14 +++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/AppImage/components/script-terminal-modal.tsx b/AppImage/components/script-terminal-modal.tsx index 97dea0e..e6c1238 100644 --- a/AppImage/components/script-terminal-modal.tsx +++ b/AppImage/components/script-terminal-modal.tsx @@ -50,6 +50,9 @@ export function ScriptTerminalModal({ const checkConnectionInterval = useRef(null) const isMobile = useIsMobile() + const [isWaitingNextInteraction, setIsWaitingNextInteraction] = useState(false) + const waitingTimeoutRef = useRef(null) + const [modalHeight, setModalHeight] = useState(80) const [isResizing, setIsResizing] = useState(false) const startYRef = useRef(0) @@ -62,6 +65,7 @@ export function ScriptTerminalModal({ setInteractionInput("") setCurrentInteraction(null) setIsConnected(false) + setIsWaitingNextInteraction(false) checkConnectionInterval.current = setInterval(() => { if (wsRef.current) { @@ -74,6 +78,9 @@ export function ScriptTerminalModal({ if (checkConnectionInterval.current) { clearInterval(checkConnectionInterval.current) } + if (waitingTimeoutRef.current) { + clearTimeout(waitingTimeoutRef.current) + } } }, [open]) @@ -135,6 +142,10 @@ export function ScriptTerminalModal({ } const handleWebInteraction = (interaction: WebInteraction) => { + setIsWaitingNextInteraction(false) + if (waitingTimeoutRef.current) { + clearTimeout(waitingTimeoutRef.current) + } setCurrentInteraction(interaction) } @@ -162,6 +173,10 @@ export function ScriptTerminalModal({ setCurrentInteraction(null) setInteractionInput("") + + waitingTimeoutRef.current = setTimeout(() => { + setIsWaitingNextInteraction(true) + }, 300) } const handleCloseModal = () => { @@ -201,7 +216,7 @@ export function ScriptTerminalModal({ -
+
+ + {isWaitingNextInteraction && !currentInteraction && ( +
+
+ +

Processing...

+
+
+ )}
{!isMobile && ( diff --git a/AppImage/components/terminal-panel.tsx b/AppImage/components/terminal-panel.tsx index 61820d1..3806e58 100644 --- a/AppImage/components/terminal-panel.tsx +++ b/AppImage/components/terminal-panel.tsx @@ -136,14 +136,14 @@ const proxmoxCommands = [ { cmd: "clear", desc: "Clear terminal screen" }, ] -export const TerminalPanel: React.FC = ({ +export function TerminalPanel({ websocketUrl, onClose, initMessage, onWebInteraction, onWebSocketCreated, isScriptModal = false, -}) => { +}: TerminalPanelProps) { const [terminals, setTerminals] = useState([]) const [activeTerminalId, setActiveTerminalId] = useState("") const [layout, setLayout] = useState<"single" | "grid">("grid") @@ -704,7 +704,13 @@ export const TerminalPanel: React.FC = ({ containerRefs.current["main"] = el }} className={`overflow-hidden flex flex-col ${isMobile ? "flex-1 h-[60vh]" : "overflow-hidden"} w-full max-w-full`} - style={!isMobile || isTablet ? { height: `${terminalHeight}px`, flexShrink: 0 } : undefined} + style={ + isScriptModal + ? { height: "100%", flexShrink: 0 } + : !isMobile || isTablet + ? { height: `${terminalHeight}px`, flexShrink: 0 } + : undefined + } > {isMobile ? ( @@ -754,7 +760,7 @@ export const TerminalPanel: React.FC = ({ onClick={() => setActiveTerminalId(terminal.id)} className={`text-xs font-medium ${ activeTerminalId === terminal.id ? "text-blue-400" : "text-zinc-500" - }`} + } ${isScriptModal ? "hidden" : ""}`} > {terminal.title}