UNPKG

@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;" />

65 lines (63 loc) 2.05 kB
import { __spreadProps, __spreadValues } from "./chunk-SKC7AJIV.mjs"; // src/hooks/use-frontend-tool.ts import React, { useEffect, useMemo, useRef } from "react"; import { getZodParameters } from "@copilotkit/shared"; import { parseJson } from "@copilotkit/shared"; import { useFrontendTool as useFrontendToolVNext } from "@copilotkitnext/react"; function useFrontendTool(tool, dependencies) { const { name, description, parameters, render, followUp } = tool; const zodParameters = getZodParameters(parameters); const renderRef = useRef(render); useEffect(() => { renderRef.current = render; }, [render, ...dependencies != null ? dependencies : []]); const normalizedRender = useMemo(() => { if (typeof render === "undefined") { return void 0; } return (args) => { const currentRender = renderRef.current; if (typeof currentRender === "undefined") { return null; } if (typeof currentRender === "string") { return React.createElement(React.Fragment, null, currentRender); } const renderArgs = __spreadProps(__spreadValues({}, args), { result: typeof args.result === "string" ? parseJson(args.result, args.result) : args.result }); const rendered = currentRender(renderArgs); if (typeof rendered === "string") { return React.createElement(React.Fragment, null, rendered); } return rendered != null ? rendered : null; }; }, []); const handlerRef = useRef(tool.handler); useEffect(() => { handlerRef.current = tool.handler; }, [tool.handler, ...dependencies != null ? dependencies : []]); const normalizedHandler = tool.handler ? (args) => { var _a; return (_a = handlerRef.current) == null ? void 0 : _a.call(handlerRef, args); } : void 0; useFrontendToolVNext({ name, description, parameters: zodParameters, handler: normalizedHandler, followUp, render: normalizedRender }); } export { useFrontendTool }; //# sourceMappingURL=chunk-UA23VX5J.mjs.map