file-tree-main.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { createContext, FC, useContext, useState } from 'react'
  2. type ContextMenuCoords = { top: number; left: number }
  3. const FileTreeMainContext = createContext<
  4. | {
  5. refProviders: object
  6. setRefProviderEnabled: (provider: string, value: boolean) => void
  7. setStartedFreeTrial: (value: boolean) => void
  8. contextMenuCoords: ContextMenuCoords | null
  9. setContextMenuCoords: (value: ContextMenuCoords | null) => void
  10. }
  11. | undefined
  12. >(undefined)
  13. export function useFileTreeMainContext() {
  14. const context = useContext(FileTreeMainContext)
  15. if (!context) {
  16. throw new Error(
  17. 'useFileTreeMainContext is only available inside FileTreeMainProvider'
  18. )
  19. }
  20. return context
  21. }
  22. export const FileTreeMainProvider: FC<{
  23. refProviders: object
  24. setRefProviderEnabled: (provider: string, value: boolean) => void
  25. setStartedFreeTrial: (value: boolean) => void
  26. }> = ({
  27. refProviders,
  28. setRefProviderEnabled,
  29. setStartedFreeTrial,
  30. children,
  31. }) => {
  32. const [contextMenuCoords, setContextMenuCoords] =
  33. useState<ContextMenuCoords | null>(null)
  34. return (
  35. <FileTreeMainContext.Provider
  36. value={{
  37. refProviders,
  38. setRefProviderEnabled,
  39. setStartedFreeTrial,
  40. contextMenuCoords,
  41. setContextMenuCoords,
  42. }}
  43. >
  44. {children}
  45. </FileTreeMainContext.Provider>
  46. )
  47. }