tooltip-provider.tsx 900 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import {
  2. createContext,
  3. Dispatch,
  4. FC,
  5. PropsWithChildren,
  6. SetStateAction,
  7. useContext,
  8. useMemo,
  9. useState,
  10. } from 'react'
  11. import useDebounce from '@/shared/hooks/use-debounce'
  12. const TooltipContext = createContext<
  13. | {
  14. isTooltipOpen: boolean
  15. setIsTooltipOpen: Dispatch<SetStateAction<boolean>>
  16. }
  17. | undefined
  18. >(undefined)
  19. export const TooltipProvider: FC<PropsWithChildren> = ({ children }) => {
  20. const [isTooltipOpen, setIsTooltipOpen] = useState(false)
  21. const debouncedIsTooltipOpen = useDebounce(isTooltipOpen, 100)
  22. const value = useMemo(
  23. () => ({
  24. isTooltipOpen: debouncedIsTooltipOpen,
  25. setIsTooltipOpen,
  26. }),
  27. [debouncedIsTooltipOpen, setIsTooltipOpen]
  28. )
  29. return (
  30. <TooltipContext.Provider value={value}>{children}</TooltipContext.Provider>
  31. )
  32. }
  33. export const useTooltipContext = () => {
  34. return useContext(TooltipContext)
  35. }