feat: reconnect all disconnected terminal tabs (#1523)

This commit is contained in:
ZacharyZcR authored and GitHub committed 2026-09-30 09:48:15 -05:00
1 parent 5860921cbe
commit e161ad22e0
12 files changed
+265 -17

No files matched your search

@@ -1357,6 +1357,24 @@ const TerminalInner = forwardRef<TerminalHandle, SSHTerminalProps>(
}, 15000);
}
function reconnectTerminal() {
isUnmountingRef.current = false;
shouldNotReconnectRef.current = false;
isReconnectingRef.current = false;
isConnectingRef.current = false;
reconnectAttempts.current = 0;
wasDisconnectedBySSH.current = false;
wasConnectedRef.current = false;
updateConnectionError(null);
setShowDisconnectedOverlay(false);
if (terminal) {
terminal.clear();
const cols = terminal.cols;
const rows = terminal.rows;
connectToHost(cols, rows);
}
}
useImperativeHandle(
ref,
() => ({
@@ -1396,22 +1414,19 @@ const TerminalInner = forwardRef<TerminalHandle, SSHTerminalProps>(
setIsConnected(false);
setIsConnecting(false);
},
reconnect: () => {
isUnmountingRef.current = false;
shouldNotReconnectRef.current = false;
isReconnectingRef.current = false;
isConnectingRef.current = false;
reconnectAttempts.current = 0;
wasDisconnectedBySSH.current = false;
wasConnectedRef.current = false;
updateConnectionError(null);
setShowDisconnectedOverlay(false);
if (terminal) {
terminal.clear();
const cols = terminal.cols;
const rows = terminal.rows;
connectToHost(cols, rows);
}
reconnect: reconnectTerminal,
reconnectIfDisconnected: () => {
if (
!terminal ||
isConnected ||
isUnmountingRef.current ||
isConnectingRef.current ||
isReconnectingRef.current ||
reconnectTimeoutRef.current !== null
)
return false;
reconnectTerminal();
return true;
},
isConnected: () => isConnected,
fit: () => {
@@ -24,6 +24,7 @@ export interface TerminalHostConfig {
export interface TerminalHandle {
disconnect: () => void;
reconnect: () => void;
reconnectIfDisconnected: () => boolean;
isConnected: () => boolean;
fit: () => void;
focus: () => void;