buster/web/src/layouts/ChatLayout/ChatContext/useAutoChangeLayout.ts

31 lines
1.1 KiB
TypeScript
Raw Normal View History

2025-03-05 04:52:33 +08:00
'use client';
2025-02-18 07:25:31 +08:00
import { useMessageIndividual } from '@/context/Chats';
2025-02-11 11:15:32 +08:00
import type { SelectedFile } from '../interfaces';
2025-03-05 04:52:33 +08:00
import { useEffect, useRef } from 'react';
2025-02-09 13:41:08 +08:00
export const useAutoChangeLayout = ({
lastMessageId,
onSetSelectedFile
}: {
lastMessageId: string;
onSetSelectedFile: (file: SelectedFile) => void;
}) => {
2025-03-12 01:27:34 +08:00
const previousLastMessageId = useRef<string | null>(null);
2025-03-05 11:29:16 +08:00
const reasoningMessagesLength = useMessageIndividual(
lastMessageId,
(x) => x?.reasoning_message_ids?.length || 0
);
const isCompletedStream = useMessageIndividual(lastMessageId, (x) => x?.isCompletedStream);
2025-02-09 13:41:08 +08:00
const hasReasoning = !!reasoningMessagesLength;
2025-03-05 04:11:49 +08:00
2025-02-12 07:46:22 +08:00
//change the page to reasoning file if we get a reasoning message
2025-02-09 13:41:08 +08:00
useEffect(() => {
2025-03-12 01:27:34 +08:00
if (!isCompletedStream && hasReasoning && previousLastMessageId.current !== lastMessageId) {
// hasSeeningReasoningPage.current = true;
2025-02-09 13:41:08 +08:00
onSetSelectedFile({ id: lastMessageId, type: 'reasoning' });
2025-03-12 01:27:34 +08:00
previousLastMessageId.current = lastMessageId;
2025-02-09 13:41:08 +08:00
}
2025-03-12 01:27:34 +08:00
}, [isCompletedStream, hasReasoning, lastMessageId]);
2025-02-09 13:41:08 +08:00
};