import type { SetStateAction } from "react"; import { useCallback, useState } from "react"; import type { UnknownObject } from "../../types.js"; import { useOpenAiGlobal } from "./useOpenAiGlobal.js"; export function useWidgetState( defaultState: T | (() => T) ): readonly [T, (state: SetStateAction) => void]; export function useWidgetState( defaultState?: T | (() => T | null) | null ): readonly [T | null, (state: SetStateAction) => void]; export function useWidgetState( defaultState?: T | (() => T | null) | null ): readonly [T | null, (state: SetStateAction) => void] { const widgetStateFromWindow = useOpenAiGlobal("widgetState") as T; const [previousWidgetStateFromWindow, setPreviousWidgetStateFromWindow] = useState(widgetStateFromWindow); let [widgetState, _setWidgetState] = useState(() => { if (widgetStateFromWindow != null) { return widgetStateFromWindow; } return typeof defaultState === "function" ? defaultState() : ( (defaultState ?? null) ); }); if (previousWidgetStateFromWindow !== widgetStateFromWindow) { _setWidgetState((widgetState = widgetStateFromWindow)); setPreviousWidgetStateFromWindow(widgetStateFromWindow); } const setWidgetState = useCallback((state: SetStateAction) => { _setWidgetState((prevState) => { const newState = typeof state === "function" ? state(prevState) : state; if (newState != null && typeof window !== "undefined") { void window.openai?.setWidgetState?.(newState); } return newState; }); }, []); return [widgetState, setWidgetState]; }