file-tree-main.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. React.PropsWithChildren<{
  24. refProviders: object
  25. setRefProviderEnabled: (provider: string, value: boolean) => void
  26. setStartedFreeTrial: (value: boolean) => void
  27. }>
  28. > = ({
  29. refProviders,
  30. setRefProviderEnabled,
  31. setStartedFreeTrial,
  32. children,
  33. }) => {
  34. const [contextMenuCoords, setContextMenuCoords] =
  35. useState<ContextMenuCoords | null>(null)
  36. return (
  37. <FileTreeMainContext.Provider
  38. value={{
  39. refProviders,
  40. setRefProviderEnabled,
  41. setStartedFreeTrial,
  42. contextMenuCoords,
  43. setContextMenuCoords,
  44. }}
  45. >
  46. {children}
  47. </FileTreeMainContext.Provider>
  48. )
  49. }