file-tree-context.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import PropTypes from 'prop-types'
  2. import { FileTreeMainProvider } from '../contexts/file-tree-main'
  3. import { FileTreeActionableProvider } from '../contexts/file-tree-actionable'
  4. import { FileTreeMutableProvider } from '../contexts/file-tree-mutable'
  5. import { FileTreeSelectableProvider } from '../contexts/file-tree-selectable'
  6. import { FileTreeDraggableProvider } from '../contexts/file-tree-draggable'
  7. // renders all the contexts needed for the file tree:
  8. // FileTreeMain: generic store
  9. // FileTreeActionable: global UI state for actions (rename, delete, etc.)
  10. // FileTreeMutable: provides entities mutation operations
  11. // FileTreeSelectable: handles selection and multi-selection
  12. function FileTreeContext({
  13. projectId,
  14. rootFolder,
  15. hasWritePermissions,
  16. rootDocId,
  17. userHasFeature,
  18. refProviders,
  19. reindexReferences,
  20. setRefProviderEnabled,
  21. setStartedFreeTrial,
  22. onSelect,
  23. children,
  24. }) {
  25. return (
  26. <FileTreeMainProvider
  27. projectId={projectId}
  28. hasWritePermissions={hasWritePermissions}
  29. userHasFeature={userHasFeature}
  30. refProviders={refProviders}
  31. setRefProviderEnabled={setRefProviderEnabled}
  32. setStartedFreeTrial={setStartedFreeTrial}
  33. reindexReferences={reindexReferences}
  34. >
  35. <FileTreeMutableProvider rootFolder={rootFolder}>
  36. <FileTreeSelectableProvider
  37. hasWritePermissions={hasWritePermissions}
  38. rootDocId={rootDocId}
  39. onSelect={onSelect}
  40. >
  41. <FileTreeActionableProvider hasWritePermissions={hasWritePermissions}>
  42. <FileTreeDraggableProvider>{children}</FileTreeDraggableProvider>
  43. </FileTreeActionableProvider>
  44. </FileTreeSelectableProvider>
  45. </FileTreeMutableProvider>
  46. </FileTreeMainProvider>
  47. )
  48. }
  49. FileTreeContext.propTypes = {
  50. projectId: PropTypes.string.isRequired,
  51. rootFolder: PropTypes.array.isRequired,
  52. hasWritePermissions: PropTypes.bool.isRequired,
  53. userHasFeature: PropTypes.func.isRequired,
  54. reindexReferences: PropTypes.func.isRequired,
  55. refProviders: PropTypes.object.isRequired,
  56. setRefProviderEnabled: PropTypes.func.isRequired,
  57. setStartedFreeTrial: PropTypes.func.isRequired,
  58. rootDocId: PropTypes.string,
  59. onSelect: PropTypes.func.isRequired,
  60. children: PropTypes.oneOfType([
  61. PropTypes.arrayOf(PropTypes.node),
  62. PropTypes.node,
  63. ]).isRequired,
  64. }
  65. export default FileTreeContext