UNPKG

@assistant-ui/react

Version:

TypeScript/React library for AI Chat

52 lines 1.49 kB
// src/legacy-runtime/runtime-cores/assistant-transport/commandQueue.ts import { useState, useCallback, useRef, useEffect } from "react"; var createInitialQueueState = () => ({ queued: [], inTransit: [] }); var useCommandQueue = (opts) => { const onQueueRef = useRef(opts.onQueue); useEffect(() => { onQueueRef.current = opts.onQueue; }); const [, rerender] = useState(0); const queueStateRef = useRef(createInitialQueueState()); const enqueue = (command) => { queueStateRef.current = { queued: [...queueStateRef.current.queued, command], inTransit: queueStateRef.current.inTransit }; rerender((prev) => prev + 1); onQueueRef.current(); }; const flush = () => { if (queueStateRef.current.queued.length === 0) return []; const queued = queueStateRef.current.queued; queueStateRef.current = { queued: [], inTransit: [...queueStateRef.current.inTransit, ...queued] }; rerender((prev) => prev + 1); return queued; }; const markDelivered = () => { queueStateRef.current = { ...queueStateRef.current, inTransit: [] }; rerender((prev) => prev + 1); }; const reset = useCallback(() => { queueStateRef.current = createInitialQueueState(); rerender((prev) => prev + 1); }, []); return { state: queueStateRef.current, enqueue, flush, markDelivered, reset }; }; export { createInitialQueueState, useCommandQueue }; //# sourceMappingURL=commandQueue.js.map