Skip to content

Commit e288f62

Browse files
committed
tailored content takes array of options, and default option
1 parent 9879db5 commit e288f62

4 files changed

Lines changed: 48 additions & 13 deletions

File tree

docs/components/coagents-features.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import { FaQuestionCircle as AgentQAndAIcon } from "react-icons/fa";
99
type FeatureMode = "generative-ui" | "stream-agent-state" | "share-agent-state" | "agent-q-and-a";
1010

1111
const Toggle: React.FC<{ className?: string }> = ({ className }) => {
12-
const { mode, setMode } = useTailoredContent();
12+
const { mode, setMode } = useTailoredContent<FeatureMode>(
13+
["generative-ui", "stream-agent-state", "share-agent-state", "agent-q-and-a"],
14+
"generative-ui"
15+
);
1316
const [isClient, setIsClient] = useState(false);
1417

1518
useEffect(() => {
@@ -78,7 +81,11 @@ const FeatureContent: React.FC<{
7881
className?: string;
7982
mode: FeatureMode;
8083
}> = ({ children, className, mode }) => {
81-
const { mode: currentMode } = useTailoredContent();
84+
const { mode: currentMode } = useTailoredContent<FeatureMode>(
85+
["generative-ui", "stream-agent-state", "share-agent-state", "agent-q-and-a"],
86+
"generative-ui"
87+
);
88+
8289
const [isClient, setIsClient] = useState(false);
8390

8491
useEffect(() => {

docs/components/copilot-cloud-or-self-hosting.tsx

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,14 @@ import { useEffect, useState } from "react";
44
import { BsFillCloudHaze2Fill as CloudIcon } from "react-icons/bs";
55
import { FaServer as SelfHostIcon } from "react-icons/fa6";
66

7+
type FeatureMode = "cloud" | "self-host";
8+
79
function Toggle({ className }: { className?: string }) {
8-
const { mode, setMode } = useTailoredContent();
10+
const { mode, setMode } = useTailoredContent<FeatureMode>(
11+
["cloud", "self-host"],
12+
"self-host"
13+
);
14+
915
const [isClient, setIsClient] = useState(false);
1016

1117
useEffect(() => {
@@ -64,7 +70,11 @@ function CloudContent({
6470
children: React.ReactNode;
6571
className?: string;
6672
}) {
67-
const { mode } = useTailoredContent();
73+
const { mode } = useTailoredContent(
74+
["cloud", "self-host"],
75+
"self-host"
76+
);
77+
6878
const [isClient, setIsClient] = useState(false);
6979

7080
useEffect(() => {
@@ -95,7 +105,10 @@ function SelfHostContent({
95105
children: React.ReactNode;
96106
className?: string;
97107
}) {
98-
const { mode } = useTailoredContent();
108+
const { mode } = useTailoredContent(
109+
["cloud", "self-host"],
110+
"self-host"
111+
);
99112
const [isClient, setIsClient] = useState(false);
100113

101114
useEffect(() => {
Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
11
import { createContext, useContext, useState, ReactNode } from "react";
22
import { useLocalStorage } from "usehooks-ts";
33

4-
type TailordContextContextType = {
5-
mode: "cloud" | "self-host";
6-
setMode: (mode: "cloud" | "self-host") => void;
4+
type TailoredContentOption = string;
5+
6+
type TailoredContentContextType<T extends TailoredContentOption> = {
7+
mode: T;
8+
setMode: (mode: T) => void;
79
};
810

9-
const TailoredContentContext = createContext<TailordContextContextType | undefined>(undefined);
11+
const TailoredContentContext = createContext<TailoredContentContextType<TailoredContentOption> | undefined>(undefined);
1012

11-
export const TailoredContentProvider = ({ children }: { children: ReactNode }) => {
12-
const [mode, setMode] = useLocalStorage<"cloud" | "self-host">("copilotkit-cloud-or-self-hosting", "cloud");
13+
export const TailoredContentProvider = <T extends TailoredContentOption>({
14+
children,
15+
options,
16+
defaultOption
17+
}: {
18+
children: ReactNode;
19+
options: T[];
20+
defaultOption: T;
21+
}) => {
22+
const [mode, setMode] = useLocalStorage<T>("copilotkit-tailored-content", defaultOption);
1323

1424
return (
1525
<TailoredContentContext.Provider
@@ -20,10 +30,13 @@ export const TailoredContentProvider = ({ children }: { children: ReactNode }) =
2030
);
2131
};
2232

23-
export const useTailoredContent = () => {
33+
export const useTailoredContent = <T extends TailoredContentOption>(
34+
options: T[],
35+
defaultOption: T
36+
): TailoredContentContextType<T> => {
2437
const context = useContext(TailoredContentContext);
2538
if (context === undefined) {
2639
throw new Error("useTailoredContent must be used within a TailoredContentProvider");
2740
}
28-
return context;
41+
return context as TailoredContentContextType<T>;
2942
};

docs/pages/coagents/index.mdx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ As an industry, we are quickly learning that **AI agents perform best when they
2323

2424
<CoAgentsFeatures.Toggle />
2525

26+
**Press one of the buttons above 👆**
27+
2628
<CoAgentsFeatures.GenerativeUi>
2729
### Generative UI
2830

0 commit comments

Comments
 (0)