@assistant-ui/react
Version:
TypeScript/React library for AI Chat
55 lines • 1.57 kB
JavaScript
// src/legacy-runtime/runtime-cores/assistant-transport/runManager.ts
import { useCallback, useRef, useState } from "react";
import { useLatestRef } from "./useLatestRef.js";
function useRunManager(config) {
const [isRunning, setIsRunning] = useState(false);
const stateRef = useRef({
pending: false,
abortController: null
});
const onRunRef = useLatestRef(config.onRun);
const onFinishRef = useLatestRef(config.onFinish);
const onErrorRef = useLatestRef(config.onError);
const startRun = useCallback(() => {
setIsRunning(true);
stateRef.current.pending = false;
const ac = new AbortController();
stateRef.current.abortController = ac;
queueMicrotask(async () => {
try {
await onRunRef.current(ac.signal);
} catch (error) {
stateRef.current.pending = false;
onErrorRef.current?.(error);
} finally {
onFinishRef.current?.();
if (stateRef.current.pending) {
startRun();
} else {
setIsRunning(false);
stateRef.current.abortController = null;
}
}
});
}, [onRunRef, onFinishRef]);
const schedule = useCallback(() => {
if (stateRef.current.abortController) {
stateRef.current.pending = true;
return;
}
startRun();
}, [startRun]);
const cancel = useCallback(() => {
stateRef.current.pending = false;
stateRef.current.abortController?.abort();
}, []);
return {
isRunning,
schedule,
cancel
};
}
export {
useRunManager
};
//# sourceMappingURL=runManager.js.map