import React from 'react' import {useDialogStateContext} from '#/state/dialogs' import { DialogContextProps, DialogControlProps, DialogControlWithRefProps, DialogParams, } from '#/components/Dialog/types' export const Context = React.createContext>({ params: {}, close: () => {}, }) export function useDialogContext() { return React.useContext(Context) as DialogContextProps } export function useDialogControl< Params extends DialogParams, >(): DialogControlWithRefProps { const id = React.useId() const control = React.useRef>({ open: () => {}, close: () => {}, }) const {activeDialogs} = useDialogStateContext() React.useEffect(() => { activeDialogs.current.set(id, control) return () => { // eslint-disable-next-line react-hooks/exhaustive-deps activeDialogs.current.delete(id) } }, [id, activeDialogs]) return { ref: control, open: (params, options) => control.current.open(params, options), close: () => control.current.close(), } }