import { Context, createContext, ReactNode, useCallback, useContext, useState } from 'react'; type ScrollBoundaryContainerContextType = { scrollBoundaryContainerRef: HTMLElement | null | undefined; addRef: (ref: HTMLElement) => void; }; type Props = { children: ReactNode; }; const ScrollBoundaryContainerContext: Context = createContext({ scrollBoundaryContainerRef: null, addRef: () => {}, }); const { Provider } = ScrollBoundaryContainerContext; function ScrollBoundaryContainerProvider({ children }: Props) { const [scrollBoundaryContainerRef, setScrollBoundaryContainerRef] = useState( null, ); const scrollBoundaryContainerContext = { scrollBoundaryContainerRef, addRef: useCallback((ref: HTMLElement) => { setScrollBoundaryContainerRef(ref); }, []), } as const; return {children}; } function useScrollBoundaryContainer(): ScrollBoundaryContainerContextType { const scrollBoundaryContainerContext = useContext(ScrollBoundaryContainerContext); return scrollBoundaryContainerContext; } export { ScrollBoundaryContainerProvider, useScrollBoundaryContainer };