count-in-tree.js 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. export function countFiles(fileTreeData) {
  2. if (!fileTreeData) {
  3. return 0
  4. }
  5. const value = _countElements(fileTreeData)
  6. const limit = window.ExposedSettings.maxEntitiesPerProject
  7. const status = fileCountStatus(value, limit, Math.ceil(limit / 20))
  8. return { value, status, limit }
  9. }
  10. function fileCountStatus(value, limit, range) {
  11. if (value >= limit) {
  12. return 'error'
  13. }
  14. if (value >= limit - range) {
  15. return 'warning'
  16. }
  17. return 'success'
  18. }
  19. // Copied and adapted from ProjectEntityMongoUpdateHandler
  20. function _countElements(rootFolder) {
  21. function countFolder(folder) {
  22. if (folder == null) {
  23. return 0
  24. }
  25. let total = 0
  26. if (folder.folders) {
  27. total += folder.folders.length
  28. for (const subfolder of folder.folders) {
  29. total += countFolder(subfolder)
  30. }
  31. }
  32. if (folder.docs) {
  33. total += folder.docs.length
  34. }
  35. if (folder.fileRefs) {
  36. total += folder.fileRefs.length
  37. }
  38. return total
  39. }
  40. return countFolder(rootFolder)
  41. }