Files
copilotkit__copilotkit/docs/lib/hooks/use-tailored-content.tsx
Ariel Weinberger 0dfb539d2d Swap out old docs for new docs (#693)
* swap docs

* fix build error

---------

Co-authored-by: Fuma Nama <fuma-nama@noreply.com>
2024-10-04 14:13:08 +02:00

52 lines
1.3 KiB
TypeScript

import React from "react";
import { createContext, useContext, useEffect, ReactNode } from "react";
import { useLocalStorage } from "usehooks-ts";
type TailoredContentOption = string;
type TailoredContentContextType<T extends TailoredContentOption> = {
mode: T;
setMode: any;
};
const TailoredContentContext = createContext<
TailoredContentContextType<TailoredContentOption> | undefined
>(undefined);
export const TailoredContentProvider = <T extends TailoredContentOption>({
children,
}: {
children: ReactNode;
}) => {
const [mode, setMode] = useLocalStorage<T>(
"copilotkit-tailored-content",
"empty" as T
);
return (
<TailoredContentContext.Provider value={{ mode, setMode }}>
{children}
</TailoredContentContext.Provider>
);
};
export const useTailoredContent = <T extends TailoredContentOption>(
options: T[],
defaultOption: T
): TailoredContentContextType<T> => {
const context = useContext(TailoredContentContext);
if (context === undefined) {
throw new Error(
"useTailoredContent must be used within a TailoredContentProvider"
);
}
useEffect(() => {
if (!options.includes(context.mode as any)) {
context.setMode(defaultOption);
}
}, [context.mode]);
return context as TailoredContentContextType<T>;
};