@ynput/ayon-frontend-shared 0.2.40 → 0.2.41

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 (449) hide show
  1. package/dist/DetailsPanel.cjs.js +1 -1
  2. package/dist/DetailsPanel.es.js +24 -22
  3. package/dist/DetailsPanel.es.js.map +1 -1
  4. package/dist/_virtual/index.cjs2.js +1 -1
  5. package/dist/_virtual/index.cjs3.js +1 -1
  6. package/dist/_virtual/index.cjs4.js +1 -1
  7. package/dist/_virtual/index.es2.js +2 -5
  8. package/dist/_virtual/index.es2.js.map +1 -1
  9. package/dist/_virtual/index.es3.js +5 -2
  10. package/dist/_virtual/index.es3.js.map +1 -1
  11. package/dist/_virtual/index.es4.js +2 -2
  12. package/dist/api.cjs.js +1 -1
  13. package/dist/api.es.js +256 -248
  14. package/dist/api.es.js.map +1 -1
  15. package/dist/index.cjs.js +1 -1
  16. package/dist/index.es.js +11 -9
  17. package/dist/index.es.js.map +1 -1
  18. package/dist/node_modules/react-use-websocket/dist/index.cjs.js +1 -1
  19. package/dist/node_modules/react-use-websocket/dist/index.es.js +1 -1
  20. package/dist/shared/node_modules/prop-types/index.cjs.js +1 -1
  21. package/dist/shared/node_modules/prop-types/index.es.js +1 -1
  22. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js +1 -1
  23. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.es.js +1 -1
  24. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js +1 -1
  25. package/dist/shared/node_modules/react-transition-group/esm/Transition.es.js +1 -1
  26. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js +1 -1
  27. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.es.js +1 -1
  28. package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.cjs.js +1 -1
  29. package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.cjs.js.map +1 -1
  30. package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.es.js +16 -16
  31. package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.es.js.map +1 -1
  32. package/dist/shared/src/api/queries/config/getConfig.cjs.js +2 -0
  33. package/dist/shared/src/api/queries/config/getConfig.cjs.js.map +1 -0
  34. package/dist/shared/src/api/queries/config/getConfig.es.js +111 -0
  35. package/dist/shared/src/api/queries/config/getConfig.es.js.map +1 -0
  36. package/dist/shared/src/api/queries/config/updateConfig.cjs.js +2 -0
  37. package/dist/shared/src/api/queries/config/updateConfig.cjs.js.map +1 -0
  38. package/dist/shared/src/api/queries/config/updateConfig.es.js +13 -0
  39. package/dist/shared/src/api/queries/config/updateConfig.es.js.map +1 -0
  40. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js +1 -1
  41. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
  42. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +5 -3
  43. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
  44. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +1 -1
  45. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
  46. package/dist/shared/src/api/queries/entities/updateEntity.es.js +5 -3
  47. package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
  48. package/dist/shared/src/api/queries/links/getEntityLinks.cjs.js +1 -1
  49. package/dist/shared/src/api/queries/links/getEntityLinks.cjs.js.map +1 -1
  50. package/dist/shared/src/api/queries/links/getEntityLinks.es.js +106 -86
  51. package/dist/shared/src/api/queries/links/getEntityLinks.es.js.map +1 -1
  52. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js +1 -1
  53. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js.map +1 -1
  54. package/dist/shared/src/api/queries/overview/updateOverview.es.js +68 -66
  55. package/dist/shared/src/api/queries/overview/updateOverview.es.js.map +1 -1
  56. package/dist/shared/src/api/queries/users/getUsers.cjs.js +2 -2
  57. package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
  58. package/dist/shared/src/api/queries/users/getUsers.es.js +34 -32
  59. package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
  60. package/dist/shared/src/components/Chips/Chips.cjs.js +10 -6
  61. package/dist/shared/src/components/Chips/Chips.cjs.js.map +1 -1
  62. package/dist/shared/src/components/Chips/Chips.es.js +44 -38
  63. package/dist/shared/src/components/Chips/Chips.es.js.map +1 -1
  64. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js +1 -1
  65. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js.map +1 -1
  66. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js +4 -2
  67. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js.map +1 -1
  68. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +1 -1
  69. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
  70. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +4 -2
  71. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
  72. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js +1 -1
  73. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js.map +1 -1
  74. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js +4 -2
  75. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js.map +1 -1
  76. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js +1 -1
  77. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js.map +1 -1
  78. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js +4 -2
  79. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js.map +1 -1
  80. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js +1 -1
  81. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js.map +1 -1
  82. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js +4 -2
  83. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js.map +1 -1
  84. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
  85. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
  86. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +4 -2
  87. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
  88. package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js +1 -1
  89. package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js.map +1 -1
  90. package/dist/shared/src/components/Feedback/FeedbackContext.es.js +6 -4
  91. package/dist/shared/src/components/Feedback/FeedbackContext.es.js.map +1 -1
  92. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js +1 -1
  93. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js.map +1 -1
  94. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js +4 -2
  95. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js.map +1 -1
  96. package/dist/shared/src/components/LinksManager/LinkManagerItem.cjs.js +1 -1
  97. package/dist/shared/src/components/LinksManager/LinkManagerItem.cjs.js.map +1 -1
  98. package/dist/shared/src/components/LinksManager/LinkManagerItem.es.js +28 -25
  99. package/dist/shared/src/components/LinksManager/LinkManagerItem.es.js.map +1 -1
  100. package/dist/shared/src/components/LinksManager/LinksManager.cjs.js.map +1 -1
  101. package/dist/shared/src/components/LinksManager/LinksManager.es.js.map +1 -1
  102. package/dist/shared/src/components/LinksManager/LinksManager.styled.cjs.js +5 -0
  103. package/dist/shared/src/components/LinksManager/LinksManager.styled.cjs.js.map +1 -1
  104. package/dist/shared/src/components/LinksManager/LinksManager.styled.es.js +5 -0
  105. package/dist/shared/src/components/LinksManager/LinksManager.styled.es.js.map +1 -1
  106. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
  107. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
  108. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +4 -2
  109. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
  110. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js +1 -1
  111. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js.map +1 -1
  112. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js +4 -2
  113. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js.map +1 -1
  114. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +1 -1
  115. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
  116. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +4 -2
  117. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
  118. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +1 -1
  119. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  120. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +6 -4
  121. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  122. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +1 -1
  123. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
  124. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +4 -2
  125. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
  126. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +1 -1
  127. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
  128. package/dist/shared/src/components/RenameForm/RenameForm.es.js +4 -2
  129. package/dist/shared/src/components/RenameForm/RenameForm.es.js.map +1 -1
  130. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js +1 -1
  131. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js.map +1 -1
  132. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js +4 -2
  133. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js.map +1 -1
  134. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +1 -1
  135. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  136. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +4 -2
  137. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  138. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +1 -1
  139. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  140. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +5 -3
  141. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  142. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +1 -1
  143. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  144. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +4 -2
  145. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  146. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js +1 -1
  147. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js.map +1 -1
  148. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js +4 -2
  149. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js.map +1 -1
  150. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +1 -1
  151. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
  152. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +8 -6
  153. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
  154. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +1 -1
  155. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  156. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +4 -2
  157. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  158. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +1 -1
  159. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
  160. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +4 -2
  161. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
  162. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +1 -1
  163. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -1
  164. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +6 -4
  165. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
  166. package/dist/shared/src/components/Watchers/Watchers.cjs.js +1 -1
  167. package/dist/shared/src/components/Watchers/Watchers.cjs.js.map +1 -1
  168. package/dist/shared/src/components/Watchers/Watchers.es.js +4 -2
  169. package/dist/shared/src/components/Watchers/Watchers.es.js.map +1 -1
  170. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
  171. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  172. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +4 -2
  173. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  174. package/dist/shared/src/containers/Actions/Actions.cjs.js +1 -1
  175. package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
  176. package/dist/shared/src/containers/Actions/Actions.es.js +4 -2
  177. package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
  178. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
  179. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  180. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +4 -2
  181. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  182. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  183. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  184. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +4 -2
  185. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  186. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
  187. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  188. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +4 -2
  189. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  190. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
  191. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  192. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +5 -3
  193. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  194. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
  195. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  196. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +4 -2
  197. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  198. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +1 -1
  199. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
  200. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +4 -2
  201. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
  202. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.cjs.js +1 -1
  203. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.cjs.js.map +1 -1
  204. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.es.js +4 -2
  205. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.es.js.map +1 -1
  206. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +1 -1
  207. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
  208. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +4 -2
  209. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
  210. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
  211. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
  212. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +4 -2
  213. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js.map +1 -1
  214. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
  215. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
  216. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +4 -2
  217. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
  218. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
  219. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
  220. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +4 -2
  221. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
  222. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
  223. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
  224. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +4 -2
  225. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
  226. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js +1 -1
  227. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js.map +1 -1
  228. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js +4 -2
  229. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js.map +1 -1
  230. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
  231. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
  232. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +4 -2
  233. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
  234. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js +1 -1
  235. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js.map +1 -1
  236. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js +4 -2
  237. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js.map +1 -1
  238. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +1 -1
  239. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js.map +1 -1
  240. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js +4 -2
  241. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
  242. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -1
  243. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
  244. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +4 -2
  245. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
  246. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +1 -1
  247. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  248. package/dist/shared/src/containers/Feed/context/FeedContext.es.js +7 -5
  249. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  250. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js +1 -1
  251. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js.map +1 -1
  252. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js +4 -2
  253. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js.map +1 -1
  254. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
  255. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  256. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +4 -2
  257. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  258. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  259. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  260. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +4 -2
  261. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  262. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js +1 -1
  263. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js.map +1 -1
  264. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js +4 -2
  265. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js.map +1 -1
  266. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
  267. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  268. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +4 -2
  269. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  270. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
  271. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
  272. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +4 -2
  273. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
  274. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +1 -1
  275. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
  276. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +6 -4
  277. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
  278. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +1 -1
  279. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
  280. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +4 -2
  281. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
  282. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
  283. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  284. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +7 -5
  285. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  286. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  287. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  288. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +4 -2
  289. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  290. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
  291. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  292. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +4 -2
  293. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  294. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
  295. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
  296. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +4 -2
  297. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
  298. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js +1 -1
  299. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js.map +1 -1
  300. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js +4 -2
  301. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js.map +1 -1
  302. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +1 -1
  303. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
  304. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +30 -28
  305. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
  306. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +1 -1
  307. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
  308. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +4 -2
  309. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
  310. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js +1 -1
  311. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js.map +1 -1
  312. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js +4 -2
  313. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js.map +1 -1
  314. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
  315. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
  316. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +4 -2
  317. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
  318. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
  319. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
  320. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +4 -2
  321. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js.map +1 -1
  322. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
  323. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
  324. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +4 -2
  325. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
  326. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
  327. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
  328. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +4 -2
  329. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
  330. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
  331. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  332. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +15 -13
  333. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  334. package/dist/shared/src/containers/ProjectTreeTable/utils/linksToTableData.cjs.js +1 -1
  335. package/dist/shared/src/containers/ProjectTreeTable/utils/linksToTableData.cjs.js.map +1 -1
  336. package/dist/shared/src/containers/ProjectTreeTable/utils/linksToTableData.es.js +34 -21
  337. package/dist/shared/src/containers/ProjectTreeTable/utils/linksToTableData.es.js.map +1 -1
  338. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
  339. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
  340. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +31 -28
  341. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
  342. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js +1 -1
  343. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js.map +1 -1
  344. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js +4 -2
  345. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js.map +1 -1
  346. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
  347. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  348. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +4 -2
  349. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  350. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
  351. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
  352. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +4 -2
  353. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
  354. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js +1 -1
  355. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js.map +1 -1
  356. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js +4 -2
  357. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js.map +1 -1
  358. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
  359. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
  360. package/dist/shared/src/containers/Views/context/ViewsContext.es.js +6 -4
  361. package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
  362. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js +1 -1
  363. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js.map +1 -1
  364. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js +4 -2
  365. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js.map +1 -1
  366. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js +1 -1
  367. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js.map +1 -1
  368. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js +4 -2
  369. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js.map +1 -1
  370. package/dist/shared/src/containers/Views/hooks/useSelectedView.cjs.js +1 -1
  371. package/dist/shared/src/containers/Views/hooks/useSelectedView.cjs.js.map +1 -1
  372. package/dist/shared/src/containers/Views/hooks/useSelectedView.es.js +4 -2
  373. package/dist/shared/src/containers/Views/hooks/useSelectedView.es.js.map +1 -1
  374. package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js +1 -1
  375. package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js.map +1 -1
  376. package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js +4 -2
  377. package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js.map +1 -1
  378. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js +1 -1
  379. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js.map +1 -1
  380. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js +4 -2
  381. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js.map +1 -1
  382. package/dist/shared/src/context/AddonProjectContext.cjs.js +1 -1
  383. package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
  384. package/dist/shared/src/context/AddonProjectContext.es.js +6 -4
  385. package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
  386. package/dist/shared/src/context/DetailsPanelContext.cjs.js +1 -1
  387. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  388. package/dist/shared/src/context/DetailsPanelContext.es.js +6 -4
  389. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  390. package/dist/shared/src/context/GlobalContext.cjs.js +1 -1
  391. package/dist/shared/src/context/GlobalContext.cjs.js.map +1 -1
  392. package/dist/shared/src/context/GlobalContext.es.js +6 -4
  393. package/dist/shared/src/context/GlobalContext.es.js.map +1 -1
  394. package/dist/shared/src/context/PowerpackContext.cjs.js +1 -1
  395. package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
  396. package/dist/shared/src/context/PowerpackContext.es.js +8 -6
  397. package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
  398. package/dist/shared/src/context/ProjectContext.cjs.js +1 -1
  399. package/dist/shared/src/context/ProjectContext.cjs.js.map +1 -1
  400. package/dist/shared/src/context/ProjectContext.es.js +44 -38
  401. package/dist/shared/src/context/ProjectContext.es.js.map +1 -1
  402. package/dist/shared/src/context/ProjectFoldersContext.cjs.js +1 -1
  403. package/dist/shared/src/context/ProjectFoldersContext.cjs.js.map +1 -1
  404. package/dist/shared/src/context/ProjectFoldersContext.es.js +6 -4
  405. package/dist/shared/src/context/ProjectFoldersContext.es.js.map +1 -1
  406. package/dist/shared/src/context/RemoteModulesContext.cjs.js +1 -1
  407. package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
  408. package/dist/shared/src/context/RemoteModulesContext.es.js +6 -4
  409. package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
  410. package/dist/shared/src/context/UriContext.cjs.js +1 -1
  411. package/dist/shared/src/context/UriContext.cjs.js.map +1 -1
  412. package/dist/shared/src/context/UriContext.es.js +7 -5
  413. package/dist/shared/src/context/UriContext.es.js.map +1 -1
  414. package/dist/shared/src/context/WebsocketContext.cjs.js +1 -1
  415. package/dist/shared/src/context/WebsocketContext.cjs.js.map +1 -1
  416. package/dist/shared/src/context/WebsocketContext.es.js +6 -4
  417. package/dist/shared/src/context/WebsocketContext.es.js.map +1 -1
  418. package/dist/shared/src/hooks/useActionTriggers.cjs.js +1 -1
  419. package/dist/shared/src/hooks/useActionTriggers.cjs.js.map +1 -1
  420. package/dist/shared/src/hooks/useActionTriggers.es.js +4 -2
  421. package/dist/shared/src/hooks/useActionTriggers.es.js.map +1 -1
  422. package/dist/shared/src/hooks/useEntityUpdate.cjs.js +1 -1
  423. package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
  424. package/dist/shared/src/hooks/useEntityUpdate.es.js +4 -2
  425. package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
  426. package/dist/shared/src/hooks/useGetEntityGroups.cjs.js +1 -1
  427. package/dist/shared/src/hooks/useGetEntityGroups.cjs.js.map +1 -1
  428. package/dist/shared/src/hooks/useGetEntityGroups.es.js +4 -2
  429. package/dist/shared/src/hooks/useGetEntityGroups.es.js.map +1 -1
  430. package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js +1 -1
  431. package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js.map +1 -1
  432. package/dist/shared/src/hooks/useGroupByRemoteModules.es.js +4 -2
  433. package/dist/shared/src/hooks/useGroupByRemoteModules.es.js.map +1 -1
  434. package/dist/shared/src/hooks/useScopedStatuses.cjs.js +1 -1
  435. package/dist/shared/src/hooks/useScopedStatuses.cjs.js.map +1 -1
  436. package/dist/shared/src/hooks/useScopedStatuses.es.js +6 -4
  437. package/dist/shared/src/hooks/useScopedStatuses.es.js.map +1 -1
  438. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +1 -1
  439. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
  440. package/dist/shared/src/hooks/useUserProjectConfig.es.js +4 -2
  441. package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
  442. package/dist/types/api/queries/config/getConfig.d.ts +747 -0
  443. package/dist/types/api/queries/config/index.d.ts +2 -0
  444. package/dist/types/api/queries/config/updateConfig.d.ts +171 -0
  445. package/dist/types/api/queries/index.d.ts +1 -0
  446. package/dist/types/api/queries/links/getEntityLinks.d.ts +2 -1
  447. package/dist/types/components/Chips/Chips.d.ts +1 -0
  448. package/dist/types/components/LinksManager/LinksManager.d.ts +1 -0
  449. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"updateEntity.es.js","sources":["../../../../../../src/api/queries/entities/updateEntity.ts"],"sourcesContent":["// @ts-nocheck\n\nimport api from './getEntity'\nimport { detailsPanelQueries } from '@shared/api/queries'\nimport { patchDetailsPanelEntity } from '@shared/api'\nimport { toast } from 'react-toastify'\nimport { dashboardQueries, getKanbanTasks } from '@shared/api/queries/userDashboard'\nimport { patchOverviewFolders, patchOverviewTasks } from '@shared/api/queries/overview'\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 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 const detailsPanelTags = [\n {\n type: 'entities',\n id: entityId,\n },\n ]\n\n const detailsPanelEntries = api.util.selectInvalidatedBy(state, detailsPanelTags)\n\n for (const entry of detailsPanelEntries) {\n // patch any entity details panels in dashboard\n let entityDetailsResult = dispatch(\n detailsPanelQueries.util.updateQueryData(\n 'getEntitiesDetailsPanel',\n entry.originalArgs,\n (draft) => {\n for (const entity of draft) {\n patchDetailsPanelEntity([{ entityId, data, entityType }], entity)\n }\n },\n ),\n )\n\n patchResults.push(entityDetailsResult)\n }\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 }) => [\n ...operations.map((o) => ({ id: o.id, type: 'review' })),\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","_a","priority","_b","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","currentAssignees","queryFulfilled","getState","patchResults","invalidationTagsAfterComplete","dashboardProjects","dashboardUsers","dashboardAssigneesIsMe","_c","cacheUsers","_d","hasSomeAssignees","hasSomeProjects","project","result","wasPatched","getKanbanTasks","response","tags","currentAssigneesSet","newAssigneesSet","removedAssignees","addedAssignees","assigneesTags","entriesToInvalidate","patchResult","currentKanbanCacheArgs","detailsPanelTags","detailsPanelEntries","entityDetailsResult","detailsPanelQueries","entity","patchDetailsPanelEntity","toast","_f","_e","promises","id","promise","progressPatches","overviewPatches","operationsWithEntityId","patchOverviewTasks","patchOverviewFolders","activityTags","useUpdateEntitiesMutation","useUpdateEntityMutation"],"mappings":"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"}
1
+ {"version":3,"file":"updateEntity.es.js","sources":["../../../../../../src/api/queries/entities/updateEntity.ts"],"sourcesContent":["// @ts-nocheck\n\nimport api from './getEntity'\nimport { detailsPanelQueries } from '@shared/api/queries'\nimport { patchDetailsPanelEntity } from '@shared/api'\nimport { toast } from 'react-toastify'\nimport { dashboardQueries, getKanbanTasks } from '@shared/api/queries/userDashboard'\nimport { patchOverviewFolders, patchOverviewTasks } from '@shared/api/queries/overview'\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 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 const detailsPanelTags = [\n {\n type: 'entities',\n id: entityId,\n },\n ]\n\n const detailsPanelEntries = api.util.selectInvalidatedBy(state, detailsPanelTags)\n\n for (const entry of detailsPanelEntries) {\n // patch any entity details panels in dashboard\n let entityDetailsResult = dispatch(\n detailsPanelQueries.util.updateQueryData(\n 'getEntitiesDetailsPanel',\n entry.originalArgs,\n (draft) => {\n for (const entity of draft) {\n patchDetailsPanelEntity([{ entityId, data, entityType }], entity)\n }\n },\n ),\n )\n\n patchResults.push(entityDetailsResult)\n }\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 }) => [\n ...operations.map((o) => ({ id: o.id, type: 'review' })),\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","_a","priority","_b","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","currentAssignees","queryFulfilled","getState","patchResults","invalidationTagsAfterComplete","dashboardProjects","dashboardUsers","dashboardAssigneesIsMe","_c","cacheUsers","_d","hasSomeAssignees","hasSomeProjects","project","result","wasPatched","getKanbanTasks","response","tags","currentAssigneesSet","newAssigneesSet","removedAssignees","addedAssignees","assigneesTags","entriesToInvalidate","patchResult","currentKanbanCacheArgs","detailsPanelTags","detailsPanelEntries","entityDetailsResult","detailsPanelQueries","entity","patchDetailsPanelEntity","toast","_f","_e","promises","id","promise","progressPatches","overviewPatches","operationsWithEntityId","patchOverviewTasks","patchOverviewFolders","activityTags","useUpdateEntitiesMutation","useUpdateEntityMutation"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("../../base/client.cjs.js");require("../../generated/graphql.cjs.js");const v=require("../../generated/graphqlLinks.cjs.js");require("../../generated/access.cjs.js");require("../../generated/actions.cjs.js");require("../../generated/activityFeed.cjs.js");require("../../generated/addons.cjs.js");require("../../generated/anatomy.cjs.js");require("../../generated/attributes.cjs.js");require("../../generated/authentication.cjs.js");require("../../generated/bundles.cjs.js");require("../../generated/configuration.cjs.js");require("../../generated/desktop.cjs.js");require("../../generated/entityLists.cjs.js");require("../../generated/events.cjs.js");require("../../generated/files.cjs.js");const A=require("../../generated/folders.cjs.js");require("../../generated/inbox.cjs.js");require("../../generated/links.cjs.js");require("../../generated/market.cjs.js");require("../../generated/onboarding.cjs.js");require("../../generated/operations.cjs.js");require("../../generated/products.cjs.js");require("../../generated/projectDashboard.cjs.js");require("../../generated/projects.cjs.js");require("../../generated/reviewables.cjs.js");require("../../generated/services.cjs.js");require("../../generated/system.cjs.js");require("../../generated/tasks.cjs.js");require("../../generated/teams.cjs.js");require("../../generated/thumbnails.cjs.js");require("../../generated/uRIs.cjs.js");require("../../generated/users.cjs.js");require("../../generated/versions.cjs.js");require("../../generated/workfiles.cjs.js");require("../../generated/ynputCloud.cjs.js");require("../../generated/grouping.cjs.js");require("../../generated/views.cjs.js");const E=require("./utils/formatEntityLinks.cjs.js"),F=require("react-toastify");require("lodash");require("uuid");const G=require("../../../util/pubsub.cjs.js"),S={folder:"GetFoldersLinks",task:"GetTasksLinks",product:"GetProductsLinks",version:"GetVersionsLinks",representation:"GetRepresentationsLinks",workfile:"GetWorkfilesLinks"},$={folder:"folders",task:"tasks",product:"products",version:"versions",representation:"representations",workfile:"workfiles"},P=A.api.injectEndpoints({endpoints:z=>({getEntityLinks:z.query({queryFn:async({projectName:t,entityIds:u,entityType:r},{getState:n,dispatch:q,queryCacheKey:T,forced:m})=>{var h,d,L,w,k;try{const y=n(),R=JSON.stringify({projectName:t,entityType:r}),a=(d=(h=y.restApi)==null?void 0:h.queries)==null?void 0:d[T||`getEntityLinks(${R})`],f=(a==null?void 0:a.data)||[],i=new Set(f.map(s=>s.id)),c=u.filter(s=>!(i!=null&&i.has(s))||m);if(c.length===0)return{data:f};const o=S[r],b=$[r];return{data:((k=(w=(L=(await q(v.api.endpoints[o].initiate({projectName:t,entityIds:c},{forceRefetch:!0})).unwrap()).project)==null?void 0:L[b])==null?void 0:w.edges)==null?void 0:k.map(({node:s})=>{var p,l;return{id:s.id,links:((l=(p=s.links.edges)==null?void 0:p.filter(e=>!!(e!=null&&e.node)))==null?void 0:l.map(e=>({...e,node:{id:e.node.id,name:e.node.name,label:E.formatEntityLabel(e.node),parents:e.node.parents||[],subType:"subType"in e.node?e.node.subType:void 0}})))||[]}}))||[]}}catch(y){return console.error(`Error in getEntityLinks queryFn for ${r}:`,y),F.toast.error(`Error fetching ${r} links`),{error:{status:"FETCH_ERROR",error:y.message}}}},serializeQueryArgs:({queryArgs:t})=>({projectName:t.projectName,entityType:t.entityType}),forceRefetch:({currentArg:t,previousArg:u})=>{if(!t||!u)return!0;const r=new Set(t.entityIds),n=new Set(u.entityIds);if(r.size!==n.size)return!0;for(const q of r)if(!n.has(q))return!0;return!1},merge:(t,u)=>{if(!t)return u;const r=new Map(t.map(n=>[n.id,n]));for(const n of u)r.set(n.id,n);t.length=0,t.push(...r.values())},providesTags:(t,u,r)=>t?[...t.flatMap(n=>n.links.map(q=>({type:"link",id:q.node.id}))),{type:"link",id:`${r.projectName}-${r.entityType}`}]:[{type:"link",id:`${r.projectName}-${r.entityType}`}],async onCacheEntryAdded({projectName:t,entityIds:u,entityType:r},{cacheDataLoaded:n,cacheEntryRemoved:q,updateCachedData:T,dispatch:m}){let h;const d=new Set,L=100,w=500;let k=!1;const y=()=>{k||(k=!0,setTimeout(R,w))},R=async()=>{var f,i,c;if(k=!1,!d.size)return;const a=Array.from(d).slice(0,L);a.forEach(o=>d.delete(o));try{const o=S[r],b=$[r],j=((c=(i=(f=(await m(v.api.endpoints[o].initiate({projectName:t,entityIds:a},{forceRefetch:!0})).unwrap()).project)==null?void 0:f[b])==null?void 0:i.edges)==null?void 0:c.map(({node:s})=>{var p,l;return{id:s.id,links:((l=(p=s.links.edges)==null?void 0:p.filter(e=>!!(e!=null&&e.node)))==null?void 0:l.map(e=>({...e,node:{id:e.node.id,name:e.node.name,label:E.formatEntityLabel(e.node),parents:e.node.parents||[],subType:"subType"in e.node?e.node.subType:void 0}})))||[]}}))||[];T(s=>{for(const p of j){const l=s.findIndex(e=>e.id===p.id);l>-1?s[l]=p:s.push(p)}})}catch(o){console.error("Realtime link batch update failed",o)}finally{d.size&&y()}};try{await n;const a=async(f,i)=>{var b,I;if(!f.startsWith("link.created")&&!f.startsWith("link.deleted")||(i==null?void 0:i.project)!==t)return;const c=(b=i==null?void 0:i.summary)==null?void 0:b.inputId,o=(I=i==null?void 0:i.summary)==null?void 0:I.outputId;!c&&!o||(c&&d.add(c),o&&d.add(o),y())};h=G.subscribe("link",a)}catch{}await q,h&&G.unsubscribe(h)}})})}),{useGetEntityLinksQuery:M}=P;exports.entityLinksApi=P;exports.useGetEntityLinksQuery=M;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("../../base/client.cjs.js");require("../../generated/graphql.cjs.js");const v=require("../../generated/graphqlLinks.cjs.js");require("../../generated/access.cjs.js");require("../../generated/actions.cjs.js");require("../../generated/activityFeed.cjs.js");require("../../generated/addons.cjs.js");require("../../generated/anatomy.cjs.js");require("../../generated/attributes.cjs.js");require("../../generated/authentication.cjs.js");require("../../generated/bundles.cjs.js");require("../../generated/configuration.cjs.js");require("../../generated/desktop.cjs.js");require("../../generated/entityLists.cjs.js");require("../../generated/events.cjs.js");require("../../generated/files.cjs.js");const M=require("../../generated/folders.cjs.js");require("../../generated/inbox.cjs.js");require("../../generated/links.cjs.js");require("../../generated/market.cjs.js");require("../../generated/onboarding.cjs.js");require("../../generated/operations.cjs.js");require("../../generated/products.cjs.js");require("../../generated/projectDashboard.cjs.js");require("../../generated/projects.cjs.js");require("../../generated/reviewables.cjs.js");require("../../generated/services.cjs.js");require("../../generated/system.cjs.js");require("../../generated/tasks.cjs.js");require("../../generated/teams.cjs.js");require("../../generated/thumbnails.cjs.js");require("../../generated/uRIs.cjs.js");require("../../generated/users.cjs.js");require("../../generated/versions.cjs.js");require("../../generated/workfiles.cjs.js");require("../../generated/ynputCloud.cjs.js");require("../../generated/grouping.cjs.js");require("../../generated/views.cjs.js");const G=require("./utils/formatEntityLinks.cjs.js"),Q=require("react-toastify");require("lodash");require("uuid");const N=require("../../../util/pubsub.cjs.js"),P={folder:"GetFoldersLinks",task:"GetTasksLinks",product:"GetProductsLinks",version:"GetVersionsLinks",representation:"GetRepresentationsLinks",workfile:"GetWorkfilesLinks"},z={folder:"folders",task:"tasks",product:"products",version:"versions",representation:"representations",workfile:"workfiles"},A=M.api.injectEndpoints({endpoints:F=>({getEntityLinks:F.query({queryFn:async({projectName:t,entityIds:d,entityType:r},{getState:o,dispatch:c,queryCacheKey:m,forced:S})=>{var h,p,I,L,b;try{const l=o(),$=JSON.stringify({projectName:t,entityType:r}),f=(p=(h=l.restApi)==null?void 0:h.queries)==null?void 0:p[m||`getEntityLinks(${$})`],q=(f==null?void 0:f.data)||[],n=new Set(q.map(s=>s.id)),y=d.filter(s=>!(n!=null&&n.has(s))||S);if(y.length===0)return{data:q};const u=P[r],T=z[r];return{data:((b=(L=(I=(await c(v.api.endpoints[u].initiate({projectName:t,entityIds:y},{forceRefetch:!0})).unwrap()).project)==null?void 0:I[T])==null?void 0:L.edges)==null?void 0:b.map(({node:s})=>{var i,R;const a=((i=s.links.edges)==null?void 0:i.filter(e=>!(e!=null&&e.node)))||[];return a.length>0&&console.log(`[RESTRICTED LINKS] Entity ${s.id} (${s.name}) has ${a.length} restricted link(s):`,a.map(e=>({linkId:e==null?void 0:e.id,linkType:e==null?void 0:e.linkType,direction:e==null?void 0:e.direction,entityType:e==null?void 0:e.entityType,nodeIsNull:!(e!=null&&e.node)}))),{id:s.id,links:((R=s.links.edges)==null?void 0:R.map(e=>e!=null&&e.node?{...e,node:{id:e.node.id,name:e.node.name,label:G.formatEntityLabel(e.node),parents:e.node.parents||[],subType:"subType"in e.node?e.node.subType:void 0},isRestricted:!1}:{...e,node:null,isRestricted:!0}))||[]}}))||[]}}catch(l){return console.error(`Error in getEntityLinks queryFn for ${r}:`,l),Q.toast.error(`Error fetching ${r} links`),{error:{status:"FETCH_ERROR",error:l.message}}}},serializeQueryArgs:({queryArgs:t})=>({projectName:t.projectName,entityType:t.entityType}),forceRefetch:({currentArg:t,previousArg:d})=>{if(!t||!d)return!0;const r=new Set(t.entityIds),o=new Set(d.entityIds);if(r.size!==o.size)return!0;for(const c of r)if(!o.has(c))return!0;return!1},merge:(t,d)=>{if(!t)return d;const r=new Map(t.map(o=>[o.id,o]));for(const o of d)r.set(o.id,o);t.length=0,t.push(...r.values())},providesTags:(t,d,r)=>t?[...t.flatMap(o=>o.links.filter(c=>c.node!==null).map(c=>({type:"link",id:c.node.id}))),{type:"link",id:`${r.projectName}-${r.entityType}`}]:[{type:"link",id:`${r.projectName}-${r.entityType}`}],async onCacheEntryAdded({projectName:t,entityIds:d,entityType:r},{cacheDataLoaded:o,cacheEntryRemoved:c,updateCachedData:m,dispatch:S}){let h;const p=new Set,I=100,L=500;let b=!1;const l=()=>{b||(b=!0,setTimeout($,L))},$=async()=>{var q,n,y;if(b=!1,!p.size)return;const f=Array.from(p).slice(0,I);f.forEach(u=>p.delete(u));try{const u=P[r],T=z[r],j=((y=(n=(q=(await S(v.api.endpoints[u].initiate({projectName:t,entityIds:f},{forceRefetch:!0})).unwrap()).project)==null?void 0:q[T])==null?void 0:n.edges)==null?void 0:y.map(({node:s})=>{var a;return{id:s.id,links:((a=s.links.edges)==null?void 0:a.map(i=>i!=null&&i.node?{...i,node:{id:i.node.id,name:i.node.name,label:G.formatEntityLabel(i.node),parents:i.node.parents||[],subType:"subType"in i.node?i.node.subType:void 0},isRestricted:!1}:{...i,node:null,isRestricted:!0}))||[]}}))||[];m(s=>{for(const a of j){const i=s.findIndex(R=>R.id===a.id);i>-1?s[i]=a:s.push(a)}})}catch(u){console.error("Realtime link batch update failed",u)}finally{p.size&&l()}};try{await o;const f=async(q,n)=>{var T,w;if(!q.startsWith("link.created")&&!q.startsWith("link.deleted")||(n==null?void 0:n.project)!==t)return;const y=(T=n==null?void 0:n.summary)==null?void 0:T.inputId,u=(w=n==null?void 0:n.summary)==null?void 0:w.outputId;!y&&!u||(y&&p.add(y),u&&p.add(u),l())};h=N.subscribe("link",f)}catch{}await c,h&&N.unsubscribe(h)}})})}),{useGetEntityLinksQuery:O}=A;exports.entityLinksApi=A;exports.useGetEntityLinksQuery=O;
2
2
  //# sourceMappingURL=getEntityLinks.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getEntityLinks.cjs.js","sources":["../../../../../../src/api/queries/links/getEntityLinks.ts"],"sourcesContent":["import { FetchBaseQueryError } from '@reduxjs/toolkit/query'\nimport {\n GetFoldersLinksQuery,\n GetTasksLinksQuery,\n GetProductsLinksQuery,\n GetVersionsLinksQuery,\n GetRepresentationsLinksQuery,\n GetWorkfilesLinksQuery,\n gqlLinksApi,\n foldersApi,\n} from '@shared/api/generated'\nimport { formatEntityLabel } from './utils/formatEntityLinks'\nimport { toast } from 'react-toastify'\nimport { PubSub } from '@shared/util'\n\n/**\n * Custom queryFn for fetching entity links with optimized caching behavior.\n *\n * Key features:\n * 1. Single cache per project and entity type - different entityIds combinations don't create new caches\n * 2. Skips fetching entities that are already cached\n * 3. Force refetch when entityIds change\n * 4. Merges new entities into cache without duplicates\n * 5. Supports all entity types: folders, tasks, products, versions, representations, workfiles\n */\n\n// Define the arguments for the query\nexport type GetEntityLinksArgs = {\n projectName: string\n entityIds: string[]\n entityType: 'folder' | 'task' | 'product' | 'version' | 'representation' | 'workfile'\n}\n\n// Define link types for each entity\nexport type FolderLink =\n GetFoldersLinksQuery['project']['folders']['edges'][0]['node']['links']['edges'][0]\nexport type TaskLink =\n GetTasksLinksQuery['project']['tasks']['edges'][0]['node']['links']['edges'][0]\nexport type ProductLink =\n GetProductsLinksQuery['project']['products']['edges'][0]['node']['links']['edges'][0]\nexport type VersionLink =\n GetVersionsLinksQuery['project']['versions']['edges'][0]['node']['links']['edges'][0]\nexport type RepresentationLink =\n GetRepresentationsLinksQuery['project']['representations']['edges'][0]['node']['links']['edges'][0]\nexport type WorkfileLink =\n GetWorkfilesLinksQuery['project']['workfiles']['edges'][0]['node']['links']['edges'][0]\n\nexport type EntityLinkQuery =\n | FolderLink\n | TaskLink\n | ProductLink\n | VersionLink\n | RepresentationLink\n | WorkfileLink\nexport type EntityLink = Pick<EntityLinkQuery, 'direction' | 'entityType' | 'id' | 'linkType'> & {\n node: Pick<EntityLinkQuery['node'], 'name' | 'id'> & {\n label?: string | null\n parents: string[]\n subType: string | undefined\n }\n}\n\n// Define the result type for the query - simplified without edges wrapper\nexport type EntityWithLinks = {\n id: string\n links: EntityLink[]\n}\n\nexport type GetEntityLinksResult = EntityWithLinks[]\n\n// Map entity types to their corresponding GraphQL endpoints\nconst entityEndpoints = {\n folder: 'GetFoldersLinks',\n task: 'GetTasksLinks',\n product: 'GetProductsLinks',\n version: 'GetVersionsLinks',\n representation: 'GetRepresentationsLinks',\n workfile: 'GetWorkfilesLinks',\n} as const\n\n// Map entity types to their result path in the GraphQL response\nconst entityResultPaths = {\n folder: 'folders',\n task: 'tasks',\n product: 'products',\n version: 'versions',\n representation: 'representations',\n workfile: 'workfiles',\n} as const\n\nconst injectedQueries = foldersApi.injectEndpoints({\n endpoints: (build) => ({\n getEntityLinks: build.query<GetEntityLinksResult, GetEntityLinksArgs>({\n queryFn: async (\n { projectName, entityIds, entityType },\n { getState, dispatch, queryCacheKey, forced },\n ) => {\n try {\n // Get current state to access cached data\n const state = getState() as any\n const cacheKey = JSON.stringify({ projectName, entityType })\n\n // Access the cache entry for this project and entity type\n const cacheEntry =\n state.restApi?.queries?.[queryCacheKey || `getEntityLinks(${cacheKey})`]\n const cachedData = cacheEntry?.data || []\n\n // 1. When fetching new data for entityIds, we should skip entities that are already in the cache.\n const cachedEntityIds = new Set(cachedData.map((entity: EntityWithLinks) => entity.id))\n const entityIdsToFetch = entityIds.filter((id) => !cachedEntityIds?.has(id) || forced)\n\n // If all entities are already cached, return the cached data\n if (entityIdsToFetch.length === 0) {\n return { data: cachedData }\n }\n\n // Get the appropriate endpoint and parameter names\n const endpoint = entityEndpoints[entityType]\n const resultPath = entityResultPaths[entityType]\n\n // Fetch only the entities that aren't already cached\n const result = await dispatch(\n (gqlLinksApi.endpoints as any)[endpoint].initiate(\n { projectName, entityIds: entityIdsToFetch },\n { forceRefetch: true },\n ),\n ).unwrap()\n\n const newEntities =\n result.project?.[resultPath]?.edges?.map(({ node }: { node: any }) => ({\n id: node.id,\n links:\n node.links.edges\n ?.filter((e: EntityLinkQuery | null) => !!e?.node)\n ?.map((linkEdge: EntityLinkQuery) => ({\n ...linkEdge,\n node: {\n id: linkEdge.node.id,\n name: linkEdge.node.name,\n label: formatEntityLabel(linkEdge.node),\n parents: linkEdge.node.parents || [],\n subType: 'subType' in linkEdge.node ? linkEdge.node.subType : undefined,\n },\n })) || [], // Flatten the edges structure\n })) || []\n\n // Return the new entities - the merge function will handle combining with existing cache\n return { data: newEntities }\n } catch (error: any) {\n console.error(`Error in getEntityLinks queryFn for ${entityType}:`, error)\n toast.error(`Error fetching ${entityType} links`)\n return { error: { status: 'FETCH_ERROR', error: error.message } as FetchBaseQueryError }\n }\n },\n // 2. We should not create new caches when the entityIds argument changes.\n serializeQueryArgs: ({ queryArgs }) => {\n // Use only projectName and entityType for the cache key, ignoring entityIds\n return { projectName: queryArgs.projectName, entityType: queryArgs.entityType }\n },\n // 3. We should force a refetch every time the entityIds changes.\n forceRefetch: ({ currentArg, previousArg }) => {\n // Force refetch if entityIds array is different\n if (!currentArg || !previousArg) return true\n\n // Compare arrays by converting to sets\n const currentIds = new Set(currentArg.entityIds)\n const previousIds = new Set(previousArg.entityIds)\n\n if (currentIds.size !== previousIds.size) return true\n\n // Check if any IDs are different\n for (const id of currentIds) {\n if (!previousIds.has(id)) return true\n }\n\n return false\n },\n // 4. We should merge new entities into the cache ensuring there are no duplicates.\n merge: (currentCache, newItems) => {\n if (!currentCache) return newItems\n\n const cacheMap = new Map(currentCache.map((item) => [item.id, item]))\n for (const newItem of newItems) {\n cacheMap.set(newItem.id, newItem) // Overwrite if exists, add if not\n }\n // Update currentCache in-place\n currentCache.length = 0\n currentCache.push(...cacheMap.values())\n },\n // Provide tags for potential invalidation\n providesTags: (result, error, arg) =>\n result\n ? [\n ...result.flatMap((entity) =>\n entity.links.map((link) => ({ type: 'link', id: link.node.id })),\n ),\n { type: 'link', id: `${arg.projectName}-${arg.entityType}` },\n ]\n : [{ type: 'link', id: `${arg.projectName}-${arg.entityType}` }],\n // Subscribe to link.created and link.deleted WebSocket events\n async onCacheEntryAdded(\n { projectName, entityIds, entityType },\n { cacheDataLoaded, cacheEntryRemoved, updateCachedData, dispatch },\n ) {\n let token: any\n const pendingEntityIds = new Set<string>()\n const MAX_BATCH = 100\n const INTERVAL = 500\n let scheduled = false\n\n const schedule = () => {\n if (scheduled) return\n scheduled = true\n setTimeout(flush, INTERVAL)\n }\n\n const flush = async () => {\n scheduled = false\n if (!pendingEntityIds.size) return\n const batchIds = Array.from(pendingEntityIds).slice(0, MAX_BATCH)\n batchIds.forEach((id) => pendingEntityIds.delete(id))\n\n try {\n // Get the appropriate endpoint and parameter names\n const endpoint = entityEndpoints[entityType]\n const resultPath = entityResultPaths[entityType]\n\n // Fetch fresh data for the affected entities\n const result = await dispatch(\n (gqlLinksApi.endpoints as any)[endpoint].initiate(\n { projectName, entityIds: batchIds },\n { forceRefetch: true },\n ),\n ).unwrap()\n\n const updatedEntities =\n result.project?.[resultPath]?.edges?.map(({ node }: { node: any }) => ({\n id: node.id,\n links:\n node.links.edges\n ?.filter((e: EntityLinkQuery | null) => !!e?.node)\n ?.map((linkEdge: EntityLinkQuery) => ({\n ...linkEdge,\n node: {\n id: linkEdge.node.id,\n name: linkEdge.node.name,\n label: formatEntityLabel(linkEdge.node),\n parents: linkEdge.node.parents || [],\n subType: 'subType' in linkEdge.node ? linkEdge.node.subType : undefined,\n },\n })) || [],\n })) || []\n\n updateCachedData((draft: EntityWithLinks[]) => {\n for (const updatedEntity of updatedEntities) {\n const idx = draft.findIndex((entity) => entity.id === updatedEntity.id)\n if (idx > -1) {\n // Update existing entity's links\n draft[idx] = updatedEntity\n } else {\n // Add new entity if not in cache\n draft.push(updatedEntity)\n }\n }\n })\n } catch (err) {\n console.error('Realtime link batch update failed', err)\n } finally {\n if (pendingEntityIds.size) schedule()\n }\n }\n\n try {\n await cacheDataLoaded\n\n const handlePubSub = async (_topic: string, message: any) => {\n // Only react to link.created and link.deleted events for this project\n if (!_topic.startsWith('link.created') && !_topic.startsWith('link.deleted')) return\n if (message?.project !== projectName) return\n\n // Link events have inputId and outputId in the summary (both entities affected by the link)\n const inputId = message?.summary?.inputId\n const outputId = message?.summary?.outputId\n if (!inputId && !outputId) return\n\n // Add both entities to pending list since both are affected by the link change\n if (inputId) pendingEntityIds.add(inputId)\n if (outputId) pendingEntityIds.add(outputId)\n schedule()\n }\n\n // Subscribe to link events\n // NOTE: backend emits topics like 'link.created' and 'link.deleted'.\n // PubSub supports prefix matching when subscribing.\n token = PubSub.subscribe('link', handlePubSub)\n } catch (e) {\n // cache entry removed before loaded - ignore\n }\n\n await cacheEntryRemoved\n if (token) PubSub.unsubscribe(token)\n },\n }),\n }),\n})\n\nexport const { useGetEntityLinksQuery } = injectedQueries\nexport { injectedQueries as entityLinksApi }\n"],"names":["entityEndpoints","entityResultPaths","injectedQueries","foldersApi","build","projectName","entityIds","entityType","getState","dispatch","queryCacheKey","forced","state","cacheKey","cacheEntry","_b","_a","cachedData","cachedEntityIds","entity","entityIdsToFetch","id","endpoint","resultPath","_e","_d","_c","gqlLinksApi","node","linkEdge","formatEntityLabel","error","toast","queryArgs","currentArg","previousArg","currentIds","previousIds","currentCache","newItems","cacheMap","item","newItem","result","arg","link","cacheDataLoaded","cacheEntryRemoved","updateCachedData","token","pendingEntityIds","MAX_BATCH","INTERVAL","scheduled","schedule","flush","batchIds","updatedEntities","draft","updatedEntity","idx","err","handlePubSub","_topic","message","inputId","outputId","PubSub","useGetEntityLinksQuery"],"mappings":"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"}
1
+ {"version":3,"file":"getEntityLinks.cjs.js","sources":["../../../../../../src/api/queries/links/getEntityLinks.ts"],"sourcesContent":["import { FetchBaseQueryError } from '@reduxjs/toolkit/query'\nimport {\n GetFoldersLinksQuery,\n GetTasksLinksQuery,\n GetProductsLinksQuery,\n GetVersionsLinksQuery,\n GetRepresentationsLinksQuery,\n GetWorkfilesLinksQuery,\n gqlLinksApi,\n foldersApi,\n} from '@shared/api/generated'\nimport { formatEntityLabel } from './utils/formatEntityLinks'\nimport { toast } from 'react-toastify'\nimport { PubSub } from '@shared/util'\n\n/**\n * Custom queryFn for fetching entity links with optimized caching behavior.\n *\n * Key features:\n * 1. Single cache per project and entity type - different entityIds combinations don't create new caches\n * 2. Skips fetching entities that are already cached\n * 3. Force refetch when entityIds change\n * 4. Merges new entities into cache without duplicates\n * 5. Supports all entity types: folders, tasks, products, versions, representations, workfiles\n */\n\n// Define the arguments for the query\nexport type GetEntityLinksArgs = {\n projectName: string\n entityIds: string[]\n entityType: 'folder' | 'task' | 'product' | 'version' | 'representation' | 'workfile'\n}\n\n// Define link types for each entity\nexport type FolderLink =\n GetFoldersLinksQuery['project']['folders']['edges'][0]['node']['links']['edges'][0]\nexport type TaskLink =\n GetTasksLinksQuery['project']['tasks']['edges'][0]['node']['links']['edges'][0]\nexport type ProductLink =\n GetProductsLinksQuery['project']['products']['edges'][0]['node']['links']['edges'][0]\nexport type VersionLink =\n GetVersionsLinksQuery['project']['versions']['edges'][0]['node']['links']['edges'][0]\nexport type RepresentationLink =\n GetRepresentationsLinksQuery['project']['representations']['edges'][0]['node']['links']['edges'][0]\nexport type WorkfileLink =\n GetWorkfilesLinksQuery['project']['workfiles']['edges'][0]['node']['links']['edges'][0]\n\nexport type EntityLinkQuery =\n | FolderLink\n | TaskLink\n | ProductLink\n | VersionLink\n | RepresentationLink\n | WorkfileLink\nexport type EntityLink = Pick<EntityLinkQuery, 'direction' | 'entityType' | 'id' | 'linkType'> & {\n node: Pick<EntityLinkQuery['node'], 'name' | 'id'> & {\n label?: string | null\n parents: string[]\n subType: string | undefined\n } | null\n isRestricted?: boolean // flag to indicate if this link is restricted\n}\n\n// Define the result type for the query - simplified without edges wrapper\nexport type EntityWithLinks = {\n id: string\n links: EntityLink[]\n}\n\nexport type GetEntityLinksResult = EntityWithLinks[]\n\n// Map entity types to their corresponding GraphQL endpoints\nconst entityEndpoints = {\n folder: 'GetFoldersLinks',\n task: 'GetTasksLinks',\n product: 'GetProductsLinks',\n version: 'GetVersionsLinks',\n representation: 'GetRepresentationsLinks',\n workfile: 'GetWorkfilesLinks',\n} as const\n\n// Map entity types to their result path in the GraphQL response\nconst entityResultPaths = {\n folder: 'folders',\n task: 'tasks',\n product: 'products',\n version: 'versions',\n representation: 'representations',\n workfile: 'workfiles',\n} as const\n\nconst injectedQueries = foldersApi.injectEndpoints({\n endpoints: (build) => ({\n getEntityLinks: build.query<GetEntityLinksResult, GetEntityLinksArgs>({\n queryFn: async (\n { projectName, entityIds, entityType },\n { getState, dispatch, queryCacheKey, forced },\n ) => {\n try {\n // Get current state to access cached data\n const state = getState() as any\n const cacheKey = JSON.stringify({ projectName, entityType })\n\n // Access the cache entry for this project and entity type\n const cacheEntry =\n state.restApi?.queries?.[queryCacheKey || `getEntityLinks(${cacheKey})`]\n const cachedData = cacheEntry?.data || []\n\n // 1. When fetching new data for entityIds, we should skip entities that are already in the cache.\n const cachedEntityIds = new Set(cachedData.map((entity: EntityWithLinks) => entity.id))\n const entityIdsToFetch = entityIds.filter((id) => !cachedEntityIds?.has(id) || forced)\n\n // If all entities are already cached, return the cached data\n if (entityIdsToFetch.length === 0) {\n return { data: cachedData }\n }\n\n // Get the appropriate endpoint and parameter names\n const endpoint = entityEndpoints[entityType]\n const resultPath = entityResultPaths[entityType]\n\n // Fetch only the entities that aren't already cached\n const result = await dispatch(\n (gqlLinksApi.endpoints as any)[endpoint].initiate(\n { projectName, entityIds: entityIdsToFetch },\n { forceRefetch: true },\n ),\n ).unwrap()\n\n const newEntities =\n result.project?.[resultPath]?.edges?.map(({ node }: { node: any }) => {\n // Log restricted links\n const restrictedLinks = node.links.edges?.filter((e: EntityLinkQuery | null) => !e?.node) || []\n if (restrictedLinks.length > 0) {\n console.log(`[RESTRICTED LINKS] Entity ${node.id} (${node.name}) has ${restrictedLinks.length} restricted link(s):`,\n restrictedLinks.map((link: any) => ({\n linkId: link?.id,\n linkType: link?.linkType,\n direction: link?.direction,\n entityType: link?.entityType,\n nodeIsNull: !link?.node\n }))\n )\n }\n\n return {\n id: node.id,\n links:\n node.links.edges\n ?.map((linkEdge: EntityLinkQuery | null) => {\n if (!linkEdge?.node) {\n // Restricted link - node is null\n return {\n ...linkEdge,\n node: null,\n isRestricted: true,\n } as EntityLink\n }\n // Normal link\n return {\n ...linkEdge,\n node: {\n id: linkEdge.node.id,\n name: linkEdge.node.name,\n label: formatEntityLabel(linkEdge.node),\n parents: linkEdge.node.parents || [],\n subType: 'subType' in linkEdge.node ? linkEdge.node.subType : undefined,\n },\n isRestricted: false,\n } as EntityLink\n }) || [], // Flatten the edges structure\n }\n }) || []\n\n // Return the new entities - the merge function will handle combining with existing cache\n return { data: newEntities }\n } catch (error: any) {\n console.error(`Error in getEntityLinks queryFn for ${entityType}:`, error)\n toast.error(`Error fetching ${entityType} links`)\n return { error: { status: 'FETCH_ERROR', error: error.message } as FetchBaseQueryError }\n }\n },\n // 2. We should not create new caches when the entityIds argument changes.\n serializeQueryArgs: ({ queryArgs }) => {\n // Use only projectName and entityType for the cache key, ignoring entityIds\n return { projectName: queryArgs.projectName, entityType: queryArgs.entityType }\n },\n // 3. We should force a refetch every time the entityIds changes.\n forceRefetch: ({ currentArg, previousArg }) => {\n // Force refetch if entityIds array is different\n if (!currentArg || !previousArg) return true\n\n // Compare arrays by converting to sets\n const currentIds = new Set(currentArg.entityIds)\n const previousIds = new Set(previousArg.entityIds)\n\n if (currentIds.size !== previousIds.size) return true\n\n // Check if any IDs are different\n for (const id of currentIds) {\n if (!previousIds.has(id)) return true\n }\n\n return false\n },\n // 4. We should merge new entities into the cache ensuring there are no duplicates.\n merge: (currentCache, newItems) => {\n if (!currentCache) return newItems\n\n const cacheMap = new Map(currentCache.map((item) => [item.id, item]))\n for (const newItem of newItems) {\n cacheMap.set(newItem.id, newItem) // Overwrite if exists, add if not\n }\n // Update currentCache in-place\n currentCache.length = 0\n currentCache.push(...cacheMap.values())\n },\n // Provide tags for potential invalidation\n providesTags: (result, error, arg) =>\n result\n ? [\n ...result.flatMap((entity) =>\n entity.links\n .filter((link) => link.node !== null)\n .map((link) => ({ type: 'link', id: link.node!.id })),\n ),\n { type: 'link', id: `${arg.projectName}-${arg.entityType}` },\n ]\n : [{ type: 'link', id: `${arg.projectName}-${arg.entityType}` }],\n // Subscribe to link.created and link.deleted WebSocket events\n async onCacheEntryAdded(\n { projectName, entityIds, entityType },\n { cacheDataLoaded, cacheEntryRemoved, updateCachedData, dispatch },\n ) {\n let token: any\n const pendingEntityIds = new Set<string>()\n const MAX_BATCH = 100\n const INTERVAL = 500\n let scheduled = false\n\n const schedule = () => {\n if (scheduled) return\n scheduled = true\n setTimeout(flush, INTERVAL)\n }\n\n const flush = async () => {\n scheduled = false\n if (!pendingEntityIds.size) return\n const batchIds = Array.from(pendingEntityIds).slice(0, MAX_BATCH)\n batchIds.forEach((id) => pendingEntityIds.delete(id))\n\n try {\n // Get the appropriate endpoint and parameter names\n const endpoint = entityEndpoints[entityType]\n const resultPath = entityResultPaths[entityType]\n\n // Fetch fresh data for the affected entities\n const result = await dispatch(\n (gqlLinksApi.endpoints as any)[endpoint].initiate(\n { projectName, entityIds: batchIds },\n { forceRefetch: true },\n ),\n ).unwrap()\n\n const updatedEntities =\n result.project?.[resultPath]?.edges?.map(({ node }: { node: any }) => {\n\n return {\n id: node.id,\n links:\n node.links.edges\n ?.map((linkEdge: EntityLinkQuery | null) => {\n if (!linkEdge?.node) {\n // Restricted link - node is null\n return {\n ...linkEdge,\n node: null,\n isRestricted: true,\n } as EntityLink\n }\n // Normal link\n return {\n ...linkEdge,\n node: {\n id: linkEdge.node.id,\n name: linkEdge.node.name,\n label: formatEntityLabel(linkEdge.node),\n parents: linkEdge.node.parents || [],\n subType: 'subType' in linkEdge.node ? linkEdge.node.subType : undefined,\n },\n isRestricted: false,\n } as EntityLink\n }) || [],\n }\n }) || []\n\n updateCachedData((draft: EntityWithLinks[]) => {\n for (const updatedEntity of updatedEntities) {\n const idx = draft.findIndex((entity) => entity.id === updatedEntity.id)\n if (idx > -1) {\n // Update existing entity's links\n draft[idx] = updatedEntity\n } else {\n // Add new entity if not in cache\n draft.push(updatedEntity)\n }\n }\n })\n } catch (err) {\n console.error('Realtime link batch update failed', err)\n } finally {\n if (pendingEntityIds.size) schedule()\n }\n }\n\n try {\n await cacheDataLoaded\n\n const handlePubSub = async (_topic: string, message: any) => {\n // Only react to link.created and link.deleted events for this project\n if (!_topic.startsWith('link.created') && !_topic.startsWith('link.deleted')) return\n if (message?.project !== projectName) return\n\n // Link events have inputId and outputId in the summary (both entities affected by the link)\n const inputId = message?.summary?.inputId\n const outputId = message?.summary?.outputId\n if (!inputId && !outputId) return\n\n // Add both entities to pending list since both are affected by the link change\n if (inputId) pendingEntityIds.add(inputId)\n if (outputId) pendingEntityIds.add(outputId)\n schedule()\n }\n\n // Subscribe to link events\n // NOTE: backend emits topics like 'link.created' and 'link.deleted'.\n // PubSub supports prefix matching when subscribing.\n token = PubSub.subscribe('link', handlePubSub)\n } catch (e) {\n // cache entry removed before loaded - ignore\n }\n\n await cacheEntryRemoved\n if (token) PubSub.unsubscribe(token)\n },\n }),\n }),\n})\n\nexport const { useGetEntityLinksQuery } = injectedQueries\nexport { injectedQueries as entityLinksApi }\n"],"names":["entityEndpoints","entityResultPaths","injectedQueries","foldersApi","build","projectName","entityIds","entityType","getState","dispatch","queryCacheKey","forced","state","cacheKey","cacheEntry","_b","_a","cachedData","cachedEntityIds","entity","entityIdsToFetch","id","endpoint","resultPath","_e","_d","_c","gqlLinksApi","node","restrictedLinks","link","linkEdge","formatEntityLabel","error","toast","queryArgs","currentArg","previousArg","currentIds","previousIds","currentCache","newItems","cacheMap","item","newItem","result","arg","cacheDataLoaded","cacheEntryRemoved","updateCachedData","token","pendingEntityIds","MAX_BATCH","INTERVAL","scheduled","schedule","flush","batchIds","updatedEntities","draft","updatedEntity","idx","err","handlePubSub","_topic","message","inputId","outputId","PubSub","useGetEntityLinksQuery"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import "../../base/client.es.js";
2
2
  import "../../generated/graphql.es.js";
3
- import { api as v } from "../../generated/graphqlLinks.es.js";
3
+ import { api as A } from "../../generated/graphqlLinks.es.js";
4
4
  import "../../generated/access.es.js";
5
5
  import "../../generated/actions.es.js";
6
6
  import "../../generated/activityFeed.es.js";
@@ -14,7 +14,7 @@ import "../../generated/desktop.es.js";
14
14
  import "../../generated/entityLists.es.js";
15
15
  import "../../generated/events.es.js";
16
16
  import "../../generated/files.es.js";
17
- import { api as E } from "../../generated/folders.es.js";
17
+ import { api as M } from "../../generated/folders.es.js";
18
18
  import "../../generated/inbox.es.js";
19
19
  import "../../generated/links.es.js";
20
20
  import "../../generated/market.es.js";
@@ -36,151 +36,171 @@ import "../../generated/workfiles.es.js";
36
36
  import "../../generated/ynputCloud.es.js";
37
37
  import "../../generated/grouping.es.js";
38
38
  import "../../generated/views.es.js";
39
- import { formatEntityLabel as A } from "./utils/formatEntityLinks.es.js";
40
- import { toast as F } from "react-toastify";
39
+ import { formatEntityLabel as G } from "./utils/formatEntityLinks.es.js";
40
+ import { toast as q } from "react-toastify";
41
41
  import "lodash";
42
42
  import "uuid";
43
- import G from "../../../util/pubsub.es.js";
44
- const S = {
43
+ import N from "../../../util/pubsub.es.js";
44
+ const P = {
45
45
  folder: "GetFoldersLinks",
46
46
  task: "GetTasksLinks",
47
47
  product: "GetProductsLinks",
48
48
  version: "GetVersionsLinks",
49
49
  representation: "GetRepresentationsLinks",
50
50
  workfile: "GetWorkfilesLinks"
51
- }, P = {
51
+ }, z = {
52
52
  folder: "folders",
53
53
  task: "tasks",
54
54
  product: "products",
55
55
  version: "versions",
56
56
  representation: "representations",
57
57
  workfile: "workfiles"
58
- }, M = E.injectEndpoints({
59
- endpoints: (z) => ({
60
- getEntityLinks: z.query({
61
- queryFn: async ({ projectName: e, entityIds: p, entityType: i }, { getState: o, dispatch: l, queryCacheKey: R, forced: T }) => {
62
- var h, d, w, I, k;
58
+ }, x = M.injectEndpoints({
59
+ endpoints: (F) => ({
60
+ getEntityLinks: F.query({
61
+ queryFn: async ({ projectName: e, entityIds: a, entityType: r }, { getState: s, dispatch: c, queryCacheKey: $, forced: j }) => {
62
+ var h, u, R, T, b;
63
63
  try {
64
- const y = o(), j = JSON.stringify({ projectName: e, entityType: i }), a = (d = (h = y.restApi) == null ? void 0 : h.queries) == null ? void 0 : d[R || `getEntityLinks(${j})`], m = (a == null ? void 0 : a.data) || [], r = new Set(m.map((n) => n.id)), c = p.filter((n) => !(r != null && r.has(n)) || T);
65
- if (c.length === 0)
66
- return { data: m };
67
- const s = S[i], b = P[i];
68
- return { data: ((k = (I = (w = (await l(
69
- v.endpoints[s].initiate(
70
- { projectName: e, entityIds: c },
64
+ const l = s(), S = JSON.stringify({ projectName: e, entityType: r }), f = (u = (h = l.restApi) == null ? void 0 : h.queries) == null ? void 0 : u[$ || `getEntityLinks(${S})`], y = (f == null ? void 0 : f.data) || [], i = new Set(y.map((n) => n.id)), m = a.filter((n) => !(i != null && i.has(n)) || j);
65
+ if (m.length === 0)
66
+ return { data: y };
67
+ const p = P[r], I = z[r];
68
+ return { data: ((b = (T = (R = (await c(
69
+ A.endpoints[p].initiate(
70
+ { projectName: e, entityIds: m },
71
71
  { forceRefetch: !0 }
72
72
  )
73
- ).unwrap()).project) == null ? void 0 : w[b]) == null ? void 0 : I.edges) == null ? void 0 : k.map(({ node: n }) => {
74
- var u, f;
75
- return {
73
+ ).unwrap()).project) == null ? void 0 : R[I]) == null ? void 0 : T.edges) == null ? void 0 : b.map(({ node: n }) => {
74
+ var o, L;
75
+ const d = ((o = n.links.edges) == null ? void 0 : o.filter((t) => !(t != null && t.node))) || [];
76
+ return d.length > 0 && console.log(
77
+ `[RESTRICTED LINKS] Entity ${n.id} (${n.name}) has ${d.length} restricted link(s):`,
78
+ d.map((t) => ({
79
+ linkId: t == null ? void 0 : t.id,
80
+ linkType: t == null ? void 0 : t.linkType,
81
+ direction: t == null ? void 0 : t.direction,
82
+ entityType: t == null ? void 0 : t.entityType,
83
+ nodeIsNull: !(t != null && t.node)
84
+ }))
85
+ ), {
76
86
  id: n.id,
77
- links: ((f = (u = n.links.edges) == null ? void 0 : u.filter((t) => !!(t != null && t.node))) == null ? void 0 : f.map((t) => ({
87
+ links: ((L = n.links.edges) == null ? void 0 : L.map((t) => t != null && t.node ? {
78
88
  ...t,
79
89
  node: {
80
90
  id: t.node.id,
81
91
  name: t.node.name,
82
- label: A(t.node),
92
+ label: G(t.node),
83
93
  parents: t.node.parents || [],
84
94
  subType: "subType" in t.node ? t.node.subType : void 0
85
- }
86
- }))) || []
95
+ },
96
+ isRestricted: !1
97
+ } : {
98
+ ...t,
99
+ node: null,
100
+ isRestricted: !0
101
+ })) || []
87
102
  // Flatten the edges structure
88
103
  };
89
104
  })) || [] };
90
- } catch (y) {
91
- return console.error(`Error in getEntityLinks queryFn for ${i}:`, y), F.error(`Error fetching ${i} links`), { error: { status: "FETCH_ERROR", error: y.message } };
105
+ } catch (l) {
106
+ return console.error(`Error in getEntityLinks queryFn for ${r}:`, l), q.error(`Error fetching ${r} links`), { error: { status: "FETCH_ERROR", error: l.message } };
92
107
  }
93
108
  },
94
109
  // 2. We should not create new caches when the entityIds argument changes.
95
110
  serializeQueryArgs: ({ queryArgs: e }) => ({ projectName: e.projectName, entityType: e.entityType }),
96
111
  // 3. We should force a refetch every time the entityIds changes.
97
- forceRefetch: ({ currentArg: e, previousArg: p }) => {
98
- if (!e || !p) return !0;
99
- const i = new Set(e.entityIds), o = new Set(p.entityIds);
100
- if (i.size !== o.size) return !0;
101
- for (const l of i)
102
- if (!o.has(l)) return !0;
112
+ forceRefetch: ({ currentArg: e, previousArg: a }) => {
113
+ if (!e || !a) return !0;
114
+ const r = new Set(e.entityIds), s = new Set(a.entityIds);
115
+ if (r.size !== s.size) return !0;
116
+ for (const c of r)
117
+ if (!s.has(c)) return !0;
103
118
  return !1;
104
119
  },
105
120
  // 4. We should merge new entities into the cache ensuring there are no duplicates.
106
- merge: (e, p) => {
107
- if (!e) return p;
108
- const i = new Map(e.map((o) => [o.id, o]));
109
- for (const o of p)
110
- i.set(o.id, o);
111
- e.length = 0, e.push(...i.values());
121
+ merge: (e, a) => {
122
+ if (!e) return a;
123
+ const r = new Map(e.map((s) => [s.id, s]));
124
+ for (const s of a)
125
+ r.set(s.id, s);
126
+ e.length = 0, e.push(...r.values());
112
127
  },
113
128
  // Provide tags for potential invalidation
114
- providesTags: (e, p, i) => e ? [
129
+ providesTags: (e, a, r) => e ? [
115
130
  ...e.flatMap(
116
- (o) => o.links.map((l) => ({ type: "link", id: l.node.id }))
131
+ (s) => s.links.filter((c) => c.node !== null).map((c) => ({ type: "link", id: c.node.id }))
117
132
  ),
118
- { type: "link", id: `${i.projectName}-${i.entityType}` }
119
- ] : [{ type: "link", id: `${i.projectName}-${i.entityType}` }],
133
+ { type: "link", id: `${r.projectName}-${r.entityType}` }
134
+ ] : [{ type: "link", id: `${r.projectName}-${r.entityType}` }],
120
135
  // Subscribe to link.created and link.deleted WebSocket events
121
- async onCacheEntryAdded({ projectName: e, entityIds: p, entityType: i }, { cacheDataLoaded: o, cacheEntryRemoved: l, updateCachedData: R, dispatch: T }) {
136
+ async onCacheEntryAdded({ projectName: e, entityIds: a, entityType: r }, { cacheDataLoaded: s, cacheEntryRemoved: c, updateCachedData: $, dispatch: j }) {
122
137
  let h;
123
- const d = /* @__PURE__ */ new Set(), w = 100, I = 500;
124
- let k = !1;
125
- const y = () => {
126
- k || (k = !0, setTimeout(j, I));
127
- }, j = async () => {
128
- var m, r, c;
129
- if (k = !1, !d.size) return;
130
- const a = Array.from(d).slice(0, w);
131
- a.forEach((s) => d.delete(s));
138
+ const u = /* @__PURE__ */ new Set(), R = 100, T = 500;
139
+ let b = !1;
140
+ const l = () => {
141
+ b || (b = !0, setTimeout(S, T));
142
+ }, S = async () => {
143
+ var y, i, m;
144
+ if (b = !1, !u.size) return;
145
+ const f = Array.from(u).slice(0, R);
146
+ f.forEach((p) => u.delete(p));
132
147
  try {
133
- const s = S[i], b = P[i], $ = ((c = (r = (m = (await T(
134
- v.endpoints[s].initiate(
135
- { projectName: e, entityIds: a },
148
+ const p = P[r], I = z[r], v = ((m = (i = (y = (await j(
149
+ A.endpoints[p].initiate(
150
+ { projectName: e, entityIds: f },
136
151
  { forceRefetch: !0 }
137
152
  )
138
- ).unwrap()).project) == null ? void 0 : m[b]) == null ? void 0 : r.edges) == null ? void 0 : c.map(({ node: n }) => {
139
- var u, f;
153
+ ).unwrap()).project) == null ? void 0 : y[I]) == null ? void 0 : i.edges) == null ? void 0 : m.map(({ node: n }) => {
154
+ var d;
140
155
  return {
141
156
  id: n.id,
142
- links: ((f = (u = n.links.edges) == null ? void 0 : u.filter((t) => !!(t != null && t.node))) == null ? void 0 : f.map((t) => ({
143
- ...t,
157
+ links: ((d = n.links.edges) == null ? void 0 : d.map((o) => o != null && o.node ? {
158
+ ...o,
144
159
  node: {
145
- id: t.node.id,
146
- name: t.node.name,
147
- label: A(t.node),
148
- parents: t.node.parents || [],
149
- subType: "subType" in t.node ? t.node.subType : void 0
150
- }
151
- }))) || []
160
+ id: o.node.id,
161
+ name: o.node.name,
162
+ label: G(o.node),
163
+ parents: o.node.parents || [],
164
+ subType: "subType" in o.node ? o.node.subType : void 0
165
+ },
166
+ isRestricted: !1
167
+ } : {
168
+ ...o,
169
+ node: null,
170
+ isRestricted: !0
171
+ })) || []
152
172
  };
153
173
  })) || [];
154
- R((n) => {
155
- for (const u of $) {
156
- const f = n.findIndex((t) => t.id === u.id);
157
- f > -1 ? n[f] = u : n.push(u);
174
+ $((n) => {
175
+ for (const d of v) {
176
+ const o = n.findIndex((L) => L.id === d.id);
177
+ o > -1 ? n[o] = d : n.push(d);
158
178
  }
159
179
  });
160
- } catch (s) {
161
- console.error("Realtime link batch update failed", s);
180
+ } catch (p) {
181
+ console.error("Realtime link batch update failed", p);
162
182
  } finally {
163
- d.size && y();
183
+ u.size && l();
164
184
  }
165
185
  };
166
186
  try {
167
- await o;
168
- const a = async (m, r) => {
169
- var b, L;
170
- if (!m.startsWith("link.created") && !m.startsWith("link.deleted") || (r == null ? void 0 : r.project) !== e) return;
171
- const c = (b = r == null ? void 0 : r.summary) == null ? void 0 : b.inputId, s = (L = r == null ? void 0 : r.summary) == null ? void 0 : L.outputId;
172
- !c && !s || (c && d.add(c), s && d.add(s), y());
187
+ await s;
188
+ const f = async (y, i) => {
189
+ var I, w;
190
+ if (!y.startsWith("link.created") && !y.startsWith("link.deleted") || (i == null ? void 0 : i.project) !== e) return;
191
+ const m = (I = i == null ? void 0 : i.summary) == null ? void 0 : I.inputId, p = (w = i == null ? void 0 : i.summary) == null ? void 0 : w.outputId;
192
+ !m && !p || (m && u.add(m), p && u.add(p), l());
173
193
  };
174
- h = G.subscribe("link", a);
194
+ h = N.subscribe("link", f);
175
195
  } catch {
176
196
  }
177
- await l, h && G.unsubscribe(h);
197
+ await c, h && N.unsubscribe(h);
178
198
  }
179
199
  })
180
200
  })
181
- }), { useGetEntityLinksQuery: jt } = M;
201
+ }), { useGetEntityLinksQuery: St } = x;
182
202
  export {
183
- M as entityLinksApi,
184
- jt as useGetEntityLinksQuery
203
+ x as entityLinksApi,
204
+ St as useGetEntityLinksQuery
185
205
  };
186
206
  //# sourceMappingURL=getEntityLinks.es.js.map