fix(chat): keep the outgoing conversation still until the next one replaces it
Switching sessions moved the conversation on screen before the swap: the composer and the status chip followed the live selection and re-shaped a commit ahead of the timeline, so the pinned outgoing chat jumped; and the reveal effect re-ran for the outgoing session when its waited flag flipped, hiding it a few frames before the next one mounted. The chat column now reads one deferred session, and the reveal runs once per opened session.
This commit is contained in:
@@ -51,6 +51,7 @@ import { ModelControls } from './ModelControls';
|
||||
import { parseAgentMentions } from '@/lib/messages/agentMentions';
|
||||
import { ComposerStatusBar } from './ComposerStatusBar';
|
||||
import { PendingChangesBar } from './PendingChangesBar';
|
||||
import { useChatColumnSession } from './chatColumnSession';
|
||||
import { useChatSurfaceMode } from './useChatSurfaceMode';
|
||||
import { MobileAgentButton } from './MobileAgentButton';
|
||||
import { MobileModelButton } from './MobileModelButton';
|
||||
@@ -335,9 +336,16 @@ const ChatInputComponent: React.FC<ChatInputProps> = ({
|
||||
const sendMessage = React.useRef((...args: any[]) =>
|
||||
Promise.resolve((useSessionUIStore.getState().sendMessage as (...a: unknown[]) => unknown)(...args)),
|
||||
).current;
|
||||
const currentSessionId = useSessionUIStore((s) => s.currentSessionId);
|
||||
// Inside the chat column the composer follows the session the timeline is
|
||||
// showing (see chatColumnSession.ts); elsewhere it follows the live one.
|
||||
const liveSessionId = useSessionUIStore((s) => s.currentSessionId);
|
||||
const chatColumnSession = useChatColumnSession();
|
||||
const currentSessionId = chatColumnSession ? chatColumnSession.sessionId : liveSessionId;
|
||||
const fallbackDirectory = useDirectoryStore((s) => s.currentDirectory);
|
||||
const currentDirectory = useEffectiveDirectory() ?? fallbackDirectory;
|
||||
const liveEffectiveDirectory = useEffectiveDirectory();
|
||||
const currentDirectory = (chatColumnSession?.sessionId ? chatColumnSession.directory : null)
|
||||
?? liveEffectiveDirectory
|
||||
?? fallbackDirectory;
|
||||
const currentSessionDirectoryForSync = useSessionUIStore(
|
||||
React.useCallback((s) => currentSessionId ? s.getDirectoryForSession(currentSessionId) : null, [currentSessionId]),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user