Files
chainlit--chainlit/frontend/src/components/AutoResumeThread.tsx
T
wehub-resource-sync b7f52be4c9
CI / Run CI (push) Has been cancelled
CI / check-backend (push) Has been cancelled
CI / check-frontend (push) Has been cancelled
CI / tests (push) Has been cancelled
CI / e2e-tests (push) Has been cancelled
Copilot Setup Steps / copilot-setup-steps (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:48:47 +08:00

55 lines
1.2 KiB
TypeScript

import { useEffect } from 'react';
import { useNavigate } from 'react-router-dom';
import { useRecoilState } from 'recoil';
import { toast } from 'sonner';
import {
resumeThreadErrorState,
useChatInteract,
useChatSession,
useConfig
} from '@chainlit/react-client';
interface Props {
id: string;
}
export default function AutoResumeThread({ id }: Props) {
const navigate = useNavigate();
const { config } = useConfig();
const { clear, setIdToResume } = useChatInteract();
const { session, idToResume } = useChatSession();
const [resumeThreadError, setResumeThreadError] = useRecoilState(
resumeThreadErrorState
);
useEffect(() => {
if (!config?.threadResumable) return;
clear();
setIdToResume(id);
if (!config?.dataPersistence) {
navigate('/');
}
}, [config?.threadResumable, id]);
useEffect(() => {
if (id !== idToResume) {
return;
}
if (session?.error) {
toast.error("Couldn't resume chat");
navigate('/');
}
}, [session, idToResume, id]);
useEffect(() => {
if (resumeThreadError) {
toast.error("Couldn't resume chat: " + resumeThreadError);
navigate('/');
setResumeThreadError(undefined);
}
}, [resumeThreadError]);
return null;
}