file-tree-context.js 2.3 KB

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