@ynput/ayon-frontend-shared 0.2.15 → 0.2.16

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 (519) hide show
  1. package/dist/DetailsPanel.cjs.js +3 -0
  2. package/dist/DetailsPanel.cjs.js.map +1 -1
  3. package/dist/DetailsPanel.es.js +3 -0
  4. package/dist/DetailsPanel.es.js.map +1 -1
  5. package/dist/ProjectTreeTable.cjs.js +34 -1
  6. package/dist/ProjectTreeTable.cjs.js.map +1 -1
  7. package/dist/ProjectTreeTable.es.js +36 -3
  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 +3 -5
  13. package/dist/_virtual/index.cjs5.js.map +1 -1
  14. package/dist/_virtual/index.cjs6.js +5 -3
  15. package/dist/_virtual/index.cjs6.js.map +1 -1
  16. package/dist/_virtual/index.cjs7.js +3 -5
  17. package/dist/_virtual/index.cjs7.js.map +1 -1
  18. package/dist/_virtual/index.cjs8.js +4 -4
  19. package/dist/_virtual/index.cjs9.js +4 -4
  20. package/dist/_virtual/index.es10.js +5 -2
  21. package/dist/_virtual/index.es10.js.map +1 -1
  22. package/dist/_virtual/index.es4.js +4 -4
  23. package/dist/_virtual/index.es5.js +2 -5
  24. package/dist/_virtual/index.es5.js.map +1 -1
  25. package/dist/_virtual/index.es6.js +5 -2
  26. package/dist/_virtual/index.es6.js.map +1 -1
  27. package/dist/_virtual/index.es7.js +2 -5
  28. package/dist/_virtual/index.es7.js.map +1 -1
  29. package/dist/_virtual/index.es8.js +4 -4
  30. package/dist/_virtual/index.es9.js +4 -4
  31. package/dist/api.cjs.js +6 -1
  32. package/dist/api.cjs.js.map +1 -1
  33. package/dist/api.es.js +8 -3
  34. package/dist/api.es.js.map +1 -1
  35. package/dist/components.cjs.js +3 -0
  36. package/dist/components.cjs.js.map +1 -1
  37. package/dist/components.es.js +3 -0
  38. package/dist/components.es.js.map +1 -1
  39. package/dist/index.cjs.js +3 -0
  40. package/dist/index.cjs.js.map +1 -1
  41. package/dist/index.es.js +3 -0
  42. package/dist/index.es.js.map +1 -1
  43. package/dist/node_modules/match-sorter/dist/match-sorter.esm.cjs.js +1 -1
  44. package/dist/node_modules/match-sorter/dist/match-sorter.esm.es.js +1 -1
  45. package/dist/node_modules/parse-numeric-range/index.cjs.js +1 -1
  46. package/dist/node_modules/parse-numeric-range/index.es.js +1 -1
  47. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +2 -2
  48. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  49. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  50. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  51. package/dist/node_modules/rehype-prism-plus/dist/index.es.cjs.js +1 -1
  52. package/dist/node_modules/rehype-prism-plus/dist/index.es.es.js +1 -1
  53. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  54. package/dist/node_modules/remove-accents/index.es.js +1 -1
  55. package/dist/node_modules/vfile/lib/index.cjs.js +1 -1
  56. package/dist/node_modules/vfile/lib/index.es.js +1 -1
  57. package/dist/shared/src/api/generated/graphql.cjs.js +24 -0
  58. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  59. package/dist/shared/src/api/generated/graphql.es.js +24 -0
  60. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  61. package/dist/shared/src/api/generated/grouping.cjs.js +18 -0
  62. package/dist/shared/src/api/generated/grouping.cjs.js.map +1 -0
  63. package/dist/shared/src/api/generated/grouping.es.js +18 -0
  64. package/dist/shared/src/api/generated/grouping.es.js.map +1 -0
  65. package/dist/shared/src/api/generated/tasks.cjs.js +0 -8
  66. package/dist/shared/src/api/generated/tasks.cjs.js.map +1 -1
  67. package/dist/shared/src/api/generated/tasks.es.js +0 -8
  68. package/dist/shared/src/api/generated/tasks.es.js.map +1 -1
  69. package/dist/shared/src/api/queries/actions/getActions.cjs.js +1 -0
  70. package/dist/shared/src/api/queries/actions/getActions.cjs.js.map +1 -1
  71. package/dist/shared/src/api/queries/actions/getActions.es.js +1 -0
  72. package/dist/shared/src/api/queries/actions/getActions.es.js.map +1 -1
  73. package/dist/shared/src/api/queries/activities/getActivities.cjs.js +1 -0
  74. package/dist/shared/src/api/queries/activities/getActivities.cjs.js.map +1 -1
  75. package/dist/shared/src/api/queries/activities/getActivities.es.js +1 -0
  76. package/dist/shared/src/api/queries/activities/getActivities.es.js.map +1 -1
  77. package/dist/shared/src/api/queries/activities/getMentions.cjs.js +1 -0
  78. package/dist/shared/src/api/queries/activities/getMentions.cjs.js.map +1 -1
  79. package/dist/shared/src/api/queries/activities/getMentions.es.js +1 -0
  80. package/dist/shared/src/api/queries/activities/getMentions.es.js.map +1 -1
  81. package/dist/shared/src/api/queries/activities/updateReaction.cjs.js +1 -0
  82. package/dist/shared/src/api/queries/activities/updateReaction.cjs.js.map +1 -1
  83. package/dist/shared/src/api/queries/activities/updateReaction.es.js +1 -0
  84. package/dist/shared/src/api/queries/activities/updateReaction.es.js.map +1 -1
  85. package/dist/shared/src/api/queries/addons/getAddons.cjs.js +1 -0
  86. package/dist/shared/src/api/queries/addons/getAddons.cjs.js.map +1 -1
  87. package/dist/shared/src/api/queries/addons/getAddons.es.js +1 -0
  88. package/dist/shared/src/api/queries/addons/getAddons.es.js.map +1 -1
  89. package/dist/shared/src/api/queries/attributes/getAttributes.cjs.js +1 -0
  90. package/dist/shared/src/api/queries/attributes/getAttributes.cjs.js.map +1 -1
  91. package/dist/shared/src/api/queries/attributes/getAttributes.es.js +1 -0
  92. package/dist/shared/src/api/queries/attributes/getAttributes.es.js.map +1 -1
  93. package/dist/shared/src/api/queries/authentication/getAuthentication.cjs.js +1 -0
  94. package/dist/shared/src/api/queries/authentication/getAuthentication.cjs.js.map +1 -1
  95. package/dist/shared/src/api/queries/authentication/getAuthentication.es.js +1 -0
  96. package/dist/shared/src/api/queries/authentication/getAuthentication.es.js.map +1 -1
  97. package/dist/shared/src/api/queries/entities/getEntity.cjs.js +1 -0
  98. package/dist/shared/src/api/queries/entities/getEntity.cjs.js.map +1 -1
  99. package/dist/shared/src/api/queries/entities/getEntity.es.js +1 -0
  100. package/dist/shared/src/api/queries/entities/getEntity.es.js.map +1 -1
  101. package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js +1 -0
  102. package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js.map +1 -1
  103. package/dist/shared/src/api/queries/entities/getEntityPanel.es.js +1 -0
  104. package/dist/shared/src/api/queries/entities/getEntityPanel.es.js.map +1 -1
  105. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js +2 -0
  106. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
  107. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +2 -0
  108. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
  109. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +2 -0
  110. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
  111. package/dist/shared/src/api/queries/entities/updateEntity.es.js +2 -0
  112. package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
  113. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +1 -0
  114. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
  115. package/dist/shared/src/api/queries/entityLists/getLists.es.js +1 -0
  116. package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
  117. package/dist/shared/src/api/queries/entityLists/getListsAttributes.cjs.js +1 -0
  118. package/dist/shared/src/api/queries/entityLists/getListsAttributes.cjs.js.map +1 -1
  119. package/dist/shared/src/api/queries/entityLists/getListsAttributes.es.js +1 -0
  120. package/dist/shared/src/api/queries/entityLists/getListsAttributes.es.js.map +1 -1
  121. package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js +1 -0
  122. package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js.map +1 -1
  123. package/dist/shared/src/api/queries/entityLists/updateLists.es.js +1 -0
  124. package/dist/shared/src/api/queries/entityLists/updateLists.es.js.map +1 -1
  125. package/dist/shared/src/api/queries/folders/getFolders.cjs.js +1 -0
  126. package/dist/shared/src/api/queries/folders/getFolders.cjs.js.map +1 -1
  127. package/dist/shared/src/api/queries/folders/getFolders.es.js +1 -0
  128. package/dist/shared/src/api/queries/folders/getFolders.es.js.map +1 -1
  129. package/dist/shared/src/api/queries/grouping/getGrouping.cjs.js +47 -0
  130. package/dist/shared/src/api/queries/grouping/getGrouping.cjs.js.map +1 -0
  131. package/dist/shared/src/api/queries/grouping/getGrouping.es.js +47 -0
  132. package/dist/shared/src/api/queries/grouping/getGrouping.es.js.map +1 -0
  133. package/dist/shared/src/api/queries/overview/getOverview.cjs.js +4 -5
  134. package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
  135. package/dist/shared/src/api/queries/overview/getOverview.es.js +4 -5
  136. package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
  137. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js +2 -0
  138. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js.map +1 -1
  139. package/dist/shared/src/api/queries/overview/updateOverview.es.js +2 -0
  140. package/dist/shared/src/api/queries/overview/updateOverview.es.js.map +1 -1
  141. package/dist/shared/src/api/queries/permissions/getPermissions.cjs.js +1 -0
  142. package/dist/shared/src/api/queries/permissions/getPermissions.cjs.js.map +1 -1
  143. package/dist/shared/src/api/queries/permissions/getPermissions.es.js +1 -0
  144. package/dist/shared/src/api/queries/permissions/getPermissions.es.js.map +1 -1
  145. package/dist/shared/src/api/queries/project/getProject.cjs.js +1 -0
  146. package/dist/shared/src/api/queries/project/getProject.cjs.js.map +1 -1
  147. package/dist/shared/src/api/queries/project/getProject.es.js +1 -0
  148. package/dist/shared/src/api/queries/project/getProject.es.js.map +1 -1
  149. package/dist/shared/src/api/queries/review/getReview.cjs.js +1 -0
  150. package/dist/shared/src/api/queries/review/getReview.cjs.js.map +1 -1
  151. package/dist/shared/src/api/queries/review/getReview.es.js +1 -0
  152. package/dist/shared/src/api/queries/review/getReview.es.js.map +1 -1
  153. package/dist/shared/src/api/queries/review/updateReview.cjs.js +1 -0
  154. package/dist/shared/src/api/queries/review/updateReview.cjs.js.map +1 -1
  155. package/dist/shared/src/api/queries/review/updateReview.es.js +1 -0
  156. package/dist/shared/src/api/queries/review/updateReview.es.js.map +1 -1
  157. package/dist/shared/src/api/queries/system/getSystem.cjs.js +1 -0
  158. package/dist/shared/src/api/queries/system/getSystem.cjs.js.map +1 -1
  159. package/dist/shared/src/api/queries/system/getSystem.es.js +1 -0
  160. package/dist/shared/src/api/queries/system/getSystem.es.js.map +1 -1
  161. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js +1 -0
  162. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js.map +1 -1
  163. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js +1 -0
  164. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js.map +1 -1
  165. package/dist/shared/src/api/queries/users/getUsers.cjs.js +2 -0
  166. package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
  167. package/dist/shared/src/api/queries/users/getUsers.es.js +2 -0
  168. package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
  169. package/dist/shared/src/api/queries/users/updateUsers.cjs.js +1 -0
  170. package/dist/shared/src/api/queries/users/updateUsers.cjs.js.map +1 -1
  171. package/dist/shared/src/api/queries/users/updateUsers.es.js +1 -0
  172. package/dist/shared/src/api/queries/users/updateUsers.es.js.map +1 -1
  173. package/dist/shared/src/api/queries/watchers/getWatchers.cjs.js +1 -0
  174. package/dist/shared/src/api/queries/watchers/getWatchers.cjs.js.map +1 -1
  175. package/dist/shared/src/api/queries/watchers/getWatchers.es.js +1 -0
  176. package/dist/shared/src/api/queries/watchers/getWatchers.es.js.map +1 -1
  177. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js +2 -2
  178. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js.map +1 -1
  179. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js +2 -2
  180. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js.map +1 -1
  181. package/dist/shared/src/components/Badge/Badge.cjs.js +31 -0
  182. package/dist/shared/src/components/Badge/Badge.cjs.js.map +1 -0
  183. package/dist/shared/src/components/Badge/Badge.es.js +31 -0
  184. package/dist/shared/src/components/Badge/Badge.es.js.map +1 -0
  185. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js +2 -0
  186. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js.map +1 -1
  187. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js +2 -0
  188. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js.map +1 -1
  189. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js +2 -0
  190. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js.map +1 -1
  191. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js +2 -0
  192. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js.map +1 -1
  193. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js +3 -0
  194. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js.map +1 -1
  195. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js +3 -0
  196. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js.map +1 -1
  197. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +138 -3
  198. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  199. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +138 -3
  200. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  201. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.cjs.js +5 -1
  202. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.cjs.js.map +1 -1
  203. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.es.js +5 -1
  204. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.es.js.map +1 -1
  205. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js +5 -5
  206. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js.map +1 -1
  207. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.es.js +5 -5
  208. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.es.js.map +1 -1
  209. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js +2 -0
  210. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js.map +1 -1
  211. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js +2 -0
  212. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js.map +1 -1
  213. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +93 -79
  214. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  215. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +93 -79
  216. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  217. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +87 -17
  218. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  219. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +88 -18
  220. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  221. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.cjs.js +4 -0
  222. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.cjs.js.map +1 -1
  223. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.es.js +4 -0
  224. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.es.js.map +1 -1
  225. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +3 -0
  226. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  227. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +3 -0
  228. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  229. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +2 -0
  230. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
  231. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +2 -0
  232. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
  233. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +223 -19
  234. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  235. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +224 -20
  236. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  237. package/dist/shared/src/components/Watchers/Watchers.cjs.js +2 -0
  238. package/dist/shared/src/components/Watchers/Watchers.cjs.js.map +1 -1
  239. package/dist/shared/src/components/Watchers/Watchers.es.js +2 -0
  240. package/dist/shared/src/components/Watchers/Watchers.es.js.map +1 -1
  241. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +3 -0
  242. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  243. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +3 -0
  244. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  245. package/dist/shared/src/containers/Actions/Actions.cjs.js +2 -0
  246. package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
  247. package/dist/shared/src/containers/Actions/Actions.es.js +2 -0
  248. package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
  249. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +3 -0
  250. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  251. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +3 -0
  252. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  253. package/dist/shared/src/containers/ContextMenu/ContextMenuItem.cjs.js +22 -0
  254. package/dist/shared/src/containers/ContextMenu/ContextMenuItem.cjs.js.map +1 -1
  255. package/dist/shared/src/containers/ContextMenu/ContextMenuItem.es.js +22 -0
  256. package/dist/shared/src/containers/ContextMenu/ContextMenuItem.es.js.map +1 -1
  257. package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.cjs.js +26 -7
  258. package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.cjs.js.map +1 -1
  259. package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.es.js +26 -7
  260. package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.es.js.map +1 -1
  261. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +3 -0
  262. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  263. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +3 -0
  264. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  265. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +13 -10
  266. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  267. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +13 -10
  268. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  269. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +3 -0
  270. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  271. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +3 -0
  272. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  273. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +3 -0
  274. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  275. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +3 -0
  276. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  277. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +2 -0
  278. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
  279. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +2 -0
  280. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
  281. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +2 -0
  282. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
  283. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +2 -0
  284. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
  285. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +1 -1
  286. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
  287. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +1 -1
  288. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js.map +1 -1
  289. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.cjs.js +8 -1
  290. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.cjs.js.map +1 -1
  291. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.es.js +9 -2
  292. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.es.js.map +1 -1
  293. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js +9 -0
  294. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js.map +1 -1
  295. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js +10 -1
  296. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js.map +1 -1
  297. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +2 -0
  298. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  299. package/dist/shared/src/containers/Feed/context/FeedContext.es.js +2 -0
  300. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  301. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js +2 -0
  302. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js.map +1 -1
  303. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js +2 -0
  304. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js.map +1 -1
  305. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +25 -26
  306. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  307. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +26 -27
  308. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  309. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js +7 -0
  310. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js.map +1 -1
  311. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js +7 -0
  312. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js.map +1 -1
  313. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +9 -8
  314. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  315. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +9 -8
  316. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  317. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +3 -0
  318. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  319. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +3 -0
  320. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  321. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +11 -6
  322. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
  323. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +11 -6
  324. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
  325. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +2 -0
  326. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
  327. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +2 -0
  328. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
  329. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js +33 -9
  330. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
  331. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js +34 -10
  332. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
  333. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.cjs.js +37 -16
  334. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.cjs.js.map +1 -1
  335. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.es.js +38 -17
  336. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.es.js.map +1 -1
  337. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +2 -0
  338. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
  339. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +2 -0
  340. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
  341. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +84 -34
  342. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  343. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +85 -35
  344. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  345. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  346. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  347. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +1 -1
  348. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  349. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +26 -13
  350. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  351. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +26 -13
  352. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  353. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.cjs.js +24 -0
  354. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.cjs.js.map +1 -0
  355. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.es.js +24 -0
  356. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.es.js.map +1 -0
  357. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js +16 -9
  358. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js.map +1 -1
  359. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js +16 -9
  360. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js.map +1 -1
  361. package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.cjs.js +17 -0
  362. package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.cjs.js.map +1 -0
  363. package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.es.js +17 -0
  364. package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.es.js.map +1 -0
  365. package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.cjs.js +30 -0
  366. package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.cjs.js.map +1 -0
  367. package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.es.js +30 -0
  368. package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.es.js.map +1 -0
  369. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +363 -0
  370. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -0
  371. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +363 -0
  372. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -0
  373. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js +16 -12
  374. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js.map +1 -1
  375. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js +16 -13
  376. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js.map +1 -1
  377. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +239 -0
  378. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -0
  379. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +239 -0
  380. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -0
  381. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js +82 -0
  382. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js.map +1 -0
  383. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js +82 -0
  384. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js.map +1 -0
  385. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +40 -0
  386. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -0
  387. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +40 -0
  388. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -0
  389. package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.cjs.js +19 -0
  390. package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.cjs.js.map +1 -0
  391. package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.es.js +19 -0
  392. package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.es.js.map +1 -0
  393. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.cjs.js +26 -0
  394. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.cjs.js.map +1 -0
  395. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.es.js +26 -0
  396. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.es.js.map +1 -0
  397. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js +7 -4
  398. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -1
  399. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js +7 -4
  400. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js.map +1 -1
  401. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +12 -1
  402. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  403. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +12 -1
  404. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  405. package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.cjs.js.map +1 -1
  406. package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.es.js.map +1 -1
  407. package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.cjs.js +8 -0
  408. package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.cjs.js.map +1 -0
  409. package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.es.js +8 -0
  410. package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.es.js.map +1 -0
  411. package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.cjs.js +7 -0
  412. package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.cjs.js.map +1 -0
  413. package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.es.js +7 -0
  414. package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.es.js.map +1 -0
  415. package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.cjs.js +0 -1
  416. package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.cjs.js.map +1 -1
  417. package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.es.js +0 -1
  418. package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.es.js.map +1 -1
  419. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js +2 -1
  420. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js.map +1 -1
  421. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js +2 -1
  422. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js.map +1 -1
  423. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js +0 -8
  424. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js.map +1 -1
  425. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js +0 -8
  426. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js.map +1 -1
  427. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +3 -0
  428. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  429. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +3 -0
  430. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  431. package/dist/shared/src/context/AddonProjectContext.cjs.js +2 -0
  432. package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
  433. package/dist/shared/src/context/AddonProjectContext.es.js +2 -0
  434. package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
  435. package/dist/shared/src/context/DetailsPanelContext.cjs.js +2 -0
  436. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  437. package/dist/shared/src/context/DetailsPanelContext.es.js +2 -0
  438. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  439. package/dist/shared/src/context/PowerpackContext.cjs.js +122 -17
  440. package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
  441. package/dist/shared/src/context/PowerpackContext.es.js +123 -18
  442. package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
  443. package/dist/shared/src/context/RemoteModulesContext.cjs.js +7 -1
  444. package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
  445. package/dist/shared/src/context/RemoteModulesContext.es.js +8 -2
  446. package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
  447. package/dist/shared/src/hooks/useActionTriggers.cjs.js +2 -0
  448. package/dist/shared/src/hooks/useActionTriggers.cjs.js.map +1 -1
  449. package/dist/shared/src/hooks/useActionTriggers.es.js +2 -0
  450. package/dist/shared/src/hooks/useActionTriggers.es.js.map +1 -1
  451. package/dist/shared/src/hooks/useEntityUpdate.cjs.js +2 -0
  452. package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
  453. package/dist/shared/src/hooks/useEntityUpdate.es.js +2 -0
  454. package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
  455. package/dist/shared/src/hooks/useLoadModule.cjs.js +8 -2
  456. package/dist/shared/src/hooks/useLoadModule.cjs.js.map +1 -1
  457. package/dist/shared/src/hooks/useLoadModule.es.js +8 -2
  458. package/dist/shared/src/hooks/useLoadModule.es.js.map +1 -1
  459. package/dist/shared/src/hooks/useScopedStatuses.cjs.js +2 -0
  460. package/dist/shared/src/hooks/useScopedStatuses.cjs.js.map +1 -1
  461. package/dist/shared/src/hooks/useScopedStatuses.es.js +2 -0
  462. package/dist/shared/src/hooks/useScopedStatuses.es.js.map +1 -1
  463. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +2 -0
  464. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
  465. package/dist/shared/src/hooks/useUserProjectConfig.es.js +2 -0
  466. package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
  467. package/dist/types/api/generated/graphql.d.ts +33 -38
  468. package/dist/types/api/generated/grouping.d.ts +40 -0
  469. package/dist/types/api/generated/index.d.ts +3 -1
  470. package/dist/types/api/generated/tasks.d.ts +8 -33
  471. package/dist/types/api/queries/activities/getActivities.d.ts +4 -0
  472. package/dist/types/api/queries/activities/updateActivities.d.ts +8 -0
  473. package/dist/types/api/queries/entities/getEntity.d.ts +4 -0
  474. package/dist/types/api/queries/entities/getEntityPanel.d.ts +4 -0
  475. package/dist/types/api/queries/entities/updateEntity.d.ts +4 -0
  476. package/dist/types/api/queries/entityLists/getLists.d.ts +4 -0
  477. package/dist/types/api/queries/grouping/getGrouping.d.ts +137 -0
  478. package/dist/types/api/queries/grouping/index.d.ts +1 -0
  479. package/dist/types/api/queries/index.d.ts +1 -0
  480. package/dist/types/api/queries/overview/getOverview.d.ts +5 -133
  481. package/dist/types/api/queries/project/getProject.d.ts +2 -2
  482. package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +4 -0
  483. package/dist/types/api/queries/users/getUsers.d.ts +4 -0
  484. package/dist/types/components/Badge/Badge.d.ts +10 -0
  485. package/dist/types/components/Badge/index.d.ts +1 -0
  486. package/dist/types/components/ProjectTableSettings/ProjectTableSettings.d.ts +1 -1
  487. package/dist/types/components/ReviewableProgressCard/ReviewableProgressCard.d.ts +1 -1
  488. package/dist/types/components/ReviewablesList/ReviewablesUpload.d.ts +19 -3
  489. package/dist/types/components/index.d.ts +1 -0
  490. package/dist/types/containers/ContextMenu/ContextMenuItem.d.ts +4 -0
  491. package/dist/types/containers/ContextMenu/useCreateContextMenu.d.ts +2 -1
  492. package/dist/types/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.d.ts +1 -0
  493. package/dist/types/containers/ProjectTreeTable/ProjectTreeTable.d.ts +1 -5
  494. package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +14 -3
  495. package/dist/types/containers/ProjectTreeTable/context/ProjectTableModulesContext.d.ts +22 -2
  496. package/dist/types/containers/ProjectTreeTable/hooks/index.d.ts +13 -0
  497. package/dist/types/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.d.ts +8 -3
  498. package/dist/types/containers/ProjectTreeTable/hooks/useCellContextMenu.d.ts +13 -2
  499. package/dist/types/containers/ProjectTreeTable/hooks/useColumnSorting.d.ts +12 -0
  500. package/dist/types/containers/ProjectTreeTable/hooks/useEntitiesMap.d.ts +7 -0
  501. package/dist/types/containers/ProjectTreeTable/hooks/useExpandedState.d.ts +11 -0
  502. package/dist/types/containers/ProjectTreeTable/hooks/useFetchOverviewData.d.ts +37 -0
  503. package/dist/types/containers/ProjectTreeTable/hooks/useGetEntityTypeData.d.ts +2 -2
  504. package/dist/types/containers/ProjectTreeTable/hooks/useGetGroupedFields.d.ts +9 -0
  505. package/dist/types/containers/ProjectTreeTable/hooks/useGetTaskGroups.d.ts +10 -0
  506. package/dist/types/containers/ProjectTreeTable/hooks/useQueryFilters.d.ts +14 -0
  507. package/dist/types/containers/ProjectTreeTable/hooks/useScopedAttributeFields.d.ts +10 -0
  508. package/dist/types/containers/ProjectTreeTable/hooks/useSelectedFolders.d.ts +10 -0
  509. package/dist/types/containers/ProjectTreeTable/index.d.ts +1 -4
  510. package/dist/types/containers/ProjectTreeTable/types/index.d.ts +1 -0
  511. package/dist/types/containers/ProjectTreeTable/types/overviewContext.d.ts +46 -0
  512. package/dist/types/containers/ProjectTreeTable/utils/errorExtraction.d.ts +4 -0
  513. package/dist/types/containers/ProjectTreeTable/utils/index.d.ts +2 -0
  514. package/dist/types/containers/ProjectTreeTable/utils/localStorageKeys.d.ts +4 -0
  515. package/dist/types/containers/ProjectTreeTable/widgets/GroupHeaderWidget.d.ts +2 -1
  516. package/dist/types/context/PowerpackContext.d.ts +2 -1
  517. package/dist/types/hooks/useLoadModule.d.ts +2 -1
  518. package/dist/types/utils/extractVersionFromFilename.d.ts +5 -0
  519. package/package.json +1 -1
@@ -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":"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"}
@@ -7,7 +7,7 @@ import { useSelectionCellsContext, ROW_SELECTION_COLUMN_ID } from "../context/Se
7
7
  import { useProjectTableContext } from "../context/ProjectTableContext.es.js";
8
8
  import { useCellEditing } from "../context/CellEditingContext.es.js";
9
9
  import { GROUP_BY_ID } from "./useBuildGroupByTableData.es.js";
10
- const useCellContextMenu = ({ attribs, onOpenNew }) => {
10
+ const useCellContextMenu = ({ attribs, headerLabels = [], onOpenNew }) => {
11
11
  const {
12
12
  projectName,
13
13
  showHierarchy,
@@ -15,13 +15,14 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
15
15
  toggleExpandAll,
16
16
  toggleExpands,
17
17
  expanded,
18
- contextMenuItems = []
18
+ contextMenuItems = [],
19
+ powerpack
19
20
  } = useProjectTableContext();
20
21
  const { copyToClipboard, exportCSV, pasteFromClipboard } = useClipboard();
21
22
  const { selectedCells, clearSelection, selectCell, focusCell } = useSelectionCellsContext();
22
23
  const { inheritFromParent, history } = useCellEditing();
23
24
  const deleteEntities = useDeleteEntities({});
24
- const [cellContextMenuShow] = useCreateContextMenu();
25
+ const [cellContextMenuShow] = useCreateContextMenu([], powerpack);
25
26
  const getEntitiesToInherit = (selected) => {
26
27
  return selected.reduce((acc, cellId) => {
27
28
  var _a;
@@ -29,19 +30,20 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
29
30
  if (!rowId || !colId || !colId.startsWith("attrib_")) return acc;
30
31
  const entity = getEntityById(rowId);
31
32
  if (!entity) return acc;
33
+ const entityId = entity.entityId || entity.id;
32
34
  const attribName = colId.replace("attrib_", "");
33
35
  const attribModel = attribs.find((attrib) => attrib.name === attribName);
34
36
  const isInheritable = attribModel == null ? void 0 : attribModel.data.inherit;
35
37
  if (((_a = entity.ownAttrib) == null ? void 0 : _a.includes(attribName)) && isInheritable) {
36
- const existingIndex = acc.findIndex((item) => item.entityId === rowId);
38
+ const existingIndex = acc.findIndex((item) => item.entityId === entityId);
37
39
  if (existingIndex >= 0) {
38
40
  if (!acc[existingIndex].attribs.includes(attribName)) {
39
41
  acc[existingIndex].attribs.push(attribName);
40
42
  }
41
43
  } else {
42
44
  acc.push({
43
- rowId,
44
- entityId: rowId,
45
+ rowId: entityId,
46
+ entityId,
45
47
  entityType: "folderId" in entity ? "task" : "folder",
46
48
  attribs: [attribName],
47
49
  ownAttrib: entity.ownAttrib || [],
@@ -126,7 +128,7 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
126
128
  label: "Delete",
127
129
  icon: "delete",
128
130
  danger: true,
129
- command: () => deleteEntities(meta.selectedCells),
131
+ command: () => deleteEntities(meta.selectedRows),
130
132
  hidden: cell.columnId !== "name" || cell.isGroup
131
133
  });
132
134
  const inheritItem = (e, cell, selected, meta) => {
@@ -183,13 +185,18 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
183
185
  if (!rowId || !colId) return void 0;
184
186
  const cellEntityData = getEntityById(rowId);
185
187
  const attribField = attribs.find((attrib) => attrib.name === (colId == null ? void 0 : colId.replace("attrib_", "")));
188
+ const column = headerLabels.find((header) => header.id === colId);
186
189
  return {
187
190
  cellId,
188
191
  columnId: colId,
189
- entityId: (cellEntityData == null ? void 0 : cellEntityData.entityId) || rowId,
192
+ entityId: (cellEntityData == null ? void 0 : cellEntityData.entityId) || (cellEntityData == null ? void 0 : cellEntityData.id) || rowId,
190
193
  entityType: cellEntityData == null ? void 0 : cellEntityData.entityType,
191
194
  attribField,
192
- isGroup: rowId.startsWith(GROUP_BY_ID)
195
+ isGroup: rowId.startsWith(GROUP_BY_ID),
196
+ column: {
197
+ id: colId,
198
+ label: (column == null ? void 0 : column.label) || ""
199
+ }
193
200
  };
194
201
  };
195
202
  const handleTableBodyContextMenu = (e) => {
@@ -206,6 +213,12 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
206
213
  selectCell(cellId, false, false);
207
214
  focusCell(cellId);
208
215
  }
216
+ const selectedRealCells = currentSelectedCells.filter(
217
+ (id) => {
218
+ var _a2;
219
+ return ((_a2 = parseCellId(id)) == null ? void 0 : _a2.colId) !== ROW_SELECTION_COLUMN_ID;
220
+ }
221
+ );
209
222
  const selectedCellsData = currentSelectedCells.flatMap((cellId2) => getCellData(cellId2) || []);
210
223
  const selectedCellRows = [];
211
224
  const selectedCellColumns = [];
@@ -226,8 +239,8 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
226
239
  cellData,
227
240
  selectedCellsData,
228
241
  {
229
- selectedCells: currentSelectedCells,
230
- // all selected cells
242
+ selectedCells: selectedRealCells,
243
+ // selected cells without row selection
231
244
  selectedRows: selectedCellRows,
232
245
  selectedColumns: selectedCellColumns,
233
246
  selectedFullRows: selectedCellFullRows,
@@ -243,8 +256,8 @@ const useCellContextMenu = ({ attribs, onOpenNew }) => {
243
256
  cellData,
244
257
  selectedCellsData,
245
258
  {
246
- selectedCells: currentSelectedCells,
247
- // all selected cells
259
+ selectedCells: selectedRealCells,
260
+ // selected cells without row selection
248
261
  selectedRows: selectedCellRows,
249
262
  selectedColumns: selectedCellColumns,
250
263
  selectedFullRows: selectedCellFullRows,
@@ -1 +1 @@
1
- {"version":3,"file":"useCellContextMenu.es.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":["_a","cellId"],"mappings":"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"}
1
+ {"version":3,"file":"useCellContextMenu.es.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":["_a","cellId"],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const React = require("react");
4
+ const reactTable = require("@tanstack/react-table");
5
+ const useColumnSorting = ({ updatePageConfig, columnSorting }) => {
6
+ const setColumnSorting = React.useCallback(
7
+ async (sorting) => {
8
+ await updatePageConfig({ columnSorting: sorting });
9
+ },
10
+ [updatePageConfig]
11
+ );
12
+ const updateSorting = React.useCallback(
13
+ (sortingUpdater) => {
14
+ setColumnSorting(reactTable.functionalUpdate(sortingUpdater, columnSorting));
15
+ },
16
+ [setColumnSorting, columnSorting]
17
+ );
18
+ return {
19
+ setColumnSorting,
20
+ updateSorting
21
+ };
22
+ };
23
+ exports.useColumnSorting = useColumnSorting;
24
+ //# sourceMappingURL=useColumnSorting.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useColumnSorting.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useColumnSorting.ts"],"sourcesContent":["import { useCallback } from 'react'\nimport { SortingState, functionalUpdate, OnChangeFn } from '@tanstack/react-table'\n\ninterface UseColumnSortingProps {\n updatePageConfig: (config: { columnSorting: SortingState }) => Promise<void>\n columnSorting: SortingState\n}\n\nexport const useColumnSorting = ({ updatePageConfig, columnSorting }: UseColumnSortingProps) => {\n const setColumnSorting = useCallback(\n async (sorting: SortingState) => {\n await updatePageConfig({ columnSorting: sorting })\n },\n [updatePageConfig],\n )\n\n const updateSorting: OnChangeFn<SortingState> = useCallback(\n (sortingUpdater) => {\n setColumnSorting(functionalUpdate(sortingUpdater, columnSorting))\n },\n [setColumnSorting, columnSorting],\n )\n\n return {\n setColumnSorting,\n updateSorting,\n }\n}\n"],"names":["useCallback","functionalUpdate"],"mappings":";;;;AAQO,MAAM,mBAAmB,CAAC,EAAE,kBAAkB,oBAA2C;AAC9F,QAAM,mBAAmBA,MAAA;AAAA,IACvB,OAAO,YAA0B;AAC/B,YAAM,iBAAiB,EAAE,eAAe,SAAS;AAAA,IACnD;AAAA,IACA,CAAC,gBAAgB;AAAA,EACnB;AAEA,QAAM,gBAA0CA,MAAA;AAAA,IAC9C,CAAC,mBAAmB;AACD,uBAAAC,WAAA,iBAAiB,gBAAgB,aAAa,CAAC;AAAA,IAClE;AAAA,IACA,CAAC,kBAAkB,aAAa;AAAA,EAClC;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;"}
@@ -0,0 +1,24 @@
1
+ import { useCallback } from "react";
2
+ import { functionalUpdate } from "@tanstack/react-table";
3
+ const useColumnSorting = ({ updatePageConfig, columnSorting }) => {
4
+ const setColumnSorting = useCallback(
5
+ async (sorting) => {
6
+ await updatePageConfig({ columnSorting: sorting });
7
+ },
8
+ [updatePageConfig]
9
+ );
10
+ const updateSorting = useCallback(
11
+ (sortingUpdater) => {
12
+ setColumnSorting(functionalUpdate(sortingUpdater, columnSorting));
13
+ },
14
+ [setColumnSorting, columnSorting]
15
+ );
16
+ return {
17
+ setColumnSorting,
18
+ updateSorting
19
+ };
20
+ };
21
+ export {
22
+ useColumnSorting
23
+ };
24
+ //# sourceMappingURL=useColumnSorting.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useColumnSorting.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useColumnSorting.ts"],"sourcesContent":["import { useCallback } from 'react'\nimport { SortingState, functionalUpdate, OnChangeFn } from '@tanstack/react-table'\n\ninterface UseColumnSortingProps {\n updatePageConfig: (config: { columnSorting: SortingState }) => Promise<void>\n columnSorting: SortingState\n}\n\nexport const useColumnSorting = ({ updatePageConfig, columnSorting }: UseColumnSortingProps) => {\n const setColumnSorting = useCallback(\n async (sorting: SortingState) => {\n await updatePageConfig({ columnSorting: sorting })\n },\n [updatePageConfig],\n )\n\n const updateSorting: OnChangeFn<SortingState> = useCallback(\n (sortingUpdater) => {\n setColumnSorting(functionalUpdate(sortingUpdater, columnSorting))\n },\n [setColumnSorting, columnSorting],\n )\n\n return {\n setColumnSorting,\n updateSorting,\n }\n}\n"],"names":[],"mappings":";;AAQO,MAAM,mBAAmB,CAAC,EAAE,kBAAkB,oBAA2C;AAC9F,QAAM,mBAAmB;AAAA,IACvB,OAAO,YAA0B;AAC/B,YAAM,iBAAiB,EAAE,eAAe,SAAS;AAAA,IACnD;AAAA,IACA,CAAC,gBAAgB;AAAA,EACnB;AAEA,QAAM,gBAA0C;AAAA,IAC9C,CAAC,mBAAmB;AACD,uBAAA,iBAAiB,gBAAgB,aAAa,CAAC;AAAA,IAClE;AAAA,IACA,CAAC,kBAAkB,aAAa;AAAA,EAClC;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;"}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  const React = require("react");
3
3
  const ProjectTableQueriesContext = require("../context/ProjectTableQueriesContext.cjs.js");
4
- const cellUtils = require("../utils/cellUtils.cjs.js");
5
4
  const confirmDelete = require("../../../util/confirmDelete.cjs.js");
6
5
  const reactToastify = require("react-toastify");
7
6
  require("../../../util/pubsub.cjs.js");
@@ -9,18 +8,25 @@ const ProjectTableContext = require("../context/ProjectTableContext.cjs.js");
9
8
  const useDeleteEntities = ({ onSuccess }) => {
10
9
  const { updateEntities } = ProjectTableQueriesContext.useProjectTableQueriesContext();
11
10
  const { getEntityById } = ProjectTableContext.useProjectTableContext();
11
+ const getValidEntity = (entityId) => {
12
+ const entity = getEntityById(entityId);
13
+ return entity || null;
14
+ };
12
15
  const handleDeleteEntities = React.useCallback(
13
16
  async (entityIds) => {
14
17
  if (!entityIds || entityIds.length === 0) {
15
18
  reactToastify.toast.error("No entities selected");
16
19
  return;
17
20
  }
18
- const fullEntities = entityIds.map((id) => {
19
- var _a;
20
- const rowId = (_a = cellUtils.parseCellId(id)) == null ? void 0 : _a.rowId;
21
- const entity = getEntityById(rowId || "");
22
- return entity;
23
- }).filter(Boolean);
21
+ const fullEntities = [];
22
+ const addedEntityIds = /* @__PURE__ */ new Set();
23
+ for (const id of entityIds) {
24
+ const entity = getValidEntity(id);
25
+ if (entity && !addedEntityIds.has(entity.id)) {
26
+ fullEntities.push(entity);
27
+ addedEntityIds.add(entity.id);
28
+ }
29
+ }
24
30
  if (fullEntities.length === 0) {
25
31
  reactToastify.toast.error("No entities found");
26
32
  return;
@@ -48,9 +54,10 @@ const useDeleteEntities = ({ onSuccess }) => {
48
54
  throw { message, ...error };
49
55
  }
50
56
  };
57
+ const entityLabel = fullEntities.length === 1 ? `"${fullEntities[0].label || fullEntities[0].name}"` : `${fullEntities.length} entities`;
51
58
  confirmDelete.confirmDelete({
52
59
  label: "folders and tasks",
53
- message: `Are you sure you want to delete ${entityIds.length} entities? This action cannot be undone.`,
60
+ message: `Are you sure you want to delete ${entityLabel}? This action cannot be undone.`,
54
61
  accept: deleteEntities,
55
62
  onError: (error) => {
56
63
  var _a;
@@ -58,7 +65,7 @@ const useDeleteEntities = ({ onSuccess }) => {
58
65
  if ((_a = error == null ? void 0 : error.errorCodes) == null ? void 0 : _a.includes(FOLDER_WITH_CHILDREN_CODE)) {
59
66
  confirmDelete.confirmDelete({
60
67
  label: "folders and tasks",
61
- message: `This folder has child tasks or products that will also be deleted. Are you sure you want to delete ${entityIds.length} entities and all of it's dependencies?`,
68
+ message: `This folder has child tasks or products that will also be deleted. Are you sure you want to delete ${entityLabel} and all of it's dependencies?`,
62
69
  accept: () => deleteEntities(true),
63
70
  deleteLabel: "Delete all (dangerous)"
64
71
  });
@@ -1 +1 @@
1
- {"version":3,"file":"useDeleteEntities.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useDeleteEntities.ts"],"sourcesContent":["import { useCallback } from 'react'\nimport { useProjectTableQueriesContext } from '../context/ProjectTableQueriesContext'\nimport { parseCellId } from '../utils/cellUtils'\n// TODO: confirmDelete uses prime react, so we should find a different solution\nimport { confirmDelete } from '../../../util'\nimport { useProjectTableContext } from '../context/ProjectTableContext'\nimport { toast } from 'react-toastify'\nimport { EntityMap } from '../types'\nimport { OperationWithRowId } from './useUpdateTableData'\n\ntype UseDeleteEntitiesProps = {\n onSuccess?: () => void\n}\n\nconst useDeleteEntities = ({ onSuccess }: UseDeleteEntitiesProps) => {\n const { updateEntities } = useProjectTableQueriesContext()\n\n const { getEntityById } = useProjectTableContext()\n\n const handleDeleteEntities = useCallback(\n async (entityIds: string[]) => {\n if (!entityIds || entityIds.length === 0) {\n toast.error('No entities selected')\n return\n }\n\n const fullEntities: (EntityMap & { rowId: string })[] = entityIds\n .map((id) => {\n const rowId = parseCellId(id)?.rowId\n const entity = getEntityById(rowId || '') as EntityMap & { rowId: string }\n return entity\n })\n .filter(Boolean)\n\n if (fullEntities.length === 0) {\n toast.error('No entities found')\n return\n }\n\n const deleteEntities = async (force = false) => {\n const operations: OperationWithRowId[] = []\n for (const e of fullEntities) {\n if (!e) continue\n operations.push({\n entityType: 'folderId' in e ? 'task' : 'folder',\n type: 'delete',\n entityId: e.id,\n rowId: e.rowId,\n force,\n })\n }\n try {\n await updateEntities?.({ operations })\n if (onSuccess) {\n onSuccess()\n }\n } catch (error: any) {\n const message = error?.error || 'Failed to delete entities'\n console.error(`Failed to delete entities:`, error)\n throw { message, ...error }\n }\n }\n\n confirmDelete({\n label: 'folders and tasks',\n message: `Are you sure you want to delete ${entityIds.length} entities? This action cannot be undone.`,\n accept: deleteEntities,\n onError: (error: any) => {\n const FOLDER_WITH_CHILDREN_CODE = 'delete-folder-with-children'\n // check if the error is because of child tasks, products\n if (error?.errorCodes?.includes(FOLDER_WITH_CHILDREN_CODE)) {\n // try again but with force\n confirmDelete({\n label: 'folders and tasks',\n message: `This folder has child tasks or products that will also be deleted. Are you sure you want to delete ${entityIds.length} entities and all of it's dependencies?`,\n accept: () => deleteEntities(true),\n deleteLabel: 'Delete all (dangerous)',\n })\n }\n },\n deleteLabel: 'Delete forever',\n })\n },\n [getEntityById, updateEntities, onSuccess],\n )\n\n return handleDeleteEntities\n}\n\nexport default useDeleteEntities\n"],"names":["useProjectTableQueriesContext","useProjectTableContext","useCallback","toast","parseCellId","confirmDelete"],"mappings":";;;;;;;;AAcA,MAAM,oBAAoB,CAAC,EAAE,gBAAwC;AAC7D,QAAA,EAAE,eAAe,IAAIA,yDAA8B;AAEnD,QAAA,EAAE,cAAc,IAAIC,2CAAuB;AAEjD,QAAM,uBAAuBC,MAAA;AAAA,IAC3B,OAAO,cAAwB;AAC7B,UAAI,CAAC,aAAa,UAAU,WAAW,GAAG;AACxCC,sBAAA,MAAM,MAAM,sBAAsB;AAClC;AAAA,MAAA;AAGF,YAAM,eAAkD,UACrD,IAAI,CAAC,OAAO;;AACL,cAAA,SAAQC,eAAAA,YAAY,EAAE,MAAdA,mBAAiB;AACzB,cAAA,SAAS,cAAc,SAAS,EAAE;AACjC,eAAA;AAAA,MAAA,CACR,EACA,OAAO,OAAO;AAEb,UAAA,aAAa,WAAW,GAAG;AAC7BD,sBAAA,MAAM,MAAM,mBAAmB;AAC/B;AAAA,MAAA;AAGI,YAAA,iBAAiB,OAAO,QAAQ,UAAU;AAC9C,cAAM,aAAmC,CAAC;AAC1C,mBAAW,KAAK,cAAc;AAC5B,cAAI,CAAC,EAAG;AACR,qBAAW,KAAK;AAAA,YACd,YAAY,cAAc,IAAI,SAAS;AAAA,YACvC,MAAM;AAAA,YACN,UAAU,EAAE;AAAA,YACZ,OAAO,EAAE;AAAA,YACT;AAAA,UAAA,CACD;AAAA,QAAA;AAEC,YAAA;AACI,iBAAA,iDAAiB,EAAE;AACzB,cAAI,WAAW;AACH,sBAAA;AAAA,UAAA;AAAA,iBAEL,OAAY;AACb,gBAAA,WAAU,+BAAO,UAAS;AACxB,kBAAA,MAAM,8BAA8B,KAAK;AAC3C,gBAAA,EAAE,SAAS,GAAG,MAAM;AAAA,QAAA;AAAA,MAE9B;AAEcE,kCAAA;AAAA,QACZ,OAAO;AAAA,QACP,SAAS,mCAAmC,UAAU,MAAM;AAAA,QAC5D,QAAQ;AAAA,QACR,SAAS,CAAC,UAAe;;AACvB,gBAAM,4BAA4B;AAElC,eAAI,oCAAO,eAAP,mBAAmB,SAAS,4BAA4B;AAE5CA,wCAAA;AAAA,cACZ,OAAO;AAAA,cACP,SAAS,sGAAsG,UAAU,MAAM;AAAA,cAC/H,QAAQ,MAAM,eAAe,IAAI;AAAA,cACjC,aAAa;AAAA,YAAA,CACd;AAAA,UAAA;AAAA,QAEL;AAAA,QACA,aAAa;AAAA,MAAA,CACd;AAAA,IACH;AAAA,IACA,CAAC,eAAe,gBAAgB,SAAS;AAAA,EAC3C;AAEO,SAAA;AACT;;"}
1
+ {"version":3,"file":"useDeleteEntities.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useDeleteEntities.ts"],"sourcesContent":["import { useCallback } from 'react'\nimport { useProjectTableQueriesContext } from '../context/ProjectTableQueriesContext'\n// TODO: confirmDelete uses prime react, so we should find a different solution\nimport { confirmDelete } from '../../../util'\nimport { useProjectTableContext } from '../context/ProjectTableContext'\nimport { toast } from 'react-toastify'\nimport { EntityMap } from '../types'\nimport { OperationWithRowId } from './useUpdateTableData'\n\ntype UseDeleteEntitiesProps = {\n onSuccess?: () => void\n}\n\nconst useDeleteEntities = ({ onSuccess }: UseDeleteEntitiesProps) => {\n const { updateEntities } = useProjectTableQueriesContext()\n\n const { getEntityById } = useProjectTableContext()\n\n const getValidEntity = (entityId: string): (EntityMap & { rowId: string }) | null => {\n const entity = getEntityById(entityId) as EntityMap & { rowId: string }\n return entity || null\n }\n\n const handleDeleteEntities = useCallback(\n async (entityIds: string[]) => {\n if (!entityIds || entityIds.length === 0) {\n toast.error('No entities selected')\n return\n }\n\n const fullEntities: (EntityMap & { rowId: string })[] = []\n const addedEntityIds = new Set<string>()\n\n for (const id of entityIds) {\n const entity = getValidEntity(id)\n if (entity && !addedEntityIds.has(entity.id)) {\n fullEntities.push(entity)\n addedEntityIds.add(entity.id)\n }\n }\n\n if (fullEntities.length === 0) {\n toast.error('No entities found')\n return\n }\n\n const deleteEntities = async (force = false) => {\n const operations: OperationWithRowId[] = []\n for (const e of fullEntities) {\n if (!e) continue\n operations.push({\n entityType: 'folderId' in e ? 'task' : 'folder',\n type: 'delete',\n entityId: e.id,\n rowId: e.rowId,\n force,\n })\n }\n try {\n await updateEntities?.({ operations })\n if (onSuccess) {\n onSuccess()\n }\n } catch (error: any) {\n const message = error?.error || 'Failed to delete entities'\n console.error(`Failed to delete entities:`, error)\n throw { message, ...error }\n }\n }\n\n const entityLabel =\n fullEntities.length === 1\n ? `\"${fullEntities[0].label || fullEntities[0].name}\"`\n : `${fullEntities.length} entities`\n\n confirmDelete({\n label: 'folders and tasks',\n message: `Are you sure you want to delete ${entityLabel}? This action cannot be undone.`,\n accept: deleteEntities,\n onError: (error: any) => {\n const FOLDER_WITH_CHILDREN_CODE = 'delete-folder-with-children'\n // check if the error is because of child tasks, products\n if (error?.errorCodes?.includes(FOLDER_WITH_CHILDREN_CODE)) {\n // try again but with force\n confirmDelete({\n label: 'folders and tasks',\n message: `This folder has child tasks or products that will also be deleted. Are you sure you want to delete ${entityLabel} and all of it's dependencies?`,\n accept: () => deleteEntities(true),\n deleteLabel: 'Delete all (dangerous)',\n })\n }\n },\n deleteLabel: 'Delete forever',\n })\n },\n [getEntityById, updateEntities, onSuccess],\n )\n\n return handleDeleteEntities\n}\n\nexport default useDeleteEntities\n"],"names":["useProjectTableQueriesContext","useProjectTableContext","useCallback","toast","confirmDelete"],"mappings":";;;;;;;AAaA,MAAM,oBAAoB,CAAC,EAAE,gBAAwC;AAC7D,QAAA,EAAE,eAAe,IAAIA,yDAA8B;AAEnD,QAAA,EAAE,cAAc,IAAIC,2CAAuB;AAE3C,QAAA,iBAAiB,CAAC,aAA6D;AAC7E,UAAA,SAAS,cAAc,QAAQ;AACrC,WAAO,UAAU;AAAA,EACnB;AAEA,QAAM,uBAAuBC,MAAA;AAAA,IAC3B,OAAO,cAAwB;AAC7B,UAAI,CAAC,aAAa,UAAU,WAAW,GAAG;AACxCC,sBAAA,MAAM,MAAM,sBAAsB;AAClC;AAAA,MAAA;AAGF,YAAM,eAAkD,CAAC;AACnD,YAAA,qCAAqB,IAAY;AAEvC,iBAAW,MAAM,WAAW;AACpB,cAAA,SAAS,eAAe,EAAE;AAChC,YAAI,UAAU,CAAC,eAAe,IAAI,OAAO,EAAE,GAAG;AAC5C,uBAAa,KAAK,MAAM;AACT,yBAAA,IAAI,OAAO,EAAE;AAAA,QAAA;AAAA,MAC9B;AAGE,UAAA,aAAa,WAAW,GAAG;AAC7BA,sBAAA,MAAM,MAAM,mBAAmB;AAC/B;AAAA,MAAA;AAGI,YAAA,iBAAiB,OAAO,QAAQ,UAAU;AAC9C,cAAM,aAAmC,CAAC;AAC1C,mBAAW,KAAK,cAAc;AAC5B,cAAI,CAAC,EAAG;AACR,qBAAW,KAAK;AAAA,YACd,YAAY,cAAc,IAAI,SAAS;AAAA,YACvC,MAAM;AAAA,YACN,UAAU,EAAE;AAAA,YACZ,OAAO,EAAE;AAAA,YACT;AAAA,UAAA,CACD;AAAA,QAAA;AAEC,YAAA;AACI,iBAAA,iDAAiB,EAAE;AACzB,cAAI,WAAW;AACH,sBAAA;AAAA,UAAA;AAAA,iBAEL,OAAY;AACb,gBAAA,WAAU,+BAAO,UAAS;AACxB,kBAAA,MAAM,8BAA8B,KAAK;AAC3C,gBAAA,EAAE,SAAS,GAAG,MAAM;AAAA,QAAA;AAAA,MAE9B;AAEA,YAAM,cACJ,aAAa,WAAW,IACpB,IAAI,aAAa,CAAC,EAAE,SAAS,aAAa,CAAC,EAAE,IAAI,MACjD,GAAG,aAAa,MAAM;AAEdC,kCAAA;AAAA,QACZ,OAAO;AAAA,QACP,SAAS,mCAAmC,WAAW;AAAA,QACvD,QAAQ;AAAA,QACR,SAAS,CAAC,UAAe;;AACvB,gBAAM,4BAA4B;AAElC,eAAI,oCAAO,eAAP,mBAAmB,SAAS,4BAA4B;AAE5CA,wCAAA;AAAA,cACZ,OAAO;AAAA,cACP,SAAS,sGAAsG,WAAW;AAAA,cAC1H,QAAQ,MAAM,eAAe,IAAI;AAAA,cACjC,aAAa;AAAA,YAAA,CACd;AAAA,UAAA;AAAA,QAEL;AAAA,QACA,aAAa;AAAA,MAAA,CACd;AAAA,IACH;AAAA,IACA,CAAC,eAAe,gBAAgB,SAAS;AAAA,EAC3C;AAEO,SAAA;AACT;;"}
@@ -1,6 +1,5 @@
1
1
  import { useCallback } from "react";
2
2
  import { useProjectTableQueriesContext } from "../context/ProjectTableQueriesContext.es.js";
3
- import { parseCellId } from "../utils/cellUtils.es.js";
4
3
  import { confirmDelete } from "../../../util/confirmDelete.es.js";
5
4
  import { toast } from "react-toastify";
6
5
  import "../../../util/pubsub.es.js";
@@ -8,18 +7,25 @@ import { useProjectTableContext } from "../context/ProjectTableContext.es.js";
8
7
  const useDeleteEntities = ({ onSuccess }) => {
9
8
  const { updateEntities } = useProjectTableQueriesContext();
10
9
  const { getEntityById } = useProjectTableContext();
10
+ const getValidEntity = (entityId) => {
11
+ const entity = getEntityById(entityId);
12
+ return entity || null;
13
+ };
11
14
  const handleDeleteEntities = useCallback(
12
15
  async (entityIds) => {
13
16
  if (!entityIds || entityIds.length === 0) {
14
17
  toast.error("No entities selected");
15
18
  return;
16
19
  }
17
- const fullEntities = entityIds.map((id) => {
18
- var _a;
19
- const rowId = (_a = parseCellId(id)) == null ? void 0 : _a.rowId;
20
- const entity = getEntityById(rowId || "");
21
- return entity;
22
- }).filter(Boolean);
20
+ const fullEntities = [];
21
+ const addedEntityIds = /* @__PURE__ */ new Set();
22
+ for (const id of entityIds) {
23
+ const entity = getValidEntity(id);
24
+ if (entity && !addedEntityIds.has(entity.id)) {
25
+ fullEntities.push(entity);
26
+ addedEntityIds.add(entity.id);
27
+ }
28
+ }
23
29
  if (fullEntities.length === 0) {
24
30
  toast.error("No entities found");
25
31
  return;
@@ -47,9 +53,10 @@ const useDeleteEntities = ({ onSuccess }) => {
47
53
  throw { message, ...error };
48
54
  }
49
55
  };
56
+ const entityLabel = fullEntities.length === 1 ? `"${fullEntities[0].label || fullEntities[0].name}"` : `${fullEntities.length} entities`;
50
57
  confirmDelete({
51
58
  label: "folders and tasks",
52
- message: `Are you sure you want to delete ${entityIds.length} entities? This action cannot be undone.`,
59
+ message: `Are you sure you want to delete ${entityLabel}? This action cannot be undone.`,
53
60
  accept: deleteEntities,
54
61
  onError: (error) => {
55
62
  var _a;
@@ -57,7 +64,7 @@ const useDeleteEntities = ({ onSuccess }) => {
57
64
  if ((_a = error == null ? void 0 : error.errorCodes) == null ? void 0 : _a.includes(FOLDER_WITH_CHILDREN_CODE)) {
58
65
  confirmDelete({
59
66
  label: "folders and tasks",
60
- message: `This folder has child tasks or products that will also be deleted. Are you sure you want to delete ${entityIds.length} entities and all of it's dependencies?`,
67
+ message: `This folder has child tasks or products that will also be deleted. Are you sure you want to delete ${entityLabel} and all of it's dependencies?`,
61
68
  accept: () => deleteEntities(true),
62
69
  deleteLabel: "Delete all (dangerous)"
63
70
  });
@@ -1 +1 @@
1
- {"version":3,"file":"useDeleteEntities.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useDeleteEntities.ts"],"sourcesContent":["import { useCallback } from 'react'\nimport { useProjectTableQueriesContext } from '../context/ProjectTableQueriesContext'\nimport { parseCellId } from '../utils/cellUtils'\n// TODO: confirmDelete uses prime react, so we should find a different solution\nimport { confirmDelete } from '../../../util'\nimport { useProjectTableContext } from '../context/ProjectTableContext'\nimport { toast } from 'react-toastify'\nimport { EntityMap } from '../types'\nimport { OperationWithRowId } from './useUpdateTableData'\n\ntype UseDeleteEntitiesProps = {\n onSuccess?: () => void\n}\n\nconst useDeleteEntities = ({ onSuccess }: UseDeleteEntitiesProps) => {\n const { updateEntities } = useProjectTableQueriesContext()\n\n const { getEntityById } = useProjectTableContext()\n\n const handleDeleteEntities = useCallback(\n async (entityIds: string[]) => {\n if (!entityIds || entityIds.length === 0) {\n toast.error('No entities selected')\n return\n }\n\n const fullEntities: (EntityMap & { rowId: string })[] = entityIds\n .map((id) => {\n const rowId = parseCellId(id)?.rowId\n const entity = getEntityById(rowId || '') as EntityMap & { rowId: string }\n return entity\n })\n .filter(Boolean)\n\n if (fullEntities.length === 0) {\n toast.error('No entities found')\n return\n }\n\n const deleteEntities = async (force = false) => {\n const operations: OperationWithRowId[] = []\n for (const e of fullEntities) {\n if (!e) continue\n operations.push({\n entityType: 'folderId' in e ? 'task' : 'folder',\n type: 'delete',\n entityId: e.id,\n rowId: e.rowId,\n force,\n })\n }\n try {\n await updateEntities?.({ operations })\n if (onSuccess) {\n onSuccess()\n }\n } catch (error: any) {\n const message = error?.error || 'Failed to delete entities'\n console.error(`Failed to delete entities:`, error)\n throw { message, ...error }\n }\n }\n\n confirmDelete({\n label: 'folders and tasks',\n message: `Are you sure you want to delete ${entityIds.length} entities? This action cannot be undone.`,\n accept: deleteEntities,\n onError: (error: any) => {\n const FOLDER_WITH_CHILDREN_CODE = 'delete-folder-with-children'\n // check if the error is because of child tasks, products\n if (error?.errorCodes?.includes(FOLDER_WITH_CHILDREN_CODE)) {\n // try again but with force\n confirmDelete({\n label: 'folders and tasks',\n message: `This folder has child tasks or products that will also be deleted. Are you sure you want to delete ${entityIds.length} entities and all of it's dependencies?`,\n accept: () => deleteEntities(true),\n deleteLabel: 'Delete all (dangerous)',\n })\n }\n },\n deleteLabel: 'Delete forever',\n })\n },\n [getEntityById, updateEntities, onSuccess],\n )\n\n return handleDeleteEntities\n}\n\nexport default useDeleteEntities\n"],"names":[],"mappings":";;;;;;;AAcA,MAAM,oBAAoB,CAAC,EAAE,gBAAwC;AAC7D,QAAA,EAAE,eAAe,IAAI,8BAA8B;AAEnD,QAAA,EAAE,cAAc,IAAI,uBAAuB;AAEjD,QAAM,uBAAuB;AAAA,IAC3B,OAAO,cAAwB;AAC7B,UAAI,CAAC,aAAa,UAAU,WAAW,GAAG;AACxC,cAAM,MAAM,sBAAsB;AAClC;AAAA,MAAA;AAGF,YAAM,eAAkD,UACrD,IAAI,CAAC,OAAO;;AACL,cAAA,SAAQ,iBAAY,EAAE,MAAd,mBAAiB;AACzB,cAAA,SAAS,cAAc,SAAS,EAAE;AACjC,eAAA;AAAA,MAAA,CACR,EACA,OAAO,OAAO;AAEb,UAAA,aAAa,WAAW,GAAG;AAC7B,cAAM,MAAM,mBAAmB;AAC/B;AAAA,MAAA;AAGI,YAAA,iBAAiB,OAAO,QAAQ,UAAU;AAC9C,cAAM,aAAmC,CAAC;AAC1C,mBAAW,KAAK,cAAc;AAC5B,cAAI,CAAC,EAAG;AACR,qBAAW,KAAK;AAAA,YACd,YAAY,cAAc,IAAI,SAAS;AAAA,YACvC,MAAM;AAAA,YACN,UAAU,EAAE;AAAA,YACZ,OAAO,EAAE;AAAA,YACT;AAAA,UAAA,CACD;AAAA,QAAA;AAEC,YAAA;AACI,iBAAA,iDAAiB,EAAE;AACzB,cAAI,WAAW;AACH,sBAAA;AAAA,UAAA;AAAA,iBAEL,OAAY;AACb,gBAAA,WAAU,+BAAO,UAAS;AACxB,kBAAA,MAAM,8BAA8B,KAAK;AAC3C,gBAAA,EAAE,SAAS,GAAG,MAAM;AAAA,QAAA;AAAA,MAE9B;AAEc,oBAAA;AAAA,QACZ,OAAO;AAAA,QACP,SAAS,mCAAmC,UAAU,MAAM;AAAA,QAC5D,QAAQ;AAAA,QACR,SAAS,CAAC,UAAe;;AACvB,gBAAM,4BAA4B;AAElC,eAAI,oCAAO,eAAP,mBAAmB,SAAS,4BAA4B;AAE5C,0BAAA;AAAA,cACZ,OAAO;AAAA,cACP,SAAS,sGAAsG,UAAU,MAAM;AAAA,cAC/H,QAAQ,MAAM,eAAe,IAAI;AAAA,cACjC,aAAa;AAAA,YAAA,CACd;AAAA,UAAA;AAAA,QAEL;AAAA,QACA,aAAa;AAAA,MAAA,CACd;AAAA,IACH;AAAA,IACA,CAAC,eAAe,gBAAgB,SAAS;AAAA,EAC3C;AAEO,SAAA;AACT;"}
1
+ {"version":3,"file":"useDeleteEntities.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useDeleteEntities.ts"],"sourcesContent":["import { useCallback } from 'react'\nimport { useProjectTableQueriesContext } from '../context/ProjectTableQueriesContext'\n// TODO: confirmDelete uses prime react, so we should find a different solution\nimport { confirmDelete } from '../../../util'\nimport { useProjectTableContext } from '../context/ProjectTableContext'\nimport { toast } from 'react-toastify'\nimport { EntityMap } from '../types'\nimport { OperationWithRowId } from './useUpdateTableData'\n\ntype UseDeleteEntitiesProps = {\n onSuccess?: () => void\n}\n\nconst useDeleteEntities = ({ onSuccess }: UseDeleteEntitiesProps) => {\n const { updateEntities } = useProjectTableQueriesContext()\n\n const { getEntityById } = useProjectTableContext()\n\n const getValidEntity = (entityId: string): (EntityMap & { rowId: string }) | null => {\n const entity = getEntityById(entityId) as EntityMap & { rowId: string }\n return entity || null\n }\n\n const handleDeleteEntities = useCallback(\n async (entityIds: string[]) => {\n if (!entityIds || entityIds.length === 0) {\n toast.error('No entities selected')\n return\n }\n\n const fullEntities: (EntityMap & { rowId: string })[] = []\n const addedEntityIds = new Set<string>()\n\n for (const id of entityIds) {\n const entity = getValidEntity(id)\n if (entity && !addedEntityIds.has(entity.id)) {\n fullEntities.push(entity)\n addedEntityIds.add(entity.id)\n }\n }\n\n if (fullEntities.length === 0) {\n toast.error('No entities found')\n return\n }\n\n const deleteEntities = async (force = false) => {\n const operations: OperationWithRowId[] = []\n for (const e of fullEntities) {\n if (!e) continue\n operations.push({\n entityType: 'folderId' in e ? 'task' : 'folder',\n type: 'delete',\n entityId: e.id,\n rowId: e.rowId,\n force,\n })\n }\n try {\n await updateEntities?.({ operations })\n if (onSuccess) {\n onSuccess()\n }\n } catch (error: any) {\n const message = error?.error || 'Failed to delete entities'\n console.error(`Failed to delete entities:`, error)\n throw { message, ...error }\n }\n }\n\n const entityLabel =\n fullEntities.length === 1\n ? `\"${fullEntities[0].label || fullEntities[0].name}\"`\n : `${fullEntities.length} entities`\n\n confirmDelete({\n label: 'folders and tasks',\n message: `Are you sure you want to delete ${entityLabel}? This action cannot be undone.`,\n accept: deleteEntities,\n onError: (error: any) => {\n const FOLDER_WITH_CHILDREN_CODE = 'delete-folder-with-children'\n // check if the error is because of child tasks, products\n if (error?.errorCodes?.includes(FOLDER_WITH_CHILDREN_CODE)) {\n // try again but with force\n confirmDelete({\n label: 'folders and tasks',\n message: `This folder has child tasks or products that will also be deleted. Are you sure you want to delete ${entityLabel} and all of it's dependencies?`,\n accept: () => deleteEntities(true),\n deleteLabel: 'Delete all (dangerous)',\n })\n }\n },\n deleteLabel: 'Delete forever',\n })\n },\n [getEntityById, updateEntities, onSuccess],\n )\n\n return handleDeleteEntities\n}\n\nexport default useDeleteEntities\n"],"names":[],"mappings":";;;;;;AAaA,MAAM,oBAAoB,CAAC,EAAE,gBAAwC;AAC7D,QAAA,EAAE,eAAe,IAAI,8BAA8B;AAEnD,QAAA,EAAE,cAAc,IAAI,uBAAuB;AAE3C,QAAA,iBAAiB,CAAC,aAA6D;AAC7E,UAAA,SAAS,cAAc,QAAQ;AACrC,WAAO,UAAU;AAAA,EACnB;AAEA,QAAM,uBAAuB;AAAA,IAC3B,OAAO,cAAwB;AAC7B,UAAI,CAAC,aAAa,UAAU,WAAW,GAAG;AACxC,cAAM,MAAM,sBAAsB;AAClC;AAAA,MAAA;AAGF,YAAM,eAAkD,CAAC;AACnD,YAAA,qCAAqB,IAAY;AAEvC,iBAAW,MAAM,WAAW;AACpB,cAAA,SAAS,eAAe,EAAE;AAChC,YAAI,UAAU,CAAC,eAAe,IAAI,OAAO,EAAE,GAAG;AAC5C,uBAAa,KAAK,MAAM;AACT,yBAAA,IAAI,OAAO,EAAE;AAAA,QAAA;AAAA,MAC9B;AAGE,UAAA,aAAa,WAAW,GAAG;AAC7B,cAAM,MAAM,mBAAmB;AAC/B;AAAA,MAAA;AAGI,YAAA,iBAAiB,OAAO,QAAQ,UAAU;AAC9C,cAAM,aAAmC,CAAC;AAC1C,mBAAW,KAAK,cAAc;AAC5B,cAAI,CAAC,EAAG;AACR,qBAAW,KAAK;AAAA,YACd,YAAY,cAAc,IAAI,SAAS;AAAA,YACvC,MAAM;AAAA,YACN,UAAU,EAAE;AAAA,YACZ,OAAO,EAAE;AAAA,YACT;AAAA,UAAA,CACD;AAAA,QAAA;AAEC,YAAA;AACI,iBAAA,iDAAiB,EAAE;AACzB,cAAI,WAAW;AACH,sBAAA;AAAA,UAAA;AAAA,iBAEL,OAAY;AACb,gBAAA,WAAU,+BAAO,UAAS;AACxB,kBAAA,MAAM,8BAA8B,KAAK;AAC3C,gBAAA,EAAE,SAAS,GAAG,MAAM;AAAA,QAAA;AAAA,MAE9B;AAEA,YAAM,cACJ,aAAa,WAAW,IACpB,IAAI,aAAa,CAAC,EAAE,SAAS,aAAa,CAAC,EAAE,IAAI,MACjD,GAAG,aAAa,MAAM;AAEd,oBAAA;AAAA,QACZ,OAAO;AAAA,QACP,SAAS,mCAAmC,WAAW;AAAA,QACvD,QAAQ;AAAA,QACR,SAAS,CAAC,UAAe;;AACvB,gBAAM,4BAA4B;AAElC,eAAI,oCAAO,eAAP,mBAAmB,SAAS,4BAA4B;AAE5C,0BAAA;AAAA,cACZ,OAAO;AAAA,cACP,SAAS,sGAAsG,WAAW;AAAA,cAC1H,QAAQ,MAAM,eAAe,IAAI;AAAA,cACjC,aAAa;AAAA,YAAA,CACd;AAAA,UAAA;AAAA,QAEL;AAAA,QACA,aAAa;AAAA,MAAA,CACd;AAAA,IACH;AAAA,IACA,CAAC,eAAe,gBAAgB,SAAS;AAAA,EAC3C;AAEO,SAAA;AACT;"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const React = require("react");
4
+ const useEntitiesMap = ({ foldersMap, tasksMap }) => {
5
+ return React.useMemo(() => {
6
+ const combined = /* @__PURE__ */ new Map();
7
+ foldersMap.forEach((folder) => {
8
+ combined.set(folder.id, folder);
9
+ });
10
+ tasksMap.forEach((task) => {
11
+ combined.set(task.id, task);
12
+ });
13
+ return combined;
14
+ }, [foldersMap, tasksMap]);
15
+ };
16
+ exports.useEntitiesMap = useEntitiesMap;
17
+ //# sourceMappingURL=useEntitiesMap.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEntitiesMap.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useEntitiesMap.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport type { FolderNodeMap, TaskNodeMap } from '@shared/containers/ProjectTreeTable'\n\ninterface UseEntitiesMapProps {\n foldersMap: FolderNodeMap\n tasksMap: TaskNodeMap\n}\n\nexport const useEntitiesMap = ({ foldersMap, tasksMap }: UseEntitiesMapProps) => {\n return useMemo(() => {\n const combined: FolderNodeMap & TaskNodeMap = new Map()\n\n foldersMap.forEach((folder) => {\n combined.set(folder.id, folder)\n })\n\n tasksMap.forEach((task) => {\n combined.set(task.id, task)\n })\n\n return combined\n }, [foldersMap, tasksMap])\n}\n"],"names":["useMemo"],"mappings":";;;AAQO,MAAM,iBAAiB,CAAC,EAAE,YAAY,eAAoC;AAC/E,SAAOA,cAAQ,MAAM;AACb,UAAA,+BAA4C,IAAI;AAE3C,eAAA,QAAQ,CAAC,WAAW;AACpB,eAAA,IAAI,OAAO,IAAI,MAAM;AAAA,IAAA,CAC/B;AAEQ,aAAA,QAAQ,CAAC,SAAS;AAChB,eAAA,IAAI,KAAK,IAAI,IAAI;AAAA,IAAA,CAC3B;AAEM,WAAA;AAAA,EAAA,GACN,CAAC,YAAY,QAAQ,CAAC;AAC3B;;"}
@@ -0,0 +1,17 @@
1
+ import { useMemo } from "react";
2
+ const useEntitiesMap = ({ foldersMap, tasksMap }) => {
3
+ return useMemo(() => {
4
+ const combined = /* @__PURE__ */ new Map();
5
+ foldersMap.forEach((folder) => {
6
+ combined.set(folder.id, folder);
7
+ });
8
+ tasksMap.forEach((task) => {
9
+ combined.set(task.id, task);
10
+ });
11
+ return combined;
12
+ }, [foldersMap, tasksMap]);
13
+ };
14
+ export {
15
+ useEntitiesMap
16
+ };
17
+ //# sourceMappingURL=useEntitiesMap.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEntitiesMap.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useEntitiesMap.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport type { FolderNodeMap, TaskNodeMap } from '@shared/containers/ProjectTreeTable'\n\ninterface UseEntitiesMapProps {\n foldersMap: FolderNodeMap\n tasksMap: TaskNodeMap\n}\n\nexport const useEntitiesMap = ({ foldersMap, tasksMap }: UseEntitiesMapProps) => {\n return useMemo(() => {\n const combined: FolderNodeMap & TaskNodeMap = new Map()\n\n foldersMap.forEach((folder) => {\n combined.set(folder.id, folder)\n })\n\n tasksMap.forEach((task) => {\n combined.set(task.id, task)\n })\n\n return combined\n }, [foldersMap, tasksMap])\n}\n"],"names":[],"mappings":";AAQO,MAAM,iBAAiB,CAAC,EAAE,YAAY,eAAoC;AAC/E,SAAO,QAAQ,MAAM;AACb,UAAA,+BAA4C,IAAI;AAE3C,eAAA,QAAQ,CAAC,WAAW;AACpB,eAAA,IAAI,OAAO,IAAI,MAAM;AAAA,IAAA,CAC/B;AAEQ,aAAA,QAAQ,CAAC,SAAS;AAChB,eAAA,IAAI,KAAK,IAAI,IAAI;AAAA,IAAA,CAC3B;AAEM,WAAA;AAAA,EAAA,GACN,CAAC,YAAY,QAAQ,CAAC;AAC3B;"}