Files
ragflow/web/src/pages/next-chats/hooks/use-chat-url.ts
chanx a8a060676a Refactor: UmiJs -> Vite (#12410)
### What problem does this PR solve?

Refactor: UmiJs -> Vite+React

### Type of change

- [x] Refactoring

---------

Co-authored-by: Liu An <asiro@qq.com>
2026-01-04 19:14:20 +08:00

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,
};
}