@ynput/ayon-frontend-shared 0.2.29 → 0.2.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (629) hide show
  1. package/dist/DetailsPanel.cjs.js +1 -1
  2. package/dist/DetailsPanel.es.js +25 -22
  3. package/dist/DetailsPanel.es.js.map +1 -1
  4. package/dist/ProjectTreeTable.cjs.js +1 -1
  5. package/dist/ProjectTreeTable.es.js +51 -49
  6. package/dist/ProjectTreeTable.es.js.map +1 -1
  7. package/dist/api.cjs.js +1 -1
  8. package/dist/api.es.js +220 -213
  9. package/dist/api.es.js.map +1 -1
  10. package/dist/components.cjs.js +1 -1
  11. package/dist/components.es.js +82 -74
  12. package/dist/components.es.js.map +1 -1
  13. package/dist/context.cjs.js +1 -1
  14. package/dist/context.es.js +23 -19
  15. package/dist/context.es.js.map +1 -1
  16. package/dist/hooks.cjs.js +1 -1
  17. package/dist/hooks.es.js +12 -10
  18. package/dist/hooks.es.js.map +1 -1
  19. package/dist/index.cjs.js +1 -1
  20. package/dist/index.es.js +11 -9
  21. package/dist/index.es.js.map +1 -1
  22. package/dist/shared/src/api/base/client.cjs.js +1 -1
  23. package/dist/shared/src/api/base/client.cjs.js.map +1 -1
  24. package/dist/shared/src/api/base/client.es.js +8 -7
  25. package/dist/shared/src/api/base/client.es.js.map +1 -1
  26. package/dist/shared/src/api/generated/anatomy.cjs.js.map +1 -1
  27. package/dist/shared/src/api/generated/anatomy.es.js.map +1 -1
  28. package/dist/shared/src/api/generated/attributes.cjs.js +1 -1
  29. package/dist/shared/src/api/generated/attributes.cjs.js.map +1 -1
  30. package/dist/shared/src/api/generated/attributes.es.js +9 -2
  31. package/dist/shared/src/api/generated/attributes.es.js.map +1 -1
  32. package/dist/shared/src/api/generated/entityLists.cjs.js +1 -1
  33. package/dist/shared/src/api/generated/entityLists.cjs.js.map +1 -1
  34. package/dist/shared/src/api/generated/entityLists.es.js +46 -0
  35. package/dist/shared/src/api/generated/entityLists.es.js.map +1 -1
  36. package/dist/shared/src/api/generated/graphql.cjs.js +10 -5
  37. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  38. package/dist/shared/src/api/generated/graphql.es.js +23 -18
  39. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  40. package/dist/shared/src/api/generated/projects.cjs.js.map +1 -1
  41. package/dist/shared/src/api/generated/projects.es.js.map +1 -1
  42. package/dist/shared/src/api/queries/attributes/updateAttributes.cjs.js +1 -1
  43. package/dist/shared/src/api/queries/attributes/updateAttributes.cjs.js.map +1 -1
  44. package/dist/shared/src/api/queries/attributes/updateAttributes.es.js +12 -5
  45. package/dist/shared/src/api/queries/attributes/updateAttributes.es.js.map +1 -1
  46. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js +1 -1
  47. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
  48. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +4 -3
  49. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
  50. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +1 -1
  51. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
  52. package/dist/shared/src/api/queries/entities/updateEntity.es.js +33 -32
  53. package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
  54. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +1 -1
  55. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
  56. package/dist/shared/src/api/queries/entityLists/getLists.es.js +151 -125
  57. package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
  58. package/dist/shared/src/api/queries/entityLists/listFolders.cjs.js +2 -0
  59. package/dist/shared/src/api/queries/entityLists/listFolders.cjs.js.map +1 -0
  60. package/dist/shared/src/api/queries/entityLists/listFolders.es.js +111 -0
  61. package/dist/shared/src/api/queries/entityLists/listFolders.es.js.map +1 -0
  62. package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js +1 -1
  63. package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js.map +1 -1
  64. package/dist/shared/src/api/queries/entityLists/updateLists.es.js +104 -88
  65. package/dist/shared/src/api/queries/entityLists/updateLists.es.js.map +1 -1
  66. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js +1 -1
  67. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js.map +1 -1
  68. package/dist/shared/src/api/queries/overview/updateOverview.es.js +7 -6
  69. package/dist/shared/src/api/queries/overview/updateOverview.es.js.map +1 -1
  70. package/dist/shared/src/api/queries/project/getProject.cjs.js +1 -19
  71. package/dist/shared/src/api/queries/project/getProject.cjs.js.map +1 -1
  72. package/dist/shared/src/api/queries/project/getProject.es.js +10 -70
  73. package/dist/shared/src/api/queries/project/getProject.es.js.map +1 -1
  74. package/dist/shared/src/api/queries/project/updateProject.cjs.js +1 -1
  75. package/dist/shared/src/api/queries/project/updateProject.cjs.js.map +1 -1
  76. package/dist/shared/src/api/queries/project/updateProject.es.js +35 -61
  77. package/dist/shared/src/api/queries/project/updateProject.es.js.map +1 -1
  78. package/dist/shared/src/api/queries/system/getSystem.cjs.js +1 -1
  79. package/dist/shared/src/api/queries/system/getSystem.cjs.js.map +1 -1
  80. package/dist/shared/src/api/queries/system/getSystem.es.js +14 -8
  81. package/dist/shared/src/api/queries/system/getSystem.es.js.map +1 -1
  82. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js +1 -1
  83. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js.map +1 -1
  84. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js +23 -23
  85. package/dist/shared/src/api/queries/users/getUsers.cjs.js +1 -1
  86. package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
  87. package/dist/shared/src/api/queries/users/getUsers.es.js +18 -17
  88. package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
  89. package/dist/shared/src/api/queries/users/updateUsers.cjs.js +1 -1
  90. package/dist/shared/src/api/queries/users/updateUsers.cjs.js.map +1 -1
  91. package/dist/shared/src/api/queries/users/updateUsers.es.js +19 -11
  92. package/dist/shared/src/api/queries/users/updateUsers.es.js.map +1 -1
  93. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js +1 -1
  94. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js.map +1 -1
  95. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js +30 -29
  96. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js.map +1 -1
  97. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js +1 -1
  98. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js.map +1 -1
  99. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js +3 -2
  100. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js.map +1 -1
  101. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js +5 -3
  102. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js.map +1 -1
  103. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js +64 -51
  104. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js.map +1 -1
  105. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +3 -3
  106. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
  107. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +66 -59
  108. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
  109. package/dist/shared/src/components/DetailsPanelDetails/BorderedSection.cjs.js +4 -5
  110. package/dist/shared/src/components/DetailsPanelDetails/BorderedSection.cjs.js.map +1 -1
  111. package/dist/shared/src/components/DetailsPanelDetails/BorderedSection.es.js +46 -41
  112. package/dist/shared/src/components/DetailsPanelDetails/BorderedSection.es.js.map +1 -1
  113. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js +1 -1
  114. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js.map +1 -1
  115. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js +4 -2
  116. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js.map +1 -1
  117. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.styles.cjs.js +76 -5
  118. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.styles.cjs.js.map +1 -1
  119. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.styles.es.js +76 -5
  120. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.styles.es.js.map +1 -1
  121. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js +1 -2
  122. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js.map +1 -1
  123. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js +11 -11
  124. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js.map +1 -1
  125. package/dist/shared/src/components/DetailsPanelDetails/DetailsSection.cjs.js +4 -4
  126. package/dist/shared/src/components/DetailsPanelDetails/DetailsSection.cjs.js.map +1 -1
  127. package/dist/shared/src/components/DetailsPanelDetails/DetailsSection.es.js +32 -32
  128. package/dist/shared/src/components/DetailsPanelDetails/DetailsSection.es.js.map +1 -1
  129. package/dist/shared/src/components/DetailsPanelDetails/FieldLabel.cjs.js +2 -2
  130. package/dist/shared/src/components/DetailsPanelDetails/FieldLabel.cjs.js.map +1 -1
  131. package/dist/shared/src/components/DetailsPanelDetails/FieldLabel.es.js +15 -8
  132. package/dist/shared/src/components/DetailsPanelDetails/FieldLabel.es.js.map +1 -1
  133. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityData.cjs.js +1 -1
  134. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityData.cjs.js.map +1 -1
  135. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityData.es.js +3 -2
  136. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityData.es.js.map +1 -1
  137. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js +1 -1
  138. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js.map +1 -1
  139. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js +3 -2
  140. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js.map +1 -1
  141. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
  142. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
  143. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +5 -2
  144. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
  145. package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js +1 -1
  146. package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js.map +1 -1
  147. package/dist/shared/src/components/EntityPath/SegmentProvider.es.js +3 -2
  148. package/dist/shared/src/components/EntityPath/SegmentProvider.es.js.map +1 -1
  149. package/dist/shared/src/components/EnumEditor/DraggableEnumEditorItem.cjs.js +1 -1
  150. package/dist/shared/src/components/EnumEditor/DraggableEnumEditorItem.cjs.js.map +1 -1
  151. package/dist/shared/src/components/EnumEditor/DraggableEnumEditorItem.es.js +51 -152
  152. package/dist/shared/src/components/EnumEditor/DraggableEnumEditorItem.es.js.map +1 -1
  153. package/dist/shared/src/components/EnumEditor/EnumEditor.styled.cjs.js +3 -1
  154. package/dist/shared/src/components/EnumEditor/EnumEditor.styled.cjs.js.map +1 -1
  155. package/dist/shared/src/components/EnumEditor/EnumEditor.styled.es.js +3 -1
  156. package/dist/shared/src/components/EnumEditor/EnumEditor.styled.es.js.map +1 -1
  157. package/dist/shared/src/components/EnumEditor/EnumEditorItem.cjs.js +2 -0
  158. package/dist/shared/src/components/EnumEditor/EnumEditorItem.cjs.js.map +1 -0
  159. package/dist/shared/src/components/EnumEditor/EnumEditorItem.es.js +141 -0
  160. package/dist/shared/src/components/EnumEditor/EnumEditorItem.es.js.map +1 -0
  161. package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js +1 -1
  162. package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js.map +1 -1
  163. package/dist/shared/src/components/Feedback/FeedbackContext.es.js +5 -4
  164. package/dist/shared/src/components/Feedback/FeedbackContext.es.js.map +1 -1
  165. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js +1 -1
  166. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js.map +1 -1
  167. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js +5 -2
  168. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js.map +1 -1
  169. package/dist/shared/src/components/LinksManager/LinkManagerItem.cjs.js +1 -1
  170. package/dist/shared/src/components/LinksManager/LinkManagerItem.cjs.js.map +1 -1
  171. package/dist/shared/src/components/LinksManager/LinkManagerItem.es.js +3 -2
  172. package/dist/shared/src/components/LinksManager/LinkManagerItem.es.js.map +1 -1
  173. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
  174. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
  175. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +5 -2
  176. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
  177. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js +2 -0
  178. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js.map +1 -0
  179. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js +177 -0
  180. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js.map +1 -0
  181. package/dist/shared/src/components/ListMetaData/ListMetaData.cjs.js +2 -0
  182. package/dist/shared/src/components/ListMetaData/ListMetaData.cjs.js.map +1 -0
  183. package/dist/shared/src/components/ListMetaData/ListMetaData.es.js +31 -0
  184. package/dist/shared/src/components/ListMetaData/ListMetaData.es.js.map +1 -0
  185. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js +3 -3
  186. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js.map +1 -1
  187. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js +8 -7
  188. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js.map +1 -1
  189. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +1 -1
  190. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
  191. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +42 -31
  192. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
  193. package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.cjs.js +12 -2
  194. package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.cjs.js.map +1 -1
  195. package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.es.js +15 -4
  196. package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.es.js.map +1 -1
  197. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +1 -1
  198. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  199. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +7 -4
  200. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  201. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +1 -1
  202. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
  203. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +6 -3
  204. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
  205. package/dist/shared/src/components/QuillListStyles/QuillListStyles.cjs.js +2 -1
  206. package/dist/shared/src/components/QuillListStyles/QuillListStyles.cjs.js.map +1 -1
  207. package/dist/shared/src/components/QuillListStyles/QuillListStyles.es.js +2 -1
  208. package/dist/shared/src/components/QuillListStyles/QuillListStyles.es.js.map +1 -1
  209. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +5 -5
  210. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
  211. package/dist/shared/src/components/RenameForm/RenameForm.es.js +116 -105
  212. package/dist/shared/src/components/RenameForm/RenameForm.es.js.map +1 -1
  213. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js +1 -1
  214. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js.map +1 -1
  215. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js +3 -2
  216. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js.map +1 -1
  217. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +1 -1
  218. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  219. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +5 -2
  220. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  221. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +1 -1
  222. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  223. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +6 -3
  224. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  225. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +1 -1
  226. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  227. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +5 -2
  228. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  229. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js +1 -1
  230. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js.map +1 -1
  231. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js +3 -2
  232. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js.map +1 -1
  233. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +1 -1
  234. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
  235. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +3 -2
  236. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
  237. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js +3 -3
  238. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js.map +1 -1
  239. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js +6 -5
  240. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js.map +1 -1
  241. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +1 -1
  242. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  243. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +5 -2
  244. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  245. package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js +1 -1
  246. package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js.map +1 -1
  247. package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js +12 -11
  248. package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js.map +1 -1
  249. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +1 -1
  250. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
  251. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +5 -2
  252. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
  253. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +1 -1
  254. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -1
  255. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +5 -4
  256. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
  257. package/dist/shared/src/components/Watchers/Watchers.cjs.js +1 -1
  258. package/dist/shared/src/components/Watchers/Watchers.cjs.js.map +1 -1
  259. package/dist/shared/src/components/Watchers/Watchers.es.js +3 -2
  260. package/dist/shared/src/components/Watchers/Watchers.es.js.map +1 -1
  261. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
  262. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  263. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +5 -2
  264. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  265. package/dist/shared/src/containers/Actions/Actions.cjs.js +1 -1
  266. package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
  267. package/dist/shared/src/containers/Actions/Actions.es.js +4 -2
  268. package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
  269. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
  270. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  271. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +5 -2
  272. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  273. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  274. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  275. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +149 -160
  276. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  277. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.styled.cjs.js +7 -1
  278. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.styled.cjs.js.map +1 -1
  279. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.styled.es.js +13 -6
  280. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.styled.es.js.map +1 -1
  281. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
  282. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  283. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +5 -2
  284. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  285. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
  286. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  287. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +6 -3
  288. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  289. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
  290. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  291. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +5 -2
  292. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  293. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +1 -1
  294. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
  295. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +4 -2
  296. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
  297. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.cjs.js +1 -1
  298. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.cjs.js.map +1 -1
  299. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.es.js +3 -2
  300. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.es.js.map +1 -1
  301. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.cjs.js +1 -1
  302. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.cjs.js.map +1 -1
  303. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.es.js +3 -2
  304. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.es.js.map +1 -1
  305. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +1 -1
  306. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
  307. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +3 -2
  308. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
  309. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
  310. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
  311. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +5 -2
  312. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js.map +1 -1
  313. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
  314. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
  315. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +5 -2
  316. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
  317. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
  318. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
  319. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +5 -2
  320. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
  321. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
  322. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
  323. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +5 -2
  324. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
  325. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js +1 -1
  326. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js.map +1 -1
  327. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js +4 -2
  328. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js.map +1 -1
  329. package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -1
  330. package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
  331. package/dist/shared/src/containers/Feed/Feed.es.js +20 -19
  332. package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
  333. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
  334. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
  335. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +3 -2
  336. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
  337. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.styled.cjs.js +18 -3
  338. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.styled.cjs.js.map +1 -1
  339. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.styled.es.js +24 -9
  340. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.styled.es.js.map +1 -1
  341. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js +1 -1
  342. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js.map +1 -1
  343. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js +3 -2
  344. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js.map +1 -1
  345. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.styled.cjs.js +7 -0
  346. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.styled.cjs.js.map +1 -1
  347. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.styled.es.js +7 -0
  348. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.styled.es.js.map +1 -1
  349. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js +1 -1
  350. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js.map +1 -1
  351. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js +3 -2
  352. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js.map +1 -1
  353. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js +1 -1
  354. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js.map +1 -1
  355. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js +3 -2
  356. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js.map +1 -1
  357. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +1 -1
  358. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
  359. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +3 -2
  360. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js.map +1 -1
  361. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -1
  362. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
  363. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +3 -2
  364. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
  365. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +1 -1
  366. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  367. package/dist/shared/src/containers/Feed/context/FeedContext.es.js +7 -5
  368. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  369. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js +1 -1
  370. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js.map +1 -1
  371. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js +3 -2
  372. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js.map +1 -1
  373. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
  374. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  375. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +8 -4
  376. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  377. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  378. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  379. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +191 -183
  380. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  381. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js +3 -3
  382. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js.map +1 -1
  383. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js +280 -57
  384. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js.map +1 -1
  385. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
  386. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  387. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +5 -2
  388. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  389. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
  390. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
  391. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +5 -2
  392. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
  393. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +1 -1
  394. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
  395. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +34 -32
  396. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
  397. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +1 -1
  398. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
  399. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +5 -2
  400. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
  401. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +1 -1
  402. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
  403. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +10 -9
  404. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
  405. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
  406. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  407. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +7 -5
  408. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  409. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  410. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  411. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +20 -18
  412. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  413. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
  414. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  415. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +48 -45
  416. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  417. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
  418. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
  419. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +5 -2
  420. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
  421. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js +2 -0
  422. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js.map +1 -0
  423. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js +239 -0
  424. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js.map +1 -0
  425. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +1 -1
  426. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
  427. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +3 -2
  428. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
  429. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +1 -1
  430. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
  431. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +5 -2
  432. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
  433. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js +1 -1
  434. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js.map +1 -1
  435. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js +3 -2
  436. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js.map +1 -1
  437. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
  438. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
  439. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +25 -22
  440. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
  441. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
  442. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
  443. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +5 -2
  444. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js.map +1 -1
  445. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
  446. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
  447. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +5 -2
  448. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
  449. package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.cjs.js +1 -1
  450. package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.cjs.js.map +1 -1
  451. package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.es.js +4 -2
  452. package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.es.js.map +1 -1
  453. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
  454. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
  455. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +5 -2
  456. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
  457. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
  458. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  459. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +16 -13
  460. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  461. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +1 -1
  462. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  463. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +5 -3
  464. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  465. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js +2 -2
  466. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js.map +1 -1
  467. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js +57 -55
  468. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js.map +1 -1
  469. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
  470. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
  471. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +7 -4
  472. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
  473. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js +1 -1
  474. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js.map +1 -1
  475. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js +5 -2
  476. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js.map +1 -1
  477. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
  478. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  479. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +5 -2
  480. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  481. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
  482. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
  483. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +169 -148
  484. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
  485. package/dist/shared/src/containers/SimpleTable/SimpleTable.styled.cjs.js +23 -4
  486. package/dist/shared/src/containers/SimpleTable/SimpleTable.styled.cjs.js.map +1 -1
  487. package/dist/shared/src/containers/SimpleTable/SimpleTable.styled.es.js +24 -5
  488. package/dist/shared/src/containers/SimpleTable/SimpleTable.styled.es.js.map +1 -1
  489. package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.cjs.js +1 -1
  490. package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.cjs.js.map +1 -1
  491. package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.es.js +62 -50
  492. package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.es.js.map +1 -1
  493. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js +1 -1
  494. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js.map +1 -1
  495. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js +4 -2
  496. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js.map +1 -1
  497. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js +2 -2
  498. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js.map +1 -1
  499. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js +9 -8
  500. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js.map +1 -1
  501. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
  502. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
  503. package/dist/shared/src/containers/Views/context/ViewsContext.es.js +6 -4
  504. package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
  505. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js +1 -1
  506. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js.map +1 -1
  507. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js +4 -2
  508. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js.map +1 -1
  509. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js +1 -1
  510. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js.map +1 -1
  511. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js +4 -2
  512. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js.map +1 -1
  513. package/dist/shared/src/containers/Views/hooks/useSelectedView.cjs.js +1 -1
  514. package/dist/shared/src/containers/Views/hooks/useSelectedView.cjs.js.map +1 -1
  515. package/dist/shared/src/containers/Views/hooks/useSelectedView.es.js +3 -2
  516. package/dist/shared/src/containers/Views/hooks/useSelectedView.es.js.map +1 -1
  517. package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js +1 -1
  518. package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js.map +1 -1
  519. package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js +3 -2
  520. package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js.map +1 -1
  521. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js +1 -1
  522. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js.map +1 -1
  523. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js +3 -2
  524. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js.map +1 -1
  525. package/dist/shared/src/context/AddonProjectContext.cjs.js +1 -1
  526. package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
  527. package/dist/shared/src/context/AddonProjectContext.es.js +13 -12
  528. package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
  529. package/dist/shared/src/context/DetailsPanelContext.cjs.js +1 -1
  530. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  531. package/dist/shared/src/context/DetailsPanelContext.es.js +6 -4
  532. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  533. package/dist/shared/src/context/PowerpackContext.cjs.js +1 -1
  534. package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
  535. package/dist/shared/src/context/PowerpackContext.es.js +61 -41
  536. package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
  537. package/dist/shared/src/context/RemoteModulesContext.cjs.js +1 -1
  538. package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
  539. package/dist/shared/src/context/RemoteModulesContext.es.js +5 -4
  540. package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
  541. package/dist/shared/src/hooks/useActionTriggers.cjs.js +1 -1
  542. package/dist/shared/src/hooks/useActionTriggers.cjs.js.map +1 -1
  543. package/dist/shared/src/hooks/useActionTriggers.es.js +3 -2
  544. package/dist/shared/src/hooks/useActionTriggers.es.js.map +1 -1
  545. package/dist/shared/src/hooks/useEntityUpdate.cjs.js +1 -1
  546. package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
  547. package/dist/shared/src/hooks/useEntityUpdate.es.js +4 -2
  548. package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
  549. package/dist/shared/src/hooks/useHierarchyTable.cjs.js +1 -1
  550. package/dist/shared/src/hooks/useHierarchyTable.cjs.js.map +1 -1
  551. package/dist/shared/src/hooks/useHierarchyTable.es.js +3 -2
  552. package/dist/shared/src/hooks/useHierarchyTable.es.js.map +1 -1
  553. package/dist/shared/src/hooks/useQueryArgumentChangeLoading.cjs.js +2 -0
  554. package/dist/shared/src/hooks/useQueryArgumentChangeLoading.cjs.js.map +1 -0
  555. package/dist/shared/src/hooks/useQueryArgumentChangeLoading.es.js +12 -0
  556. package/dist/shared/src/hooks/useQueryArgumentChangeLoading.es.js.map +1 -0
  557. package/dist/shared/src/hooks/useScopedStatuses.cjs.js +1 -1
  558. package/dist/shared/src/hooks/useScopedStatuses.cjs.js.map +1 -1
  559. package/dist/shared/src/hooks/useScopedStatuses.es.js +5 -4
  560. package/dist/shared/src/hooks/useScopedStatuses.es.js.map +1 -1
  561. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +1 -1
  562. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
  563. package/dist/shared/src/hooks/useUserProjectConfig.es.js +3 -2
  564. package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
  565. package/dist/shared/src/util/checkName.cjs.js +1 -1
  566. package/dist/shared/src/util/checkName.cjs.js.map +1 -1
  567. package/dist/shared/src/util/checkName.es.js +35 -5
  568. package/dist/shared/src/util/checkName.es.js.map +1 -1
  569. package/dist/src/components/Menu/MenuComponents/Menu.cjs.js +1 -1
  570. package/dist/src/components/Menu/MenuComponents/Menu.cjs.js.map +1 -1
  571. package/dist/src/components/Menu/MenuComponents/Menu.es.js +59 -35
  572. package/dist/src/components/Menu/MenuComponents/Menu.es.js.map +1 -1
  573. package/dist/src/components/Menu/MenuComponents/Menu.styled.cjs.js +13 -0
  574. package/dist/src/components/Menu/MenuComponents/Menu.styled.cjs.js.map +1 -1
  575. package/dist/src/components/Menu/MenuComponents/Menu.styled.es.js +13 -0
  576. package/dist/src/components/Menu/MenuComponents/Menu.styled.es.js.map +1 -1
  577. package/dist/src/components/Menu/MenuComponents/MenuItem.cjs.js +1 -1
  578. package/dist/src/components/Menu/MenuComponents/MenuItem.cjs.js.map +1 -1
  579. package/dist/src/components/Menu/MenuComponents/MenuItem.es.js +52 -36
  580. package/dist/src/components/Menu/MenuComponents/MenuItem.es.js.map +1 -1
  581. package/dist/src/components/Menu/MenuComponents/MenuList.cjs.js +1 -1
  582. package/dist/src/components/Menu/MenuComponents/MenuList.cjs.js.map +1 -1
  583. package/dist/src/components/Menu/MenuComponents/MenuList.es.js +103 -83
  584. package/dist/src/components/Menu/MenuComponents/MenuList.es.js.map +1 -1
  585. package/dist/types/api/generated/anatomy.d.ts +23 -0
  586. package/dist/types/api/generated/attributes.d.ts +15 -4
  587. package/dist/types/api/generated/entityLists.d.ts +102 -9
  588. package/dist/types/api/generated/graphql.d.ts +9 -1
  589. package/dist/types/api/generated/projects.d.ts +8 -0
  590. package/dist/types/api/queries/attributes/getAttributes.d.ts +1 -0
  591. package/dist/types/api/queries/attributes/updateAttributes.d.ts +162 -0
  592. package/dist/types/api/queries/entityLists/getLists.d.ts +152 -0
  593. package/dist/types/api/queries/entityLists/getListsAttributes.d.ts +5 -0
  594. package/dist/types/api/queries/entityLists/index.d.ts +1 -0
  595. package/dist/types/api/queries/entityLists/listFolders.d.ts +613 -0
  596. package/dist/types/api/queries/entityLists/types.d.ts +3 -1
  597. package/dist/types/api/queries/entityLists/updateLists.d.ts +5 -0
  598. package/dist/types/api/queries/entityLists/updateListsAttributes.d.ts +5 -0
  599. package/dist/types/api/queries/project/getProject.d.ts +4 -305
  600. package/dist/types/api/queries/project/updateProject.d.ts +803 -0
  601. package/dist/types/api/queries/users/updateUsers.d.ts +160 -0
  602. package/dist/types/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.d.ts +4 -0
  603. package/dist/types/components/DetailsPanelDetails/BorderedSection.d.ts +5 -3
  604. package/dist/types/components/DetailsPanelDetails/DetailsSection.d.ts +3 -2
  605. package/dist/types/components/DetailsPanelDetails/index.d.ts +1 -0
  606. package/dist/types/components/EnumEditor/EnumEditorItem.d.ts +13 -0
  607. package/dist/types/components/EnumEditor/index.d.ts +1 -0
  608. package/dist/types/components/ListAttributeForm/ListAttributeForm.d.ts +11 -0
  609. package/dist/types/components/ListAttributeForm/index.d.ts +1 -0
  610. package/dist/types/components/ListMetaData/ListMetaData.d.ts +8 -0
  611. package/dist/types/components/ListMetaData/index.d.ts +1 -0
  612. package/dist/types/components/Powerpack/PowerpackDialog.styled.d.ts +1 -0
  613. package/dist/types/components/index.d.ts +2 -0
  614. package/dist/types/containers/DetailsPanel/DetailsPanel.styled.d.ts +7 -0
  615. package/dist/types/containers/ProjectTreeTable/context/ProjectDataContext.d.ts +2 -0
  616. package/dist/types/containers/ProjectTreeTable/hooks/index.d.ts +1 -0
  617. package/dist/types/containers/ProjectTreeTable/hooks/useAttributesList.d.ts +1 -2
  618. package/dist/types/containers/ProjectTreeTable/hooks/useColumnGroupBy.d.ts +10 -0
  619. package/dist/types/containers/SimpleTable/SimpleTable.d.ts +3 -0
  620. package/dist/types/containers/SimpleTable/SimpleTableRowTemplate.d.ts +5 -1
  621. package/dist/types/context/AddonProjectContext.d.ts +2 -1
  622. package/dist/types/context/PowerpackContext.d.ts +4 -2
  623. package/dist/types/context/index.d.ts +1 -0
  624. package/dist/types/hooks/index.d.ts +1 -0
  625. package/dist/types/hooks/useQueryArgumentChangeLoading.d.ts +9 -0
  626. package/dist/types/util/checkName.d.ts +9 -1
  627. package/dist/util.cjs.js +1 -1
  628. package/dist/util.es.js +34 -32
  629. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"useBuildGroupByTableData.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.ts"],"sourcesContent":["// based on the groupBy field we take a flat list of items and group them\n// each group is a root node with subItems as the grouped items\n// any leftover items that do not match the groupBy field are added as a separate group (\"Ungrouped\")\n\nimport { ProjectModel, EntityGroup } from '@shared/api'\nimport { TableGroupBy } from '../context'\nimport { EditorTaskNode, EntitiesMap, EntityMap, ProjectTableAttribute, TableRow } from '../types'\nimport { useGetEntityTypeData } from './useGetEntityTypeData'\nimport { useCallback } from 'react'\nimport { linksToTableData } from '../utils'\nimport { productTypes } from '@shared/util'\nexport type GroupByEntityType = 'task' | 'folder' | 'version' | 'product'\n\nexport type GroupData = {\n value: string\n label: string\n color?: string\n icon?: string\n img?: string\n count?: number\n}\n\nexport const NEXT_PAGE_ID = 'next-page'\nexport const UNGROUPED_VALUE = '_ungrouped'\nexport const ROW_ID_SEPARATOR = '__'\n\nconst valueToStringArray = (value?: any): string[] =>\n value ? (Array.isArray(value) ? value.map((v) => v.toString()) : [value.toString()]) : []\n\n// get group label, color and icon\nconst getGroupData = (groupById: string, groupValue: string, groups?: EntityGroup[]): GroupData => {\n if (!groups)\n return {\n value: groupValue,\n label: groupValue,\n }\n\n const group = groups.find((g) => g.value === groupValue)\n if (!group) {\n return {\n value: groupValue,\n label: groupValue,\n }\n } else {\n return {\n value: group.value,\n label: group.label || group.value,\n color: group.color,\n icon: group.icon,\n count: group.count,\n img: groupById === 'assignees' ? `/api/users/${group.value}/avatar` : undefined,\n }\n }\n}\n\nexport const GROUP_BY_ID = '_GROUP_'\nexport const buildGroupId = (value: string) => `${GROUP_BY_ID}${value}`\nexport const parseGroupId = (groupId: string): string | null => {\n if (!groupId.startsWith(GROUP_BY_ID)) return null\n return groupId.slice(GROUP_BY_ID.length) // +1 for the underscore\n}\nexport const isGroupId = (id: string): boolean => id.startsWith(GROUP_BY_ID)\n\ntype BuildGroupByTableProps = {\n project?: ProjectModel\n entities: EntitiesMap\n entityType?: GroupByEntityType\n groups?: EntityGroup[]\n attribFields: ProjectTableAttribute[]\n showEmpty?: boolean\n}\n\n// get sorting ids based on the groupBy field\nconst getSortingIds = (\n groupBy: TableGroupBy,\n project?: ProjectModel,\n attribFields: ProjectTableAttribute[] = [],\n): string[] => {\n const attributeId = groupBy.id.replace('attrib.', '')\n\n // for status, taskType, folderType use project data order\n if (attributeId === 'status') {\n return project?.statuses?.map((s) => s.name) || []\n } else if (attributeId === 'taskType') {\n return project?.taskTypes?.map((t) => t.name) || []\n } else if (attributeId === 'folderType') {\n return project?.folderTypes?.map((f) => f.name) || []\n } else if (groupBy.id.startsWith('attrib.')) {\n // for other enum attributes, use the enum values order\n return (\n attribFields\n .find((field) => field.name === attributeId)\n ?.data.enum?.map((e) => e.value.toString()) || []\n )\n } else return []\n}\n\nconst useBuildGroupByTableData = (props: BuildGroupByTableProps) => {\n const { project, entities, entityType, groups = [], attribFields, showEmpty } = props\n const getEntityTypeData = useGetEntityTypeData({ projectInfo: project })\n\n const entityToGroupRow = useCallback(\n (task: EditorTaskNode, group?: string): TableRow => {\n const typeData = getEntityTypeData('task', task.taskType)\n return {\n id: task.id + ROW_ID_SEPARATOR + group, // unique id for the task in the folder\n entityId: task.id,\n entityType: 'task',\n parentId: task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n parents: task.parents || [],\n updatedAt: task.updatedAt,\n links: linksToTableData(task.links, 'task', {\n folderTypes: project?.folderTypes || [],\n productTypes: Object.values(productTypes) || [],\n taskTypes: project?.taskTypes || [],\n }),\n }\n },\n [getEntityTypeData],\n )\n\n const buildGroupByTableData = (groupBy: TableGroupBy): TableRow[] => {\n const groupsMap = new Map<string, TableRow>()\n\n for (const group of groups) {\n const groupValue = group.value?.toString() as string\n const groupId = buildGroupId(groupValue)\n const groupData = getGroupData(groupBy.id, groupValue, groups)\n groupsMap.set(groupValue, {\n id: groupId,\n name: groupValue,\n entityType: 'group',\n subRows: [],\n label: groupData.label,\n group: groupData,\n links: {},\n })\n }\n\n const ungroupedId = GROUP_BY_ID + '.' + UNGROUPED_VALUE // unique id for ungrouped group\n // gets the \"Ungrouped\" group, creating it if it doesn't exist\n const getUnGroupedGroup = () => {\n let ungroupedGroup = groupsMap.get(ungroupedId)\n if (!ungroupedGroup) {\n ungroupedGroup = {\n id: ungroupedId,\n name: 'Ungrouped',\n entityType: 'group',\n subRows: [],\n label: 'Ungrouped',\n group: { value: ungroupedId, label: 'Ungrouped' },\n links: {},\n }\n // create ungrouped group if it doesn't exist\n groupsMap.set(ungroupedId, ungroupedGroup)\n }\n return ungroupedGroup\n }\n\n for (const [id, entity] of entities) {\n // if the entity is not of the specified type, skip it\n if (entity.entityType !== entityType) continue\n // add entities to specific group\n let groupValues: string[] = []\n if (groupBy.id.startsWith('attrib.')) {\n // for attribute based grouping, get the value of the attribute\n const attributeId = groupBy.id.split('.')[1]\n groupValues = valueToStringArray(entity.attrib?.[attributeId])\n } else {\n groupValues = valueToStringArray(entity[groupBy.id as keyof EntityMap])\n }\n\n // if there are no values, add to \"Ungrouped\" group\n if (groupValues.length === 0) {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n // for each group value, find it's group and add the entity to it\n // if we can't find the group, add it to \"Ungrouped\"\n for (const groupValue of groupValues) {\n const groupRow = groupsMap.get(groupValue)\n if (groupRow) {\n groupRow.subRows.push(entityToGroupRow(entity as EditorTaskNode, groupValue))\n } else {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n }\n\n // for groups metadata on entity, check if there is a next page\n if ('groups' in entity && Array.isArray(entity.groups)) {\n for (const group of entity.groups) {\n const hasNextPageGroup = group.hasNextPage\n if (hasNextPageGroup && groupsMap.has(group.value)) {\n // add a next page row to the group\n const groupRow = groupsMap.get(group.value)\n if (groupRow) {\n groupRow.subRows.push({\n id: `${group.value}-next-page`,\n name: `Load more tasks...`,\n entityType: NEXT_PAGE_ID,\n subRows: [],\n label: `Next page for ${group.value}`,\n group: { value: group.value, label: group.value },\n links: {},\n })\n }\n }\n }\n }\n }\n\n const groupsList = Array.from(groupsMap.values())\n\n const attribSortingIds = getSortingIds(groupBy, project, attribFields)\n\n // sort the groups by their label\n // if the group is an attribute with enum values, sort by the enum values\n groupsList.sort((a, b) => {\n if (a.group?.value === ungroupedId) return 1 // \"Ungrouped\" should be last\n if (b.group?.value === ungroupedId) return -1 // \"Ungrouped\" should be last\n if (attribSortingIds.length) {\n // sort by index of the enum value\n const indexA = attribSortingIds.indexOf(a.group?.value || '')\n const indexB = attribSortingIds.indexOf(b.group?.value || '')\n if (indexA !== -1 && indexB !== -1) {\n return indexA - indexB\n }\n if (indexA !== -1) return -1 // a is in the enum, b is not\n if (indexB !== -1) return 1 // b is in the enum, a is not\n // if both are not in the enum, sort by label\n return a.group?.label?.localeCompare(b.group?.label || '') || 0\n } else {\n // for other groupings, sort by the group label\n return a.group?.label?.localeCompare(b.group?.label || '') || 0\n }\n })\n\n // filter out empty groups\n const nonEmptyGroups = groupsList.filter((group) => group.subRows.length > 0)\n\n return showEmpty ? groupsList : nonEmptyGroups\n }\n\n return buildGroupByTableData\n}\n\nexport default useBuildGroupByTableData\n"],"names":["NEXT_PAGE_ID","UNGROUPED_VALUE","ROW_ID_SEPARATOR","valueToStringArray","value","v","getGroupData","groupById","groupValue","groups","group","g","GROUP_BY_ID","buildGroupId","parseGroupId","groupId","isGroupId","id","getSortingIds","groupBy","project","attribFields","attributeId","_a","s","_b","t","_c","f","_e","_d","field","e","useBuildGroupByTableData","props","entities","entityType","showEmpty","getEntityTypeData","useGetEntityTypeData","entityToGroupRow","useCallback","task","typeData","linksToTableData","productTypes","groupsMap","groupData","ungroupedId","getUnGroupedGroup","ungroupedGroup","entity","groupValues","groupRow","groupsList","attribSortingIds","a","b","indexA","indexB","_g","_f","_j","_h","_i","nonEmptyGroups"],"mappings":"qkMAsBaA,EAAe,YACfC,EAAkB,aAClBC,EAAmB,KAE1BC,EAAsBC,GAC1BA,EAAS,MAAM,QAAQA,CAAK,EAAIA,EAAM,IAAKC,GAAMA,EAAE,SAAU,CAAA,EAAI,CAACD,EAAM,SAAU,CAAA,EAAK,CAAC,EAGpFE,EAAe,CAACC,EAAmBC,EAAoBC,IAAsC,CACjG,GAAI,CAACA,EACI,MAAA,CACL,MAAOD,EACP,MAAOA,CACT,EAEF,MAAME,EAAQD,EAAO,KAAME,GAAMA,EAAE,QAAUH,CAAU,EACvD,OAAKE,EAMI,CACL,MAAOA,EAAM,MACb,MAAOA,EAAM,OAASA,EAAM,MAC5B,MAAOA,EAAM,MACb,KAAMA,EAAM,KACZ,MAAOA,EAAM,MACb,IAAKH,IAAc,YAAc,cAAcG,EAAM,KAAK,UAAY,MACxE,EAZO,CACL,MAAOF,EACP,MAAOA,CACT,CAWJ,EAEaI,EAAc,UACdC,EAAgBT,GAAkB,GAAGQ,CAAW,GAAGR,CAAK,GACxDU,EAAgBC,GACtBA,EAAQ,WAAWH,CAAW,EAC5BG,EAAQ,MAAMH,EAAY,MAAM,EADM,KAGlCI,EAAaC,GAAwBA,EAAG,WAAWL,CAAW,EAYrEM,EAAgB,CACpBC,EACAC,EACAC,EAAwC,CAAA,IAC3B,eACb,MAAMC,EAAcH,EAAQ,GAAG,QAAQ,UAAW,EAAE,EAGpD,OAAIG,IAAgB,WACXC,EAAAH,GAAA,YAAAA,EAAS,WAAT,YAAAG,EAAmB,IAAKC,GAAMA,EAAE,QAAS,CAAC,EACxCF,IAAgB,aAClBG,EAAAL,GAAA,YAAAA,EAAS,YAAT,YAAAK,EAAoB,IAAKC,GAAMA,EAAE,QAAS,CAAC,EACzCJ,IAAgB,eAClBK,EAAAP,GAAA,YAAAA,EAAS,cAAT,YAAAO,EAAsB,IAAKC,GAAMA,EAAE,QAAS,CAAC,EAC3CT,EAAQ,GAAG,WAAW,SAAS,IAGtCU,GAAAC,EAAAT,EACG,KAAMU,GAAUA,EAAM,OAAST,CAAW,IAD7C,YAAAQ,EAEI,KAAK,OAFT,YAAAD,EAEe,IAAKG,GAAMA,EAAE,MAAM,SAAU,KAAK,CAAC,EAExC,CAAC,CACjB,EAEMC,EAA4BC,GAAkC,CAC5D,KAAA,CAAE,QAAAd,EAAS,SAAAe,EAAU,WAAAC,EAAY,OAAA3B,EAAS,GAAI,aAAAY,EAAc,UAAAgB,CAAA,EAAcH,EAC1EI,EAAoBC,EAAA,qBAAqB,CAAE,YAAanB,EAAS,EAEjEoB,EAAmBC,EAAA,YACvB,CAACC,EAAsBhC,IAA6B,CAClD,MAAMiC,EAAWL,EAAkB,OAAQI,EAAK,QAAQ,EACjD,MAAA,CACL,GAAIA,EAAK,GAAKxC,EAAmBQ,EACjC,SAAUgC,EAAK,GACf,WAAY,OACZ,SAAUA,EAAK,SACf,KAAMA,EAAK,MAAQ,GACnB,MAAOA,EAAK,OAASA,EAAK,MAAQ,GAClC,MAAMC,GAAA,YAAAA,EAAU,OAAQ,KACxB,OAAOA,GAAA,YAAAA,EAAU,QAAS,KAC1B,OAAQD,EAAK,OACb,UAAWA,EAAK,UAChB,KAAMA,EAAK,KACX,IAAK,KACL,QAAS,CAAC,EACV,QAASA,EAAK,UAAY,KAC1B,OAAQA,EAAK,OACb,UAAWA,EAAK,UAChB,QAASA,EAAK,SAAW,CAAC,EAC1B,UAAWA,EAAK,UAChB,MAAOE,EAAA,iBAAiBF,EAAK,MAAO,OAAQ,CAC1C,aAAatB,GAAA,YAAAA,EAAS,cAAe,CAAC,EACtC,aAAc,OAAO,OAAOyB,CAAY,GAAK,CAAC,EAC9C,WAAWzB,GAAA,YAAAA,EAAS,YAAa,CAAA,CAClC,CAAA,CACH,CACF,EACA,CAACkB,CAAiB,CACpB,EA6HO,OA3HwBnB,GAAsC,SAC7D,MAAA2B,MAAgB,IAEtB,UAAWpC,KAASD,EAAQ,CACpB,MAAAD,GAAae,EAAAb,EAAM,QAAN,YAAAa,EAAa,WAC1BR,EAAUF,EAAaL,CAAU,EACjCuC,EAAYzC,EAAaa,EAAQ,GAAIX,EAAYC,CAAM,EAC7DqC,EAAU,IAAItC,EAAY,CACxB,GAAIO,EACJ,KAAMP,EACN,WAAY,QACZ,QAAS,CAAC,EACV,MAAOuC,EAAU,MACjB,MAAOA,EACP,MAAO,CAAA,CAAC,CACT,CAAA,CAGG,MAAAC,EAAcpC,EAAc,IAAMX,EAElCgD,EAAoB,IAAM,CAC1B,IAAAC,EAAiBJ,EAAU,IAAIE,CAAW,EAC9C,OAAKE,IACcA,EAAA,CACf,GAAIF,EACJ,KAAM,YACN,WAAY,QACZ,QAAS,CAAC,EACV,MAAO,YACP,MAAO,CAAE,MAAOA,EAAa,MAAO,WAAY,EAChD,MAAO,CAAA,CACT,EAEUF,EAAA,IAAIE,EAAaE,CAAc,GAEpCA,CACT,EAEA,SAAW,CAACjC,EAAIkC,CAAM,IAAKhB,EAAU,CAE/B,GAAAgB,EAAO,aAAef,EAAY,SAEtC,IAAIgB,EAAwB,CAAC,EAC7B,GAAIjC,EAAQ,GAAG,WAAW,SAAS,EAAG,CAEpC,MAAMG,EAAcH,EAAQ,GAAG,MAAM,GAAG,EAAE,CAAC,EAC3CiC,EAAcjD,GAAmBsB,EAAA0B,EAAO,SAAP,YAAA1B,EAAgBH,EAAY,CAAA,MAE7D8B,EAAcjD,EAAmBgD,EAAOhC,EAAQ,EAAqB,CAAC,EAIpEiC,EAAY,SAAW,GACFH,EAAkB,EAC1B,QAAQ,KAAKT,EAAiBW,EAA0BlD,CAAe,CAAC,EAIzF,UAAWO,KAAc4C,EAAa,CAC9B,MAAAC,EAAWP,EAAU,IAAItC,CAAU,EACrC6C,EACFA,EAAS,QAAQ,KAAKb,EAAiBW,EAA0B3C,CAAU,CAAC,EAErDyC,EAAkB,EAC1B,QAAQ,KAAKT,EAAiBW,EAA0BlD,CAAe,CAAC,CACzF,CAIF,GAAI,WAAYkD,GAAU,MAAM,QAAQA,EAAO,MAAM,GACxC,UAAAzC,KAASyC,EAAO,OAEzB,GADyBzC,EAAM,aACPoC,EAAU,IAAIpC,EAAM,KAAK,EAAG,CAElD,MAAM2C,EAAWP,EAAU,IAAIpC,EAAM,KAAK,EACtC2C,GACFA,EAAS,QAAQ,KAAK,CACpB,GAAI,GAAG3C,EAAM,KAAK,aAClB,KAAM,qBACN,WAAYV,EACZ,QAAS,CAAC,EACV,MAAO,iBAAiBU,EAAM,KAAK,GACnC,MAAO,CAAE,MAAOA,EAAM,MAAO,MAAOA,EAAM,KAAM,EAChD,MAAO,CAAA,CAAC,CACT,CACH,EAGN,CAGF,MAAM4C,EAAa,MAAM,KAAKR,EAAU,QAAQ,EAE1CS,EAAmBrC,EAAcC,EAASC,EAASC,CAAY,EAI1DiC,EAAA,KAAK,CAACE,EAAGC,IAAM,yBACxB,KAAIlC,EAAAiC,EAAE,QAAF,YAAAjC,EAAS,SAAUyB,EAAoB,MAAA,GAC3C,KAAIvB,EAAAgC,EAAE,QAAF,YAAAhC,EAAS,SAAUuB,EAAoB,MAAA,GAC3C,GAAIO,EAAiB,OAAQ,CAE3B,MAAMG,EAASH,EAAiB,UAAQ5B,EAAA6B,EAAE,QAAF,YAAA7B,EAAS,QAAS,EAAE,EACtDgC,EAASJ,EAAiB,UAAQzB,EAAA2B,EAAE,QAAF,YAAA3B,EAAS,QAAS,EAAE,EACxD,OAAA4B,IAAW,IAAMC,IAAW,GACvBD,EAASC,EAEdD,IAAW,GAAW,GACtBC,IAAW,GAAW,IAEnBC,GAAA/B,EAAA2B,EAAE,QAAF,YAAA3B,EAAS,QAAT,YAAA+B,EAAgB,gBAAcC,EAAAJ,EAAE,QAAF,YAAAI,EAAS,QAAS,MAAO,CAAA,KAGvD,SAAAC,GAAAC,EAAAP,EAAE,QAAF,YAAAO,EAAS,QAAT,YAAAD,EAAgB,gBAAcE,EAAAP,EAAE,QAAF,YAAAO,EAAS,QAAS,MAAO,CAChE,CACD,EAGK,MAAAC,EAAiBX,EAAW,OAAQ5C,GAAUA,EAAM,QAAQ,OAAS,CAAC,EAE5E,OAAO2B,EAAYiB,EAAaW,CAClC,CAGF"}
1
+ {"version":3,"file":"useBuildGroupByTableData.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.ts"],"sourcesContent":["// based on the groupBy field we take a flat list of items and group them\n// each group is a root node with subItems as the grouped items\n// any leftover items that do not match the groupBy field are added as a separate group (\"Ungrouped\")\n\nimport { ProjectModel, EntityGroup } from '@shared/api'\nimport { TableGroupBy } from '../context'\nimport { EditorTaskNode, EntitiesMap, EntityMap, ProjectTableAttribute, TableRow } from '../types'\nimport { useGetEntityTypeData } from './useGetEntityTypeData'\nimport { useCallback } from 'react'\nimport { linksToTableData } from '../utils'\nimport { productTypes } from '@shared/util'\nexport type GroupByEntityType = 'task' | 'folder' | 'version' | 'product'\n\nexport type GroupData = {\n value: string\n label: string\n color?: string\n icon?: string\n img?: string\n count?: number\n}\n\nexport const NEXT_PAGE_ID = 'next-page'\nexport const UNGROUPED_VALUE = '_ungrouped'\nexport const ROW_ID_SEPARATOR = '__'\n\nconst valueToStringArray = (value?: any): string[] =>\n value ? (Array.isArray(value) ? value.map((v) => v.toString()) : [value.toString()]) : []\n\n// get group label, color and icon\nconst getGroupData = (groupById: string, groupValue: string, groups?: EntityGroup[]): GroupData => {\n if (!groups)\n return {\n value: groupValue,\n label: groupValue,\n }\n\n const group = groups.find((g) => g.value === groupValue)\n if (!group) {\n return {\n value: groupValue,\n label: groupValue,\n }\n } else {\n return {\n value: group.value,\n label: group.label || group.value,\n color: group.color,\n icon: group.icon,\n count: group.count,\n img: groupById === 'assignees' ? `/api/users/${group.value}/avatar` : undefined,\n }\n }\n}\n\nexport const GROUP_BY_ID = '_GROUP_'\nexport const buildGroupId = (value: string) => `${GROUP_BY_ID}${value}`\nexport const parseGroupId = (groupId: string): string | null => {\n if (!groupId.startsWith(GROUP_BY_ID)) return null\n return groupId.slice(GROUP_BY_ID.length) // +1 for the underscore\n}\nexport const isGroupId = (id: string): boolean => id.startsWith(GROUP_BY_ID)\n\ntype BuildGroupByTableProps = {\n project?: ProjectModel\n entities: EntitiesMap\n entityType?: GroupByEntityType\n groups?: EntityGroup[]\n attribFields: ProjectTableAttribute[]\n showEmpty?: boolean\n}\n\n// get sorting ids based on the groupBy field\nconst getSortingIds = (\n groupBy: TableGroupBy,\n project?: ProjectModel,\n attribFields: ProjectTableAttribute[] = [],\n): string[] => {\n const attributeId = groupBy.id.replace('attrib.', '')\n\n // for status, taskType, folderType use project data order\n if (attributeId === 'status') {\n return project?.statuses?.map((s) => s.name) || []\n } else if (attributeId === 'taskType') {\n return project?.taskTypes?.map((t) => t.name) || []\n } else if (attributeId === 'folderType') {\n return project?.folderTypes?.map((f) => f.name) || []\n } else if (groupBy.id.startsWith('attrib.')) {\n // for other enum attributes, use the enum values order\n return (\n attribFields\n .find((field) => field.name === attributeId)\n ?.data.enum?.map((e) => e.value.toString()) || []\n )\n } else return []\n}\n\nconst useBuildGroupByTableData = (props: BuildGroupByTableProps) => {\n const { project, entities, entityType, groups = [], attribFields, showEmpty } = props\n const getEntityTypeData = useGetEntityTypeData({ projectInfo: project })\n\n const entityToGroupRow = useCallback(\n (task: EditorTaskNode, group?: string): TableRow => {\n const typeData = getEntityTypeData('task', task.taskType)\n return {\n id: task.id + ROW_ID_SEPARATOR + group, // unique id for the task in the folder\n entityId: task.id,\n entityType: 'task',\n parentId: task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n parents: task.parents || [],\n updatedAt: task.updatedAt,\n links: linksToTableData(task.links, 'task', {\n folderTypes: project?.folderTypes || [],\n productTypes: Object.values(productTypes) || [],\n taskTypes: project?.taskTypes || [],\n }),\n }\n },\n [getEntityTypeData],\n )\n\n const buildGroupByTableData = (groupBy: TableGroupBy): TableRow[] => {\n const groupsMap = new Map<string, TableRow>()\n\n for (const group of groups) {\n const groupValue = group.value?.toString() as string\n const groupId = buildGroupId(groupValue)\n const groupData = getGroupData(groupBy.id, groupValue, groups)\n groupsMap.set(groupValue, {\n id: groupId,\n name: groupValue,\n entityType: 'group',\n subRows: [],\n label: groupData.label,\n group: groupData,\n links: {},\n })\n }\n\n const ungroupedId = GROUP_BY_ID + '.' + UNGROUPED_VALUE // unique id for ungrouped group\n // gets the \"Ungrouped\" group, creating it if it doesn't exist\n const getUnGroupedGroup = () => {\n let ungroupedGroup = groupsMap.get(ungroupedId)\n if (!ungroupedGroup) {\n ungroupedGroup = {\n id: ungroupedId,\n name: 'Ungrouped',\n entityType: 'group',\n subRows: [],\n label: 'Ungrouped',\n group: { value: ungroupedId, label: 'Ungrouped' },\n links: {},\n }\n // create ungrouped group if it doesn't exist\n groupsMap.set(ungroupedId, ungroupedGroup)\n }\n return ungroupedGroup\n }\n\n for (const [id, entity] of entities) {\n // if the entity is not of the specified type, skip it\n if (entity.entityType !== entityType) continue\n // add entities to specific group\n let groupValues: string[] = []\n if (groupBy.id.startsWith('attrib.')) {\n // for attribute based grouping, get the value of the attribute\n const attributeId = groupBy.id.split('.')[1]\n groupValues = valueToStringArray(entity.attrib?.[attributeId])\n } else {\n groupValues = valueToStringArray(entity[groupBy.id as keyof EntityMap])\n }\n\n // if there are no values, add to \"Ungrouped\" group\n if (groupValues.length === 0) {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n // for each group value, find it's group and add the entity to it\n // if we can't find the group, add it to \"Ungrouped\"\n for (const groupValue of groupValues) {\n const groupRow = groupsMap.get(groupValue)\n if (groupRow) {\n groupRow.subRows.push(entityToGroupRow(entity as EditorTaskNode, groupValue))\n } else {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n }\n\n // for groups metadata on entity, check if there is a next page\n if ('groups' in entity && Array.isArray(entity.groups)) {\n for (const group of entity.groups) {\n const hasNextPageGroup = group.hasNextPage\n if (hasNextPageGroup && groupsMap.has(group.value)) {\n // add a next page row to the group\n const groupRow = groupsMap.get(group.value)\n if (groupRow) {\n groupRow.subRows.push({\n id: `${group.value}-next-page`,\n name: `Load more tasks...`,\n entityType: NEXT_PAGE_ID,\n subRows: [],\n label: `Next page for ${group.value}`,\n group: { value: group.value, label: group.value },\n links: {},\n })\n }\n }\n }\n }\n }\n\n const groupsList = Array.from(groupsMap.values())\n\n const attribSortingIds = getSortingIds(groupBy, project, attribFields)\n\n // sort the groups by their label\n // if the group is an attribute with enum values, sort by the enum values\n groupsList.sort((a, b) => {\n if (a.group?.value === ungroupedId) return 1 // \"Ungrouped\" should be last\n if (b.group?.value === ungroupedId) return -1 // \"Ungrouped\" should be last\n if (attribSortingIds.length) {\n // sort by index of the enum value\n const indexA = attribSortingIds.indexOf(a.group?.value || '')\n const indexB = attribSortingIds.indexOf(b.group?.value || '')\n if (indexA !== -1 && indexB !== -1) {\n return indexA - indexB\n }\n if (indexA !== -1) return -1 // a is in the enum, b is not\n if (indexB !== -1) return 1 // b is in the enum, a is not\n // if both are not in the enum, sort by label\n return a.group?.label?.localeCompare(b.group?.label || '') || 0\n } else {\n // for other groupings, sort by the group label\n return a.group?.label?.localeCompare(b.group?.label || '') || 0\n }\n })\n\n // filter out empty groups\n const nonEmptyGroups = groupsList.filter((group) => group.subRows.length > 0)\n\n return showEmpty ? groupsList : nonEmptyGroups\n }\n\n return buildGroupByTableData\n}\n\nexport default useBuildGroupByTableData\n"],"names":["NEXT_PAGE_ID","UNGROUPED_VALUE","ROW_ID_SEPARATOR","valueToStringArray","value","v","getGroupData","groupById","groupValue","groups","group","g","GROUP_BY_ID","buildGroupId","parseGroupId","groupId","isGroupId","id","getSortingIds","groupBy","project","attribFields","attributeId","_a","s","_b","t","_c","f","_e","_d","field","e","useBuildGroupByTableData","props","entities","entityType","showEmpty","getEntityTypeData","useGetEntityTypeData","entityToGroupRow","useCallback","task","typeData","linksToTableData","productTypes","groupsMap","groupData","ungroupedId","getUnGroupedGroup","ungroupedGroup","entity","groupValues","groupRow","groupsList","attribSortingIds","a","b","indexA","indexB","_g","_f","_j","_h","_i","nonEmptyGroups"],"mappings":"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"}
@@ -77,6 +77,7 @@ import "../../../api/queries/entityLists/getLists.es.js";
77
77
  import "../../../api/queries/entityLists/updateLists.es.js";
78
78
  import "../../../api/queries/entityLists/getListsAttributes.es.js";
79
79
  import "../../../api/queries/entityLists/updateListsAttributes.es.js";
80
+ import "../../../api/queries/entityLists/listFolders.es.js";
80
81
  import "../../../api/queries/folders/getFolders.es.js";
81
82
  import "../../../api/queries/grouping/getGrouping.es.js";
82
83
  import "../../../api/queries/links/updateLinks.es.js";
@@ -112,6 +113,7 @@ import "../../../context/AddonProjectContext.es.js";
112
113
  import "../../../context/AddonContext.es.js";
113
114
  import "../../../context/PowerpackContext.es.js";
114
115
  import "../../../context/MoveEntityContext.es.js";
116
+ import "../../../context/MenuContext.es.js";
115
117
  import "react-redux";
116
118
  import "custom-protocol-check";
117
119
  import "../components/GroupSettingsFallback.es.js";
@@ -134,11 +136,11 @@ const M = "next-page", A = "_ungrouped", B = "__", N = (p) => p ? Array.isArray(
134
136
  value: t,
135
137
  label: t
136
138
  };
137
- }, y = "_GROUP_", X = (p) => `${y}${p}`, ro = (p) => p.startsWith(y) ? p.slice(y.length) : null, oo = (p) => p.startsWith(y), Y = (p, t, d = []) => {
139
+ }, y = "_GROUP_", X = (p) => `${y}${p}`, io = (p) => p.startsWith(y) ? p.slice(y.length) : null, po = (p) => p.startsWith(y), Y = (p, t, d = []) => {
138
140
  var l, T, v, c, g;
139
141
  const e = p.id.replace("attrib.", "");
140
142
  return e === "status" ? ((l = t == null ? void 0 : t.statuses) == null ? void 0 : l.map((s) => s.name)) || [] : e === "taskType" ? ((T = t == null ? void 0 : t.taskTypes) == null ? void 0 : T.map((s) => s.name)) || [] : e === "folderType" ? ((v = t == null ? void 0 : t.folderTypes) == null ? void 0 : v.map((s) => s.name)) || [] : p.id.startsWith("attrib.") ? ((g = (c = d.find((s) => s.name === e)) == null ? void 0 : c.data.enum) == null ? void 0 : g.map((s) => s.value.toString())) || [] : [];
141
- }, io = (p) => {
143
+ }, eo = (p) => {
142
144
  const { project: t, entities: d, entityType: e, groups: l = [], attribFields: T, showEmpty: v } = p, c = $({ projectInfo: t }), g = C(
143
145
  (r, u) => {
144
146
  const n = c("task", r.taskType);
@@ -248,8 +250,8 @@ export {
248
250
  B as ROW_ID_SEPARATOR,
249
251
  A as UNGROUPED_VALUE,
250
252
  X as buildGroupId,
251
- io as default,
252
- oo as isGroupId,
253
- ro as parseGroupId
253
+ eo as default,
254
+ po as isGroupId,
255
+ io as parseGroupId
254
256
  };
255
257
  //# sourceMappingURL=useBuildGroupByTableData.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBuildGroupByTableData.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.ts"],"sourcesContent":["// based on the groupBy field we take a flat list of items and group them\n// each group is a root node with subItems as the grouped items\n// any leftover items that do not match the groupBy field are added as a separate group (\"Ungrouped\")\n\nimport { ProjectModel, EntityGroup } from '@shared/api'\nimport { TableGroupBy } from '../context'\nimport { EditorTaskNode, EntitiesMap, EntityMap, ProjectTableAttribute, TableRow } from '../types'\nimport { useGetEntityTypeData } from './useGetEntityTypeData'\nimport { useCallback } from 'react'\nimport { linksToTableData } from '../utils'\nimport { productTypes } from '@shared/util'\nexport type GroupByEntityType = 'task' | 'folder' | 'version' | 'product'\n\nexport type GroupData = {\n value: string\n label: string\n color?: string\n icon?: string\n img?: string\n count?: number\n}\n\nexport const NEXT_PAGE_ID = 'next-page'\nexport const UNGROUPED_VALUE = '_ungrouped'\nexport const ROW_ID_SEPARATOR = '__'\n\nconst valueToStringArray = (value?: any): string[] =>\n value ? (Array.isArray(value) ? value.map((v) => v.toString()) : [value.toString()]) : []\n\n// get group label, color and icon\nconst getGroupData = (groupById: string, groupValue: string, groups?: EntityGroup[]): GroupData => {\n if (!groups)\n return {\n value: groupValue,\n label: groupValue,\n }\n\n const group = groups.find((g) => g.value === groupValue)\n if (!group) {\n return {\n value: groupValue,\n label: groupValue,\n }\n } else {\n return {\n value: group.value,\n label: group.label || group.value,\n color: group.color,\n icon: group.icon,\n count: group.count,\n img: groupById === 'assignees' ? `/api/users/${group.value}/avatar` : undefined,\n }\n }\n}\n\nexport const GROUP_BY_ID = '_GROUP_'\nexport const buildGroupId = (value: string) => `${GROUP_BY_ID}${value}`\nexport const parseGroupId = (groupId: string): string | null => {\n if (!groupId.startsWith(GROUP_BY_ID)) return null\n return groupId.slice(GROUP_BY_ID.length) // +1 for the underscore\n}\nexport const isGroupId = (id: string): boolean => id.startsWith(GROUP_BY_ID)\n\ntype BuildGroupByTableProps = {\n project?: ProjectModel\n entities: EntitiesMap\n entityType?: GroupByEntityType\n groups?: EntityGroup[]\n attribFields: ProjectTableAttribute[]\n showEmpty?: boolean\n}\n\n// get sorting ids based on the groupBy field\nconst getSortingIds = (\n groupBy: TableGroupBy,\n project?: ProjectModel,\n attribFields: ProjectTableAttribute[] = [],\n): string[] => {\n const attributeId = groupBy.id.replace('attrib.', '')\n\n // for status, taskType, folderType use project data order\n if (attributeId === 'status') {\n return project?.statuses?.map((s) => s.name) || []\n } else if (attributeId === 'taskType') {\n return project?.taskTypes?.map((t) => t.name) || []\n } else if (attributeId === 'folderType') {\n return project?.folderTypes?.map((f) => f.name) || []\n } else if (groupBy.id.startsWith('attrib.')) {\n // for other enum attributes, use the enum values order\n return (\n attribFields\n .find((field) => field.name === attributeId)\n ?.data.enum?.map((e) => e.value.toString()) || []\n )\n } else return []\n}\n\nconst useBuildGroupByTableData = (props: BuildGroupByTableProps) => {\n const { project, entities, entityType, groups = [], attribFields, showEmpty } = props\n const getEntityTypeData = useGetEntityTypeData({ projectInfo: project })\n\n const entityToGroupRow = useCallback(\n (task: EditorTaskNode, group?: string): TableRow => {\n const typeData = getEntityTypeData('task', task.taskType)\n return {\n id: task.id + ROW_ID_SEPARATOR + group, // unique id for the task in the folder\n entityId: task.id,\n entityType: 'task',\n parentId: task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n parents: task.parents || [],\n updatedAt: task.updatedAt,\n links: linksToTableData(task.links, 'task', {\n folderTypes: project?.folderTypes || [],\n productTypes: Object.values(productTypes) || [],\n taskTypes: project?.taskTypes || [],\n }),\n }\n },\n [getEntityTypeData],\n )\n\n const buildGroupByTableData = (groupBy: TableGroupBy): TableRow[] => {\n const groupsMap = new Map<string, TableRow>()\n\n for (const group of groups) {\n const groupValue = group.value?.toString() as string\n const groupId = buildGroupId(groupValue)\n const groupData = getGroupData(groupBy.id, groupValue, groups)\n groupsMap.set(groupValue, {\n id: groupId,\n name: groupValue,\n entityType: 'group',\n subRows: [],\n label: groupData.label,\n group: groupData,\n links: {},\n })\n }\n\n const ungroupedId = GROUP_BY_ID + '.' + UNGROUPED_VALUE // unique id for ungrouped group\n // gets the \"Ungrouped\" group, creating it if it doesn't exist\n const getUnGroupedGroup = () => {\n let ungroupedGroup = groupsMap.get(ungroupedId)\n if (!ungroupedGroup) {\n ungroupedGroup = {\n id: ungroupedId,\n name: 'Ungrouped',\n entityType: 'group',\n subRows: [],\n label: 'Ungrouped',\n group: { value: ungroupedId, label: 'Ungrouped' },\n links: {},\n }\n // create ungrouped group if it doesn't exist\n groupsMap.set(ungroupedId, ungroupedGroup)\n }\n return ungroupedGroup\n }\n\n for (const [id, entity] of entities) {\n // if the entity is not of the specified type, skip it\n if (entity.entityType !== entityType) continue\n // add entities to specific group\n let groupValues: string[] = []\n if (groupBy.id.startsWith('attrib.')) {\n // for attribute based grouping, get the value of the attribute\n const attributeId = groupBy.id.split('.')[1]\n groupValues = valueToStringArray(entity.attrib?.[attributeId])\n } else {\n groupValues = valueToStringArray(entity[groupBy.id as keyof EntityMap])\n }\n\n // if there are no values, add to \"Ungrouped\" group\n if (groupValues.length === 0) {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n // for each group value, find it's group and add the entity to it\n // if we can't find the group, add it to \"Ungrouped\"\n for (const groupValue of groupValues) {\n const groupRow = groupsMap.get(groupValue)\n if (groupRow) {\n groupRow.subRows.push(entityToGroupRow(entity as EditorTaskNode, groupValue))\n } else {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n }\n\n // for groups metadata on entity, check if there is a next page\n if ('groups' in entity && Array.isArray(entity.groups)) {\n for (const group of entity.groups) {\n const hasNextPageGroup = group.hasNextPage\n if (hasNextPageGroup && groupsMap.has(group.value)) {\n // add a next page row to the group\n const groupRow = groupsMap.get(group.value)\n if (groupRow) {\n groupRow.subRows.push({\n id: `${group.value}-next-page`,\n name: `Load more tasks...`,\n entityType: NEXT_PAGE_ID,\n subRows: [],\n label: `Next page for ${group.value}`,\n group: { value: group.value, label: group.value },\n links: {},\n })\n }\n }\n }\n }\n }\n\n const groupsList = Array.from(groupsMap.values())\n\n const attribSortingIds = getSortingIds(groupBy, project, attribFields)\n\n // sort the groups by their label\n // if the group is an attribute with enum values, sort by the enum values\n groupsList.sort((a, b) => {\n if (a.group?.value === ungroupedId) return 1 // \"Ungrouped\" should be last\n if (b.group?.value === ungroupedId) return -1 // \"Ungrouped\" should be last\n if (attribSortingIds.length) {\n // sort by index of the enum value\n const indexA = attribSortingIds.indexOf(a.group?.value || '')\n const indexB = attribSortingIds.indexOf(b.group?.value || '')\n if (indexA !== -1 && indexB !== -1) {\n return indexA - indexB\n }\n if (indexA !== -1) return -1 // a is in the enum, b is not\n if (indexB !== -1) return 1 // b is in the enum, a is not\n // if both are not in the enum, sort by label\n return a.group?.label?.localeCompare(b.group?.label || '') || 0\n } else {\n // for other groupings, sort by the group label\n return a.group?.label?.localeCompare(b.group?.label || '') || 0\n }\n })\n\n // filter out empty groups\n const nonEmptyGroups = groupsList.filter((group) => group.subRows.length > 0)\n\n return showEmpty ? groupsList : nonEmptyGroups\n }\n\n return buildGroupByTableData\n}\n\nexport default useBuildGroupByTableData\n"],"names":["NEXT_PAGE_ID","UNGROUPED_VALUE","ROW_ID_SEPARATOR","valueToStringArray","value","v","getGroupData","groupById","groupValue","groups","group","g","GROUP_BY_ID","buildGroupId","parseGroupId","groupId","isGroupId","id","getSortingIds","groupBy","project","attribFields","attributeId","_a","_b","t","_c","f","_e","_d","field","e","useBuildGroupByTableData","props","entities","entityType","showEmpty","getEntityTypeData","useGetEntityTypeData","entityToGroupRow","useCallback","task","typeData","linksToTableData","productTypes","groupsMap","groupData","ungroupedId","getUnGroupedGroup","ungroupedGroup","entity","groupValues","groupRow","groupsList","attribSortingIds","a","b","indexA","indexB","_g","_f","_j","_h","_i","nonEmptyGroups"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBO,MAAMA,IAAe,aACfC,IAAkB,cAClBC,IAAmB,MAE1BC,IAAqB,CAACC,MAC1BA,IAAS,MAAM,QAAQA,CAAK,IAAIA,EAAM,IAAI,CAACC,MAAMA,EAAE,SAAU,CAAA,IAAI,CAACD,EAAM,SAAU,CAAA,IAAK,CAAC,GAGpFE,IAAe,CAACC,GAAmBC,GAAoBC,MAAsC;AACjG,MAAI,CAACA;AACI,WAAA;AAAA,MACL,OAAOD;AAAA,MACP,OAAOA;AAAA,IACT;AAEF,QAAME,IAAQD,EAAO,KAAK,CAACE,MAAMA,EAAE,UAAUH,CAAU;AACvD,SAAKE,IAMI;AAAA,IACL,OAAOA,EAAM;AAAA,IACb,OAAOA,EAAM,SAASA,EAAM;AAAA,IAC5B,OAAOA,EAAM;AAAA,IACb,MAAMA,EAAM;AAAA,IACZ,OAAOA,EAAM;AAAA,IACb,KAAKH,MAAc,cAAc,cAAcG,EAAM,KAAK,YAAY;AAAA,EACxE,IAZO;AAAA,IACL,OAAOF;AAAA,IACP,OAAOA;AAAA,EACT;AAWJ,GAEaI,IAAc,WACdC,IAAe,CAACT,MAAkB,GAAGQ,CAAW,GAAGR,CAAK,IACxDU,KAAe,CAACC,MACtBA,EAAQ,WAAWH,CAAW,IAC5BG,EAAQ,MAAMH,EAAY,MAAM,IADM,MAGlCI,KAAY,CAACC,MAAwBA,EAAG,WAAWL,CAAW,GAYrEM,IAAgB,CACpBC,GACAC,GACAC,IAAwC,CAAA,MAC3B;;AACb,QAAMC,IAAcH,EAAQ,GAAG,QAAQ,WAAW,EAAE;AAGpD,SAAIG,MAAgB,aACXC,IAAAH,KAAA,gBAAAA,EAAS,aAAT,gBAAAG,EAAmB,IAAI,CAAC,MAAM,EAAE,UAAS,CAAC,IACxCD,MAAgB,eAClBE,IAAAJ,KAAA,gBAAAA,EAAS,cAAT,gBAAAI,EAAoB,IAAI,CAACC,MAAMA,EAAE,UAAS,CAAC,IACzCH,MAAgB,iBAClBI,IAAAN,KAAA,gBAAAA,EAAS,gBAAT,gBAAAM,EAAsB,IAAI,CAACC,MAAMA,EAAE,UAAS,CAAC,IAC3CR,EAAQ,GAAG,WAAW,SAAS,MAGtCS,KAAAC,IAAAR,EACG,KAAK,CAACS,MAAUA,EAAM,SAASR,CAAW,MAD7C,gBAAAO,EAEI,KAAK,SAFT,gBAAAD,EAEe,IAAI,CAACG,MAAMA,EAAE,MAAM,SAAU,OAAK,CAAC,IAExC,CAAC;AACjB,GAEMC,KAA2B,CAACC,MAAkC;AAC5D,QAAA,EAAE,SAAAb,GAAS,UAAAc,GAAU,YAAAC,GAAY,QAAA1B,IAAS,IAAI,cAAAY,GAAc,WAAAe,EAAA,IAAcH,GAC1EI,IAAoBC,EAAqB,EAAE,aAAalB,GAAS,GAEjEmB,IAAmBC;AAAA,IACvB,CAACC,GAAsB/B,MAA6B;AAClD,YAAMgC,IAAWL,EAAkB,QAAQI,EAAK,QAAQ;AACjD,aAAA;AAAA,QACL,IAAIA,EAAK,KAAKvC,IAAmBQ;AAAA;AAAA,QACjC,UAAU+B,EAAK;AAAA,QACf,YAAY;AAAA,QACZ,UAAUA,EAAK;AAAA,QACf,MAAMA,EAAK,QAAQ;AAAA,QACnB,OAAOA,EAAK,SAASA,EAAK,QAAQ;AAAA,QAClC,OAAMC,KAAA,gBAAAA,EAAU,SAAQ;AAAA,QACxB,QAAOA,KAAA,gBAAAA,EAAU,UAAS;AAAA,QAC1B,QAAQD,EAAK;AAAA,QACb,WAAWA,EAAK;AAAA,QAChB,MAAMA,EAAK;AAAA,QACX,KAAK;AAAA,QACL,SAAS,CAAC;AAAA,QACV,SAASA,EAAK,YAAY;AAAA,QAC1B,QAAQA,EAAK;AAAA,QACb,WAAWA,EAAK;AAAA,QAChB,SAASA,EAAK,WAAW,CAAC;AAAA,QAC1B,WAAWA,EAAK;AAAA,QAChB,OAAOE,EAAiBF,EAAK,OAAO,QAAQ;AAAA,UAC1C,cAAarB,KAAA,gBAAAA,EAAS,gBAAe,CAAC;AAAA,UACtC,cAAc,OAAO,OAAOwB,CAAY,KAAK,CAAC;AAAA,UAC9C,YAAWxB,KAAA,gBAAAA,EAAS,cAAa,CAAA;AAAA,QAClC,CAAA;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAACiB,CAAiB;AAAA,EACpB;AA6HO,SA3HuB,CAAClB,MAAsC;;AAC7D,UAAA0B,wBAAgB,IAAsB;AAE5C,eAAWnC,KAASD,GAAQ;AACpB,YAAAD,KAAae,IAAAb,EAAM,UAAN,gBAAAa,EAAa,YAC1BR,IAAUF,EAAaL,CAAU,GACjCsC,IAAYxC,EAAaa,EAAQ,IAAIX,GAAYC,CAAM;AAC7D,MAAAoC,EAAU,IAAIrC,GAAY;AAAA,QACxB,IAAIO;AAAA,QACJ,MAAMP;AAAA,QACN,YAAY;AAAA,QACZ,SAAS,CAAC;AAAA,QACV,OAAOsC,EAAU;AAAA,QACjB,OAAOA;AAAA,QACP,OAAO,CAAA;AAAA,MAAC,CACT;AAAA,IAAA;AAGG,UAAAC,IAAcnC,IAAc,MAAMX,GAElC+C,IAAoB,MAAM;AAC1B,UAAAC,IAAiBJ,EAAU,IAAIE,CAAW;AAC9C,aAAKE,MACcA,IAAA;AAAA,QACf,IAAIF;AAAA,QACJ,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,SAAS,CAAC;AAAA,QACV,OAAO;AAAA,QACP,OAAO,EAAE,OAAOA,GAAa,OAAO,YAAY;AAAA,QAChD,OAAO,CAAA;AAAA,MACT,GAEUF,EAAA,IAAIE,GAAaE,CAAc,IAEpCA;AAAA,IACT;AAEA,eAAW,CAAChC,GAAIiC,CAAM,KAAKhB,GAAU;AAE/B,UAAAgB,EAAO,eAAef,EAAY;AAEtC,UAAIgB,IAAwB,CAAC;AAC7B,UAAIhC,EAAQ,GAAG,WAAW,SAAS,GAAG;AAEpC,cAAMG,IAAcH,EAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;AAC3C,QAAAgC,IAAchD,GAAmBqB,IAAA0B,EAAO,WAAP,gBAAA1B,EAAgBF,EAAY;AAAA,MAAA;AAE7D,QAAA6B,IAAchD,EAAmB+C,EAAO/B,EAAQ,EAAqB,CAAC;AAIpE,MAAAgC,EAAY,WAAW,KACFH,EAAkB,EAC1B,QAAQ,KAAKT,EAAiBW,GAA0BjD,CAAe,CAAC;AAIzF,iBAAWO,KAAc2C,GAAa;AAC9B,cAAAC,IAAWP,EAAU,IAAIrC,CAAU;AACzC,QAAI4C,IACFA,EAAS,QAAQ,KAAKb,EAAiBW,GAA0B1C,CAAU,CAAC,IAErDwC,EAAkB,EAC1B,QAAQ,KAAKT,EAAiBW,GAA0BjD,CAAe,CAAC;AAAA,MACzF;AAIF,UAAI,YAAYiD,KAAU,MAAM,QAAQA,EAAO,MAAM;AACxC,mBAAAxC,KAASwC,EAAO;AAEzB,cADyBxC,EAAM,eACPmC,EAAU,IAAInC,EAAM,KAAK,GAAG;AAElD,kBAAM0C,IAAWP,EAAU,IAAInC,EAAM,KAAK;AAC1C,YAAI0C,KACFA,EAAS,QAAQ,KAAK;AAAA,cACpB,IAAI,GAAG1C,EAAM,KAAK;AAAA,cAClB,MAAM;AAAA,cACN,YAAYV;AAAA,cACZ,SAAS,CAAC;AAAA,cACV,OAAO,iBAAiBU,EAAM,KAAK;AAAA,cACnC,OAAO,EAAE,OAAOA,EAAM,OAAO,OAAOA,EAAM,MAAM;AAAA,cAChD,OAAO,CAAA;AAAA,YAAC,CACT;AAAA,UACH;AAAA;AAAA,IAGN;AAGF,UAAM2C,IAAa,MAAM,KAAKR,EAAU,QAAQ,GAE1CS,IAAmBpC,EAAcC,GAASC,GAASC,CAAY;AAI1D,IAAAgC,EAAA,KAAK,CAACE,GAAGC,MAAM;;AACxB,YAAIjC,IAAAgC,EAAE,UAAF,gBAAAhC,EAAS,WAAUwB,EAAoB,QAAA;AAC3C,YAAIvB,IAAAgC,EAAE,UAAF,gBAAAhC,EAAS,WAAUuB,EAAoB,QAAA;AAC3C,UAAIO,EAAiB,QAAQ;AAE3B,cAAMG,IAASH,EAAiB,UAAQ5B,IAAA6B,EAAE,UAAF,gBAAA7B,EAAS,UAAS,EAAE,GACtDgC,IAASJ,EAAiB,UAAQzB,IAAA2B,EAAE,UAAF,gBAAA3B,EAAS,UAAS,EAAE;AACxD,eAAA4B,MAAW,MAAMC,MAAW,KACvBD,IAASC,IAEdD,MAAW,KAAW,KACtBC,MAAW,KAAW,MAEnBC,KAAA/B,IAAA2B,EAAE,UAAF,gBAAA3B,EAAS,UAAT,gBAAA+B,EAAgB,gBAAcC,IAAAJ,EAAE,UAAF,gBAAAI,EAAS,UAAS,QAAO;AAAA,MAAA;AAGvD,iBAAAC,KAAAC,IAAAP,EAAE,UAAF,gBAAAO,EAAS,UAAT,gBAAAD,EAAgB,gBAAcE,IAAAP,EAAE,UAAF,gBAAAO,EAAS,UAAS,QAAO;AAAA,IAChE,CACD;AAGK,UAAAC,IAAiBX,EAAW,OAAO,CAAC3C,MAAUA,EAAM,QAAQ,SAAS,CAAC;AAE5E,WAAO0B,IAAYiB,IAAaW;AAAA,EAClC;AAGF;"}
1
+ {"version":3,"file":"useBuildGroupByTableData.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.ts"],"sourcesContent":["// based on the groupBy field we take a flat list of items and group them\n// each group is a root node with subItems as the grouped items\n// any leftover items that do not match the groupBy field are added as a separate group (\"Ungrouped\")\n\nimport { ProjectModel, EntityGroup } from '@shared/api'\nimport { TableGroupBy } from '../context'\nimport { EditorTaskNode, EntitiesMap, EntityMap, ProjectTableAttribute, TableRow } from '../types'\nimport { useGetEntityTypeData } from './useGetEntityTypeData'\nimport { useCallback } from 'react'\nimport { linksToTableData } from '../utils'\nimport { productTypes } from '@shared/util'\nexport type GroupByEntityType = 'task' | 'folder' | 'version' | 'product'\n\nexport type GroupData = {\n value: string\n label: string\n color?: string\n icon?: string\n img?: string\n count?: number\n}\n\nexport const NEXT_PAGE_ID = 'next-page'\nexport const UNGROUPED_VALUE = '_ungrouped'\nexport const ROW_ID_SEPARATOR = '__'\n\nconst valueToStringArray = (value?: any): string[] =>\n value ? (Array.isArray(value) ? value.map((v) => v.toString()) : [value.toString()]) : []\n\n// get group label, color and icon\nconst getGroupData = (groupById: string, groupValue: string, groups?: EntityGroup[]): GroupData => {\n if (!groups)\n return {\n value: groupValue,\n label: groupValue,\n }\n\n const group = groups.find((g) => g.value === groupValue)\n if (!group) {\n return {\n value: groupValue,\n label: groupValue,\n }\n } else {\n return {\n value: group.value,\n label: group.label || group.value,\n color: group.color,\n icon: group.icon,\n count: group.count,\n img: groupById === 'assignees' ? `/api/users/${group.value}/avatar` : undefined,\n }\n }\n}\n\nexport const GROUP_BY_ID = '_GROUP_'\nexport const buildGroupId = (value: string) => `${GROUP_BY_ID}${value}`\nexport const parseGroupId = (groupId: string): string | null => {\n if (!groupId.startsWith(GROUP_BY_ID)) return null\n return groupId.slice(GROUP_BY_ID.length) // +1 for the underscore\n}\nexport const isGroupId = (id: string): boolean => id.startsWith(GROUP_BY_ID)\n\ntype BuildGroupByTableProps = {\n project?: ProjectModel\n entities: EntitiesMap\n entityType?: GroupByEntityType\n groups?: EntityGroup[]\n attribFields: ProjectTableAttribute[]\n showEmpty?: boolean\n}\n\n// get sorting ids based on the groupBy field\nconst getSortingIds = (\n groupBy: TableGroupBy,\n project?: ProjectModel,\n attribFields: ProjectTableAttribute[] = [],\n): string[] => {\n const attributeId = groupBy.id.replace('attrib.', '')\n\n // for status, taskType, folderType use project data order\n if (attributeId === 'status') {\n return project?.statuses?.map((s) => s.name) || []\n } else if (attributeId === 'taskType') {\n return project?.taskTypes?.map((t) => t.name) || []\n } else if (attributeId === 'folderType') {\n return project?.folderTypes?.map((f) => f.name) || []\n } else if (groupBy.id.startsWith('attrib.')) {\n // for other enum attributes, use the enum values order\n return (\n attribFields\n .find((field) => field.name === attributeId)\n ?.data.enum?.map((e) => e.value.toString()) || []\n )\n } else return []\n}\n\nconst useBuildGroupByTableData = (props: BuildGroupByTableProps) => {\n const { project, entities, entityType, groups = [], attribFields, showEmpty } = props\n const getEntityTypeData = useGetEntityTypeData({ projectInfo: project })\n\n const entityToGroupRow = useCallback(\n (task: EditorTaskNode, group?: string): TableRow => {\n const typeData = getEntityTypeData('task', task.taskType)\n return {\n id: task.id + ROW_ID_SEPARATOR + group, // unique id for the task in the folder\n entityId: task.id,\n entityType: 'task',\n parentId: task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n parents: task.parents || [],\n updatedAt: task.updatedAt,\n links: linksToTableData(task.links, 'task', {\n folderTypes: project?.folderTypes || [],\n productTypes: Object.values(productTypes) || [],\n taskTypes: project?.taskTypes || [],\n }),\n }\n },\n [getEntityTypeData],\n )\n\n const buildGroupByTableData = (groupBy: TableGroupBy): TableRow[] => {\n const groupsMap = new Map<string, TableRow>()\n\n for (const group of groups) {\n const groupValue = group.value?.toString() as string\n const groupId = buildGroupId(groupValue)\n const groupData = getGroupData(groupBy.id, groupValue, groups)\n groupsMap.set(groupValue, {\n id: groupId,\n name: groupValue,\n entityType: 'group',\n subRows: [],\n label: groupData.label,\n group: groupData,\n links: {},\n })\n }\n\n const ungroupedId = GROUP_BY_ID + '.' + UNGROUPED_VALUE // unique id for ungrouped group\n // gets the \"Ungrouped\" group, creating it if it doesn't exist\n const getUnGroupedGroup = () => {\n let ungroupedGroup = groupsMap.get(ungroupedId)\n if (!ungroupedGroup) {\n ungroupedGroup = {\n id: ungroupedId,\n name: 'Ungrouped',\n entityType: 'group',\n subRows: [],\n label: 'Ungrouped',\n group: { value: ungroupedId, label: 'Ungrouped' },\n links: {},\n }\n // create ungrouped group if it doesn't exist\n groupsMap.set(ungroupedId, ungroupedGroup)\n }\n return ungroupedGroup\n }\n\n for (const [id, entity] of entities) {\n // if the entity is not of the specified type, skip it\n if (entity.entityType !== entityType) continue\n // add entities to specific group\n let groupValues: string[] = []\n if (groupBy.id.startsWith('attrib.')) {\n // for attribute based grouping, get the value of the attribute\n const attributeId = groupBy.id.split('.')[1]\n groupValues = valueToStringArray(entity.attrib?.[attributeId])\n } else {\n groupValues = valueToStringArray(entity[groupBy.id as keyof EntityMap])\n }\n\n // if there are no values, add to \"Ungrouped\" group\n if (groupValues.length === 0) {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n // for each group value, find it's group and add the entity to it\n // if we can't find the group, add it to \"Ungrouped\"\n for (const groupValue of groupValues) {\n const groupRow = groupsMap.get(groupValue)\n if (groupRow) {\n groupRow.subRows.push(entityToGroupRow(entity as EditorTaskNode, groupValue))\n } else {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n }\n\n // for groups metadata on entity, check if there is a next page\n if ('groups' in entity && Array.isArray(entity.groups)) {\n for (const group of entity.groups) {\n const hasNextPageGroup = group.hasNextPage\n if (hasNextPageGroup && groupsMap.has(group.value)) {\n // add a next page row to the group\n const groupRow = groupsMap.get(group.value)\n if (groupRow) {\n groupRow.subRows.push({\n id: `${group.value}-next-page`,\n name: `Load more tasks...`,\n entityType: NEXT_PAGE_ID,\n subRows: [],\n label: `Next page for ${group.value}`,\n group: { value: group.value, label: group.value },\n links: {},\n })\n }\n }\n }\n }\n }\n\n const groupsList = Array.from(groupsMap.values())\n\n const attribSortingIds = getSortingIds(groupBy, project, attribFields)\n\n // sort the groups by their label\n // if the group is an attribute with enum values, sort by the enum values\n groupsList.sort((a, b) => {\n if (a.group?.value === ungroupedId) return 1 // \"Ungrouped\" should be last\n if (b.group?.value === ungroupedId) return -1 // \"Ungrouped\" should be last\n if (attribSortingIds.length) {\n // sort by index of the enum value\n const indexA = attribSortingIds.indexOf(a.group?.value || '')\n const indexB = attribSortingIds.indexOf(b.group?.value || '')\n if (indexA !== -1 && indexB !== -1) {\n return indexA - indexB\n }\n if (indexA !== -1) return -1 // a is in the enum, b is not\n if (indexB !== -1) return 1 // b is in the enum, a is not\n // if both are not in the enum, sort by label\n return a.group?.label?.localeCompare(b.group?.label || '') || 0\n } else {\n // for other groupings, sort by the group label\n return a.group?.label?.localeCompare(b.group?.label || '') || 0\n }\n })\n\n // filter out empty groups\n const nonEmptyGroups = groupsList.filter((group) => group.subRows.length > 0)\n\n return showEmpty ? groupsList : nonEmptyGroups\n }\n\n return buildGroupByTableData\n}\n\nexport default useBuildGroupByTableData\n"],"names":["NEXT_PAGE_ID","UNGROUPED_VALUE","ROW_ID_SEPARATOR","valueToStringArray","value","v","getGroupData","groupById","groupValue","groups","group","g","GROUP_BY_ID","buildGroupId","parseGroupId","groupId","isGroupId","id","getSortingIds","groupBy","project","attribFields","attributeId","_a","_b","t","_c","f","_e","_d","field","e","useBuildGroupByTableData","props","entities","entityType","showEmpty","getEntityTypeData","useGetEntityTypeData","entityToGroupRow","useCallback","task","typeData","linksToTableData","productTypes","groupsMap","groupData","ungroupedId","getUnGroupedGroup","ungroupedGroup","entity","groupValues","groupRow","groupsList","attribSortingIds","a","b","indexA","indexB","_g","_f","_j","_h","_i","nonEmptyGroups"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const f=require("react"),N=require("../utils/loadingUtils.cjs.js"),G=require("./useGetEntityTypeData.cjs.js");require("@ynput/ayon-react-components");const _=require("../../../util/productTypes.cjs.js");require("lodash");require("react-toastify");require("uuid");require("../../../util/pubsub.cjs.js");require("../context/CellEditingContext.cjs.js");require("../../../../../_virtual/jsx-runtime.cjs.js");require("../context/SelectionCellsContext.cjs.js");require("../context/ProjectTableQueriesContext.cjs.js");require("../context/ProjectTableContext.cjs.js");require("../context/ClipboardContext.cjs.js");require("@tanstack/react-table");require("../ProjectTreeTable.cjs.js");require("../context/ColumnSettingsContext.cjs.js");require("../context/SelectedRowsContext.cjs.js");require("../context/DetailsPanelEntityContext.cjs.js");;/* empty css */require("clsx");require("../../ContextMenu/ContextMenuContext.cjs.js");require("../context/ProjectDataContext.cjs.js");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../context/RemoteModulesContext.cjs.js");require("../../../../../_virtual/runtime.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("../../../context/DetailsPanelContext.cjs.js");require("../../../context/ThumbnailUploaderContext.cjs.js");require("../../../context/SettingsPanelContext.cjs.js");require("../../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../../context/pip/PiPWrapper.cjs.js");require("../../../context/AddonProjectContext.cjs.js");require("../../../context/AddonContext.cjs.js");require("../../../context/PowerpackContext.cjs.js");require("../../../context/MoveEntityContext.cjs.js");require("react-redux");require("custom-protocol-check");require("../components/GroupSettingsFallback.cjs.js");const F=require("../utils/linksToTableData.cjs.js"),K=100;function V({foldersMap:o,tasksMap:T,rows:g,tasksByFolderMap:M,expanded:m,projectInfo:t,showHierarchy:v,loadingTasks:b={},isLoadingMore:O=!1}){const E=G.useGetEntityTypeData({projectInfo:t}),U=f.useMemo(()=>JSON.stringify(m),[m]),p=f.useMemo(()=>new Set(Object.entries(m).filter(([s,u])=>u).map(([s])=>s)),[U]),{childToParentMap:I,parentToChildrenMap:k}=f.useMemo(()=>{const s=new Map,u=new Map;for(const i of o.values()){if(!(i!=null&&i.id))continue;const l=i.parentId;if(l){s.set(i.id,l);let q=u.get(l);q||(q=new Set,u.set(l,q)),q.add(i.id)}}return{childToParentMap:s,parentToChildrenMap:u}},[o]),A=f.useMemo(()=>{const s=new Set,u=[];for(const i of o.values())i!=null&&i.id&&(!i.parentId||!o.has(i.parentId))&&(s.add(i.id),u.push(i.id));for(;u.length>0;){const i=u.shift();if(!p.has(i))continue;const q=k.get(i);if(q)for(const d of q)s.has(d)||(s.add(d),u.push(d))}return s},[o,k,p]);return f.useMemo(()=>{var l,q,d,P,S,x,C;const s=(e,r)=>{const n=E("task",e.taskType),a=F.linksToTableData(e.links,"task",{folderTypes:(t==null?void 0:t.folderTypes)||[],productTypes:Object.values(_||{}),taskTypes:(t==null?void 0:t.taskTypes)||[]});return{id:e.id,entityType:"task",parentId:r||e.folderId,folderId:e.folderId,name:e.name||"",label:e.label||e.name||"",icon:(n==null?void 0:n.icon)||null,color:(n==null?void 0:n.color)||null,status:e.status,assignees:e.assignees,tags:e.tags,img:null,subRows:[],subType:e.taskType||null,attrib:e.attrib,ownAttrib:e.ownAttrib,parents:e.parents||[],path:e.parents.join("/")||null,updatedAt:e.updatedAt,createdAt:e.createdAt,links:a}};if(!v){const e=[];for(const r of T.values())r.id&&e.push(s(r));for(const r of g||[])e.push(r);if(O){const r=((d=(q=(l=T.entries().next())==null?void 0:l.value)==null?void 0:q[1])==null?void 0:d.attrib)||{},n=Object.keys(r).map(y=>({name:y})),a=K;{const y=N.generateLoadingRows(n,a,{type:"task"});e.push(...y)}}return e}const u=new Map,i=[];for(const e of A){const r=o.get(e);if(!r)continue;const n=F.linksToTableData(r.links,"folder",{folderTypes:(t==null?void 0:t.folderTypes)||[],productTypes:Object.values(_||{}),taskTypes:(t==null?void 0:t.taskTypes)||[]}),a={id:e,entityType:"folder",parentId:r.parentId||void 0,folderId:e||null,name:r.name||"",label:r.label||r.name||"",icon:((P=E("folder",r.folderType))==null?void 0:P.icon)||null,color:null,img:null,subRows:[],status:r.status,tags:r.tags||[],subType:r.folderType||null,ownAttrib:r.ownAttrib||[],path:r.path,attrib:r.attrib||{},childOnlyMatch:r.childOnlyMatch||!1,updatedAt:r.updatedAt,createdAt:r.createdAt,hasReviewables:r.hasReviewables||!1,hasVersions:r.hasVersions||!1,links:n};if(u.set(e,a),(!r.parentId||!o.has(r.parentId))&&i.push(a),p.has(e)){const w=(M.get(e)||[]).flatMap(h=>T.get(h)||[]);if(w.length||b[e]){const h=new Array(w.length);for(let c=0;c<w.length;c++)h[c]=s(w[c],e);if(b[e]){const c=((C=(x=(S=T.entries().next())==null?void 0:S.value)==null?void 0:x[1])==null?void 0:C.attrib)||{},B=Object.keys(c).map(R=>({name:R})),D=b[e];if(D>0){const R=N.generateLoadingRows(B,D,{type:"task",parentId:e});h.push(...R)}}a.subRows=h}}}for(const e of A){const r=I.get(e);if(!r||!p.has(r))continue;const n=u.get(e),a=u.get(r);!n||!a||a.subRows.push(n)}for(const e of g||[])i.push(e);return i},[o,T,g,A,I,p,v,b,O])}module.exports=V;
1
+ "use strict";const f=require("react"),N=require("../utils/loadingUtils.cjs.js"),G=require("./useGetEntityTypeData.cjs.js");require("@ynput/ayon-react-components");const _=require("../../../util/productTypes.cjs.js");require("lodash");require("react-toastify");require("uuid");require("../../../util/pubsub.cjs.js");require("../context/CellEditingContext.cjs.js");require("../../../../../_virtual/jsx-runtime.cjs.js");require("../context/SelectionCellsContext.cjs.js");require("../context/ProjectTableQueriesContext.cjs.js");require("../context/ProjectTableContext.cjs.js");require("../context/ClipboardContext.cjs.js");require("@tanstack/react-table");require("../ProjectTreeTable.cjs.js");require("../context/ColumnSettingsContext.cjs.js");require("../context/SelectedRowsContext.cjs.js");require("../context/DetailsPanelEntityContext.cjs.js");;/* empty css */require("clsx");require("../../ContextMenu/ContextMenuContext.cjs.js");require("../context/ProjectDataContext.cjs.js");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../context/RemoteModulesContext.cjs.js");require("../../../../../_virtual/runtime.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("../../../context/DetailsPanelContext.cjs.js");require("../../../context/ThumbnailUploaderContext.cjs.js");require("../../../context/SettingsPanelContext.cjs.js");require("../../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../../context/pip/PiPWrapper.cjs.js");require("../../../context/AddonProjectContext.cjs.js");require("../../../context/AddonContext.cjs.js");require("../../../context/PowerpackContext.cjs.js");require("../../../context/MoveEntityContext.cjs.js");require("../../../context/MenuContext.cjs.js");require("react-redux");require("custom-protocol-check");require("../components/GroupSettingsFallback.cjs.js");const F=require("../utils/linksToTableData.cjs.js"),K=100;function V({foldersMap:o,tasksMap:T,rows:g,tasksByFolderMap:M,expanded:m,projectInfo:t,showHierarchy:v,loadingTasks:b={},isLoadingMore:O=!1}){const E=G.useGetEntityTypeData({projectInfo:t}),U=f.useMemo(()=>JSON.stringify(m),[m]),p=f.useMemo(()=>new Set(Object.entries(m).filter(([s,u])=>u).map(([s])=>s)),[U]),{childToParentMap:I,parentToChildrenMap:k}=f.useMemo(()=>{const s=new Map,u=new Map;for(const i of o.values()){if(!(i!=null&&i.id))continue;const l=i.parentId;if(l){s.set(i.id,l);let q=u.get(l);q||(q=new Set,u.set(l,q)),q.add(i.id)}}return{childToParentMap:s,parentToChildrenMap:u}},[o]),A=f.useMemo(()=>{const s=new Set,u=[];for(const i of o.values())i!=null&&i.id&&(!i.parentId||!o.has(i.parentId))&&(s.add(i.id),u.push(i.id));for(;u.length>0;){const i=u.shift();if(!p.has(i))continue;const q=k.get(i);if(q)for(const d of q)s.has(d)||(s.add(d),u.push(d))}return s},[o,k,p]);return f.useMemo(()=>{var l,q,d,P,S,x,C;const s=(e,r)=>{const n=E("task",e.taskType),a=F.linksToTableData(e.links,"task",{folderTypes:(t==null?void 0:t.folderTypes)||[],productTypes:Object.values(_||{}),taskTypes:(t==null?void 0:t.taskTypes)||[]});return{id:e.id,entityType:"task",parentId:r||e.folderId,folderId:e.folderId,name:e.name||"",label:e.label||e.name||"",icon:(n==null?void 0:n.icon)||null,color:(n==null?void 0:n.color)||null,status:e.status,assignees:e.assignees,tags:e.tags,img:null,subRows:[],subType:e.taskType||null,attrib:e.attrib,ownAttrib:e.ownAttrib,parents:e.parents||[],path:e.parents.join("/")||null,updatedAt:e.updatedAt,createdAt:e.createdAt,links:a}};if(!v){const e=[];for(const r of T.values())r.id&&e.push(s(r));for(const r of g||[])e.push(r);if(O){const r=((d=(q=(l=T.entries().next())==null?void 0:l.value)==null?void 0:q[1])==null?void 0:d.attrib)||{},n=Object.keys(r).map(y=>({name:y})),a=K;{const y=N.generateLoadingRows(n,a,{type:"task"});e.push(...y)}}return e}const u=new Map,i=[];for(const e of A){const r=o.get(e);if(!r)continue;const n=F.linksToTableData(r.links,"folder",{folderTypes:(t==null?void 0:t.folderTypes)||[],productTypes:Object.values(_||{}),taskTypes:(t==null?void 0:t.taskTypes)||[]}),a={id:e,entityType:"folder",parentId:r.parentId||void 0,folderId:e||null,name:r.name||"",label:r.label||r.name||"",icon:((P=E("folder",r.folderType))==null?void 0:P.icon)||null,color:null,img:null,subRows:[],status:r.status,tags:r.tags||[],subType:r.folderType||null,ownAttrib:r.ownAttrib||[],path:r.path,attrib:r.attrib||{},childOnlyMatch:r.childOnlyMatch||!1,updatedAt:r.updatedAt,createdAt:r.createdAt,hasReviewables:r.hasReviewables||!1,hasVersions:r.hasVersions||!1,links:n};if(u.set(e,a),(!r.parentId||!o.has(r.parentId))&&i.push(a),p.has(e)){const w=(M.get(e)||[]).flatMap(h=>T.get(h)||[]);if(w.length||b[e]){const h=new Array(w.length);for(let c=0;c<w.length;c++)h[c]=s(w[c],e);if(b[e]){const c=((C=(x=(S=T.entries().next())==null?void 0:S.value)==null?void 0:x[1])==null?void 0:C.attrib)||{},B=Object.keys(c).map(R=>({name:R})),D=b[e];if(D>0){const R=N.generateLoadingRows(B,D,{type:"task",parentId:e});h.push(...R)}}a.subRows=h}}}for(const e of A){const r=I.get(e);if(!r||!p.has(r))continue;const n=u.get(e),a=u.get(r);!n||!a||a.subRows.push(n)}for(const e of g||[])i.push(e);return i},[o,T,g,A,I,p,v,b,O])}module.exports=V;
2
2
  //# sourceMappingURL=useBuildProjectDataTable.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBuildProjectDataTable.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport {\n EditorTaskNode,\n FolderNodeMap,\n TableRow,\n TaskNodeMap,\n TasksByFolderMap,\n} from '../types/table'\nimport { ExpandedState } from '@tanstack/react-table'\nimport { generateLoadingRows } from '../utils/loadingUtils'\nconst TASKS_INFINITE_QUERY_COUNT = 100\nimport { LoadingTasks } from '../types'\nimport { ProjectModel } from '../types/project'\nimport { useGetEntityTypeData } from './useGetEntityTypeData'\nimport { TableGroupBy } from '../context'\nimport { linksToTableData } from '../utils'\nimport { productTypes } from '@shared/util'\n\ntype Params = {\n foldersMap: FolderNodeMap\n tasksMap: TaskNodeMap\n tasksByFolderMap: TasksByFolderMap\n rows?: TableRow[]\n expanded: ExpandedState\n projectInfo?: ProjectModel\n showHierarchy: boolean\n loadingTasks?: LoadingTasks\n isLoadingMore?: boolean\n groupBy?: TableGroupBy\n}\n\nexport default function useBuildProjectDataTable({\n foldersMap,\n tasksMap,\n rows,\n tasksByFolderMap,\n expanded,\n projectInfo,\n showHierarchy,\n loadingTasks = {},\n isLoadingMore = false,\n}: Params): TableRow[] {\n const getEntityTypeData = useGetEntityTypeData({ projectInfo })\n\n // Convert expanded object to a stable string for memoization comparison\n const expandedKey = useMemo(() => JSON.stringify(expanded), [expanded])\n\n // Memoize expandedFolderIds set for efficient lookups\n const expandedFolderIds = useMemo(() => {\n return new Set(\n Object.entries(expanded)\n .filter(([_, isExpanded]) => isExpanded)\n .map(([id]) => id),\n )\n }, [expandedKey])\n\n // Memoize relationship maps to avoid rebuilding them on every render\n const { childToParentMap, parentToChildrenMap } = useMemo(() => {\n const childToParent = new Map<string, string>()\n const parentToChildren = new Map<string, Set<string>>()\n\n // Construct relationship maps in a single pass\n for (const folder of foldersMap.values()) {\n if (!folder?.id) continue\n\n const parentId = folder.parentId\n if (parentId) {\n childToParent.set(folder.id, parentId)\n\n let children = parentToChildren.get(parentId)\n if (!children) {\n children = new Set<string>()\n parentToChildren.set(parentId, children)\n }\n children.add(folder.id)\n }\n }\n\n return { childToParentMap: childToParent, parentToChildrenMap: parentToChildren }\n }, [foldersMap])\n\n // Memoize visible folders calculation\n const visibleFolders = useMemo(() => {\n const visible = new Set<string>()\n\n // Start with root folders and folders with non-existent parents\n const queue: string[] = []\n for (const folder of foldersMap.values()) {\n if (!folder?.id) continue\n\n // Include folders with no parent OR with a parent that doesn't exist\n if (!folder.parentId || !foldersMap.has(folder.parentId)) {\n visible.add(folder.id)\n queue.push(folder.id)\n }\n }\n\n // Process queue to identify visible folders (BFS)\n while (queue.length > 0) {\n const folderId = queue.shift()!\n const isParentExpanded = expandedFolderIds.has(folderId)\n\n if (!isParentExpanded) continue\n\n // Add children of expanded folders to visible set\n const childrenIds = parentToChildrenMap.get(folderId)\n if (childrenIds) {\n for (const childId of childrenIds) {\n if (!visible.has(childId)) {\n visible.add(childId)\n queue.push(childId)\n }\n }\n }\n }\n\n return visible\n }, [foldersMap, parentToChildrenMap, expandedFolderIds])\n\n // Final memoized result - build the table tree\n return useMemo(() => {\n // Helper function to create a task row\n const createTaskRow = (task: EditorTaskNode, parentId?: string): TableRow => {\n const typeData = getEntityTypeData('task', task.taskType)\n\n const links = linksToTableData(task.links, 'task', {\n folderTypes: projectInfo?.folderTypes || [],\n productTypes: Object.values(productTypes || {}),\n taskTypes: projectInfo?.taskTypes || [],\n })\n\n return {\n id: task.id,\n entityType: 'task',\n parentId: parentId || task.folderId,\n folderId: task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n parents: task.parents || [],\n path: task.parents.join('/') || null, // todo: probably remove this and just use parents\n updatedAt: task.updatedAt,\n createdAt: task.createdAt,\n links: links,\n }\n }\n\n // If showHierarchy is false, create a flat list of task rows\n if (!showHierarchy) {\n const flatRows: TableRow[] = []\n\n // Loop through all tasks\n for (const task of tasksMap.values()) {\n if (!task.id) continue\n flatRows.push(createTaskRow(task))\n }\n\n // Loop through all extra rows\n for (const row of rows || []) {\n flatRows.push(row)\n }\n\n // if we are loading more tasks, add loading rows\n if (isLoadingMore) {\n const firstTaskAttrib = tasksMap.entries().next()?.value?.[1]?.attrib || {}\n const loadingAttribs = Object.keys(firstTaskAttrib).map((key) => ({\n name: key,\n }))\n // number of tasks we loading with the infinite query\n const count = TASKS_INFINITE_QUERY_COUNT\n if (count > 0) {\n const loadingTaskRows = generateLoadingRows(loadingAttribs, count, {\n type: 'task',\n })\n\n flatRows.push(...loadingTaskRows)\n }\n }\n\n return flatRows\n }\n\n // Use Map for O(1) lookups\n const rowsById = new Map<string, TableRow>()\n const rootRows: TableRow[] = []\n\n // Create minimal rows for only visible folders\n for (const folderId of visibleFolders) {\n const folder = foldersMap.get(folderId)\n if (!folder) continue\n\n const links = linksToTableData(folder.links, 'folder', {\n folderTypes: projectInfo?.folderTypes || [],\n productTypes: Object.values(productTypes || {}),\n taskTypes: projectInfo?.taskTypes || [],\n })\n\n // Create row with minimal required properties\n const row: TableRow = {\n id: folderId,\n entityType: 'folder',\n parentId: folder.parentId || undefined,\n folderId: folderId || null, // root folders have no folderId\n name: folder.name || '',\n label: folder.label || folder.name || '',\n icon: getEntityTypeData('folder', folder.folderType)?.icon || null,\n color: null,\n img: null,\n subRows: [],\n status: folder.status,\n tags: folder.tags || [],\n subType: folder.folderType || null,\n ownAttrib: folder.ownAttrib || [],\n path: folder.path,\n attrib: folder.attrib || {},\n childOnlyMatch: folder.childOnlyMatch || false,\n updatedAt: folder.updatedAt,\n createdAt: folder.createdAt,\n hasReviewables: folder.hasReviewables || false,\n hasVersions: folder.hasVersions || false,\n links: links,\n }\n\n rowsById.set(folderId, row)\n\n // Add root rows directly to the rootRows array\n if (!folder.parentId || !foldersMap.has(folder.parentId)) {\n rootRows.push(row)\n }\n\n // Process tasks immediately if folder is expanded\n if (expandedFolderIds.has(folderId)) {\n // because tasksByFolderMap is a map of tasks by folder ID\n // we can directly get the tasks for the current folder\n const folderTaskIds = tasksByFolderMap.get(folderId) || []\n const folderTasks = folderTaskIds.flatMap((taskId) => tasksMap.get(taskId) || [])\n\n if (folderTasks.length || loadingTasks[folderId]) {\n // Use array literal with known length for better performance\n const taskRows = new Array<TableRow>(folderTasks.length)\n\n // Direct array assignment is faster than push operations\n for (let i = 0; i < folderTasks.length; i++) {\n taskRows[i] = createTaskRow(folderTasks[i], folderId)\n }\n\n // Add loading rows if applicable\n if (loadingTasks[folderId]) {\n const firstTaskAttrib = tasksMap.entries().next()?.value?.[1]?.attrib || {}\n const loadingAttribs = Object.keys(firstTaskAttrib).map((key) => ({\n name: key,\n }))\n const count = loadingTasks[folderId]\n if (count > 0) {\n const loadingTaskRows = generateLoadingRows(loadingAttribs, count, {\n type: 'task',\n parentId: folderId,\n })\n\n taskRows.push(...loadingTaskRows)\n }\n }\n\n row.subRows = taskRows\n }\n }\n }\n\n // Build the folder hierarchy efficiently\n for (const folderId of visibleFolders) {\n const parentId = childToParentMap.get(folderId)\n if (!parentId || !expandedFolderIds.has(parentId)) continue\n\n const childRow = rowsById.get(folderId)\n const parentRow = rowsById.get(parentId)\n\n if (!childRow || !parentRow) continue\n\n // Add folder to its parent's subRows\n parentRow.subRows.push(childRow)\n }\n\n // Add any extra rows to the root rows\n for (const row of rows || []) {\n rootRows.push(row)\n }\n\n return rootRows\n }, [\n foldersMap,\n tasksMap,\n rows,\n visibleFolders,\n childToParentMap,\n expandedFolderIds,\n showHierarchy,\n loadingTasks,\n isLoadingMore,\n ])\n}\n"],"names":["TASKS_INFINITE_QUERY_COUNT","useBuildProjectDataTable","foldersMap","tasksMap","rows","tasksByFolderMap","expanded","projectInfo","showHierarchy","loadingTasks","isLoadingMore","getEntityTypeData","useGetEntityTypeData","expandedKey","useMemo","expandedFolderIds","_","isExpanded","id","childToParentMap","parentToChildrenMap","childToParent","parentToChildren","folder","parentId","children","visibleFolders","visible","queue","folderId","childrenIds","childId","createTaskRow","task","typeData","links","linksToTableData","productTypes","flatRows","row","firstTaskAttrib","_c","_b","_a","loadingAttribs","key","count","loadingTaskRows","generateLoadingRows","rowsById","rootRows","_d","folderTasks","taskId","taskRows","i","_g","_f","_e","childRow","parentRow"],"mappings":"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"}
1
+ {"version":3,"file":"useBuildProjectDataTable.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport {\n EditorTaskNode,\n FolderNodeMap,\n TableRow,\n TaskNodeMap,\n TasksByFolderMap,\n} from '../types/table'\nimport { ExpandedState } from '@tanstack/react-table'\nimport { generateLoadingRows } from '../utils/loadingUtils'\nconst TASKS_INFINITE_QUERY_COUNT = 100\nimport { LoadingTasks } from '../types'\nimport { ProjectModel } from '../types/project'\nimport { useGetEntityTypeData } from './useGetEntityTypeData'\nimport { TableGroupBy } from '../context'\nimport { linksToTableData } from '../utils'\nimport { productTypes } from '@shared/util'\n\ntype Params = {\n foldersMap: FolderNodeMap\n tasksMap: TaskNodeMap\n tasksByFolderMap: TasksByFolderMap\n rows?: TableRow[]\n expanded: ExpandedState\n projectInfo?: ProjectModel\n showHierarchy: boolean\n loadingTasks?: LoadingTasks\n isLoadingMore?: boolean\n groupBy?: TableGroupBy\n}\n\nexport default function useBuildProjectDataTable({\n foldersMap,\n tasksMap,\n rows,\n tasksByFolderMap,\n expanded,\n projectInfo,\n showHierarchy,\n loadingTasks = {},\n isLoadingMore = false,\n}: Params): TableRow[] {\n const getEntityTypeData = useGetEntityTypeData({ projectInfo })\n\n // Convert expanded object to a stable string for memoization comparison\n const expandedKey = useMemo(() => JSON.stringify(expanded), [expanded])\n\n // Memoize expandedFolderIds set for efficient lookups\n const expandedFolderIds = useMemo(() => {\n return new Set(\n Object.entries(expanded)\n .filter(([_, isExpanded]) => isExpanded)\n .map(([id]) => id),\n )\n }, [expandedKey])\n\n // Memoize relationship maps to avoid rebuilding them on every render\n const { childToParentMap, parentToChildrenMap } = useMemo(() => {\n const childToParent = new Map<string, string>()\n const parentToChildren = new Map<string, Set<string>>()\n\n // Construct relationship maps in a single pass\n for (const folder of foldersMap.values()) {\n if (!folder?.id) continue\n\n const parentId = folder.parentId\n if (parentId) {\n childToParent.set(folder.id, parentId)\n\n let children = parentToChildren.get(parentId)\n if (!children) {\n children = new Set<string>()\n parentToChildren.set(parentId, children)\n }\n children.add(folder.id)\n }\n }\n\n return { childToParentMap: childToParent, parentToChildrenMap: parentToChildren }\n }, [foldersMap])\n\n // Memoize visible folders calculation\n const visibleFolders = useMemo(() => {\n const visible = new Set<string>()\n\n // Start with root folders and folders with non-existent parents\n const queue: string[] = []\n for (const folder of foldersMap.values()) {\n if (!folder?.id) continue\n\n // Include folders with no parent OR with a parent that doesn't exist\n if (!folder.parentId || !foldersMap.has(folder.parentId)) {\n visible.add(folder.id)\n queue.push(folder.id)\n }\n }\n\n // Process queue to identify visible folders (BFS)\n while (queue.length > 0) {\n const folderId = queue.shift()!\n const isParentExpanded = expandedFolderIds.has(folderId)\n\n if (!isParentExpanded) continue\n\n // Add children of expanded folders to visible set\n const childrenIds = parentToChildrenMap.get(folderId)\n if (childrenIds) {\n for (const childId of childrenIds) {\n if (!visible.has(childId)) {\n visible.add(childId)\n queue.push(childId)\n }\n }\n }\n }\n\n return visible\n }, [foldersMap, parentToChildrenMap, expandedFolderIds])\n\n // Final memoized result - build the table tree\n return useMemo(() => {\n // Helper function to create a task row\n const createTaskRow = (task: EditorTaskNode, parentId?: string): TableRow => {\n const typeData = getEntityTypeData('task', task.taskType)\n\n const links = linksToTableData(task.links, 'task', {\n folderTypes: projectInfo?.folderTypes || [],\n productTypes: Object.values(productTypes || {}),\n taskTypes: projectInfo?.taskTypes || [],\n })\n\n return {\n id: task.id,\n entityType: 'task',\n parentId: parentId || task.folderId,\n folderId: task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n parents: task.parents || [],\n path: task.parents.join('/') || null, // todo: probably remove this and just use parents\n updatedAt: task.updatedAt,\n createdAt: task.createdAt,\n links: links,\n }\n }\n\n // If showHierarchy is false, create a flat list of task rows\n if (!showHierarchy) {\n const flatRows: TableRow[] = []\n\n // Loop through all tasks\n for (const task of tasksMap.values()) {\n if (!task.id) continue\n flatRows.push(createTaskRow(task))\n }\n\n // Loop through all extra rows\n for (const row of rows || []) {\n flatRows.push(row)\n }\n\n // if we are loading more tasks, add loading rows\n if (isLoadingMore) {\n const firstTaskAttrib = tasksMap.entries().next()?.value?.[1]?.attrib || {}\n const loadingAttribs = Object.keys(firstTaskAttrib).map((key) => ({\n name: key,\n }))\n // number of tasks we loading with the infinite query\n const count = TASKS_INFINITE_QUERY_COUNT\n if (count > 0) {\n const loadingTaskRows = generateLoadingRows(loadingAttribs, count, {\n type: 'task',\n })\n\n flatRows.push(...loadingTaskRows)\n }\n }\n\n return flatRows\n }\n\n // Use Map for O(1) lookups\n const rowsById = new Map<string, TableRow>()\n const rootRows: TableRow[] = []\n\n // Create minimal rows for only visible folders\n for (const folderId of visibleFolders) {\n const folder = foldersMap.get(folderId)\n if (!folder) continue\n\n const links = linksToTableData(folder.links, 'folder', {\n folderTypes: projectInfo?.folderTypes || [],\n productTypes: Object.values(productTypes || {}),\n taskTypes: projectInfo?.taskTypes || [],\n })\n\n // Create row with minimal required properties\n const row: TableRow = {\n id: folderId,\n entityType: 'folder',\n parentId: folder.parentId || undefined,\n folderId: folderId || null, // root folders have no folderId\n name: folder.name || '',\n label: folder.label || folder.name || '',\n icon: getEntityTypeData('folder', folder.folderType)?.icon || null,\n color: null,\n img: null,\n subRows: [],\n status: folder.status,\n tags: folder.tags || [],\n subType: folder.folderType || null,\n ownAttrib: folder.ownAttrib || [],\n path: folder.path,\n attrib: folder.attrib || {},\n childOnlyMatch: folder.childOnlyMatch || false,\n updatedAt: folder.updatedAt,\n createdAt: folder.createdAt,\n hasReviewables: folder.hasReviewables || false,\n hasVersions: folder.hasVersions || false,\n links: links,\n }\n\n rowsById.set(folderId, row)\n\n // Add root rows directly to the rootRows array\n if (!folder.parentId || !foldersMap.has(folder.parentId)) {\n rootRows.push(row)\n }\n\n // Process tasks immediately if folder is expanded\n if (expandedFolderIds.has(folderId)) {\n // because tasksByFolderMap is a map of tasks by folder ID\n // we can directly get the tasks for the current folder\n const folderTaskIds = tasksByFolderMap.get(folderId) || []\n const folderTasks = folderTaskIds.flatMap((taskId) => tasksMap.get(taskId) || [])\n\n if (folderTasks.length || loadingTasks[folderId]) {\n // Use array literal with known length for better performance\n const taskRows = new Array<TableRow>(folderTasks.length)\n\n // Direct array assignment is faster than push operations\n for (let i = 0; i < folderTasks.length; i++) {\n taskRows[i] = createTaskRow(folderTasks[i], folderId)\n }\n\n // Add loading rows if applicable\n if (loadingTasks[folderId]) {\n const firstTaskAttrib = tasksMap.entries().next()?.value?.[1]?.attrib || {}\n const loadingAttribs = Object.keys(firstTaskAttrib).map((key) => ({\n name: key,\n }))\n const count = loadingTasks[folderId]\n if (count > 0) {\n const loadingTaskRows = generateLoadingRows(loadingAttribs, count, {\n type: 'task',\n parentId: folderId,\n })\n\n taskRows.push(...loadingTaskRows)\n }\n }\n\n row.subRows = taskRows\n }\n }\n }\n\n // Build the folder hierarchy efficiently\n for (const folderId of visibleFolders) {\n const parentId = childToParentMap.get(folderId)\n if (!parentId || !expandedFolderIds.has(parentId)) continue\n\n const childRow = rowsById.get(folderId)\n const parentRow = rowsById.get(parentId)\n\n if (!childRow || !parentRow) continue\n\n // Add folder to its parent's subRows\n parentRow.subRows.push(childRow)\n }\n\n // Add any extra rows to the root rows\n for (const row of rows || []) {\n rootRows.push(row)\n }\n\n return rootRows\n }, [\n foldersMap,\n tasksMap,\n rows,\n visibleFolders,\n childToParentMap,\n expandedFolderIds,\n showHierarchy,\n loadingTasks,\n isLoadingMore,\n ])\n}\n"],"names":["TASKS_INFINITE_QUERY_COUNT","useBuildProjectDataTable","foldersMap","tasksMap","rows","tasksByFolderMap","expanded","projectInfo","showHierarchy","loadingTasks","isLoadingMore","getEntityTypeData","useGetEntityTypeData","expandedKey","useMemo","expandedFolderIds","_","isExpanded","id","childToParentMap","parentToChildrenMap","childToParent","parentToChildren","folder","parentId","children","visibleFolders","visible","queue","folderId","childrenIds","childId","createTaskRow","task","typeData","links","linksToTableData","productTypes","flatRows","row","firstTaskAttrib","_c","_b","_a","loadingAttribs","key","count","loadingTaskRows","generateLoadingRows","rowsById","rootRows","_d","folderTasks","taskId","taskRows","i","_g","_f","_e","childRow","parentRow"],"mappings":"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"}
@@ -78,6 +78,7 @@ import "../../../api/queries/entityLists/getLists.es.js";
78
78
  import "../../../api/queries/entityLists/updateLists.es.js";
79
79
  import "../../../api/queries/entityLists/getListsAttributes.es.js";
80
80
  import "../../../api/queries/entityLists/updateListsAttributes.es.js";
81
+ import "../../../api/queries/entityLists/listFolders.es.js";
81
82
  import "../../../api/queries/folders/getFolders.es.js";
82
83
  import "../../../api/queries/grouping/getGrouping.es.js";
83
84
  import "../../../api/queries/links/updateLinks.es.js";
@@ -113,12 +114,13 @@ import "../../../context/AddonProjectContext.es.js";
113
114
  import "../../../context/AddonContext.es.js";
114
115
  import "../../../context/PowerpackContext.es.js";
115
116
  import "../../../context/MoveEntityContext.es.js";
117
+ import "../../../context/MenuContext.es.js";
116
118
  import "react-redux";
117
119
  import "custom-protocol-check";
118
120
  import "../components/GroupSettingsFallback.es.js";
119
121
  import { linksToTableData as K } from "../utils/linksToTableData.es.js";
120
122
  const G = 100;
121
- function ji({
123
+ function io({
122
124
  foldersMap: a,
123
125
  tasksMap: c,
124
126
  rows: g,
@@ -138,8 +140,8 @@ function ji({
138
140
  const l = o.parentId;
139
141
  if (l) {
140
142
  p.set(o.id, l);
141
- let s = r.get(l);
142
- s || (s = /* @__PURE__ */ new Set(), r.set(l, s)), s.add(o.id);
143
+ let m = r.get(l);
144
+ m || (m = /* @__PURE__ */ new Set(), r.set(l, m)), m.add(o.id);
143
145
  }
144
146
  }
145
147
  return { childToParentMap: p, parentToChildrenMap: r };
@@ -150,17 +152,17 @@ function ji({
150
152
  for (; r.length > 0; ) {
151
153
  const o = r.shift();
152
154
  if (!f.has(o)) continue;
153
- const s = S.get(o);
154
- if (s)
155
- for (const d of s)
155
+ const m = S.get(o);
156
+ if (m)
157
+ for (const d of m)
156
158
  p.has(d) || (p.add(d), r.push(d));
157
159
  }
158
160
  return p;
159
161
  }, [a, S, f]);
160
162
  return T(() => {
161
- var l, s, d, x, k, C, N;
163
+ var l, m, d, x, k, C, N;
162
164
  const p = (t, i) => {
163
- const n = E("task", t.taskType), m = K(t.links, "task", {
165
+ const n = E("task", t.taskType), s = K(t.links, "task", {
164
166
  folderTypes: (e == null ? void 0 : e.folderTypes) || [],
165
167
  productTypes: Object.values(B || {}),
166
168
  taskTypes: (e == null ? void 0 : e.taskTypes) || []
@@ -187,7 +189,7 @@ function ji({
187
189
  // todo: probably remove this and just use parents
188
190
  updatedAt: t.updatedAt,
189
191
  createdAt: t.createdAt,
190
- links: m
192
+ links: s
191
193
  };
192
194
  };
193
195
  if (!O) {
@@ -197,11 +199,11 @@ function ji({
197
199
  for (const i of g || [])
198
200
  t.push(i);
199
201
  if (I) {
200
- const i = ((d = (s = (l = c.entries().next()) == null ? void 0 : l.value) == null ? void 0 : s[1]) == null ? void 0 : d.attrib) || {}, n = Object.keys(i).map((y) => ({
202
+ const i = ((d = (m = (l = c.entries().next()) == null ? void 0 : l.value) == null ? void 0 : m[1]) == null ? void 0 : d.attrib) || {}, n = Object.keys(i).map((y) => ({
201
203
  name: y
202
- })), m = G;
204
+ })), s = G;
203
205
  {
204
- const y = F(n, m, {
206
+ const y = F(n, s, {
205
207
  type: "task"
206
208
  });
207
209
  t.push(...y);
@@ -217,7 +219,7 @@ function ji({
217
219
  folderTypes: (e == null ? void 0 : e.folderTypes) || [],
218
220
  productTypes: Object.values(B || {}),
219
221
  taskTypes: (e == null ? void 0 : e.taskTypes) || []
220
- }), m = {
222
+ }), s = {
221
223
  id: t,
222
224
  entityType: "folder",
223
225
  parentId: i.parentId || void 0,
@@ -242,7 +244,7 @@ function ji({
242
244
  hasVersions: i.hasVersions || !1,
243
245
  links: n
244
246
  };
245
- if (r.set(t, m), (!i.parentId || !a.has(i.parentId)) && o.push(m), f.has(t)) {
247
+ if (r.set(t, s), (!i.parentId || !a.has(i.parentId)) && o.push(s), f.has(t)) {
246
248
  const w = (U.get(t) || []).flatMap((h) => c.get(h) || []);
247
249
  if (w.length || b[t]) {
248
250
  const h = new Array(w.length);
@@ -260,15 +262,15 @@ function ji({
260
262
  h.push(...v);
261
263
  }
262
264
  }
263
- m.subRows = h;
265
+ s.subRows = h;
264
266
  }
265
267
  }
266
268
  }
267
269
  for (const t of R) {
268
270
  const i = P.get(t);
269
271
  if (!i || !f.has(i)) continue;
270
- const n = r.get(t), m = r.get(i);
271
- !n || !m || m.subRows.push(n);
272
+ const n = r.get(t), s = r.get(i);
273
+ !n || !s || s.subRows.push(n);
272
274
  }
273
275
  for (const t of g || [])
274
276
  o.push(t);
@@ -286,6 +288,6 @@ function ji({
286
288
  ]);
287
289
  }
288
290
  export {
289
- ji as default
291
+ io as default
290
292
  };
291
293
  //# sourceMappingURL=useBuildProjectDataTable.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBuildProjectDataTable.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport {\n EditorTaskNode,\n FolderNodeMap,\n TableRow,\n TaskNodeMap,\n TasksByFolderMap,\n} from '../types/table'\nimport { ExpandedState } from '@tanstack/react-table'\nimport { generateLoadingRows } from '../utils/loadingUtils'\nconst TASKS_INFINITE_QUERY_COUNT = 100\nimport { LoadingTasks } from '../types'\nimport { ProjectModel } from '../types/project'\nimport { useGetEntityTypeData } from './useGetEntityTypeData'\nimport { TableGroupBy } from '../context'\nimport { linksToTableData } from '../utils'\nimport { productTypes } from '@shared/util'\n\ntype Params = {\n foldersMap: FolderNodeMap\n tasksMap: TaskNodeMap\n tasksByFolderMap: TasksByFolderMap\n rows?: TableRow[]\n expanded: ExpandedState\n projectInfo?: ProjectModel\n showHierarchy: boolean\n loadingTasks?: LoadingTasks\n isLoadingMore?: boolean\n groupBy?: TableGroupBy\n}\n\nexport default function useBuildProjectDataTable({\n foldersMap,\n tasksMap,\n rows,\n tasksByFolderMap,\n expanded,\n projectInfo,\n showHierarchy,\n loadingTasks = {},\n isLoadingMore = false,\n}: Params): TableRow[] {\n const getEntityTypeData = useGetEntityTypeData({ projectInfo })\n\n // Convert expanded object to a stable string for memoization comparison\n const expandedKey = useMemo(() => JSON.stringify(expanded), [expanded])\n\n // Memoize expandedFolderIds set for efficient lookups\n const expandedFolderIds = useMemo(() => {\n return new Set(\n Object.entries(expanded)\n .filter(([_, isExpanded]) => isExpanded)\n .map(([id]) => id),\n )\n }, [expandedKey])\n\n // Memoize relationship maps to avoid rebuilding them on every render\n const { childToParentMap, parentToChildrenMap } = useMemo(() => {\n const childToParent = new Map<string, string>()\n const parentToChildren = new Map<string, Set<string>>()\n\n // Construct relationship maps in a single pass\n for (const folder of foldersMap.values()) {\n if (!folder?.id) continue\n\n const parentId = folder.parentId\n if (parentId) {\n childToParent.set(folder.id, parentId)\n\n let children = parentToChildren.get(parentId)\n if (!children) {\n children = new Set<string>()\n parentToChildren.set(parentId, children)\n }\n children.add(folder.id)\n }\n }\n\n return { childToParentMap: childToParent, parentToChildrenMap: parentToChildren }\n }, [foldersMap])\n\n // Memoize visible folders calculation\n const visibleFolders = useMemo(() => {\n const visible = new Set<string>()\n\n // Start with root folders and folders with non-existent parents\n const queue: string[] = []\n for (const folder of foldersMap.values()) {\n if (!folder?.id) continue\n\n // Include folders with no parent OR with a parent that doesn't exist\n if (!folder.parentId || !foldersMap.has(folder.parentId)) {\n visible.add(folder.id)\n queue.push(folder.id)\n }\n }\n\n // Process queue to identify visible folders (BFS)\n while (queue.length > 0) {\n const folderId = queue.shift()!\n const isParentExpanded = expandedFolderIds.has(folderId)\n\n if (!isParentExpanded) continue\n\n // Add children of expanded folders to visible set\n const childrenIds = parentToChildrenMap.get(folderId)\n if (childrenIds) {\n for (const childId of childrenIds) {\n if (!visible.has(childId)) {\n visible.add(childId)\n queue.push(childId)\n }\n }\n }\n }\n\n return visible\n }, [foldersMap, parentToChildrenMap, expandedFolderIds])\n\n // Final memoized result - build the table tree\n return useMemo(() => {\n // Helper function to create a task row\n const createTaskRow = (task: EditorTaskNode, parentId?: string): TableRow => {\n const typeData = getEntityTypeData('task', task.taskType)\n\n const links = linksToTableData(task.links, 'task', {\n folderTypes: projectInfo?.folderTypes || [],\n productTypes: Object.values(productTypes || {}),\n taskTypes: projectInfo?.taskTypes || [],\n })\n\n return {\n id: task.id,\n entityType: 'task',\n parentId: parentId || task.folderId,\n folderId: task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n parents: task.parents || [],\n path: task.parents.join('/') || null, // todo: probably remove this and just use parents\n updatedAt: task.updatedAt,\n createdAt: task.createdAt,\n links: links,\n }\n }\n\n // If showHierarchy is false, create a flat list of task rows\n if (!showHierarchy) {\n const flatRows: TableRow[] = []\n\n // Loop through all tasks\n for (const task of tasksMap.values()) {\n if (!task.id) continue\n flatRows.push(createTaskRow(task))\n }\n\n // Loop through all extra rows\n for (const row of rows || []) {\n flatRows.push(row)\n }\n\n // if we are loading more tasks, add loading rows\n if (isLoadingMore) {\n const firstTaskAttrib = tasksMap.entries().next()?.value?.[1]?.attrib || {}\n const loadingAttribs = Object.keys(firstTaskAttrib).map((key) => ({\n name: key,\n }))\n // number of tasks we loading with the infinite query\n const count = TASKS_INFINITE_QUERY_COUNT\n if (count > 0) {\n const loadingTaskRows = generateLoadingRows(loadingAttribs, count, {\n type: 'task',\n })\n\n flatRows.push(...loadingTaskRows)\n }\n }\n\n return flatRows\n }\n\n // Use Map for O(1) lookups\n const rowsById = new Map<string, TableRow>()\n const rootRows: TableRow[] = []\n\n // Create minimal rows for only visible folders\n for (const folderId of visibleFolders) {\n const folder = foldersMap.get(folderId)\n if (!folder) continue\n\n const links = linksToTableData(folder.links, 'folder', {\n folderTypes: projectInfo?.folderTypes || [],\n productTypes: Object.values(productTypes || {}),\n taskTypes: projectInfo?.taskTypes || [],\n })\n\n // Create row with minimal required properties\n const row: TableRow = {\n id: folderId,\n entityType: 'folder',\n parentId: folder.parentId || undefined,\n folderId: folderId || null, // root folders have no folderId\n name: folder.name || '',\n label: folder.label || folder.name || '',\n icon: getEntityTypeData('folder', folder.folderType)?.icon || null,\n color: null,\n img: null,\n subRows: [],\n status: folder.status,\n tags: folder.tags || [],\n subType: folder.folderType || null,\n ownAttrib: folder.ownAttrib || [],\n path: folder.path,\n attrib: folder.attrib || {},\n childOnlyMatch: folder.childOnlyMatch || false,\n updatedAt: folder.updatedAt,\n createdAt: folder.createdAt,\n hasReviewables: folder.hasReviewables || false,\n hasVersions: folder.hasVersions || false,\n links: links,\n }\n\n rowsById.set(folderId, row)\n\n // Add root rows directly to the rootRows array\n if (!folder.parentId || !foldersMap.has(folder.parentId)) {\n rootRows.push(row)\n }\n\n // Process tasks immediately if folder is expanded\n if (expandedFolderIds.has(folderId)) {\n // because tasksByFolderMap is a map of tasks by folder ID\n // we can directly get the tasks for the current folder\n const folderTaskIds = tasksByFolderMap.get(folderId) || []\n const folderTasks = folderTaskIds.flatMap((taskId) => tasksMap.get(taskId) || [])\n\n if (folderTasks.length || loadingTasks[folderId]) {\n // Use array literal with known length for better performance\n const taskRows = new Array<TableRow>(folderTasks.length)\n\n // Direct array assignment is faster than push operations\n for (let i = 0; i < folderTasks.length; i++) {\n taskRows[i] = createTaskRow(folderTasks[i], folderId)\n }\n\n // Add loading rows if applicable\n if (loadingTasks[folderId]) {\n const firstTaskAttrib = tasksMap.entries().next()?.value?.[1]?.attrib || {}\n const loadingAttribs = Object.keys(firstTaskAttrib).map((key) => ({\n name: key,\n }))\n const count = loadingTasks[folderId]\n if (count > 0) {\n const loadingTaskRows = generateLoadingRows(loadingAttribs, count, {\n type: 'task',\n parentId: folderId,\n })\n\n taskRows.push(...loadingTaskRows)\n }\n }\n\n row.subRows = taskRows\n }\n }\n }\n\n // Build the folder hierarchy efficiently\n for (const folderId of visibleFolders) {\n const parentId = childToParentMap.get(folderId)\n if (!parentId || !expandedFolderIds.has(parentId)) continue\n\n const childRow = rowsById.get(folderId)\n const parentRow = rowsById.get(parentId)\n\n if (!childRow || !parentRow) continue\n\n // Add folder to its parent's subRows\n parentRow.subRows.push(childRow)\n }\n\n // Add any extra rows to the root rows\n for (const row of rows || []) {\n rootRows.push(row)\n }\n\n return rootRows\n }, [\n foldersMap,\n tasksMap,\n rows,\n visibleFolders,\n childToParentMap,\n expandedFolderIds,\n showHierarchy,\n loadingTasks,\n isLoadingMore,\n ])\n}\n"],"names":["TASKS_INFINITE_QUERY_COUNT","useBuildProjectDataTable","foldersMap","tasksMap","rows","tasksByFolderMap","expanded","projectInfo","showHierarchy","loadingTasks","isLoadingMore","getEntityTypeData","useGetEntityTypeData","expandedKey","useMemo","expandedFolderIds","_","isExpanded","id","childToParentMap","parentToChildrenMap","childToParent","parentToChildren","folder","parentId","children","visibleFolders","visible","queue","folderId","childrenIds","childId","createTaskRow","task","typeData","links","linksToTableData","productTypes","flatRows","row","firstTaskAttrib","_c","_b","_a","loadingAttribs","key","count","loadingTaskRows","generateLoadingRows","rowsById","rootRows","_d","folderTasks","taskId","taskRows","i","_g","_f","_e","childRow","parentRow"],"mappings":"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"}
1
+ {"version":3,"file":"useBuildProjectDataTable.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport {\n EditorTaskNode,\n FolderNodeMap,\n TableRow,\n TaskNodeMap,\n TasksByFolderMap,\n} from '../types/table'\nimport { ExpandedState } from '@tanstack/react-table'\nimport { generateLoadingRows } from '../utils/loadingUtils'\nconst TASKS_INFINITE_QUERY_COUNT = 100\nimport { LoadingTasks } from '../types'\nimport { ProjectModel } from '../types/project'\nimport { useGetEntityTypeData } from './useGetEntityTypeData'\nimport { TableGroupBy } from '../context'\nimport { linksToTableData } from '../utils'\nimport { productTypes } from '@shared/util'\n\ntype Params = {\n foldersMap: FolderNodeMap\n tasksMap: TaskNodeMap\n tasksByFolderMap: TasksByFolderMap\n rows?: TableRow[]\n expanded: ExpandedState\n projectInfo?: ProjectModel\n showHierarchy: boolean\n loadingTasks?: LoadingTasks\n isLoadingMore?: boolean\n groupBy?: TableGroupBy\n}\n\nexport default function useBuildProjectDataTable({\n foldersMap,\n tasksMap,\n rows,\n tasksByFolderMap,\n expanded,\n projectInfo,\n showHierarchy,\n loadingTasks = {},\n isLoadingMore = false,\n}: Params): TableRow[] {\n const getEntityTypeData = useGetEntityTypeData({ projectInfo })\n\n // Convert expanded object to a stable string for memoization comparison\n const expandedKey = useMemo(() => JSON.stringify(expanded), [expanded])\n\n // Memoize expandedFolderIds set for efficient lookups\n const expandedFolderIds = useMemo(() => {\n return new Set(\n Object.entries(expanded)\n .filter(([_, isExpanded]) => isExpanded)\n .map(([id]) => id),\n )\n }, [expandedKey])\n\n // Memoize relationship maps to avoid rebuilding them on every render\n const { childToParentMap, parentToChildrenMap } = useMemo(() => {\n const childToParent = new Map<string, string>()\n const parentToChildren = new Map<string, Set<string>>()\n\n // Construct relationship maps in a single pass\n for (const folder of foldersMap.values()) {\n if (!folder?.id) continue\n\n const parentId = folder.parentId\n if (parentId) {\n childToParent.set(folder.id, parentId)\n\n let children = parentToChildren.get(parentId)\n if (!children) {\n children = new Set<string>()\n parentToChildren.set(parentId, children)\n }\n children.add(folder.id)\n }\n }\n\n return { childToParentMap: childToParent, parentToChildrenMap: parentToChildren }\n }, [foldersMap])\n\n // Memoize visible folders calculation\n const visibleFolders = useMemo(() => {\n const visible = new Set<string>()\n\n // Start with root folders and folders with non-existent parents\n const queue: string[] = []\n for (const folder of foldersMap.values()) {\n if (!folder?.id) continue\n\n // Include folders with no parent OR with a parent that doesn't exist\n if (!folder.parentId || !foldersMap.has(folder.parentId)) {\n visible.add(folder.id)\n queue.push(folder.id)\n }\n }\n\n // Process queue to identify visible folders (BFS)\n while (queue.length > 0) {\n const folderId = queue.shift()!\n const isParentExpanded = expandedFolderIds.has(folderId)\n\n if (!isParentExpanded) continue\n\n // Add children of expanded folders to visible set\n const childrenIds = parentToChildrenMap.get(folderId)\n if (childrenIds) {\n for (const childId of childrenIds) {\n if (!visible.has(childId)) {\n visible.add(childId)\n queue.push(childId)\n }\n }\n }\n }\n\n return visible\n }, [foldersMap, parentToChildrenMap, expandedFolderIds])\n\n // Final memoized result - build the table tree\n return useMemo(() => {\n // Helper function to create a task row\n const createTaskRow = (task: EditorTaskNode, parentId?: string): TableRow => {\n const typeData = getEntityTypeData('task', task.taskType)\n\n const links = linksToTableData(task.links, 'task', {\n folderTypes: projectInfo?.folderTypes || [],\n productTypes: Object.values(productTypes || {}),\n taskTypes: projectInfo?.taskTypes || [],\n })\n\n return {\n id: task.id,\n entityType: 'task',\n parentId: parentId || task.folderId,\n folderId: task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n parents: task.parents || [],\n path: task.parents.join('/') || null, // todo: probably remove this and just use parents\n updatedAt: task.updatedAt,\n createdAt: task.createdAt,\n links: links,\n }\n }\n\n // If showHierarchy is false, create a flat list of task rows\n if (!showHierarchy) {\n const flatRows: TableRow[] = []\n\n // Loop through all tasks\n for (const task of tasksMap.values()) {\n if (!task.id) continue\n flatRows.push(createTaskRow(task))\n }\n\n // Loop through all extra rows\n for (const row of rows || []) {\n flatRows.push(row)\n }\n\n // if we are loading more tasks, add loading rows\n if (isLoadingMore) {\n const firstTaskAttrib = tasksMap.entries().next()?.value?.[1]?.attrib || {}\n const loadingAttribs = Object.keys(firstTaskAttrib).map((key) => ({\n name: key,\n }))\n // number of tasks we loading with the infinite query\n const count = TASKS_INFINITE_QUERY_COUNT\n if (count > 0) {\n const loadingTaskRows = generateLoadingRows(loadingAttribs, count, {\n type: 'task',\n })\n\n flatRows.push(...loadingTaskRows)\n }\n }\n\n return flatRows\n }\n\n // Use Map for O(1) lookups\n const rowsById = new Map<string, TableRow>()\n const rootRows: TableRow[] = []\n\n // Create minimal rows for only visible folders\n for (const folderId of visibleFolders) {\n const folder = foldersMap.get(folderId)\n if (!folder) continue\n\n const links = linksToTableData(folder.links, 'folder', {\n folderTypes: projectInfo?.folderTypes || [],\n productTypes: Object.values(productTypes || {}),\n taskTypes: projectInfo?.taskTypes || [],\n })\n\n // Create row with minimal required properties\n const row: TableRow = {\n id: folderId,\n entityType: 'folder',\n parentId: folder.parentId || undefined,\n folderId: folderId || null, // root folders have no folderId\n name: folder.name || '',\n label: folder.label || folder.name || '',\n icon: getEntityTypeData('folder', folder.folderType)?.icon || null,\n color: null,\n img: null,\n subRows: [],\n status: folder.status,\n tags: folder.tags || [],\n subType: folder.folderType || null,\n ownAttrib: folder.ownAttrib || [],\n path: folder.path,\n attrib: folder.attrib || {},\n childOnlyMatch: folder.childOnlyMatch || false,\n updatedAt: folder.updatedAt,\n createdAt: folder.createdAt,\n hasReviewables: folder.hasReviewables || false,\n hasVersions: folder.hasVersions || false,\n links: links,\n }\n\n rowsById.set(folderId, row)\n\n // Add root rows directly to the rootRows array\n if (!folder.parentId || !foldersMap.has(folder.parentId)) {\n rootRows.push(row)\n }\n\n // Process tasks immediately if folder is expanded\n if (expandedFolderIds.has(folderId)) {\n // because tasksByFolderMap is a map of tasks by folder ID\n // we can directly get the tasks for the current folder\n const folderTaskIds = tasksByFolderMap.get(folderId) || []\n const folderTasks = folderTaskIds.flatMap((taskId) => tasksMap.get(taskId) || [])\n\n if (folderTasks.length || loadingTasks[folderId]) {\n // Use array literal with known length for better performance\n const taskRows = new Array<TableRow>(folderTasks.length)\n\n // Direct array assignment is faster than push operations\n for (let i = 0; i < folderTasks.length; i++) {\n taskRows[i] = createTaskRow(folderTasks[i], folderId)\n }\n\n // Add loading rows if applicable\n if (loadingTasks[folderId]) {\n const firstTaskAttrib = tasksMap.entries().next()?.value?.[1]?.attrib || {}\n const loadingAttribs = Object.keys(firstTaskAttrib).map((key) => ({\n name: key,\n }))\n const count = loadingTasks[folderId]\n if (count > 0) {\n const loadingTaskRows = generateLoadingRows(loadingAttribs, count, {\n type: 'task',\n parentId: folderId,\n })\n\n taskRows.push(...loadingTaskRows)\n }\n }\n\n row.subRows = taskRows\n }\n }\n }\n\n // Build the folder hierarchy efficiently\n for (const folderId of visibleFolders) {\n const parentId = childToParentMap.get(folderId)\n if (!parentId || !expandedFolderIds.has(parentId)) continue\n\n const childRow = rowsById.get(folderId)\n const parentRow = rowsById.get(parentId)\n\n if (!childRow || !parentRow) continue\n\n // Add folder to its parent's subRows\n parentRow.subRows.push(childRow)\n }\n\n // Add any extra rows to the root rows\n for (const row of rows || []) {\n rootRows.push(row)\n }\n\n return rootRows\n }, [\n foldersMap,\n tasksMap,\n rows,\n visibleFolders,\n childToParentMap,\n expandedFolderIds,\n showHierarchy,\n loadingTasks,\n isLoadingMore,\n ])\n}\n"],"names":["TASKS_INFINITE_QUERY_COUNT","useBuildProjectDataTable","foldersMap","tasksMap","rows","tasksByFolderMap","expanded","projectInfo","showHierarchy","loadingTasks","isLoadingMore","getEntityTypeData","useGetEntityTypeData","expandedKey","useMemo","expandedFolderIds","_","isExpanded","id","childToParentMap","parentToChildrenMap","childToParent","parentToChildren","folder","parentId","children","visibleFolders","visible","queue","folderId","childrenIds","childId","createTaskRow","task","typeData","links","linksToTableData","productTypes","flatRows","row","firstTaskAttrib","_c","_b","_a","loadingAttribs","key","count","loadingTaskRows","generateLoadingRows","rowsById","rootRows","_d","folderTasks","taskId","taskRows","i","_g","_f","_e","childRow","parentRow"],"mappings":"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"}