file-tree-main.tsx 1.4 KB

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