fix: guard ssh status async state (#3546)

This commit is contained in:
Neil 2026-05-30 01:11:39 -07:00 committed by GitHub
parent 170c995d89
commit 83ea282b7d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 30 additions and 6 deletions

View File

@ -1,4 +1,4 @@
import { useCallback, useEffect, useState } from 'react'
import { useCallback, useEffect, useRef, useState } from 'react'
import { toast } from 'sonner'
import { Loader2, Server, ServerOff } from 'lucide-react'
import {
@ -41,16 +41,28 @@ export function SshDisconnectedDialog({
status
}: SshDisconnectedDialogProps): React.JSX.Element {
const [connecting, setConnecting] = useState(false)
const mountedRef = useRef(true)
useEffect(() => {
mountedRef.current = true
return () => {
mountedRef.current = false
}
}, [])
const handleReconnect = useCallback(async () => {
setConnecting(true)
try {
await window.api.ssh.connect({ targetId })
onOpenChange(false)
if (mountedRef.current) {
onOpenChange(false)
}
} catch (err) {
toast.error(err instanceof Error ? err.message : 'Reconnection failed')
} finally {
setConnecting(false)
if (mountedRef.current) {
setConnecting(false)
}
}
}, [targetId, onOpenChange])

View File

@ -1,4 +1,4 @@
import React, { useCallback, useState } from 'react'
import React, { useCallback, useEffect, useRef, useState } from 'react'
import { AlertTriangle, Cloud, Loader2, MonitorSmartphone, Server, ServerOff } from 'lucide-react'
import { toast } from 'sonner'
import {
@ -113,8 +113,16 @@ function TargetRow({
syncStatus: RemoteWorkspaceSyncStatus | undefined
}): React.JSX.Element {
const [busy, setBusy] = useState(false)
const mountedRef = useRef(true)
const recordFeatureInteraction = useAppStore((s) => s.recordFeatureInteraction)
useEffect(() => {
mountedRef.current = true
return () => {
mountedRef.current = false
}
}, [])
const handleConnect = useCallback(async () => {
setBusy(true)
try {
@ -123,7 +131,9 @@ function TargetRow({
} catch (err) {
toast.error(err instanceof Error ? err.message : 'Connection failed')
} finally {
setBusy(false)
if (mountedRef.current) {
setBusy(false)
}
}
}, [recordFeatureInteraction, targetId])
@ -135,7 +145,9 @@ function TargetRow({
} catch (err) {
toast.error(err instanceof Error ? err.message : 'Disconnect failed')
} finally {
setBusy(false)
if (mountedRef.current) {
setBusy(false)
}
}
}, [recordFeatureInteraction, targetId])