file-tree-folder-list.js 1.3 KB

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