mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-01-31 23:55:06 +08:00
### What problem does this PR solve? Refactor: UmiJs -> Vite+React ### Type of change - [x] Refactoring --------- Co-authored-by: Liu An <asiro@qq.com>
98 lines
3.1 KiB
TypeScript
98 lines
3.1 KiB
TypeScript
import { ChatSearchParams } from '@/constants/chat';
|
|
import { useGetChatSearchParams } from '@/hooks/use-chat-request';
|
|
import { IMessage } from '@/interfaces/database/chat';
|
|
import { generateConversationId } from '@/utils/chat';
|
|
import { useCallback, useMemo } from 'react';
|
|
import { useSearchParams } from 'react-router';
|
|
import { useSetConversation } from './use-set-conversation';
|
|
|
|
/**
|
|
* Consolidated hook for managing chat URL parameters (conversationId and isNew)
|
|
* Replaces: useClickConversationCard from use-chat-request.ts and useSetChatRouteParams from use-set-chat-route.ts
|
|
*/
|
|
export const useChatUrlParams = () => {
|
|
const [currentQueryParameters, setSearchParams] = useSearchParams();
|
|
const newQueryParameters: URLSearchParams = useMemo(
|
|
() => new URLSearchParams(currentQueryParameters.toString()),
|
|
[currentQueryParameters],
|
|
);
|
|
|
|
const setConversationId = useCallback(
|
|
(conversationId: string) => {
|
|
newQueryParameters.set(ChatSearchParams.ConversationId, conversationId);
|
|
setSearchParams(newQueryParameters);
|
|
},
|
|
[setSearchParams, newQueryParameters],
|
|
);
|
|
|
|
const setIsNew = useCallback(
|
|
(isNew: string) => {
|
|
newQueryParameters.set(ChatSearchParams.isNew, isNew);
|
|
setSearchParams(newQueryParameters);
|
|
},
|
|
[setSearchParams, newQueryParameters],
|
|
);
|
|
|
|
const getIsNew = useCallback(() => {
|
|
return newQueryParameters.get(ChatSearchParams.isNew);
|
|
}, [newQueryParameters]);
|
|
|
|
const setConversationBoth = useCallback(
|
|
(conversationId: string, isNew: string) => {
|
|
newQueryParameters.set(ChatSearchParams.ConversationId, conversationId);
|
|
newQueryParameters.set(ChatSearchParams.isNew, isNew);
|
|
setSearchParams(newQueryParameters);
|
|
},
|
|
[setSearchParams, newQueryParameters],
|
|
);
|
|
|
|
return {
|
|
setConversationId,
|
|
setIsNew,
|
|
getIsNew,
|
|
setConversationBoth,
|
|
};
|
|
};
|
|
|
|
export function useCreateConversationBeforeSendMessage() {
|
|
const { conversationId, isNew } = useGetChatSearchParams();
|
|
const { setConversation } = useSetConversation();
|
|
const { setIsNew, setConversationBoth } = useChatUrlParams();
|
|
|
|
// Create conversation if it doesn't exist
|
|
const createConversationBeforeSendMessage = useCallback(
|
|
async (value: string) => {
|
|
let currentMessages: Array<IMessage> = [];
|
|
const currentConversationId = generateConversationId();
|
|
if (conversationId === '' || isNew === 'true') {
|
|
if (conversationId === '') {
|
|
setConversationBoth(currentConversationId, 'true');
|
|
}
|
|
const data = await setConversation(
|
|
value,
|
|
true,
|
|
conversationId || currentConversationId,
|
|
);
|
|
if (data.code !== 0) {
|
|
return;
|
|
} else {
|
|
setIsNew('');
|
|
currentMessages = data.data.message;
|
|
}
|
|
}
|
|
|
|
const targetConversationId = conversationId || currentConversationId;
|
|
|
|
return {
|
|
targetConversationId,
|
|
currentMessages,
|
|
};
|
|
},
|
|
[conversationId, isNew, setConversation, setConversationBoth, setIsNew],
|
|
);
|
|
|
|
return {
|
|
createConversationBeforeSendMessage,
|
|
};
|
|
}
|