Skip to main content
Glama
use-widget-state.ts•1.49 kB
import { useCallback, useEffect, useState, type SetStateAction } from "react"; import { useOpenAiGlobal } from "./use-openai-global"; import type { UnknownObject } from "./types"; export function useWidgetState<T extends UnknownObject>( defaultState: T | (() => T) ): readonly [T, (state: SetStateAction<T>) => void]; export function useWidgetState<T extends UnknownObject>( defaultState?: T | (() => T | null) | null ): readonly [T | null, (state: SetStateAction<T | null>) => void]; export function useWidgetState<T extends UnknownObject>( defaultState?: T | (() => T | null) | null ): readonly [T | null, (state: SetStateAction<T | null>) => void] { const widgetStateFromWindow = useOpenAiGlobal("widgetState") as T; const [widgetState, _setWidgetState] = useState<T | null>(() => { if (widgetStateFromWindow != null) { return widgetStateFromWindow; } return typeof defaultState === "function" ? defaultState() : defaultState ?? null; }); useEffect(() => { _setWidgetState(widgetStateFromWindow); }, [widgetStateFromWindow]); const setWidgetState = useCallback( (state: SetStateAction<T | null>) => { _setWidgetState((prevState) => { const newState = typeof state === "function" ? state(prevState) : state; if (newState != null) { window.openai.setWidgetState(newState); } return newState; }); }, [] ); return [widgetState, setWidgetState] as const; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/GeneralJerel/ChessMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server