import { useSyncExternalStore } from 'react'
import { SET_GLOBALS_EVENT_TYPE } from '../types'
import type { GlobalOutput, OpenAiGlobals, SetGlobalsEvent } from '../types'
export function useOpenAIGlobal<T extends GlobalOutput, K extends keyof OpenAiGlobals<T>>(
key: K
): OpenAiGlobals<T>[K] | undefined {
return useSyncExternalStore(
(onChange) => {
if (typeof window === 'undefined') {
return () => {}
}
const handleSetGlobal = (event: SetGlobalsEvent<T>) => {
const value = event.detail.globals[key]
if (value === undefined) {
return
}
onChange()
}
window.addEventListener(SET_GLOBALS_EVENT_TYPE, handleSetGlobal, {
passive: true,
})
return () => {
window.removeEventListener(SET_GLOBALS_EVENT_TYPE, handleSetGlobal)
}
},
() => (window.openai as OpenAiGlobals<T>)?.[key],
() => (window.openai as OpenAiGlobals<T>)?.[key]
)
}