file-tree-context.js 1.9 KB

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