fix: stabilize terminal layout resizing
This commit is contained in:
@@ -121,10 +121,10 @@ export const BottomTerminalDock: React.FC<BottomTerminalDockProps> = ({ isOpen,
|
||||
'flex overflow-hidden border-t border-border bg-sidebar',
|
||||
shouldApplyFullscreenLayout ? 'absolute inset-x-0 bottom-0 z-40' : 'relative',
|
||||
isResizing ? 'transition-none' : 'transition-[height] duration-300 ease-in-out',
|
||||
!isOpen && 'border-t-0'
|
||||
(!isOpen || shouldApplyFullscreenLayout) && 'border-t-0'
|
||||
)}
|
||||
style={shouldApplyFullscreenLayout ? {
|
||||
top: 'var(--oc-header-height, 48px)',
|
||||
top: 0,
|
||||
} : {
|
||||
height: `${appliedHeight}px`,
|
||||
minHeight: `${appliedHeight}px`,
|
||||
|
||||
@@ -162,7 +162,6 @@ export const TerminalView: React.FC = () => {
|
||||
const [isReconnectPending, setIsReconnectPending] = React.useState(false);
|
||||
const [activeModifier, setActiveModifier] = React.useState<Modifier | null>(null);
|
||||
const [isRestarting, setIsRestarting] = React.useState(false);
|
||||
const [viewportLayoutVersion, setViewportLayoutVersion] = React.useState(0);
|
||||
|
||||
const streamCleanupRef = React.useRef<(() => void) | null>(null);
|
||||
const activeTerminalIdRef = React.useRef<string | null>(null);
|
||||
@@ -835,29 +834,6 @@ export const TerminalView: React.FC = () => {
|
||||
return `${directoryPart}::${tabPart}::${terminalPart}`;
|
||||
}, [effectiveDirectory, activeTabId, terminalSessionId]);
|
||||
|
||||
const viewportSessionKey = React.useMemo(() => {
|
||||
return `${terminalViewportKey}::layout-${viewportLayoutVersion}`;
|
||||
}, [terminalViewportKey, viewportLayoutVersion]);
|
||||
|
||||
React.useEffect(() => {
|
||||
if (useTouchTerminalInput || !isBottomTerminalOpen || !isTerminalVisible) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (typeof window === 'undefined') {
|
||||
setViewportLayoutVersion((value) => value + 1);
|
||||
return;
|
||||
}
|
||||
|
||||
const timeoutId = window.setTimeout(() => {
|
||||
setViewportLayoutVersion((value) => value + 1);
|
||||
}, 140);
|
||||
|
||||
return () => {
|
||||
window.clearTimeout(timeoutId);
|
||||
};
|
||||
}, [bottomTerminalHeight, isBottomTerminalExpanded, isBottomTerminalOpen, isTerminalVisible, useTouchTerminalInput]);
|
||||
|
||||
React.useEffect(() => {
|
||||
if (!isTerminalVisible || useTouchTerminalInput) {
|
||||
return;
|
||||
@@ -1139,7 +1115,7 @@ export const TerminalView: React.FC = () => {
|
||||
ref={(controller) => {
|
||||
terminalControllerRef.current = controller;
|
||||
}}
|
||||
sessionKey={viewportSessionKey}
|
||||
sessionKey={terminalViewportKey}
|
||||
chunks={bufferChunks}
|
||||
onInput={handleViewportInput}
|
||||
onResize={handleViewportResize}
|
||||
|
||||
Reference in New Issue
Block a user