@copilotkit/react-core
Version:
<img src="https://github.com/user-attachments/assets/0a6b64d9-e193-4940-a3f6-60334ac34084" alt="banner" style="border-radius: 12px; border: 2px solid #d6d4fa;" />
47 lines (40 loc) • 1.34 kB
text/typescript
import { useContext, useEffect, useMemo } from "react";
import { CopilotContext } from "../context/copilot-context";
import { LangGraphInterruptRender } from "../types/interrupt-action";
import { useToast } from "../components/toast/toast-provider";
import { dataToUUID } from "@copilotkit/shared";
export function useLangGraphInterrupt<TEventValue = any>(
action: Omit<LangGraphInterruptRender<TEventValue>, "id">,
dependencies?: any[],
) {
const {
setInterruptAction,
removeInterruptAction,
interruptActions,
threadId,
} = useContext(CopilotContext);
const { addToast } = useToast();
const actionId = dataToUUID(action, "lgAction");
useEffect(() => {
if (!action) return;
// if (!action.enabled) {
// TODO: if there are any other actions registered, we need to warn the user that a current action without "enabled" might render for everything
// addToast({
// type: "warning",
// message: "An action is already registered for the interrupt event",
// });
// return;
// }
setInterruptAction({ ...action, id: actionId });
// Cleanup: remove action on unmount
return () => {
removeInterruptAction(actionId);
};
}, [
setInterruptAction,
removeInterruptAction,
threadId,
actionId,
...(dependencies || []),
]);
}