file-tree-folder-list.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import PropTypes from 'prop-types'
  2. import classNames from 'classnames'
  3. import FileTreeDoc from './file-tree-doc'
  4. import FileTreeFolder from './file-tree-folder'
  5. import { fileCollator } from '../util/file-collator'
  6. function FileTreeFolderList({
  7. folders,
  8. docs,
  9. files,
  10. classes = {},
  11. dropRef = null,
  12. children,
  13. shouldShowVisualSelection,
  14. }) {
  15. files = files.map(file => ({ ...file, isFile: true }))
  16. const docsAndFiles = [...docs, ...files]
  17. return (
  18. <ul
  19. className={classNames('list-unstyled', classes.root)}
  20. role="tree"
  21. ref={dropRef}
  22. dnd-container="true"
  23. >
  24. {folders.sort(compareFunction).map(folder => {
  25. return (
  26. <FileTreeFolder
  27. key={folder._id}
  28. name={folder.name}
  29. id={folder._id}
  30. folders={folder.folders}
  31. docs={folder.docs}
  32. files={folder.fileRefs}
  33. shouldShowVisualSelection={shouldShowVisualSelection}
  34. />
  35. )
  36. })}
  37. {docsAndFiles.sort(compareFunction).map(doc => {
  38. return (
  39. <FileTreeDoc
  40. key={doc._id}
  41. name={doc.name}
  42. id={doc._id}
  43. isFile={doc.isFile}
  44. isLinkedFile={doc.linkedFileData && !!doc.linkedFileData.provider}
  45. shouldShowVisualSelection={shouldShowVisualSelection}
  46. />
  47. )
  48. })}
  49. {children}
  50. </ul>
  51. )
  52. }
  53. FileTreeFolderList.propTypes = {
  54. folders: PropTypes.array.isRequired,
  55. docs: PropTypes.array.isRequired,
  56. files: PropTypes.array.isRequired,
  57. classes: PropTypes.exact({
  58. root: PropTypes.string,
  59. }),
  60. dropRef: PropTypes.func,
  61. children: PropTypes.node,
  62. shouldShowVisualSelection: PropTypes.bool,
  63. }
  64. function compareFunction(one, two) {
  65. return fileCollator.compare(one.name, two.name)
  66. }
  67. export default FileTreeFolderList