47 lines
1.8 KiB
JavaScript
47 lines
1.8 KiB
JavaScript
import { useCopilotChatConfiguration } from "../providers/CopilotChatConfigurationProvider.mjs";
|
|
import "../providers/index.mjs";
|
|
import { useCopilotKit } from "../providers/CopilotKitProvider.mjs";
|
|
import { useCallback, useMemo } from "react";
|
|
import { DEFAULT_AGENT_ID } from "@copilotkitnext/shared";
|
|
import { jsx } from "react/jsx-runtime";
|
|
|
|
//#region src/hooks/use-render-activity-message.tsx
|
|
function useRenderActivityMessage() {
|
|
const { copilotkit } = useCopilotKit();
|
|
const agentId = useCopilotChatConfiguration()?.agentId ?? DEFAULT_AGENT_ID;
|
|
const renderers = copilotkit.renderActivityMessages;
|
|
const findRenderer = useCallback((activityType) => {
|
|
if (!renderers.length) return null;
|
|
const matches = renderers.filter((renderer) => renderer.activityType === activityType);
|
|
return matches.find((candidate) => candidate.agentId === agentId) ?? matches.find((candidate) => candidate.agentId === void 0) ?? renderers.find((candidate) => candidate.activityType === "*") ?? null;
|
|
}, [agentId, renderers]);
|
|
const renderActivityMessage = useCallback((message) => {
|
|
const renderer = findRenderer(message.activityType);
|
|
if (!renderer) return null;
|
|
const parseResult = renderer.content.safeParse(message.content);
|
|
if (!parseResult.success) {
|
|
console.warn(`Failed to parse content for activity message '${message.activityType}':`, parseResult.error);
|
|
return null;
|
|
}
|
|
const Component = renderer.render;
|
|
const agent = copilotkit.getAgent(agentId);
|
|
return /* @__PURE__ */ jsx(Component, {
|
|
activityType: message.activityType,
|
|
content: parseResult.data,
|
|
message,
|
|
agent
|
|
}, message.id);
|
|
}, [
|
|
agentId,
|
|
copilotkit,
|
|
findRenderer
|
|
]);
|
|
return useMemo(() => ({
|
|
renderActivityMessage,
|
|
findRenderer
|
|
}), [renderActivityMessage, findRenderer]);
|
|
}
|
|
|
|
//#endregion
|
|
export { useRenderActivityMessage };
|
|
//# sourceMappingURL=use-render-activity-message.mjs.map
|