@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
JavaScript
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