@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
@@ -0,0 +1,82 @@
1
+ import "../../../api/base/client.es.js";
2
+ import "../../../api/generated/graphql.es.js";
3
+ import "../../../api/generated/access.es.js";
4
+ import "../../../api/generated/actions.es.js";
5
+ import "../../../api/generated/activityFeed.es.js";
6
+ import "../../../api/generated/addons.es.js";
7
+ import "../../../api/generated/anatomy.es.js";
8
+ import "../../../api/generated/attributes.es.js";
9
+ import "../../../api/generated/authentication.es.js";
10
+ import "../../../api/generated/bundles.es.js";
11
+ import "../../../api/generated/configuration.es.js";
12
+ import "../../../api/generated/desktop.es.js";
13
+ import "../../../api/generated/entityLists.es.js";
14
+ import "../../../api/generated/events.es.js";
15
+ import "../../../api/generated/files.es.js";
16
+ import "../../../api/generated/folders.es.js";
17
+ import "../../../api/generated/inbox.es.js";
18
+ import "../../../api/generated/links.es.js";
19
+ import "../../../api/generated/market.es.js";
20
+ import "../../../api/generated/onboarding.es.js";
21
+ import "../../../api/generated/operations.es.js";
22
+ import "../../../api/generated/products.es.js";
23
+ import "../../../api/generated/projectDashboard.es.js";
24
+ import "../../../api/generated/projects.es.js";
25
+ import "../../../api/generated/reviewables.es.js";
26
+ import "../../../api/generated/services.es.js";
27
+ import "../../../api/generated/system.es.js";
28
+ import "../../../api/generated/tasks.es.js";
29
+ import "../../../api/generated/teams.es.js";
30
+ import "../../../api/generated/thumbnails.es.js";
31
+ import "../../../api/generated/uRIs.es.js";
32
+ import "../../../api/generated/users.es.js";
33
+ import "../../../api/generated/versions.es.js";
34
+ import "../../../api/generated/workfiles.es.js";
35
+ import "../../../api/generated/ynputCloud.es.js";
36
+ import "../../../api/generated/grouping.es.js";
37
+ import "../../../api/queries/actions/getActions.es.js";
38
+ import "../../../api/queries/activities/getActivities.es.js";
39
+ import "../../../api/queries/activities/updateActivities.es.js";
40
+ import "../../../api/queries/activities/updateReaction.es.js";
41
+ import "../../../api/queries/activities/getMentions.es.js";
42
+ import "../../../api/queries/addons/getAddons.es.js";
43
+ import "../../../api/queries/addons/updateAddons.es.js";
44
+ import "../../../api/queries/attributes/getAttributes.es.js";
45
+ import "../../../api/queries/attributes/updateAttributes.es.js";
46
+ import "../../../api/queries/authentication/getAuthentication.es.js";
47
+ import "../../../api/queries/entities/getEntity.es.js";
48
+ import "../../../api/queries/entities/getEntityPanel.es.js";
49
+ import "../../../api/queries/entities/updateEntity.es.js";
50
+ import "../../../api/queries/entityLists/getLists.es.js";
51
+ import "../../../api/queries/entityLists/updateLists.es.js";
52
+ import "../../../api/queries/entityLists/getListsAttributes.es.js";
53
+ import "../../../api/queries/entityLists/updateListsAttributes.es.js";
54
+ import "../../../api/queries/folders/getFolders.es.js";
55
+ import "../../../api/queries/overview/getOverview.es.js";
56
+ import "../../../api/queries/overview/updateOverview.es.js";
57
+ import "../../../api/queries/project/getProject.es.js";
58
+ import "../../../api/queries/project/updateProject.es.js";
59
+ import "../../../api/queries/review/getReview.es.js";
60
+ import "../../../api/queries/review/updateReview.es.js";
61
+ import "../../../api/queries/system/getSystem.es.js";
62
+ import "../../../api/queries/userDashboard/getUserDashboard.es.js";
63
+ import "../../../api/queries/users/getUsers.es.js";
64
+ import "../../../api/queries/users/updateUsers.es.js";
65
+ import "../../../api/queries/watchers/getWatchers.es.js";
66
+ import "../../../api/queries/permissions/getPermissions.es.js";
67
+ import { useGetEntityGroupsQuery } from "../../../api/queries/grouping/getGrouping.es.js";
68
+ const useGetTaskGroups = ({ groupBy, projectName }) => {
69
+ const groupingKey = (groupBy == null ? void 0 : groupBy.id) || "";
70
+ const { data: { groups: taskGroups = [] } = {}, error } = useGetEntityGroupsQuery(
71
+ { projectName, entityType: "task", groupingKey, empty: true },
72
+ { skip: !(groupBy == null ? void 0 : groupBy.id) }
73
+ );
74
+ return {
75
+ taskGroups,
76
+ error
77
+ };
78
+ };
79
+ export {
80
+ useGetTaskGroups
81
+ };
82
+ //# sourceMappingURL=useGetTaskGroups.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGetTaskGroups.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useGetTaskGroups.ts"],"sourcesContent":["import { useGetEntityGroupsQuery } from '@shared/api'\nimport { TableGroupBy } from '../context'\n\ntype GetTaskGroupsProps = {\n groupBy?: TableGroupBy\n projectName: string\n}\n\nexport const useGetTaskGroups = ({ groupBy, projectName }: GetTaskGroupsProps) => {\n // GROUPING\n // 1. get groups data\n // 2. add that filter to the combined filter\n // 3. sort by that filter\n const groupingKey = groupBy?.id || ''\n const { data: { groups: taskGroups = [] } = {}, error } = useGetEntityGroupsQuery(\n { projectName, entityType: 'task', groupingKey: groupingKey, empty: true },\n { skip: !groupBy?.id },\n )\n\n return {\n taskGroups,\n error,\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQO,MAAM,mBAAmB,CAAC,EAAE,SAAS,kBAAsC;AAK1E,QAAA,eAAc,mCAAS,OAAM;AAC7B,QAAA,EAAE,MAAM,EAAE,QAAQ,aAAa,CAAA,MAAO,CAAA,GAAI,MAAA,IAAU;AAAA,IACxD,EAAE,aAAa,YAAY,QAAQ,aAA0B,OAAO,KAAK;AAAA,IACzE,EAAE,MAAM,EAAC,mCAAS,IAAG;AAAA,EACvB;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const React = require("react");
4
+ const clientFilterToQueryFilter = require("../utils/clientFilterToQueryFilter.cjs.js");
5
+ require("lodash");
6
+ require("react-toastify");
7
+ require("../../../util/pubsub.cjs.js");
8
+ require("../context/CellEditingContext.cjs.js");
9
+ require("../context/ClipboardContext.cjs.js");
10
+ require("../context/ColumnSettingsContext.cjs.js");
11
+ require("../context/ProjectTableContext.cjs.js");
12
+ require("../context/ProjectTableQueriesContext.cjs.js");
13
+ require("../context/SelectedRowsContext.cjs.js");
14
+ require("../context/SelectionCellsContext.cjs.js");
15
+ require("../context/ProjectTableSelectionContext.cjs.js");
16
+ require("../context/ProjectDataContext.cjs.js");
17
+ require("../context/ProjectTableModulesContext.cjs.js");
18
+ const useQueryFilters = ({
19
+ filters,
20
+ sliceFilter
21
+ }) => {
22
+ return React.useMemo(() => {
23
+ var _a, _b, _c, _d;
24
+ let combinedFilters = [...filters];
25
+ if ((_a = sliceFilter == null ? void 0 : sliceFilter.values) == null ? void 0 : _a.length) {
26
+ combinedFilters.push(sliceFilter);
27
+ }
28
+ const queryFilter = clientFilterToQueryFilter.clientFilterToQueryFilter(combinedFilters);
29
+ const queryFilterString = combinedFilters.length ? JSON.stringify(queryFilter) : "";
30
+ const fuzzySearchFilter = (_d = (_c = (_b = combinedFilters.find((filter) => filter.id.includes("text"))) == null ? void 0 : _b.values) == null ? void 0 : _c[0]) == null ? void 0 : _d.id;
31
+ return {
32
+ filterString: queryFilterString,
33
+ filter: queryFilter,
34
+ search: fuzzySearchFilter,
35
+ combinedFilters
36
+ };
37
+ }, [filters, sliceFilter]);
38
+ };
39
+ exports.useQueryFilters = useQueryFilters;
40
+ //# sourceMappingURL=useQueryFilters.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQueryFilters.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useQueryFilters.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { Filter } from '@ynput/ayon-react-components'\nimport { type QueryTasksFoldersApiArg } from '@shared/api'\nimport { clientFilterToQueryFilter } from '@shared/containers/ProjectTreeTable/utils'\n\ninterface UseQueryFiltersProps {\n filters: Filter[]\n sliceFilter?: Filter | null\n}\n\ninterface QueryFiltersResult {\n filter: QueryTasksFoldersApiArg['tasksFoldersQuery']['filter']\n filterString?: string\n search: QueryTasksFoldersApiArg['tasksFoldersQuery']['search']\n combinedFilters: Filter[]\n}\n\nexport const useQueryFilters = ({\n filters,\n sliceFilter,\n}: UseQueryFiltersProps): QueryFiltersResult => {\n return useMemo(() => {\n // merge the slice filter with the user filters\n let combinedFilters = [...filters]\n if (sliceFilter?.values?.length) {\n combinedFilters.push(sliceFilter as Filter)\n }\n\n // transform the task bar filters to the query format\n const queryFilter = clientFilterToQueryFilter(combinedFilters)\n const queryFilterString = combinedFilters.length ? JSON.stringify(queryFilter) : ''\n // extract the fuzzy search from the filters\n const fuzzySearchFilter = combinedFilters.find((filter) => filter.id.includes('text'))\n ?.values?.[0]?.id\n\n return {\n filterString: queryFilterString,\n filter: queryFilter,\n search: fuzzySearchFilter,\n combinedFilters,\n }\n }, [filters, sliceFilter])\n}\n"],"names":["useMemo","clientFilterToQueryFilter"],"mappings":";;;;;;;;;;;;;;;;;AAiBO,MAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AACF,MAAgD;AAC9C,SAAOA,cAAQ,MAAM;;AAEf,QAAA,kBAAkB,CAAC,GAAG,OAAO;AAC7B,SAAA,gDAAa,WAAb,mBAAqB,QAAQ;AAC/B,sBAAgB,KAAK,WAAqB;AAAA,IAAA;AAItC,UAAA,cAAcC,oDAA0B,eAAe;AAC7D,UAAM,oBAAoB,gBAAgB,SAAS,KAAK,UAAU,WAAW,IAAI;AAEjF,UAAM,qBAAoB,iCAAgB,KAAK,CAAC,WAAW,OAAO,GAAG,SAAS,MAAM,CAAC,MAA3D,mBACtB,WADsB,mBACb,OADa,mBACT;AAEV,WAAA;AAAA,MACL,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,EAAA,GACC,CAAC,SAAS,WAAW,CAAC;AAC3B;;"}
@@ -0,0 +1,40 @@
1
+ import { useMemo } from "react";
2
+ import { clientFilterToQueryFilter } from "../utils/clientFilterToQueryFilter.es.js";
3
+ import "lodash";
4
+ import "react-toastify";
5
+ import "../../../util/pubsub.es.js";
6
+ import "../context/CellEditingContext.es.js";
7
+ import "../context/ClipboardContext.es.js";
8
+ import "../context/ColumnSettingsContext.es.js";
9
+ import "../context/ProjectTableContext.es.js";
10
+ import "../context/ProjectTableQueriesContext.es.js";
11
+ import "../context/SelectedRowsContext.es.js";
12
+ import "../context/SelectionCellsContext.es.js";
13
+ import "../context/ProjectTableSelectionContext.es.js";
14
+ import "../context/ProjectDataContext.es.js";
15
+ import "../context/ProjectTableModulesContext.es.js";
16
+ const useQueryFilters = ({
17
+ filters,
18
+ sliceFilter
19
+ }) => {
20
+ return useMemo(() => {
21
+ var _a, _b, _c, _d;
22
+ let combinedFilters = [...filters];
23
+ if ((_a = sliceFilter == null ? void 0 : sliceFilter.values) == null ? void 0 : _a.length) {
24
+ combinedFilters.push(sliceFilter);
25
+ }
26
+ const queryFilter = clientFilterToQueryFilter(combinedFilters);
27
+ const queryFilterString = combinedFilters.length ? JSON.stringify(queryFilter) : "";
28
+ const fuzzySearchFilter = (_d = (_c = (_b = combinedFilters.find((filter) => filter.id.includes("text"))) == null ? void 0 : _b.values) == null ? void 0 : _c[0]) == null ? void 0 : _d.id;
29
+ return {
30
+ filterString: queryFilterString,
31
+ filter: queryFilter,
32
+ search: fuzzySearchFilter,
33
+ combinedFilters
34
+ };
35
+ }, [filters, sliceFilter]);
36
+ };
37
+ export {
38
+ useQueryFilters
39
+ };
40
+ //# sourceMappingURL=useQueryFilters.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQueryFilters.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useQueryFilters.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { Filter } from '@ynput/ayon-react-components'\nimport { type QueryTasksFoldersApiArg } from '@shared/api'\nimport { clientFilterToQueryFilter } from '@shared/containers/ProjectTreeTable/utils'\n\ninterface UseQueryFiltersProps {\n filters: Filter[]\n sliceFilter?: Filter | null\n}\n\ninterface QueryFiltersResult {\n filter: QueryTasksFoldersApiArg['tasksFoldersQuery']['filter']\n filterString?: string\n search: QueryTasksFoldersApiArg['tasksFoldersQuery']['search']\n combinedFilters: Filter[]\n}\n\nexport const useQueryFilters = ({\n filters,\n sliceFilter,\n}: UseQueryFiltersProps): QueryFiltersResult => {\n return useMemo(() => {\n // merge the slice filter with the user filters\n let combinedFilters = [...filters]\n if (sliceFilter?.values?.length) {\n combinedFilters.push(sliceFilter as Filter)\n }\n\n // transform the task bar filters to the query format\n const queryFilter = clientFilterToQueryFilter(combinedFilters)\n const queryFilterString = combinedFilters.length ? JSON.stringify(queryFilter) : ''\n // extract the fuzzy search from the filters\n const fuzzySearchFilter = combinedFilters.find((filter) => filter.id.includes('text'))\n ?.values?.[0]?.id\n\n return {\n filterString: queryFilterString,\n filter: queryFilter,\n search: fuzzySearchFilter,\n combinedFilters,\n }\n }, [filters, sliceFilter])\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAiBO,MAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AACF,MAAgD;AAC9C,SAAO,QAAQ,MAAM;;AAEf,QAAA,kBAAkB,CAAC,GAAG,OAAO;AAC7B,SAAA,gDAAa,WAAb,mBAAqB,QAAQ;AAC/B,sBAAgB,KAAK,WAAqB;AAAA,IAAA;AAItC,UAAA,cAAc,0BAA0B,eAAe;AAC7D,UAAM,oBAAoB,gBAAgB,SAAS,KAAK,UAAU,WAAW,IAAI;AAEjF,UAAM,qBAAoB,iCAAgB,KAAK,CAAC,WAAW,OAAO,GAAG,SAAS,MAAM,CAAC,MAA3D,mBACtB,WADsB,mBACb,OADa,mBACT;AAEV,WAAA;AAAA,MACL,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,EAAA,GACC,CAAC,SAAS,WAAW,CAAC;AAC3B;"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const React = require("react");
4
+ const useScopedAttributeFields = ({
5
+ attribFields,
6
+ allowedScopes = ["task", "folder"]
7
+ }) => {
8
+ return React.useMemo(
9
+ () => attribFields.filter(
10
+ (field) => allowedScopes.some((scope) => {
11
+ var _a;
12
+ return (_a = field.scope) == null ? void 0 : _a.includes(scope);
13
+ })
14
+ ),
15
+ [attribFields, allowedScopes]
16
+ );
17
+ };
18
+ exports.useScopedAttributeFields = useScopedAttributeFields;
19
+ //# sourceMappingURL=useScopedAttributeFields.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScopedAttributeFields.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.ts"],"sourcesContent":["import { useMemo } from 'react'\n\n// Define a minimal interface that covers both AttributeField and ProjectTableAttribute\ninterface AttributeField {\n scope?: string[]\n [key: string]: any\n}\n\ninterface UseScopedAttributeFieldsProps<T extends AttributeField> {\n attribFields: T[]\n allowedScopes?: string[]\n}\n\nexport const useScopedAttributeFields = <T extends AttributeField>({\n attribFields,\n allowedScopes = ['task', 'folder'],\n}: UseScopedAttributeFieldsProps<T>): T[] => {\n return useMemo(\n () =>\n attribFields.filter((field) =>\n allowedScopes.some((scope) => field.scope?.includes(scope)),\n ),\n [attribFields, allowedScopes],\n )\n}\n"],"names":["useMemo"],"mappings":";;;AAaO,MAAM,2BAA2B,CAA2B;AAAA,EACjE;AAAA,EACA,gBAAgB,CAAC,QAAQ,QAAQ;AACnC,MAA6C;AACpC,SAAAA,MAAA;AAAA,IACL,MACE,aAAa;AAAA,MAAO,CAAC,UACnB,cAAc,KAAK,CAAC;;AAAU,2BAAM,UAAN,mBAAa,SAAS;AAAA,OAAM;AAAA,IAC5D;AAAA,IACF,CAAC,cAAc,aAAa;AAAA,EAC9B;AACF;;"}
@@ -0,0 +1,19 @@
1
+ import { useMemo } from "react";
2
+ const useScopedAttributeFields = ({
3
+ attribFields,
4
+ allowedScopes = ["task", "folder"]
5
+ }) => {
6
+ return useMemo(
7
+ () => attribFields.filter(
8
+ (field) => allowedScopes.some((scope) => {
9
+ var _a;
10
+ return (_a = field.scope) == null ? void 0 : _a.includes(scope);
11
+ })
12
+ ),
13
+ [attribFields, allowedScopes]
14
+ );
15
+ };
16
+ export {
17
+ useScopedAttributeFields
18
+ };
19
+ //# sourceMappingURL=useScopedAttributeFields.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScopedAttributeFields.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.ts"],"sourcesContent":["import { useMemo } from 'react'\n\n// Define a minimal interface that covers both AttributeField and ProjectTableAttribute\ninterface AttributeField {\n scope?: string[]\n [key: string]: any\n}\n\ninterface UseScopedAttributeFieldsProps<T extends AttributeField> {\n attribFields: T[]\n allowedScopes?: string[]\n}\n\nexport const useScopedAttributeFields = <T extends AttributeField>({\n attribFields,\n allowedScopes = ['task', 'folder'],\n}: UseScopedAttributeFieldsProps<T>): T[] => {\n return useMemo(\n () =>\n attribFields.filter((field) =>\n allowedScopes.some((scope) => field.scope?.includes(scope)),\n ),\n [attribFields, allowedScopes],\n )\n}\n"],"names":[],"mappings":";AAaO,MAAM,2BAA2B,CAA2B;AAAA,EACjE;AAAA,EACA,gBAAgB,CAAC,QAAQ,QAAQ;AACnC,MAA6C;AACpC,SAAA;AAAA,IACL,MACE,aAAa;AAAA,MAAO,CAAC,UACnB,cAAc,KAAK,CAAC;;AAAU,2BAAM,UAAN,mBAAa,SAAS;AAAA,OAAM;AAAA,IAC5D;AAAA,IACF,CAAC,cAAc,aAAa;AAAA,EAC9B;AACF;"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const React = require("react");
4
+ const useSelectedFolders = ({
5
+ rowSelection,
6
+ sliceType,
7
+ persistentRowSelectionData
8
+ }) => {
9
+ return React.useMemo(() => {
10
+ let selection = {};
11
+ if (sliceType === "hierarchy") {
12
+ selection = rowSelection;
13
+ } else if (persistentRowSelectionData) {
14
+ selection = Object.values(persistentRowSelectionData).reduce(
15
+ (acc, item) => {
16
+ acc[item.id] = !!item;
17
+ return acc;
18
+ },
19
+ {}
20
+ );
21
+ }
22
+ return Object.entries(selection).filter(([, value]) => value).map(([id]) => id);
23
+ }, [rowSelection, persistentRowSelectionData, sliceType]);
24
+ };
25
+ exports.useSelectedFolders = useSelectedFolders;
26
+ //# sourceMappingURL=useSelectedFolders.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSelectedFolders.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useSelectedFolders.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { RowSelectionState } from '@tanstack/react-table'\n\ninterface UseSelectedFoldersProps {\n rowSelection: RowSelectionState\n sliceType: string\n persistentRowSelectionData: Record<string, { id: string }> | null\n}\n\nexport const useSelectedFolders = ({\n rowSelection,\n sliceType,\n persistentRowSelectionData,\n}: UseSelectedFoldersProps): string[] => {\n return useMemo(() => {\n let selection: RowSelectionState = {}\n\n if (sliceType === 'hierarchy') {\n selection = rowSelection\n } else if (persistentRowSelectionData) {\n selection = Object.values(persistentRowSelectionData).reduce(\n (acc: RowSelectionState, item) => {\n acc[item.id] = !!item\n return acc\n },\n {},\n )\n }\n\n // Process the selection inside useMemo\n return Object.entries(selection)\n .filter(([, value]) => value)\n .map(([id]) => id)\n }, [rowSelection, persistentRowSelectionData, sliceType])\n}\n"],"names":["useMemo"],"mappings":";;;AASO,MAAM,qBAAqB,CAAC;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,MAAyC;AACvC,SAAOA,cAAQ,MAAM;AACnB,QAAI,YAA+B,CAAC;AAEpC,QAAI,cAAc,aAAa;AACjB,kBAAA;AAAA,eACH,4BAA4B;AACzB,kBAAA,OAAO,OAAO,0BAA0B,EAAE;AAAA,QACpD,CAAC,KAAwB,SAAS;AAChC,cAAI,KAAK,EAAE,IAAI,CAAC,CAAC;AACV,iBAAA;AAAA,QACT;AAAA,QACA,CAAA;AAAA,MACF;AAAA,IAAA;AAIF,WAAO,OAAO,QAAQ,SAAS,EAC5B,OAAO,CAAC,CAAG,EAAA,KAAK,MAAM,KAAK,EAC3B,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE;AAAA,EAClB,GAAA,CAAC,cAAc,4BAA4B,SAAS,CAAC;AAC1D;;"}
@@ -0,0 +1,26 @@
1
+ import { useMemo } from "react";
2
+ const useSelectedFolders = ({
3
+ rowSelection,
4
+ sliceType,
5
+ persistentRowSelectionData
6
+ }) => {
7
+ return useMemo(() => {
8
+ let selection = {};
9
+ if (sliceType === "hierarchy") {
10
+ selection = rowSelection;
11
+ } else if (persistentRowSelectionData) {
12
+ selection = Object.values(persistentRowSelectionData).reduce(
13
+ (acc, item) => {
14
+ acc[item.id] = !!item;
15
+ return acc;
16
+ },
17
+ {}
18
+ );
19
+ }
20
+ return Object.entries(selection).filter(([, value]) => value).map(([id]) => id);
21
+ }, [rowSelection, persistentRowSelectionData, sliceType]);
22
+ };
23
+ export {
24
+ useSelectedFolders
25
+ };
26
+ //# sourceMappingURL=useSelectedFolders.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSelectedFolders.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useSelectedFolders.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { RowSelectionState } from '@tanstack/react-table'\n\ninterface UseSelectedFoldersProps {\n rowSelection: RowSelectionState\n sliceType: string\n persistentRowSelectionData: Record<string, { id: string }> | null\n}\n\nexport const useSelectedFolders = ({\n rowSelection,\n sliceType,\n persistentRowSelectionData,\n}: UseSelectedFoldersProps): string[] => {\n return useMemo(() => {\n let selection: RowSelectionState = {}\n\n if (sliceType === 'hierarchy') {\n selection = rowSelection\n } else if (persistentRowSelectionData) {\n selection = Object.values(persistentRowSelectionData).reduce(\n (acc: RowSelectionState, item) => {\n acc[item.id] = !!item\n return acc\n },\n {},\n )\n }\n\n // Process the selection inside useMemo\n return Object.entries(selection)\n .filter(([, value]) => value)\n .map(([id]) => id)\n }, [rowSelection, persistentRowSelectionData, sliceType])\n}\n"],"names":[],"mappings":";AASO,MAAM,qBAAqB,CAAC;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,MAAyC;AACvC,SAAO,QAAQ,MAAM;AACnB,QAAI,YAA+B,CAAC;AAEpC,QAAI,cAAc,aAAa;AACjB,kBAAA;AAAA,eACH,4BAA4B;AACzB,kBAAA,OAAO,OAAO,0BAA0B,EAAE;AAAA,QACpD,CAAC,KAAwB,SAAS;AAChC,cAAI,KAAK,EAAE,IAAI,CAAC,CAAC;AACV,iBAAA;AAAA,QACT;AAAA,QACA,CAAA;AAAA,MACF;AAAA,IAAA;AAIF,WAAO,OAAO,QAAQ,SAAS,EAC5B,OAAO,CAAC,CAAG,EAAA,KAAK,MAAM,KAAK,EAC3B,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE;AAAA,EAClB,GAAA,CAAC,cAAc,4BAA4B,SAAS,CAAC;AAC1D;"}
@@ -24,7 +24,10 @@ const useUpdateTableData = (props) => {
24
24
  ({ rowId, id, type, field, isAttrib, meta }) => {
25
25
  var _a2;
26
26
  const entityData = getEntityById(id);
27
- const entityId = (entityData == null ? void 0 : entityData.entityId) || id;
27
+ if (!entityData) {
28
+ throw "Entity not found: " + id;
29
+ }
30
+ const entityId = (entityData == null ? void 0 : entityData.entityId) || entityData.id;
28
31
  const oldValue = isAttrib ? ((_a2 = entityData.attrib) == null ? void 0 : _a2[field]) ?? null : entityData[field] ?? null;
29
32
  const ownAttrib = (entityData == null ? void 0 : entityData.ownAttrib) || [];
30
33
  const wasInherited = isAttrib && !ownAttrib.includes(field);
@@ -46,7 +49,7 @@ const useUpdateTableData = (props) => {
46
49
  const historyEntities = entities.flatMap(
47
50
  ({ rowId, id, type, field, value, isAttrib, meta }) => {
48
51
  const entityData = getEntityById(id);
49
- const entityId = (entityData == null ? void 0 : entityData.entityId) || id;
52
+ const entityId = (entityData == null ? void 0 : entityData.entityId) || (entityData == null ? void 0 : entityData.id) || id;
50
53
  if (!entityData) return [];
51
54
  return {
52
55
  rowId,
@@ -73,7 +76,7 @@ const useUpdateTableData = (props) => {
73
76
  for (const entity of entities) {
74
77
  let { id, type, field, value, isAttrib, meta } = entity;
75
78
  const entityData = getEntityById(id);
76
- const entityId = (entityData == null ? void 0 : entityData.entityId) || id;
79
+ const entityId = (entityData == null ? void 0 : entityData.entityId) || (entityData == null ? void 0 : entityData.id) || id;
77
80
  let entityType = type;
78
81
  if (!supportedEntityTypes.includes(entityType)) {
79
82
  continue;
@@ -159,7 +162,7 @@ const useUpdateTableData = (props) => {
159
162
  if ((entityData == null ? void 0 : entityData.attrib) && attrib in entityData.attrib) {
160
163
  undoEntities.push({
161
164
  rowId: entity.rowId,
162
- id: entity.entityId,
165
+ id: (entityData == null ? void 0 : entityData.entityId) || (entityData == null ? void 0 : entityData.id) || entity.entityId,
163
166
  type: entity.entityType,
164
167
  field: attrib,
165
168
  value: entityData.attrib[attrib],
@@ -1 +1 @@
1
- {"version":3,"file":"useUpdateTableData.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useUpdateTableData.ts"],"sourcesContent":["import { CellId } from '../utils/cellUtils'\nimport { CellValue } from '../widgets/CellWidget'\nimport { toast } from 'react-toastify'\nimport { useProjectTableQueriesContext } from '../context/ProjectTableQueriesContext'\nimport { useCallback } from 'react'\nimport { InheritedDependent } from './useFolderRelationships'\nimport { useProjectTableContext } from '../context/ProjectTableContext'\nimport { OperationModel } from '../types/operations'\nimport { PatchOperation } from '../types'\nimport { HistoryEntityUpdate, UseHistoryReturn } from './useHistory'\n\nexport type EntityUpdate = {\n rowId: string\n id: string\n type: string\n field: string\n value: CellValue | CellValue[] | null\n isAttrib?: boolean\n meta?: Record<string, any>\n}\nexport type UpdateTableEntities = (entities: EntityUpdate[], pushHistory?: boolean) => Promise<void>\n\nexport type InheritFromParentEntity = {\n rowId: string\n entityId: string\n entityType: string\n attribs: string[]\n ownAttrib: string[]\n folderId: string\n meta?: Record<string, any>\n}\nexport type InheritFromParent = (\n entities: InheritFromParentEntity[],\n pushHistory?: boolean,\n) => Promise<void>\n\nexport type UpdateTableEntity = (\n cellId: CellId,\n value: string,\n { includeSelection }: { includeSelection: boolean },\n) => Promise<void>\n\nexport type OperationWithRowId = OperationModel & { rowId: string; meta?: Record<string, any> }\n\ninterface UseUpdateTableDataProps {\n pushHistory?: UseHistoryReturn['pushHistory']\n}\n\nconst useUpdateTableData = (props?: UseUpdateTableDataProps) => {\n const { pushHistory } = props || {}\n const {\n getEntityById,\n projectName,\n getInheritedDependents,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n } = useProjectTableContext()\n const { updateEntities } = useProjectTableQueriesContext()\n\n const handleUpdateEntities = useCallback<UpdateTableEntities>(\n async (entities = [], pushToHistory = true) => {\n if (!entities.length || !projectName) {\n return\n }\n\n // Record history of previous values before applying update\n if (pushHistory && pushToHistory) {\n const inverseEntities: HistoryEntityUpdate[] = entities.map(\n ({ rowId, id, type, field, isAttrib, meta }) => {\n const entityData = getEntityById(id) as Record<string, any>\n const entityId = entityData?.entityId || id\n const oldValue = isAttrib\n ? (entityData.attrib as Record<string, any>)?.[field] ?? null\n : entityData[field] ?? null\n\n // Check if the field was inherited (not in ownAttrib)\n const ownAttrib = entityData?.ownAttrib || []\n const wasInherited = isAttrib && !ownAttrib.includes(field)\n\n return {\n rowId: rowId,\n id: entityId,\n type,\n field,\n value: oldValue,\n isAttrib,\n wasInherited, // Track inheritance status for undo\n ownAttrib: ownAttrib,\n folderId: entityData?.folderId,\n meta,\n }\n },\n )\n const historyEntities: HistoryEntityUpdate[] = entities.flatMap(\n ({ rowId, id, type, field, value, isAttrib, meta }) => {\n const entityData = getEntityById(id)\n const entityId = entityData?.entityId || id\n\n if (!entityData) return []\n\n return {\n rowId: rowId,\n id: entityId,\n type,\n field,\n value,\n isAttrib,\n ownAttrib: entityData?.ownAttrib || [],\n folderId: 'folderId' in entityData ? entityData.folderId : entityData?.parentId,\n meta,\n }\n },\n )\n pushHistory(inverseEntities, historyEntities)\n }\n\n const supportedEntityTypes: OperationModel['entityType'][] = [\n 'task',\n 'folder',\n 'product',\n 'version',\n ]\n // Group operations by entity type for bulk processing\n let operations: OperationWithRowId[] = []\n for (const entity of entities) {\n let { id, type, field, value, isAttrib, meta } = entity\n const entityData = getEntityById(id)\n const entityId = entityData?.entityId || id\n // Skip unsupported entity types\n let entityType = type as OperationModel['entityType']\n if (!supportedEntityTypes.includes(entityType)) {\n continue\n }\n\n // create data object for change, taking into account if it's an attribute change\n const data: Record<string, any> = isAttrib\n ? { attrib: { [field]: value } }\n : { [field]: value }\n\n // if the entity is an attribute get the entity data\n // then update ownAttrib to include the new value\n if (isAttrib) {\n const ownAttrib = [...(entityData?.ownAttrib || [])]\n // add the new value to the ownAttrib if it doesn't already exist\n if (!ownAttrib.includes(field)) {\n ownAttrib.push(field)\n }\n // update the data object with the new ownAttrib\n data.ownAttrib = ownAttrib\n }\n\n const existingOperationIndex = operations.findIndex(\n (op) => op.entityId === entityId && op.entityType === entityType,\n )\n\n if (existingOperationIndex !== -1) {\n // Merge data with existing operation\n const existingOperation = operations[existingOperationIndex]\n let newData = { ...existingOperation.data, ...data }\n\n // @ts-ignore\n if (existingOperation.data?.attrib && data.attrib) {\n // @ts-ignore\n newData = { ...newData, attrib: { ...existingOperation.data.attrib, ...data.attrib } }\n }\n\n operations[existingOperationIndex] = {\n ...existingOperation,\n data: newData,\n }\n } else {\n // Add new operation\n operations.push({\n rowId: entity.rowId,\n entityType: entityType,\n entityId: entityId,\n type: 'update',\n data: data,\n meta: meta,\n })\n }\n }\n\n const folderAttribEntities: InheritedDependent[] = operations\n .filter((op) => !!op.entityId && op.type === 'update' && op.data && 'attrib' in op.data)\n .map((op) => ({\n entityId: op.entityId as string,\n entityType: op.entityType as 'folder' | 'task',\n attrib:\n op.data && 'attrib' in op.data ? (op.data?.attrib as InheritedDependent['attrib']) : {},\n }))\n\n const inheritedDependents = getInheritedDependents(folderAttribEntities)\n\n // convert to operations\n const inheritedDependentsOperations: PatchOperation[] = inheritedDependents.map((op) => ({\n entityId: op.entityId,\n entityType: op.entityType,\n data: {\n attrib: op.attrib,\n },\n }))\n\n // now make api call to update all entities\n try {\n await updateEntities({\n operations,\n patchOperations: inheritedDependentsOperations,\n })\n } catch (error: any) {\n console.error('Error updating entities:', error)\n toast.error('Failed to update entities: ' + error?.error)\n }\n },\n [\n projectName,\n updateEntities, //\n getEntityById,\n getInheritedDependents,\n pushHistory,\n ],\n )\n\n // set the attrib fields to be inherited from the parent\n // (remove the field from the ownAttrib array)\n // invalidate the cache for the folder/task so that it can be re-fetched with inherited values\n const inheritFromParent = useCallback<InheritFromParent>(\n async (entities, pushToHistory = true) => {\n if (!entities.length || !projectName) {\n return\n }\n\n // Record history for the inheritance operation\n if (pushToHistory && pushHistory) {\n // Create undo entities (restore explicit values)\n const undoEntities: HistoryEntityUpdate[] = []\n\n // For each entity and attribute being inherited, record current values\n for (const entity of entities) {\n const entityData = getEntityById(entity.entityId) as Record<string, any>\n\n // For each attribute that will be inherited, record its current value\n for (const attrib of entity.attribs) {\n if (entityData?.attrib && attrib in entityData.attrib) {\n undoEntities.push({\n rowId: entity.rowId,\n id: entity.entityId,\n type: entity.entityType,\n field: attrib,\n value: (entityData.attrib as Record<string, any>)[attrib],\n isAttrib: true,\n wasInherited: false, // Mark as not inherited\n ownAttrib: entityData?.ownAttrib || [],\n folderId: entityData?.folderId,\n meta: entityData.meta,\n })\n }\n }\n }\n\n // Create redo entities (to re-inherit)\n const redoEntities: HistoryEntityUpdate[] = entities.flatMap((entity) =>\n entity.attribs.map((attrib) => ({\n rowId: entity.rowId,\n id: entity.entityId,\n type: entity.entityType,\n field: attrib,\n value: null,\n isAttrib: true,\n wasInherited: true, // Mark as inherited\n ownAttrib: entity.ownAttrib,\n folderId: entity.folderId,\n meta: entity.meta,\n })),\n )\n\n // Push to history if we have changes to record\n if (undoEntities.length > 0) {\n pushHistory(undoEntities, redoEntities)\n }\n }\n\n const supportedEntityTypes: OperationModel['entityType'][] = ['task', 'folder']\n // Group operations by entity type for bulk processing\n const operations: OperationWithRowId[] = [] // operations sent to the server\n const entitiesToPatch: InheritFromParentEntity[] = []\n for (const entity of entities) {\n // Skip unsupported entity types\n let entityType = entity.entityType as OperationModel['entityType']\n if (!supportedEntityTypes.includes(entityType)) {\n continue\n }\n entityType = entityType as 'task' | 'folder'\n\n // Create data object with null values for each attrib to inherit\n const attribData: Record<string, null> = {}\n entity.attribs.forEach((attrib) => {\n attribData[attrib] = null\n })\n\n // Add new operation this is what's sent to the server and is actually updated in the DB\n operations.push({\n rowId: entity.rowId,\n entityType: entityType,\n entityId: entity.entityId,\n type: 'update',\n data: {\n attrib: attribData,\n },\n meta: entity.meta,\n })\n\n // check if this entity has a folderId that is in entities\n // if so we check their intersection attrib names\n const findTopFolder = () => {\n // For each entity, we need to find the top-most folder in the hierarchy\n const folderId = entity.folderId\n\n // Find all ancestor folders that are in our entities list\n const ancestorChain: InheritFromParentEntity[] = []\n let currentFolderId = folderId\n let currentFolder = entities.find((e) => e.entityId === currentFolderId)\n\n // Climb up the folder hierarchy to build the chain of ancestors\n while (currentFolder) {\n ancestorChain.push(currentFolder)\n currentFolderId = currentFolder.folderId\n currentFolder = entities.find((e) => e.entityId === currentFolderId)\n }\n\n // The top folder is the last one in our ancestor chain (if any)\n const topFolder =\n ancestorChain.length > 0 ? ancestorChain[ancestorChain.length - 1] : null\n\n return topFolder\n }\n\n const topFolder = findTopFolder()\n const folderAttribs = topFolder?.attribs || []\n const entityAttribsIntersection = entity.attribs.filter((attrib) =>\n folderAttribs.includes(attrib),\n )\n const entityAttribsRemoved = entity.attribs.filter(\n (attrib) => !folderAttribs.includes(attrib),\n )\n\n // only add to patch operations if there are attribs left\n if (entityAttribsRemoved.length > 0)\n entitiesToPatch.push({\n ...entity,\n attribs: entityAttribsRemoved,\n })\n\n if (topFolder && entityAttribsIntersection.length > 0) {\n entitiesToPatch.push({\n ...entity,\n attribs: entityAttribsIntersection,\n folderId: topFolder.folderId,\n })\n }\n }\n\n const patchOperations: PatchOperation[] = [] // operations only for patching the cache\n for (const entity of entitiesToPatch) {\n const entityType = entity.entityType as 'task' | 'folder'\n // we also need to update ownAttrib to remove the inherited attribs\n const ownAttrib = [...(entity.ownAttrib || [])].filter(\n (attrib) => !entity.attribs.includes(attrib),\n )\n\n // now we must calculate all the entities that need to be updated in the cache\n // first we need to find the the ancestor folder to inherit from\n const ancestorAttrib = findNonInheritedValues(entity.folderId, entity.attribs)\n\n const entityPatch = {\n entityId: entity.entityId,\n entityType: entityType,\n data: {\n attrib: ancestorAttrib,\n ownAttrib: ownAttrib,\n },\n }\n\n // create new patch operation for the entity\n patchOperations.push(entityPatch)\n\n // now find any dependent that also need updating\n const inheritedDependents = getInheritedDependents([\n { entityId: entity.entityId, entityType: entityType, attrib: ancestorAttrib },\n ])\n\n // convert to operations\n const inheritedDependentsOperations: PatchOperation[] = inheritedDependents.map((op) => ({\n entityId: op.entityId,\n entityType: op.entityType,\n data: {\n attrib: op.attrib,\n },\n }))\n\n // try to add to patch operations\n // if it already exists then merge the attribs\n for (const inheritedDependent of inheritedDependentsOperations) {\n const existingOperationIndex = patchOperations.findIndex(\n (op) => op.entityId === inheritedDependent.entityId,\n )\n\n if (existingOperationIndex !== -1) {\n // Merge attribs with existing operation\n const existingOperation = patchOperations[existingOperationIndex]\n let newAttrib = {\n // @ts-ignore\n ...(existingOperation.data?.attrib || {}),\n // @ts-ignore\n ...(inheritedDependent.data?.attrib || {}),\n }\n\n patchOperations[existingOperationIndex] = {\n ...existingOperation,\n data: { attrib: newAttrib },\n }\n } else {\n // Add new operation\n patchOperations.push({\n entityId: inheritedDependent.entityId,\n entityType: inheritedDependent.entityType,\n data: inheritedDependent.data,\n })\n }\n }\n }\n\n // now make api call to update all entities\n try {\n await updateEntities({\n operations,\n patchOperations,\n })\n } catch (error) {\n toast.error('Failed to update entities')\n }\n },\n [\n projectName,\n updateEntities,\n getInheritedDependents,\n findInheritedValueFromAncestors,\n pushHistory,\n ],\n )\n\n return { updateEntities: handleUpdateEntities, inheritFromParent }\n}\n\nexport default useUpdateTableData\n"],"names":["useProjectTableContext","useProjectTableQueriesContext","useCallback","_a","toast","topFolder"],"mappings":"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"}
1
+ {"version":3,"file":"useUpdateTableData.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useUpdateTableData.ts"],"sourcesContent":["import { CellId } from '../utils/cellUtils'\nimport { CellValue } from '../widgets/CellWidget'\nimport { toast } from 'react-toastify'\nimport { useProjectTableQueriesContext } from '../context/ProjectTableQueriesContext'\nimport { useCallback } from 'react'\nimport { InheritedDependent } from './useFolderRelationships'\nimport { useProjectTableContext } from '../context/ProjectTableContext'\nimport { OperationModel } from '../types/operations'\nimport { PatchOperation } from '../types'\nimport { HistoryEntityUpdate, UseHistoryReturn } from './useHistory'\n\nexport type EntityUpdate = {\n rowId: string\n id: string\n type: string\n field: string\n value: CellValue | CellValue[] | null\n isAttrib?: boolean\n meta?: Record<string, any>\n}\nexport type UpdateTableEntities = (entities: EntityUpdate[], pushHistory?: boolean) => Promise<void>\n\nexport type InheritFromParentEntity = {\n rowId: string\n entityId: string\n entityType: string\n attribs: string[]\n ownAttrib: string[]\n folderId: string\n meta?: Record<string, any>\n}\nexport type InheritFromParent = (\n entities: InheritFromParentEntity[],\n pushHistory?: boolean,\n) => Promise<void>\n\nexport type UpdateTableEntity = (\n cellId: CellId,\n value: string,\n { includeSelection }: { includeSelection: boolean },\n) => Promise<void>\n\nexport type OperationWithRowId = OperationModel & { rowId: string; meta?: Record<string, any> }\n\ninterface UseUpdateTableDataProps {\n pushHistory?: UseHistoryReturn['pushHistory']\n}\n\nconst useUpdateTableData = (props?: UseUpdateTableDataProps) => {\n const { pushHistory } = props || {}\n const {\n getEntityById,\n projectName,\n getInheritedDependents,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n } = useProjectTableContext()\n const { updateEntities } = useProjectTableQueriesContext()\n\n const handleUpdateEntities = useCallback<UpdateTableEntities>(\n async (entities = [], pushToHistory = true) => {\n if (!entities.length || !projectName) {\n return\n }\n\n // Record history of previous values before applying update\n if (pushHistory && pushToHistory) {\n const inverseEntities: HistoryEntityUpdate[] = entities.map(\n ({ rowId, id, type, field, isAttrib, meta }) => {\n const entityData = getEntityById(id) as Record<string, any>\n if (!entityData) {\n throw 'Entity not found: ' + id\n }\n const entityId = entityData?.entityId || entityData.id\n const oldValue = isAttrib\n ? (entityData.attrib as Record<string, any>)?.[field] ?? null\n : entityData[field] ?? null\n\n // Check if the field was inherited (not in ownAttrib)\n const ownAttrib = entityData?.ownAttrib || []\n const wasInherited = isAttrib && !ownAttrib.includes(field)\n\n return {\n rowId: rowId,\n id: entityId,\n type,\n field,\n value: oldValue,\n isAttrib,\n wasInherited, // Track inheritance status for undo\n ownAttrib: ownAttrib,\n folderId: entityData?.folderId,\n meta,\n }\n },\n )\n const historyEntities: HistoryEntityUpdate[] = entities.flatMap(\n ({ rowId, id, type, field, value, isAttrib, meta }) => {\n const entityData = getEntityById(id)\n const entityId = entityData?.entityId || entityData?.id || id\n\n if (!entityData) return []\n\n return {\n rowId: rowId,\n id: entityId,\n type,\n field,\n value,\n isAttrib,\n ownAttrib: entityData?.ownAttrib || [],\n folderId: 'folderId' in entityData ? entityData.folderId : entityData?.parentId,\n meta,\n }\n },\n )\n pushHistory(inverseEntities, historyEntities)\n }\n\n const supportedEntityTypes: OperationModel['entityType'][] = [\n 'task',\n 'folder',\n 'product',\n 'version',\n ]\n // Group operations by entity type for bulk processing\n let operations: OperationWithRowId[] = []\n for (const entity of entities) {\n let { id, type, field, value, isAttrib, meta } = entity\n const entityData = getEntityById(id)\n const entityId = entityData?.entityId || entityData?.id || id\n // Skip unsupported entity types\n let entityType = type as OperationModel['entityType']\n if (!supportedEntityTypes.includes(entityType)) {\n continue\n }\n\n // create data object for change, taking into account if it's an attribute change\n const data: Record<string, any> = isAttrib\n ? { attrib: { [field]: value } }\n : { [field]: value }\n\n // if the entity is an attribute get the entity data\n // then update ownAttrib to include the new value\n if (isAttrib) {\n const ownAttrib = [...(entityData?.ownAttrib || [])]\n // add the new value to the ownAttrib if it doesn't already exist\n if (!ownAttrib.includes(field)) {\n ownAttrib.push(field)\n }\n // update the data object with the new ownAttrib\n data.ownAttrib = ownAttrib\n }\n\n const existingOperationIndex = operations.findIndex(\n (op) => op.entityId === entityId && op.entityType === entityType,\n )\n\n if (existingOperationIndex !== -1) {\n // Merge data with existing operation\n const existingOperation = operations[existingOperationIndex]\n let newData = { ...existingOperation.data, ...data }\n\n // @ts-ignore\n if (existingOperation.data?.attrib && data.attrib) {\n // @ts-ignore\n newData = { ...newData, attrib: { ...existingOperation.data.attrib, ...data.attrib } }\n }\n\n operations[existingOperationIndex] = {\n ...existingOperation,\n data: newData,\n }\n } else {\n // Add new operation\n operations.push({\n rowId: entity.rowId,\n entityType: entityType,\n entityId: entityId,\n type: 'update',\n data: data,\n meta: meta,\n })\n }\n }\n\n const folderAttribEntities: InheritedDependent[] = operations\n .filter((op) => !!op.entityId && op.type === 'update' && op.data && 'attrib' in op.data)\n .map((op) => ({\n entityId: op.entityId as string,\n entityType: op.entityType as 'folder' | 'task',\n attrib:\n op.data && 'attrib' in op.data ? (op.data?.attrib as InheritedDependent['attrib']) : {},\n }))\n\n const inheritedDependents = getInheritedDependents(folderAttribEntities)\n\n // convert to operations\n const inheritedDependentsOperations: PatchOperation[] = inheritedDependents.map((op) => ({\n entityId: op.entityId,\n entityType: op.entityType,\n data: {\n attrib: op.attrib,\n },\n }))\n\n // now make api call to update all entities\n try {\n await updateEntities({\n operations,\n patchOperations: inheritedDependentsOperations,\n })\n } catch (error: any) {\n console.error('Error updating entities:', error)\n toast.error('Failed to update entities: ' + error?.error)\n }\n },\n [\n projectName,\n updateEntities, //\n getEntityById,\n getInheritedDependents,\n pushHistory,\n ],\n )\n\n // set the attrib fields to be inherited from the parent\n // (remove the field from the ownAttrib array)\n // invalidate the cache for the folder/task so that it can be re-fetched with inherited values\n const inheritFromParent = useCallback<InheritFromParent>(\n async (entities, pushToHistory = true) => {\n if (!entities.length || !projectName) {\n return\n }\n\n // Record history for the inheritance operation\n if (pushToHistory && pushHistory) {\n // Create undo entities (restore explicit values)\n const undoEntities: HistoryEntityUpdate[] = []\n\n // For each entity and attribute being inherited, record current values\n for (const entity of entities) {\n const entityData = getEntityById(entity.entityId) as Record<string, any>\n\n // For each attribute that will be inherited, record its current value\n for (const attrib of entity.attribs) {\n if (entityData?.attrib && attrib in entityData.attrib) {\n undoEntities.push({\n rowId: entity.rowId,\n id: entityData?.entityId || entityData?.id || entity.entityId,\n type: entity.entityType,\n field: attrib,\n value: (entityData.attrib as Record<string, any>)[attrib],\n isAttrib: true,\n wasInherited: false, // Mark as not inherited\n ownAttrib: entityData?.ownAttrib || [],\n folderId: entityData?.folderId,\n meta: entityData.meta,\n })\n }\n }\n }\n\n // Create redo entities (to re-inherit)\n const redoEntities: HistoryEntityUpdate[] = entities.flatMap((entity) =>\n entity.attribs.map((attrib) => ({\n rowId: entity.rowId,\n id: entity.entityId,\n type: entity.entityType,\n field: attrib,\n value: null,\n isAttrib: true,\n wasInherited: true, // Mark as inherited\n ownAttrib: entity.ownAttrib,\n folderId: entity.folderId,\n meta: entity.meta,\n })),\n )\n\n // Push to history if we have changes to record\n if (undoEntities.length > 0) {\n pushHistory(undoEntities, redoEntities)\n }\n }\n\n const supportedEntityTypes: OperationModel['entityType'][] = ['task', 'folder']\n // Group operations by entity type for bulk processing\n const operations: OperationWithRowId[] = [] // operations sent to the server\n const entitiesToPatch: InheritFromParentEntity[] = []\n for (const entity of entities) {\n // Skip unsupported entity types\n let entityType = entity.entityType as OperationModel['entityType']\n if (!supportedEntityTypes.includes(entityType)) {\n continue\n }\n entityType = entityType as 'task' | 'folder'\n\n // Create data object with null values for each attrib to inherit\n const attribData: Record<string, null> = {}\n entity.attribs.forEach((attrib) => {\n attribData[attrib] = null\n })\n\n // Add new operation this is what's sent to the server and is actually updated in the DB\n operations.push({\n rowId: entity.rowId,\n entityType: entityType,\n entityId: entity.entityId,\n type: 'update',\n data: {\n attrib: attribData,\n },\n meta: entity.meta,\n })\n\n // check if this entity has a folderId that is in entities\n // if so we check their intersection attrib names\n const findTopFolder = () => {\n // For each entity, we need to find the top-most folder in the hierarchy\n const folderId = entity.folderId\n\n // Find all ancestor folders that are in our entities list\n const ancestorChain: InheritFromParentEntity[] = []\n let currentFolderId = folderId\n let currentFolder = entities.find((e) => e.entityId === currentFolderId)\n\n // Climb up the folder hierarchy to build the chain of ancestors\n while (currentFolder) {\n ancestorChain.push(currentFolder)\n currentFolderId = currentFolder.folderId\n currentFolder = entities.find((e) => e.entityId === currentFolderId)\n }\n\n // The top folder is the last one in our ancestor chain (if any)\n const topFolder =\n ancestorChain.length > 0 ? ancestorChain[ancestorChain.length - 1] : null\n\n return topFolder\n }\n\n const topFolder = findTopFolder()\n const folderAttribs = topFolder?.attribs || []\n const entityAttribsIntersection = entity.attribs.filter((attrib) =>\n folderAttribs.includes(attrib),\n )\n const entityAttribsRemoved = entity.attribs.filter(\n (attrib) => !folderAttribs.includes(attrib),\n )\n\n // only add to patch operations if there are attribs left\n if (entityAttribsRemoved.length > 0)\n entitiesToPatch.push({\n ...entity,\n attribs: entityAttribsRemoved,\n })\n\n if (topFolder && entityAttribsIntersection.length > 0) {\n entitiesToPatch.push({\n ...entity,\n attribs: entityAttribsIntersection,\n folderId: topFolder.folderId,\n })\n }\n }\n\n const patchOperations: PatchOperation[] = [] // operations only for patching the cache\n for (const entity of entitiesToPatch) {\n const entityType = entity.entityType as 'task' | 'folder'\n // we also need to update ownAttrib to remove the inherited attribs\n const ownAttrib = [...(entity.ownAttrib || [])].filter(\n (attrib) => !entity.attribs.includes(attrib),\n )\n\n // now we must calculate all the entities that need to be updated in the cache\n // first we need to find the the ancestor folder to inherit from\n const ancestorAttrib = findNonInheritedValues(entity.folderId, entity.attribs)\n\n const entityPatch = {\n entityId: entity.entityId,\n entityType: entityType,\n data: {\n attrib: ancestorAttrib,\n ownAttrib: ownAttrib,\n },\n }\n\n // create new patch operation for the entity\n patchOperations.push(entityPatch)\n\n // now find any dependent that also need updating\n const inheritedDependents = getInheritedDependents([\n { entityId: entity.entityId, entityType: entityType, attrib: ancestorAttrib },\n ])\n\n // convert to operations\n const inheritedDependentsOperations: PatchOperation[] = inheritedDependents.map((op) => ({\n entityId: op.entityId,\n entityType: op.entityType,\n data: {\n attrib: op.attrib,\n },\n }))\n\n // try to add to patch operations\n // if it already exists then merge the attribs\n for (const inheritedDependent of inheritedDependentsOperations) {\n const existingOperationIndex = patchOperations.findIndex(\n (op) => op.entityId === inheritedDependent.entityId,\n )\n\n if (existingOperationIndex !== -1) {\n // Merge attribs with existing operation\n const existingOperation = patchOperations[existingOperationIndex]\n let newAttrib = {\n // @ts-ignore\n ...(existingOperation.data?.attrib || {}),\n // @ts-ignore\n ...(inheritedDependent.data?.attrib || {}),\n }\n\n patchOperations[existingOperationIndex] = {\n ...existingOperation,\n data: { attrib: newAttrib },\n }\n } else {\n // Add new operation\n patchOperations.push({\n entityId: inheritedDependent.entityId,\n entityType: inheritedDependent.entityType,\n data: inheritedDependent.data,\n })\n }\n }\n }\n\n // now make api call to update all entities\n try {\n await updateEntities({\n operations,\n patchOperations,\n })\n } catch (error) {\n toast.error('Failed to update entities')\n }\n },\n [\n projectName,\n updateEntities,\n getInheritedDependents,\n findInheritedValueFromAncestors,\n pushHistory,\n ],\n )\n\n return { updateEntities: handleUpdateEntities, inheritFromParent }\n}\n\nexport default useUpdateTableData\n"],"names":["useProjectTableContext","useProjectTableQueriesContext","useCallback","_a","toast","topFolder"],"mappings":"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"}
@@ -23,7 +23,10 @@ const useUpdateTableData = (props) => {
23
23
  ({ rowId, id, type, field, isAttrib, meta }) => {
24
24
  var _a2;
25
25
  const entityData = getEntityById(id);
26
- const entityId = (entityData == null ? void 0 : entityData.entityId) || id;
26
+ if (!entityData) {
27
+ throw "Entity not found: " + id;
28
+ }
29
+ const entityId = (entityData == null ? void 0 : entityData.entityId) || entityData.id;
27
30
  const oldValue = isAttrib ? ((_a2 = entityData.attrib) == null ? void 0 : _a2[field]) ?? null : entityData[field] ?? null;
28
31
  const ownAttrib = (entityData == null ? void 0 : entityData.ownAttrib) || [];
29
32
  const wasInherited = isAttrib && !ownAttrib.includes(field);
@@ -45,7 +48,7 @@ const useUpdateTableData = (props) => {
45
48
  const historyEntities = entities.flatMap(
46
49
  ({ rowId, id, type, field, value, isAttrib, meta }) => {
47
50
  const entityData = getEntityById(id);
48
- const entityId = (entityData == null ? void 0 : entityData.entityId) || id;
51
+ const entityId = (entityData == null ? void 0 : entityData.entityId) || (entityData == null ? void 0 : entityData.id) || id;
49
52
  if (!entityData) return [];
50
53
  return {
51
54
  rowId,
@@ -72,7 +75,7 @@ const useUpdateTableData = (props) => {
72
75
  for (const entity of entities) {
73
76
  let { id, type, field, value, isAttrib, meta } = entity;
74
77
  const entityData = getEntityById(id);
75
- const entityId = (entityData == null ? void 0 : entityData.entityId) || id;
78
+ const entityId = (entityData == null ? void 0 : entityData.entityId) || (entityData == null ? void 0 : entityData.id) || id;
76
79
  let entityType = type;
77
80
  if (!supportedEntityTypes.includes(entityType)) {
78
81
  continue;
@@ -158,7 +161,7 @@ const useUpdateTableData = (props) => {
158
161
  if ((entityData == null ? void 0 : entityData.attrib) && attrib in entityData.attrib) {
159
162
  undoEntities.push({
160
163
  rowId: entity.rowId,
161
- id: entity.entityId,
164
+ id: (entityData == null ? void 0 : entityData.entityId) || (entityData == null ? void 0 : entityData.id) || entity.entityId,
162
165
  type: entity.entityType,
163
166
  field: attrib,
164
167
  value: entityData.attrib[attrib],
@@ -1 +1 @@
1
- {"version":3,"file":"useUpdateTableData.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useUpdateTableData.ts"],"sourcesContent":["import { CellId } from '../utils/cellUtils'\nimport { CellValue } from '../widgets/CellWidget'\nimport { toast } from 'react-toastify'\nimport { useProjectTableQueriesContext } from '../context/ProjectTableQueriesContext'\nimport { useCallback } from 'react'\nimport { InheritedDependent } from './useFolderRelationships'\nimport { useProjectTableContext } from '../context/ProjectTableContext'\nimport { OperationModel } from '../types/operations'\nimport { PatchOperation } from '../types'\nimport { HistoryEntityUpdate, UseHistoryReturn } from './useHistory'\n\nexport type EntityUpdate = {\n rowId: string\n id: string\n type: string\n field: string\n value: CellValue | CellValue[] | null\n isAttrib?: boolean\n meta?: Record<string, any>\n}\nexport type UpdateTableEntities = (entities: EntityUpdate[], pushHistory?: boolean) => Promise<void>\n\nexport type InheritFromParentEntity = {\n rowId: string\n entityId: string\n entityType: string\n attribs: string[]\n ownAttrib: string[]\n folderId: string\n meta?: Record<string, any>\n}\nexport type InheritFromParent = (\n entities: InheritFromParentEntity[],\n pushHistory?: boolean,\n) => Promise<void>\n\nexport type UpdateTableEntity = (\n cellId: CellId,\n value: string,\n { includeSelection }: { includeSelection: boolean },\n) => Promise<void>\n\nexport type OperationWithRowId = OperationModel & { rowId: string; meta?: Record<string, any> }\n\ninterface UseUpdateTableDataProps {\n pushHistory?: UseHistoryReturn['pushHistory']\n}\n\nconst useUpdateTableData = (props?: UseUpdateTableDataProps) => {\n const { pushHistory } = props || {}\n const {\n getEntityById,\n projectName,\n getInheritedDependents,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n } = useProjectTableContext()\n const { updateEntities } = useProjectTableQueriesContext()\n\n const handleUpdateEntities = useCallback<UpdateTableEntities>(\n async (entities = [], pushToHistory = true) => {\n if (!entities.length || !projectName) {\n return\n }\n\n // Record history of previous values before applying update\n if (pushHistory && pushToHistory) {\n const inverseEntities: HistoryEntityUpdate[] = entities.map(\n ({ rowId, id, type, field, isAttrib, meta }) => {\n const entityData = getEntityById(id) as Record<string, any>\n const entityId = entityData?.entityId || id\n const oldValue = isAttrib\n ? (entityData.attrib as Record<string, any>)?.[field] ?? null\n : entityData[field] ?? null\n\n // Check if the field was inherited (not in ownAttrib)\n const ownAttrib = entityData?.ownAttrib || []\n const wasInherited = isAttrib && !ownAttrib.includes(field)\n\n return {\n rowId: rowId,\n id: entityId,\n type,\n field,\n value: oldValue,\n isAttrib,\n wasInherited, // Track inheritance status for undo\n ownAttrib: ownAttrib,\n folderId: entityData?.folderId,\n meta,\n }\n },\n )\n const historyEntities: HistoryEntityUpdate[] = entities.flatMap(\n ({ rowId, id, type, field, value, isAttrib, meta }) => {\n const entityData = getEntityById(id)\n const entityId = entityData?.entityId || id\n\n if (!entityData) return []\n\n return {\n rowId: rowId,\n id: entityId,\n type,\n field,\n value,\n isAttrib,\n ownAttrib: entityData?.ownAttrib || [],\n folderId: 'folderId' in entityData ? entityData.folderId : entityData?.parentId,\n meta,\n }\n },\n )\n pushHistory(inverseEntities, historyEntities)\n }\n\n const supportedEntityTypes: OperationModel['entityType'][] = [\n 'task',\n 'folder',\n 'product',\n 'version',\n ]\n // Group operations by entity type for bulk processing\n let operations: OperationWithRowId[] = []\n for (const entity of entities) {\n let { id, type, field, value, isAttrib, meta } = entity\n const entityData = getEntityById(id)\n const entityId = entityData?.entityId || id\n // Skip unsupported entity types\n let entityType = type as OperationModel['entityType']\n if (!supportedEntityTypes.includes(entityType)) {\n continue\n }\n\n // create data object for change, taking into account if it's an attribute change\n const data: Record<string, any> = isAttrib\n ? { attrib: { [field]: value } }\n : { [field]: value }\n\n // if the entity is an attribute get the entity data\n // then update ownAttrib to include the new value\n if (isAttrib) {\n const ownAttrib = [...(entityData?.ownAttrib || [])]\n // add the new value to the ownAttrib if it doesn't already exist\n if (!ownAttrib.includes(field)) {\n ownAttrib.push(field)\n }\n // update the data object with the new ownAttrib\n data.ownAttrib = ownAttrib\n }\n\n const existingOperationIndex = operations.findIndex(\n (op) => op.entityId === entityId && op.entityType === entityType,\n )\n\n if (existingOperationIndex !== -1) {\n // Merge data with existing operation\n const existingOperation = operations[existingOperationIndex]\n let newData = { ...existingOperation.data, ...data }\n\n // @ts-ignore\n if (existingOperation.data?.attrib && data.attrib) {\n // @ts-ignore\n newData = { ...newData, attrib: { ...existingOperation.data.attrib, ...data.attrib } }\n }\n\n operations[existingOperationIndex] = {\n ...existingOperation,\n data: newData,\n }\n } else {\n // Add new operation\n operations.push({\n rowId: entity.rowId,\n entityType: entityType,\n entityId: entityId,\n type: 'update',\n data: data,\n meta: meta,\n })\n }\n }\n\n const folderAttribEntities: InheritedDependent[] = operations\n .filter((op) => !!op.entityId && op.type === 'update' && op.data && 'attrib' in op.data)\n .map((op) => ({\n entityId: op.entityId as string,\n entityType: op.entityType as 'folder' | 'task',\n attrib:\n op.data && 'attrib' in op.data ? (op.data?.attrib as InheritedDependent['attrib']) : {},\n }))\n\n const inheritedDependents = getInheritedDependents(folderAttribEntities)\n\n // convert to operations\n const inheritedDependentsOperations: PatchOperation[] = inheritedDependents.map((op) => ({\n entityId: op.entityId,\n entityType: op.entityType,\n data: {\n attrib: op.attrib,\n },\n }))\n\n // now make api call to update all entities\n try {\n await updateEntities({\n operations,\n patchOperations: inheritedDependentsOperations,\n })\n } catch (error: any) {\n console.error('Error updating entities:', error)\n toast.error('Failed to update entities: ' + error?.error)\n }\n },\n [\n projectName,\n updateEntities, //\n getEntityById,\n getInheritedDependents,\n pushHistory,\n ],\n )\n\n // set the attrib fields to be inherited from the parent\n // (remove the field from the ownAttrib array)\n // invalidate the cache for the folder/task so that it can be re-fetched with inherited values\n const inheritFromParent = useCallback<InheritFromParent>(\n async (entities, pushToHistory = true) => {\n if (!entities.length || !projectName) {\n return\n }\n\n // Record history for the inheritance operation\n if (pushToHistory && pushHistory) {\n // Create undo entities (restore explicit values)\n const undoEntities: HistoryEntityUpdate[] = []\n\n // For each entity and attribute being inherited, record current values\n for (const entity of entities) {\n const entityData = getEntityById(entity.entityId) as Record<string, any>\n\n // For each attribute that will be inherited, record its current value\n for (const attrib of entity.attribs) {\n if (entityData?.attrib && attrib in entityData.attrib) {\n undoEntities.push({\n rowId: entity.rowId,\n id: entity.entityId,\n type: entity.entityType,\n field: attrib,\n value: (entityData.attrib as Record<string, any>)[attrib],\n isAttrib: true,\n wasInherited: false, // Mark as not inherited\n ownAttrib: entityData?.ownAttrib || [],\n folderId: entityData?.folderId,\n meta: entityData.meta,\n })\n }\n }\n }\n\n // Create redo entities (to re-inherit)\n const redoEntities: HistoryEntityUpdate[] = entities.flatMap((entity) =>\n entity.attribs.map((attrib) => ({\n rowId: entity.rowId,\n id: entity.entityId,\n type: entity.entityType,\n field: attrib,\n value: null,\n isAttrib: true,\n wasInherited: true, // Mark as inherited\n ownAttrib: entity.ownAttrib,\n folderId: entity.folderId,\n meta: entity.meta,\n })),\n )\n\n // Push to history if we have changes to record\n if (undoEntities.length > 0) {\n pushHistory(undoEntities, redoEntities)\n }\n }\n\n const supportedEntityTypes: OperationModel['entityType'][] = ['task', 'folder']\n // Group operations by entity type for bulk processing\n const operations: OperationWithRowId[] = [] // operations sent to the server\n const entitiesToPatch: InheritFromParentEntity[] = []\n for (const entity of entities) {\n // Skip unsupported entity types\n let entityType = entity.entityType as OperationModel['entityType']\n if (!supportedEntityTypes.includes(entityType)) {\n continue\n }\n entityType = entityType as 'task' | 'folder'\n\n // Create data object with null values for each attrib to inherit\n const attribData: Record<string, null> = {}\n entity.attribs.forEach((attrib) => {\n attribData[attrib] = null\n })\n\n // Add new operation this is what's sent to the server and is actually updated in the DB\n operations.push({\n rowId: entity.rowId,\n entityType: entityType,\n entityId: entity.entityId,\n type: 'update',\n data: {\n attrib: attribData,\n },\n meta: entity.meta,\n })\n\n // check if this entity has a folderId that is in entities\n // if so we check their intersection attrib names\n const findTopFolder = () => {\n // For each entity, we need to find the top-most folder in the hierarchy\n const folderId = entity.folderId\n\n // Find all ancestor folders that are in our entities list\n const ancestorChain: InheritFromParentEntity[] = []\n let currentFolderId = folderId\n let currentFolder = entities.find((e) => e.entityId === currentFolderId)\n\n // Climb up the folder hierarchy to build the chain of ancestors\n while (currentFolder) {\n ancestorChain.push(currentFolder)\n currentFolderId = currentFolder.folderId\n currentFolder = entities.find((e) => e.entityId === currentFolderId)\n }\n\n // The top folder is the last one in our ancestor chain (if any)\n const topFolder =\n ancestorChain.length > 0 ? ancestorChain[ancestorChain.length - 1] : null\n\n return topFolder\n }\n\n const topFolder = findTopFolder()\n const folderAttribs = topFolder?.attribs || []\n const entityAttribsIntersection = entity.attribs.filter((attrib) =>\n folderAttribs.includes(attrib),\n )\n const entityAttribsRemoved = entity.attribs.filter(\n (attrib) => !folderAttribs.includes(attrib),\n )\n\n // only add to patch operations if there are attribs left\n if (entityAttribsRemoved.length > 0)\n entitiesToPatch.push({\n ...entity,\n attribs: entityAttribsRemoved,\n })\n\n if (topFolder && entityAttribsIntersection.length > 0) {\n entitiesToPatch.push({\n ...entity,\n attribs: entityAttribsIntersection,\n folderId: topFolder.folderId,\n })\n }\n }\n\n const patchOperations: PatchOperation[] = [] // operations only for patching the cache\n for (const entity of entitiesToPatch) {\n const entityType = entity.entityType as 'task' | 'folder'\n // we also need to update ownAttrib to remove the inherited attribs\n const ownAttrib = [...(entity.ownAttrib || [])].filter(\n (attrib) => !entity.attribs.includes(attrib),\n )\n\n // now we must calculate all the entities that need to be updated in the cache\n // first we need to find the the ancestor folder to inherit from\n const ancestorAttrib = findNonInheritedValues(entity.folderId, entity.attribs)\n\n const entityPatch = {\n entityId: entity.entityId,\n entityType: entityType,\n data: {\n attrib: ancestorAttrib,\n ownAttrib: ownAttrib,\n },\n }\n\n // create new patch operation for the entity\n patchOperations.push(entityPatch)\n\n // now find any dependent that also need updating\n const inheritedDependents = getInheritedDependents([\n { entityId: entity.entityId, entityType: entityType, attrib: ancestorAttrib },\n ])\n\n // convert to operations\n const inheritedDependentsOperations: PatchOperation[] = inheritedDependents.map((op) => ({\n entityId: op.entityId,\n entityType: op.entityType,\n data: {\n attrib: op.attrib,\n },\n }))\n\n // try to add to patch operations\n // if it already exists then merge the attribs\n for (const inheritedDependent of inheritedDependentsOperations) {\n const existingOperationIndex = patchOperations.findIndex(\n (op) => op.entityId === inheritedDependent.entityId,\n )\n\n if (existingOperationIndex !== -1) {\n // Merge attribs with existing operation\n const existingOperation = patchOperations[existingOperationIndex]\n let newAttrib = {\n // @ts-ignore\n ...(existingOperation.data?.attrib || {}),\n // @ts-ignore\n ...(inheritedDependent.data?.attrib || {}),\n }\n\n patchOperations[existingOperationIndex] = {\n ...existingOperation,\n data: { attrib: newAttrib },\n }\n } else {\n // Add new operation\n patchOperations.push({\n entityId: inheritedDependent.entityId,\n entityType: inheritedDependent.entityType,\n data: inheritedDependent.data,\n })\n }\n }\n }\n\n // now make api call to update all entities\n try {\n await updateEntities({\n operations,\n patchOperations,\n })\n } catch (error) {\n toast.error('Failed to update entities')\n }\n },\n [\n projectName,\n updateEntities,\n getInheritedDependents,\n findInheritedValueFromAncestors,\n pushHistory,\n ],\n )\n\n return { updateEntities: handleUpdateEntities, inheritFromParent }\n}\n\nexport default useUpdateTableData\n"],"names":["_a","topFolder"],"mappings":"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"}
1
+ {"version":3,"file":"useUpdateTableData.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useUpdateTableData.ts"],"sourcesContent":["import { CellId } from '../utils/cellUtils'\nimport { CellValue } from '../widgets/CellWidget'\nimport { toast } from 'react-toastify'\nimport { useProjectTableQueriesContext } from '../context/ProjectTableQueriesContext'\nimport { useCallback } from 'react'\nimport { InheritedDependent } from './useFolderRelationships'\nimport { useProjectTableContext } from '../context/ProjectTableContext'\nimport { OperationModel } from '../types/operations'\nimport { PatchOperation } from '../types'\nimport { HistoryEntityUpdate, UseHistoryReturn } from './useHistory'\n\nexport type EntityUpdate = {\n rowId: string\n id: string\n type: string\n field: string\n value: CellValue | CellValue[] | null\n isAttrib?: boolean\n meta?: Record<string, any>\n}\nexport type UpdateTableEntities = (entities: EntityUpdate[], pushHistory?: boolean) => Promise<void>\n\nexport type InheritFromParentEntity = {\n rowId: string\n entityId: string\n entityType: string\n attribs: string[]\n ownAttrib: string[]\n folderId: string\n meta?: Record<string, any>\n}\nexport type InheritFromParent = (\n entities: InheritFromParentEntity[],\n pushHistory?: boolean,\n) => Promise<void>\n\nexport type UpdateTableEntity = (\n cellId: CellId,\n value: string,\n { includeSelection }: { includeSelection: boolean },\n) => Promise<void>\n\nexport type OperationWithRowId = OperationModel & { rowId: string; meta?: Record<string, any> }\n\ninterface UseUpdateTableDataProps {\n pushHistory?: UseHistoryReturn['pushHistory']\n}\n\nconst useUpdateTableData = (props?: UseUpdateTableDataProps) => {\n const { pushHistory } = props || {}\n const {\n getEntityById,\n projectName,\n getInheritedDependents,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n } = useProjectTableContext()\n const { updateEntities } = useProjectTableQueriesContext()\n\n const handleUpdateEntities = useCallback<UpdateTableEntities>(\n async (entities = [], pushToHistory = true) => {\n if (!entities.length || !projectName) {\n return\n }\n\n // Record history of previous values before applying update\n if (pushHistory && pushToHistory) {\n const inverseEntities: HistoryEntityUpdate[] = entities.map(\n ({ rowId, id, type, field, isAttrib, meta }) => {\n const entityData = getEntityById(id) as Record<string, any>\n if (!entityData) {\n throw 'Entity not found: ' + id\n }\n const entityId = entityData?.entityId || entityData.id\n const oldValue = isAttrib\n ? (entityData.attrib as Record<string, any>)?.[field] ?? null\n : entityData[field] ?? null\n\n // Check if the field was inherited (not in ownAttrib)\n const ownAttrib = entityData?.ownAttrib || []\n const wasInherited = isAttrib && !ownAttrib.includes(field)\n\n return {\n rowId: rowId,\n id: entityId,\n type,\n field,\n value: oldValue,\n isAttrib,\n wasInherited, // Track inheritance status for undo\n ownAttrib: ownAttrib,\n folderId: entityData?.folderId,\n meta,\n }\n },\n )\n const historyEntities: HistoryEntityUpdate[] = entities.flatMap(\n ({ rowId, id, type, field, value, isAttrib, meta }) => {\n const entityData = getEntityById(id)\n const entityId = entityData?.entityId || entityData?.id || id\n\n if (!entityData) return []\n\n return {\n rowId: rowId,\n id: entityId,\n type,\n field,\n value,\n isAttrib,\n ownAttrib: entityData?.ownAttrib || [],\n folderId: 'folderId' in entityData ? entityData.folderId : entityData?.parentId,\n meta,\n }\n },\n )\n pushHistory(inverseEntities, historyEntities)\n }\n\n const supportedEntityTypes: OperationModel['entityType'][] = [\n 'task',\n 'folder',\n 'product',\n 'version',\n ]\n // Group operations by entity type for bulk processing\n let operations: OperationWithRowId[] = []\n for (const entity of entities) {\n let { id, type, field, value, isAttrib, meta } = entity\n const entityData = getEntityById(id)\n const entityId = entityData?.entityId || entityData?.id || id\n // Skip unsupported entity types\n let entityType = type as OperationModel['entityType']\n if (!supportedEntityTypes.includes(entityType)) {\n continue\n }\n\n // create data object for change, taking into account if it's an attribute change\n const data: Record<string, any> = isAttrib\n ? { attrib: { [field]: value } }\n : { [field]: value }\n\n // if the entity is an attribute get the entity data\n // then update ownAttrib to include the new value\n if (isAttrib) {\n const ownAttrib = [...(entityData?.ownAttrib || [])]\n // add the new value to the ownAttrib if it doesn't already exist\n if (!ownAttrib.includes(field)) {\n ownAttrib.push(field)\n }\n // update the data object with the new ownAttrib\n data.ownAttrib = ownAttrib\n }\n\n const existingOperationIndex = operations.findIndex(\n (op) => op.entityId === entityId && op.entityType === entityType,\n )\n\n if (existingOperationIndex !== -1) {\n // Merge data with existing operation\n const existingOperation = operations[existingOperationIndex]\n let newData = { ...existingOperation.data, ...data }\n\n // @ts-ignore\n if (existingOperation.data?.attrib && data.attrib) {\n // @ts-ignore\n newData = { ...newData, attrib: { ...existingOperation.data.attrib, ...data.attrib } }\n }\n\n operations[existingOperationIndex] = {\n ...existingOperation,\n data: newData,\n }\n } else {\n // Add new operation\n operations.push({\n rowId: entity.rowId,\n entityType: entityType,\n entityId: entityId,\n type: 'update',\n data: data,\n meta: meta,\n })\n }\n }\n\n const folderAttribEntities: InheritedDependent[] = operations\n .filter((op) => !!op.entityId && op.type === 'update' && op.data && 'attrib' in op.data)\n .map((op) => ({\n entityId: op.entityId as string,\n entityType: op.entityType as 'folder' | 'task',\n attrib:\n op.data && 'attrib' in op.data ? (op.data?.attrib as InheritedDependent['attrib']) : {},\n }))\n\n const inheritedDependents = getInheritedDependents(folderAttribEntities)\n\n // convert to operations\n const inheritedDependentsOperations: PatchOperation[] = inheritedDependents.map((op) => ({\n entityId: op.entityId,\n entityType: op.entityType,\n data: {\n attrib: op.attrib,\n },\n }))\n\n // now make api call to update all entities\n try {\n await updateEntities({\n operations,\n patchOperations: inheritedDependentsOperations,\n })\n } catch (error: any) {\n console.error('Error updating entities:', error)\n toast.error('Failed to update entities: ' + error?.error)\n }\n },\n [\n projectName,\n updateEntities, //\n getEntityById,\n getInheritedDependents,\n pushHistory,\n ],\n )\n\n // set the attrib fields to be inherited from the parent\n // (remove the field from the ownAttrib array)\n // invalidate the cache for the folder/task so that it can be re-fetched with inherited values\n const inheritFromParent = useCallback<InheritFromParent>(\n async (entities, pushToHistory = true) => {\n if (!entities.length || !projectName) {\n return\n }\n\n // Record history for the inheritance operation\n if (pushToHistory && pushHistory) {\n // Create undo entities (restore explicit values)\n const undoEntities: HistoryEntityUpdate[] = []\n\n // For each entity and attribute being inherited, record current values\n for (const entity of entities) {\n const entityData = getEntityById(entity.entityId) as Record<string, any>\n\n // For each attribute that will be inherited, record its current value\n for (const attrib of entity.attribs) {\n if (entityData?.attrib && attrib in entityData.attrib) {\n undoEntities.push({\n rowId: entity.rowId,\n id: entityData?.entityId || entityData?.id || entity.entityId,\n type: entity.entityType,\n field: attrib,\n value: (entityData.attrib as Record<string, any>)[attrib],\n isAttrib: true,\n wasInherited: false, // Mark as not inherited\n ownAttrib: entityData?.ownAttrib || [],\n folderId: entityData?.folderId,\n meta: entityData.meta,\n })\n }\n }\n }\n\n // Create redo entities (to re-inherit)\n const redoEntities: HistoryEntityUpdate[] = entities.flatMap((entity) =>\n entity.attribs.map((attrib) => ({\n rowId: entity.rowId,\n id: entity.entityId,\n type: entity.entityType,\n field: attrib,\n value: null,\n isAttrib: true,\n wasInherited: true, // Mark as inherited\n ownAttrib: entity.ownAttrib,\n folderId: entity.folderId,\n meta: entity.meta,\n })),\n )\n\n // Push to history if we have changes to record\n if (undoEntities.length > 0) {\n pushHistory(undoEntities, redoEntities)\n }\n }\n\n const supportedEntityTypes: OperationModel['entityType'][] = ['task', 'folder']\n // Group operations by entity type for bulk processing\n const operations: OperationWithRowId[] = [] // operations sent to the server\n const entitiesToPatch: InheritFromParentEntity[] = []\n for (const entity of entities) {\n // Skip unsupported entity types\n let entityType = entity.entityType as OperationModel['entityType']\n if (!supportedEntityTypes.includes(entityType)) {\n continue\n }\n entityType = entityType as 'task' | 'folder'\n\n // Create data object with null values for each attrib to inherit\n const attribData: Record<string, null> = {}\n entity.attribs.forEach((attrib) => {\n attribData[attrib] = null\n })\n\n // Add new operation this is what's sent to the server and is actually updated in the DB\n operations.push({\n rowId: entity.rowId,\n entityType: entityType,\n entityId: entity.entityId,\n type: 'update',\n data: {\n attrib: attribData,\n },\n meta: entity.meta,\n })\n\n // check if this entity has a folderId that is in entities\n // if so we check their intersection attrib names\n const findTopFolder = () => {\n // For each entity, we need to find the top-most folder in the hierarchy\n const folderId = entity.folderId\n\n // Find all ancestor folders that are in our entities list\n const ancestorChain: InheritFromParentEntity[] = []\n let currentFolderId = folderId\n let currentFolder = entities.find((e) => e.entityId === currentFolderId)\n\n // Climb up the folder hierarchy to build the chain of ancestors\n while (currentFolder) {\n ancestorChain.push(currentFolder)\n currentFolderId = currentFolder.folderId\n currentFolder = entities.find((e) => e.entityId === currentFolderId)\n }\n\n // The top folder is the last one in our ancestor chain (if any)\n const topFolder =\n ancestorChain.length > 0 ? ancestorChain[ancestorChain.length - 1] : null\n\n return topFolder\n }\n\n const topFolder = findTopFolder()\n const folderAttribs = topFolder?.attribs || []\n const entityAttribsIntersection = entity.attribs.filter((attrib) =>\n folderAttribs.includes(attrib),\n )\n const entityAttribsRemoved = entity.attribs.filter(\n (attrib) => !folderAttribs.includes(attrib),\n )\n\n // only add to patch operations if there are attribs left\n if (entityAttribsRemoved.length > 0)\n entitiesToPatch.push({\n ...entity,\n attribs: entityAttribsRemoved,\n })\n\n if (topFolder && entityAttribsIntersection.length > 0) {\n entitiesToPatch.push({\n ...entity,\n attribs: entityAttribsIntersection,\n folderId: topFolder.folderId,\n })\n }\n }\n\n const patchOperations: PatchOperation[] = [] // operations only for patching the cache\n for (const entity of entitiesToPatch) {\n const entityType = entity.entityType as 'task' | 'folder'\n // we also need to update ownAttrib to remove the inherited attribs\n const ownAttrib = [...(entity.ownAttrib || [])].filter(\n (attrib) => !entity.attribs.includes(attrib),\n )\n\n // now we must calculate all the entities that need to be updated in the cache\n // first we need to find the the ancestor folder to inherit from\n const ancestorAttrib = findNonInheritedValues(entity.folderId, entity.attribs)\n\n const entityPatch = {\n entityId: entity.entityId,\n entityType: entityType,\n data: {\n attrib: ancestorAttrib,\n ownAttrib: ownAttrib,\n },\n }\n\n // create new patch operation for the entity\n patchOperations.push(entityPatch)\n\n // now find any dependent that also need updating\n const inheritedDependents = getInheritedDependents([\n { entityId: entity.entityId, entityType: entityType, attrib: ancestorAttrib },\n ])\n\n // convert to operations\n const inheritedDependentsOperations: PatchOperation[] = inheritedDependents.map((op) => ({\n entityId: op.entityId,\n entityType: op.entityType,\n data: {\n attrib: op.attrib,\n },\n }))\n\n // try to add to patch operations\n // if it already exists then merge the attribs\n for (const inheritedDependent of inheritedDependentsOperations) {\n const existingOperationIndex = patchOperations.findIndex(\n (op) => op.entityId === inheritedDependent.entityId,\n )\n\n if (existingOperationIndex !== -1) {\n // Merge attribs with existing operation\n const existingOperation = patchOperations[existingOperationIndex]\n let newAttrib = {\n // @ts-ignore\n ...(existingOperation.data?.attrib || {}),\n // @ts-ignore\n ...(inheritedDependent.data?.attrib || {}),\n }\n\n patchOperations[existingOperationIndex] = {\n ...existingOperation,\n data: { attrib: newAttrib },\n }\n } else {\n // Add new operation\n patchOperations.push({\n entityId: inheritedDependent.entityId,\n entityType: inheritedDependent.entityType,\n data: inheritedDependent.data,\n })\n }\n }\n }\n\n // now make api call to update all entities\n try {\n await updateEntities({\n operations,\n patchOperations,\n })\n } catch (error) {\n toast.error('Failed to update entities')\n }\n },\n [\n projectName,\n updateEntities,\n getInheritedDependents,\n findInheritedValueFromAncestors,\n pushHistory,\n ],\n )\n\n return { updateEntities: handleUpdateEntities, inheritFromParent }\n}\n\nexport default useUpdateTableData\n"],"names":["_a","topFolder"],"mappings":";;;;AAgDM,MAAA,qBAAqB,CAAC,UAAoC;AAC9D,QAAM,EAAE,gBAAgB,SAAS,CAAC;AAC5B,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,uBAAuB;AACrB,QAAA,EAAE,eAAe,IAAI,8BAA8B;AAEzD,QAAM,uBAAuB;AAAA,IAC3B,OAAO,WAAW,CAAA,GAAI,gBAAgB,SAAS;;AAC7C,UAAI,CAAC,SAAS,UAAU,CAAC,aAAa;AACpC;AAAA,MAAA;AAIF,UAAI,eAAe,eAAe;AAChC,cAAM,kBAAyC,SAAS;AAAA,UACtD,CAAC,EAAE,OAAO,IAAI,MAAM,OAAO,UAAU,WAAW;;AACxC,kBAAA,aAAa,cAAc,EAAE;AACnC,gBAAI,CAAC,YAAY;AACf,oBAAM,uBAAuB;AAAA,YAAA;AAEzB,kBAAA,YAAW,yCAAY,aAAY,WAAW;AAC9C,kBAAA,WAAW,aACZA,MAAA,WAAW,WAAX,gBAAAA,IAA4C,WAAU,OACvD,WAAW,KAAK,KAAK;AAGnB,kBAAA,aAAY,yCAAY,cAAa,CAAC;AAC5C,kBAAM,eAAe,YAAY,CAAC,UAAU,SAAS,KAAK;AAEnD,mBAAA;AAAA,cACL;AAAA,cACA,IAAI;AAAA,cACJ;AAAA,cACA;AAAA,cACA,OAAO;AAAA,cACP;AAAA,cACA;AAAA;AAAA,cACA;AAAA,cACA,UAAU,yCAAY;AAAA,cACtB;AAAA,YACF;AAAA,UAAA;AAAA,QAEJ;AACA,cAAM,kBAAyC,SAAS;AAAA,UACtD,CAAC,EAAE,OAAO,IAAI,MAAM,OAAO,OAAO,UAAU,WAAW;AAC/C,kBAAA,aAAa,cAAc,EAAE;AACnC,kBAAM,YAAW,yCAAY,cAAY,yCAAY,OAAM;AAEvD,gBAAA,CAAC,WAAY,QAAO,CAAC;AAElB,mBAAA;AAAA,cACL;AAAA,cACA,IAAI;AAAA,cACJ;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,YAAW,yCAAY,cAAa,CAAC;AAAA,cACrC,UAAU,cAAc,aAAa,WAAW,WAAW,yCAAY;AAAA,cACvE;AAAA,YACF;AAAA,UAAA;AAAA,QAEJ;AACA,oBAAY,iBAAiB,eAAe;AAAA,MAAA;AAG9C,YAAM,uBAAuD;AAAA,QAC3D;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,UAAI,aAAmC,CAAC;AACxC,iBAAW,UAAU,UAAU;AAC7B,YAAI,EAAE,IAAI,MAAM,OAAO,OAAO,UAAU,SAAS;AAC3C,cAAA,aAAa,cAAc,EAAE;AACnC,cAAM,YAAW,yCAAY,cAAY,yCAAY,OAAM;AAE3D,YAAI,aAAa;AACjB,YAAI,CAAC,qBAAqB,SAAS,UAAU,GAAG;AAC9C;AAAA,QAAA;AAIF,cAAM,OAA4B,WAC9B,EAAE,QAAQ,EAAE,CAAC,KAAK,GAAG,QACrB,IAAA,EAAE,CAAC,KAAK,GAAG,MAAM;AAIrB,YAAI,UAAU;AACZ,gBAAM,YAAY,CAAC,IAAI,yCAAY,cAAa,CAAA,CAAG;AAEnD,cAAI,CAAC,UAAU,SAAS,KAAK,GAAG;AAC9B,sBAAU,KAAK,KAAK;AAAA,UAAA;AAGtB,eAAK,YAAY;AAAA,QAAA;AAGnB,cAAM,yBAAyB,WAAW;AAAA,UACxC,CAAC,OAAO,GAAG,aAAa,YAAY,GAAG,eAAe;AAAA,QACxD;AAEA,YAAI,2BAA2B,IAAI;AAE3B,gBAAA,oBAAoB,WAAW,sBAAsB;AAC3D,cAAI,UAAU,EAAE,GAAG,kBAAkB,MAAM,GAAG,KAAK;AAGnD,gBAAI,uBAAkB,SAAlB,mBAAwB,WAAU,KAAK,QAAQ;AAEjD,sBAAU,EAAE,GAAG,SAAS,QAAQ,EAAE,GAAG,kBAAkB,KAAK,QAAQ,GAAG,KAAK,OAAA,EAAS;AAAA,UAAA;AAGvF,qBAAW,sBAAsB,IAAI;AAAA,YACnC,GAAG;AAAA,YACH,MAAM;AAAA,UACR;AAAA,QAAA,OACK;AAEL,qBAAW,KAAK;AAAA,YACd,OAAO,OAAO;AAAA,YACd;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UAAA,CACD;AAAA,QAAA;AAAA,MACH;AAGI,YAAA,uBAA6C,WAChD,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,YAAY,GAAG,SAAS,YAAY,GAAG,QAAQ,YAAY,GAAG,IAAI,EACtF,IAAI,CAAC,OAAQ;;AAAA;AAAA,UACZ,UAAU,GAAG;AAAA,UACb,YAAY,GAAG;AAAA,UACf,QACE,GAAG,QAAQ,YAAY,GAAG,QAAQA,MAAA,GAAG,SAAH,gBAAAA,IAAS,SAA0C,CAAA;AAAA,QAAC;AAAA,OACxF;AAEE,YAAA,sBAAsB,uBAAuB,oBAAoB;AAGvE,YAAM,gCAAkD,oBAAoB,IAAI,CAAC,QAAQ;AAAA,QACvF,UAAU,GAAG;AAAA,QACb,YAAY,GAAG;AAAA,QACf,MAAM;AAAA,UACJ,QAAQ,GAAG;AAAA,QAAA;AAAA,MACb,EACA;AAGE,UAAA;AACF,cAAM,eAAe;AAAA,UACnB;AAAA,UACA,iBAAiB;AAAA,QAAA,CAClB;AAAA,eACM,OAAY;AACX,gBAAA,MAAM,4BAA4B,KAAK;AACzC,cAAA,MAAM,iCAAgC,+BAAO,MAAK;AAAA,MAAA;AAAA,IAE5D;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAKA,QAAM,oBAAoB;AAAA,IACxB,OAAO,UAAU,gBAAgB,SAAS;;AACxC,UAAI,CAAC,SAAS,UAAU,CAAC,aAAa;AACpC;AAAA,MAAA;AAIF,UAAI,iBAAiB,aAAa;AAEhC,cAAM,eAAsC,CAAC;AAG7C,mBAAW,UAAU,UAAU;AACvB,gBAAA,aAAa,cAAc,OAAO,QAAQ;AAGrC,qBAAA,UAAU,OAAO,SAAS;AACnC,iBAAI,yCAAY,WAAU,UAAU,WAAW,QAAQ;AACrD,2BAAa,KAAK;AAAA,gBAChB,OAAO,OAAO;AAAA,gBACd,KAAI,yCAAY,cAAY,yCAAY,OAAM,OAAO;AAAA,gBACrD,MAAM,OAAO;AAAA,gBACb,OAAO;AAAA,gBACP,OAAQ,WAAW,OAA+B,MAAM;AAAA,gBACxD,UAAU;AAAA,gBACV,cAAc;AAAA;AAAA,gBACd,YAAW,yCAAY,cAAa,CAAC;AAAA,gBACrC,UAAU,yCAAY;AAAA,gBACtB,MAAM,WAAW;AAAA,cAAA,CAClB;AAAA,YAAA;AAAA,UACH;AAAA,QACF;AAIF,cAAM,eAAsC,SAAS;AAAA,UAAQ,CAAC,WAC5D,OAAO,QAAQ,IAAI,CAAC,YAAY;AAAA,YAC9B,OAAO,OAAO;AAAA,YACd,IAAI,OAAO;AAAA,YACX,MAAM,OAAO;AAAA,YACb,OAAO;AAAA,YACP,OAAO;AAAA,YACP,UAAU;AAAA,YACV,cAAc;AAAA;AAAA,YACd,WAAW,OAAO;AAAA,YAClB,UAAU,OAAO;AAAA,YACjB,MAAM,OAAO;AAAA,UAAA,EACb;AAAA,QACJ;AAGI,YAAA,aAAa,SAAS,GAAG;AAC3B,sBAAY,cAAc,YAAY;AAAA,QAAA;AAAA,MACxC;AAGI,YAAA,uBAAuD,CAAC,QAAQ,QAAQ;AAE9E,YAAM,aAAmC,CAAC;AAC1C,YAAM,kBAA6C,CAAC;AACpD,iBAAW,UAAU,UAAU;AAE7B,YAAI,aAAa,OAAO;AACxB,YAAI,CAAC,qBAAqB,SAAS,UAAU,GAAG;AAC9C;AAAA,QAAA;AAEW,qBAAA;AAGb,cAAM,aAAmC,CAAC;AACnC,eAAA,QAAQ,QAAQ,CAAC,WAAW;AACjC,qBAAW,MAAM,IAAI;AAAA,QAAA,CACtB;AAGD,mBAAW,KAAK;AAAA,UACd,OAAO,OAAO;AAAA,UACd;AAAA,UACA,UAAU,OAAO;AAAA,UACjB,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,QAAQ;AAAA,UACV;AAAA,UACA,MAAM,OAAO;AAAA,QAAA,CACd;AAID,cAAM,gBAAgB,MAAM;AAE1B,gBAAM,WAAW,OAAO;AAGxB,gBAAM,gBAA2C,CAAC;AAClD,cAAI,kBAAkB;AACtB,cAAI,gBAAgB,SAAS,KAAK,CAAC,MAAM,EAAE,aAAa,eAAe;AAGvE,iBAAO,eAAe;AACpB,0BAAc,KAAK,aAAa;AAChC,8BAAkB,cAAc;AAChC,4BAAgB,SAAS,KAAK,CAAC,MAAM,EAAE,aAAa,eAAe;AAAA,UAAA;AAI/DC,gBAAAA,aACJ,cAAc,SAAS,IAAI,cAAc,cAAc,SAAS,CAAC,IAAI;AAEhEA,iBAAAA;AAAAA,QACT;AAEA,cAAM,YAAY,cAAc;AAC1B,cAAA,iBAAgB,uCAAW,YAAW,CAAC;AACvC,cAAA,4BAA4B,OAAO,QAAQ;AAAA,UAAO,CAAC,WACvD,cAAc,SAAS,MAAM;AAAA,QAC/B;AACM,cAAA,uBAAuB,OAAO,QAAQ;AAAA,UAC1C,CAAC,WAAW,CAAC,cAAc,SAAS,MAAM;AAAA,QAC5C;AAGA,YAAI,qBAAqB,SAAS;AAChC,0BAAgB,KAAK;AAAA,YACnB,GAAG;AAAA,YACH,SAAS;AAAA,UAAA,CACV;AAEC,YAAA,aAAa,0BAA0B,SAAS,GAAG;AACrD,0BAAgB,KAAK;AAAA,YACnB,GAAG;AAAA,YACH,SAAS;AAAA,YACT,UAAU,UAAU;AAAA,UAAA,CACrB;AAAA,QAAA;AAAA,MACH;AAGF,YAAM,kBAAoC,CAAC;AAC3C,iBAAW,UAAU,iBAAiB;AACpC,cAAM,aAAa,OAAO;AAE1B,cAAM,YAAY,CAAC,GAAI,OAAO,aAAa,CAAA,CAAG,EAAE;AAAA,UAC9C,CAAC,WAAW,CAAC,OAAO,QAAQ,SAAS,MAAM;AAAA,QAC7C;AAIA,cAAM,iBAAiB,uBAAuB,OAAO,UAAU,OAAO,OAAO;AAE7E,cAAM,cAAc;AAAA,UAClB,UAAU,OAAO;AAAA,UACjB;AAAA,UACA,MAAM;AAAA,YACJ,QAAQ;AAAA,YACR;AAAA,UAAA;AAAA,QAEJ;AAGA,wBAAgB,KAAK,WAAW;AAGhC,cAAM,sBAAsB,uBAAuB;AAAA,UACjD,EAAE,UAAU,OAAO,UAAU,YAAwB,QAAQ,eAAe;AAAA,QAAA,CAC7E;AAGD,cAAM,gCAAkD,oBAAoB,IAAI,CAAC,QAAQ;AAAA,UACvF,UAAU,GAAG;AAAA,UACb,YAAY,GAAG;AAAA,UACf,MAAM;AAAA,YACJ,QAAQ,GAAG;AAAA,UAAA;AAAA,QACb,EACA;AAIF,mBAAW,sBAAsB,+BAA+B;AAC9D,gBAAM,yBAAyB,gBAAgB;AAAA,YAC7C,CAAC,OAAO,GAAG,aAAa,mBAAmB;AAAA,UAC7C;AAEA,cAAI,2BAA2B,IAAI;AAE3B,kBAAA,oBAAoB,gBAAgB,sBAAsB;AAChE,gBAAI,YAAY;AAAA;AAAA,cAEd,KAAI,uBAAkB,SAAlB,mBAAwB,WAAU,CAAC;AAAA;AAAA,cAEvC,KAAI,wBAAmB,SAAnB,mBAAyB,WAAU,CAAA;AAAA,YACzC;AAEA,4BAAgB,sBAAsB,IAAI;AAAA,cACxC,GAAG;AAAA,cACH,MAAM,EAAE,QAAQ,UAAU;AAAA,YAC5B;AAAA,UAAA,OACK;AAEL,4BAAgB,KAAK;AAAA,cACnB,UAAU,mBAAmB;AAAA,cAC7B,YAAY,mBAAmB;AAAA,cAC/B,MAAM,mBAAmB;AAAA,YAAA,CAC1B;AAAA,UAAA;AAAA,QACH;AAAA,MACF;AAIE,UAAA;AACF,cAAM,eAAe;AAAA,UACnB;AAAA,UACA;AAAA,QAAA,CACD;AAAA,eACM,OAAO;AACd,cAAM,MAAM,2BAA2B;AAAA,MAAA;AAAA,IAE3C;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAEO,SAAA,EAAE,gBAAgB,sBAAsB,kBAAkB;AACnE;"}