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:
balibabu
2026-03-16 15:43:18 +08:00
committed by GitHub
parent fa48ffe5de
commit f4d126acb0

View File

@ -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();