import React, { PropsWithChildren, useMemo, useState } from 'react' import { HuiContent, defaultToastLayout, HuiContextParams, UpdateToastsFunction, UpdateToastsIDFunction, UpdateToastsLayoutFunction } from '../utils/use-hui-context' import ThemeProvider from './theme-provider' import useCurrentState from '../utils/use-current-state' import ToastContainer from '../use-toasts/toast-container' import { HuiThemes } from '../themes/presets' export type HuiProviderProps = { themes?: Array themeType?: string | 'dark' | 'light' } const HuiProvider: React.FC> = ({ themes, themeType, children }) => { const [lastUpdateToastId, setLastUpdateToastId] = useState(null) const [toasts, setToasts, toastsRef] = useCurrentState([]) const [toastLayout, setToastLayout, toastLayoutRef] = useCurrentState(defaultToastLayout) const updateToasts: UpdateToastsFunction = (fn) => { const nextToasts = fn(toastsRef.current) setToasts(nextToasts) } const updateToastLayout: UpdateToastsLayoutFunction = (fn) => { const nextLayout = fn(toastLayoutRef.current) setToastLayout(nextLayout) } const updateLastToastId: UpdateToastsIDFunction = (fn) => { setLastUpdateToastId(fn()) } const initialValue = useMemo( () => ({ toasts, toastLayout, updateToasts, lastUpdateToastId, updateToastLayout, updateLastToastId }), [toasts, toastLayout, lastUpdateToastId] ) return ( {children} ) } export default HuiProvider