diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index 8189259eef9..58628fe3148 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -413,18 +413,19 @@ function App(): React.JSX.Element { const setFloatingTerminalOpenWithFocus = useCallback( (nextOpen: SetStateAction): void => { - setFloatingTerminalOpen((currentOpen) => { - const resolvedOpen = typeof nextOpen === 'function' ? nextOpen(currentOpen) : nextOpen - if (resolvedOpen && !currentOpen) { - useAppStore.getState().recordFeatureInteraction('floating-workspace') - rememberFloatingTerminalReturnFocus() - } else if (!resolvedOpen && currentOpen) { - restoreFloatingTerminalReturnFocus() - } - return resolvedOpen - }) + const resolvedOpen = + typeof nextOpen === 'function' ? nextOpen(floatingTerminalOpen) : nextOpen + // Why: recordFeatureInteraction updates Zustand subscribers; doing it + // inside React's state updater logs a render-phase update warning. + if (resolvedOpen && !floatingTerminalOpen) { + useAppStore.getState().recordFeatureInteraction('floating-workspace') + rememberFloatingTerminalReturnFocus() + } else if (!resolvedOpen && floatingTerminalOpen) { + restoreFloatingTerminalReturnFocus() + } + setFloatingTerminalOpen(resolvedOpen) }, - [rememberFloatingTerminalReturnFocus, restoreFloatingTerminalReturnFocus] + [floatingTerminalOpen, rememberFloatingTerminalReturnFocus, restoreFloatingTerminalReturnFocus] ) useEffect(() => {