@ynput/ayon-frontend-shared 0.2.15 → 0.2.17

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 (575) hide show
  1. package/dist/DetailsPanel.cjs.js +12 -10
  2. package/dist/DetailsPanel.cjs.js.map +1 -1
  3. package/dist/DetailsPanel.es.js +12 -10
  4. package/dist/DetailsPanel.es.js.map +1 -1
  5. package/dist/ProjectTreeTable.cjs.js +71 -34
  6. package/dist/ProjectTreeTable.cjs.js.map +1 -1
  7. package/dist/ProjectTreeTable.es.js +55 -18
  8. package/dist/ProjectTreeTable.es.js.map +1 -1
  9. package/dist/_virtual/index.cjs10.js +5 -3
  10. package/dist/_virtual/index.cjs10.js.map +1 -1
  11. package/dist/_virtual/index.cjs4.js +4 -4
  12. package/dist/_virtual/index.cjs5.js +4 -4
  13. package/dist/_virtual/index.cjs6.js +2 -2
  14. package/dist/_virtual/index.cjs7.js +3 -5
  15. package/dist/_virtual/index.cjs7.js.map +1 -1
  16. package/dist/_virtual/index.es10.js +5 -2
  17. package/dist/_virtual/index.es10.js.map +1 -1
  18. package/dist/_virtual/index.es4.js +4 -4
  19. package/dist/_virtual/index.es5.js +4 -4
  20. package/dist/_virtual/index.es6.js +2 -2
  21. package/dist/_virtual/index.es7.js +2 -5
  22. package/dist/_virtual/index.es7.js.map +1 -1
  23. package/dist/api.cjs.js +6 -1
  24. package/dist/api.cjs.js.map +1 -1
  25. package/dist/api.es.js +8 -3
  26. package/dist/api.es.js.map +1 -1
  27. package/dist/components.cjs.js +3 -0
  28. package/dist/components.cjs.js.map +1 -1
  29. package/dist/components.es.js +3 -0
  30. package/dist/components.es.js.map +1 -1
  31. package/dist/index.cjs.js +9 -7
  32. package/dist/index.cjs.js.map +1 -1
  33. package/dist/index.es.js +9 -7
  34. package/dist/index.es.js.map +1 -1
  35. package/dist/node_modules/graphql-request/build/legacy/helpers/analyzeDocument.cjs.js +1 -2
  36. package/dist/node_modules/graphql-request/build/legacy/helpers/analyzeDocument.cjs.js.map +1 -1
  37. package/dist/node_modules/graphql-request/build/legacy/helpers/analyzeDocument.es.js +1 -2
  38. package/dist/node_modules/graphql-request/build/legacy/helpers/analyzeDocument.es.js.map +1 -1
  39. package/dist/node_modules/match-sorter/dist/match-sorter.esm.cjs.js +1 -1
  40. package/dist/node_modules/match-sorter/dist/match-sorter.esm.es.js +1 -1
  41. package/dist/node_modules/parse-numeric-range/index.cjs.js +1 -1
  42. package/dist/node_modules/parse-numeric-range/index.es.js +1 -1
  43. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  44. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  45. package/dist/node_modules/rehype-prism-plus/dist/index.es.cjs.js +1 -1
  46. package/dist/node_modules/rehype-prism-plus/dist/index.es.es.js +1 -1
  47. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  48. package/dist/node_modules/remove-accents/index.es.js +1 -1
  49. package/dist/shared/src/api/generated/graphql.cjs.js +24 -0
  50. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  51. package/dist/shared/src/api/generated/graphql.es.js +24 -0
  52. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  53. package/dist/shared/src/api/generated/grouping.cjs.js +18 -0
  54. package/dist/shared/src/api/generated/grouping.cjs.js.map +1 -0
  55. package/dist/shared/src/api/generated/grouping.es.js +18 -0
  56. package/dist/shared/src/api/generated/grouping.es.js.map +1 -0
  57. package/dist/shared/src/api/generated/tasks.cjs.js +0 -8
  58. package/dist/shared/src/api/generated/tasks.cjs.js.map +1 -1
  59. package/dist/shared/src/api/generated/tasks.es.js +0 -8
  60. package/dist/shared/src/api/generated/tasks.es.js.map +1 -1
  61. package/dist/shared/src/api/queries/actions/getActions.cjs.js +1 -0
  62. package/dist/shared/src/api/queries/actions/getActions.cjs.js.map +1 -1
  63. package/dist/shared/src/api/queries/actions/getActions.es.js +1 -0
  64. package/dist/shared/src/api/queries/actions/getActions.es.js.map +1 -1
  65. package/dist/shared/src/api/queries/activities/getActivities.cjs.js +1 -0
  66. package/dist/shared/src/api/queries/activities/getActivities.cjs.js.map +1 -1
  67. package/dist/shared/src/api/queries/activities/getActivities.es.js +1 -0
  68. package/dist/shared/src/api/queries/activities/getActivities.es.js.map +1 -1
  69. package/dist/shared/src/api/queries/activities/getMentions.cjs.js +1 -0
  70. package/dist/shared/src/api/queries/activities/getMentions.cjs.js.map +1 -1
  71. package/dist/shared/src/api/queries/activities/getMentions.es.js +1 -0
  72. package/dist/shared/src/api/queries/activities/getMentions.es.js.map +1 -1
  73. package/dist/shared/src/api/queries/activities/updateReaction.cjs.js +1 -0
  74. package/dist/shared/src/api/queries/activities/updateReaction.cjs.js.map +1 -1
  75. package/dist/shared/src/api/queries/activities/updateReaction.es.js +1 -0
  76. package/dist/shared/src/api/queries/activities/updateReaction.es.js.map +1 -1
  77. package/dist/shared/src/api/queries/addons/getAddons.cjs.js +1 -0
  78. package/dist/shared/src/api/queries/addons/getAddons.cjs.js.map +1 -1
  79. package/dist/shared/src/api/queries/addons/getAddons.es.js +1 -0
  80. package/dist/shared/src/api/queries/addons/getAddons.es.js.map +1 -1
  81. package/dist/shared/src/api/queries/attributes/getAttributes.cjs.js +1 -0
  82. package/dist/shared/src/api/queries/attributes/getAttributes.cjs.js.map +1 -1
  83. package/dist/shared/src/api/queries/attributes/getAttributes.es.js +1 -0
  84. package/dist/shared/src/api/queries/attributes/getAttributes.es.js.map +1 -1
  85. package/dist/shared/src/api/queries/authentication/getAuthentication.cjs.js +1 -0
  86. package/dist/shared/src/api/queries/authentication/getAuthentication.cjs.js.map +1 -1
  87. package/dist/shared/src/api/queries/authentication/getAuthentication.es.js +1 -0
  88. package/dist/shared/src/api/queries/authentication/getAuthentication.es.js.map +1 -1
  89. package/dist/shared/src/api/queries/entities/getEntity.cjs.js +1 -0
  90. package/dist/shared/src/api/queries/entities/getEntity.cjs.js.map +1 -1
  91. package/dist/shared/src/api/queries/entities/getEntity.es.js +1 -0
  92. package/dist/shared/src/api/queries/entities/getEntity.es.js.map +1 -1
  93. package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js +1 -0
  94. package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js.map +1 -1
  95. package/dist/shared/src/api/queries/entities/getEntityPanel.es.js +1 -0
  96. package/dist/shared/src/api/queries/entities/getEntityPanel.es.js.map +1 -1
  97. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js +2 -0
  98. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
  99. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +2 -0
  100. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
  101. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +2 -0
  102. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
  103. package/dist/shared/src/api/queries/entities/updateEntity.es.js +2 -0
  104. package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
  105. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +1 -0
  106. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
  107. package/dist/shared/src/api/queries/entityLists/getLists.es.js +1 -0
  108. package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
  109. package/dist/shared/src/api/queries/entityLists/getListsAttributes.cjs.js +1 -0
  110. package/dist/shared/src/api/queries/entityLists/getListsAttributes.cjs.js.map +1 -1
  111. package/dist/shared/src/api/queries/entityLists/getListsAttributes.es.js +1 -0
  112. package/dist/shared/src/api/queries/entityLists/getListsAttributes.es.js.map +1 -1
  113. package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js +1 -0
  114. package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js.map +1 -1
  115. package/dist/shared/src/api/queries/entityLists/updateLists.es.js +1 -0
  116. package/dist/shared/src/api/queries/entityLists/updateLists.es.js.map +1 -1
  117. package/dist/shared/src/api/queries/folders/getFolders.cjs.js +1 -0
  118. package/dist/shared/src/api/queries/folders/getFolders.cjs.js.map +1 -1
  119. package/dist/shared/src/api/queries/folders/getFolders.es.js +1 -0
  120. package/dist/shared/src/api/queries/folders/getFolders.es.js.map +1 -1
  121. package/dist/shared/src/api/queries/grouping/getGrouping.cjs.js +47 -0
  122. package/dist/shared/src/api/queries/grouping/getGrouping.cjs.js.map +1 -0
  123. package/dist/shared/src/api/queries/grouping/getGrouping.es.js +47 -0
  124. package/dist/shared/src/api/queries/grouping/getGrouping.es.js.map +1 -0
  125. package/dist/shared/src/api/queries/overview/getOverview.cjs.js +4 -5
  126. package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
  127. package/dist/shared/src/api/queries/overview/getOverview.es.js +4 -5
  128. package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
  129. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js +2 -0
  130. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js.map +1 -1
  131. package/dist/shared/src/api/queries/overview/updateOverview.es.js +2 -0
  132. package/dist/shared/src/api/queries/overview/updateOverview.es.js.map +1 -1
  133. package/dist/shared/src/api/queries/permissions/getPermissions.cjs.js +1 -0
  134. package/dist/shared/src/api/queries/permissions/getPermissions.cjs.js.map +1 -1
  135. package/dist/shared/src/api/queries/permissions/getPermissions.es.js +1 -0
  136. package/dist/shared/src/api/queries/permissions/getPermissions.es.js.map +1 -1
  137. package/dist/shared/src/api/queries/project/getProject.cjs.js +1 -0
  138. package/dist/shared/src/api/queries/project/getProject.cjs.js.map +1 -1
  139. package/dist/shared/src/api/queries/project/getProject.es.js +1 -0
  140. package/dist/shared/src/api/queries/project/getProject.es.js.map +1 -1
  141. package/dist/shared/src/api/queries/review/getReview.cjs.js +1 -0
  142. package/dist/shared/src/api/queries/review/getReview.cjs.js.map +1 -1
  143. package/dist/shared/src/api/queries/review/getReview.es.js +1 -0
  144. package/dist/shared/src/api/queries/review/getReview.es.js.map +1 -1
  145. package/dist/shared/src/api/queries/review/updateReview.cjs.js +1 -0
  146. package/dist/shared/src/api/queries/review/updateReview.cjs.js.map +1 -1
  147. package/dist/shared/src/api/queries/review/updateReview.es.js +1 -0
  148. package/dist/shared/src/api/queries/review/updateReview.es.js.map +1 -1
  149. package/dist/shared/src/api/queries/system/getSystem.cjs.js +1 -0
  150. package/dist/shared/src/api/queries/system/getSystem.cjs.js.map +1 -1
  151. package/dist/shared/src/api/queries/system/getSystem.es.js +1 -0
  152. package/dist/shared/src/api/queries/system/getSystem.es.js.map +1 -1
  153. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js +1 -0
  154. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js.map +1 -1
  155. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js +1 -0
  156. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js.map +1 -1
  157. package/dist/shared/src/api/queries/users/getUsers.cjs.js +2 -0
  158. package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
  159. package/dist/shared/src/api/queries/users/getUsers.es.js +2 -0
  160. package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
  161. package/dist/shared/src/api/queries/users/updateUsers.cjs.js +1 -0
  162. package/dist/shared/src/api/queries/users/updateUsers.cjs.js.map +1 -1
  163. package/dist/shared/src/api/queries/users/updateUsers.es.js +1 -0
  164. package/dist/shared/src/api/queries/users/updateUsers.es.js.map +1 -1
  165. package/dist/shared/src/api/queries/watchers/getWatchers.cjs.js +1 -0
  166. package/dist/shared/src/api/queries/watchers/getWatchers.cjs.js.map +1 -1
  167. package/dist/shared/src/api/queries/watchers/getWatchers.es.js +1 -0
  168. package/dist/shared/src/api/queries/watchers/getWatchers.es.js.map +1 -1
  169. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js +2 -2
  170. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js.map +1 -1
  171. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js +2 -2
  172. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js.map +1 -1
  173. package/dist/shared/src/components/Badge/Badge.cjs.js +31 -0
  174. package/dist/shared/src/components/Badge/Badge.cjs.js.map +1 -0
  175. package/dist/shared/src/components/Badge/Badge.es.js +31 -0
  176. package/dist/shared/src/components/Badge/Badge.es.js.map +1 -0
  177. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js +2 -0
  178. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js.map +1 -1
  179. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js +2 -0
  180. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js.map +1 -1
  181. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js +2 -0
  182. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js.map +1 -1
  183. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js +2 -0
  184. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js.map +1 -1
  185. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js +9 -7
  186. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js.map +1 -1
  187. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js +9 -7
  188. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js.map +1 -1
  189. package/dist/shared/src/components/ProjectTableSettings/ColumnItem.cjs.js +2 -0
  190. package/dist/shared/src/components/ProjectTableSettings/ColumnItem.cjs.js.map +1 -1
  191. package/dist/shared/src/components/ProjectTableSettings/ColumnItem.es.js +2 -0
  192. package/dist/shared/src/components/ProjectTableSettings/ColumnItem.es.js.map +1 -1
  193. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js +5 -1
  194. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js.map +1 -1
  195. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js +5 -1
  196. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js.map +1 -1
  197. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +83 -13
  198. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  199. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +83 -13
  200. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  201. package/dist/shared/src/components/ProjectTableSettings/SortableColumnItem.cjs.js +2 -0
  202. package/dist/shared/src/components/ProjectTableSettings/SortableColumnItem.cjs.js.map +1 -1
  203. package/dist/shared/src/components/ProjectTableSettings/SortableColumnItem.es.js +2 -0
  204. package/dist/shared/src/components/ProjectTableSettings/SortableColumnItem.es.js.map +1 -1
  205. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.cjs.js +5 -1
  206. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.cjs.js.map +1 -1
  207. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.es.js +5 -1
  208. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.es.js.map +1 -1
  209. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js +5 -5
  210. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js.map +1 -1
  211. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.es.js +5 -5
  212. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.es.js.map +1 -1
  213. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js +2 -0
  214. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js.map +1 -1
  215. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js +2 -0
  216. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js.map +1 -1
  217. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +99 -86
  218. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  219. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +99 -86
  220. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  221. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +93 -24
  222. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  223. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +94 -25
  224. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  225. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.cjs.js +4 -0
  226. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.cjs.js.map +1 -1
  227. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.es.js +4 -0
  228. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.es.js.map +1 -1
  229. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +9 -7
  230. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  231. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +9 -7
  232. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  233. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +2 -0
  234. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
  235. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +2 -0
  236. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
  237. package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.cjs.js +27 -6
  238. package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.cjs.js.map +1 -1
  239. package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.es.js +27 -6
  240. package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.es.js.map +1 -1
  241. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +222 -19
  242. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  243. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +223 -20
  244. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  245. package/dist/shared/src/components/Watchers/Watchers.cjs.js +2 -0
  246. package/dist/shared/src/components/Watchers/Watchers.cjs.js.map +1 -1
  247. package/dist/shared/src/components/Watchers/Watchers.es.js +2 -0
  248. package/dist/shared/src/components/Watchers/Watchers.es.js.map +1 -1
  249. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +9 -7
  250. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  251. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +9 -7
  252. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  253. package/dist/shared/src/containers/Actions/Actions.cjs.js +2 -0
  254. package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
  255. package/dist/shared/src/containers/Actions/Actions.es.js +2 -0
  256. package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
  257. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +9 -7
  258. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  259. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +9 -7
  260. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  261. package/dist/shared/src/containers/ContextMenu/ContextMenuItem.cjs.js +22 -0
  262. package/dist/shared/src/containers/ContextMenu/ContextMenuItem.cjs.js.map +1 -1
  263. package/dist/shared/src/containers/ContextMenu/ContextMenuItem.es.js +22 -0
  264. package/dist/shared/src/containers/ContextMenu/ContextMenuItem.es.js.map +1 -1
  265. package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.cjs.js +26 -7
  266. package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.cjs.js.map +1 -1
  267. package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.es.js +26 -7
  268. package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.es.js.map +1 -1
  269. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +12 -10
  270. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  271. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +12 -10
  272. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  273. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +19 -17
  274. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  275. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +19 -17
  276. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  277. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +9 -7
  278. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  279. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +9 -7
  280. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  281. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +8 -6
  282. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  283. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +8 -6
  284. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  285. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +2 -0
  286. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
  287. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +2 -0
  288. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
  289. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +2 -0
  290. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
  291. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +2 -0
  292. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
  293. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +1 -1
  294. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
  295. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +1 -1
  296. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js.map +1 -1
  297. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.cjs.js +8 -1
  298. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.cjs.js.map +1 -1
  299. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.es.js +9 -2
  300. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.es.js.map +1 -1
  301. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js +9 -0
  302. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js.map +1 -1
  303. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js +10 -1
  304. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js.map +1 -1
  305. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +2 -0
  306. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  307. package/dist/shared/src/containers/Feed/context/FeedContext.es.js +2 -0
  308. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  309. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js +2 -0
  310. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js.map +1 -1
  311. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js +2 -0
  312. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js.map +1 -1
  313. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +40 -34
  314. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  315. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +41 -35
  316. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  317. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js +7 -0
  318. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js.map +1 -1
  319. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js +7 -0
  320. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js.map +1 -1
  321. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +9 -8
  322. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  323. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +9 -8
  324. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  325. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +8 -7
  326. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  327. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +8 -7
  328. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  329. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +11 -6
  330. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
  331. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +11 -6
  332. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
  333. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js +1 -174
  334. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js.map +1 -1
  335. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.es.js +2 -175
  336. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.es.js.map +1 -1
  337. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js +212 -0
  338. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js.map +1 -0
  339. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js +212 -0
  340. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js.map +1 -0
  341. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +2 -0
  342. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
  343. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +2 -0
  344. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
  345. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js +1 -161
  346. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
  347. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js +2 -162
  348. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
  349. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js +191 -0
  350. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js.map +1 -0
  351. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js +191 -0
  352. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js.map +1 -0
  353. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsContext.cjs.js +1 -79
  354. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsContext.cjs.js.map +1 -1
  355. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsContext.es.js +2 -80
  356. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsContext.es.js.map +1 -1
  357. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsProvider.cjs.js +84 -0
  358. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsProvider.cjs.js.map +1 -0
  359. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsProvider.es.js +84 -0
  360. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsProvider.es.js.map +1 -0
  361. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.cjs.js +1 -277
  362. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.cjs.js.map +1 -1
  363. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.es.js +2 -278
  364. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.es.js.map +1 -1
  365. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +282 -0
  366. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -0
  367. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +282 -0
  368. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -0
  369. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +2 -0
  370. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
  371. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +2 -0
  372. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
  373. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +85 -34
  374. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  375. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +86 -35
  376. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  377. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  378. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  379. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +1 -1
  380. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  381. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +26 -13
  382. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  383. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +26 -13
  384. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  385. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.cjs.js +24 -0
  386. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.cjs.js.map +1 -0
  387. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.es.js +24 -0
  388. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.es.js.map +1 -0
  389. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js +16 -9
  390. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js.map +1 -1
  391. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js +16 -9
  392. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js.map +1 -1
  393. package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.cjs.js +17 -0
  394. package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.cjs.js.map +1 -0
  395. package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.es.js +17 -0
  396. package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.es.js.map +1 -0
  397. package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.cjs.js +30 -0
  398. package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.cjs.js.map +1 -0
  399. package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.es.js +30 -0
  400. package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.es.js.map +1 -0
  401. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +363 -0
  402. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -0
  403. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +363 -0
  404. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -0
  405. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js +16 -12
  406. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js.map +1 -1
  407. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js +16 -13
  408. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js.map +1 -1
  409. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +72 -0
  410. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -0
  411. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +72 -0
  412. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -0
  413. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js +82 -0
  414. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js.map +1 -0
  415. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js +82 -0
  416. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js.map +1 -0
  417. package/dist/shared/src/containers/ProjectTreeTable/{context/ProjectTableModulesContext.cjs.js → hooks/useProjectTableModules.cjs.js} +22 -23
  418. package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.cjs.js.map +1 -0
  419. package/dist/shared/src/containers/ProjectTreeTable/{context/ProjectTableModulesContext.es.js → hooks/useProjectTableModules.es.js} +22 -23
  420. package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.es.js.map +1 -0
  421. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +41 -0
  422. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -0
  423. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +41 -0
  424. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -0
  425. package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.cjs.js +19 -0
  426. package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.cjs.js.map +1 -0
  427. package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.es.js +19 -0
  428. package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.es.js.map +1 -0
  429. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.cjs.js +26 -0
  430. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.cjs.js.map +1 -0
  431. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.es.js +26 -0
  432. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.es.js.map +1 -0
  433. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js +7 -4
  434. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -1
  435. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js +7 -4
  436. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js.map +1 -1
  437. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +15 -1
  438. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  439. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +15 -1
  440. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  441. package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.cjs.js.map +1 -1
  442. package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.es.js.map +1 -1
  443. package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.cjs.js +8 -0
  444. package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.cjs.js.map +1 -0
  445. package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.es.js +8 -0
  446. package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.es.js.map +1 -0
  447. package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.cjs.js +7 -0
  448. package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.cjs.js.map +1 -0
  449. package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.es.js +7 -0
  450. package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.es.js.map +1 -0
  451. package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.cjs.js +0 -1
  452. package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.cjs.js.map +1 -1
  453. package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.es.js +0 -1
  454. package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.es.js.map +1 -1
  455. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js +2 -1
  456. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js.map +1 -1
  457. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js +2 -1
  458. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js.map +1 -1
  459. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js +0 -8
  460. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js.map +1 -1
  461. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js +0 -8
  462. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js.map +1 -1
  463. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +10 -8
  464. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  465. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +10 -8
  466. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  467. package/dist/shared/src/context/AddonProjectContext.cjs.js +2 -0
  468. package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
  469. package/dist/shared/src/context/AddonProjectContext.es.js +2 -0
  470. package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
  471. package/dist/shared/src/context/DetailsPanelContext.cjs.js +2 -0
  472. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  473. package/dist/shared/src/context/DetailsPanelContext.es.js +2 -0
  474. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  475. package/dist/shared/src/context/PowerpackContext.cjs.js +122 -17
  476. package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
  477. package/dist/shared/src/context/PowerpackContext.es.js +123 -18
  478. package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
  479. package/dist/shared/src/context/RemoteModulesContext.cjs.js +7 -1
  480. package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
  481. package/dist/shared/src/context/RemoteModulesContext.es.js +7 -1
  482. package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
  483. package/dist/shared/src/hooks/useActionTriggers.cjs.js +2 -0
  484. package/dist/shared/src/hooks/useActionTriggers.cjs.js.map +1 -1
  485. package/dist/shared/src/hooks/useActionTriggers.es.js +2 -0
  486. package/dist/shared/src/hooks/useActionTriggers.es.js.map +1 -1
  487. package/dist/shared/src/hooks/useEntityUpdate.cjs.js +2 -0
  488. package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
  489. package/dist/shared/src/hooks/useEntityUpdate.es.js +2 -0
  490. package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
  491. package/dist/shared/src/hooks/useLoadModule.cjs.js +11 -5
  492. package/dist/shared/src/hooks/useLoadModule.cjs.js.map +1 -1
  493. package/dist/shared/src/hooks/useLoadModule.es.js +11 -5
  494. package/dist/shared/src/hooks/useLoadModule.es.js.map +1 -1
  495. package/dist/shared/src/hooks/useScopedStatuses.cjs.js +2 -0
  496. package/dist/shared/src/hooks/useScopedStatuses.cjs.js.map +1 -1
  497. package/dist/shared/src/hooks/useScopedStatuses.es.js +2 -0
  498. package/dist/shared/src/hooks/useScopedStatuses.es.js.map +1 -1
  499. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +2 -0
  500. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
  501. package/dist/shared/src/hooks/useUserProjectConfig.es.js +2 -0
  502. package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
  503. package/dist/types/api/generated/graphql.d.ts +33 -38
  504. package/dist/types/api/generated/grouping.d.ts +40 -0
  505. package/dist/types/api/generated/index.d.ts +3 -1
  506. package/dist/types/api/generated/tasks.d.ts +8 -33
  507. package/dist/types/api/queries/activities/getActivities.d.ts +4 -0
  508. package/dist/types/api/queries/activities/updateActivities.d.ts +8 -0
  509. package/dist/types/api/queries/entities/getEntity.d.ts +4 -0
  510. package/dist/types/api/queries/entities/getEntityPanel.d.ts +4 -0
  511. package/dist/types/api/queries/entities/updateEntity.d.ts +4 -0
  512. package/dist/types/api/queries/entityLists/getLists.d.ts +4 -0
  513. package/dist/types/api/queries/grouping/getGrouping.d.ts +137 -0
  514. package/dist/types/api/queries/grouping/index.d.ts +1 -0
  515. package/dist/types/api/queries/index.d.ts +1 -0
  516. package/dist/types/api/queries/overview/getOverview.d.ts +5 -133
  517. package/dist/types/api/queries/project/getProject.d.ts +2 -2
  518. package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +4 -0
  519. package/dist/types/api/queries/users/getUsers.d.ts +4 -0
  520. package/dist/types/components/Badge/Badge.d.ts +10 -0
  521. package/dist/types/components/Badge/index.d.ts +1 -0
  522. package/dist/types/components/ProjectTableSettings/ColumnItem.d.ts +1 -0
  523. package/dist/types/components/ProjectTableSettings/ProjectTableSettings.d.ts +1 -1
  524. package/dist/types/components/ProjectTableSettings/SortableColumnItem.d.ts +1 -0
  525. package/dist/types/components/ReviewableProgressCard/ReviewableProgressCard.d.ts +1 -1
  526. package/dist/types/components/ReviewablesList/ReviewablesUpload.d.ts +19 -3
  527. package/dist/types/components/SettingsPanel/SettingsPanelItemTemplate.d.ts +1 -0
  528. package/dist/types/components/index.d.ts +1 -0
  529. package/dist/types/containers/ContextMenu/ContextMenuItem.d.ts +4 -0
  530. package/dist/types/containers/ContextMenu/useCreateContextMenu.d.ts +2 -1
  531. package/dist/types/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.d.ts +1 -0
  532. package/dist/types/containers/ProjectTreeTable/ProjectTreeTable.d.ts +1 -5
  533. package/dist/types/containers/ProjectTreeTable/components/GroupSettingsFallback.d.ts +9 -2
  534. package/dist/types/containers/ProjectTreeTable/context/ColumnSettingsContext.d.ts +16 -16
  535. package/dist/types/containers/ProjectTreeTable/context/ColumnSettingsProvider.d.ts +9 -0
  536. package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +7 -52
  537. package/dist/types/containers/ProjectTreeTable/context/ProjectTableProvider.d.ts +59 -0
  538. package/dist/types/containers/ProjectTreeTable/context/SelectedRowsContext.d.ts +3 -8
  539. package/dist/types/containers/ProjectTreeTable/context/SelectedRowsProvider.d.ts +6 -0
  540. package/dist/types/containers/ProjectTreeTable/context/SelectionCellsContext.d.ts +2 -4
  541. package/dist/types/containers/ProjectTreeTable/context/SelectionCellsProvider.d.ts +4 -0
  542. package/dist/types/containers/ProjectTreeTable/context/index.d.ts +4 -2
  543. package/dist/types/containers/ProjectTreeTable/hooks/index.d.ts +14 -0
  544. package/dist/types/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.d.ts +7 -3
  545. package/dist/types/containers/ProjectTreeTable/hooks/useCellContextMenu.d.ts +13 -2
  546. package/dist/types/containers/ProjectTreeTable/hooks/useColumnSorting.d.ts +12 -0
  547. package/dist/types/containers/ProjectTreeTable/hooks/useEntitiesMap.d.ts +7 -0
  548. package/dist/types/containers/ProjectTreeTable/hooks/useExpandedState.d.ts +11 -0
  549. package/dist/types/containers/ProjectTreeTable/hooks/useFetchOverviewData.d.ts +38 -0
  550. package/dist/types/containers/ProjectTreeTable/hooks/useGetEntityTypeData.d.ts +2 -2
  551. package/dist/types/containers/ProjectTreeTable/hooks/useGetGroupedFields.d.ts +9 -0
  552. package/dist/types/containers/ProjectTreeTable/hooks/useGetTaskGroups.d.ts +10 -0
  553. package/dist/types/containers/ProjectTreeTable/hooks/useProjectTableModules.d.ts +25 -0
  554. package/dist/types/containers/ProjectTreeTable/hooks/useQueryFilters.d.ts +14 -0
  555. package/dist/types/containers/ProjectTreeTable/hooks/useScopedAttributeFields.d.ts +10 -0
  556. package/dist/types/containers/ProjectTreeTable/hooks/useSelectedFolders.d.ts +10 -0
  557. package/dist/types/containers/ProjectTreeTable/index.d.ts +2 -14
  558. package/dist/types/containers/ProjectTreeTable/types/index.d.ts +1 -0
  559. package/dist/types/containers/ProjectTreeTable/types/overviewContext.d.ts +46 -0
  560. package/dist/types/containers/ProjectTreeTable/utils/errorExtraction.d.ts +4 -0
  561. package/dist/types/containers/ProjectTreeTable/utils/index.d.ts +2 -0
  562. package/dist/types/containers/ProjectTreeTable/utils/localStorageKeys.d.ts +4 -0
  563. package/dist/types/containers/ProjectTreeTable/widgets/GroupHeaderWidget.d.ts +2 -1
  564. package/dist/types/context/PowerpackContext.d.ts +2 -1
  565. package/dist/types/hooks/useLoadModule.d.ts +2 -1
  566. package/dist/types/utils/extractVersionFromFilename.d.ts +5 -0
  567. package/package.json +1 -1
  568. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.cjs.js.map +0 -1
  569. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.es.js.map +0 -1
  570. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableSelectionContext.cjs.js +0 -33
  571. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableSelectionContext.cjs.js.map +0 -1
  572. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableSelectionContext.es.js +0 -33
  573. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableSelectionContext.es.js.map +0 -1
  574. package/dist/types/containers/ProjectTreeTable/context/ProjectTableModulesContext.d.ts +0 -12
  575. package/dist/types/containers/ProjectTreeTable/context/ProjectTableSelectionContext.d.ts +0 -11
@@ -1,5 +1,8 @@
1
- import useGetEntityTypeData from "./useGetEntityTypeData.es.js";
1
+ import { useGetEntityTypeData } from "./useGetEntityTypeData.es.js";
2
+ import { useCallback } from "react";
2
3
  const NEXT_PAGE_ID = "next-page";
4
+ const UNGROUPED_VALUE = "_ungrouped";
5
+ const ROW_ID_SEPARATOR = "__";
3
6
  const valueToStringArray = (value) => value ? Array.isArray(value) ? value.map((v) => v.toString()) : [value.toString()] : [];
4
7
  const getGroupData = (groupById, groupValue, groups) => {
5
8
  if (!groups)
@@ -26,36 +29,60 @@ const getGroupData = (groupById, groupValue, groups) => {
26
29
  };
27
30
  const GROUP_BY_ID = "_GROUP_";
28
31
  const buildGroupId = (value) => `${GROUP_BY_ID}${value}`;
32
+ const parseGroupId = (groupId) => {
33
+ if (!groupId.startsWith(GROUP_BY_ID)) return null;
34
+ return groupId.slice(GROUP_BY_ID.length);
35
+ };
36
+ const isGroupId = (id) => id.startsWith(GROUP_BY_ID);
37
+ const getSortingIds = (groupBy, project, attribFields = []) => {
38
+ var _a, _b, _c, _d, _e;
39
+ const attributeId = groupBy.id.replace("attrib.", "");
40
+ if (attributeId === "status") {
41
+ return ((_a = project == null ? void 0 : project.statuses) == null ? void 0 : _a.map((s) => s.name)) || [];
42
+ } else if (attributeId === "taskType") {
43
+ return ((_b = project == null ? void 0 : project.taskTypes) == null ? void 0 : _b.map((t) => t.name)) || [];
44
+ } else if (attributeId === "folderType") {
45
+ return ((_c = project == null ? void 0 : project.folderTypes) == null ? void 0 : _c.map((f) => f.name)) || [];
46
+ } else if (groupBy.id.startsWith("attrib.")) {
47
+ return ((_e = (_d = attribFields.find((field) => field.name === attributeId)) == null ? void 0 : _d.data.enum) == null ? void 0 : _e.map((e) => e.value.toString())) || [];
48
+ } else return [];
49
+ };
29
50
  const useBuildGroupByTableData = (props) => {
30
- const { project, entities, entityType, groups = [] } = props;
51
+ const { project, entities, entityType, groups = [], attribFields, showEmpty } = props;
31
52
  const getEntityTypeData = useGetEntityTypeData({ projectInfo: project });
32
- const entityToGroupRow = (task) => {
33
- const typeData = getEntityTypeData("task", task.taskType);
34
- return {
35
- id: task.id,
36
- entityType: "task",
37
- parentId: task.folderId,
38
- name: task.name || "",
39
- label: task.label || task.name || "",
40
- icon: (typeData == null ? void 0 : typeData.icon) || null,
41
- color: (typeData == null ? void 0 : typeData.color) || null,
42
- status: task.status,
43
- assignees: task.assignees,
44
- tags: task.tags,
45
- img: null,
46
- subRows: [],
47
- subType: task.taskType || null,
48
- attrib: task.attrib,
49
- ownAttrib: task.ownAttrib,
50
- path: task.folder.path,
51
- updatedAt: task.updatedAt
52
- };
53
- };
53
+ const entityToGroupRow = useCallback(
54
+ (task, group) => {
55
+ var _a;
56
+ const typeData = getEntityTypeData("task", task.taskType);
57
+ return {
58
+ id: task.id + ROW_ID_SEPARATOR + group,
59
+ // unique id for the task in the folder
60
+ entityId: task.id,
61
+ entityType: "task",
62
+ parentId: task.folderId,
63
+ name: task.name || "",
64
+ label: task.label || task.name || "",
65
+ icon: (typeData == null ? void 0 : typeData.icon) || null,
66
+ color: (typeData == null ? void 0 : typeData.color) || null,
67
+ status: task.status,
68
+ assignees: task.assignees,
69
+ tags: task.tags,
70
+ img: null,
71
+ subRows: [],
72
+ subType: task.taskType || null,
73
+ attrib: task.attrib,
74
+ ownAttrib: task.ownAttrib,
75
+ path: (_a = task.folder) == null ? void 0 : _a.path,
76
+ updatedAt: task.updatedAt
77
+ };
78
+ },
79
+ [getEntityTypeData]
80
+ );
54
81
  const buildGroupByTableData = (groupBy) => {
55
- var _a;
82
+ var _a, _b;
56
83
  const groupsMap = /* @__PURE__ */ new Map();
57
84
  for (const group of groups) {
58
- const groupValue = group.value;
85
+ const groupValue = (_a = group.value) == null ? void 0 : _a.toString();
59
86
  const groupId = buildGroupId(groupValue);
60
87
  const groupData = getGroupData(groupBy.id, groupValue, groups);
61
88
  groupsMap.set(groupValue, {
@@ -67,7 +94,7 @@ const useBuildGroupByTableData = (props) => {
67
94
  group: groupData
68
95
  });
69
96
  }
70
- const ungroupedId = GROUP_BY_ID + "__ungrouped";
97
+ const ungroupedId = GROUP_BY_ID + "." + UNGROUPED_VALUE;
71
98
  const getUnGroupedGroup = () => {
72
99
  let ungroupedGroup = groupsMap.get(ungroupedId);
73
100
  if (!ungroupedGroup) {
@@ -86,23 +113,23 @@ const useBuildGroupByTableData = (props) => {
86
113
  for (const [id, entity] of entities) {
87
114
  if (entity.entityType !== entityType) continue;
88
115
  let groupValues = [];
89
- if (groupBy.id.startsWith("attrib_")) {
90
- const attributeId = groupBy.id.split("_")[1];
91
- groupValues = valueToStringArray((_a = entity.attrib) == null ? void 0 : _a[attributeId]);
116
+ if (groupBy.id.startsWith("attrib.")) {
117
+ const attributeId = groupBy.id.split(".")[1];
118
+ groupValues = valueToStringArray((_b = entity.attrib) == null ? void 0 : _b[attributeId]);
92
119
  } else {
93
120
  groupValues = valueToStringArray(entity[groupBy.id]);
94
121
  }
95
122
  if (groupValues.length === 0) {
96
123
  const ungroupedGroup = getUnGroupedGroup();
97
- ungroupedGroup.subRows.push(entityToGroupRow(entity));
124
+ ungroupedGroup.subRows.push(entityToGroupRow(entity, UNGROUPED_VALUE));
98
125
  }
99
126
  for (const groupValue of groupValues) {
100
127
  const groupRow = groupsMap.get(groupValue);
101
128
  if (groupRow) {
102
- groupRow.subRows.push(entityToGroupRow(entity));
129
+ groupRow.subRows.push(entityToGroupRow(entity, groupValue));
103
130
  } else {
104
131
  const ungroupedGroup = getUnGroupedGroup();
105
- ungroupedGroup.subRows.push(entityToGroupRow(entity));
132
+ ungroupedGroup.subRows.push(entityToGroupRow(entity, UNGROUPED_VALUE));
106
133
  }
107
134
  }
108
135
  if ("groups" in entity && Array.isArray(entity.groups)) {
@@ -124,14 +151,38 @@ const useBuildGroupByTableData = (props) => {
124
151
  }
125
152
  }
126
153
  }
127
- return Array.from(groupsMap.values());
154
+ const groupsList = Array.from(groupsMap.values());
155
+ const attribSortingIds = getSortingIds(groupBy, project, attribFields);
156
+ groupsList.sort((a, b) => {
157
+ var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j;
158
+ if (((_a2 = a.group) == null ? void 0 : _a2.value) === ungroupedId) return 1;
159
+ if (((_b2 = b.group) == null ? void 0 : _b2.value) === ungroupedId) return -1;
160
+ if (attribSortingIds.length) {
161
+ const indexA = attribSortingIds.indexOf(((_c = a.group) == null ? void 0 : _c.value) || "");
162
+ const indexB = attribSortingIds.indexOf(((_d = b.group) == null ? void 0 : _d.value) || "");
163
+ if (indexA !== -1 && indexB !== -1) {
164
+ return indexA - indexB;
165
+ }
166
+ if (indexA !== -1) return -1;
167
+ if (indexB !== -1) return 1;
168
+ return ((_g = (_e = a.group) == null ? void 0 : _e.label) == null ? void 0 : _g.localeCompare(((_f = b.group) == null ? void 0 : _f.label) || "")) || 0;
169
+ } else {
170
+ return ((_j = (_h = a.group) == null ? void 0 : _h.label) == null ? void 0 : _j.localeCompare(((_i = b.group) == null ? void 0 : _i.label) || "")) || 0;
171
+ }
172
+ });
173
+ const nonEmptyGroups = groupsList.filter((group) => group.subRows.length > 0);
174
+ return showEmpty ? groupsList : nonEmptyGroups;
128
175
  };
129
176
  return buildGroupByTableData;
130
177
  };
131
178
  export {
132
179
  GROUP_BY_ID,
133
180
  NEXT_PAGE_ID,
181
+ ROW_ID_SEPARATOR,
182
+ UNGROUPED_VALUE,
134
183
  buildGroupId,
135
- useBuildGroupByTableData as default
184
+ useBuildGroupByTableData as default,
185
+ isGroupId,
186
+ parseGroupId
136
187
  };
137
188
  //# 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, TaskGroup } from '@shared/api'\nimport { TableGroupBy, TableUser } from '../context'\nimport { EditorTaskNode, EntitiesMap, EntityMap, ProjectTableAttribute, TableRow } from '../types'\nimport useGetEntityTypeData from './useGetEntityTypeData'\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'\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?: TaskGroup[]): 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?: TaskGroup[]\n}\n\nconst useBuildGroupByTableData = (props: BuildGroupByTableProps) => {\n const { project, entities, entityType, groups = [] } = props\n const getEntityTypeData = useGetEntityTypeData({ projectInfo: project })\n\n const entityToGroupRow = (task: EditorTaskNode): TableRow => {\n const typeData = getEntityTypeData('task', task.taskType)\n return {\n id: 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 path: task.folder.path,\n updatedAt: task.updatedAt,\n }\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\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 })\n }\n\n const ungroupedId = GROUP_BY_ID + '__ungrouped'\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 }\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))\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))\n } else {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows.push(entityToGroupRow(entity as EditorTaskNode))\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 })\n }\n }\n }\n }\n }\n\n return Array.from(groupsMap.values())\n }\n\n return buildGroupByTableData\n}\n\nexport default useBuildGroupByTableData\n"],"names":[],"mappings":"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"}
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'\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 path: task.folder?.path,\n updatedAt: task.updatedAt,\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 })\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 }\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 })\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":["_a","_b"],"mappings":"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"}
@@ -14,7 +14,7 @@ function useBuildProjectDataTable({
14
14
  loadingTasks = {},
15
15
  isLoadingMore = false
16
16
  }) {
17
- const getEntityTypeData = useGetEntityTypeData({ projectInfo });
17
+ const getEntityTypeData = useGetEntityTypeData.useGetEntityTypeData({ projectInfo });
18
18
  const expandedKey = React.useMemo(() => JSON.stringify(expanded), [expanded]);
19
19
  const expandedFolderIds = React.useMemo(() => {
20
20
  return new Set(
@@ -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'\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 return {\n id: task.id,\n entityType: 'task',\n parentId: 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 path: task.folder.path,\n updatedAt: task.updatedAt,\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 // Create row with minimal required properties\n const row: TableRow = {\n id: folderId,\n entityType: 'folder',\n parentId: folder.parentId || undefined,\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 }\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":["useMemo","generateLoadingRows"],"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'\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 return {\n id: task.id,\n entityType: 'task',\n parentId: 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 path: task.folder.path,\n updatedAt: task.updatedAt,\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 // Create row with minimal required properties\n const row: TableRow = {\n id: folderId,\n entityType: 'folder',\n parentId: folder.parentId || undefined,\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 }\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":["useGetEntityTypeData","useMemo","generateLoadingRows"],"mappings":";;;;AAUA,MAAM,6BAA6B;AAmBnC,SAAwB,yBAAyB;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe,CAAC;AAAA,EAChB,gBAAgB;AAClB,GAAuB;AACrB,QAAM,oBAAoBA,qBAAAA,qBAAqB,EAAE,aAAa;AAGxD,QAAA,cAAcC,cAAQ,MAAM,KAAK,UAAU,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAGhE,QAAA,oBAAoBA,MAAAA,QAAQ,MAAM;AACtC,WAAO,IAAI;AAAA,MACT,OAAO,QAAQ,QAAQ,EACpB,OAAO,CAAC,CAAC,GAAG,UAAU,MAAM,UAAU,EACtC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE;AAAA,IACrB;AAAA,EAAA,GACC,CAAC,WAAW,CAAC;AAGhB,QAAM,EAAE,kBAAkB,oBAAoB,IAAIA,cAAQ,MAAM;AACxD,UAAA,oCAAoB,IAAoB;AACxC,UAAA,uCAAuB,IAAyB;AAG3C,eAAA,UAAU,WAAW,UAAU;AACpC,UAAA,EAAC,iCAAQ,IAAI;AAEjB,YAAM,WAAW,OAAO;AACxB,UAAI,UAAU;AACE,sBAAA,IAAI,OAAO,IAAI,QAAQ;AAEjC,YAAA,WAAW,iBAAiB,IAAI,QAAQ;AAC5C,YAAI,CAAC,UAAU;AACb,yCAAe,IAAY;AACV,2BAAA,IAAI,UAAU,QAAQ;AAAA,QAAA;AAEhC,iBAAA,IAAI,OAAO,EAAE;AAAA,MAAA;AAAA,IACxB;AAGF,WAAO,EAAE,kBAAkB,eAAe,qBAAqB,iBAAiB;AAAA,EAAA,GAC/E,CAAC,UAAU,CAAC;AAGT,QAAA,iBAAiBA,MAAAA,QAAQ,MAAM;AAC7B,UAAA,8BAAc,IAAY;AAGhC,UAAM,QAAkB,CAAC;AACd,eAAA,UAAU,WAAW,UAAU;AACpC,UAAA,EAAC,iCAAQ,IAAI;AAGb,UAAA,CAAC,OAAO,YAAY,CAAC,WAAW,IAAI,OAAO,QAAQ,GAAG;AAChD,gBAAA,IAAI,OAAO,EAAE;AACf,cAAA,KAAK,OAAO,EAAE;AAAA,MAAA;AAAA,IACtB;AAIK,WAAA,MAAM,SAAS,GAAG;AACjB,YAAA,WAAW,MAAM,MAAM;AACvB,YAAA,mBAAmB,kBAAkB,IAAI,QAAQ;AAEvD,UAAI,CAAC,iBAAkB;AAGjB,YAAA,cAAc,oBAAoB,IAAI,QAAQ;AACpD,UAAI,aAAa;AACf,mBAAW,WAAW,aAAa;AACjC,cAAI,CAAC,QAAQ,IAAI,OAAO,GAAG;AACzB,oBAAQ,IAAI,OAAO;AACnB,kBAAM,KAAK,OAAO;AAAA,UAAA;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAGK,WAAA;AAAA,EACN,GAAA,CAAC,YAAY,qBAAqB,iBAAiB,CAAC;AAGvD,SAAOA,cAAQ,MAAM;;AAEb,UAAA,gBAAgB,CAAC,MAAsB,aAAgC;AAC3E,YAAM,WAAW,kBAAkB,QAAQ,KAAK,QAAQ;AACjD,aAAA;AAAA,QACL,IAAI,KAAK;AAAA,QACT,YAAY;AAAA,QACZ,UAAU,YAAY,KAAK;AAAA,QAC3B,MAAM,KAAK,QAAQ;AAAA,QACnB,OAAO,KAAK,SAAS,KAAK,QAAQ;AAAA,QAClC,OAAM,qCAAU,SAAQ;AAAA,QACxB,QAAO,qCAAU,UAAS;AAAA,QAC1B,QAAQ,KAAK;AAAA,QACb,WAAW,KAAK;AAAA,QAChB,MAAM,KAAK;AAAA,QACX,KAAK;AAAA,QACL,SAAS,CAAC;AAAA,QACV,SAAS,KAAK,YAAY;AAAA,QAC1B,QAAQ,KAAK;AAAA,QACb,WAAW,KAAK;AAAA,QAChB,MAAM,KAAK,OAAO;AAAA,QAClB,WAAW,KAAK;AAAA,MAClB;AAAA,IACF;AAGA,QAAI,CAAC,eAAe;AAClB,YAAM,WAAuB,CAAC;AAGnB,iBAAA,QAAQ,SAAS,UAAU;AAChC,YAAA,CAAC,KAAK,GAAI;AACL,iBAAA,KAAK,cAAc,IAAI,CAAC;AAAA,MAAA;AAIxB,iBAAA,OAAO,QAAQ,IAAI;AAC5B,iBAAS,KAAK,GAAG;AAAA,MAAA;AAInB,UAAI,eAAe;AACX,cAAA,oBAAkB,0BAAS,UAAU,WAAnB,mBAA2B,UAA3B,mBAAmC,OAAnC,mBAAuC,WAAU,CAAC;AAC1E,cAAM,iBAAiB,OAAO,KAAK,eAAe,EAAE,IAAI,CAAC,SAAS;AAAA,UAChE,MAAM;AAAA,QAAA,EACN;AAEF,cAAM,QAAQ;AACC;AACP,gBAAA,kBAAkBC,aAAAA,oBAAoB,gBAAgB,OAAO;AAAA,YACjE,MAAM;AAAA,UAAA,CACP;AAEQ,mBAAA,KAAK,GAAG,eAAe;AAAA,QAAA;AAAA,MAClC;AAGK,aAAA;AAAA,IAAA;AAIH,UAAA,+BAAe,IAAsB;AAC3C,UAAM,WAAuB,CAAC;AAG9B,eAAW,YAAY,gBAAgB;AAC/B,YAAA,SAAS,WAAW,IAAI,QAAQ;AACtC,UAAI,CAAC,OAAQ;AAGb,YAAM,MAAgB;AAAA,QACpB,IAAI;AAAA,QACJ,YAAY;AAAA,QACZ,UAAU,OAAO,YAAY;AAAA,QAC7B,MAAM,OAAO,QAAQ;AAAA,QACrB,OAAO,OAAO,SAAS,OAAO,QAAQ;AAAA,QACtC,QAAM,uBAAkB,UAAU,OAAO,UAAU,MAA7C,mBAAgD,SAAQ;AAAA,QAC9D,OAAO;AAAA,QACP,KAAK;AAAA,QACL,SAAS,CAAC;AAAA,QACV,QAAQ,OAAO;AAAA,QACf,MAAM,OAAO,QAAQ,CAAC;AAAA,QACtB,SAAS,OAAO,cAAc;AAAA,QAC9B,WAAW,OAAO,aAAa,CAAC;AAAA,QAChC,MAAM,OAAO;AAAA,QACb,QAAQ,OAAO,UAAU,CAAC;AAAA,QAC1B,gBAAgB,OAAO,kBAAkB;AAAA,QACzC,WAAW,OAAO;AAAA,MACpB;AAES,eAAA,IAAI,UAAU,GAAG;AAGtB,UAAA,CAAC,OAAO,YAAY,CAAC,WAAW,IAAI,OAAO,QAAQ,GAAG;AACxD,iBAAS,KAAK,GAAG;AAAA,MAAA;AAIf,UAAA,kBAAkB,IAAI,QAAQ,GAAG;AAGnC,cAAM,gBAAgB,iBAAiB,IAAI,QAAQ,KAAK,CAAC;AACnD,cAAA,cAAc,cAAc,QAAQ,CAAC,WAAW,SAAS,IAAI,MAAM,KAAK,EAAE;AAEhF,YAAI,YAAY,UAAU,aAAa,QAAQ,GAAG;AAEhD,gBAAM,WAAW,IAAI,MAAgB,YAAY,MAAM;AAGvD,mBAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,qBAAS,CAAC,IAAI,cAAc,YAAY,CAAC,GAAG,QAAQ;AAAA,UAAA;AAIlD,cAAA,aAAa,QAAQ,GAAG;AACpB,kBAAA,oBAAkB,0BAAS,UAAU,WAAnB,mBAA2B,UAA3B,mBAAmC,OAAnC,mBAAuC,WAAU,CAAC;AAC1E,kBAAM,iBAAiB,OAAO,KAAK,eAAe,EAAE,IAAI,CAAC,SAAS;AAAA,cAChE,MAAM;AAAA,YAAA,EACN;AACI,kBAAA,QAAQ,aAAa,QAAQ;AACnC,gBAAI,QAAQ,GAAG;AACP,oBAAA,kBAAkBA,aAAAA,oBAAoB,gBAAgB,OAAO;AAAA,gBACjE,MAAM;AAAA,gBACN,UAAU;AAAA,cAAA,CACX;AAEQ,uBAAA,KAAK,GAAG,eAAe;AAAA,YAAA;AAAA,UAClC;AAGF,cAAI,UAAU;AAAA,QAAA;AAAA,MAChB;AAAA,IACF;AAIF,eAAW,YAAY,gBAAgB;AAC/B,YAAA,WAAW,iBAAiB,IAAI,QAAQ;AAC9C,UAAI,CAAC,YAAY,CAAC,kBAAkB,IAAI,QAAQ,EAAG;AAE7C,YAAA,WAAW,SAAS,IAAI,QAAQ;AAChC,YAAA,YAAY,SAAS,IAAI,QAAQ;AAEnC,UAAA,CAAC,YAAY,CAAC,UAAW;AAGnB,gBAAA,QAAQ,KAAK,QAAQ;AAAA,IAAA;AAItB,eAAA,OAAO,QAAQ,IAAI;AAC5B,eAAS,KAAK,GAAG;AAAA,IAAA;AAGZ,WAAA;AAAA,EAAA,GACN;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACH;;"}
@@ -1,6 +1,6 @@
1
1
  import { useMemo } from "react";
2
2
  import { generateLoadingRows } from "../utils/loadingUtils.es.js";
3
- import useGetEntityTypeData from "./useGetEntityTypeData.es.js";
3
+ import { useGetEntityTypeData } from "./useGetEntityTypeData.es.js";
4
4
  const TASKS_INFINITE_QUERY_COUNT = 100;
5
5
  function useBuildProjectDataTable({
6
6
  foldersMap,
@@ -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'\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 return {\n id: task.id,\n entityType: 'task',\n parentId: 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 path: task.folder.path,\n updatedAt: task.updatedAt,\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 // Create row with minimal required properties\n const row: TableRow = {\n id: folderId,\n entityType: 'folder',\n parentId: folder.parentId || undefined,\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 }\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":[],"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'\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 return {\n id: task.id,\n entityType: 'task',\n parentId: 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 path: task.folder.path,\n updatedAt: task.updatedAt,\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 // Create row with minimal required properties\n const row: TableRow = {\n id: folderId,\n entityType: 'folder',\n parentId: folder.parentId || undefined,\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 }\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":[],"mappings":"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"}
@@ -8,7 +8,7 @@ const SelectionCellsContext = require("../context/SelectionCellsContext.cjs.js")
8
8
  const ProjectTableContext = require("../context/ProjectTableContext.cjs.js");
9
9
  const CellEditingContext = require("../context/CellEditingContext.cjs.js");
10
10
  const useBuildGroupByTableData = require("./useBuildGroupByTableData.cjs.js");
11
- const useCellContextMenu = ({ attribs, onOpenNew }) => {
11
+ const useCellContextMenu = ({ attribs, headerLabels = [], onOpenNew }) => {
12
12
  const {
13
13
  projectName,
14
14
  showHierarchy,
@@ -16,13 +16,14 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
16
16
  toggleExpandAll,
17
17
  toggleExpands,
18
18
  expanded,
19
- contextMenuItems = []
19
+ contextMenuItems = [],
20
+ powerpack
20
21
  } = ProjectTableContext.useProjectTableContext();
21
22
  const { copyToClipboard, exportCSV, pasteFromClipboard } = ClipboardContext.useClipboard();
22
23
  const { selectedCells, clearSelection, selectCell, focusCell } = SelectionCellsContext.useSelectionCellsContext();
23
24
  const { inheritFromParent, history } = CellEditingContext.useCellEditing();
24
25
  const deleteEntities = useDeleteEntities({});
25
- const [cellContextMenuShow] = useCreateContextMenu.useCreateContextMenu();
26
+ const [cellContextMenuShow] = useCreateContextMenu.useCreateContextMenu([], powerpack);
26
27
  const getEntitiesToInherit = (selected) => {
27
28
  return selected.reduce((acc, cellId) => {
28
29
  var _a;
@@ -30,19 +31,20 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
30
31
  if (!rowId || !colId || !colId.startsWith("attrib_")) return acc;
31
32
  const entity = getEntityById(rowId);
32
33
  if (!entity) return acc;
34
+ const entityId = entity.entityId || entity.id;
33
35
  const attribName = colId.replace("attrib_", "");
34
36
  const attribModel = attribs.find((attrib) => attrib.name === attribName);
35
37
  const isInheritable = attribModel == null ? void 0 : attribModel.data.inherit;
36
38
  if (((_a = entity.ownAttrib) == null ? void 0 : _a.includes(attribName)) && isInheritable) {
37
- const existingIndex = acc.findIndex((item) => item.entityId === rowId);
39
+ const existingIndex = acc.findIndex((item) => item.entityId === entityId);
38
40
  if (existingIndex >= 0) {
39
41
  if (!acc[existingIndex].attribs.includes(attribName)) {
40
42
  acc[existingIndex].attribs.push(attribName);
41
43
  }
42
44
  } else {
43
45
  acc.push({
44
- rowId,
45
- entityId: rowId,
46
+ rowId: entityId,
47
+ entityId,
46
48
  entityType: "folderId" in entity ? "task" : "folder",
47
49
  attribs: [attribName],
48
50
  ownAttrib: entity.ownAttrib || [],
@@ -127,7 +129,7 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
127
129
  label: "Delete",
128
130
  icon: "delete",
129
131
  danger: true,
130
- command: () => deleteEntities(meta.selectedCells),
132
+ command: () => deleteEntities(meta.selectedRows),
131
133
  hidden: cell.columnId !== "name" || cell.isGroup
132
134
  });
133
135
  const inheritItem = (e, cell, selected, meta) => {
@@ -184,13 +186,18 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
184
186
  if (!rowId || !colId) return void 0;
185
187
  const cellEntityData = getEntityById(rowId);
186
188
  const attribField = attribs.find((attrib) => attrib.name === (colId == null ? void 0 : colId.replace("attrib_", "")));
189
+ const column = headerLabels.find((header) => header.id === colId);
187
190
  return {
188
191
  cellId,
189
192
  columnId: colId,
190
- entityId: (cellEntityData == null ? void 0 : cellEntityData.entityId) || rowId,
193
+ entityId: (cellEntityData == null ? void 0 : cellEntityData.entityId) || (cellEntityData == null ? void 0 : cellEntityData.id) || rowId,
191
194
  entityType: cellEntityData == null ? void 0 : cellEntityData.entityType,
192
195
  attribField,
193
- isGroup: rowId.startsWith(useBuildGroupByTableData.GROUP_BY_ID)
196
+ isGroup: rowId.startsWith(useBuildGroupByTableData.GROUP_BY_ID),
197
+ column: {
198
+ id: colId,
199
+ label: (column == null ? void 0 : column.label) || ""
200
+ }
194
201
  };
195
202
  };
196
203
  const handleTableBodyContextMenu = (e) => {
@@ -207,6 +214,12 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
207
214
  selectCell(cellId, false, false);
208
215
  focusCell(cellId);
209
216
  }
217
+ const selectedRealCells = currentSelectedCells.filter(
218
+ (id) => {
219
+ var _a2;
220
+ return ((_a2 = cellUtils.parseCellId(id)) == null ? void 0 : _a2.colId) !== SelectionCellsContext.ROW_SELECTION_COLUMN_ID;
221
+ }
222
+ );
210
223
  const selectedCellsData = currentSelectedCells.flatMap((cellId2) => getCellData(cellId2) || []);
211
224
  const selectedCellRows = [];
212
225
  const selectedCellColumns = [];
@@ -227,8 +240,8 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
227
240
  cellData,
228
241
  selectedCellsData,
229
242
  {
230
- selectedCells: currentSelectedCells,
231
- // all selected cells
243
+ selectedCells: selectedRealCells,
244
+ // selected cells without row selection
232
245
  selectedRows: selectedCellRows,
233
246
  selectedColumns: selectedCellColumns,
234
247
  selectedFullRows: selectedCellFullRows,
@@ -244,8 +257,8 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
244
257
  cellData,
245
258
  selectedCellsData,
246
259
  {
247
- selectedCells: currentSelectedCells,
248
- // all selected cells
260
+ selectedCells: selectedRealCells,
261
+ // selected cells without row selection
249
262
  selectedRows: selectedCellRows,
250
263
  selectedColumns: selectedCellColumns,
251
264
  selectedFullRows: selectedCellFullRows,
@@ -1 +1 @@
1
- {"version":3,"file":"useCellContextMenu.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useCellContextMenu.ts"],"sourcesContent":["import { ContextMenuItemType, useCreateContextMenu } from '../../ContextMenu/useCreateContextMenu'\nimport useDeleteEntities from './useDeleteEntities'\nimport { getPlatformShortcutKey, KeyMode } from '../../../util/platform'\nimport { getCellId, parseCellId } from '../utils/cellUtils'\nimport { useClipboard } from '../context/ClipboardContext'\nimport { ROW_SELECTION_COLUMN_ID, useSelectionCellsContext } from '../context/SelectionCellsContext'\nimport { useProjectTableContext } from '../context/ProjectTableContext'\nimport { useCellEditing } from '../context/CellEditingContext'\nimport { InheritFromParentEntity } from './useUpdateTableData'\nimport { ProjectTableAttribute } from '../types'\nimport { UseHistoryReturn } from './useHistory'\nimport { GROUP_BY_ID } from './useBuildGroupByTableData'\n\ntype ContextEvent = React.MouseEvent<HTMLTableSectionElement, MouseEvent>\n\nexport type TableCellContextData = {\n entityId: string\n cellId: string\n columnId: string\n entityType: 'folder' | 'task' | 'product' | 'version' | undefined\n attribField: ProjectTableAttribute | undefined\n isGroup: boolean // if the cell is a group header\n}\ntype DefaultMenuItem =\n | 'copy-paste'\n | 'show-details'\n | 'expand-collapse'\n | 'inherit'\n | 'delete'\n | 'export'\n | 'create-folder'\n | 'create-task'\nexport type ContextMenuItemConstructor = (\n e: ContextEvent,\n cell: TableCellContextData,\n selectedCells: TableCellContextData[],\n meta: {\n selectedCells: string[]\n selectedRows: string[]\n selectedColumns: string[]\n selectedFullRows: string[] // if the full row is selected\n selectedGroups: string[] // groups if any\n },\n context: {\n history: UseHistoryReturn\n },\n) => ContextMenuItemType | ContextMenuItemType[] | undefined\nexport type ContextMenuItemConstructors = (DefaultMenuItem | ContextMenuItemConstructor)[]\n\ntype CellContextMenuProps = {\n attribs: ProjectTableAttribute[]\n onOpenNew?: (type: 'folder' | 'task') => void\n}\n\nconst useCellContextMenu = ({ attribs, onOpenNew }: CellContextMenuProps) => {\n // context hooks\n const {\n projectName,\n showHierarchy,\n getEntityById,\n toggleExpandAll,\n toggleExpands,\n expanded,\n contextMenuItems = [],\n } = useProjectTableContext()\n const { copyToClipboard, exportCSV, pasteFromClipboard } = useClipboard()\n const { selectedCells, clearSelection, selectCell, focusCell } = useSelectionCellsContext()\n const { inheritFromParent, history } = useCellEditing()\n\n // update entity context\n\n // data mutations\n const deleteEntities = useDeleteEntities({})\n\n const [cellContextMenuShow] = useCreateContextMenu()\n\n // Helper function to identify attributes that can be inherited\n const getEntitiesToInherit = (selected: string[]): InheritFromParentEntity[] => {\n return selected.reduce((acc, cellId) => {\n const { rowId, colId } = parseCellId(cellId) || {}\n if (!rowId || !colId || !colId.startsWith('attrib_')) return acc\n\n const entity = getEntityById(rowId)\n if (!entity) return acc\n\n const attribName = colId.replace('attrib_', '')\n // get attrib model\n const attribModel = attribs.find((attrib) => attrib.name === attribName)\n // is the attrib inheritable?\n const isInheritable = attribModel?.data.inherit\n\n // Check if this attribute is owned by the entity (not inherited)\n if (entity.ownAttrib?.includes(attribName) && isInheritable) {\n // Find existing entry or create new one\n const existingIndex = acc.findIndex((item) => item.entityId === rowId)\n\n if (existingIndex >= 0) {\n // Add to existing entity's attribs if not already there\n if (!acc[existingIndex].attribs.includes(attribName)) {\n acc[existingIndex].attribs.push(attribName)\n }\n } else {\n // Create new entity entry\n acc.push({\n rowId: rowId,\n entityId: rowId,\n entityType: 'folderId' in entity ? 'task' : 'folder',\n attribs: [attribName],\n ownAttrib: entity.ownAttrib || [],\n // @ts-ignore\n folderId: entity.parentId ?? entity.folderId,\n })\n }\n }\n\n return acc\n }, [] as InheritFromParentEntity[])\n }\n\n const copyAndPasteItems: ContextMenuItemConstructor = (e, cell, selected, meta) => {\n return [\n {\n label: 'Copy',\n icon: 'content_copy',\n shortcut: getPlatformShortcutKey('c', [KeyMode.Ctrl]),\n command: () => copyToClipboard(meta.selectedCells),\n hidden: cell.isGroup,\n },\n {\n label: `Copy row${meta.selectedFullRows.length > 1 ? 's' : ''}`,\n icon: 'content_copy',\n command: () => copyToClipboard(meta.selectedFullRows, true),\n hidden:\n cell.columnId !== 'name' ||\n !meta.selectedFullRows.some(\n (cellId) => parseCellId(cellId)?.rowId === parseCellId(cell.cellId)?.rowId,\n ),\n },\n {\n label: 'Paste',\n icon: 'content_paste',\n shortcut: getPlatformShortcutKey('v', [KeyMode.Ctrl]),\n command: () => pasteFromClipboard(meta.selectedCells),\n hidden: cell.columnId === 'name' || cell.isGroup,\n disabled: cell.attribField?.readOnly,\n },\n ]\n }\n\n const showDetailsItem: ContextMenuItemConstructor = (e, cell, selected, meta) => ({\n label: 'Show details',\n icon: 'dock_to_left',\n shortcut: 'Double click',\n command: () => {\n const rowSelectionCellId = getCellId(cell.entityId, ROW_SELECTION_COLUMN_ID)\n // select the row to open the details\n selectCell(rowSelectionCellId, false, false)\n },\n hidden: cell.columnId !== 'name' || meta.selectedRows.length > 1 || cell.isGroup,\n })\n\n const expandCollapseChildrenItems: ContextMenuItemConstructor = (e, cell, selected, meta) => [\n {\n label: 'Expand children',\n icon: 'expand_all',\n shortcut: 'Alt + click',\n command: () => toggleExpandAll(meta.selectedRows, true),\n hidden: cell.columnId !== 'name' || cell.entityType !== 'folder',\n },\n {\n label: 'Collapse children',\n icon: 'collapse_all',\n shortcut: 'Alt + click',\n command: () => toggleExpandAll(meta.selectedRows, false),\n hidden: cell.columnId !== 'name' || cell.entityType !== 'folder',\n },\n {\n label: 'Expand',\n icon: 'expand_all',\n command: () => toggleExpands(meta.selectedRows, true),\n hidden:\n cell.columnId !== 'name' ||\n !cell.isGroup ||\n expanded[cell.entityId as keyof typeof expanded],\n },\n {\n label: 'Collapse',\n icon: 'collapse_all',\n command: () => toggleExpands(meta.selectedRows, false),\n hidden:\n cell.columnId !== 'name' ||\n !cell.isGroup ||\n !expanded[cell.entityId as keyof typeof expanded],\n },\n ]\n\n const deleteItem: ContextMenuItemConstructor = (e, cell, selected, meta) => ({\n label: 'Delete',\n icon: 'delete',\n danger: true,\n command: () => deleteEntities(meta.selectedCells),\n hidden: cell.columnId !== 'name' || cell.isGroup,\n })\n\n const inheritItem: ContextMenuItemConstructor = (e, cell, selected, meta) => {\n const entitiesToInherit = getEntitiesToInherit(meta.selectedCells)\n const canInheritFromParent =\n entitiesToInherit.length > 0 &&\n showHierarchy &&\n !(meta.selectedRows.length > 1 && meta.selectedColumns.length > 1)\n\n return {\n label: 'Inherit from parent',\n icon: 'disabled_by_default',\n command: () => inheritFromParent(entitiesToInherit),\n hidden: !canInheritFromParent,\n }\n }\n\n const exportItem: ContextMenuItemConstructor = (e, cell) => ({\n label: 'Export selection',\n icon: 'download',\n command: () => exportCSV(Array.from(selectedCells), projectName),\n hidden: cell.isGroup,\n })\n\n const createFolderItems: ContextMenuItemConstructor = (e, cell) => [\n {\n label: 'Create folder',\n icon: 'create_new_folder',\n command: () => onOpenNew?.('folder'),\n hidden: cell.columnId !== 'name' || !showHierarchy || !onOpenNew,\n },\n {\n label: 'Create root folder',\n icon: 'create_new_folder',\n command: () => {\n clearSelection()\n onOpenNew?.('folder')\n },\n hidden: cell.columnId !== 'name' || !showHierarchy || !onOpenNew,\n },\n ]\n\n const createTaskItem: ContextMenuItemConstructor = (e, cell) => ({\n label: 'Create task',\n icon: 'add_task',\n command: () => onOpenNew?.('task'),\n hidden: cell.columnId !== 'name' || !showHierarchy || !onOpenNew,\n })\n\n const builtInMenuItems: Record<DefaultMenuItem, ContextMenuItemConstructor> = {\n ['copy-paste']: copyAndPasteItems,\n ['show-details']: showDetailsItem,\n ['expand-collapse']: expandCollapseChildrenItems,\n ['delete']: deleteItem,\n ['inherit']: inheritItem,\n ['export']: exportItem,\n ['create-folder']: createFolderItems,\n ['create-task']: createTaskItem,\n }\n\n const getCellData = (cellId: string): TableCellContextData | undefined => {\n const { rowId, colId } = parseCellId(cellId) || {}\n if (!rowId || !colId) return undefined\n const cellEntityData = getEntityById(rowId)\n const attribField = attribs.find((attrib) => attrib.name === colId?.replace('attrib_', ''))\n return {\n cellId: cellId,\n columnId: colId,\n entityId: cellEntityData?.entityId || rowId,\n entityType: cellEntityData?.entityType,\n attribField: attribField,\n isGroup: rowId.startsWith(GROUP_BY_ID),\n }\n }\n\n const handleTableBodyContextMenu = (e: ContextEvent) => {\n const target = e.target as HTMLElement\n const tdEl = target.closest('td')\n // get id of first child of td\n const cellId = tdEl?.firstElementChild?.id\n\n if (!cellId) return\n\n const cellData = getCellData(cellId)\n\n if (!cellData) return\n\n let currentSelectedCells = Array.from(selectedCells)\n // if selecting a cell outside of the current selection\n if (!currentSelectedCells.includes(cellId) || !currentSelectedCells.length) {\n currentSelectedCells = [cellId]\n // update selection\n selectCell(cellId, false, false)\n focusCell(cellId)\n }\n\n const selectedCellsData = currentSelectedCells.flatMap((cellId) => getCellData(cellId) || [])\n const selectedCellRows: string[] = []\n const selectedCellColumns: string[] = []\n const selectedCellFullRows: string[] = []\n const selectedCellsGroups: string[] = [] // find cells that are group headers\n for (const { entityId, columnId } of selectedCellsData) {\n if (entityId && !selectedCellRows.includes(entityId)) selectedCellRows.push(entityId)\n if (columnId && !selectedCellColumns.includes(columnId)) selectedCellColumns.push(columnId)\n if (columnId === ROW_SELECTION_COLUMN_ID && !selectedCellFullRows.includes(entityId))\n selectedCellFullRows.push(entityId)\n if (entityId.startsWith(GROUP_BY_ID)) selectedCellsGroups.push(entityId)\n }\n\n const constructedMenuItems = contextMenuItems.flatMap((constructor) =>\n typeof constructor === 'function'\n ? constructor(\n e,\n cellData,\n selectedCellsData,\n {\n selectedCells: currentSelectedCells, // all selected cells\n selectedRows: selectedCellRows,\n selectedColumns: selectedCellColumns,\n selectedFullRows: selectedCellFullRows,\n selectedGroups: selectedCellsGroups, // groups if any\n },\n {\n history,\n },\n )\n : builtInMenuItems[constructor]?.(\n e,\n cellData,\n selectedCellsData,\n {\n selectedCells: currentSelectedCells, // all selected cells\n selectedRows: selectedCellRows,\n selectedColumns: selectedCellColumns,\n selectedFullRows: selectedCellFullRows,\n selectedGroups: selectedCellsGroups, // groups if any\n },\n { history },\n ),\n )\n\n cellContextMenuShow(e, constructedMenuItems)\n }\n\n return { handleTableBodyContextMenu }\n}\n\nexport default useCellContextMenu\n"],"names":["useProjectTableContext","useClipboard","useSelectionCellsContext","useCellEditing","useCreateContextMenu","parseCellId","getPlatformShortcutKey","KeyMode","getCellId","ROW_SELECTION_COLUMN_ID","GROUP_BY_ID","cellId","_a"],"mappings":"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"}
1
+ {"version":3,"file":"useCellContextMenu.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useCellContextMenu.ts"],"sourcesContent":["import { ContextMenuItemType, useCreateContextMenu } from '../../ContextMenu/useCreateContextMenu'\nimport useDeleteEntities from './useDeleteEntities'\nimport { getPlatformShortcutKey, KeyMode } from '../../../util/platform'\nimport { getCellId, parseCellId } from '../utils/cellUtils'\nimport { useClipboard } from '../context/ClipboardContext'\nimport { ROW_SELECTION_COLUMN_ID, useSelectionCellsContext } from '../context/SelectionCellsContext'\nimport { useProjectTableContext } from '../context/ProjectTableContext'\nimport { useCellEditing } from '../context/CellEditingContext'\nimport { InheritFromParentEntity } from './useUpdateTableData'\nimport { ProjectTableAttribute, TableRow } from '../types'\nimport { UseHistoryReturn } from './useHistory'\nimport { GROUP_BY_ID } from './useBuildGroupByTableData'\nimport { ColumnDef } from '@tanstack/react-table'\nimport { usePowerpack } from '@shared/context'\n\ntype ContextEvent = React.MouseEvent<HTMLTableSectionElement, MouseEvent>\n\nexport type HeaderLabel = { id: string; label: string }\n\nexport type TableCellContextData = {\n entityId: string\n cellId: string\n columnId: string\n entityType: 'folder' | 'task' | 'product' | 'version' | undefined\n attribField: ProjectTableAttribute | undefined // the attribute field if any (fps, custom attribs, etc.)\n column: {\n id: string\n label: string\n }\n isGroup: boolean // if the cell is a group header\n}\ntype DefaultMenuItem =\n | 'copy-paste'\n | 'show-details'\n | 'expand-collapse'\n | 'inherit'\n | 'delete'\n | 'export'\n | 'create-folder'\n | 'create-task'\nexport type ContextMenuItemConstructor = (\n e: ContextEvent,\n cell: TableCellContextData,\n selectedCells: TableCellContextData[],\n meta: {\n selectedCells: string[] // minus row selection cells\n selectedRows: string[]\n selectedColumns: string[]\n selectedFullRows: string[] // if the full row is selected\n selectedGroups: string[] // groups if any\n },\n context: {\n history: UseHistoryReturn\n },\n) => ContextMenuItemType | ContextMenuItemType[] | undefined\nexport type ContextMenuItemConstructors = (DefaultMenuItem | ContextMenuItemConstructor)[]\n\ntype CellContextMenuProps = {\n attribs: ProjectTableAttribute[]\n columns?: ColumnDef<TableRow>[]\n headerLabels: HeaderLabel[]\n onOpenNew?: (type: 'folder' | 'task') => void\n}\n\nconst useCellContextMenu = ({ attribs, headerLabels = [], onOpenNew }: CellContextMenuProps) => {\n // context hooks\n const {\n projectName,\n showHierarchy,\n getEntityById,\n toggleExpandAll,\n toggleExpands,\n expanded,\n contextMenuItems = [],\n powerpack,\n } = useProjectTableContext()\n const { copyToClipboard, exportCSV, pasteFromClipboard } = useClipboard()\n const { selectedCells, clearSelection, selectCell, focusCell } = useSelectionCellsContext()\n const { inheritFromParent, history } = useCellEditing()\n\n // update entity context\n\n // data mutations\n const deleteEntities = useDeleteEntities({})\n\n const [cellContextMenuShow] = useCreateContextMenu([], powerpack)\n\n // Helper function to identify attributes that can be inherited\n const getEntitiesToInherit = (selected: string[]): InheritFromParentEntity[] => {\n return selected.reduce((acc, cellId) => {\n const { rowId, colId } = parseCellId(cellId) || {}\n if (!rowId || !colId || !colId.startsWith('attrib_')) return acc\n\n const entity = getEntityById(rowId)\n if (!entity) return acc\n const entityId = entity.entityId || entity.id\n\n const attribName = colId.replace('attrib_', '')\n // get attrib model\n const attribModel = attribs.find((attrib) => attrib.name === attribName)\n // is the attrib inheritable?\n const isInheritable = attribModel?.data.inherit\n\n // Check if this attribute is owned by the entity (not inherited)\n if (entity.ownAttrib?.includes(attribName) && isInheritable) {\n // Find existing entry or create new one\n const existingIndex = acc.findIndex((item) => item.entityId === entityId)\n\n if (existingIndex >= 0) {\n // Add to existing entity's attribs if not already there\n if (!acc[existingIndex].attribs.includes(attribName)) {\n acc[existingIndex].attribs.push(attribName)\n }\n } else {\n // Create new entity entry\n acc.push({\n rowId: entityId,\n entityId: entityId,\n entityType: 'folderId' in entity ? 'task' : 'folder',\n attribs: [attribName],\n ownAttrib: entity.ownAttrib || [],\n // @ts-ignore\n folderId: entity.parentId ?? entity.folderId,\n })\n }\n }\n\n return acc\n }, [] as InheritFromParentEntity[])\n }\n\n const copyAndPasteItems: ContextMenuItemConstructor = (e, cell, selected, meta) => {\n return [\n {\n label: 'Copy',\n icon: 'content_copy',\n shortcut: getPlatformShortcutKey('c', [KeyMode.Ctrl]),\n command: () => copyToClipboard(meta.selectedCells),\n hidden: cell.isGroup,\n },\n {\n label: `Copy row${meta.selectedFullRows.length > 1 ? 's' : ''}`,\n icon: 'content_copy',\n command: () => copyToClipboard(meta.selectedFullRows, true),\n hidden:\n cell.columnId !== 'name' ||\n !meta.selectedFullRows.some(\n (cellId) => parseCellId(cellId)?.rowId === parseCellId(cell.cellId)?.rowId,\n ),\n },\n {\n label: 'Paste',\n icon: 'content_paste',\n shortcut: getPlatformShortcutKey('v', [KeyMode.Ctrl]),\n command: () => pasteFromClipboard(meta.selectedCells),\n hidden: cell.columnId === 'name' || cell.isGroup,\n disabled: cell.attribField?.readOnly,\n },\n ]\n }\n\n const showDetailsItem: ContextMenuItemConstructor = (e, cell, selected, meta) => ({\n label: 'Show details',\n icon: 'dock_to_left',\n shortcut: 'Double click',\n command: () => {\n const rowSelectionCellId = getCellId(cell.entityId, ROW_SELECTION_COLUMN_ID)\n // select the row to open the details\n selectCell(rowSelectionCellId, false, false)\n },\n hidden: cell.columnId !== 'name' || meta.selectedRows.length > 1 || cell.isGroup,\n })\n\n const expandCollapseChildrenItems: ContextMenuItemConstructor = (e, cell, selected, meta) => [\n {\n label: 'Expand children',\n icon: 'expand_all',\n shortcut: 'Alt + click',\n command: () => toggleExpandAll(meta.selectedRows, true),\n hidden: cell.columnId !== 'name' || cell.entityType !== 'folder',\n },\n {\n label: 'Collapse children',\n icon: 'collapse_all',\n shortcut: 'Alt + click',\n command: () => toggleExpandAll(meta.selectedRows, false),\n hidden: cell.columnId !== 'name' || cell.entityType !== 'folder',\n },\n {\n label: 'Expand',\n icon: 'expand_all',\n command: () => toggleExpands(meta.selectedRows, true),\n hidden:\n cell.columnId !== 'name' ||\n !cell.isGroup ||\n expanded[cell.entityId as keyof typeof expanded],\n },\n {\n label: 'Collapse',\n icon: 'collapse_all',\n command: () => toggleExpands(meta.selectedRows, false),\n hidden:\n cell.columnId !== 'name' ||\n !cell.isGroup ||\n !expanded[cell.entityId as keyof typeof expanded],\n },\n ]\n\n const deleteItem: ContextMenuItemConstructor = (e, cell, selected, meta) => ({\n label: 'Delete',\n icon: 'delete',\n danger: true,\n command: () => deleteEntities(meta.selectedRows),\n hidden: cell.columnId !== 'name' || cell.isGroup,\n })\n\n const inheritItem: ContextMenuItemConstructor = (e, cell, selected, meta) => {\n const entitiesToInherit = getEntitiesToInherit(meta.selectedCells)\n const canInheritFromParent =\n entitiesToInherit.length > 0 &&\n showHierarchy &&\n !(meta.selectedRows.length > 1 && meta.selectedColumns.length > 1)\n\n return {\n label: 'Inherit from parent',\n icon: 'disabled_by_default',\n command: () => inheritFromParent(entitiesToInherit),\n hidden: !canInheritFromParent,\n }\n }\n\n const exportItem: ContextMenuItemConstructor = (e, cell) => ({\n label: 'Export selection',\n icon: 'download',\n command: () => exportCSV(Array.from(selectedCells), projectName),\n hidden: cell.isGroup,\n })\n\n const createFolderItems: ContextMenuItemConstructor = (e, cell) => [\n {\n label: 'Create folder',\n icon: 'create_new_folder',\n command: () => onOpenNew?.('folder'),\n hidden: cell.columnId !== 'name' || !showHierarchy || !onOpenNew,\n },\n {\n label: 'Create root folder',\n icon: 'create_new_folder',\n command: () => {\n clearSelection()\n onOpenNew?.('folder')\n },\n hidden: cell.columnId !== 'name' || !showHierarchy || !onOpenNew,\n },\n ]\n\n const createTaskItem: ContextMenuItemConstructor = (e, cell) => ({\n label: 'Create task',\n icon: 'add_task',\n command: () => onOpenNew?.('task'),\n hidden: cell.columnId !== 'name' || !showHierarchy || !onOpenNew,\n })\n\n const builtInMenuItems: Record<DefaultMenuItem, ContextMenuItemConstructor> = {\n ['copy-paste']: copyAndPasteItems,\n ['show-details']: showDetailsItem,\n ['expand-collapse']: expandCollapseChildrenItems,\n ['delete']: deleteItem,\n ['inherit']: inheritItem,\n ['export']: exportItem,\n ['create-folder']: createFolderItems,\n ['create-task']: createTaskItem,\n }\n\n const getCellData = (cellId: string): TableCellContextData | undefined => {\n const { rowId, colId } = parseCellId(cellId) || {}\n if (!rowId || !colId) return undefined\n const cellEntityData = getEntityById(rowId)\n const attribField = attribs.find((attrib) => attrib.name === colId?.replace('attrib_', ''))\n const column = headerLabels.find((header) => header.id === colId)\n return {\n cellId: cellId,\n columnId: colId,\n entityId: cellEntityData?.entityId || cellEntityData?.id || rowId,\n entityType: cellEntityData?.entityType,\n attribField: attribField,\n isGroup: rowId.startsWith(GROUP_BY_ID),\n column: {\n id: colId,\n label: column?.label || '',\n },\n }\n }\n\n const handleTableBodyContextMenu = (e: ContextEvent) => {\n const target = e.target as HTMLElement\n const tdEl = target.closest('td')\n // get id of first child of td\n const cellId = tdEl?.firstElementChild?.id\n\n if (!cellId) return\n\n const cellData = getCellData(cellId)\n\n if (!cellData) return\n\n let currentSelectedCells = Array.from(selectedCells)\n // if selecting a cell outside of the current selection\n if (!currentSelectedCells.includes(cellId) || !currentSelectedCells.length) {\n currentSelectedCells = [cellId]\n // update selection\n selectCell(cellId, false, false)\n focusCell(cellId)\n }\n // selected cells without row selection cells\n const selectedRealCells = currentSelectedCells.filter(\n (id) => parseCellId(id)?.colId !== ROW_SELECTION_COLUMN_ID,\n )\n\n const selectedCellsData = currentSelectedCells.flatMap((cellId) => getCellData(cellId) || [])\n const selectedCellRows: string[] = []\n const selectedCellColumns: string[] = []\n const selectedCellFullRows: string[] = []\n const selectedCellsGroups: string[] = [] // find cells that are group headers\n for (const { entityId, columnId } of selectedCellsData) {\n if (entityId && !selectedCellRows.includes(entityId)) selectedCellRows.push(entityId)\n if (columnId && !selectedCellColumns.includes(columnId)) selectedCellColumns.push(columnId)\n if (columnId === ROW_SELECTION_COLUMN_ID && !selectedCellFullRows.includes(entityId))\n selectedCellFullRows.push(entityId)\n if (entityId.startsWith(GROUP_BY_ID)) selectedCellsGroups.push(entityId)\n }\n\n const constructedMenuItems = contextMenuItems.flatMap((constructor) =>\n typeof constructor === 'function'\n ? constructor(\n e,\n cellData,\n selectedCellsData,\n {\n selectedCells: selectedRealCells, // selected cells without row selection\n selectedRows: selectedCellRows,\n selectedColumns: selectedCellColumns,\n selectedFullRows: selectedCellFullRows,\n selectedGroups: selectedCellsGroups, // groups if any\n },\n {\n history,\n },\n )\n : builtInMenuItems[constructor]?.(\n e,\n cellData,\n selectedCellsData,\n {\n selectedCells: selectedRealCells, // selected cells without row selection\n selectedRows: selectedCellRows,\n selectedColumns: selectedCellColumns,\n selectedFullRows: selectedCellFullRows,\n selectedGroups: selectedCellsGroups, // groups if any\n },\n { history },\n ),\n )\n\n cellContextMenuShow(e, constructedMenuItems)\n }\n\n return { handleTableBodyContextMenu }\n}\n\nexport default useCellContextMenu\n"],"names":["useProjectTableContext","useClipboard","useSelectionCellsContext","useCellEditing","useCreateContextMenu","parseCellId","getPlatformShortcutKey","KeyMode","getCellId","ROW_SELECTION_COLUMN_ID","GROUP_BY_ID","cellId","_a"],"mappings":";;;;;;;;;;AAgEM,MAAA,qBAAqB,CAAC,EAAE,SAAS,eAAe,CAAC,GAAG,gBAAsC;AAExF,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,mBAAmB,CAAC;AAAA,IACpB;AAAA,MACEA,2CAAuB;AAC3B,QAAM,EAAE,iBAAiB,WAAW,mBAAA,IAAuBC,iBAAAA,aAAa;AACxE,QAAM,EAAE,eAAe,gBAAgB,YAAY,UAAA,IAAcC,sBAAAA,yBAAyB;AAC1F,QAAM,EAAE,mBAAmB,QAAQ,IAAIC,kCAAe;AAKhD,QAAA,iBAAiB,kBAAkB,EAAE;AAE3C,QAAM,CAAC,mBAAmB,IAAIC,0CAAqB,CAAA,GAAI,SAAS;AAG1D,QAAA,uBAAuB,CAAC,aAAkD;AAC9E,WAAO,SAAS,OAAO,CAAC,KAAK,WAAW;;AACtC,YAAM,EAAE,OAAO,MAAA,IAAUC,UAAAA,YAAY,MAAM,KAAK,CAAC;AAC7C,UAAA,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,WAAW,SAAS,EAAU,QAAA;AAEvD,YAAA,SAAS,cAAc,KAAK;AAC9B,UAAA,CAAC,OAAe,QAAA;AACd,YAAA,WAAW,OAAO,YAAY,OAAO;AAE3C,YAAM,aAAa,MAAM,QAAQ,WAAW,EAAE;AAE9C,YAAM,cAAc,QAAQ,KAAK,CAAC,WAAW,OAAO,SAAS,UAAU;AAEjE,YAAA,gBAAgB,2CAAa,KAAK;AAGxC,YAAI,YAAO,cAAP,mBAAkB,SAAS,gBAAe,eAAe;AAE3D,cAAM,gBAAgB,IAAI,UAAU,CAAC,SAAS,KAAK,aAAa,QAAQ;AAExE,YAAI,iBAAiB,GAAG;AAEtB,cAAI,CAAC,IAAI,aAAa,EAAE,QAAQ,SAAS,UAAU,GAAG;AACpD,gBAAI,aAAa,EAAE,QAAQ,KAAK,UAAU;AAAA,UAAA;AAAA,QAC5C,OACK;AAEL,cAAI,KAAK;AAAA,YACP,OAAO;AAAA,YACP;AAAA,YACA,YAAY,cAAc,SAAS,SAAS;AAAA,YAC5C,SAAS,CAAC,UAAU;AAAA,YACpB,WAAW,OAAO,aAAa,CAAC;AAAA;AAAA,YAEhC,UAAU,OAAO,YAAY,OAAO;AAAA,UAAA,CACrC;AAAA,QAAA;AAAA,MACH;AAGK,aAAA;AAAA,IACT,GAAG,EAA+B;AAAA,EACpC;AAEA,QAAM,oBAAgD,CAAC,GAAG,MAAM,UAAU,SAAS;;AAC1E,WAAA;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAUC,SAAAA,uBAAuB,KAAK,CAACC,SAAA,QAAQ,IAAI,CAAC;AAAA,QACpD,SAAS,MAAM,gBAAgB,KAAK,aAAa;AAAA,QACjD,QAAQ,KAAK;AAAA,MACf;AAAA,MACA;AAAA,QACE,OAAO,WAAW,KAAK,iBAAiB,SAAS,IAAI,MAAM,EAAE;AAAA,QAC7D,MAAM;AAAA,QACN,SAAS,MAAM,gBAAgB,KAAK,kBAAkB,IAAI;AAAA,QAC1D,QACE,KAAK,aAAa,UAClB,CAAC,KAAK,iBAAiB;AAAA,UACrB,CAAC;;AAAWF,qBAAAA,MAAAA,UAAY,YAAA,MAAM,MAAlBA,gBAAAA,IAAqB,aAAUA,2BAAY,KAAK,MAAM,MAAvBA,mBAA0B;AAAA;AAAA,QAAA;AAAA,MAE3E;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAUC,SAAAA,uBAAuB,KAAK,CAACC,SAAA,QAAQ,IAAI,CAAC;AAAA,QACpD,SAAS,MAAM,mBAAmB,KAAK,aAAa;AAAA,QACpD,QAAQ,KAAK,aAAa,UAAU,KAAK;AAAA,QACzC,WAAU,UAAK,gBAAL,mBAAkB;AAAA,MAAA;AAAA,IAEhC;AAAA,EACF;AAEA,QAAM,kBAA8C,CAAC,GAAG,MAAM,UAAU,UAAU;AAAA,IAChF,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS,MAAM;AACb,YAAM,qBAAqBC,UAAA,UAAU,KAAK,UAAUC,sBAAAA,uBAAuB;AAEhE,iBAAA,oBAAoB,OAAO,KAAK;AAAA,IAC7C;AAAA,IACA,QAAQ,KAAK,aAAa,UAAU,KAAK,aAAa,SAAS,KAAK,KAAK;AAAA,EAAA;AAG3E,QAAM,8BAA0D,CAAC,GAAG,MAAM,UAAU,SAAS;AAAA,IAC3F;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS,MAAM,gBAAgB,KAAK,cAAc,IAAI;AAAA,MACtD,QAAQ,KAAK,aAAa,UAAU,KAAK,eAAe;AAAA,IAC1D;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS,MAAM,gBAAgB,KAAK,cAAc,KAAK;AAAA,MACvD,QAAQ,KAAK,aAAa,UAAU,KAAK,eAAe;AAAA,IAC1D;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM,cAAc,KAAK,cAAc,IAAI;AAAA,MACpD,QACE,KAAK,aAAa,UAClB,CAAC,KAAK,WACN,SAAS,KAAK,QAAiC;AAAA,IACnD;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM,cAAc,KAAK,cAAc,KAAK;AAAA,MACrD,QACE,KAAK,aAAa,UAClB,CAAC,KAAK,WACN,CAAC,SAAS,KAAK,QAAiC;AAAA,IAAA;AAAA,EAEtD;AAEA,QAAM,aAAyC,CAAC,GAAG,MAAM,UAAU,UAAU;AAAA,IAC3E,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS,MAAM,eAAe,KAAK,YAAY;AAAA,IAC/C,QAAQ,KAAK,aAAa,UAAU,KAAK;AAAA,EAAA;AAG3C,QAAM,cAA0C,CAAC,GAAG,MAAM,UAAU,SAAS;AACrE,UAAA,oBAAoB,qBAAqB,KAAK,aAAa;AACjE,UAAM,uBACJ,kBAAkB,SAAS,KAC3B,iBACA,EAAE,KAAK,aAAa,SAAS,KAAK,KAAK,gBAAgB,SAAS;AAE3D,WAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM,kBAAkB,iBAAiB;AAAA,MAClD,QAAQ,CAAC;AAAA,IACX;AAAA,EACF;AAEM,QAAA,aAAyC,CAAC,GAAG,UAAU;AAAA,IAC3D,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS,MAAM,UAAU,MAAM,KAAK,aAAa,GAAG,WAAW;AAAA,IAC/D,QAAQ,KAAK;AAAA,EAAA;AAGT,QAAA,oBAAgD,CAAC,GAAG,SAAS;AAAA,IACjE;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM,uCAAY;AAAA,MAC3B,QAAQ,KAAK,aAAa,UAAU,CAAC,iBAAiB,CAAC;AAAA,IACzD;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM;AACE,uBAAA;AACf,+CAAY;AAAA,MACd;AAAA,MACA,QAAQ,KAAK,aAAa,UAAU,CAAC,iBAAiB,CAAC;AAAA,IAAA;AAAA,EAE3D;AAEM,QAAA,iBAA6C,CAAC,GAAG,UAAU;AAAA,IAC/D,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS,MAAM,uCAAY;AAAA,IAC3B,QAAQ,KAAK,aAAa,UAAU,CAAC,iBAAiB,CAAC;AAAA,EAAA;AAGzD,QAAM,mBAAwE;AAAA,IAC5E,CAAC,YAAY,GAAG;AAAA,IAChB,CAAC,cAAc,GAAG;AAAA,IAClB,CAAC,iBAAiB,GAAG;AAAA,IACrB,CAAC,QAAQ,GAAG;AAAA,IACZ,CAAC,SAAS,GAAG;AAAA,IACb,CAAC,QAAQ,GAAG;AAAA,IACZ,CAAC,eAAe,GAAG;AAAA,IACnB,CAAC,aAAa,GAAG;AAAA,EACnB;AAEM,QAAA,cAAc,CAAC,WAAqD;AACxE,UAAM,EAAE,OAAO,MAAA,IAAUJ,UAAAA,YAAY,MAAM,KAAK,CAAC;AACjD,QAAI,CAAC,SAAS,CAAC,MAAc,QAAA;AACvB,UAAA,iBAAiB,cAAc,KAAK;AACpC,UAAA,cAAc,QAAQ,KAAK,CAAC,WAAW,OAAO,UAAS,+BAAO,QAAQ,WAAW,IAAG;AAC1F,UAAM,SAAS,aAAa,KAAK,CAAC,WAAW,OAAO,OAAO,KAAK;AACzD,WAAA;AAAA,MACL;AAAA,MACA,UAAU;AAAA,MACV,WAAU,iDAAgB,cAAY,iDAAgB,OAAM;AAAA,MAC5D,YAAY,iDAAgB;AAAA,MAC5B;AAAA,MACA,SAAS,MAAM,WAAWK,oCAAW;AAAA,MACrC,QAAQ;AAAA,QACN,IAAI;AAAA,QACJ,QAAO,iCAAQ,UAAS;AAAA,MAAA;AAAA,IAE5B;AAAA,EACF;AAEM,QAAA,6BAA6B,CAAC,MAAoB;;AACtD,UAAM,SAAS,EAAE;AACX,UAAA,OAAO,OAAO,QAAQ,IAAI;AAE1B,UAAA,UAAS,kCAAM,sBAAN,mBAAyB;AAExC,QAAI,CAAC,OAAQ;AAEP,UAAA,WAAW,YAAY,MAAM;AAEnC,QAAI,CAAC,SAAU;AAEX,QAAA,uBAAuB,MAAM,KAAK,aAAa;AAEnD,QAAI,CAAC,qBAAqB,SAAS,MAAM,KAAK,CAAC,qBAAqB,QAAQ;AAC1E,6BAAuB,CAAC,MAAM;AAEnB,iBAAA,QAAQ,OAAO,KAAK;AAC/B,gBAAU,MAAM;AAAA,IAAA;AAGlB,UAAM,oBAAoB,qBAAqB;AAAA,MAC7C,CAAC,OAAOL;;AAAAA,iBAAAA,MAAAA,UAAAA,YAAY,EAAE,MAAdA,gBAAAA,IAAiB,WAAUI,sBAAAA;AAAAA;AAAAA,IACrC;AAEM,UAAA,oBAAoB,qBAAqB,QAAQ,CAACE,YAAW,YAAYA,OAAM,KAAK,EAAE;AAC5F,UAAM,mBAA6B,CAAC;AACpC,UAAM,sBAAgC,CAAC;AACvC,UAAM,uBAAiC,CAAC;AACxC,UAAM,sBAAgC,CAAC;AACvC,eAAW,EAAE,UAAU,SAAS,KAAK,mBAAmB;AAClD,UAAA,YAAY,CAAC,iBAAiB,SAAS,QAAQ,EAAG,kBAAiB,KAAK,QAAQ;AAChF,UAAA,YAAY,CAAC,oBAAoB,SAAS,QAAQ,EAAG,qBAAoB,KAAK,QAAQ;AAC1F,UAAI,aAAaF,sBAAA,2BAA2B,CAAC,qBAAqB,SAAS,QAAQ;AACjF,6BAAqB,KAAK,QAAQ;AACpC,UAAI,SAAS,WAAWC,yBAAAA,WAAW,EAAG,qBAAoB,KAAK,QAAQ;AAAA,IAAA;AAGzE,UAAM,uBAAuB,iBAAiB;AAAA,MAAQ,CAAC,gBACrD;;AAAA,sBAAO,gBAAgB,aACnB;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,YACE,eAAe;AAAA;AAAA,YACf,cAAc;AAAA,YACd,iBAAiB;AAAA,YACjB,kBAAkB;AAAA,YAClB,gBAAgB;AAAA;AAAA,UAClB;AAAA,UACA;AAAA,YACE;AAAA,UAAA;AAAA,QACF,KAEFE,MAAA,iBAAiB,iBAAjB,gBAAAA,IAAA;AAAA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,YACE,eAAe;AAAA;AAAA,YACf,cAAc;AAAA,YACd,iBAAiB;AAAA,YACjB,kBAAkB;AAAA,YAClB,gBAAgB;AAAA;AAAA,UAClB;AAAA,UACA,EAAE,QAAQ;AAAA;AAAA;AAAA,IAElB;AAEA,wBAAoB,GAAG,oBAAoB;AAAA,EAC7C;AAEA,SAAO,EAAE,2BAA2B;AACtC;;"}