mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-05-05 01:37:46 +08:00
Fix: Shared chat link triggers infinite POST loop with empty question, input disabled #13606 (#13625)
### What problem does this PR solve? Fix: Shared chat link triggers infinite POST loop with empty question, input disabled #13606 ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue) Co-authored-by: Yingfeng <yingfeng.zhang@gmail.com>
This commit is contained in:
@ -21,53 +21,38 @@ export const useSendButtonDisabled = (value: string) => {
|
||||
return trim(value) === '';
|
||||
};
|
||||
|
||||
const DATA_PREFIX = 'data_';
|
||||
|
||||
interface SharedChatSearchParams {
|
||||
from: SharedFrom;
|
||||
sharedId: string | null;
|
||||
release: string | null;
|
||||
locale: string | null;
|
||||
theme: string | null;
|
||||
data: Record<string, string>;
|
||||
visibleAvatar: boolean;
|
||||
}
|
||||
|
||||
export const useGetSharedChatSearchParams = () => {
|
||||
const [searchParams] = useSearchParams();
|
||||
const data_prefix = 'data_';
|
||||
const data = Object.fromEntries(
|
||||
Array.from(searchParams.entries())
|
||||
.filter(([key]) => key.startsWith(DATA_PREFIX))
|
||||
.map(([key, value]) => [key.replace(DATA_PREFIX, ''), value]),
|
||||
.filter(([key]) => key.startsWith(data_prefix))
|
||||
.map(([key, value]) => [key.replace(data_prefix, ''), value]),
|
||||
);
|
||||
return {
|
||||
from: searchParams.get('from') as SharedFrom,
|
||||
sharedId: searchParams.get('shared_id'),
|
||||
release: searchParams.get('release'),
|
||||
locale: searchParams.get('locale'),
|
||||
theme: searchParams.get('theme'),
|
||||
data: data,
|
||||
visibleAvatar: searchParams.get('visible_avatar')
|
||||
? searchParams.get('visible_avatar') !== '1'
|
||||
: true,
|
||||
} as SharedChatSearchParams;
|
||||
};
|
||||
};
|
||||
|
||||
export const useSendSharedMessage = () => {
|
||||
const {
|
||||
from,
|
||||
sharedId: conversationId,
|
||||
release,
|
||||
data: sharedData,
|
||||
data: data,
|
||||
} = useGetSharedChatSearchParams();
|
||||
const botType = from === SharedFrom.Agent ? 'agentbots' : 'chatbots';
|
||||
const releaseQuery = release ? `?release=${encodeURIComponent(release)}` : '';
|
||||
const completionUrl = `/api/v1/${botType}/${conversationId}/completions${releaseQuery}`;
|
||||
const { createSharedConversation: setConversation } =
|
||||
useCreateNextSharedConversation();
|
||||
const { handleInputChange, value, setValue } = useHandleMessageInputChange();
|
||||
const { send, answer, done, stopOutputMessage } =
|
||||
useSendMessageWithSse(completionUrl);
|
||||
const { send, answer, done, stopOutputMessage } = useSendMessageWithSse(
|
||||
`/api/v1/${from === SharedFrom.Agent ? 'agentbots' : 'chatbots'}/${conversationId}/completions`,
|
||||
);
|
||||
const {
|
||||
derivedMessages,
|
||||
removeLatestMessage,
|
||||
@ -94,7 +79,6 @@ export const useSendSharedMessage = () => {
|
||||
session_id: get(derivedMessages, '0.session_id'),
|
||||
reasoning: enableThinking,
|
||||
internet: enableInternet,
|
||||
...(release ? { release } : {}),
|
||||
});
|
||||
|
||||
if (isCompletionError(res)) {
|
||||
@ -103,14 +87,7 @@ export const useSendSharedMessage = () => {
|
||||
removeLatestMessage();
|
||||
}
|
||||
},
|
||||
[
|
||||
send,
|
||||
conversationId,
|
||||
derivedMessages,
|
||||
setValue,
|
||||
removeLatestMessage,
|
||||
release,
|
||||
],
|
||||
[send, conversationId, derivedMessages, setValue, removeLatestMessage],
|
||||
);
|
||||
|
||||
const handleSendMessage = useCallback(
|
||||
@ -134,16 +111,12 @@ export const useSendSharedMessage = () => {
|
||||
|
||||
const fetchSessionId = useCallback(async () => {
|
||||
const payload = { question: '' };
|
||||
const ret = await send({
|
||||
...payload,
|
||||
...sharedData,
|
||||
...(release ? { release } : {}),
|
||||
});
|
||||
const ret = await send({ ...payload, ...data });
|
||||
if (isCompletionError(ret)) {
|
||||
message.error(ret?.data.message);
|
||||
setHasError(true);
|
||||
}
|
||||
}, [sharedData, release, send]);
|
||||
}, [send]);
|
||||
|
||||
useEffect(() => {
|
||||
fetchSessionId();
|
||||
|
||||
Reference in New Issue
Block a user