forked from CopilotKit/CopilotKit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCopilotSidebar.tsx
More file actions
80 lines (70 loc) · 2.31 KB
/
Copy pathCopilotSidebar.tsx
File metadata and controls
80 lines (70 loc) · 2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import React, { useEffect, useMemo } from "react";
import { useLicenseContext } from "../../providers/CopilotKitProvider";
import { InlineFeatureWarning } from "../license-warning-banner";
import { CopilotChat, CopilotChatProps } from "./CopilotChat";
import CopilotChatView, { CopilotChatViewProps } from "./CopilotChatView";
import {
CopilotSidebarView,
CopilotSidebarViewProps,
} from "./CopilotSidebarView";
export type CopilotSidebarProps = Omit<CopilotChatProps, "chatView"> & {
header?: CopilotSidebarViewProps["header"];
toggleButton?: CopilotSidebarViewProps["toggleButton"];
defaultOpen?: boolean;
width?: number | string;
position?: CopilotSidebarViewProps["position"];
};
export function CopilotSidebar({
header,
toggleButton,
defaultOpen,
width,
position,
...chatProps
}: CopilotSidebarProps) {
const { checkFeature } = useLicenseContext();
const isSidebarLicensed = checkFeature("sidebar");
useEffect(() => {
if (!isSidebarLicensed) {
console.warn(
'[CopilotKit] Warning: "sidebar" feature is not licensed. Visit copilotkit.ai/pricing',
);
}
}, [isSidebarLicensed]);
const SidebarViewOverride = useMemo(() => {
const Component: React.FC<CopilotChatViewProps> = (viewProps) => {
const {
header: viewHeader,
toggleButton: viewToggleButton,
width: viewWidth,
defaultOpen: viewDefaultOpen,
position: viewPosition,
...restProps
} = viewProps as CopilotSidebarViewProps;
return (
<CopilotSidebarView
{...(restProps as CopilotSidebarViewProps)}
header={header ?? viewHeader}
toggleButton={toggleButton ?? viewToggleButton}
width={width ?? viewWidth}
defaultOpen={defaultOpen ?? viewDefaultOpen}
position={position ?? viewPosition}
/>
);
};
return Object.assign(Component, CopilotChatView);
}, [header, toggleButton, width, defaultOpen, position]);
return (
<>
{!isSidebarLicensed && <InlineFeatureWarning featureName="Sidebar" />}
<CopilotChat
welcomeScreen={CopilotSidebarView.WelcomeScreen}
{...chatProps}
isModalDefaultOpen={defaultOpen}
chatView={SidebarViewOverride}
/>
</>
);
}
CopilotSidebar.displayName = "CopilotSidebar";
export default CopilotSidebar;