@ynput/ayon-frontend-shared 0.3.46 → 0.3.47

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 (735) hide show
  1. package/dist/DetailsPanel.cjs.js +1 -1
  2. package/dist/DetailsPanel.es.js +38 -35
  3. package/dist/DetailsPanel.es.js.map +1 -1
  4. package/dist/ProjectTreeTable.cjs.js +1 -1
  5. package/dist/ProjectTreeTable.es.js +231 -228
  6. package/dist/ProjectTreeTable.es.js.map +1 -1
  7. package/dist/Slicer.cjs.js +1 -1
  8. package/dist/Slicer.es.js +193 -25
  9. package/dist/Slicer.es.js.map +1 -1
  10. package/dist/Views.cjs.js +1 -1
  11. package/dist/Views.es.js +27 -26
  12. package/dist/_virtual/index.cjs15.js +1 -1
  13. package/dist/_virtual/index.cjs18.js +1 -1
  14. package/dist/_virtual/index.cjs19.js +1 -1
  15. package/dist/_virtual/index.cjs9.js +1 -1
  16. package/dist/_virtual/index.es10.js +2 -2
  17. package/dist/_virtual/index.es11.js +2 -2
  18. package/dist/_virtual/index.es13.js +2 -2
  19. package/dist/_virtual/index.es14.js +2 -2
  20. package/dist/_virtual/index.es15.js +2 -2
  21. package/dist/_virtual/index.es16.js +2 -2
  22. package/dist/_virtual/index.es17.js +2 -2
  23. package/dist/_virtual/index.es18.js +5 -2
  24. package/dist/_virtual/index.es18.js.map +1 -1
  25. package/dist/_virtual/index.es19.js +2 -2
  26. package/dist/_virtual/index.es9.js +2 -5
  27. package/dist/_virtual/index.es9.js.map +1 -1
  28. package/dist/api.cjs.js +1 -1
  29. package/dist/api.es.js +347 -344
  30. package/dist/api.es.js.map +1 -1
  31. package/dist/components.cjs.js +1 -1
  32. package/dist/components.es.js +41 -39
  33. package/dist/components.es.js.map +1 -1
  34. package/dist/context.cjs.js +1 -1
  35. package/dist/context.es.js +55 -48
  36. package/dist/context.es.js.map +1 -1
  37. package/dist/index.cjs.js +1 -1
  38. package/dist/index.es.js +24 -21
  39. package/dist/index.es.js.map +1 -1
  40. package/dist/node_modules/parse-numeric-range/index.cjs.js +1 -1
  41. package/dist/node_modules/parse-numeric-range/index.es.js +1 -1
  42. package/dist/shared/node_modules/@module-federation/runtime-core/dist/module/index.cjs.js +1 -1
  43. package/dist/shared/node_modules/@module-federation/runtime-core/dist/module/index.es.js +1 -1
  44. package/dist/shared/node_modules/@module-federation/runtime-core/dist/plugins/snapshot/index.cjs.js +1 -1
  45. package/dist/shared/node_modules/@module-federation/runtime-core/dist/plugins/snapshot/index.es.js +1 -1
  46. package/dist/shared/node_modules/@module-federation/runtime-core/dist/remote/index.cjs.js +1 -1
  47. package/dist/shared/node_modules/@module-federation/runtime-core/dist/remote/index.es.js +1 -1
  48. package/dist/shared/node_modules/@module-federation/runtime-core/dist/shared/index.cjs.js +1 -1
  49. package/dist/shared/node_modules/@module-federation/runtime-core/dist/shared/index.es.js +1 -1
  50. package/dist/shared/node_modules/@module-federation/runtime-core/dist/type/index.cjs.js +1 -1
  51. package/dist/shared/node_modules/@module-federation/runtime-core/dist/type/index.es.js +1 -1
  52. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/hooks/index.cjs.js +1 -1
  53. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/hooks/index.es.js +1 -1
  54. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/index.cjs.js +1 -1
  55. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/index.es.js +1 -1
  56. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.cjs.js +1 -1
  57. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.cjs.js.map +1 -1
  58. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.es.js +1 -1
  59. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/utils.cjs.js +1 -1
  60. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/utils.es.js +1 -1
  61. package/dist/shared/node_modules/@module-federation/sdk/dist/index.cjs.js +1 -1
  62. package/dist/shared/node_modules/@module-federation/sdk/dist/index.es.js +1 -1
  63. package/dist/shared/node_modules/@module-federation/sdk/dist/utils.cjs.js +1 -1
  64. package/dist/shared/node_modules/@module-federation/sdk/dist/utils.es.js +1 -1
  65. package/dist/shared/node_modules/prop-types/index.cjs.js +1 -1
  66. package/dist/shared/node_modules/prop-types/index.es.js +1 -1
  67. package/dist/shared/node_modules/react-is/index.cjs.js +1 -1
  68. package/dist/shared/node_modules/react-is/index.es.js +1 -1
  69. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js +1 -1
  70. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js.map +1 -1
  71. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.es.js +1 -1
  72. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js +1 -1
  73. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js.map +1 -1
  74. package/dist/shared/node_modules/react-transition-group/esm/Transition.es.js +1 -1
  75. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js +1 -1
  76. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js.map +1 -1
  77. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.es.js +1 -1
  78. package/dist/shared/src/api/generated/graphql.cjs.js +3 -3
  79. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  80. package/dist/shared/src/api/generated/graphql.es.js +3 -3
  81. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  82. package/dist/shared/src/api/queries/actions/refreshActiveAndPurgeOthers.cjs.js +2 -0
  83. package/dist/shared/src/api/queries/actions/refreshActiveAndPurgeOthers.cjs.js.map +1 -0
  84. package/dist/shared/src/api/queries/actions/refreshActiveAndPurgeOthers.es.js +42 -0
  85. package/dist/shared/src/api/queries/actions/refreshActiveAndPurgeOthers.es.js.map +1 -0
  86. package/dist/shared/src/api/queries/activities/getActivities.cjs.js +1 -1
  87. package/dist/shared/src/api/queries/activities/getActivities.cjs.js.map +1 -1
  88. package/dist/shared/src/api/queries/activities/getActivities.es.js +121 -156
  89. package/dist/shared/src/api/queries/activities/getActivities.es.js.map +1 -1
  90. package/dist/shared/src/api/queries/activities/util/activitiesHelpers.cjs.js +1 -1
  91. package/dist/shared/src/api/queries/activities/util/activitiesHelpers.cjs.js.map +1 -1
  92. package/dist/shared/src/api/queries/activities/util/activitiesHelpers.es.js +93 -68
  93. package/dist/shared/src/api/queries/activities/util/activitiesHelpers.es.js.map +1 -1
  94. package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.cjs.js +1 -1
  95. package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.cjs.js.map +1 -1
  96. package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.es.js +63 -56
  97. package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.es.js.map +1 -1
  98. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +1 -1
  99. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
  100. package/dist/shared/src/api/queries/entities/updateEntity.es.js +120 -119
  101. package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
  102. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +1 -1
  103. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
  104. package/dist/shared/src/api/queries/entityLists/getLists.es.js +70 -62
  105. package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
  106. package/dist/shared/src/api/queries/folders/getFolders.cjs.js.map +1 -1
  107. package/dist/shared/src/api/queries/folders/getFolders.es.js.map +1 -1
  108. package/dist/shared/src/api/queries/links/getEntityLinks.cjs.js +1 -1
  109. package/dist/shared/src/api/queries/links/getEntityLinks.cjs.js.map +1 -1
  110. package/dist/shared/src/api/queries/links/getEntityLinks.es.js +85 -85
  111. package/dist/shared/src/api/queries/links/getEntityLinks.es.js.map +1 -1
  112. package/dist/shared/src/api/queries/overview/getOverview.cjs.js +1 -1
  113. package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
  114. package/dist/shared/src/api/queries/overview/getOverview.es.js +267 -259
  115. package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
  116. package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js +1 -1
  117. package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js.map +1 -1
  118. package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js +85 -79
  119. package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js.map +1 -1
  120. package/dist/shared/src/components/ColumnHeaderMenuUI.cjs.js +1 -1
  121. package/dist/shared/src/components/ColumnHeaderMenuUI.cjs.js.map +1 -1
  122. package/dist/shared/src/components/ColumnHeaderMenuUI.es.js +170 -2
  123. package/dist/shared/src/components/ColumnHeaderMenuUI.es.js.map +1 -1
  124. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +1 -1
  125. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
  126. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +18 -15
  127. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
  128. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js +1 -1
  129. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js.map +1 -1
  130. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js +165 -2
  131. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js.map +1 -1
  132. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js +2 -2
  133. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js.map +1 -1
  134. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js +164 -2
  135. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js.map +1 -1
  136. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js +1 -1
  137. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js.map +1 -1
  138. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js +174 -2
  139. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js.map +1 -1
  140. package/dist/shared/src/components/EntityIcon/EntityIcon.cjs.js +1 -1
  141. package/dist/shared/src/components/EntityIcon/EntityIcon.cjs.js.map +1 -1
  142. package/dist/shared/src/components/EntityIcon/EntityIcon.es.js +173 -2
  143. package/dist/shared/src/components/EntityIcon/EntityIcon.es.js.map +1 -1
  144. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
  145. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
  146. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +5 -2
  147. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
  148. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js +1 -1
  149. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js.map +1 -1
  150. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js +16 -13
  151. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js.map +1 -1
  152. package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js +1 -1
  153. package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js.map +1 -1
  154. package/dist/shared/src/components/EntityPath/SegmentProvider.es.js +168 -2
  155. package/dist/shared/src/components/EntityPath/SegmentProvider.es.js.map +1 -1
  156. package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js +1 -1
  157. package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js.map +1 -1
  158. package/dist/shared/src/components/Feedback/FeedbackContext.es.js +260 -89
  159. package/dist/shared/src/components/Feedback/FeedbackContext.es.js.map +1 -1
  160. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js +1 -1
  161. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js.map +1 -1
  162. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js +44 -78
  163. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js.map +1 -1
  164. package/dist/shared/src/components/LinksManager/LinksManager.cjs.js +1 -1
  165. package/dist/shared/src/components/LinksManager/LinksManager.cjs.js.map +1 -1
  166. package/dist/shared/src/components/LinksManager/LinksManager.es.js +172 -2
  167. package/dist/shared/src/components/LinksManager/LinksManager.es.js.map +1 -1
  168. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
  169. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
  170. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +5 -2
  171. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
  172. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js +1 -1
  173. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js.map +1 -1
  174. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js +173 -2
  175. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js.map +1 -1
  176. package/dist/shared/src/components/ListMetaData/ListMetaData.cjs.js +1 -1
  177. package/dist/shared/src/components/ListMetaData/ListMetaData.cjs.js.map +1 -1
  178. package/dist/shared/src/components/ListMetaData/ListMetaData.es.js +158 -2
  179. package/dist/shared/src/components/ListMetaData/ListMetaData.es.js.map +1 -1
  180. package/dist/shared/src/components/Menu/Menu.cjs.js +1 -1
  181. package/dist/shared/src/components/Menu/Menu.cjs.js.map +1 -1
  182. package/dist/shared/src/components/Menu/Menu.es.js +171 -2
  183. package/dist/shared/src/components/Menu/Menu.es.js.map +1 -1
  184. package/dist/shared/src/components/Menu/MenuItem.cjs.js +1 -1
  185. package/dist/shared/src/components/Menu/MenuItem.cjs.js.map +1 -1
  186. package/dist/shared/src/components/Menu/MenuItem.es.js +167 -0
  187. package/dist/shared/src/components/Menu/MenuItem.es.js.map +1 -1
  188. package/dist/shared/src/components/Menu/MenuList.cjs.js +1 -1
  189. package/dist/shared/src/components/Menu/MenuList.cjs.js.map +1 -1
  190. package/dist/shared/src/components/Menu/MenuList.es.js +209 -40
  191. package/dist/shared/src/components/Menu/MenuList.es.js.map +1 -1
  192. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js +1 -1
  193. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js.map +1 -1
  194. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js +171 -2
  195. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js.map +1 -1
  196. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +1 -1
  197. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
  198. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +170 -2
  199. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
  200. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js +1 -1
  201. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js.map +1 -1
  202. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js +16 -13
  203. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js.map +1 -1
  204. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +2 -2
  205. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  206. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +82 -79
  207. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  208. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +1 -1
  209. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
  210. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +169 -3
  211. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
  212. package/dist/shared/src/components/RemotePage/ProjectPageRemote.cjs.js +1 -1
  213. package/dist/shared/src/components/RemotePage/ProjectPageRemote.cjs.js.map +1 -1
  214. package/dist/shared/src/components/RemotePage/ProjectPageRemote.es.js +12 -9
  215. package/dist/shared/src/components/RemotePage/ProjectPageRemote.es.js.map +1 -1
  216. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js +1 -1
  217. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +1 -1
  218. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js +5 -2
  219. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -1
  220. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +1 -1
  221. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
  222. package/dist/shared/src/components/RenameForm/RenameForm.es.js +5 -2
  223. package/dist/shared/src/components/RenameForm/RenameForm.es.js.map +1 -1
  224. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +1 -1
  225. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  226. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +41 -38
  227. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  228. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +1 -1
  229. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  230. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +19 -16
  231. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  232. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +1 -1
  233. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  234. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +17 -14
  235. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  236. package/dist/shared/src/components/ReviewablesSelector/Card.cjs.js +1 -1
  237. package/dist/shared/src/components/ReviewablesSelector/Card.cjs.js.map +1 -1
  238. package/dist/shared/src/components/ReviewablesSelector/Card.es.js +18 -15
  239. package/dist/shared/src/components/ReviewablesSelector/Card.es.js.map +1 -1
  240. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +1 -1
  241. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
  242. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +453 -284
  243. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
  244. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js +2 -2
  245. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js.map +1 -1
  246. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js +172 -2
  247. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js.map +1 -1
  248. package/dist/shared/src/components/SimpleFormDialog/FormFile.cjs.js +1 -1
  249. package/dist/shared/src/components/SimpleFormDialog/FormFile.cjs.js.map +1 -1
  250. package/dist/shared/src/components/SimpleFormDialog/FormFile.es.js +18 -15
  251. package/dist/shared/src/components/SimpleFormDialog/FormFile.es.js.map +1 -1
  252. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +1 -1
  253. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  254. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +18 -15
  255. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  256. package/dist/shared/src/components/SyncButton/SyncButton.cjs.js +52 -0
  257. package/dist/shared/src/components/SyncButton/SyncButton.cjs.js.map +1 -0
  258. package/dist/shared/src/components/SyncButton/SyncButton.es.js +265 -0
  259. package/dist/shared/src/components/SyncButton/SyncButton.es.js.map +1 -0
  260. package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js +1 -1
  261. package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js.map +1 -1
  262. package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js +171 -2
  263. package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js.map +1 -1
  264. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +1 -1
  265. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
  266. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +18 -15
  267. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
  268. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +1 -1
  269. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -1
  270. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +20 -17
  271. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
  272. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
  273. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  274. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +18 -15
  275. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  276. package/dist/shared/src/containers/Actions/Actions.cjs.js +1 -1
  277. package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
  278. package/dist/shared/src/containers/Actions/Actions.es.js +213 -44
  279. package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
  280. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
  281. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  282. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +18 -15
  283. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  284. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  285. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  286. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +39 -36
  287. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  288. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
  289. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  290. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js +18 -15
  291. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  292. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
  293. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  294. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.es.js +19 -16
  295. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  296. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
  297. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  298. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.es.js +51 -48
  299. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  300. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.cjs.js +1 -1
  301. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.cjs.js.map +1 -1
  302. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.es.js +173 -3
  303. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.es.js.map +1 -1
  304. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.cjs.js +1 -1
  305. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.cjs.js.map +1 -1
  306. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.es.js +18 -15
  307. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.es.js.map +1 -1
  308. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.cjs.js +1 -1
  309. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.cjs.js.map +1 -1
  310. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.es.js +18 -15
  311. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.es.js.map +1 -1
  312. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +1 -1
  313. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
  314. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +168 -2
  315. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
  316. package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js +1 -1
  317. package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js.map +1 -1
  318. package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.es.js +32 -29
  319. package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.es.js.map +1 -1
  320. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js +1 -1
  321. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js.map +1 -1
  322. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js +18 -15
  323. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js.map +1 -1
  324. package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.cjs.js +1 -1
  325. package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.cjs.js.map +1 -1
  326. package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.es.js +81 -78
  327. package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.es.js.map +1 -1
  328. package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.cjs.js +1 -1
  329. package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.cjs.js.map +1 -1
  330. package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.es.js +144 -2
  331. package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.es.js.map +1 -1
  332. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +1 -1
  333. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
  334. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +174 -2
  335. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
  336. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
  337. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
  338. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +18 -15
  339. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js.map +1 -1
  340. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
  341. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
  342. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +18 -15
  343. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
  344. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
  345. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
  346. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +18 -15
  347. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
  348. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
  349. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
  350. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +18 -15
  351. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
  352. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js +1 -1
  353. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js.map +1 -1
  354. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js +178 -7
  355. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js.map +1 -1
  356. package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -1
  357. package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
  358. package/dist/shared/src/containers/Feed/Feed.es.js +206 -59
  359. package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
  360. package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.cjs.js +1 -1
  361. package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.cjs.js.map +1 -1
  362. package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.es.js +18 -15
  363. package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.es.js.map +1 -1
  364. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
  365. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
  366. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +19 -16
  367. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
  368. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js +1 -1
  369. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js.map +1 -1
  370. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js +18 -15
  371. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js.map +1 -1
  372. package/dist/shared/src/containers/Feed/components/ActivityItem.cjs.js +1 -1
  373. package/dist/shared/src/containers/Feed/components/ActivityItem.cjs.js.map +1 -1
  374. package/dist/shared/src/containers/Feed/components/ActivityItem.es.js +16 -16
  375. package/dist/shared/src/containers/Feed/components/ActivityItem.es.js.map +1 -1
  376. package/dist/shared/src/containers/Feed/components/ActivityStatusChange/ActivityStatusChange.cjs.js +1 -1
  377. package/dist/shared/src/containers/Feed/components/ActivityStatusChange/ActivityStatusChange.cjs.js.map +1 -1
  378. package/dist/shared/src/containers/Feed/components/ActivityStatusChange/ActivityStatusChange.es.js +30 -17
  379. package/dist/shared/src/containers/Feed/components/ActivityStatusChange/ActivityStatusChange.es.js.map +1 -1
  380. package/dist/shared/src/containers/Feed/components/ActivityStatusChange/ActivityStatusSecondary.cjs.js +11 -0
  381. package/dist/shared/src/containers/Feed/components/ActivityStatusChange/ActivityStatusSecondary.cjs.js.map +1 -0
  382. package/dist/shared/src/containers/Feed/components/ActivityStatusChange/ActivityStatusSecondary.es.js +27 -0
  383. package/dist/shared/src/containers/Feed/components/ActivityStatusChange/ActivityStatusSecondary.es.js.map +1 -0
  384. package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.cjs.js +1 -1
  385. package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.cjs.js.map +1 -1
  386. package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.es.js +20 -17
  387. package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.es.js.map +1 -1
  388. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js +1 -1
  389. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js.map +1 -1
  390. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js +218 -39
  391. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js.map +1 -1
  392. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +1 -1
  393. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js.map +1 -1
  394. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js +78 -75
  395. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
  396. package/dist/shared/src/containers/Feed/components/CommentInput/helpers.cjs.js +1 -1
  397. package/dist/shared/src/containers/Feed/components/CommentInput/helpers.cjs.js.map +1 -1
  398. package/dist/shared/src/containers/Feed/components/CommentInput/helpers.es.js +22 -19
  399. package/dist/shared/src/containers/Feed/components/CommentInput/helpers.es.js.map +1 -1
  400. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js +1 -1
  401. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js.map +1 -1
  402. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js +173 -2
  403. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js.map +1 -1
  404. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js +1 -1
  405. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js.map +1 -1
  406. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js +173 -2
  407. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js.map +1 -1
  408. package/dist/shared/src/containers/Feed/components/FeedSearchFilter.cjs.js +2 -2
  409. package/dist/shared/src/containers/Feed/components/FeedSearchFilter.cjs.js.map +1 -1
  410. package/dist/shared/src/containers/Feed/components/FeedSearchFilter.es.js +181 -14
  411. package/dist/shared/src/containers/Feed/components/FeedSearchFilter.es.js.map +1 -1
  412. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +1 -1
  413. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
  414. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +169 -2
  415. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js.map +1 -1
  416. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -1
  417. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
  418. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +80 -77
  419. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
  420. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +1 -1
  421. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  422. package/dist/shared/src/containers/Feed/context/FeedContext.es.js +197 -26
  423. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  424. package/dist/shared/src/containers/Feed/helpers/groupActivityVersions.cjs.js +1 -1
  425. package/dist/shared/src/containers/Feed/helpers/groupActivityVersions.cjs.js.map +1 -1
  426. package/dist/shared/src/containers/Feed/helpers/groupActivityVersions.es.js +9 -8
  427. package/dist/shared/src/containers/Feed/helpers/groupActivityVersions.es.js.map +1 -1
  428. package/dist/shared/src/containers/ListTable/ListTable.cjs.js +1 -1
  429. package/dist/shared/src/containers/ListTable/ListTable.cjs.js.map +1 -1
  430. package/dist/shared/src/containers/ListTable/ListTable.es.js +24 -21
  431. package/dist/shared/src/containers/ListTable/ListTable.es.js.map +1 -1
  432. package/dist/shared/src/containers/ListTable/ListTableCell.cjs.js +1 -1
  433. package/dist/shared/src/containers/ListTable/ListTableCell.cjs.js.map +1 -1
  434. package/dist/shared/src/containers/ListTable/ListTableCell.es.js +18 -15
  435. package/dist/shared/src/containers/ListTable/ListTableCell.es.js.map +1 -1
  436. package/dist/shared/src/containers/ListTable/ListTableHeader.cjs.js +1 -1
  437. package/dist/shared/src/containers/ListTable/ListTableHeader.cjs.js.map +1 -1
  438. package/dist/shared/src/containers/ListTable/ListTableHeader.es.js +17 -14
  439. package/dist/shared/src/containers/ListTable/ListTableHeader.es.js.map +1 -1
  440. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
  441. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  442. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +5 -2
  443. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  444. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  445. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  446. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +18 -15
  447. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  448. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.cjs.js +1 -1
  449. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.cjs.js.map +1 -1
  450. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.es.js +5 -2
  451. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.es.js.map +1 -1
  452. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js +1 -1
  453. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js.map +1 -1
  454. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js +84 -81
  455. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js.map +1 -1
  456. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
  457. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  458. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +17 -14
  459. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  460. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
  461. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
  462. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +18 -15
  463. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
  464. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +5 -5
  465. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
  466. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +508 -321
  467. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
  468. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js +1 -1
  469. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js.map +1 -1
  470. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js +18 -15
  471. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js.map +1 -1
  472. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +1 -1
  473. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
  474. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +175 -4
  475. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
  476. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js +1 -1
  477. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
  478. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js +176 -6
  479. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
  480. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +1 -1
  481. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
  482. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +18 -15
  483. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
  484. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +1 -1
  485. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
  486. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +174 -2
  487. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
  488. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
  489. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  490. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +21 -18
  491. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  492. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  493. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  494. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +18 -15
  495. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  496. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
  497. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  498. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +18 -15
  499. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  500. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
  501. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
  502. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +18 -15
  503. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
  504. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js +1 -1
  505. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js.map +1 -1
  506. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js +18 -15
  507. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js.map +1 -1
  508. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js +1 -1
  509. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js.map +1 -1
  510. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js +5 -2
  511. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js.map +1 -1
  512. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +1 -1
  513. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
  514. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +408 -396
  515. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
  516. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +1 -1
  517. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
  518. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +18 -15
  519. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
  520. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js +1 -1
  521. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js.map +1 -1
  522. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js +18 -15
  523. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js.map +1 -1
  524. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
  525. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
  526. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +19 -17
  527. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
  528. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
  529. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
  530. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +5 -2
  531. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js.map +1 -1
  532. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
  533. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
  534. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +5 -2
  535. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
  536. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
  537. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
  538. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +18 -15
  539. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
  540. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js +1 -1
  541. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js.map +1 -1
  542. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js +18 -15
  543. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js.map +1 -1
  544. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js +1 -1
  545. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -1
  546. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js +265 -95
  547. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js.map +1 -1
  548. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
  549. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  550. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +29 -26
  551. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  552. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js +1 -1
  553. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js.map +1 -1
  554. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js +18 -15
  555. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js.map +1 -1
  556. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +2 -2
  557. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  558. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +94 -91
  559. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  560. package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.cjs.js +3 -3
  561. package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.cjs.js.map +1 -1
  562. package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.es.js +25 -22
  563. package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.es.js.map +1 -1
  564. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
  565. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
  566. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +20 -17
  567. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
  568. package/dist/shared/src/containers/ProjectTreeTable/widgets/MarkdownWidget.cjs.js +4 -4
  569. package/dist/shared/src/containers/ProjectTreeTable/widgets/MarkdownWidget.cjs.js.map +1 -1
  570. package/dist/shared/src/containers/ProjectTreeTable/widgets/MarkdownWidget.es.js +188 -34
  571. package/dist/shared/src/containers/ProjectTreeTable/widgets/MarkdownWidget.es.js.map +1 -1
  572. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js +1 -1
  573. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js.map +1 -1
  574. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js +18 -15
  575. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js.map +1 -1
  576. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js +1 -1
  577. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js.map +1 -1
  578. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js +25 -22
  579. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js.map +1 -1
  580. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextContentWidget.cjs.js +2 -2
  581. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextContentWidget.cjs.js.map +1 -1
  582. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextContentWidget.es.js +225 -61
  583. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextContentWidget.es.js.map +1 -1
  584. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
  585. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  586. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +18 -15
  587. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  588. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
  589. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
  590. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +21 -18
  591. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
  592. package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.cjs.js +1 -1
  593. package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.cjs.js.map +1 -1
  594. package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.es.js +37 -37
  595. package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.es.js.map +1 -1
  596. package/dist/shared/src/containers/Slicer/components/Slicer.cjs.js +2 -2
  597. package/dist/shared/src/containers/Slicer/components/Slicer.cjs.js.map +1 -1
  598. package/dist/shared/src/containers/Slicer/components/Slicer.es.js +353 -51
  599. package/dist/shared/src/containers/Slicer/components/Slicer.es.js.map +1 -1
  600. package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.cjs.js +1 -1
  601. package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.cjs.js.map +1 -1
  602. package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.es.js +172 -2
  603. package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.es.js.map +1 -1
  604. package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js +1 -1
  605. package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js.map +1 -1
  606. package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js +18 -15
  607. package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js.map +1 -1
  608. package/dist/shared/src/containers/Slicer/context/SlicerContext.cjs.js +1 -1
  609. package/dist/shared/src/containers/Slicer/context/SlicerContext.cjs.js.map +1 -1
  610. package/dist/shared/src/containers/Slicer/context/SlicerContext.es.js +216 -45
  611. package/dist/shared/src/containers/Slicer/context/SlicerContext.es.js.map +1 -1
  612. package/dist/shared/src/containers/Slicer/hooks/useEntityListsSlice.cjs.js +1 -1
  613. package/dist/shared/src/containers/Slicer/hooks/useEntityListsSlice.cjs.js.map +1 -1
  614. package/dist/shared/src/containers/Slicer/hooks/useEntityListsSlice.es.js +185 -13
  615. package/dist/shared/src/containers/Slicer/hooks/useEntityListsSlice.es.js.map +1 -1
  616. package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.cjs.js +1 -1
  617. package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.cjs.js.map +1 -1
  618. package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.es.js +174 -2
  619. package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.es.js.map +1 -1
  620. package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.cjs.js +1 -1
  621. package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.cjs.js.map +1 -1
  622. package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.es.js +40 -289
  623. package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.es.js.map +1 -1
  624. package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.cjs.js +1 -1
  625. package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.cjs.js.map +1 -1
  626. package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.es.js +174 -2
  627. package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.es.js.map +1 -1
  628. package/dist/shared/src/containers/Slicer/hooks/useSlicerRemotes.cjs.js +1 -1
  629. package/dist/shared/src/containers/Slicer/hooks/useSlicerRemotes.cjs.js.map +1 -1
  630. package/dist/shared/src/containers/Slicer/hooks/useSlicerRemotes.es.js +173 -2
  631. package/dist/shared/src/containers/Slicer/hooks/useSlicerRemotes.es.js.map +1 -1
  632. package/dist/shared/src/containers/Slicer/hooks/useSlicerRowSelection.cjs.js +1 -1
  633. package/dist/shared/src/containers/Slicer/hooks/useSlicerRowSelection.cjs.js.map +1 -1
  634. package/dist/shared/src/containers/Slicer/hooks/useSlicerRowSelection.es.js +174 -2
  635. package/dist/shared/src/containers/Slicer/hooks/useSlicerRowSelection.es.js.map +1 -1
  636. package/dist/shared/src/containers/Slicer/hooks/useSlicerSplitter.cjs.js +1 -1
  637. package/dist/shared/src/containers/Slicer/hooks/useSlicerSplitter.cjs.js.map +1 -1
  638. package/dist/shared/src/containers/Slicer/hooks/useSlicerSplitter.es.js +174 -2
  639. package/dist/shared/src/containers/Slicer/hooks/useSlicerSplitter.es.js.map +1 -1
  640. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.cjs.js +1 -1
  641. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.cjs.js.map +1 -1
  642. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.es.js +227 -53
  643. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.es.js.map +1 -1
  644. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js +1 -1
  645. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js.map +1 -1
  646. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js +176 -6
  647. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js.map +1 -1
  648. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js +1 -1
  649. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js.map +1 -1
  650. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js +5 -2
  651. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js.map +1 -1
  652. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js +2 -2
  653. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js.map +1 -1
  654. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js +185 -18
  655. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js.map +1 -1
  656. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
  657. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
  658. package/dist/shared/src/containers/Views/context/ViewsContext.es.js +209 -38
  659. package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
  660. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js +1 -1
  661. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js.map +1 -1
  662. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js +180 -10
  663. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js.map +1 -1
  664. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js +1 -1
  665. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js.map +1 -1
  666. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js +107 -73
  667. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js.map +1 -1
  668. package/dist/shared/src/context/DetailsPanelContext.cjs.js +1 -1
  669. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  670. package/dist/shared/src/context/DetailsPanelContext.es.js +210 -38
  671. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  672. package/dist/shared/src/context/EntityUpdatesContext.cjs.js +2 -0
  673. package/dist/shared/src/context/EntityUpdatesContext.cjs.js.map +1 -0
  674. package/dist/shared/src/context/EntityUpdatesContext.es.js +392 -0
  675. package/dist/shared/src/context/EntityUpdatesContext.es.js.map +1 -0
  676. package/dist/shared/src/context/EntityUpdatesContextInstance.cjs.js +2 -0
  677. package/dist/shared/src/context/EntityUpdatesContextInstance.cjs.js.map +1 -0
  678. package/dist/shared/src/context/EntityUpdatesContextInstance.es.js +6 -0
  679. package/dist/shared/src/context/EntityUpdatesContextInstance.es.js.map +1 -0
  680. package/dist/shared/src/context/MenuContext.es.js +3 -3
  681. package/dist/shared/src/context/PowerpackContext.cjs.js +1 -1
  682. package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
  683. package/dist/shared/src/context/PowerpackContext.es.js +178 -6
  684. package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
  685. package/dist/shared/src/context/ProjectFoldersContext.cjs.js +1 -1
  686. package/dist/shared/src/context/ProjectFoldersContext.cjs.js.map +1 -1
  687. package/dist/shared/src/context/ProjectFoldersContext.es.js +196 -24
  688. package/dist/shared/src/context/ProjectFoldersContext.es.js.map +1 -1
  689. package/dist/shared/src/context/SubtasksModulesContext.cjs.js +1 -1
  690. package/dist/shared/src/context/SubtasksModulesContext.cjs.js.map +1 -1
  691. package/dist/shared/src/context/SubtasksModulesContext.es.js +176 -4
  692. package/dist/shared/src/context/SubtasksModulesContext.es.js.map +1 -1
  693. package/dist/shared/src/context/WebsocketContext.cjs.js +1 -1
  694. package/dist/shared/src/context/WebsocketContext.cjs.js.map +1 -1
  695. package/dist/shared/src/context/WebsocketContext.es.js +52 -45
  696. package/dist/shared/src/context/WebsocketContext.es.js.map +1 -1
  697. package/dist/shared/src/hooks/useEntityUpdate.cjs.js +1 -1
  698. package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
  699. package/dist/shared/src/hooks/useEntityUpdate.es.js +174 -2
  700. package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
  701. package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js +1 -1
  702. package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js.map +1 -1
  703. package/dist/shared/src/hooks/useGroupByRemoteModules.es.js +174 -2
  704. package/dist/shared/src/hooks/useGroupByRemoteModules.es.js.map +1 -1
  705. package/dist/shared/src/hooks/useHierarchyTable.cjs.js +1 -1
  706. package/dist/shared/src/hooks/useHierarchyTable.cjs.js.map +1 -1
  707. package/dist/shared/src/hooks/useHierarchyTable.es.js +174 -2
  708. package/dist/shared/src/hooks/useHierarchyTable.es.js.map +1 -1
  709. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +1 -1
  710. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
  711. package/dist/shared/src/hooks/useUserProjectConfig.es.js +174 -2
  712. package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
  713. package/dist/types/api/generated/graphql.d.ts +3 -3
  714. package/dist/types/api/queries/actions/index.d.ts +1 -0
  715. package/dist/types/api/queries/actions/refreshActiveAndPurgeOthers.d.ts +11 -0
  716. package/dist/types/api/queries/activities/getActivities.d.ts +65 -855
  717. package/dist/types/api/queries/activities/util/activitiesHelpers.d.ts +19 -0
  718. package/dist/types/api/queries/links/getEntityLinks.d.ts +4 -2
  719. package/dist/types/components/SyncButton/SyncButton.d.ts +11 -0
  720. package/dist/types/components/SyncButton/index.d.ts +1 -0
  721. package/dist/types/components/index.d.ts +1 -0
  722. package/dist/types/containers/Feed/components/ActivityStatusChange/ActivityStatusSecondary.d.ts +7 -0
  723. package/dist/types/containers/Feed/components/ActivityVersions/ActivityVersions.d.ts +3 -0
  724. package/dist/types/containers/Feed/hooks/useGetFeedActivitiesData.d.ts +3 -42
  725. package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +4 -4
  726. package/dist/types/containers/ProjectTreeTable/hooks/useFetchOverviewData.d.ts +10 -2
  727. package/dist/types/containers/ProjectTreeTable/types/overviewContext.d.ts +9 -2
  728. package/dist/types/containers/Slicer/context/SlicerContext.d.ts +1 -0
  729. package/dist/types/containers/Slicer/hooks/useSelectedEntityIds.d.ts +7 -1
  730. package/dist/types/containers/Views/utils/viewUpdateHelper.d.ts +7 -0
  731. package/dist/types/context/EntityUpdatesContext.d.ts +44 -0
  732. package/dist/types/context/EntityUpdatesContextInstance.d.ts +2 -0
  733. package/dist/types/context/ProjectFoldersContext.d.ts +2 -2
  734. package/dist/types/context/index.d.ts +1 -0
  735. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"activityRealtimeHandler.cjs.js","sources":["../../../../../../../src/api/queries/activities/util/activityRealtimeHandler.ts"],"sourcesContent":["import { PubSub, subscribeToThumbnailUpdates, ThumbnailUpdateMessage } from '@shared/util'\nimport { ActivitiesResult } from './activitiesHelpers'\nimport type { GetActivitiesQueryVariables } from '@shared/api'\nimport { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit'\nimport { FeedActivity } from '../types'\n\ntype ActivitiesGqlApi = {\n endpoints: {\n GetActivitiesById: {\n initiate: (\n args: { projectName: string; activityIds: string[]; entityIds: string | string[] },\n options?: { forceRefetch?: boolean },\n ) => any\n }\n }\n util: {\n invalidateTags: (tags: { type: string; id: string }[]) => any\n }\n}\n\nexport type ActivityMessage = {\n topic: string\n project: string\n user: string\n createdAt: string\n updatedAt: string\n id: string\n status: string\n summary?: {\n activity_id: string\n activity_type: string\n references: {\n entity_id: string\n entity_type: string\n reference_type: string\n }[]\n }\n}\n\ntype InfiniteDataDraft = {\n pages: ActivitiesResult[]\n}\n\ntype CacheLifecycleApi = {\n updateCachedData: (updateRecipe: (draft: InfiniteDataDraft) => void) => void\n cacheDataLoaded: Promise<unknown>\n cacheEntryRemoved: Promise<void>\n dispatch: ThunkDispatch<unknown, unknown, UnknownAction>\n getCacheEntry: () => { data?: InfiniteDataDraft }\n gqlApi: ActivitiesGqlApi\n}\n\n/**\n * Checks if a comment body contains a checklist\n */\nconst bodyHasChecklist = (body: string): boolean => {\n if (!body) return false\n return body.includes('* [ ]') || body.includes('* [x]')\n}\n\n/**\n * Handles real-time activity updates for the infinite query cache\n */\nexport const handleActivityRealtimeUpdates = async (\n queryArg: Omit<GetActivitiesQueryVariables, 'last' | 'first' | 'cursor'> & { filter?: any },\n {\n updateCachedData,\n cacheDataLoaded,\n cacheEntryRemoved,\n dispatch,\n getCacheEntry,\n gqlApi,\n }: CacheLifecycleApi,\n) => {\n let token: string | undefined\n let unsubscribeThumbnails: (() => void) | undefined\n\n try {\n // Wait for the initial query to resolve before proceeding\n await cacheDataLoaded\n\n unsubscribeThumbnails = subscribeToThumbnailUpdates(\n (messages: ThumbnailUpdateMessage[]) => {\n const draftData = getCacheEntry().data\n if (!draftData?.pages?.length) return\n\n // Map version ids/entity ids to their new thumbnail hashes\n const versionHashesData = messages.reduce((acc, message) => {\n if (message.summary.entityType === 'version') {\n acc[message.summary.entityId] = message.summary.thumbnailHash || '' // Use empty string if undefined\n }\n return acc\n }, {} as Record<string, string>)\n\n if (Object.keys(versionHashesData).length === 0) return\n\n updateCachedData((draft) => {\n if (!draft || !draft.pages) return\n draft.pages.forEach((page) => {\n page.activities?.forEach((activity) => {\n // Version hashes in activities exist when Activity is on a version.\n // Or the referenceId points to the version entity.\n if (\n activity.referenceType === 'version' &&\n activity.referenceId &&\n versionHashesData[activity.referenceId] !== undefined\n ) {\n if (!activity.version) {\n activity.version = {} as any\n }\n activity.version!.thumbnailHash = versionHashesData[activity.referenceId]\n }\n // Add check for entityId as well\n if (\n activity.origin.type === 'version' &&\n activity.origin.id &&\n versionHashesData[activity.origin.id] !== undefined\n ) {\n if (!activity.version) {\n activity.version = {} as any\n }\n activity.version!.thumbnailHash = versionHashesData[activity.origin.id]\n }\n })\n })\n })\n },\n ['version'],\n )\n\n const handlePubSub = async (topic: string, message: ActivityMessage) => {\n const activityId = message.summary?.activity_id\n if (!activityId) {\n console.warn('[Activity RT] Activity message missing activity_id', message)\n return\n }\n\n const projectName = message.project\n const references = message.summary?.references || []\n const relevantReferenceTypes = ['origin', 'mention', 'relation']\n const entityIds = references\n .filter((reference) => relevantReferenceTypes.includes(reference.reference_type))\n .map((reference) => reference.entity_id)\n\n // Check if this activity is relevant to the current cache\n const queryEntityIds = Array.isArray(queryArg.entityIds)\n ? queryArg.entityIds\n : [queryArg.entityIds]\n\n const isRelevant = queryEntityIds.some((qId) => entityIds.includes(qId))\n\n if (!isRelevant && queryEntityIds.length > 0) {\n return\n }\n\n const activityType = message.summary?.activity_type\n if (!activityType) {\n return\n }\n\n // Handle deletion\n if (topic === 'activity.deleted') {\n updateCachedData((draft) => {\n if (!draft || !draft.pages) {\n console.warn('[Activity RT] No draft or pages found for deletion')\n return\n }\n\n let deleted = false\n for (const page of draft.pages) {\n const index = page.activities?.findIndex(\n (activity) => activity.activityId === activityId,\n )\n if (index !== -1) {\n page.activities.splice(index, 1)\n deleted = true\n }\n }\n\n if (deleted) {\n } else {\n }\n })\n return\n }\n\n // Handle creation and updates\n try {\n // Fetch the updated activity data using the enhanced endpoint\n // The GetActivitiesById endpoint is enhanced to return ActivitiesResult via transformResponse\n const result = await dispatch(\n gqlApi.endpoints.GetActivitiesById.initiate(\n {\n projectName,\n activityIds: [activityId],\n entityIds,\n },\n {\n forceRefetch: true, // Always fetch fresh data\n },\n ),\n )\n\n // Check if we have an error\n if ('error' in result && result.error) {\n console.error('[Activity RT] Error fetching activity:', result.error)\n throw new Error('Failed to fetch activity')\n }\n\n // The transformResponse in enhanceActivitiesApi converts GetActivitiesByIdQuery to ActivitiesResult\n // TypeScript doesn't see this transformation, so we cast through unknown\n const unknownData: unknown = result.data\n const res = unknownData as ActivitiesResult\n const newActivities = res?.activities || []\n\n if (newActivities.length === 0) {\n console.warn('[Activity RT] No activities found for activity_id', activityId)\n return\n }\n\n const newActivity: FeedActivity = newActivities[0]\n\n // Determine activity types to check against\n const activityTypes = [activityType]\n if (activityType === 'comment') {\n const body = newActivity?.body\n const hasChecklist = bodyHasChecklist(body || '')\n if (hasChecklist) {\n activityTypes.push('checklist')\n }\n }\n\n // Check if this activity type is relevant to the query\n const queryActivityTypes = queryArg.activityTypes\n const queryActivityTypesArray = Array.isArray(queryActivityTypes)\n ? queryActivityTypes\n : queryActivityTypes\n ? [queryActivityTypes]\n : []\n const isActivityTypeRelevant =\n queryActivityTypesArray.length === 0 ||\n queryActivityTypesArray.some((type: string) => activityTypes.includes(type))\n\n if (!isActivityTypeRelevant) {\n return\n }\n\n // Update the cache\n updateCachedData((draft) => {\n if (!draft || !draft.pages) {\n console.warn('[Activity RT] No draft or pages found for update')\n return\n }\n\n // Check if activity already exists in any page\n let existingActivityFound = false\n for (const page of draft.pages) {\n const index = page.activities?.findIndex(\n (activity) => activity.activityId === activityId,\n )\n if (index !== -1) {\n // Update existing activity\n page.activities[index] = newActivity\n existingActivityFound = true\n break\n }\n }\n\n // If it's a new activity (topic is 'activity.created'), add it to the first page\n if (!existingActivityFound && topic === 'activity.created') {\n if (draft.pages.length > 0 && draft.pages[0].activities) {\n // Add to the beginning of the first page (most recent activities first)\n // Since we're using reverse chronological order (last: N), prepend to the beginning\n draft.pages[0].activities.unshift(newActivity)\n } else {\n console.warn('[Activity RT] Cannot add activity: no pages or activities array')\n }\n } else if (!existingActivityFound) {\n } else {\n }\n })\n } catch (error) {\n console.error('[Activity RT] Error fetching activity data for real-time update:', error)\n\n // Invalidate the cache for these entities to trigger a refetch\n dispatch(\n gqlApi.util.invalidateTags(\n entityIds.map((entityId) => ({ type: 'entityActivities', id: entityId })),\n ),\n )\n }\n }\n\n // Subscribe to activity topic\n token = PubSub.subscribe(['activity'], handlePubSub)\n } catch (error) {\n console.error('[Activity RT] Error in activity real-time handler setup:', error)\n // no-op in case `cacheEntryRemoved` resolves before `cacheDataLoaded`\n }\n\n // Wait for cache entry to be removed\n await cacheEntryRemoved\n\n // Cleanup: unsubscribe from PubSub\n if (token) {\n PubSub.unsubscribe(token)\n }\n if (unsubscribeThumbnails) {\n unsubscribeThumbnails()\n }\n}\n"],"names":["bodyHasChecklist","body","handleActivityRealtimeUpdates","queryArg","updateCachedData","cacheDataLoaded","cacheEntryRemoved","dispatch","getCacheEntry","gqlApi","token","unsubscribeThumbnails","subscribeToThumbnailUpdates","messages","versionHashesData","acc","message","draft","page","activity","handlePubSub","topic","activityId","projectName","references","relevantReferenceTypes","entityIds","reference","queryEntityIds","qId","activityType","deleted","index","result","newActivities","newActivity","activityTypes","queryActivityTypes","queryActivityTypesArray","type","existingActivityFound","error","entityId","PubSub"],"mappings":"uiJAuDMA,EAAoBC,GACnBA,EACEA,EAAK,SAAS,OAAO,GAAKA,EAAK,SAAS,OAAO,EADpC,GAOPC,EAAgC,MAC3CC,EACA,CACE,iBAAAC,EACA,gBAAAC,EACA,kBAAAC,EACA,SAAAC,EACA,cAAAC,EACA,OAAAC,CACF,IACG,CACH,IAAIC,EACAC,EAEJ,GAAI,CAEF,MAAMN,EAENM,EAAwBC,EAAAA,4BACrBC,GAAuC,CAEtC,GAAI,CADcL,IAAgB,MAClB,OAAO,OAAQ,OAG/B,MAAMM,EAAoBD,EAAS,OAAO,CAACE,EAAKC,KAC1CA,EAAQ,QAAQ,aAAe,YACjCD,EAAIC,EAAQ,QAAQ,QAAQ,EAAIA,EAAQ,QAAQ,eAAiB,IAE5DD,GACN,CAAA,CAA4B,EAE3B,OAAO,KAAKD,CAAiB,EAAE,SAAW,GAE9CV,EAAkBa,GAAU,CACtB,CAACA,GAAS,CAACA,EAAM,OACrBA,EAAM,MAAM,QAASC,GAAS,CAC5BA,EAAK,YAAY,QAASC,GAAa,CAInCA,EAAS,gBAAkB,WAC3BA,EAAS,aACTL,EAAkBK,EAAS,WAAW,IAAM,SAEvCA,EAAS,UACZA,EAAS,QAAU,CAAA,GAErBA,EAAS,QAAS,cAAgBL,EAAkBK,EAAS,WAAW,GAIxEA,EAAS,OAAO,OAAS,WACzBA,EAAS,OAAO,IAChBL,EAAkBK,EAAS,OAAO,EAAE,IAAM,SAErCA,EAAS,UACZA,EAAS,QAAU,CAAA,GAErBA,EAAS,QAAS,cAAgBL,EAAkBK,EAAS,OAAO,EAAE,EAE1E,CAAC,CACH,CAAC,CACH,CAAC,CACH,EACA,CAAC,SAAS,CAAA,EAGZ,MAAMC,EAAe,MAAOC,EAAeL,IAA6B,CACtE,MAAMM,EAAaN,EAAQ,SAAS,YACpC,GAAI,CAACM,EAAY,CACf,QAAQ,KAAK,qDAAsDN,CAAO,EAC1E,MACF,CAEA,MAAMO,EAAcP,EAAQ,QACtBQ,EAAaR,EAAQ,SAAS,YAAc,CAAA,EAC5CS,EAAyB,CAAC,SAAU,UAAW,UAAU,EACzDC,EAAYF,EACf,OAAQG,GAAcF,EAAuB,SAASE,EAAU,cAAc,CAAC,EAC/E,IAAKA,GAAcA,EAAU,SAAS,EAGnCC,EAAiB,MAAM,QAAQzB,EAAS,SAAS,EACnDA,EAAS,UACT,CAACA,EAAS,SAAS,EAIvB,GAAI,CAFeyB,EAAe,KAAMC,GAAQH,EAAU,SAASG,CAAG,CAAC,GAEpDD,EAAe,OAAS,EACzC,OAGF,MAAME,EAAed,EAAQ,SAAS,cACtC,GAAKc,EAKL,IAAIT,IAAU,mBAAoB,CAChCjB,EAAkBa,GAAU,CAC1B,GAAI,CAACA,GAAS,CAACA,EAAM,MAAO,CAC1B,QAAQ,KAAK,oDAAoD,EACjE,MACF,CAEA,IAAIc,EAAU,GACd,UAAWb,KAAQD,EAAM,MAAO,CAC9B,MAAMe,EAAQd,EAAK,YAAY,UAC5BC,GAAaA,EAAS,aAAeG,CAAA,EAEpCU,IAAU,KACZd,EAAK,WAAW,OAAOc,EAAO,CAAC,EAC/BD,EAAU,GAEd,CAKF,CAAC,EACD,MACF,CAGA,GAAI,CAGF,MAAME,EAAS,MAAM1B,EACnBE,EAAO,UAAU,kBAAkB,SACjC,CACE,YAAAc,EACA,YAAa,CAACD,CAAU,EACxB,UAAAI,CAAA,EAEF,CACE,aAAc,EAAA,CAChB,CACF,EAIF,GAAI,UAAWO,GAAUA,EAAO,MAC9B,cAAQ,MAAM,yCAA0CA,EAAO,KAAK,EAC9D,IAAI,MAAM,0BAA0B,EAO5C,MAAMC,EAFuBD,EAAO,MAET,YAAc,CAAA,EAEzC,GAAIC,EAAc,SAAW,EAAG,CAC9B,QAAQ,KAAK,oDAAqDZ,CAAU,EAC5E,MACF,CAEA,MAAMa,EAA4BD,EAAc,CAAC,EAG3CE,EAAgB,CAACN,CAAY,EACnC,GAAIA,IAAiB,UAAW,CAC9B,MAAM7B,EAAOkC,GAAa,KACLnC,EAAiBC,GAAQ,EAAE,GAE9CmC,EAAc,KAAK,WAAW,CAElC,CAGA,MAAMC,EAAqBlC,EAAS,cAC9BmC,EAA0B,MAAM,QAAQD,CAAkB,EAC5DA,EACAA,EACA,CAACA,CAAkB,EACnB,CAAA,EAKJ,GAAI,EAHFC,EAAwB,SAAW,GACnCA,EAAwB,KAAMC,GAAiBH,EAAc,SAASG,CAAI,CAAC,GAG3E,OAIFnC,EAAkBa,GAAU,CAC1B,GAAI,CAACA,GAAS,CAACA,EAAM,MAAO,CAC1B,QAAQ,KAAK,kDAAkD,EAC/D,MACF,CAGA,IAAIuB,EAAwB,GAC5B,UAAWtB,KAAQD,EAAM,MAAO,CAC9B,MAAMe,EAAQd,EAAK,YAAY,UAC5BC,GAAaA,EAAS,aAAeG,CAAA,EAExC,GAAIU,IAAU,GAAI,CAEhBd,EAAK,WAAWc,CAAK,EAAIG,EACzBK,EAAwB,GACxB,KACF,CACF,CAGI,CAACA,GAAyBnB,IAAU,qBAClCJ,EAAM,MAAM,OAAS,GAAKA,EAAM,MAAM,CAAC,EAAE,WAG3CA,EAAM,MAAM,CAAC,EAAE,WAAW,QAAQkB,CAAW,EAE7C,QAAQ,KAAK,iEAAiE,EAKpF,CAAC,CACH,OAASM,EAAO,CACd,QAAQ,MAAM,mEAAoEA,CAAK,EAGvFlC,EACEE,EAAO,KAAK,eACViB,EAAU,IAAKgB,IAAc,CAAE,KAAM,mBAAoB,GAAIA,GAAW,CAAA,CAC1E,CAEJ,EACF,EAGAhC,EAAQiC,EAAO,UAAU,CAAC,UAAU,EAAGvB,CAAY,CACrD,OAASqB,EAAO,CACd,QAAQ,MAAM,2DAA4DA,CAAK,CAEjF,CAGA,MAAMnC,EAGFI,GACFiC,EAAO,YAAYjC,CAAK,EAEtBC,GACFA,EAAA,CAEJ"}
1
+ {"version":3,"file":"activityRealtimeHandler.cjs.js","sources":["../../../../../../../src/api/queries/activities/util/activityRealtimeHandler.ts"],"sourcesContent":["import { PubSub, subscribeToThumbnailUpdates, ThumbnailUpdateMessage } from '@shared/util'\nimport { ActivitiesResult } from './activitiesHelpers'\nimport type { GetActivitiesQueryVariables } from '@shared/api'\nimport { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit'\nimport { FeedActivity } from '../types'\n\ntype ActivitiesGqlApi = {\n endpoints: {\n GetActivitiesById: {\n initiate: (\n args: { projectName: string; activityIds: string[]; entityIds: string | string[] },\n options?: { forceRefetch?: boolean },\n ) => any\n }\n }\n util: {\n invalidateTags: (tags: { type: string; id: string }[]) => any\n }\n}\n\nexport type ActivityMessage = {\n topic: string\n project: string\n user: string\n createdAt: string\n updatedAt: string\n id: string\n status: string\n summary?: {\n activity_id: string\n activity_type: string\n references: {\n entity_id: string\n entity_type: string\n reference_type: string\n }[]\n }\n}\n\ntype InfiniteDataDraft = {\n pages: ActivitiesResult[]\n}\n\ntype CacheLifecycleApi = {\n updateCachedData: (updateRecipe: (draft: InfiniteDataDraft) => void) => void\n cacheDataLoaded: Promise<unknown>\n cacheEntryRemoved: Promise<void>\n dispatch: ThunkDispatch<unknown, unknown, UnknownAction>\n getCacheEntry: () => { data?: InfiniteDataDraft }\n gqlApi: ActivitiesGqlApi\n}\n\n/**\n * Checks if a comment body contains a checklist\n */\nconst bodyHasChecklist = (body: string): boolean => {\n if (!body) return false\n return body.includes('* [ ]') || body.includes('* [x]')\n}\n\n/**\n * Handles real-time activity updates for the infinite query cache\n */\nexport const handleActivityRealtimeUpdates = async (\n queryArg: Omit<GetActivitiesQueryVariables, 'last' | 'first' | 'cursor'> & { filter?: any },\n {\n updateCachedData,\n cacheDataLoaded,\n cacheEntryRemoved,\n dispatch,\n getCacheEntry,\n gqlApi,\n }: CacheLifecycleApi,\n) => {\n let token: string | undefined\n let unsubscribeThumbnails: (() => void) | undefined\n\n try {\n // Wait for the initial query to resolve before proceeding\n await cacheDataLoaded\n\n unsubscribeThumbnails = subscribeToThumbnailUpdates(\n (messages: ThumbnailUpdateMessage[]) => {\n const draftData = getCacheEntry().data\n if (!draftData?.pages?.length) return\n\n // Map version ids/entity ids to their new thumbnail hashes\n const versionHashesData = messages.reduce((acc, message) => {\n if (message.summary.entityType === 'version') {\n acc[message.summary.entityId] = message.summary.thumbnailHash || '' // Use empty string if undefined\n }\n return acc\n }, {} as Record<string, string>)\n\n if (Object.keys(versionHashesData).length === 0) return\n\n updateCachedData((draft) => {\n if (!draft || !draft.pages) return\n draft.pages.forEach((page) => {\n page.activities?.forEach((activity) => {\n // Version hashes in activities exist when Activity is on a version.\n // Or the referenceId points to the version entity.\n if (\n activity.referenceType === 'version' &&\n activity.referenceId &&\n versionHashesData[activity.referenceId] !== undefined\n ) {\n if (!activity.version) {\n activity.version = {} as any\n }\n activity.version!.thumbnailHash = versionHashesData[activity.referenceId]\n }\n // Add check for entityId as well\n if (\n activity.origin.type === 'version' &&\n activity.origin.id &&\n versionHashesData[activity.origin.id] !== undefined\n ) {\n if (!activity.version) {\n activity.version = {} as any\n }\n activity.version!.thumbnailHash = versionHashesData[activity.origin.id]\n }\n })\n })\n })\n },\n ['version'],\n )\n\n const handlePubSub = async (topic: string, message: ActivityMessage) => {\n const activityId = message.summary?.activity_id\n if (!activityId) {\n console.warn('[Activity RT] Activity message missing activity_id', message)\n return\n }\n\n const projectName = message.project\n const references = message.summary?.references || []\n const relevantReferenceTypes = ['origin', 'mention', 'relation']\n const entityIds = references\n .filter((reference) => relevantReferenceTypes.includes(reference.reference_type))\n .map((reference) => reference.entity_id)\n\n // Check if this activity is relevant to the current cache\n const queryEntityIds = Array.isArray(queryArg.entityIds)\n ? queryArg.entityIds\n : [queryArg.entityIds]\n\n const isRelevant = queryEntityIds.some((qId) => entityIds.includes(qId))\n\n if (!isRelevant && queryEntityIds.length > 0) {\n return\n }\n\n const activityType = message.summary?.activity_type\n if (!activityType) {\n return\n }\n\n // Handle deletion\n if (topic === 'activity.deleted') {\n updateCachedData((draft) => {\n if (!draft || !draft.pages) {\n console.warn('[Activity RT] No draft or pages found for deletion')\n return\n }\n\n let deleted = false\n for (const page of draft.pages) {\n const index = page.activities?.findIndex(\n (activity) => activity.activityId === activityId,\n )\n if (index !== -1) {\n page.activities.splice(index, 1)\n deleted = true\n }\n }\n\n if (deleted) {\n } else {\n }\n })\n return\n }\n\n // Handle creation and updates\n try {\n // Fetch the updated activity data using the enhanced endpoint\n // The GetActivitiesById endpoint is enhanced to return ActivitiesResult via transformResponse\n const result = await dispatch(\n gqlApi.endpoints.GetActivitiesById.initiate(\n {\n projectName,\n activityIds: [activityId],\n entityIds,\n },\n {\n forceRefetch: true, // Always fetch fresh data\n },\n ),\n )\n\n // Check if we have an error\n if ('error' in result && result.error) {\n console.error('[Activity RT] Error fetching activity:', result.error)\n throw new Error('Failed to fetch activity')\n }\n\n // The transformResponse in enhanceActivitiesApi converts GetActivitiesByIdQuery to ActivitiesResult\n // TypeScript doesn't see this transformation, so we cast through unknown\n const unknownData: unknown = result.data\n const res = unknownData as ActivitiesResult\n const newActivities = res?.activities || []\n\n if (newActivities.length === 0) {\n console.warn('[Activity RT] No activities found for activity_id', activityId)\n return\n }\n\n const newActivity: FeedActivity = newActivities[0]\n\n // Determine activity types to check against\n const activityTypes = [activityType]\n if (activityType === 'comment') {\n const body = newActivity?.body\n const hasChecklist = bodyHasChecklist(body || '')\n if (hasChecklist) {\n activityTypes.push('checklist')\n }\n }\n\n // Check if this activity type is relevant to the query\n const queryActivityTypes = queryArg.activityTypes\n const queryActivityTypesArray = Array.isArray(queryActivityTypes)\n ? queryActivityTypes\n : queryActivityTypes\n ? [queryActivityTypes]\n : []\n const isActivityTypeRelevant =\n queryActivityTypesArray.length === 0 ||\n queryActivityTypesArray.some((type: string) => activityTypes.includes(type))\n\n if (!isActivityTypeRelevant) {\n return\n }\n\n // Update the cache\n updateCachedData((draft) => {\n if (!draft || !draft.pages) {\n console.warn('[Activity RT] No draft or pages found for update')\n return\n }\n\n // Check if activity already exists in any page\n let existingActivityFound = false\n for (const page of draft.pages) {\n const index = page.activities?.findIndex(\n (activity) => activity.activityId === activityId,\n )\n if (index !== -1) {\n // Update existing activity\n page.activities[index] = newActivity\n existingActivityFound = true\n break\n }\n }\n\n // If it's a new activity (topic is 'activity.created'), add it to the first page\n if (!existingActivityFound && topic === 'activity.created') {\n if (draft.pages.length > 0 && draft.pages[0].activities) {\n // Add to the beginning of the first page (most recent activities first)\n // Since we're using reverse chronological order (last: N), prepend to the beginning\n draft.pages[0].activities.unshift(newActivity)\n } else {\n console.warn('[Activity RT] Cannot add activity: no pages or activities array')\n }\n }\n\n // If this is a status change, update any version.publish activities in the cache\n if (\n newActivity.activityType === 'status.change' &&\n newActivity.origin?.type === 'version'\n ) {\n const versionId = newActivity.origin.id\n const newStatus = newActivity.activityData?.newValue\n if (newStatus) {\n draft.pages.forEach((page) => {\n page.activities?.forEach((activity) => {\n if (\n activity.activityType === 'version.publish' &&\n activity.origin?.id === versionId\n ) {\n if (!activity.version) {\n activity.version = {} as any\n }\n activity.version!.status = newStatus\n }\n })\n })\n }\n }\n })\n } catch (error) {\n console.error('[Activity RT] Error fetching activity data for real-time update:', error)\n\n // Invalidate the cache for these entities to trigger a refetch\n dispatch(\n gqlApi.util.invalidateTags(\n entityIds.map((entityId) => ({ type: 'entityActivities', id: entityId })),\n ),\n )\n }\n }\n\n // Subscribe to activity topic\n token = PubSub.subscribe(['activity'], handlePubSub)\n } catch (error) {\n console.error('[Activity RT] Error in activity real-time handler setup:', error)\n // no-op in case `cacheEntryRemoved` resolves before `cacheDataLoaded`\n }\n\n // Wait for cache entry to be removed\n await cacheEntryRemoved\n\n // Cleanup: unsubscribe from PubSub\n if (token) {\n PubSub.unsubscribe(token)\n }\n if (unsubscribeThumbnails) {\n unsubscribeThumbnails()\n }\n}\n"],"names":["bodyHasChecklist","body","handleActivityRealtimeUpdates","queryArg","updateCachedData","cacheDataLoaded","cacheEntryRemoved","dispatch","getCacheEntry","gqlApi","token","unsubscribeThumbnails","subscribeToThumbnailUpdates","messages","versionHashesData","acc","message","draft","page","activity","handlePubSub","topic","activityId","projectName","references","relevantReferenceTypes","entityIds","reference","queryEntityIds","qId","activityType","deleted","index","result","newActivities","newActivity","activityTypes","queryActivityTypes","queryActivityTypesArray","type","existingActivityFound","versionId","newStatus","error","entityId","PubSub"],"mappings":"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"}
@@ -99,23 +99,23 @@ import "../../views/getViews.es.js";
99
99
  import "../../views/updateViews.es.js";
100
100
  import "../../watchers/getWatchers.es.js";
101
101
  import "../../uris/getUris.es.js";
102
- import _ from "../../../../util/pubsub.es.js";
103
- const F = (o) => o ? o.includes("* [ ]") || o.includes("* [x]") : !1, jt = async (o, {
104
- updateCachedData: u,
105
- cacheDataLoaded: H,
106
- cacheEntryRemoved: N,
107
- dispatch: A,
108
- getCacheEntry: j,
109
- gqlApi: I
102
+ import D from "../../../../util/pubsub.es.js";
103
+ const F = (n) => n ? n.includes("* [ ]") || n.includes("* [x]") : !1, jt = async (n, {
104
+ updateCachedData: d,
105
+ cacheDataLoaded: N,
106
+ cacheEntryRemoved: j,
107
+ dispatch: k,
108
+ getCacheEntry: S,
109
+ gqlApi: E
110
110
  }) => {
111
- let v, d;
111
+ let h, g;
112
112
  try {
113
- await H, d = C(
114
- (y) => {
115
- if (!j().data?.pages?.length) return;
116
- const r = y.reduce((n, p) => (p.summary.entityType === "version" && (n[p.summary.entityId] = p.summary.thumbnailHash || ""), n), {});
117
- Object.keys(r).length !== 0 && u((n) => {
118
- !n || !n.pages || n.pages.forEach((p) => {
113
+ await N, g = C(
114
+ (u) => {
115
+ if (!S().data?.pages?.length) return;
116
+ const r = u.reduce((s, p) => (p.summary.entityType === "version" && (s[p.summary.entityId] = p.summary.thumbnailHash || ""), s), {});
117
+ Object.keys(r).length !== 0 && d((s) => {
118
+ !s || !s.pages || s.pages.forEach((p) => {
119
119
  p.activities?.forEach((i) => {
120
120
  i.referenceType === "version" && i.referenceId && r[i.referenceId] !== void 0 && (i.version || (i.version = {}), i.version.thumbnailHash = r[i.referenceId]), i.origin.type === "version" && i.origin.id && r[i.origin.id] !== void 0 && (i.version || (i.version = {}), i.version.thumbnailHash = r[i.origin.id]);
121
121
  });
@@ -124,40 +124,40 @@ const F = (o) => o ? o.includes("* [ ]") || o.includes("* [x]") : !1, jt = async
124
124
  },
125
125
  ["version"]
126
126
  );
127
- const h = async (y, s) => {
128
- const r = s.summary?.activity_id;
127
+ const T = async (u, m) => {
128
+ const r = m.summary?.activity_id;
129
129
  if (!r) {
130
- console.warn("[Activity RT] Activity message missing activity_id", s);
130
+ console.warn("[Activity RT] Activity message missing activity_id", m);
131
131
  return;
132
132
  }
133
- const n = s.project, p = s.summary?.references || [], i = ["origin", "mention", "relation"], g = p.filter((t) => i.includes(t.reference_type)).map((t) => t.entity_id), R = Array.isArray(o.entityIds) ? o.entityIds : [o.entityIds];
134
- if (!R.some((t) => g.includes(t)) && R.length > 0)
133
+ const s = m.project, p = m.summary?.references || [], i = ["origin", "mention", "relation"], b = p.filter((t) => i.includes(t.reference_type)).map((t) => t.entity_id), x = Array.isArray(n.entityIds) ? n.entityIds : [n.entityIds];
134
+ if (!x.some((t) => b.includes(t)) && x.length > 0)
135
135
  return;
136
- const T = s.summary?.activity_type;
137
- if (T) {
138
- if (y === "activity.deleted") {
139
- u((t) => {
136
+ const A = m.summary?.activity_type;
137
+ if (A) {
138
+ if (u === "activity.deleted") {
139
+ d((t) => {
140
140
  if (!t || !t.pages) {
141
141
  console.warn("[Activity RT] No draft or pages found for deletion");
142
142
  return;
143
143
  }
144
- let m = !1;
145
- for (const b of t.pages) {
146
- const c = b.activities?.findIndex(
147
- (a) => a.activityId === r
144
+ let c = !1;
145
+ for (const I of t.pages) {
146
+ const a = I.activities?.findIndex(
147
+ (o) => o.activityId === r
148
148
  );
149
- c !== -1 && (b.activities.splice(c, 1), m = !0);
149
+ a !== -1 && (I.activities.splice(a, 1), c = !0);
150
150
  }
151
151
  });
152
152
  return;
153
153
  }
154
154
  try {
155
- const t = await A(
156
- I.endpoints.GetActivitiesById.initiate(
155
+ const t = await k(
156
+ E.endpoints.GetActivitiesById.initiate(
157
157
  {
158
- projectName: n,
158
+ projectName: s,
159
159
  activityIds: [r],
160
- entityIds: g
160
+ entityIds: b
161
161
  },
162
162
  {
163
163
  forceRefetch: !0
@@ -167,50 +167,57 @@ const F = (o) => o ? o.includes("* [ ]") || o.includes("* [x]") : !1, jt = async
167
167
  );
168
168
  if ("error" in t && t.error)
169
169
  throw console.error("[Activity RT] Error fetching activity:", t.error), new Error("Failed to fetch activity");
170
- const c = t.data?.activities || [];
171
- if (c.length === 0) {
170
+ const a = t.data?.activities || [];
171
+ if (a.length === 0) {
172
172
  console.warn("[Activity RT] No activities found for activity_id", r);
173
173
  return;
174
174
  }
175
- const a = c[0], w = [T];
176
- if (T === "comment") {
177
- const e = a?.body;
178
- F(e || "") && w.push("checklist");
175
+ const o = a[0], _ = [A];
176
+ if (A === "comment") {
177
+ const e = o?.body;
178
+ F(e || "") && _.push("checklist");
179
179
  }
180
- const l = o.activityTypes, k = Array.isArray(l) ? l : l ? [l] : [];
181
- if (!(k.length === 0 || k.some((e) => w.includes(e))))
180
+ const v = n.activityTypes, H = Array.isArray(v) ? v : v ? [v] : [];
181
+ if (!(H.length === 0 || H.some((e) => _.includes(e))))
182
182
  return;
183
- u((e) => {
183
+ d((e) => {
184
184
  if (!e || !e.pages) {
185
185
  console.warn("[Activity RT] No draft or pages found for update");
186
186
  return;
187
187
  }
188
- let f = !1;
189
- for (const x of e.pages) {
190
- const E = x.activities?.findIndex(
191
- (D) => D.activityId === r
188
+ let w = !1;
189
+ for (const l of e.pages) {
190
+ const y = l.activities?.findIndex(
191
+ (R) => R.activityId === r
192
192
  );
193
- if (E !== -1) {
194
- x.activities[E] = a, f = !0;
193
+ if (y !== -1) {
194
+ l.activities[y] = o, w = !0;
195
195
  break;
196
196
  }
197
197
  }
198
- !f && y === "activity.created" && (e.pages.length > 0 && e.pages[0].activities ? e.pages[0].activities.unshift(a) : console.warn("[Activity RT] Cannot add activity: no pages or activities array"));
198
+ if (!w && u === "activity.created" && (e.pages.length > 0 && e.pages[0].activities ? e.pages[0].activities.unshift(o) : console.warn("[Activity RT] Cannot add activity: no pages or activities array")), o.activityType === "status.change" && o.origin?.type === "version") {
199
+ const l = o.origin.id, y = o.activityData?.newValue;
200
+ y && e.pages.forEach((R) => {
201
+ R.activities?.forEach((f) => {
202
+ f.activityType === "version.publish" && f.origin?.id === l && (f.version || (f.version = {}), f.version.status = y);
203
+ });
204
+ });
205
+ }
199
206
  });
200
207
  } catch (t) {
201
- console.error("[Activity RT] Error fetching activity data for real-time update:", t), A(
202
- I.util.invalidateTags(
203
- g.map((m) => ({ type: "entityActivities", id: m }))
208
+ console.error("[Activity RT] Error fetching activity data for real-time update:", t), k(
209
+ E.util.invalidateTags(
210
+ b.map((c) => ({ type: "entityActivities", id: c }))
204
211
  )
205
212
  );
206
213
  }
207
214
  }
208
215
  };
209
- v = _.subscribe(["activity"], h);
210
- } catch (h) {
211
- console.error("[Activity RT] Error in activity real-time handler setup:", h);
216
+ h = D.subscribe(["activity"], T);
217
+ } catch (T) {
218
+ console.error("[Activity RT] Error in activity real-time handler setup:", T);
212
219
  }
213
- await N, v && _.unsubscribe(v), d && d();
220
+ await j, h && D.unsubscribe(h), g && g();
214
221
  };
215
222
  export {
216
223
  jt as handleActivityRealtimeUpdates
@@ -1 +1 @@
1
- {"version":3,"file":"activityRealtimeHandler.es.js","sources":["../../../../../../../src/api/queries/activities/util/activityRealtimeHandler.ts"],"sourcesContent":["import { PubSub, subscribeToThumbnailUpdates, ThumbnailUpdateMessage } from '@shared/util'\nimport { ActivitiesResult } from './activitiesHelpers'\nimport type { GetActivitiesQueryVariables } from '@shared/api'\nimport { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit'\nimport { FeedActivity } from '../types'\n\ntype ActivitiesGqlApi = {\n endpoints: {\n GetActivitiesById: {\n initiate: (\n args: { projectName: string; activityIds: string[]; entityIds: string | string[] },\n options?: { forceRefetch?: boolean },\n ) => any\n }\n }\n util: {\n invalidateTags: (tags: { type: string; id: string }[]) => any\n }\n}\n\nexport type ActivityMessage = {\n topic: string\n project: string\n user: string\n createdAt: string\n updatedAt: string\n id: string\n status: string\n summary?: {\n activity_id: string\n activity_type: string\n references: {\n entity_id: string\n entity_type: string\n reference_type: string\n }[]\n }\n}\n\ntype InfiniteDataDraft = {\n pages: ActivitiesResult[]\n}\n\ntype CacheLifecycleApi = {\n updateCachedData: (updateRecipe: (draft: InfiniteDataDraft) => void) => void\n cacheDataLoaded: Promise<unknown>\n cacheEntryRemoved: Promise<void>\n dispatch: ThunkDispatch<unknown, unknown, UnknownAction>\n getCacheEntry: () => { data?: InfiniteDataDraft }\n gqlApi: ActivitiesGqlApi\n}\n\n/**\n * Checks if a comment body contains a checklist\n */\nconst bodyHasChecklist = (body: string): boolean => {\n if (!body) return false\n return body.includes('* [ ]') || body.includes('* [x]')\n}\n\n/**\n * Handles real-time activity updates for the infinite query cache\n */\nexport const handleActivityRealtimeUpdates = async (\n queryArg: Omit<GetActivitiesQueryVariables, 'last' | 'first' | 'cursor'> & { filter?: any },\n {\n updateCachedData,\n cacheDataLoaded,\n cacheEntryRemoved,\n dispatch,\n getCacheEntry,\n gqlApi,\n }: CacheLifecycleApi,\n) => {\n let token: string | undefined\n let unsubscribeThumbnails: (() => void) | undefined\n\n try {\n // Wait for the initial query to resolve before proceeding\n await cacheDataLoaded\n\n unsubscribeThumbnails = subscribeToThumbnailUpdates(\n (messages: ThumbnailUpdateMessage[]) => {\n const draftData = getCacheEntry().data\n if (!draftData?.pages?.length) return\n\n // Map version ids/entity ids to their new thumbnail hashes\n const versionHashesData = messages.reduce((acc, message) => {\n if (message.summary.entityType === 'version') {\n acc[message.summary.entityId] = message.summary.thumbnailHash || '' // Use empty string if undefined\n }\n return acc\n }, {} as Record<string, string>)\n\n if (Object.keys(versionHashesData).length === 0) return\n\n updateCachedData((draft) => {\n if (!draft || !draft.pages) return\n draft.pages.forEach((page) => {\n page.activities?.forEach((activity) => {\n // Version hashes in activities exist when Activity is on a version.\n // Or the referenceId points to the version entity.\n if (\n activity.referenceType === 'version' &&\n activity.referenceId &&\n versionHashesData[activity.referenceId] !== undefined\n ) {\n if (!activity.version) {\n activity.version = {} as any\n }\n activity.version!.thumbnailHash = versionHashesData[activity.referenceId]\n }\n // Add check for entityId as well\n if (\n activity.origin.type === 'version' &&\n activity.origin.id &&\n versionHashesData[activity.origin.id] !== undefined\n ) {\n if (!activity.version) {\n activity.version = {} as any\n }\n activity.version!.thumbnailHash = versionHashesData[activity.origin.id]\n }\n })\n })\n })\n },\n ['version'],\n )\n\n const handlePubSub = async (topic: string, message: ActivityMessage) => {\n const activityId = message.summary?.activity_id\n if (!activityId) {\n console.warn('[Activity RT] Activity message missing activity_id', message)\n return\n }\n\n const projectName = message.project\n const references = message.summary?.references || []\n const relevantReferenceTypes = ['origin', 'mention', 'relation']\n const entityIds = references\n .filter((reference) => relevantReferenceTypes.includes(reference.reference_type))\n .map((reference) => reference.entity_id)\n\n // Check if this activity is relevant to the current cache\n const queryEntityIds = Array.isArray(queryArg.entityIds)\n ? queryArg.entityIds\n : [queryArg.entityIds]\n\n const isRelevant = queryEntityIds.some((qId) => entityIds.includes(qId))\n\n if (!isRelevant && queryEntityIds.length > 0) {\n return\n }\n\n const activityType = message.summary?.activity_type\n if (!activityType) {\n return\n }\n\n // Handle deletion\n if (topic === 'activity.deleted') {\n updateCachedData((draft) => {\n if (!draft || !draft.pages) {\n console.warn('[Activity RT] No draft or pages found for deletion')\n return\n }\n\n let deleted = false\n for (const page of draft.pages) {\n const index = page.activities?.findIndex(\n (activity) => activity.activityId === activityId,\n )\n if (index !== -1) {\n page.activities.splice(index, 1)\n deleted = true\n }\n }\n\n if (deleted) {\n } else {\n }\n })\n return\n }\n\n // Handle creation and updates\n try {\n // Fetch the updated activity data using the enhanced endpoint\n // The GetActivitiesById endpoint is enhanced to return ActivitiesResult via transformResponse\n const result = await dispatch(\n gqlApi.endpoints.GetActivitiesById.initiate(\n {\n projectName,\n activityIds: [activityId],\n entityIds,\n },\n {\n forceRefetch: true, // Always fetch fresh data\n },\n ),\n )\n\n // Check if we have an error\n if ('error' in result && result.error) {\n console.error('[Activity RT] Error fetching activity:', result.error)\n throw new Error('Failed to fetch activity')\n }\n\n // The transformResponse in enhanceActivitiesApi converts GetActivitiesByIdQuery to ActivitiesResult\n // TypeScript doesn't see this transformation, so we cast through unknown\n const unknownData: unknown = result.data\n const res = unknownData as ActivitiesResult\n const newActivities = res?.activities || []\n\n if (newActivities.length === 0) {\n console.warn('[Activity RT] No activities found for activity_id', activityId)\n return\n }\n\n const newActivity: FeedActivity = newActivities[0]\n\n // Determine activity types to check against\n const activityTypes = [activityType]\n if (activityType === 'comment') {\n const body = newActivity?.body\n const hasChecklist = bodyHasChecklist(body || '')\n if (hasChecklist) {\n activityTypes.push('checklist')\n }\n }\n\n // Check if this activity type is relevant to the query\n const queryActivityTypes = queryArg.activityTypes\n const queryActivityTypesArray = Array.isArray(queryActivityTypes)\n ? queryActivityTypes\n : queryActivityTypes\n ? [queryActivityTypes]\n : []\n const isActivityTypeRelevant =\n queryActivityTypesArray.length === 0 ||\n queryActivityTypesArray.some((type: string) => activityTypes.includes(type))\n\n if (!isActivityTypeRelevant) {\n return\n }\n\n // Update the cache\n updateCachedData((draft) => {\n if (!draft || !draft.pages) {\n console.warn('[Activity RT] No draft or pages found for update')\n return\n }\n\n // Check if activity already exists in any page\n let existingActivityFound = false\n for (const page of draft.pages) {\n const index = page.activities?.findIndex(\n (activity) => activity.activityId === activityId,\n )\n if (index !== -1) {\n // Update existing activity\n page.activities[index] = newActivity\n existingActivityFound = true\n break\n }\n }\n\n // If it's a new activity (topic is 'activity.created'), add it to the first page\n if (!existingActivityFound && topic === 'activity.created') {\n if (draft.pages.length > 0 && draft.pages[0].activities) {\n // Add to the beginning of the first page (most recent activities first)\n // Since we're using reverse chronological order (last: N), prepend to the beginning\n draft.pages[0].activities.unshift(newActivity)\n } else {\n console.warn('[Activity RT] Cannot add activity: no pages or activities array')\n }\n } else if (!existingActivityFound) {\n } else {\n }\n })\n } catch (error) {\n console.error('[Activity RT] Error fetching activity data for real-time update:', error)\n\n // Invalidate the cache for these entities to trigger a refetch\n dispatch(\n gqlApi.util.invalidateTags(\n entityIds.map((entityId) => ({ type: 'entityActivities', id: entityId })),\n ),\n )\n }\n }\n\n // Subscribe to activity topic\n token = PubSub.subscribe(['activity'], handlePubSub)\n } catch (error) {\n console.error('[Activity RT] Error in activity real-time handler setup:', error)\n // no-op in case `cacheEntryRemoved` resolves before `cacheDataLoaded`\n }\n\n // Wait for cache entry to be removed\n await cacheEntryRemoved\n\n // Cleanup: unsubscribe from PubSub\n if (token) {\n PubSub.unsubscribe(token)\n }\n if (unsubscribeThumbnails) {\n unsubscribeThumbnails()\n }\n}\n"],"names":["bodyHasChecklist","body","handleActivityRealtimeUpdates","queryArg","updateCachedData","cacheDataLoaded","cacheEntryRemoved","dispatch","getCacheEntry","gqlApi","token","unsubscribeThumbnails","subscribeToThumbnailUpdates","messages","versionHashesData","acc","message","draft","page","activity","handlePubSub","topic","activityId","projectName","references","relevantReferenceTypes","entityIds","reference","queryEntityIds","qId","activityType","deleted","index","result","newActivities","newActivity","activityTypes","queryActivityTypes","queryActivityTypesArray","type","existingActivityFound","error","entityId","PubSub"],"mappings":"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"}
1
+ {"version":3,"file":"activityRealtimeHandler.es.js","sources":["../../../../../../../src/api/queries/activities/util/activityRealtimeHandler.ts"],"sourcesContent":["import { PubSub, subscribeToThumbnailUpdates, ThumbnailUpdateMessage } from '@shared/util'\nimport { ActivitiesResult } from './activitiesHelpers'\nimport type { GetActivitiesQueryVariables } from '@shared/api'\nimport { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit'\nimport { FeedActivity } from '../types'\n\ntype ActivitiesGqlApi = {\n endpoints: {\n GetActivitiesById: {\n initiate: (\n args: { projectName: string; activityIds: string[]; entityIds: string | string[] },\n options?: { forceRefetch?: boolean },\n ) => any\n }\n }\n util: {\n invalidateTags: (tags: { type: string; id: string }[]) => any\n }\n}\n\nexport type ActivityMessage = {\n topic: string\n project: string\n user: string\n createdAt: string\n updatedAt: string\n id: string\n status: string\n summary?: {\n activity_id: string\n activity_type: string\n references: {\n entity_id: string\n entity_type: string\n reference_type: string\n }[]\n }\n}\n\ntype InfiniteDataDraft = {\n pages: ActivitiesResult[]\n}\n\ntype CacheLifecycleApi = {\n updateCachedData: (updateRecipe: (draft: InfiniteDataDraft) => void) => void\n cacheDataLoaded: Promise<unknown>\n cacheEntryRemoved: Promise<void>\n dispatch: ThunkDispatch<unknown, unknown, UnknownAction>\n getCacheEntry: () => { data?: InfiniteDataDraft }\n gqlApi: ActivitiesGqlApi\n}\n\n/**\n * Checks if a comment body contains a checklist\n */\nconst bodyHasChecklist = (body: string): boolean => {\n if (!body) return false\n return body.includes('* [ ]') || body.includes('* [x]')\n}\n\n/**\n * Handles real-time activity updates for the infinite query cache\n */\nexport const handleActivityRealtimeUpdates = async (\n queryArg: Omit<GetActivitiesQueryVariables, 'last' | 'first' | 'cursor'> & { filter?: any },\n {\n updateCachedData,\n cacheDataLoaded,\n cacheEntryRemoved,\n dispatch,\n getCacheEntry,\n gqlApi,\n }: CacheLifecycleApi,\n) => {\n let token: string | undefined\n let unsubscribeThumbnails: (() => void) | undefined\n\n try {\n // Wait for the initial query to resolve before proceeding\n await cacheDataLoaded\n\n unsubscribeThumbnails = subscribeToThumbnailUpdates(\n (messages: ThumbnailUpdateMessage[]) => {\n const draftData = getCacheEntry().data\n if (!draftData?.pages?.length) return\n\n // Map version ids/entity ids to their new thumbnail hashes\n const versionHashesData = messages.reduce((acc, message) => {\n if (message.summary.entityType === 'version') {\n acc[message.summary.entityId] = message.summary.thumbnailHash || '' // Use empty string if undefined\n }\n return acc\n }, {} as Record<string, string>)\n\n if (Object.keys(versionHashesData).length === 0) return\n\n updateCachedData((draft) => {\n if (!draft || !draft.pages) return\n draft.pages.forEach((page) => {\n page.activities?.forEach((activity) => {\n // Version hashes in activities exist when Activity is on a version.\n // Or the referenceId points to the version entity.\n if (\n activity.referenceType === 'version' &&\n activity.referenceId &&\n versionHashesData[activity.referenceId] !== undefined\n ) {\n if (!activity.version) {\n activity.version = {} as any\n }\n activity.version!.thumbnailHash = versionHashesData[activity.referenceId]\n }\n // Add check for entityId as well\n if (\n activity.origin.type === 'version' &&\n activity.origin.id &&\n versionHashesData[activity.origin.id] !== undefined\n ) {\n if (!activity.version) {\n activity.version = {} as any\n }\n activity.version!.thumbnailHash = versionHashesData[activity.origin.id]\n }\n })\n })\n })\n },\n ['version'],\n )\n\n const handlePubSub = async (topic: string, message: ActivityMessage) => {\n const activityId = message.summary?.activity_id\n if (!activityId) {\n console.warn('[Activity RT] Activity message missing activity_id', message)\n return\n }\n\n const projectName = message.project\n const references = message.summary?.references || []\n const relevantReferenceTypes = ['origin', 'mention', 'relation']\n const entityIds = references\n .filter((reference) => relevantReferenceTypes.includes(reference.reference_type))\n .map((reference) => reference.entity_id)\n\n // Check if this activity is relevant to the current cache\n const queryEntityIds = Array.isArray(queryArg.entityIds)\n ? queryArg.entityIds\n : [queryArg.entityIds]\n\n const isRelevant = queryEntityIds.some((qId) => entityIds.includes(qId))\n\n if (!isRelevant && queryEntityIds.length > 0) {\n return\n }\n\n const activityType = message.summary?.activity_type\n if (!activityType) {\n return\n }\n\n // Handle deletion\n if (topic === 'activity.deleted') {\n updateCachedData((draft) => {\n if (!draft || !draft.pages) {\n console.warn('[Activity RT] No draft or pages found for deletion')\n return\n }\n\n let deleted = false\n for (const page of draft.pages) {\n const index = page.activities?.findIndex(\n (activity) => activity.activityId === activityId,\n )\n if (index !== -1) {\n page.activities.splice(index, 1)\n deleted = true\n }\n }\n\n if (deleted) {\n } else {\n }\n })\n return\n }\n\n // Handle creation and updates\n try {\n // Fetch the updated activity data using the enhanced endpoint\n // The GetActivitiesById endpoint is enhanced to return ActivitiesResult via transformResponse\n const result = await dispatch(\n gqlApi.endpoints.GetActivitiesById.initiate(\n {\n projectName,\n activityIds: [activityId],\n entityIds,\n },\n {\n forceRefetch: true, // Always fetch fresh data\n },\n ),\n )\n\n // Check if we have an error\n if ('error' in result && result.error) {\n console.error('[Activity RT] Error fetching activity:', result.error)\n throw new Error('Failed to fetch activity')\n }\n\n // The transformResponse in enhanceActivitiesApi converts GetActivitiesByIdQuery to ActivitiesResult\n // TypeScript doesn't see this transformation, so we cast through unknown\n const unknownData: unknown = result.data\n const res = unknownData as ActivitiesResult\n const newActivities = res?.activities || []\n\n if (newActivities.length === 0) {\n console.warn('[Activity RT] No activities found for activity_id', activityId)\n return\n }\n\n const newActivity: FeedActivity = newActivities[0]\n\n // Determine activity types to check against\n const activityTypes = [activityType]\n if (activityType === 'comment') {\n const body = newActivity?.body\n const hasChecklist = bodyHasChecklist(body || '')\n if (hasChecklist) {\n activityTypes.push('checklist')\n }\n }\n\n // Check if this activity type is relevant to the query\n const queryActivityTypes = queryArg.activityTypes\n const queryActivityTypesArray = Array.isArray(queryActivityTypes)\n ? queryActivityTypes\n : queryActivityTypes\n ? [queryActivityTypes]\n : []\n const isActivityTypeRelevant =\n queryActivityTypesArray.length === 0 ||\n queryActivityTypesArray.some((type: string) => activityTypes.includes(type))\n\n if (!isActivityTypeRelevant) {\n return\n }\n\n // Update the cache\n updateCachedData((draft) => {\n if (!draft || !draft.pages) {\n console.warn('[Activity RT] No draft or pages found for update')\n return\n }\n\n // Check if activity already exists in any page\n let existingActivityFound = false\n for (const page of draft.pages) {\n const index = page.activities?.findIndex(\n (activity) => activity.activityId === activityId,\n )\n if (index !== -1) {\n // Update existing activity\n page.activities[index] = newActivity\n existingActivityFound = true\n break\n }\n }\n\n // If it's a new activity (topic is 'activity.created'), add it to the first page\n if (!existingActivityFound && topic === 'activity.created') {\n if (draft.pages.length > 0 && draft.pages[0].activities) {\n // Add to the beginning of the first page (most recent activities first)\n // Since we're using reverse chronological order (last: N), prepend to the beginning\n draft.pages[0].activities.unshift(newActivity)\n } else {\n console.warn('[Activity RT] Cannot add activity: no pages or activities array')\n }\n }\n\n // If this is a status change, update any version.publish activities in the cache\n if (\n newActivity.activityType === 'status.change' &&\n newActivity.origin?.type === 'version'\n ) {\n const versionId = newActivity.origin.id\n const newStatus = newActivity.activityData?.newValue\n if (newStatus) {\n draft.pages.forEach((page) => {\n page.activities?.forEach((activity) => {\n if (\n activity.activityType === 'version.publish' &&\n activity.origin?.id === versionId\n ) {\n if (!activity.version) {\n activity.version = {} as any\n }\n activity.version!.status = newStatus\n }\n })\n })\n }\n }\n })\n } catch (error) {\n console.error('[Activity RT] Error fetching activity data for real-time update:', error)\n\n // Invalidate the cache for these entities to trigger a refetch\n dispatch(\n gqlApi.util.invalidateTags(\n entityIds.map((entityId) => ({ type: 'entityActivities', id: entityId })),\n ),\n )\n }\n }\n\n // Subscribe to activity topic\n token = PubSub.subscribe(['activity'], handlePubSub)\n } catch (error) {\n console.error('[Activity RT] Error in activity real-time handler setup:', error)\n // no-op in case `cacheEntryRemoved` resolves before `cacheDataLoaded`\n }\n\n // Wait for cache entry to be removed\n await cacheEntryRemoved\n\n // Cleanup: unsubscribe from PubSub\n if (token) {\n PubSub.unsubscribe(token)\n }\n if (unsubscribeThumbnails) {\n unsubscribeThumbnails()\n }\n}\n"],"names":["bodyHasChecklist","body","handleActivityRealtimeUpdates","queryArg","updateCachedData","cacheDataLoaded","cacheEntryRemoved","dispatch","getCacheEntry","gqlApi","token","unsubscribeThumbnails","subscribeToThumbnailUpdates","messages","versionHashesData","acc","message","draft","page","activity","handlePubSub","topic","activityId","projectName","references","relevantReferenceTypes","entityIds","reference","queryEntityIds","qId","activityType","deleted","index","result","newActivities","newActivity","activityTypes","queryActivityTypes","queryActivityTypesArray","type","existingActivityFound","versionId","newStatus","error","entityId","PubSub"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k=require("./getEntity.cjs.js"),L=require("react-toastify"),P=require("../userDashboard/getUserDashboard.cjs.js");require("../overview/getOverview.cjs.js");const Q=require("../overview/updateOverview.cjs.js");require("../versions/getVersionsProducts.cjs.js");require("../links/getEntityLinks.cjs.js");const N=require("./patchDetailsPanel.cjs.js"),T=({assignees:m=[],projects:d=[]},{newAssignees:s,taskId:t,data:i,taskData:a},{dispatch:n})=>{let h=!1;return[n(P.dashboardQueries.util.updateQueryData("GetKanban",{projects:d,assignees:m},l=>{const g=l.findIndex(r=>r.id===t);let o={...i};if(i?.attrib?.priority){const{priority:r}=o.attrib;o={...o,priority:r}}if(i?.attrib?.endDate){const{endDate:r}=o.attrib;o={...o,dueDate:r},delete o.attrib.endDate}if(g===-1)a?l.push(a):h=!1;else if(h=!0,!s?.some(e=>m.includes(e))&&s)l.splice(g,1);else{const e={...l[g],...o};l[g]=e}})),h]},K=({operations:m=[],state:d,dispatch:s,entityType:t})=>{const i=m.map(n=>({type:"progress",id:n.id}));let a=k.default.util.selectInvalidatedBy(d,i);if(!a.length)return[];try{return a.map(h=>s(k.default.util.updateQueryData(h.endpointName,h.originalArgs,c=>{for(const l of m){const g=l.id,o=l.data;if(t==="task"){const r=l.meta?.folderId,e=c.find(v=>v.id===r);if(!e)throw new Error("Patching progress view: folder not found");const w=e.tasks?.find(v=>v.id===g);if(!w)throw new Error("Patching progress view: task not found");const p={...w,...o},u={...e,tasks:e.tasks.map(v=>v.id===g?p:v)},I=c.findIndex(v=>v.id===r);c[I]=u}else if(t==="folder"){const r=c.find(u=>u.id===g);if(!r)throw new Error("Patching progress view: folder not found");let e={...o};if(o.name&&r.path){const u=r.path.split("/");u[u.length-1]=o.name,e.path=u.join("/")}const w={...r,...e},p=c.findIndex(u=>u.id===g);c[p]=w}}})))}catch(n){return console.error(n),s(k.default.util.invalidateTags(i)),[]}},j=k.default.injectEndpoints({endpoints:m=>({updateEntity:m.mutation({query:({projectName:d,entityId:s,data:t,entityType:i})=>({url:`/api/projects/${d}/${i}s/${s}`,method:"PATCH",body:t}),invalidatesTags:(d,s,{entityId:t,entityType:i})=>{const a=[];return i==="product"&&a.push({type:"product",id:t}),i==="version"&&a.push({type:"version",id:t}),a},async onQueryStarted({projectName:d,entityId:s,data:t,currentAssignees:i,entityType:a},{dispatch:n,queryFulfilled:h,getState:c}){const l=c(),g=[];let o=[];if(a==="task"){const r=c().dashboard?.selectedProjects||[],e=c().dashboard?.tasks.assignees||[],w=c().dashboard?.tasks.assigneesFilter==="me",p=t.assignees,u=w?[c().user?.name]:e,v=[...new Set([...i,...p||[]])].some(f=>u.includes(f)),x=r.some(f=>f===d);if(v&&x){const[f,b]=T({assignees:u,projects:r},{newAssignees:p,taskId:s,data:t},{dispatch:n});b&&g.push(f),b||P.getKanbanTasks({projects:[d],taskIds:[s]},n).then(y=>{let E=y.find(U=>U.id===s);E&&(E={...E,assignees:p},T({assignees:u,projects:r},{newAssignees:p,taskId:s,taskData:E},{dispatch:n}))})}const D=[{type:"task",id:s}];if(p?.length){const f=new Set(i),b=new Set(p),y=[...f].filter(A=>!b.has(A)),E=[...b].filter(A=>!f.has(A)),M=[...new Set([...y,...E])].map(A=>({type:"kanban",id:"user-"+A+"-project-"+d}));D.push(...M),n(P.dashboardQueries.util.invalidateTags([{type:"watchers",id:s}]))}let q=P.dashboardQueries.util.selectInvalidatedBy(l,D),S=[];for(const f of q){const[b,y]=T({assignees:f.originalArgs.assignees,projects:f.originalArgs.projects},{newAssignees:p,taskId:s,data:t},{dispatch:n});y?g.push(b):S.push(f)}const F={projects:r,assignees:u};S=S.filter(f=>JSON.stringify(f.originalArgs)!==JSON.stringify(F));const O=q.map(f=>({type:"kanban",id:JSON.stringify(f.originalArgs)}));o.push(...O)}N.patchDetailsPanel([{entityId:s,data:t,entityType:a}],{state:l,dispatch:n},g);try{await h,o.length&&n(P.dashboardQueries.util.invalidateTags(o))}catch(r){console.error("error updating "+a,r),L.toast.error(r?.error?.data?.detail||"Failed to update task"),g.forEach(e=>e?.undo())}}}),updateEntities:m.mutation({async queryFn({operations:d=[],entityType:s},{dispatch:t,getState:i}){try{const a=i(),n=[];for(const{projectName:e,data:w,id:p,currentAssignees:u=[]}of d){const I=t(j.endpoints.updateEntity.initiate({projectName:e,entityId:p,data:w,entityType:s,currentAssignees:u}));n.push(I)}let h=[];(s==="task"||s==="folder")&&(h=K({operations:d,state:a,dispatch:t,entityType:s}));const c=[],l=d.map(e=>({...e,entityId:e.id}));if((s==="task"||s==="folder")&&(s==="task"&&Q.patchOverviewTasks(l,{state:a,dispatch:t},c),s==="folder"&&(Q.patchOverviewFolders(l,{state:a,dispatch:t},c),console.log("invalidate overview folders"),t(k.default.util.invalidateTags([{type:"folder",id:"LIST"}])),t(k.default.util.invalidateTags(l.map(e=>({type:"overviewTask",id:e.entityId})))))),(await Promise.allSettled(n)).some(e=>e.value?.error))throw t(k.default.util.invalidateTags(d.map(e=>({type:"kanBanTask",id:e.id})))),h.forEach(e=>e?.undo()),c.forEach(e=>e?.undo()),"Failed to update some tasks";const r=[];return r.length&&t(k.default.util.invalidateTags(r)),{data:d}}catch(a){return console.error(a),{error:a}}},invalidatesTags:(d,s,{operations:t,entityType:i})=>{const a=t.map(n=>({id:n.id,type:"review"}));return i==="product"&&(a.push({type:"product",id:"LIST"},{type:"version",id:"LIST"}),t.forEach(n=>a.push({type:"product",id:n.id}))),i==="version"&&(a.push({type:"version",id:"LIST"},{type:"product",id:"LIST"}),t.forEach(n=>a.push({type:"version",id:n.id}))),a}})}),overrideExisting:!0}),{useUpdateEntitiesMutation:R,useUpdateEntityMutation:B}=j;exports.entitiesQueries=j;exports.useUpdateEntitiesMutation=R;exports.useUpdateEntityMutation=B;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("./getEntity.cjs.js"),L=require("react-toastify"),P=require("../userDashboard/getUserDashboard.cjs.js");require("../overview/getOverview.cjs.js");const Q=require("../overview/updateOverview.cjs.js");require("../versions/getVersionsProducts.cjs.js");require("../links/getEntityLinks.cjs.js");const N=require("./patchDetailsPanel.cjs.js"),S=({assignees:m=[],projects:o=[]},{newAssignees:t,taskId:s,data:r,taskData:a},{dispatch:i})=>{let g=!1;return[i(P.dashboardQueries.util.updateQueryData("GetKanban",{projects:o,assignees:m},l=>{const f=l.findIndex(e=>e.id===s);let n={...r};if(r?.attrib?.priority){const{priority:e}=n.attrib;n={...n,priority:e}}if(r?.attrib?.endDate){const{endDate:e}=n.attrib;n={...n,dueDate:e},delete n.attrib.endDate}if(f===-1)a?l.push(a):g=!1;else if(g=!0,!t?.some(c=>m.includes(c))&&t)l.splice(f,1);else{const c={...l[f],...n};l[f]=c}})),g]},K=({operations:m=[],state:o,dispatch:t,entityType:s})=>{const r=m.map(i=>({type:"progress",id:i.id}));let a=b.default.util.selectInvalidatedBy(o,r);if(!a.length)return[];try{return a.map(g=>t(b.default.util.updateQueryData(g.endpointName,g.originalArgs,d=>{for(const l of m){const f=l.id,n=l.data;if(s==="task"){const e=l.meta?.folderId,c=d.find(v=>v.id===e);if(!c)throw new Error("Patching progress view: folder not found");const w=c.tasks?.find(v=>v.id===f);if(!w)throw new Error("Patching progress view: task not found");const h={...w,...n},u={...c,tasks:c.tasks.map(v=>v.id===f?h:v)},j=d.findIndex(v=>v.id===e);d[j]=u}else if(s==="folder"){const e=d.find(u=>u.id===f);if(!e)throw new Error("Patching progress view: folder not found");let c={...n};if(n.name&&e.path){const u=e.path.split("/");u[u.length-1]=n.name,c.path=u.join("/")}const w={...e,...c},h=d.findIndex(u=>u.id===f);d[h]=w}}})))}catch(i){return console.error(i),t(b.default.util.invalidateTags(r)),[]}},T=b.default.injectEndpoints({endpoints:m=>({updateEntity:m.mutation({query:({projectName:o,entityId:t,data:s,entityType:r})=>({url:`/api/projects/${o}/${r}s/${t}`,method:"PATCH",body:s}),invalidatesTags:(o,t,{entityId:s,entityType:r})=>{const a=[];return r==="product"&&a.push({type:"product",id:s}),r==="version"&&a.push({type:"version",id:s}),a},async onQueryStarted({projectName:o,entityId:t,data:s,currentAssignees:r,entityType:a},{dispatch:i,queryFulfilled:g,getState:d}){const l=d(),f=[];let n=[];if(a==="task"){const e=d().dashboard?.selectedProjects||[],c=d().dashboard?.tasks.assignees||[],w=d().dashboard?.tasks.assigneesFilter==="me",h=s.assignees,u=w?[d().user?.name]:c,v=[...new Set([...r,...h||[]])].some(p=>u.includes(p)),x=e.some(p=>p===o);if(v&&x){const[p,k]=S({assignees:u,projects:e},{newAssignees:h,taskId:t,data:s},{dispatch:i});k&&f.push(p),k||P.getKanbanTasks({projects:[o],taskIds:[t]},i).then(y=>{let E=y.find(U=>U.id===t);E&&(E={...E,assignees:h},S({assignees:u,projects:e},{newAssignees:h,taskId:t,taskData:E},{dispatch:i}))})}const D=[{type:"task",id:t}];if(h?.length){const p=new Set(r),k=new Set(h),y=[...p].filter(A=>!k.has(A)),E=[...k].filter(A=>!p.has(A)),M=[...new Set([...y,...E])].map(A=>({type:"kanban",id:"user-"+A+"-project-"+o}));D.push(...M),i(P.dashboardQueries.util.invalidateTags([{type:"watchers",id:t}]))}let q=P.dashboardQueries.util.selectInvalidatedBy(l,D),I=[];for(const p of q){const[k,y]=S({assignees:p.originalArgs.assignees,projects:p.originalArgs.projects},{newAssignees:h,taskId:t,data:s},{dispatch:i});y?f.push(k):I.push(p)}const F={projects:e,assignees:u};I=I.filter(p=>JSON.stringify(p.originalArgs)!==JSON.stringify(F));const O=q.map(p=>({type:"kanban",id:JSON.stringify(p.originalArgs)}));n.push(...O)}N.patchDetailsPanel([{entityId:t,data:s,entityType:a}],{state:l,dispatch:i},f);try{await g,n.length&&i(P.dashboardQueries.util.invalidateTags(n))}catch(e){console.error("error updating "+a,e),L.toast.error(e?.error?.data?.detail||"Failed to update task"),f.forEach(c=>c?.undo())}}}),updateEntities:m.mutation({async queryFn({operations:o=[],entityType:t},{dispatch:s,getState:r}){try{const a=r(),i=[];for(const{projectName:e,data:c,id:w,currentAssignees:h=[]}of o){const u=s(T.endpoints.updateEntity.initiate({projectName:e,entityId:w,data:c,entityType:t,currentAssignees:h}));i.push(u)}let g=[];(t==="task"||t==="folder")&&(g=K({operations:o,state:a,dispatch:s,entityType:t}));const d=[],l=o.map(e=>({...e,entityId:e.id}));if((t==="task"||t==="folder")&&(t==="task"&&Q.patchOverviewTasks(l,{state:a,dispatch:s},d),t==="folder"&&(Q.patchOverviewFolders(l,{state:a,dispatch:s},d),console.log("invalidate overview folders"),s(b.default.util.invalidateTags([{type:"folder",id:"LIST"}])),s(b.default.util.invalidateTags(l.map(e=>({type:"overviewTask",id:e.entityId})))))),(await Promise.allSettled(i)).some(e=>e.value?.error))throw s(b.default.util.invalidateTags(o.map(e=>({type:"kanBanTask",id:e.id})))),g.forEach(e=>e?.undo()),d.forEach(e=>e?.undo()),"Failed to update some tasks";return{data:o}}catch(a){return console.error(a),{error:a}}},invalidatesTags:(o,t,{operations:s,entityType:r})=>{const a=s.map(i=>({id:i.id,type:"review"}));return r==="product"&&(a.push({type:"product",id:"LIST"},{type:"version",id:"LIST"}),s.forEach(i=>a.push({type:"product",id:i.id}))),r==="version"&&(a.push({type:"version",id:"LIST"},{type:"product",id:"LIST"}),s.forEach(i=>a.push({type:"version",id:i.id})),s.some(i=>!!i.data.status)&&(console.log("invalidate version.publish activities"),s.forEach(i=>a.push({type:"entityActivities",id:`version.publish-${i.id}`})))),a}})}),overrideExisting:!0}),{useUpdateEntitiesMutation:R,useUpdateEntityMutation:$}=T;exports.entitiesQueries=T;exports.useUpdateEntitiesMutation=R;exports.useUpdateEntityMutation=$;
2
2
  //# sourceMappingURL=updateEntity.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"updateEntity.cjs.js","sources":["../../../../../../src/api/queries/entities/updateEntity.ts"],"sourcesContent":["// @ts-nocheck\n\nimport api from './getEntity'\nimport { toast } from 'react-toastify'\nimport { detailsPanelQueries } from './getEntityPanel'\nimport { dashboardQueries, getKanbanTasks } from '../userDashboard'\nimport { patchOverviewFolders, patchOverviewTasks } from '../overview'\nimport { patchDetailsPanel } from './patchDetailsPanel'\n\nconst patchKanban = (\n { assignees = [], projects = [] },\n { newAssignees, taskId, data, taskData },\n { dispatch },\n) => {\n let kanbanPatched = false\n const patchResult = dispatch(\n dashboardQueries.util.updateQueryData(\n 'GetKanban',\n { projects: projects, assignees: assignees },\n (draft) => {\n const taskIndex = draft.findIndex((task) => task.id === taskId)\n let patchData = { ...data }\n // if the data include attrib.priority it needs to be transformed to just priority\n // this is because priority is a top level field on kanban query\n if (data?.attrib?.priority) {\n const { priority } = patchData.attrib\n patchData = { ...patchData, priority }\n }\n // if the data include attrib.endDate it needs to be transformed to dueDate\n // this is because dueDate is a top level field on kanban query\n // NOTE TO SELF: Lets try to do these transforms after the cache the future.\n if (data?.attrib?.endDate) {\n const { endDate } = patchData.attrib\n patchData = { ...patchData, dueDate: endDate }\n delete patchData.attrib.endDate\n }\n\n if (taskIndex === -1) {\n // task not found, assignee must have just been added\n if (taskData) {\n // add the task to the cache\n draft.push(taskData)\n } else {\n // we don't have the task data, so we can't add it to the cache\n // we might add it later\n kanbanPatched = false\n }\n } else {\n kanbanPatched = true\n // first check that the task assignees still has a intersection with dashAssignees\n const hasSomeAssignees = newAssignees?.some((assignee) => assignees.includes(assignee))\n\n if (!hasSomeAssignees && newAssignees) {\n // remove from cache\n draft.splice(taskIndex, 1)\n } else {\n // task found: update the task in the cache\n const newData = { ...draft[taskIndex], ...patchData }\n draft[taskIndex] = newData\n }\n }\n },\n ),\n )\n\n return [patchResult, kanbanPatched]\n}\n\n// try to patch the progress view if there are queries that need to be updated\nconst patchProgressView = ({ operations = [], state, dispatch, entityType }) => {\n // create invalidation tags for progress view\n const invalidationTags = operations.map((o) => ({ type: 'progress', id: o.id }))\n // find the entries that need to be updated\n let entries = api.util.selectInvalidatedBy(state, invalidationTags)\n // if there are no entries, return\n if (!entries.length) return []\n\n try {\n // patch each entry with updated task data\n const patches = entries.map((entry) =>\n dispatch(\n api.util.updateQueryData(entry.endpointName, entry.originalArgs, (draft) => {\n for (const operation of operations) {\n const entityId = operation.id\n const patch = operation.data\n\n // patch the updated task data\n if (entityType === 'task') {\n const folderId = operation.meta?.folderId\n const folder = draft.find((folder) => folder.id === folderId)\n if (!folder) throw new Error('Patching progress view: folder not found')\n const task = folder.tasks?.find((task) => task.id === entityId)\n if (!task) throw new Error('Patching progress view: task not found')\n // update task\n const newTask = { ...task, ...patch }\n // update folder\n const newFolder = {\n ...folder,\n tasks: folder.tasks.map((t) => (t.id === entityId ? newTask : t)),\n }\n // update query\n const folderIndex = draft.findIndex((f) => f.id === folderId)\n draft[folderIndex] = newFolder\n } else if (entityType === 'folder') {\n const folder = draft.find((folder) => folder.id === entityId)\n if (!folder) throw new Error('Patching progress view: folder not found')\n\n // If name is being updated, also update the path\n let updatedPatch = { ...patch }\n if (patch.name && folder.path) {\n // Construct new path by replacing the last segment with the new name\n const pathParts = folder.path.split('/')\n pathParts[pathParts.length - 1] = patch.name\n updatedPatch.path = pathParts.join('/')\n }\n\n // update folder\n const newFolder = { ...folder, ...updatedPatch }\n // update query\n const folderIndex = draft.findIndex((f) => f.id === entityId)\n draft[folderIndex] = newFolder\n }\n }\n }),\n ),\n )\n return patches\n } catch (error) {\n console.error(error)\n // invalidate the progress view queries instead\n dispatch(api.util.invalidateTags(invalidationTags))\n return []\n }\n}\n\nconst updateEntity = api.injectEndpoints({\n endpoints: (build) => ({\n updateEntity: build.mutation({\n query: ({ projectName, entityId, data, entityType }) => ({\n url: `/api/projects/${projectName}/${entityType}s/${entityId}`,\n method: 'PATCH',\n body: data,\n }),\n invalidatesTags: (result, error, { entityId, entityType }) => {\n const tags = []\n if (entityType === 'product') {\n tags.push({ type: 'product', id: entityId })\n }\n if (entityType === 'version') {\n tags.push({ type: 'version', id: entityId })\n }\n return tags\n },\n async onQueryStarted(\n { projectName, entityId, data, currentAssignees, entityType },\n { dispatch, queryFulfilled, getState },\n ) {\n const state = getState()\n const patchResults = []\n\n let invalidationTagsAfterComplete = []\n // if task, patch the GetKanban query\n if (entityType === 'task') {\n const dashboardProjects = getState().dashboard?.selectedProjects || []\n const dashboardUsers = getState().dashboard?.tasks.assignees || []\n const dashboardAssigneesIsMe = getState().dashboard?.tasks.assigneesFilter === 'me'\n const newAssignees = data.assignees\n\n const cacheUsers = dashboardAssigneesIsMe ? [getState().user?.name] : dashboardUsers\n\n const entityAssignees = [...new Set([...currentAssignees, ...(newAssignees || [])])]\n const hasSomeAssignees = entityAssignees.some((assignee) => cacheUsers.includes(assignee))\n const hasSomeProjects = dashboardProjects.some((project) => project === projectName)\n const currentDashNeedsUpdating = hasSomeAssignees && hasSomeProjects\n\n if (currentDashNeedsUpdating) {\n const [result, wasPatched] = patchKanban(\n { assignees: cacheUsers, projects: dashboardProjects },\n { newAssignees, taskId: entityId, data },\n { dispatch },\n )\n\n if (wasPatched) patchResults.push(result)\n\n if (!wasPatched) {\n // this means the task is not in the current kanban and it needs to be added\n\n // get the new task data\n getKanbanTasks({ projects: [projectName], taskIds: [entityId] }, dispatch).then(\n // use .then so that the rest of the code can run\n (response) => {\n let newTask = response.find((task) => task.id === entityId)\n if (newTask) {\n // add newAssignees as the actual DB hasn't been updated yet\n newTask = { ...newTask, assignees: newAssignees }\n\n patchKanban(\n { assignees: cacheUsers, projects: dashboardProjects },\n { newAssignees, taskId: entityId, taskData: newTask },\n { dispatch },\n )\n }\n },\n )\n }\n }\n\n // always update the kanban if task id matches\n const tags = [{ type: 'task', id: entityId }]\n\n // are we changing the assignees?\n if (newAssignees?.length) {\n const currentAssigneesSet = new Set(currentAssignees)\n const newAssigneesSet = new Set(newAssignees)\n\n const removedAssignees = [...currentAssigneesSet].filter(\n (assignee) => !newAssigneesSet.has(assignee),\n )\n const addedAssignees = [...newAssigneesSet].filter(\n (assignee) => !currentAssigneesSet.has(assignee),\n )\n\n const changedAssignees = [...new Set([...removedAssignees, ...addedAssignees])]\n\n // any query that has those changed assignees, needs to be updated\n // we are changing the assignees\n const assigneesTags = changedAssignees.map((assignee) => ({\n type: 'kanban',\n id: 'user-' + assignee + '-project-' + projectName,\n }))\n\n tags.push(...assigneesTags)\n\n // invalidate the watchers query\n dispatch(\n dashboardQueries.util.invalidateTags([\n {\n type: 'watchers',\n id: entityId,\n },\n ]),\n )\n }\n\n // invalidate any other caches\n let entries = dashboardQueries.util.selectInvalidatedBy(state, tags)\n let entriesToInvalidate = []\n\n // for each entry try to patch the data into the cache first\n for (const entry of entries) {\n const [patchResult, wasPatched] = patchKanban(\n {\n assignees: entry.originalArgs.assignees,\n projects: entry.originalArgs.projects,\n },\n {\n newAssignees,\n taskId: entityId,\n data,\n },\n { dispatch },\n )\n\n if (wasPatched) {\n patchResults.push(patchResult)\n } else {\n // if we couldn't patch, we need to invalidate the cache\n entriesToInvalidate.push(entry)\n }\n }\n\n // filter out current kanban query if we were able to patch it\n const currentKanbanCacheArgs = { projects: dashboardProjects, assignees: cacheUsers }\n entriesToInvalidate = entriesToInvalidate.filter(\n (entry) =>\n JSON.stringify(entry.originalArgs) !== JSON.stringify(currentKanbanCacheArgs),\n )\n\n // create the invalidation tags from originalArgs\n const invalidationTags = entries.map((entry) => ({\n type: 'kanban',\n id: JSON.stringify(entry.originalArgs),\n }))\n\n // invalidate the tags later, once the query is complete\n invalidationTagsAfterComplete.push(...invalidationTags)\n }\n\n // get all details panel caches that would be affected by this update\n patchDetailsPanel([{ entityId, data, entityType }], { state, dispatch }, patchResults)\n\n try {\n await queryFulfilled\n\n // now invalidate any tags\n if (invalidationTagsAfterComplete.length) {\n dispatch(dashboardQueries.util.invalidateTags(invalidationTagsAfterComplete))\n }\n } catch (error) {\n console.error('error updating ' + entityType, error)\n toast.error(error?.error?.data?.detail || 'Failed to update task')\n patchResults.forEach((result) => result?.undo())\n }\n },\n }),\n updateEntities: build.mutation({\n async queryFn({ operations = [], entityType }, { dispatch, getState }) {\n try {\n const state = getState()\n const promises = []\n for (const { projectName, data, id, currentAssignees = [] } of operations) {\n const promise = dispatch(\n updateEntity.endpoints.updateEntity.initiate({\n projectName: projectName,\n entityId: id,\n data,\n entityType,\n currentAssignees,\n }),\n )\n promises.push(promise)\n }\n\n let progressPatches = []\n if (entityType === 'task' || entityType === 'folder') {\n // patch the progress page\n progressPatches = patchProgressView({ operations, state, dispatch, entityType })\n }\n\n const overviewPatches = []\n // convert id in operations to entityId\n const operationsWithEntityId = operations.map((o) => ({ ...o, entityId: o.id }))\n if (entityType === 'task' || entityType === 'folder') {\n // patch the overview page\n if (entityType === 'task') {\n patchOverviewTasks(operationsWithEntityId, { state, dispatch }, overviewPatches)\n }\n if (entityType === 'folder') {\n // patch the overview page\n patchOverviewFolders(operationsWithEntityId, { state, dispatch }, overviewPatches)\n console.log('invalidate overview folders')\n // invalidate overview folders query\n dispatch(api.util.invalidateTags([{ type: 'folder', id: 'LIST' }]))\n // invalidate overview tasks with folder as a parent\n dispatch(\n api.util.invalidateTags(\n operationsWithEntityId.map((o) => ({ type: 'overviewTask', id: o.entityId })),\n ),\n )\n }\n }\n\n // check if any of the requests failed and invalidate the tasks cache again to refetch\n const results = await Promise.allSettled(promises)\n\n // did any of the requests fail?\n const someError = results.some((result) => result.value?.error)\n if (someError) {\n dispatch(\n api.util.invalidateTags(operations.map((o) => ({ type: 'kanBanTask', id: o.id }))),\n )\n\n // revert the progress view patches\n progressPatches.forEach((patch) => patch?.undo())\n\n // revert the overview patches\n overviewPatches.forEach((patch) => patch?.undo())\n\n throw 'Failed to update some tasks'\n }\n\n const activityTags = []\n\n if (activityTags.length) {\n dispatch(api.util.invalidateTags(activityTags))\n }\n\n return { data: operations }\n } catch (error) {\n console.error(error)\n return { error }\n }\n },\n invalidatesTags: (result, error, { operations, entityType }) => {\n const tags = operations.map((o) => ({ id: o.id, type: 'review' }))\n\n if (entityType === 'product') {\n tags.push({ type: 'product', id: 'LIST' }, { type: 'version', id: 'LIST' })\n operations.forEach((o) => tags.push({ type: 'product', id: o.id }))\n }\n if (entityType === 'version') {\n tags.push({ type: 'version', id: 'LIST' }, { type: 'product', id: 'LIST' })\n operations.forEach((o) => tags.push({ type: 'version', id: o.id }))\n }\n\n return tags\n },\n }),\n }),\n overrideExisting: true,\n})\n\nexport const { useUpdateEntitiesMutation, useUpdateEntityMutation } = updateEntity\nexport { updateEntity as entitiesQueries }\n"],"names":["patchKanban","assignees","projects","newAssignees","taskId","data","taskData","dispatch","kanbanPatched","dashboardQueries","draft","taskIndex","task","patchData","priority","endDate","assignee","newData","patchProgressView","operations","state","entityType","invalidationTags","o","entries","api","entry","operation","entityId","patch","folderId","folder","newTask","newFolder","t","folderIndex","f","updatedPatch","pathParts","error","updateEntity","build","projectName","result","tags","currentAssignees","queryFulfilled","getState","patchResults","invalidationTagsAfterComplete","dashboardProjects","dashboardUsers","dashboardAssigneesIsMe","cacheUsers","hasSomeAssignees","hasSomeProjects","project","wasPatched","getKanbanTasks","response","currentAssigneesSet","newAssigneesSet","removedAssignees","addedAssignees","assigneesTags","entriesToInvalidate","patchResult","currentKanbanCacheArgs","patchDetailsPanel","toast","promises","id","promise","progressPatches","overviewPatches","operationsWithEntityId","patchOverviewTasks","patchOverviewFolders","activityTags","useUpdateEntitiesMutation","useUpdateEntityMutation"],"mappings":"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"}
1
+ {"version":3,"file":"updateEntity.cjs.js","sources":["../../../../../../src/api/queries/entities/updateEntity.ts"],"sourcesContent":["// @ts-nocheck\n\nimport api from './getEntity'\nimport { toast } from 'react-toastify'\nimport { detailsPanelQueries } from './getEntityPanel'\nimport { dashboardQueries, getKanbanTasks } from '../userDashboard'\nimport { patchOverviewFolders, patchOverviewTasks } from '../overview'\nimport { patchDetailsPanel } from './patchDetailsPanel'\n\nconst patchKanban = (\n { assignees = [], projects = [] },\n { newAssignees, taskId, data, taskData },\n { dispatch },\n) => {\n let kanbanPatched = false\n const patchResult = dispatch(\n dashboardQueries.util.updateQueryData(\n 'GetKanban',\n { projects: projects, assignees: assignees },\n (draft) => {\n const taskIndex = draft.findIndex((task) => task.id === taskId)\n let patchData = { ...data }\n // if the data include attrib.priority it needs to be transformed to just priority\n // this is because priority is a top level field on kanban query\n if (data?.attrib?.priority) {\n const { priority } = patchData.attrib\n patchData = { ...patchData, priority }\n }\n // if the data include attrib.endDate it needs to be transformed to dueDate\n // this is because dueDate is a top level field on kanban query\n // NOTE TO SELF: Lets try to do these transforms after the cache the future.\n if (data?.attrib?.endDate) {\n const { endDate } = patchData.attrib\n patchData = { ...patchData, dueDate: endDate }\n delete patchData.attrib.endDate\n }\n\n if (taskIndex === -1) {\n // task not found, assignee must have just been added\n if (taskData) {\n // add the task to the cache\n draft.push(taskData)\n } else {\n // we don't have the task data, so we can't add it to the cache\n // we might add it later\n kanbanPatched = false\n }\n } else {\n kanbanPatched = true\n // first check that the task assignees still has a intersection with dashAssignees\n const hasSomeAssignees = newAssignees?.some((assignee) => assignees.includes(assignee))\n\n if (!hasSomeAssignees && newAssignees) {\n // remove from cache\n draft.splice(taskIndex, 1)\n } else {\n // task found: update the task in the cache\n const newData = { ...draft[taskIndex], ...patchData }\n draft[taskIndex] = newData\n }\n }\n },\n ),\n )\n\n return [patchResult, kanbanPatched]\n}\n\n// try to patch the progress view if there are queries that need to be updated\nconst patchProgressView = ({ operations = [], state, dispatch, entityType }) => {\n // create invalidation tags for progress view\n const invalidationTags = operations.map((o) => ({ type: 'progress', id: o.id }))\n // find the entries that need to be updated\n let entries = api.util.selectInvalidatedBy(state, invalidationTags)\n // if there are no entries, return\n if (!entries.length) return []\n\n try {\n // patch each entry with updated task data\n const patches = entries.map((entry) =>\n dispatch(\n api.util.updateQueryData(entry.endpointName, entry.originalArgs, (draft) => {\n for (const operation of operations) {\n const entityId = operation.id\n const patch = operation.data\n\n // patch the updated task data\n if (entityType === 'task') {\n const folderId = operation.meta?.folderId\n const folder = draft.find((folder) => folder.id === folderId)\n if (!folder) throw new Error('Patching progress view: folder not found')\n const task = folder.tasks?.find((task) => task.id === entityId)\n if (!task) throw new Error('Patching progress view: task not found')\n // update task\n const newTask = { ...task, ...patch }\n // update folder\n const newFolder = {\n ...folder,\n tasks: folder.tasks.map((t) => (t.id === entityId ? newTask : t)),\n }\n // update query\n const folderIndex = draft.findIndex((f) => f.id === folderId)\n draft[folderIndex] = newFolder\n } else if (entityType === 'folder') {\n const folder = draft.find((folder) => folder.id === entityId)\n if (!folder) throw new Error('Patching progress view: folder not found')\n\n // If name is being updated, also update the path\n let updatedPatch = { ...patch }\n if (patch.name && folder.path) {\n // Construct new path by replacing the last segment with the new name\n const pathParts = folder.path.split('/')\n pathParts[pathParts.length - 1] = patch.name\n updatedPatch.path = pathParts.join('/')\n }\n\n // update folder\n const newFolder = { ...folder, ...updatedPatch }\n // update query\n const folderIndex = draft.findIndex((f) => f.id === entityId)\n draft[folderIndex] = newFolder\n }\n }\n }),\n ),\n )\n return patches\n } catch (error) {\n console.error(error)\n // invalidate the progress view queries instead\n dispatch(api.util.invalidateTags(invalidationTags))\n return []\n }\n}\n\nconst updateEntity = api.injectEndpoints({\n endpoints: (build) => ({\n updateEntity: build.mutation({\n query: ({ projectName, entityId, data, entityType }) => ({\n url: `/api/projects/${projectName}/${entityType}s/${entityId}`,\n method: 'PATCH',\n body: data,\n }),\n invalidatesTags: (result, error, { entityId, entityType }) => {\n const tags = []\n if (entityType === 'product') {\n tags.push({ type: 'product', id: entityId })\n }\n if (entityType === 'version') {\n tags.push({ type: 'version', id: entityId })\n }\n return tags\n },\n async onQueryStarted(\n { projectName, entityId, data, currentAssignees, entityType },\n { dispatch, queryFulfilled, getState },\n ) {\n const state = getState()\n const patchResults = []\n\n let invalidationTagsAfterComplete = []\n // if task, patch the GetKanban query\n if (entityType === 'task') {\n const dashboardProjects = getState().dashboard?.selectedProjects || []\n const dashboardUsers = getState().dashboard?.tasks.assignees || []\n const dashboardAssigneesIsMe = getState().dashboard?.tasks.assigneesFilter === 'me'\n const newAssignees = data.assignees\n\n const cacheUsers = dashboardAssigneesIsMe ? [getState().user?.name] : dashboardUsers\n\n const entityAssignees = [...new Set([...currentAssignees, ...(newAssignees || [])])]\n const hasSomeAssignees = entityAssignees.some((assignee) => cacheUsers.includes(assignee))\n const hasSomeProjects = dashboardProjects.some((project) => project === projectName)\n const currentDashNeedsUpdating = hasSomeAssignees && hasSomeProjects\n\n if (currentDashNeedsUpdating) {\n const [result, wasPatched] = patchKanban(\n { assignees: cacheUsers, projects: dashboardProjects },\n { newAssignees, taskId: entityId, data },\n { dispatch },\n )\n\n if (wasPatched) patchResults.push(result)\n\n if (!wasPatched) {\n // this means the task is not in the current kanban and it needs to be added\n\n // get the new task data\n getKanbanTasks({ projects: [projectName], taskIds: [entityId] }, dispatch).then(\n // use .then so that the rest of the code can run\n (response) => {\n let newTask = response.find((task) => task.id === entityId)\n if (newTask) {\n // add newAssignees as the actual DB hasn't been updated yet\n newTask = { ...newTask, assignees: newAssignees }\n\n patchKanban(\n { assignees: cacheUsers, projects: dashboardProjects },\n { newAssignees, taskId: entityId, taskData: newTask },\n { dispatch },\n )\n }\n },\n )\n }\n }\n\n // always update the kanban if task id matches\n const tags = [{ type: 'task', id: entityId }]\n\n // are we changing the assignees?\n if (newAssignees?.length) {\n const currentAssigneesSet = new Set(currentAssignees)\n const newAssigneesSet = new Set(newAssignees)\n\n const removedAssignees = [...currentAssigneesSet].filter(\n (assignee) => !newAssigneesSet.has(assignee),\n )\n const addedAssignees = [...newAssigneesSet].filter(\n (assignee) => !currentAssigneesSet.has(assignee),\n )\n\n const changedAssignees = [...new Set([...removedAssignees, ...addedAssignees])]\n\n // any query that has those changed assignees, needs to be updated\n // we are changing the assignees\n const assigneesTags = changedAssignees.map((assignee) => ({\n type: 'kanban',\n id: 'user-' + assignee + '-project-' + projectName,\n }))\n\n tags.push(...assigneesTags)\n\n // invalidate the watchers query\n dispatch(\n dashboardQueries.util.invalidateTags([\n {\n type: 'watchers',\n id: entityId,\n },\n ]),\n )\n }\n\n // invalidate any other caches\n let entries = dashboardQueries.util.selectInvalidatedBy(state, tags)\n let entriesToInvalidate = []\n\n // for each entry try to patch the data into the cache first\n for (const entry of entries) {\n const [patchResult, wasPatched] = patchKanban(\n {\n assignees: entry.originalArgs.assignees,\n projects: entry.originalArgs.projects,\n },\n {\n newAssignees,\n taskId: entityId,\n data,\n },\n { dispatch },\n )\n\n if (wasPatched) {\n patchResults.push(patchResult)\n } else {\n // if we couldn't patch, we need to invalidate the cache\n entriesToInvalidate.push(entry)\n }\n }\n\n // filter out current kanban query if we were able to patch it\n const currentKanbanCacheArgs = { projects: dashboardProjects, assignees: cacheUsers }\n entriesToInvalidate = entriesToInvalidate.filter(\n (entry) =>\n JSON.stringify(entry.originalArgs) !== JSON.stringify(currentKanbanCacheArgs),\n )\n\n // create the invalidation tags from originalArgs\n const invalidationTags = entries.map((entry) => ({\n type: 'kanban',\n id: JSON.stringify(entry.originalArgs),\n }))\n\n // invalidate the tags later, once the query is complete\n invalidationTagsAfterComplete.push(...invalidationTags)\n }\n\n // get all details panel caches that would be affected by this update\n patchDetailsPanel([{ entityId, data, entityType }], { state, dispatch }, patchResults)\n\n try {\n await queryFulfilled\n\n // now invalidate any tags\n if (invalidationTagsAfterComplete.length) {\n dispatch(dashboardQueries.util.invalidateTags(invalidationTagsAfterComplete))\n }\n } catch (error) {\n console.error('error updating ' + entityType, error)\n toast.error(error?.error?.data?.detail || 'Failed to update task')\n patchResults.forEach((result) => result?.undo())\n }\n },\n }),\n updateEntities: build.mutation({\n async queryFn({ operations = [], entityType }, { dispatch, getState }) {\n try {\n const state = getState()\n const promises = []\n for (const { projectName, data, id, currentAssignees = [] } of operations) {\n const promise = dispatch(\n updateEntity.endpoints.updateEntity.initiate({\n projectName: projectName,\n entityId: id,\n data,\n entityType,\n currentAssignees,\n }),\n )\n promises.push(promise)\n }\n\n let progressPatches = []\n if (entityType === 'task' || entityType === 'folder') {\n // patch the progress page\n progressPatches = patchProgressView({ operations, state, dispatch, entityType })\n }\n\n const overviewPatches = []\n // convert id in operations to entityId\n const operationsWithEntityId = operations.map((o) => ({ ...o, entityId: o.id }))\n if (entityType === 'task' || entityType === 'folder') {\n // patch the overview page\n if (entityType === 'task') {\n patchOverviewTasks(operationsWithEntityId, { state, dispatch }, overviewPatches)\n }\n if (entityType === 'folder') {\n // patch the overview page\n patchOverviewFolders(operationsWithEntityId, { state, dispatch }, overviewPatches)\n console.log('invalidate overview folders')\n // invalidate overview folders query\n dispatch(api.util.invalidateTags([{ type: 'folder', id: 'LIST' }]))\n // invalidate overview tasks with folder as a parent\n dispatch(\n api.util.invalidateTags(\n operationsWithEntityId.map((o) => ({ type: 'overviewTask', id: o.entityId })),\n ),\n )\n }\n }\n\n // check if any of the requests failed and invalidate the tasks cache again to refetch\n const results = await Promise.allSettled(promises)\n\n // did any of the requests fail?\n const someError = results.some((result) => result.value?.error)\n if (someError) {\n dispatch(\n api.util.invalidateTags(operations.map((o) => ({ type: 'kanBanTask', id: o.id }))),\n )\n\n // revert the progress view patches\n progressPatches.forEach((patch) => patch?.undo())\n\n // revert the overview patches\n overviewPatches.forEach((patch) => patch?.undo())\n\n throw 'Failed to update some tasks'\n }\n\n return { data: operations }\n } catch (error) {\n console.error(error)\n return { error }\n }\n },\n invalidatesTags: (result, error, { operations, entityType }) => {\n const tags = operations.map((o) => ({ id: o.id, type: 'review' }))\n\n if (entityType === 'product') {\n tags.push({ type: 'product', id: 'LIST' }, { type: 'version', id: 'LIST' })\n operations.forEach((o) => tags.push({ type: 'product', id: o.id }))\n }\n if (entityType === 'version') {\n tags.push({ type: 'version', id: 'LIST' }, { type: 'product', id: 'LIST' })\n operations.forEach((o) => tags.push({ type: 'version', id: o.id }))\n if (operations.some((o) => !!o.data.status)) {\n console.log('invalidate version.publish activities')\n // invalidate feeds with that version in it (published versions activity)\n operations.forEach((o) =>\n tags.push({ type: 'entityActivities', id: `version.publish-${o.id}` }),\n )\n }\n }\n\n return tags\n },\n }),\n }),\n overrideExisting: true,\n})\n\nexport const { useUpdateEntitiesMutation, useUpdateEntityMutation } = updateEntity\nexport { updateEntity as entitiesQueries }\n"],"names":["patchKanban","assignees","projects","newAssignees","taskId","data","taskData","dispatch","kanbanPatched","dashboardQueries","draft","taskIndex","task","patchData","priority","endDate","assignee","newData","patchProgressView","operations","state","entityType","invalidationTags","o","entries","api","entry","operation","entityId","patch","folderId","folder","newTask","newFolder","t","folderIndex","f","updatedPatch","pathParts","error","updateEntity","build","projectName","result","tags","currentAssignees","queryFulfilled","getState","patchResults","invalidationTagsAfterComplete","dashboardProjects","dashboardUsers","dashboardAssigneesIsMe","cacheUsers","hasSomeAssignees","hasSomeProjects","project","wasPatched","getKanbanTasks","response","currentAssigneesSet","newAssigneesSet","removedAssignees","addedAssignees","assigneesTags","entriesToInvalidate","patchResult","currentKanbanCacheArgs","patchDetailsPanel","toast","promises","id","promise","progressPatches","overviewPatches","operationsWithEntityId","patchOverviewTasks","patchOverviewFolders","useUpdateEntitiesMutation","useUpdateEntityMutation"],"mappings":"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"}