@ynput/ayon-frontend-shared 0.2.37 → 0.2.38

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 (529) hide show
  1. package/dist/DetailsPanel.cjs.js +1 -1
  2. package/dist/DetailsPanel.es.js +67 -66
  3. package/dist/DetailsPanel.es.js.map +1 -1
  4. package/dist/ProjectTreeTable.cjs.js +1 -1
  5. package/dist/ProjectTreeTable.es.js +182 -167
  6. package/dist/ProjectTreeTable.es.js.map +1 -1
  7. package/dist/Views.cjs.js.map +1 -1
  8. package/dist/Views.es.js.map +1 -1
  9. package/dist/_virtual/index.cjs10.js +1 -1
  10. package/dist/_virtual/index.cjs11.js +1 -1
  11. package/dist/_virtual/index.cjs12.js +1 -1
  12. package/dist/_virtual/index.es10.js +3 -3
  13. package/dist/_virtual/index.es11.js +5 -5
  14. package/dist/_virtual/index.es12.js +5 -5
  15. package/dist/api.cjs.js +1 -1
  16. package/dist/api.es.js +107 -106
  17. package/dist/components.cjs.js +1 -1
  18. package/dist/components.es.js +135 -133
  19. package/dist/components.es.js.map +1 -1
  20. package/dist/context.cjs.js +1 -1
  21. package/dist/context.es.js +15 -12
  22. package/dist/context.es.js.map +1 -1
  23. package/dist/index.cjs.js +1 -1
  24. package/dist/index.es.js +56 -55
  25. package/dist/index.es.js.map +1 -1
  26. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
  27. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  28. package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
  29. package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
  30. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  31. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  32. package/dist/shared/src/api/generated/views.cjs.js.map +1 -1
  33. package/dist/shared/src/api/generated/views.es.js.map +1 -1
  34. package/dist/shared/src/api/queries/project/getProject.cjs.js +1 -1
  35. package/dist/shared/src/api/queries/project/getProject.cjs.js.map +1 -1
  36. package/dist/shared/src/api/queries/project/getProject.es.js +7 -1
  37. package/dist/shared/src/api/queries/project/getProject.es.js.map +1 -1
  38. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js +1 -1
  39. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js.map +1 -1
  40. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js +73 -67
  41. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js.map +1 -1
  42. package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js +1 -1
  43. package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js.map +1 -1
  44. package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js +131 -114
  45. package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js.map +1 -1
  46. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +1 -1
  47. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
  48. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +3 -2
  49. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
  50. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js +1 -1
  51. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js.map +1 -1
  52. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js +3 -2
  53. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js.map +1 -1
  54. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js +2 -2
  55. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js.map +1 -1
  56. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js +61 -50
  57. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js.map +1 -1
  58. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js +1 -1
  59. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js.map +1 -1
  60. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js +3 -2
  61. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js.map +1 -1
  62. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
  63. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
  64. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +70 -69
  65. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
  66. package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js +1 -1
  67. package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js.map +1 -1
  68. package/dist/shared/src/components/EntityPath/SegmentProvider.es.js +3 -2
  69. package/dist/shared/src/components/EntityPath/SegmentProvider.es.js.map +1 -1
  70. package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js +1 -1
  71. package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js.map +1 -1
  72. package/dist/shared/src/components/Feedback/FeedbackContext.es.js +5 -4
  73. package/dist/shared/src/components/Feedback/FeedbackContext.es.js.map +1 -1
  74. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js +1 -1
  75. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js.map +1 -1
  76. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js +106 -106
  77. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js.map +1 -1
  78. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
  79. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
  80. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +53 -52
  81. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
  82. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js +1 -1
  83. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js.map +1 -1
  84. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js +58 -46
  85. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js.map +1 -1
  86. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js +1 -1
  87. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js.map +1 -1
  88. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js +5 -4
  89. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js.map +1 -1
  90. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +1 -1
  91. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
  92. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +44 -43
  93. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
  94. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +2 -2
  95. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  96. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +81 -80
  97. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  98. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +1 -1
  99. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
  100. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +43 -42
  101. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
  102. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js +2 -0
  103. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +1 -0
  104. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js +263 -0
  105. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -0
  106. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +2 -2
  107. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
  108. package/dist/shared/src/components/RenameForm/RenameForm.es.js +65 -64
  109. package/dist/shared/src/components/RenameForm/RenameForm.es.js.map +1 -1
  110. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +1 -1
  111. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  112. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +139 -142
  113. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  114. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +1 -1
  115. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  116. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +49 -48
  117. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  118. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +1 -1
  119. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  120. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +48 -47
  121. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  122. package/dist/shared/src/components/ReviewablesList/getGroupedReviewables.cjs.js +1 -1
  123. package/dist/shared/src/components/ReviewablesList/getGroupedReviewables.cjs.js.map +1 -1
  124. package/dist/shared/src/components/ReviewablesList/getGroupedReviewables.es.js +19 -27
  125. package/dist/shared/src/components/ReviewablesList/getGroupedReviewables.es.js.map +1 -1
  126. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +1 -1
  127. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
  128. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +221 -211
  129. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
  130. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js +1 -1
  131. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js.map +1 -1
  132. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js +23 -22
  133. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js.map +1 -1
  134. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +1 -1
  135. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  136. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +47 -46
  137. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  138. package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js +1 -1
  139. package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js.map +1 -1
  140. package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js +8 -7
  141. package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js.map +1 -1
  142. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +6 -6
  143. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
  144. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +108 -112
  145. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
  146. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +1 -1
  147. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -1
  148. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +22 -23
  149. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
  150. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
  151. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  152. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +48 -47
  153. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  154. package/dist/shared/src/containers/Actions/Actions.cjs.js +1 -1
  155. package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
  156. package/dist/shared/src/containers/Actions/Actions.es.js +3 -2
  157. package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
  158. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
  159. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  160. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +49 -48
  161. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  162. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  163. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  164. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +164 -166
  165. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  166. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
  167. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  168. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +57 -56
  169. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  170. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
  171. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  172. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +103 -97
  173. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  174. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
  175. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  176. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +87 -86
  177. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  178. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +1 -1
  179. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
  180. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +3 -2
  181. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
  182. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.cjs.js +1 -1
  183. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.cjs.js.map +1 -1
  184. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.es.js +18 -17
  185. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.es.js.map +1 -1
  186. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.cjs.js +1 -1
  187. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.cjs.js.map +1 -1
  188. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.es.js +3 -2
  189. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.es.js.map +1 -1
  190. package/dist/shared/src/containers/DetailsPanel/helpers/mergeProjectInfo.cjs.js +1 -1
  191. package/dist/shared/src/containers/DetailsPanel/helpers/mergeProjectInfo.cjs.js.map +1 -1
  192. package/dist/shared/src/containers/DetailsPanel/helpers/mergeProjectInfo.es.js +25 -22
  193. package/dist/shared/src/containers/DetailsPanel/helpers/mergeProjectInfo.es.js.map +1 -1
  194. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +1 -1
  195. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
  196. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +3 -2
  197. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
  198. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
  199. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
  200. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +44 -43
  201. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js.map +1 -1
  202. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
  203. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
  204. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +48 -47
  205. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
  206. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
  207. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
  208. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +48 -47
  209. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
  210. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
  211. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
  212. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +48 -47
  213. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
  214. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js +1 -1
  215. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js.map +1 -1
  216. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js +44 -46
  217. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js.map +1 -1
  218. package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -1
  219. package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
  220. package/dist/shared/src/containers/Feed/Feed.es.js +4 -3
  221. package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
  222. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
  223. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
  224. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +3 -2
  225. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
  226. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js +1 -1
  227. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js.map +1 -1
  228. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js +3 -2
  229. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js.map +1 -1
  230. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +2 -2
  231. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js.map +1 -1
  232. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js +110 -109
  233. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
  234. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js +1 -1
  235. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js.map +1 -1
  236. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js +3 -2
  237. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js.map +1 -1
  238. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js +1 -1
  239. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js.map +1 -1
  240. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js +3 -2
  241. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js.map +1 -1
  242. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +1 -1
  243. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
  244. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +12 -11
  245. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js.map +1 -1
  246. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -1
  247. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
  248. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +43 -43
  249. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
  250. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +1 -1
  251. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  252. package/dist/shared/src/containers/Feed/context/FeedContext.es.js +6 -5
  253. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  254. package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.cjs.js +1 -1
  255. package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.cjs.js.map +1 -1
  256. package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.es.js +11 -9
  257. package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.es.js.map +1 -1
  258. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
  259. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  260. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +333 -333
  261. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  262. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  263. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  264. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +52 -51
  265. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  266. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js +1 -1
  267. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js.map +1 -1
  268. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js +42 -41
  269. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js.map +1 -1
  270. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
  271. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  272. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +52 -51
  273. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  274. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
  275. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
  276. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +50 -49
  277. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
  278. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +3 -3
  279. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
  280. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +235 -214
  281. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
  282. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +1 -1
  283. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
  284. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +45 -40
  285. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
  286. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
  287. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
  288. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js +1 -1
  289. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js.map +1 -1
  290. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js +160 -156
  291. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js.map +1 -1
  292. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +1 -1
  293. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
  294. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +59 -58
  295. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
  296. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +1 -1
  297. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
  298. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +10 -9
  299. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
  300. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
  301. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  302. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +65 -66
  303. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  304. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  305. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  306. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +111 -112
  307. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  308. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
  309. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  310. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +57 -57
  311. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  312. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
  313. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
  314. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +50 -49
  315. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
  316. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js +1 -1
  317. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js.map +1 -1
  318. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js +59 -53
  319. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js.map +1 -1
  320. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +1 -1
  321. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
  322. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +3 -2
  323. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
  324. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js +1 -1
  325. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js.map +1 -1
  326. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js +15 -20
  327. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js.map +1 -1
  328. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +1 -1
  329. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
  330. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +49 -48
  331. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
  332. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js +1 -1
  333. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js.map +1 -1
  334. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js +46 -45
  335. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js.map +1 -1
  336. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
  337. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
  338. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +50 -49
  339. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
  340. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
  341. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
  342. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +51 -50
  343. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js.map +1 -1
  344. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
  345. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
  346. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +66 -65
  347. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
  348. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePrefetchFolderTasks.cjs.js +1 -1
  349. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePrefetchFolderTasks.cjs.js.map +1 -1
  350. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePrefetchFolderTasks.es.js +4 -4
  351. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePrefetchFolderTasks.es.js.map +1 -1
  352. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
  353. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
  354. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +55 -54
  355. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
  356. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js +1 -1
  357. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -1
  358. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js +130 -116
  359. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js.map +1 -1
  360. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
  361. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  362. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +57 -56
  363. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  364. package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.cjs.js +1 -1
  365. package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.cjs.js.map +1 -1
  366. package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.es.js +26 -34
  367. package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.es.js.map +1 -1
  368. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +2 -2
  369. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  370. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +108 -220
  371. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  372. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
  373. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
  374. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +63 -62
  375. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
  376. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js +1 -1
  377. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js.map +1 -1
  378. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js +46 -45
  379. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js.map +1 -1
  380. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.cjs.js +3 -3
  381. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.cjs.js.map +1 -1
  382. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.es.js +58 -62
  383. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.es.js.map +1 -1
  384. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
  385. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  386. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +114 -113
  387. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  388. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
  389. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
  390. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +48 -47
  391. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
  392. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js +1 -1
  393. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js.map +1 -1
  394. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js +3 -2
  395. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js.map +1 -1
  396. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js +2 -2
  397. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js.map +1 -1
  398. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js +3 -2
  399. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js.map +1 -1
  400. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
  401. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
  402. package/dist/shared/src/containers/Views/context/ViewsContext.es.js +92 -87
  403. package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
  404. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js +1 -1
  405. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js.map +1 -1
  406. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js +3 -2
  407. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js.map +1 -1
  408. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js +1 -1
  409. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js.map +1 -1
  410. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js +3 -2
  411. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js.map +1 -1
  412. package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
  413. package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
  414. package/dist/shared/src/context/DetailsPanelContext.cjs.js +1 -1
  415. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  416. package/dist/shared/src/context/DetailsPanelContext.es.js +5 -4
  417. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  418. package/dist/shared/src/context/PowerpackContext.cjs.js +1 -1
  419. package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
  420. package/dist/shared/src/context/PowerpackContext.es.js +7 -6
  421. package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
  422. package/dist/shared/src/context/ProjectContext.cjs.js +2 -0
  423. package/dist/shared/src/context/ProjectContext.cjs.js.map +1 -0
  424. package/dist/shared/src/context/ProjectContext.es.js +182 -0
  425. package/dist/shared/src/context/ProjectContext.es.js.map +1 -0
  426. package/dist/shared/src/context/WebsocketContext.cjs.js +1 -1
  427. package/dist/shared/src/context/WebsocketContext.cjs.js.map +1 -1
  428. package/dist/shared/src/context/WebsocketContext.es.js +47 -46
  429. package/dist/shared/src/context/WebsocketContext.es.js.map +1 -1
  430. package/dist/shared/src/hooks/useEntityUpdate.cjs.js +1 -1
  431. package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
  432. package/dist/shared/src/hooks/useEntityUpdate.es.js +3 -2
  433. package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
  434. package/dist/shared/src/hooks/useGetEntityGroups.cjs.js +1 -1
  435. package/dist/shared/src/hooks/useGetEntityGroups.cjs.js.map +1 -1
  436. package/dist/shared/src/hooks/useGetEntityGroups.es.js +6 -5
  437. package/dist/shared/src/hooks/useGetEntityGroups.es.js.map +1 -1
  438. package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js +1 -1
  439. package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js.map +1 -1
  440. package/dist/shared/src/hooks/useGroupByRemoteModules.es.js +3 -2
  441. package/dist/shared/src/hooks/useGroupByRemoteModules.es.js.map +1 -1
  442. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +1 -1
  443. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
  444. package/dist/shared/src/hooks/useUserProjectConfig.es.js +3 -2
  445. package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
  446. package/dist/shared/src/util/versionUploadHelpers.cjs.js +1 -1
  447. package/dist/shared/src/util/versionUploadHelpers.cjs.js.map +1 -1
  448. package/dist/shared/src/util/versionUploadHelpers.es.js +24 -34
  449. package/dist/shared/src/util/versionUploadHelpers.es.js.map +1 -1
  450. package/dist/src/components/Menu/MenuComponents/Menu.cjs.js +1 -1
  451. package/dist/src/components/Menu/MenuComponents/Menu.cjs.js.map +1 -1
  452. package/dist/src/components/Menu/MenuComponents/Menu.es.js +3 -2
  453. package/dist/src/components/Menu/MenuComponents/Menu.es.js.map +1 -1
  454. package/dist/src/components/Menu/MenuComponents/MenuItem.cjs.js +1 -1
  455. package/dist/src/components/Menu/MenuComponents/MenuItem.cjs.js.map +1 -1
  456. package/dist/src/components/Menu/MenuComponents/MenuItem.es.js +6 -5
  457. package/dist/src/components/Menu/MenuComponents/MenuItem.es.js.map +1 -1
  458. package/dist/src/components/Menu/MenuComponents/MenuList.cjs.js +1 -1
  459. package/dist/src/components/Menu/MenuComponents/MenuList.cjs.js.map +1 -1
  460. package/dist/src/components/Menu/MenuComponents/MenuList.es.js +3 -2
  461. package/dist/src/components/Menu/MenuComponents/MenuList.es.js.map +1 -1
  462. package/dist/types/api/generated/views.d.ts +13 -21
  463. package/dist/types/api/queries/actions/getActions.d.ts +6 -6
  464. package/dist/types/api/queries/activities/getActivities.d.ts +8 -8
  465. package/dist/types/api/queries/activities/getCategories.d.ts +2 -2
  466. package/dist/types/api/queries/activities/getMentions.d.ts +2 -2
  467. package/dist/types/api/queries/addons/getAddons.d.ts +8 -8
  468. package/dist/types/api/queries/attributes/getAttributes.d.ts +4 -4
  469. package/dist/types/api/queries/authentication/getAuthentication.d.ts +2 -2
  470. package/dist/types/api/queries/cloud/cloud.d.ts +4 -4
  471. package/dist/types/api/queries/entities/getEntity.d.ts +10 -10
  472. package/dist/types/api/queries/entities/getEntityPanel.d.ts +4 -4
  473. package/dist/types/api/queries/entityLists/getLists.d.ts +188 -188
  474. package/dist/types/api/queries/entityLists/getListsAttributes.d.ts +2 -2
  475. package/dist/types/api/queries/entityLists/listFolders.d.ts +2 -2
  476. package/dist/types/api/queries/folders/getFolders.d.ts +4 -4
  477. package/dist/types/api/queries/grouping/getGrouping.d.ts +2 -2
  478. package/dist/types/api/queries/links/getEntityLinks.d.ts +2 -2
  479. package/dist/types/api/queries/overview/getOverview.d.ts +10 -10
  480. package/dist/types/api/queries/permissions/getPermissions.d.ts +4 -4
  481. package/dist/types/api/queries/project/getProject.d.ts +190 -6
  482. package/dist/types/api/queries/review/getReview.d.ts +6 -6
  483. package/dist/types/api/queries/share/share.d.ts +2 -2
  484. package/dist/types/api/queries/system/getSystem.d.ts +6 -6
  485. package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +11 -8
  486. package/dist/types/api/queries/users/getUsers.d.ts +20 -20
  487. package/dist/types/api/queries/users/guests.d.ts +2 -2
  488. package/dist/types/api/queries/versions/getVersionsProducts.d.ts +9 -6
  489. package/dist/types/api/queries/versions/getVersionsProductsUtils.d.ts +5 -5
  490. package/dist/types/api/queries/versions/updateVersions.d.ts +2 -2
  491. package/dist/types/api/queries/views/getViews.d.ts +8 -8
  492. package/dist/types/api/queries/watchers/getWatchers.d.ts +2 -2
  493. package/dist/types/components/DetailsPanelDetails/hooks/index.d.ts +0 -1
  494. package/dist/types/components/RemotePage/RemotePageWrapper.d.ts +29 -0
  495. package/dist/types/components/RemotePage/index.d.ts +1 -0
  496. package/dist/types/components/ReviewablesList/getGroupedReviewables.d.ts +1 -2
  497. package/dist/types/components/SearchFilter/useBuildFilterOptions.d.ts +1 -0
  498. package/dist/types/components/index.d.ts +31 -30
  499. package/dist/types/containers/DetailsPanel/DetailsPanel.d.ts +3 -2
  500. package/dist/types/containers/DetailsPanel/helpers/mergeProjectInfo.d.ts +4 -2
  501. package/dist/types/containers/Feed/mentionHelpers/getMentionVersions.d.ts +2 -1
  502. package/dist/types/containers/ProjectTreeTable/context/ProjectDataContext.d.ts +0 -5
  503. package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +0 -4
  504. package/dist/types/containers/ProjectTreeTable/context/ProjectTableProvider.d.ts +1 -7
  505. package/dist/types/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.d.ts +2 -3
  506. package/dist/types/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.d.ts +1 -3
  507. package/dist/types/containers/ProjectTreeTable/hooks/useGetEntityTypeData.d.ts +5 -3
  508. package/dist/types/containers/ProjectTreeTable/utils/getTableFieldOptions.d.ts +3 -2
  509. package/dist/types/containers/Views/index.d.ts +1 -1
  510. package/dist/types/context/AddonProjectContext.d.ts +9 -14
  511. package/dist/types/context/ProjectContext.d.ts +33 -0
  512. package/dist/types/context/index.d.ts +1 -0
  513. package/dist/types/hooks/useGroupByRemoteModules.d.ts +2 -1
  514. package/dist/types/util/index.d.ts +0 -2
  515. package/dist/types/util/versionUploadHelpers.d.ts +0 -1
  516. package/dist/util.cjs.js +1 -1
  517. package/dist/util.es.js +55 -58
  518. package/dist/util.es.js.map +1 -1
  519. package/package.json +1 -1
  520. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityData.cjs.js +0 -2
  521. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityData.cjs.js.map +0 -1
  522. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityData.es.js +0 -113
  523. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityData.es.js.map +0 -1
  524. package/dist/shared/src/util/productTypes.cjs.js +0 -2
  525. package/dist/shared/src/util/productTypes.cjs.js.map +0 -1
  526. package/dist/shared/src/util/productTypes.es.js +0 -25
  527. package/dist/shared/src/util/productTypes.es.js.map +0 -1
  528. package/dist/types/components/DetailsPanelDetails/hooks/useEntityData.d.ts +0 -12
  529. package/dist/types/util/productTypes.d.ts +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"getUserDashboard.cjs.js","sources":["../../../../../../src/api/queries/userDashboard/getUserDashboard.ts"],"sourcesContent":["import {\n gqlApi,\n GetKanbanProjectUsersQuery,\n GetKanbanQuery,\n ProjectModel,\n KanbanNode,\n} from '@shared/api/generated'\nimport { projectQueries } from '@shared/api/queries/project'\nimport { PubSub } from '@shared/util'\nimport convertAccessGroupsData, { AccessGroups } from './convertAccessGroupsData'\n\n// GetKanban response type\nexport type GetKanbanResponse = KanbanNode[]\n\n// GetKanbanProjectUsers response type\nexport type KanbanProjectUserNode = Omit<\n GetKanbanProjectUsersQuery['users']['edges'][0]['node'],\n 'accessGroups'\n> & { accessGroups: AccessGroups; projects: string[]; avatarUrl: string }\nexport type GetKanbanProjectUsersResponse = KanbanProjectUserNode[]\n\nimport { DefinitionsFromApi, OverrideResultType, TagTypesFromApi } from '@reduxjs/toolkit/query'\nimport getUserProjectsAccess from './getUserProjectsAccess'\nimport { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit'\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<\n Definitions,\n 'GetKanban' | 'GetKanbanTasks' | 'GetKanbanProjectUsers'\n> & {\n GetKanban: OverrideResultType<Definitions['GetKanban'], GetKanbanResponse>\n GetKanbanTasks: OverrideResultType<Definitions['GetKanbanTasks'], GetKanbanResponse>\n GetKanbanProjectUsers: OverrideResultType<\n Definitions['GetKanbanProjectUsers'],\n GetKanbanProjectUsersResponse\n >\n}\n\n// get edges and sort by task label || name\nconst transformKanban = (response: GetKanbanQuery) =>\n response.kanban.edges\n .map(({ node }) => node)\n .sort((a, b) => {\n const aLabel = a.label || a.name\n const bLabel = b.label || b.name\n return aLabel.localeCompare(bLabel)\n })\n\nconst provideKanbanTags = (result: GetKanbanResponse | undefined, _error: any, args: any) =>\n result?.length\n ? [\n { type: 'kanBanTask', id: 'LIST' },\n ...result.flatMap(({ id, projectName, assignees }) => [\n { type: 'task', id },\n { type: 'kanban', id: 'project-' + projectName },\n ...assignees.map((assignee) => ({ type: 'kanban', id: 'user-' + assignee })),\n ...assignees.map((assignee) => ({\n type: 'kanban',\n id: 'user-' + assignee + '-project-' + projectName,\n })),\n { type: 'kanban', id: JSON.stringify(args) },\n ]),\n ]\n : [{ type: 'kanBanTask', id: 'LIST' }]\n\nexport const getKanbanTasks = async (\n {\n projects = [],\n taskIds = [],\n }: {\n projects: string[]\n taskIds: string[]\n },\n dispatch: ThunkDispatch<any, any, UnknownAction>,\n) => {\n try {\n // get the task\n const response = await dispatch(\n enhancedDashboardGraphqlApi.endpoints.GetKanbanTasks.initiate(\n { projects, taskIds },\n { forceRefetch: true },\n ),\n )\n\n if (response.status === 'rejected' || !response.data) {\n console.error('No tasks found', taskIds)\n throw new Error(`No tasks found ${taskIds.join(', ')}`)\n }\n\n if (response.status !== 'fulfilled') return []\n // get tasks from response (usually only one task)\n return response.data\n } catch (error) {\n console.error(error)\n return []\n }\n}\n\nconst enhancedDashboardGraphqlApi = gqlApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n GetKanban: {\n transformResponse: transformKanban,\n providesTags: provideKanbanTags,\n async onCacheEntryAdded(\n { assignees = [], projects = [] } = {},\n { updateCachedData, cacheDataLoaded, cacheEntryRemoved, dispatch },\n ) {\n let token\n try {\n // wait for the initial query to resolve before proceeding\n await cacheDataLoaded\n\n const patchKanbanTask = async ({\n projects = [],\n taskIds = [],\n }: {\n projects: string[]\n taskIds: string[]\n }) => {\n const tasks = await getKanbanTasks({ projects, taskIds }, dispatch)\n\n // get all tasks that have been ADDED to the assignees\n const tasksWithArgAssignees = tasks.filter((task) =>\n task.assignees.some((assignee) => assignees?.includes(assignee)),\n )\n // get all tasks that have been REMOVED from the assignees\n const tasksWithoutArgAssignees = tasks.filter(\n (task) => !task.assignees.some((assignee) => assignees?.includes(assignee)),\n )\n\n // patch the kanban query by adding new tasks and remove old tasks\n updateCachedData((draft) => {\n // add new tasks\n tasksWithArgAssignees.forEach((task) => {\n const index = draft.findIndex((t) => t.id === task.id)\n if (index === -1) {\n draft.push(task)\n } else {\n // update the task\n draft[index] = task\n }\n })\n // remove old tasks\n tasksWithoutArgAssignees.forEach((task) => {\n const index = draft.findIndex((t) => t.id === task.id)\n if (index !== -1) {\n draft.splice(index, 1)\n }\n })\n })\n }\n\n const handlePubSub = async (_topic: string, message: any) => {\n const project = message.project as string\n // first check the project name as selected\n if (!projects?.includes(project)) return console.log('project not selected')\n // then get entity id\n const entityId = message.summary.entityId\n if (!entityId) return console.log('no entity id found')\n\n // patch task updates into kanban cache\n patchKanbanTask({\n taskIds: [entityId],\n projects: [project],\n })\n }\n\n // sub to websocket topic\n token = PubSub.subscribe('entity.task', handlePubSub)\n } catch (error) {\n console.error(error)\n // no-op in case `cacheEntryRemoved` resolves before `cacheDataLoaded`,\n // in which case `cacheDataLoaded` will throw\n }\n // cacheEntryRemoved will resolve when the cache subscription is no longer active\n await cacheEntryRemoved\n // perform cleanup steps once the `cacheEntryRemoved` promise resolves\n PubSub.unsubscribe(token)\n },\n // // there is only one cache for kanban\n // serializeQueryArgs: () => '',\n // // whenever the assignees or projects change, we need to refetch the one query\n // forceRefetch: (params) => {\n // const { currentArg, previousArg } = params\n // // if the assignees are different, we need to refetch the query\n // if (!isEqual(currentArg?.assignees, previousArg?.assignees)) return true\n // // if the projects are different, we need to refetch the query\n // if (!isEqual(currentArg?.projects, previousArg?.projects)) return true\n // return false\n // },\n },\n // same query as GetKanban but for specific tasks\n // used mainly for patching tasks into the kanban cache\n GetKanbanTasks: {\n transformResponse: transformKanban,\n providesTags: provideKanbanTags,\n },\n // get all users on all selected projects\n GetKanbanProjectUsers: {\n transformResponse: (response: GetKanbanProjectUsersQuery, _meta, { projects } = {}) =>\n response.users.edges.map(({ node: user }) => {\n const accessGroups = convertAccessGroupsData(user.accessGroups)\n // parse access groups json\n const isUser = !user.isManager && !user.isAdmin\n // get the projects that the user has access to\n let projectsAccess = isUser ? getUserProjectsAccess(accessGroups) : projects\n if (typeof projectsAccess === 'string' || !projectsAccess) projectsAccess = []\n\n // assignees select requires avatarUrl\n const avatarUrl = `/api/users/${user.name}/avatar`\n\n return {\n ...user,\n accessGroups: accessGroups,\n projects: projectsAccess,\n avatarUrl,\n }\n }),\n providesTags: (result) =>\n result?.length\n ? [\n { type: 'user', id: 'LIST' },\n ...result.map(({ name }) => ({ type: 'user', id: name })),\n ]\n : [{ type: 'user', id: 'LIST' }],\n },\n },\n})\n\nexport const { useGetKanbanQuery, useGetKanbanProjectUsersQuery } = enhancedDashboardGraphqlApi\n\ntype GetProjectsInfoParams = {\n projects: string[]\n}\n\nexport type GetProjectsInfoResponse = { [projectName: string]: ProjectModel | undefined }\n\nconst injectedDashboardRestApi = enhancedDashboardGraphqlApi.injectEndpoints({\n endpoints: (build) => ({\n getProjectsInfo: build.query<GetProjectsInfoResponse, GetProjectsInfoParams>({\n async queryFn({ projects = [] }, { dispatch }) {\n try {\n // get project info for each project\n const projectInfo: Record<string, ProjectModel | undefined> = {}\n for (const project of projects) {\n // hopefully this will be cached\n // it also allows for different combination of projects but still use the cache\n const response = await dispatch(\n projectQueries.endpoints.getProject.initiate(\n { projectName: project },\n { forceRefetch: true },\n ),\n )\n\n if (response.status === 'rejected') {\n throw 'No projects found'\n }\n projectInfo[project] = response.data\n }\n\n return { data: projectInfo, meta: undefined, error: undefined }\n } catch (error: any) {\n console.error(error)\n return { error, meta: undefined, data: undefined }\n }\n },\n providesTags: (_res, _error, { projects }) =>\n projects.map((projectName) => ({ type: 'project', id: projectName })),\n }),\n }),\n})\n\nexport const { useGetProjectsInfoQuery } = injectedDashboardRestApi\nexport { injectedDashboardRestApi as dashboardQueries }\n"],"names":["transformKanban","response","node","a","b","aLabel","bLabel","provideKanbanTags","result","_error","args","id","projectName","assignees","assignee","getKanbanTasks","projects","taskIds","dispatch","enhancedDashboardGraphqlApi","error","gqlApi","updateCachedData","cacheDataLoaded","cacheEntryRemoved","token","patchKanbanTask","tasks","tasksWithArgAssignees","task","tasksWithoutArgAssignees","draft","index","t","handlePubSub","_topic","message","project","entityId","PubSub","_meta","user","accessGroups","convertAccessGroupsData","projectsAccess","getUserProjectsAccess","avatarUrl","name","useGetKanbanQuery","useGetKanbanProjectUsersQuery","injectedDashboardRestApi","build","projectInfo","projectQueries","_res","useGetProjectsInfoQuery"],"mappings":"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"}
1
+ {"version":3,"file":"getUserDashboard.cjs.js","sources":["../../../../../../src/api/queries/userDashboard/getUserDashboard.ts"],"sourcesContent":["import {\n gqlApi,\n GetKanbanProjectUsersQuery,\n GetKanbanQuery,\n ProjectModel,\n KanbanNode,\n Anatomy,\n} from '@shared/api/generated'\nimport { projectQueries } from '@shared/api/queries/project'\nimport { PubSub } from '@shared/util'\nimport convertAccessGroupsData, { AccessGroups } from './convertAccessGroupsData'\n\n// GetKanban response type\nexport type GetKanbanResponse = KanbanNode[]\n\n// GetKanbanProjectUsers response type\nexport type KanbanProjectUserNode = Omit<\n GetKanbanProjectUsersQuery['users']['edges'][0]['node'],\n 'accessGroups'\n> & { accessGroups: AccessGroups; projects: string[]; avatarUrl: string }\nexport type GetKanbanProjectUsersResponse = KanbanProjectUserNode[]\n\nimport { DefinitionsFromApi, OverrideResultType, TagTypesFromApi } from '@reduxjs/toolkit/query'\nimport getUserProjectsAccess from './getUserProjectsAccess'\nimport { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit'\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<\n Definitions,\n 'GetKanban' | 'GetKanbanTasks' | 'GetKanbanProjectUsers'\n> & {\n GetKanban: OverrideResultType<Definitions['GetKanban'], GetKanbanResponse>\n GetKanbanTasks: OverrideResultType<Definitions['GetKanbanTasks'], GetKanbanResponse>\n GetKanbanProjectUsers: OverrideResultType<\n Definitions['GetKanbanProjectUsers'],\n GetKanbanProjectUsersResponse\n >\n}\n\n// get edges and sort by task label || name\nconst transformKanban = (response: GetKanbanQuery) =>\n response.kanban.edges\n .map(({ node }) => node)\n .sort((a, b) => {\n const aLabel = a.label || a.name\n const bLabel = b.label || b.name\n return aLabel.localeCompare(bLabel)\n })\n\nconst provideKanbanTags = (result: GetKanbanResponse | undefined, _error: any, args: any) =>\n result?.length\n ? [\n { type: 'kanBanTask', id: 'LIST' },\n ...result.flatMap(({ id, projectName, assignees }) => [\n { type: 'task', id },\n { type: 'kanban', id: 'project-' + projectName },\n ...assignees.map((assignee) => ({ type: 'kanban', id: 'user-' + assignee })),\n ...assignees.map((assignee) => ({\n type: 'kanban',\n id: 'user-' + assignee + '-project-' + projectName,\n })),\n { type: 'kanban', id: JSON.stringify(args) },\n ]),\n ]\n : [{ type: 'kanBanTask', id: 'LIST' }]\n\nexport const getKanbanTasks = async (\n {\n projects = [],\n taskIds = [],\n }: {\n projects: string[]\n taskIds: string[]\n },\n dispatch: ThunkDispatch<any, any, UnknownAction>,\n) => {\n try {\n // get the task\n const response = await dispatch(\n enhancedDashboardGraphqlApi.endpoints.GetKanbanTasks.initiate(\n { projects, taskIds },\n { forceRefetch: true },\n ),\n )\n\n if (response.status === 'rejected' || !response.data) {\n console.error('No tasks found', taskIds)\n throw new Error(`No tasks found ${taskIds.join(', ')}`)\n }\n\n if (response.status !== 'fulfilled') return []\n // get tasks from response (usually only one task)\n return response.data\n } catch (error) {\n console.error(error)\n return []\n }\n}\n\nconst enhancedDashboardGraphqlApi = gqlApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n GetKanban: {\n transformResponse: transformKanban,\n providesTags: provideKanbanTags,\n async onCacheEntryAdded(\n { assignees = [], projects = [] } = {},\n { updateCachedData, cacheDataLoaded, cacheEntryRemoved, dispatch },\n ) {\n let token\n try {\n // wait for the initial query to resolve before proceeding\n await cacheDataLoaded\n\n const patchKanbanTask = async ({\n projects = [],\n taskIds = [],\n }: {\n projects: string[]\n taskIds: string[]\n }) => {\n const tasks = await getKanbanTasks({ projects, taskIds }, dispatch)\n\n // get all tasks that have been ADDED to the assignees\n const tasksWithArgAssignees = tasks.filter((task) =>\n task.assignees.some((assignee) => assignees?.includes(assignee)),\n )\n // get all tasks that have been REMOVED from the assignees\n const tasksWithoutArgAssignees = tasks.filter(\n (task) => !task.assignees.some((assignee) => assignees?.includes(assignee)),\n )\n\n // patch the kanban query by adding new tasks and remove old tasks\n updateCachedData((draft) => {\n // add new tasks\n tasksWithArgAssignees.forEach((task) => {\n const index = draft.findIndex((t) => t.id === task.id)\n if (index === -1) {\n draft.push(task)\n } else {\n // update the task\n draft[index] = task\n }\n })\n // remove old tasks\n tasksWithoutArgAssignees.forEach((task) => {\n const index = draft.findIndex((t) => t.id === task.id)\n if (index !== -1) {\n draft.splice(index, 1)\n }\n })\n })\n }\n\n const handlePubSub = async (_topic: string, message: any) => {\n const project = message.project as string\n // first check the project name as selected\n if (!projects?.includes(project)) return console.log('project not selected')\n // then get entity id\n const entityId = message.summary.entityId\n if (!entityId) return console.log('no entity id found')\n\n // patch task updates into kanban cache\n patchKanbanTask({\n taskIds: [entityId],\n projects: [project],\n })\n }\n\n // sub to websocket topic\n token = PubSub.subscribe('entity.task', handlePubSub)\n } catch (error) {\n console.error(error)\n // no-op in case `cacheEntryRemoved` resolves before `cacheDataLoaded`,\n // in which case `cacheDataLoaded` will throw\n }\n // cacheEntryRemoved will resolve when the cache subscription is no longer active\n await cacheEntryRemoved\n // perform cleanup steps once the `cacheEntryRemoved` promise resolves\n PubSub.unsubscribe(token)\n },\n // // there is only one cache for kanban\n // serializeQueryArgs: () => '',\n // // whenever the assignees or projects change, we need to refetch the one query\n // forceRefetch: (params) => {\n // const { currentArg, previousArg } = params\n // // if the assignees are different, we need to refetch the query\n // if (!isEqual(currentArg?.assignees, previousArg?.assignees)) return true\n // // if the projects are different, we need to refetch the query\n // if (!isEqual(currentArg?.projects, previousArg?.projects)) return true\n // return false\n // },\n },\n // same query as GetKanban but for specific tasks\n // used mainly for patching tasks into the kanban cache\n GetKanbanTasks: {\n transformResponse: transformKanban,\n providesTags: provideKanbanTags,\n },\n // get all users on all selected projects\n GetKanbanProjectUsers: {\n transformResponse: (response: GetKanbanProjectUsersQuery, _meta, { projects } = {}) =>\n response.users.edges.map(({ node: user }) => {\n const accessGroups = convertAccessGroupsData(user.accessGroups)\n // parse access groups json\n const isUser = !user.isManager && !user.isAdmin\n // get the projects that the user has access to\n let projectsAccess = isUser ? getUserProjectsAccess(accessGroups) : projects\n if (typeof projectsAccess === 'string' || !projectsAccess) projectsAccess = []\n\n // assignees select requires avatarUrl\n const avatarUrl = `/api/users/${user.name}/avatar`\n\n return {\n ...user,\n accessGroups: accessGroups,\n projects: projectsAccess,\n avatarUrl,\n }\n }),\n providesTags: (result) =>\n result?.length\n ? [\n { type: 'user', id: 'LIST' },\n ...result.map(({ name }) => ({ type: 'user', id: name })),\n ]\n : [{ type: 'user', id: 'LIST' }],\n },\n },\n})\n\nexport const { useGetKanbanQuery, useGetKanbanProjectUsersQuery } = enhancedDashboardGraphqlApi\n\ntype GetProjectsInfoParams = {\n projects: string[]\n}\n\nexport type ProjectModeWithAnatomy = ProjectModel & { anatomy?: Anatomy }\n\nexport type GetProjectsInfoResponse = { [projectName: string]: ProjectModeWithAnatomy | undefined }\n\nconst injectedDashboardRestApi = enhancedDashboardGraphqlApi.injectEndpoints({\n endpoints: (build) => ({\n getProjectsInfo: build.query<GetProjectsInfoResponse, GetProjectsInfoParams>({\n async queryFn({ projects = [] }, { dispatch }) {\n try {\n // get project info for each project\n const projectInfo: Record<string, ProjectModeWithAnatomy | undefined> = {}\n for (const project of projects) {\n const projectName = project as string\n // hopefully this will be cached\n // it also allows for different combination of projects but still use the cache\n const responses = [\n dispatch(\n projectQueries.endpoints.getProject.initiate(\n { projectName },\n { forceRefetch: true },\n ),\n ).unwrap(),\n dispatch(\n projectQueries.endpoints.getProjectAnatomy.initiate(\n { projectName },\n { forceRefetch: true },\n ),\n ).unwrap(),\n ]\n\n const response = await Promise.all(responses)\n\n const projectData = response[0] as ProjectModel | undefined\n const anatomyData = response[1] as Anatomy | undefined\n\n if (projectData) {\n projectInfo[projectName] = { ...projectData, anatomy: anatomyData }\n }\n }\n\n return { data: projectInfo, meta: undefined, error: undefined }\n } catch (error: any) {\n console.error(error)\n return { error, meta: undefined, data: undefined }\n }\n },\n providesTags: (_res, _error, { projects }) =>\n projects.map((projectName) => ({ type: 'project', id: projectName })),\n }),\n }),\n})\n\nexport const { useGetProjectsInfoQuery } = injectedDashboardRestApi\nexport { injectedDashboardRestApi as dashboardQueries }\n"],"names":["transformKanban","response","node","a","b","aLabel","bLabel","provideKanbanTags","result","_error","args","id","projectName","assignees","assignee","getKanbanTasks","projects","taskIds","dispatch","enhancedDashboardGraphqlApi","error","gqlApi","updateCachedData","cacheDataLoaded","cacheEntryRemoved","token","patchKanbanTask","tasks","tasksWithArgAssignees","task","tasksWithoutArgAssignees","draft","index","t","handlePubSub","_topic","message","project","entityId","PubSub","_meta","user","accessGroups","convertAccessGroupsData","projectsAccess","getUserProjectsAccess","avatarUrl","name","useGetKanbanQuery","useGetKanbanProjectUsersQuery","injectedDashboardRestApi","build","projectInfo","responses","projectQueries","projectData","anatomyData","_res","useGetProjectsInfoQuery"],"mappings":"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"}
@@ -36,36 +36,36 @@ 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 A from "../project/getProject.es.js";
39
+ import j from "../project/getProject.es.js";
40
40
  import "../project/updateProject.es.js";
41
41
  import "lodash";
42
42
  import "react-toastify";
43
43
  import "uuid";
44
- import h from "../../../util/pubsub.es.js";
44
+ import k from "../../../util/pubsub.es.js";
45
45
  import G from "./convertAccessGroupsData.es.js";
46
- import I from "./getUserProjectsAccess.es.js";
47
- const j = (o) => o.kanban.edges.map(({ node: r }) => r).sort((r, n) => {
48
- const t = r.label || r.name, e = n.label || n.name;
49
- return t.localeCompare(e);
50
- }), k = (o, r, n) => o != null && o.length ? [
46
+ import P from "./getUserProjectsAccess.es.js";
47
+ const T = (o) => o.kanban.edges.map(({ node: r }) => r).sort((r, e) => {
48
+ const t = r.label || r.name, n = e.label || e.name;
49
+ return t.localeCompare(n);
50
+ }), g = (o, r, e) => o != null && o.length ? [
51
51
  { type: "kanBanTask", id: "LIST" },
52
- ...o.flatMap(({ id: t, projectName: e, assignees: p }) => [
52
+ ...o.flatMap(({ id: t, projectName: n, assignees: i }) => [
53
53
  { type: "task", id: t },
54
- { type: "kanban", id: "project-" + e },
55
- ...p.map((i) => ({ type: "kanban", id: "user-" + i })),
56
- ...p.map((i) => ({
54
+ { type: "kanban", id: "project-" + n },
55
+ ...i.map((a) => ({ type: "kanban", id: "user-" + a })),
56
+ ...i.map((a) => ({
57
57
  type: "kanban",
58
- id: "user-" + i + "-project-" + e
58
+ id: "user-" + a + "-project-" + n
59
59
  })),
60
- { type: "kanban", id: JSON.stringify(n) }
60
+ { type: "kanban", id: JSON.stringify(e) }
61
61
  ])
62
- ] : [{ type: "kanBanTask", id: "LIST" }], K = async ({
62
+ ] : [{ type: "kanBanTask", id: "LIST" }], I = async ({
63
63
  projects: o = [],
64
64
  taskIds: r = []
65
- }, n) => {
65
+ }, e) => {
66
66
  try {
67
- const t = await n(
68
- b.endpoints.GetKanbanTasks.initiate(
67
+ const t = await e(
68
+ h.endpoints.GetKanbanTasks.initiate(
69
69
  { projects: o, taskIds: r },
70
70
  { forceRefetch: !0 }
71
71
  )
@@ -76,48 +76,48 @@ const j = (o) => o.kanban.edges.map(({ node: r }) => r).sort((r, n) => {
76
76
  } catch (t) {
77
77
  return console.error(t), [];
78
78
  }
79
- }, b = v.enhanceEndpoints({
79
+ }, h = v.enhanceEndpoints({
80
80
  endpoints: {
81
81
  GetKanban: {
82
- transformResponse: j,
83
- providesTags: k,
84
- async onCacheEntryAdded({ assignees: o = [], projects: r = [] } = {}, { updateCachedData: n, cacheDataLoaded: t, cacheEntryRemoved: e, dispatch: p }) {
85
- let i;
82
+ transformResponse: T,
83
+ providesTags: g,
84
+ async onCacheEntryAdded({ assignees: o = [], projects: r = [] } = {}, { updateCachedData: e, cacheDataLoaded: t, cacheEntryRemoved: n, dispatch: i }) {
85
+ let a;
86
86
  try {
87
87
  await t;
88
88
  const c = async ({
89
- projects: l = [],
90
- taskIds: f = []
89
+ projects: u = [],
90
+ taskIds: y = []
91
91
  }) => {
92
- const m = await K({ projects: l, taskIds: f }, p), u = m.filter(
93
- (a) => a.assignees.some((s) => o == null ? void 0 : o.includes(s))
94
- ), g = m.filter(
95
- (a) => !a.assignees.some((s) => o == null ? void 0 : o.includes(s))
92
+ const m = await I({ projects: u, taskIds: y }, i), b = m.filter(
93
+ (s) => s.assignees.some((p) => o == null ? void 0 : o.includes(p))
94
+ ), A = m.filter(
95
+ (s) => !s.assignees.some((p) => o == null ? void 0 : o.includes(p))
96
96
  );
97
- n((a) => {
98
- u.forEach((s) => {
99
- const d = a.findIndex((y) => y.id === s.id);
100
- d === -1 ? a.push(s) : a[d] = s;
101
- }), g.forEach((s) => {
102
- const d = a.findIndex((y) => y.id === s.id);
103
- d !== -1 && a.splice(d, 1);
97
+ e((s) => {
98
+ b.forEach((p) => {
99
+ const d = s.findIndex((l) => l.id === p.id);
100
+ d === -1 ? s.push(p) : s[d] = p;
101
+ }), A.forEach((p) => {
102
+ const d = s.findIndex((l) => l.id === p.id);
103
+ d !== -1 && s.splice(d, 1);
104
104
  });
105
105
  });
106
- }, T = async (l, f) => {
107
- const m = f.project;
106
+ }, f = async (u, y) => {
107
+ const m = y.project;
108
108
  if (!(r != null && r.includes(m))) return console.log("project not selected");
109
- const u = f.summary.entityId;
110
- if (!u) return console.log("no entity id found");
109
+ const b = y.summary.entityId;
110
+ if (!b) return console.log("no entity id found");
111
111
  c({
112
- taskIds: [u],
112
+ taskIds: [b],
113
113
  projects: [m]
114
114
  });
115
115
  };
116
- i = h.subscribe("entity.task", T);
116
+ a = k.subscribe("entity.task", f);
117
117
  } catch (c) {
118
118
  console.error(c);
119
119
  }
120
- await e, h.unsubscribe(i);
120
+ await n, k.unsubscribe(a);
121
121
  }
122
122
  // // there is only one cache for kanban
123
123
  // serializeQueryArgs: () => '',
@@ -134,20 +134,20 @@ const j = (o) => o.kanban.edges.map(({ node: r }) => r).sort((r, n) => {
134
134
  // same query as GetKanban but for specific tasks
135
135
  // used mainly for patching tasks into the kanban cache
136
136
  GetKanbanTasks: {
137
- transformResponse: j,
138
- providesTags: k
137
+ transformResponse: T,
138
+ providesTags: g
139
139
  },
140
140
  // get all users on all selected projects
141
141
  GetKanbanProjectUsers: {
142
- transformResponse: (o, r, { projects: n } = {}) => o.users.edges.map(({ node: t }) => {
143
- const e = G(t.accessGroups);
144
- let i = !t.isManager && !t.isAdmin ? I(e) : n;
145
- (typeof i == "string" || !i) && (i = []);
142
+ transformResponse: (o, r, { projects: e } = {}) => o.users.edges.map(({ node: t }) => {
143
+ const n = G(t.accessGroups);
144
+ let a = !t.isManager && !t.isAdmin ? P(n) : e;
145
+ (typeof a == "string" || !a) && (a = []);
146
146
  const c = `/api/users/${t.name}/avatar`;
147
147
  return {
148
148
  ...t,
149
- accessGroups: e,
150
- projects: i,
149
+ accessGroups: n,
150
+ projects: a,
151
151
  avatarUrl: c
152
152
  };
153
153
  }),
@@ -157,37 +157,43 @@ const j = (o) => o.kanban.edges.map(({ node: r }) => r).sort((r, n) => {
157
157
  ] : [{ type: "user", id: "LIST" }]
158
158
  }
159
159
  }
160
- }), { useGetKanbanQuery: Tt, useGetKanbanProjectUsersQuery: gt } = b, P = b.injectEndpoints({
160
+ }), { useGetKanbanQuery: Tt, useGetKanbanProjectUsersQuery: gt } = h, K = h.injectEndpoints({
161
161
  endpoints: (o) => ({
162
162
  getProjectsInfo: o.query({
163
- async queryFn({ projects: r = [] }, { dispatch: n }) {
163
+ async queryFn({ projects: r = [] }, { dispatch: e }) {
164
164
  try {
165
165
  const t = {};
166
- for (const e of r) {
167
- const p = await n(
168
- A.endpoints.getProject.initiate(
169
- { projectName: e },
170
- { forceRefetch: !0 }
171
- )
172
- );
173
- if (p.status === "rejected")
174
- throw "No projects found";
175
- t[e] = p.data;
166
+ for (const n of r) {
167
+ const i = n, a = [
168
+ e(
169
+ j.endpoints.getProject.initiate(
170
+ { projectName: i },
171
+ { forceRefetch: !0 }
172
+ )
173
+ ).unwrap(),
174
+ e(
175
+ j.endpoints.getProjectAnatomy.initiate(
176
+ { projectName: i },
177
+ { forceRefetch: !0 }
178
+ )
179
+ ).unwrap()
180
+ ], c = await Promise.all(a), f = c[0], u = c[1];
181
+ f && (t[i] = { ...f, anatomy: u });
176
182
  }
177
183
  return { data: t, meta: void 0, error: void 0 };
178
184
  } catch (t) {
179
185
  return console.error(t), { error: t, meta: void 0, data: void 0 };
180
186
  }
181
187
  },
182
- providesTags: (r, n, { projects: t }) => t.map((e) => ({ type: "project", id: e }))
188
+ providesTags: (r, e, { projects: t }) => t.map((n) => ({ type: "project", id: n }))
183
189
  })
184
190
  })
185
- }), { useGetProjectsInfoQuery: vt } = P;
191
+ }), { useGetProjectsInfoQuery: At } = K;
186
192
  export {
187
- P as dashboardQueries,
188
- K as getKanbanTasks,
193
+ K as dashboardQueries,
194
+ I as getKanbanTasks,
189
195
  gt as useGetKanbanProjectUsersQuery,
190
196
  Tt as useGetKanbanQuery,
191
- vt as useGetProjectsInfoQuery
197
+ At as useGetProjectsInfoQuery
192
198
  };
193
199
  //# sourceMappingURL=getUserDashboard.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getUserDashboard.es.js","sources":["../../../../../../src/api/queries/userDashboard/getUserDashboard.ts"],"sourcesContent":["import {\n gqlApi,\n GetKanbanProjectUsersQuery,\n GetKanbanQuery,\n ProjectModel,\n KanbanNode,\n} from '@shared/api/generated'\nimport { projectQueries } from '@shared/api/queries/project'\nimport { PubSub } from '@shared/util'\nimport convertAccessGroupsData, { AccessGroups } from './convertAccessGroupsData'\n\n// GetKanban response type\nexport type GetKanbanResponse = KanbanNode[]\n\n// GetKanbanProjectUsers response type\nexport type KanbanProjectUserNode = Omit<\n GetKanbanProjectUsersQuery['users']['edges'][0]['node'],\n 'accessGroups'\n> & { accessGroups: AccessGroups; projects: string[]; avatarUrl: string }\nexport type GetKanbanProjectUsersResponse = KanbanProjectUserNode[]\n\nimport { DefinitionsFromApi, OverrideResultType, TagTypesFromApi } from '@reduxjs/toolkit/query'\nimport getUserProjectsAccess from './getUserProjectsAccess'\nimport { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit'\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<\n Definitions,\n 'GetKanban' | 'GetKanbanTasks' | 'GetKanbanProjectUsers'\n> & {\n GetKanban: OverrideResultType<Definitions['GetKanban'], GetKanbanResponse>\n GetKanbanTasks: OverrideResultType<Definitions['GetKanbanTasks'], GetKanbanResponse>\n GetKanbanProjectUsers: OverrideResultType<\n Definitions['GetKanbanProjectUsers'],\n GetKanbanProjectUsersResponse\n >\n}\n\n// get edges and sort by task label || name\nconst transformKanban = (response: GetKanbanQuery) =>\n response.kanban.edges\n .map(({ node }) => node)\n .sort((a, b) => {\n const aLabel = a.label || a.name\n const bLabel = b.label || b.name\n return aLabel.localeCompare(bLabel)\n })\n\nconst provideKanbanTags = (result: GetKanbanResponse | undefined, _error: any, args: any) =>\n result?.length\n ? [\n { type: 'kanBanTask', id: 'LIST' },\n ...result.flatMap(({ id, projectName, assignees }) => [\n { type: 'task', id },\n { type: 'kanban', id: 'project-' + projectName },\n ...assignees.map((assignee) => ({ type: 'kanban', id: 'user-' + assignee })),\n ...assignees.map((assignee) => ({\n type: 'kanban',\n id: 'user-' + assignee + '-project-' + projectName,\n })),\n { type: 'kanban', id: JSON.stringify(args) },\n ]),\n ]\n : [{ type: 'kanBanTask', id: 'LIST' }]\n\nexport const getKanbanTasks = async (\n {\n projects = [],\n taskIds = [],\n }: {\n projects: string[]\n taskIds: string[]\n },\n dispatch: ThunkDispatch<any, any, UnknownAction>,\n) => {\n try {\n // get the task\n const response = await dispatch(\n enhancedDashboardGraphqlApi.endpoints.GetKanbanTasks.initiate(\n { projects, taskIds },\n { forceRefetch: true },\n ),\n )\n\n if (response.status === 'rejected' || !response.data) {\n console.error('No tasks found', taskIds)\n throw new Error(`No tasks found ${taskIds.join(', ')}`)\n }\n\n if (response.status !== 'fulfilled') return []\n // get tasks from response (usually only one task)\n return response.data\n } catch (error) {\n console.error(error)\n return []\n }\n}\n\nconst enhancedDashboardGraphqlApi = gqlApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n GetKanban: {\n transformResponse: transformKanban,\n providesTags: provideKanbanTags,\n async onCacheEntryAdded(\n { assignees = [], projects = [] } = {},\n { updateCachedData, cacheDataLoaded, cacheEntryRemoved, dispatch },\n ) {\n let token\n try {\n // wait for the initial query to resolve before proceeding\n await cacheDataLoaded\n\n const patchKanbanTask = async ({\n projects = [],\n taskIds = [],\n }: {\n projects: string[]\n taskIds: string[]\n }) => {\n const tasks = await getKanbanTasks({ projects, taskIds }, dispatch)\n\n // get all tasks that have been ADDED to the assignees\n const tasksWithArgAssignees = tasks.filter((task) =>\n task.assignees.some((assignee) => assignees?.includes(assignee)),\n )\n // get all tasks that have been REMOVED from the assignees\n const tasksWithoutArgAssignees = tasks.filter(\n (task) => !task.assignees.some((assignee) => assignees?.includes(assignee)),\n )\n\n // patch the kanban query by adding new tasks and remove old tasks\n updateCachedData((draft) => {\n // add new tasks\n tasksWithArgAssignees.forEach((task) => {\n const index = draft.findIndex((t) => t.id === task.id)\n if (index === -1) {\n draft.push(task)\n } else {\n // update the task\n draft[index] = task\n }\n })\n // remove old tasks\n tasksWithoutArgAssignees.forEach((task) => {\n const index = draft.findIndex((t) => t.id === task.id)\n if (index !== -1) {\n draft.splice(index, 1)\n }\n })\n })\n }\n\n const handlePubSub = async (_topic: string, message: any) => {\n const project = message.project as string\n // first check the project name as selected\n if (!projects?.includes(project)) return console.log('project not selected')\n // then get entity id\n const entityId = message.summary.entityId\n if (!entityId) return console.log('no entity id found')\n\n // patch task updates into kanban cache\n patchKanbanTask({\n taskIds: [entityId],\n projects: [project],\n })\n }\n\n // sub to websocket topic\n token = PubSub.subscribe('entity.task', handlePubSub)\n } catch (error) {\n console.error(error)\n // no-op in case `cacheEntryRemoved` resolves before `cacheDataLoaded`,\n // in which case `cacheDataLoaded` will throw\n }\n // cacheEntryRemoved will resolve when the cache subscription is no longer active\n await cacheEntryRemoved\n // perform cleanup steps once the `cacheEntryRemoved` promise resolves\n PubSub.unsubscribe(token)\n },\n // // there is only one cache for kanban\n // serializeQueryArgs: () => '',\n // // whenever the assignees or projects change, we need to refetch the one query\n // forceRefetch: (params) => {\n // const { currentArg, previousArg } = params\n // // if the assignees are different, we need to refetch the query\n // if (!isEqual(currentArg?.assignees, previousArg?.assignees)) return true\n // // if the projects are different, we need to refetch the query\n // if (!isEqual(currentArg?.projects, previousArg?.projects)) return true\n // return false\n // },\n },\n // same query as GetKanban but for specific tasks\n // used mainly for patching tasks into the kanban cache\n GetKanbanTasks: {\n transformResponse: transformKanban,\n providesTags: provideKanbanTags,\n },\n // get all users on all selected projects\n GetKanbanProjectUsers: {\n transformResponse: (response: GetKanbanProjectUsersQuery, _meta, { projects } = {}) =>\n response.users.edges.map(({ node: user }) => {\n const accessGroups = convertAccessGroupsData(user.accessGroups)\n // parse access groups json\n const isUser = !user.isManager && !user.isAdmin\n // get the projects that the user has access to\n let projectsAccess = isUser ? getUserProjectsAccess(accessGroups) : projects\n if (typeof projectsAccess === 'string' || !projectsAccess) projectsAccess = []\n\n // assignees select requires avatarUrl\n const avatarUrl = `/api/users/${user.name}/avatar`\n\n return {\n ...user,\n accessGroups: accessGroups,\n projects: projectsAccess,\n avatarUrl,\n }\n }),\n providesTags: (result) =>\n result?.length\n ? [\n { type: 'user', id: 'LIST' },\n ...result.map(({ name }) => ({ type: 'user', id: name })),\n ]\n : [{ type: 'user', id: 'LIST' }],\n },\n },\n})\n\nexport const { useGetKanbanQuery, useGetKanbanProjectUsersQuery } = enhancedDashboardGraphqlApi\n\ntype GetProjectsInfoParams = {\n projects: string[]\n}\n\nexport type GetProjectsInfoResponse = { [projectName: string]: ProjectModel | undefined }\n\nconst injectedDashboardRestApi = enhancedDashboardGraphqlApi.injectEndpoints({\n endpoints: (build) => ({\n getProjectsInfo: build.query<GetProjectsInfoResponse, GetProjectsInfoParams>({\n async queryFn({ projects = [] }, { dispatch }) {\n try {\n // get project info for each project\n const projectInfo: Record<string, ProjectModel | undefined> = {}\n for (const project of projects) {\n // hopefully this will be cached\n // it also allows for different combination of projects but still use the cache\n const response = await dispatch(\n projectQueries.endpoints.getProject.initiate(\n { projectName: project },\n { forceRefetch: true },\n ),\n )\n\n if (response.status === 'rejected') {\n throw 'No projects found'\n }\n projectInfo[project] = response.data\n }\n\n return { data: projectInfo, meta: undefined, error: undefined }\n } catch (error: any) {\n console.error(error)\n return { error, meta: undefined, data: undefined }\n }\n },\n providesTags: (_res, _error, { projects }) =>\n projects.map((projectName) => ({ type: 'project', id: projectName })),\n }),\n }),\n})\n\nexport const { useGetProjectsInfoQuery } = injectedDashboardRestApi\nexport { injectedDashboardRestApi as dashboardQueries }\n"],"names":["transformKanban","response","node","a","b","aLabel","bLabel","provideKanbanTags","result","_error","args","id","projectName","assignees","assignee","getKanbanTasks","projects","taskIds","dispatch","enhancedDashboardGraphqlApi","error","gqlApi","updateCachedData","cacheDataLoaded","cacheEntryRemoved","token","patchKanbanTask","tasks","tasksWithArgAssignees","task","tasksWithoutArgAssignees","draft","index","t","handlePubSub","_topic","message","project","entityId","PubSub","_meta","user","accessGroups","convertAccessGroupsData","projectsAccess","getUserProjectsAccess","avatarUrl","name","useGetKanbanQuery","useGetKanbanProjectUsersQuery","injectedDashboardRestApi","build","projectInfo","projectQueries","_res","useGetProjectsInfoQuery"],"mappings":"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"}
1
+ {"version":3,"file":"getUserDashboard.es.js","sources":["../../../../../../src/api/queries/userDashboard/getUserDashboard.ts"],"sourcesContent":["import {\n gqlApi,\n GetKanbanProjectUsersQuery,\n GetKanbanQuery,\n ProjectModel,\n KanbanNode,\n Anatomy,\n} from '@shared/api/generated'\nimport { projectQueries } from '@shared/api/queries/project'\nimport { PubSub } from '@shared/util'\nimport convertAccessGroupsData, { AccessGroups } from './convertAccessGroupsData'\n\n// GetKanban response type\nexport type GetKanbanResponse = KanbanNode[]\n\n// GetKanbanProjectUsers response type\nexport type KanbanProjectUserNode = Omit<\n GetKanbanProjectUsersQuery['users']['edges'][0]['node'],\n 'accessGroups'\n> & { accessGroups: AccessGroups; projects: string[]; avatarUrl: string }\nexport type GetKanbanProjectUsersResponse = KanbanProjectUserNode[]\n\nimport { DefinitionsFromApi, OverrideResultType, TagTypesFromApi } from '@reduxjs/toolkit/query'\nimport getUserProjectsAccess from './getUserProjectsAccess'\nimport { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit'\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<\n Definitions,\n 'GetKanban' | 'GetKanbanTasks' | 'GetKanbanProjectUsers'\n> & {\n GetKanban: OverrideResultType<Definitions['GetKanban'], GetKanbanResponse>\n GetKanbanTasks: OverrideResultType<Definitions['GetKanbanTasks'], GetKanbanResponse>\n GetKanbanProjectUsers: OverrideResultType<\n Definitions['GetKanbanProjectUsers'],\n GetKanbanProjectUsersResponse\n >\n}\n\n// get edges and sort by task label || name\nconst transformKanban = (response: GetKanbanQuery) =>\n response.kanban.edges\n .map(({ node }) => node)\n .sort((a, b) => {\n const aLabel = a.label || a.name\n const bLabel = b.label || b.name\n return aLabel.localeCompare(bLabel)\n })\n\nconst provideKanbanTags = (result: GetKanbanResponse | undefined, _error: any, args: any) =>\n result?.length\n ? [\n { type: 'kanBanTask', id: 'LIST' },\n ...result.flatMap(({ id, projectName, assignees }) => [\n { type: 'task', id },\n { type: 'kanban', id: 'project-' + projectName },\n ...assignees.map((assignee) => ({ type: 'kanban', id: 'user-' + assignee })),\n ...assignees.map((assignee) => ({\n type: 'kanban',\n id: 'user-' + assignee + '-project-' + projectName,\n })),\n { type: 'kanban', id: JSON.stringify(args) },\n ]),\n ]\n : [{ type: 'kanBanTask', id: 'LIST' }]\n\nexport const getKanbanTasks = async (\n {\n projects = [],\n taskIds = [],\n }: {\n projects: string[]\n taskIds: string[]\n },\n dispatch: ThunkDispatch<any, any, UnknownAction>,\n) => {\n try {\n // get the task\n const response = await dispatch(\n enhancedDashboardGraphqlApi.endpoints.GetKanbanTasks.initiate(\n { projects, taskIds },\n { forceRefetch: true },\n ),\n )\n\n if (response.status === 'rejected' || !response.data) {\n console.error('No tasks found', taskIds)\n throw new Error(`No tasks found ${taskIds.join(', ')}`)\n }\n\n if (response.status !== 'fulfilled') return []\n // get tasks from response (usually only one task)\n return response.data\n } catch (error) {\n console.error(error)\n return []\n }\n}\n\nconst enhancedDashboardGraphqlApi = gqlApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n GetKanban: {\n transformResponse: transformKanban,\n providesTags: provideKanbanTags,\n async onCacheEntryAdded(\n { assignees = [], projects = [] } = {},\n { updateCachedData, cacheDataLoaded, cacheEntryRemoved, dispatch },\n ) {\n let token\n try {\n // wait for the initial query to resolve before proceeding\n await cacheDataLoaded\n\n const patchKanbanTask = async ({\n projects = [],\n taskIds = [],\n }: {\n projects: string[]\n taskIds: string[]\n }) => {\n const tasks = await getKanbanTasks({ projects, taskIds }, dispatch)\n\n // get all tasks that have been ADDED to the assignees\n const tasksWithArgAssignees = tasks.filter((task) =>\n task.assignees.some((assignee) => assignees?.includes(assignee)),\n )\n // get all tasks that have been REMOVED from the assignees\n const tasksWithoutArgAssignees = tasks.filter(\n (task) => !task.assignees.some((assignee) => assignees?.includes(assignee)),\n )\n\n // patch the kanban query by adding new tasks and remove old tasks\n updateCachedData((draft) => {\n // add new tasks\n tasksWithArgAssignees.forEach((task) => {\n const index = draft.findIndex((t) => t.id === task.id)\n if (index === -1) {\n draft.push(task)\n } else {\n // update the task\n draft[index] = task\n }\n })\n // remove old tasks\n tasksWithoutArgAssignees.forEach((task) => {\n const index = draft.findIndex((t) => t.id === task.id)\n if (index !== -1) {\n draft.splice(index, 1)\n }\n })\n })\n }\n\n const handlePubSub = async (_topic: string, message: any) => {\n const project = message.project as string\n // first check the project name as selected\n if (!projects?.includes(project)) return console.log('project not selected')\n // then get entity id\n const entityId = message.summary.entityId\n if (!entityId) return console.log('no entity id found')\n\n // patch task updates into kanban cache\n patchKanbanTask({\n taskIds: [entityId],\n projects: [project],\n })\n }\n\n // sub to websocket topic\n token = PubSub.subscribe('entity.task', handlePubSub)\n } catch (error) {\n console.error(error)\n // no-op in case `cacheEntryRemoved` resolves before `cacheDataLoaded`,\n // in which case `cacheDataLoaded` will throw\n }\n // cacheEntryRemoved will resolve when the cache subscription is no longer active\n await cacheEntryRemoved\n // perform cleanup steps once the `cacheEntryRemoved` promise resolves\n PubSub.unsubscribe(token)\n },\n // // there is only one cache for kanban\n // serializeQueryArgs: () => '',\n // // whenever the assignees or projects change, we need to refetch the one query\n // forceRefetch: (params) => {\n // const { currentArg, previousArg } = params\n // // if the assignees are different, we need to refetch the query\n // if (!isEqual(currentArg?.assignees, previousArg?.assignees)) return true\n // // if the projects are different, we need to refetch the query\n // if (!isEqual(currentArg?.projects, previousArg?.projects)) return true\n // return false\n // },\n },\n // same query as GetKanban but for specific tasks\n // used mainly for patching tasks into the kanban cache\n GetKanbanTasks: {\n transformResponse: transformKanban,\n providesTags: provideKanbanTags,\n },\n // get all users on all selected projects\n GetKanbanProjectUsers: {\n transformResponse: (response: GetKanbanProjectUsersQuery, _meta, { projects } = {}) =>\n response.users.edges.map(({ node: user }) => {\n const accessGroups = convertAccessGroupsData(user.accessGroups)\n // parse access groups json\n const isUser = !user.isManager && !user.isAdmin\n // get the projects that the user has access to\n let projectsAccess = isUser ? getUserProjectsAccess(accessGroups) : projects\n if (typeof projectsAccess === 'string' || !projectsAccess) projectsAccess = []\n\n // assignees select requires avatarUrl\n const avatarUrl = `/api/users/${user.name}/avatar`\n\n return {\n ...user,\n accessGroups: accessGroups,\n projects: projectsAccess,\n avatarUrl,\n }\n }),\n providesTags: (result) =>\n result?.length\n ? [\n { type: 'user', id: 'LIST' },\n ...result.map(({ name }) => ({ type: 'user', id: name })),\n ]\n : [{ type: 'user', id: 'LIST' }],\n },\n },\n})\n\nexport const { useGetKanbanQuery, useGetKanbanProjectUsersQuery } = enhancedDashboardGraphqlApi\n\ntype GetProjectsInfoParams = {\n projects: string[]\n}\n\nexport type ProjectModeWithAnatomy = ProjectModel & { anatomy?: Anatomy }\n\nexport type GetProjectsInfoResponse = { [projectName: string]: ProjectModeWithAnatomy | undefined }\n\nconst injectedDashboardRestApi = enhancedDashboardGraphqlApi.injectEndpoints({\n endpoints: (build) => ({\n getProjectsInfo: build.query<GetProjectsInfoResponse, GetProjectsInfoParams>({\n async queryFn({ projects = [] }, { dispatch }) {\n try {\n // get project info for each project\n const projectInfo: Record<string, ProjectModeWithAnatomy | undefined> = {}\n for (const project of projects) {\n const projectName = project as string\n // hopefully this will be cached\n // it also allows for different combination of projects but still use the cache\n const responses = [\n dispatch(\n projectQueries.endpoints.getProject.initiate(\n { projectName },\n { forceRefetch: true },\n ),\n ).unwrap(),\n dispatch(\n projectQueries.endpoints.getProjectAnatomy.initiate(\n { projectName },\n { forceRefetch: true },\n ),\n ).unwrap(),\n ]\n\n const response = await Promise.all(responses)\n\n const projectData = response[0] as ProjectModel | undefined\n const anatomyData = response[1] as Anatomy | undefined\n\n if (projectData) {\n projectInfo[projectName] = { ...projectData, anatomy: anatomyData }\n }\n }\n\n return { data: projectInfo, meta: undefined, error: undefined }\n } catch (error: any) {\n console.error(error)\n return { error, meta: undefined, data: undefined }\n }\n },\n providesTags: (_res, _error, { projects }) =>\n projects.map((projectName) => ({ type: 'project', id: projectName })),\n }),\n }),\n})\n\nexport const { useGetProjectsInfoQuery } = injectedDashboardRestApi\nexport { injectedDashboardRestApi as dashboardQueries }\n"],"names":["transformKanban","response","node","a","b","aLabel","bLabel","provideKanbanTags","result","_error","args","id","projectName","assignees","assignee","getKanbanTasks","projects","taskIds","dispatch","enhancedDashboardGraphqlApi","error","gqlApi","updateCachedData","cacheDataLoaded","cacheEntryRemoved","token","patchKanbanTask","tasks","tasksWithArgAssignees","task","tasksWithoutArgAssignees","draft","index","t","handlePubSub","_topic","message","project","entityId","PubSub","_meta","user","accessGroups","convertAccessGroupsData","projectsAccess","getUserProjectsAccess","avatarUrl","name","useGetKanbanQuery","useGetKanbanProjectUsersQuery","injectedDashboardRestApi","build","projectInfo","responses","projectQueries","projectData","anatomyData","_res","useGetProjectsInfoQuery"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("../../base/client.cjs.js");const C=require("../../generated/graphql.cjs.js");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");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 n=require("./getVersionsProductsUtils.cjs.js"),R=C.api.enhanceEndpoints({endpoints:{GetVersions:{transformResponse:n.transformVersionsResponse,providesTags:n.provideTagsForVersionsResult},GetVersionsByProductId:{transformResponse:n.transformVersionsResponse,providesTags:n.provideTagsForVersionsResult},GetProducts:{transformResponse:n.transformProductsResponse,providesTags:n.provideTagsForProductsResult}}}),V=250,T=1e3,x=10,I=R.injectEndpoints({endpoints:m=>({getVersionsInfinite:m.infiniteQuery({infiniteQueryOptions:{initialPageParam:{cursor:"",desc:!1},getNextPageParam:(g,h,a,s)=>{const e=g.pageInfo;if(!(!(a.desc?e!=null&&e.hasPreviousPage:e!=null&&e.hasNextPage)||!(e!=null&&e.endCursor)))return{cursor:e==null?void 0:e.endCursor,desc:a.desc}}},queryFn:async({queryArg:g,pageParam:h},a)=>{try{const{sortBy:s,desc:e,folderIds:p,...u}=g,{cursor:q}=h,t={...u};s?(t.sortBy=s,e?(t.before=q||void 0,t.last=V):(t.after=q||void 0,t.first=V)):(t.after=q||void 0,t.first=V),p&&p.length&&(t.folderIds=p);const r=await a.dispatch(R.endpoints.GetVersions.initiate(t,{forceRefetch:!0}));if(r.error)throw r.error;const i={versions:[],pageInfo:{hasNextPage:!1,endCursor:null,startCursor:null,hasPreviousPage:!1}};return{data:r.data||i}}catch(s){return console.error("Error in getVersionsInfiniteQuery queryFn:",s),{error:{status:"FETCH_ERROR",error:n.parseGQLErrorMessage(s.message)}}}},providesTags:n.provideTagsForVersionsInfinite}),getVersionsByProducts:m.query({queryFn:async(g,{dispatch:h,forced:a})=>{var E;const{productIds:s=[],desc:e,...p}=g,u=async(P,c)=>{const o={...p,productIds:[P]};return e?(c&&(o.before=c),o.last=T):(c&&(o.after=c),o.first=T),h(R.endpoints.GetVersionsByProductId.initiate(o,{forceRefetch:a}))},q=s.map(P=>u(P)),t=await Promise.allSettled(q),r=[],i=[];for(let P=0;P<t.length;P++){const c=t[P],o=s[P];if(c.status==="rejected"){console.error(`Error fetching versions for product ${o}:`,c.reason),i.push({productId:o,error:n.parseGQLErrorMessage(c.reason)});continue}const d=c.value;if(d.error){console.error(`Error fetching versions for product ${o}:`,d.error),i.push({productId:o,error:n.parseGQLErrorMessage(((E=d.error)==null?void 0:E.message)||"Unknown error")});continue}if(!d.data)continue;r.push(...d.data.versions);let v=d.data.pageInfo,G=1;for(;v&&G<x;){const f=e?v.hasPreviousPage:v.hasNextPage,y=v.endCursor;if(!f||!y)break;const l=await u(o,y);if(l.error){console.error(`Error fetching versions page ${G+1} for product ${o}:`,l.error),i.push({productId:o,error:l.error});break}if(!l.data)break;r.push(...l.data.versions),v=l.data.pageInfo,G++}}return i.length>0&&console.warn(`Partial success: ${i.length} of ${s.length} products failed to fetch versions`,i),{data:{versions:r,pageInfo:void 0,errors:i.length>0?i:void 0}}},providesTags:n.provideTagsForVersionsResult}),getProductsInfinite:m.infiniteQuery({infiniteQueryOptions:{initialPageParam:{cursor:"",desc:!1},getNextPageParam:(g,h,a,s)=>{const e=g.pageInfo;if(!(!(a.desc?e!=null&&e.hasPreviousPage:e!=null&&e.hasNextPage)||!(e!=null&&e.endCursor)))return{cursor:e==null?void 0:e.endCursor,desc:a.desc}}},queryFn:async({queryArg:g,pageParam:h},a)=>{let s;try{const{sortBy:e,desc:p,folderIds:u,...q}=g,{cursor:t}=h,r={...q};if(e?(r.sortBy=e,p?(r.before=t||void 0,r.last=V):(r.after=t||void 0,r.first=V)):(r.after=t||void 0,r.first=V),u&&u.length&&(r.folderIds=u),s=await a.dispatch(R.endpoints.GetProducts.initiate(r,{forceRefetch:!0})),s.error)throw s.error;const i={products:[],pageInfo:{hasNextPage:!1,endCursor:null,startCursor:null,hasPreviousPage:!1}};return{data:s.data||i}}catch(e){return console.error("Error in getProductsInfiniteQuery queryFn:",e),{error:{status:"FETCH_ERROR",error:n.parseGQLErrorMessage(e.message)}}}},providesTags:n.provideTagsForProductsInfinite}),getGroupedVersionsList:m.query({queryFn:async({projectName:g,groups:h,productFilter:a,taskFilter:s,folderIds:e,desc:p,sortBy:u,featuredOnly:q},t)=>{var r,i,E,P,c,o;try{const d=[];for(const f of h){const y=f.count||500,l={projectName:g,versionFilter:f.filter,productFilter:a,taskFilter:s,folderIds:e!=null&&e.length?e:void 0,sortBy:u,featuredOnly:q,group:f.value};p?l.last=y:l.first=y;const Q=t.dispatch(R.endpoints.GetVersions.initiate(l,{forceRefetch:!0}));d.push(Q)}const v=await Promise.all(d),G=[];for(const f of v){if(f.error)throw f.error;const y=(r=f.originalArgs)==null?void 0:r.group,l=((E=(i=f.data)==null?void 0:i.pageInfo)==null?void 0:E.hasNextPage)||((c=(P=f.data)==null?void 0:P.pageInfo)==null?void 0:c.hasPreviousPage)||!1,Q=((o=f.data)==null?void 0:o.versions.map((N,_,F)=>({...N,groups:[{value:y,hasNextPage:_===F.length-1&&l?y:void 0}]})))||[];G.push(...Q)}return{data:{versions:G}}}catch(d){return console.error("Error in getGroupedVersionsList queryFn:",d),{error:{status:"FETCH_ERROR",error:n.parseGQLErrorMessage(d.message)}}}},providesTags:n.provideTagsForVersionsResult})})}),{useGetVersionsQuery:O}=R,{useGetVersionsInfiniteInfiniteQuery:w,useGetVersionsByProductsQuery:B,useGetProductsInfiniteInfiniteQuery:U,useGetGroupedVersionsListQuery:L}=I;exports.VP_INFINITE_QUERY_COUNT=V;exports.enhancedVersionsPageApi=R;exports.injectedVersionsPageApi=I;exports.useGetGroupedVersionsListQuery=L;exports.useGetProductsInfiniteQuery=U;exports.useGetVersionsByProductsQuery=B;exports.useGetVersionsInfiniteQuery=w;exports.useGetVersionsQuery=O;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("../../base/client.cjs.js");const w=require("../../generated/graphql.cjs.js");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");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 n=require("./getVersionsProductsUtils.cjs.js"),R=w.api.enhanceEndpoints({endpoints:{GetVersions:{transformResponse:n.transformVersionsResponse,providesTags:n.provideTagsForVersionsResult},GetVersionsByProductId:{transformResponse:n.transformVersionsResponse,providesTags:n.provideTagsForVersionsResult},GetProducts:{transformResponse:n.transformProductsResponse,providesTags:n.provideTagsForProductsResult}}}),V=250,_=1e3,B=10,F=R.injectEndpoints({endpoints:Q=>({getVersionsInfinite:Q.infiniteQuery({infiniteQueryOptions:{initialPageParam:{cursor:"",desc:!1},getNextPageParam:(d,p,u,s)=>{const e=d.pageInfo;if(!(!(u.desc?e!=null&&e.hasPreviousPage:e!=null&&e.hasNextPage)||!(e!=null&&e.endCursor)))return{cursor:e==null?void 0:e.endCursor,desc:u.desc}}},queryFn:async({queryArg:d,pageParam:p},u)=>{try{const{sortBy:s,desc:e,folderIds:f,...i}=d,{cursor:P}=p,t={...i};s?(t.sortBy=s,e?(t.before=P||void 0,t.last=V):(t.after=P||void 0,t.first=V)):(t.after=P||void 0,t.first=V),f&&f.length&&(t.folderIds=f);const r=await u.dispatch(R.endpoints.GetVersions.initiate(t,{forceRefetch:!0}));if(r.error)throw r.error;const a={versions:[],pageInfo:{hasNextPage:!1,endCursor:null,startCursor:null,hasPreviousPage:!1}};return{data:r.data||a}}catch(s){return console.error("Error in getVersionsInfiniteQuery queryFn:",s),{error:{status:"FETCH_ERROR",error:n.parseGQLErrorMessage(s.message)}}}},providesTags:n.provideTagsForVersionsInfinite}),getVersionsByProducts:Q.query({queryFn:async(d,{dispatch:p,forced:u})=>{var T;const{productIds:s=[],desc:e,...f}=d,i=async(l,c)=>{const o={...f,productIds:[l]};return e?(c&&(o.before=c),o.last=_):(c&&(o.after=c),o.first=_),p(R.endpoints.GetVersionsByProductId.initiate(o,{forceRefetch:u}))},P=s.map(l=>i(l)),t=await Promise.allSettled(P),r=[],a=[];for(let l=0;l<t.length;l++){const c=t[l],o=s[l];if(c.status==="rejected"){console.error(`Error fetching versions for product ${o}:`,c.reason),a.push({productId:o,error:n.parseGQLErrorMessage(c.reason)});continue}const h=c.value;if(h.error){console.error(`Error fetching versions for product ${o}:`,h.error),a.push({productId:o,error:n.parseGQLErrorMessage(((T=h.error)==null?void 0:T.message)||"Unknown error")});continue}if(!h.data)continue;r.push(...h.data.versions);let y=h.data.pageInfo,G=1;for(;y&&G<B;){const v=e?y.hasPreviousPage:y.hasNextPage,I=y.endCursor;if(!v||!I)break;const q=await i(o,I);if(q.error){console.error(`Error fetching versions page ${G+1} for product ${o}:`,q.error),a.push({productId:o,error:q.error});break}if(!q.data)break;r.push(...q.data.versions),y=q.data.pageInfo,G++}}return a.length>0&&console.warn(`Partial success: ${a.length} of ${s.length} products failed to fetch versions`,a),{data:{versions:r,pageInfo:void 0,errors:a.length>0?a:void 0}}},providesTags:n.provideTagsForVersionsResult}),getProductsInfinite:Q.infiniteQuery({infiniteQueryOptions:{initialPageParam:{cursor:"",desc:!1},getNextPageParam:(d,p,u,s)=>{const e=d.pageInfo;if(!(!(u.desc?e!=null&&e.hasPreviousPage:e!=null&&e.hasNextPage)||!(e!=null&&e.endCursor)))return{cursor:e==null?void 0:e.endCursor,desc:u.desc}}},queryFn:async({queryArg:d,pageParam:p},u)=>{let s;try{const{sortBy:e,desc:f,folderIds:i,...P}=d,{cursor:t}=p,r={...P};if(e?(r.sortBy=e,f?(r.before=t||void 0,r.last=V):(r.after=t||void 0,r.first=V)):(r.after=t||void 0,r.first=V),i&&i.length&&(r.folderIds=i),s=await u.dispatch(R.endpoints.GetProducts.initiate(r,{forceRefetch:!0})),s.error)throw s.error;const a={products:[],pageInfo:{hasNextPage:!1,endCursor:null,startCursor:null,hasPreviousPage:!1}};return{data:s.data||a}}catch(e){return console.error("Error in getProductsInfiniteQuery queryFn:",e),{error:{status:"FETCH_ERROR",error:n.parseGQLErrorMessage(e.message)}}}},providesTags:n.provideTagsForProductsInfinite}),getGroupedVersionsList:Q.query({queryFn:async({projectName:d,groups:p,groupFilterKey:u="versionFilter",versionFilter:s,productFilter:e,taskFilter:f,folderIds:i,desc:P,sortBy:t,featuredOnly:r,hasReviewables:a},T)=>{var l,c,o,h,y,G;try{const v=[];for(const g of p){const E=g.count||500,m={projectName:d,productFilter:e,taskFilter:f,versionFilter:s,[u]:g.filter,folderIds:i!=null&&i.length?i:void 0,sortBy:t,featuredOnly:r,hasReviewables:a,group:g.value};P?m.last=E:m.first=E;const N=T.dispatch(R.endpoints.GetVersions.initiate(m,{forceRefetch:!0}));v.push(N)}const I=await Promise.all(v),q=[];for(const g of I){if(g.error)throw g.error;const E=(l=g.originalArgs)==null?void 0:l.group,m=((o=(c=g.data)==null?void 0:c.pageInfo)==null?void 0:o.hasNextPage)||((y=(h=g.data)==null?void 0:h.pageInfo)==null?void 0:y.hasPreviousPage)||!1,N=((G=g.data)==null?void 0:G.versions.map((C,x,O)=>({...C,groups:[{value:E,hasNextPage:x===O.length-1&&m?E:void 0}]})))||[];q.push(...N)}return{data:{versions:q}}}catch(v){return console.error("Error in getGroupedVersionsList queryFn:",v),{error:{status:"FETCH_ERROR",error:n.parseGQLErrorMessage(v.message)}}}},providesTags:n.provideTagsForVersionsResult})})}),{useGetVersionsQuery:U}=R,{useGetVersionsInfiniteInfiniteQuery:L,useGetVersionsByProductsQuery:b,useGetProductsInfiniteInfiniteQuery:A,useGetGroupedVersionsListQuery:M}=F;exports.VP_INFINITE_QUERY_COUNT=V;exports.enhancedVersionsPageApi=R;exports.injectedVersionsPageApi=F;exports.useGetGroupedVersionsListQuery=M;exports.useGetProductsInfiniteQuery=A;exports.useGetVersionsByProductsQuery=b;exports.useGetVersionsInfiniteQuery=L;exports.useGetVersionsQuery=U;
2
2
  //# sourceMappingURL=getVersionsProducts.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getVersionsProducts.cjs.js","sources":["../../../../../../src/api/queries/versions/getVersionsProducts.ts"],"sourcesContent":["// QUERIES FOR THE VERSIONS PAGE, FETCHING AND UPDATING DATA\n// Uses a separate graphqlVersionsApi for increased IDE speed\n\n// There are 4 main fetch requests:\n\n// Versions Only:\n// 1. GetVersions - fetches all versions in the project for given filtering and with pagination\n\n// Products and Versions (stacked):\n// 2. GetProducts - fetches all products in the project based on product and version filtering\n// 3. GetVersionsByProducts - when a product is expanded, fetches all versions for the products that are expanded. Uses getVersionsByProductId for each parent id. (uses queryFn)\n// 4. GetVersionsByProductId - get all versions for a specific product. Used by getVersionsByProducts only.\n\n// VersionFragment is used in all version queries to ensure consistent data structure\n\nimport {\n DefinitionsFromApi,\n FetchBaseQueryError,\n InfiniteData,\n OverrideResultType,\n TagTypesFromApi,\n} from '@reduxjs/toolkit/query'\nimport {\n VpFolderFragment,\n GetProductsQuery,\n GetProductsQueryVariables,\n GetVersionsByProductIdQueryVariables,\n GetVersionsQuery,\n GetVersionsQueryVariables,\n gqlApi,\n PageInfo,\n} from '@shared/api/generated'\nimport {\n parseGQLErrorMessage,\n provideTagsForProductsInfinite,\n provideTagsForProductsResult,\n provideTagsForVersionsInfinite,\n provideTagsForVersionsResult,\n transformProductsResponse,\n transformVersionsResponse,\n} from './getVersionsProductsUtils'\n\n// Query result types\nexport type FolderAttribNode = VpFolderFragment & {\n attrib: Record<string, any> // parsed from allAttrib JSON string\n}\nexport type VersionNodeRAW = GetVersionsQuery['project']['versions']['edges'][0]['node']\nexport type VersionNode = VersionNodeRAW & {\n attrib: Record<string, any> // parsed from allAttrib JSON string\n product: VersionNodeRAW['product'] & {\n attrib: Record<string, any> // parsed from allAttrib JSON string\n folder: FolderAttribNode // folder with parsed attribs\n }\n groups?: { value?: string; hasNextPage?: string }[] // grouping metadata\n}\nexport type ProductNodeRAW = GetProductsQuery['project']['products']['edges'][0]['node']\nexport type ProductNode = Omit<ProductNodeRAW, 'versions'> & {\n attrib: Record<string, any> // parsed from allAttrib JSON string\n featuredVersion?: VersionNode | null // added separately\n folder: FolderAttribNode // folder with parsed attribs\n versions: {\n id: string\n name: string\n version: number\n heroVersionId?: string | null\n }[] // versions with isHero flag\n}\n\nexport type GetVersionsResult = {\n pageInfo?: PageInfo\n versions: VersionNode[]\n errors?: Array<{ productId: string; error: string }>\n}\n\n// for infinite query args\nexport type GetVersionsArgs = Omit<GetVersionsQueryVariables, 'cursor'> & {\n desc?: boolean // sort direction\n}\n\n// for paginated queries in infinite query\ntype VersionsPageParam = {\n cursor: string\n desc?: boolean\n}\n\nexport type GetProductsArgs = Omit<GetProductsQueryVariables, 'cursor' | 'versionIds'> & {\n desc?: boolean // sort direction\n}\n\ntype ProductsPageParam = {\n cursor: string\n desc?: boolean\n}\n\ntype GetVersionsByProductsArgs = GetVersionsByProductIdQueryVariables & {\n productIds: string[]\n desc?: boolean\n}\n\nexport type GetGroupedVersionsListArgs = {\n projectName: string\n groups: { filter: string; count?: number | null; value: string }[]\n productFilter?: string\n taskFilter?: string\n folderIds?: string[]\n desc?: boolean\n sortBy?: string\n featuredOnly?: string[]\n}\n\nexport type GetGroupedVersionsListResult = {\n versions: VersionNode[]\n}\n\nexport type VersionInfiniteResult = InfiniteData<GetVersionsResult, VersionsPageParam> | undefined\n\nexport type ProductInfiniteResult = InfiniteData<GetProductsResult, ProductsPageParam> | undefined\n\nexport type GetProductsResult = {\n pageInfo: PageInfo\n products: ProductNode[]\n}\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<Definitions, 'GetVersions'> & {\n GetVersions: OverrideResultType<Definitions['GetVersions'], GetVersionsResult>\n GetVersionsByProductId: OverrideResultType<Definitions['GetVersions'], GetVersionsResult>\n GetProducts: OverrideResultType<Definitions['GetProducts'], GetProductsResult>\n}\n\nconst enhancedVersionsPageApi = gqlApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n // used by both stacked and non-stacked views\n GetVersions: {\n transformResponse: transformVersionsResponse,\n providesTags: provideTagsForVersionsResult,\n },\n // used by getVersionsByProducts only\n GetVersionsByProductId: {\n transformResponse: transformVersionsResponse,\n providesTags: provideTagsForVersionsResult,\n },\n // used by getProductsInfinite only\n GetProducts: {\n transformResponse: transformProductsResponse,\n providesTags: provideTagsForProductsResult,\n },\n },\n})\n\nexport const VP_INFINITE_QUERY_COUNT = 250 // Number of items to fetch per page\nconst VERSIONS_BY_PRODUCT_ID_QUERY_COUNT = 1000 // max number of versions to fetch per product id\nconst MAX_PAGES_PER_PRODUCT = 10 // Hard cutoff to prevent infinite loops\n\nconst injectedVersionsPageApi = enhancedVersionsPageApi.injectEndpoints({\n endpoints: (build) => ({\n // enhance GetVersions with an infinite query\n getVersionsInfinite: build.infiniteQuery<GetVersionsResult, GetVersionsArgs, VersionsPageParam>(\n {\n infiniteQueryOptions: {\n initialPageParam: { cursor: '', desc: false },\n // Calculate the next page param based on current page response and params\n getNextPageParam: (lastPage, _allPages, lastPageParam, _allPageParams) => {\n // Use the endCursor from the query as the next page param\n const pageInfo = lastPage.pageInfo\n const desc = lastPageParam.desc\n const hasNextPage = desc ? pageInfo?.hasPreviousPage : pageInfo?.hasNextPage\n\n if (!hasNextPage || !pageInfo?.endCursor) return undefined\n\n return {\n cursor: pageInfo?.endCursor,\n desc: lastPageParam.desc,\n }\n },\n },\n queryFn: async ({ queryArg, pageParam }, api) => {\n try {\n const { sortBy, desc, folderIds, ...rest } = queryArg\n const { cursor } = pageParam\n\n // Build the query parameters for GetVersions query\n const queryParams: any = {\n ...rest,\n }\n\n // Add cursor-based pagination\n if (sortBy) {\n queryParams.sortBy = sortBy\n if (desc) {\n queryParams.before = cursor || undefined\n queryParams.last = VP_INFINITE_QUERY_COUNT\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = VP_INFINITE_QUERY_COUNT\n }\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = VP_INFINITE_QUERY_COUNT\n }\n\n // if folderIds have a length, add them to the query params\n if (folderIds && folderIds.length) {\n queryParams.folderIds = folderIds\n }\n\n // Call the existing GetVersions gql query\n const result = await api.dispatch(\n enhancedVersionsPageApi.endpoints.GetVersions.initiate(queryParams, {\n forceRefetch: true,\n }),\n )\n\n if (result.error) throw result.error\n const fallback = {\n versions: [],\n pageInfo: {\n hasNextPage: false,\n endCursor: null,\n startCursor: null,\n hasPreviousPage: false,\n },\n }\n\n // Return the versions directly as required by the infinite query format\n return {\n data: result.data || fallback,\n }\n } catch (e: any) {\n console.error('Error in getVersionsInfiniteQuery queryFn:', e)\n return {\n error: {\n status: 'FETCH_ERROR',\n error: parseGQLErrorMessage(e.message),\n } as FetchBaseQueryError,\n }\n }\n },\n providesTags: provideTagsForVersionsInfinite,\n },\n ),\n\n // custom query function that fetches versions by multiple parent ids -not infinite and gets 1000 versions max\n getVersionsByProducts: build.query<GetVersionsResult, GetVersionsByProductsArgs>({\n queryFn: async (args, { dispatch, forced }) => {\n const { productIds = [], desc, ...rest } = args\n\n // Helper function to fetch a page of versions\n const fetchVersionsPage = async (productId: string, cursor?: string) => {\n const queryParams: GetVersionsByProductIdQueryVariables = {\n ...rest,\n productIds: [productId],\n }\n\n if (desc) {\n if (cursor) queryParams.before = cursor\n queryParams.last = VERSIONS_BY_PRODUCT_ID_QUERY_COUNT\n } else {\n if (cursor) queryParams.after = cursor\n queryParams.first = VERSIONS_BY_PRODUCT_ID_QUERY_COUNT\n }\n\n return dispatch(\n enhancedVersionsPageApi.endpoints.GetVersionsByProductId.initiate(queryParams, {\n forceRefetch: forced,\n }),\n )\n }\n\n // for each product id, call getVersionsByProductId\n const promises = productIds.map((productId) => fetchVersionsPage(productId))\n\n // wait for all requests to settle (either fulfilled or rejected)\n const settledResults = await Promise.allSettled(promises)\n\n // Collect all versions from initial queries\n const allVersions: VersionNode[] = []\n const errors: Array<{ productId: string; error: any }> = []\n\n // Check each result for additional pages and fetch them if needed\n for (let i = 0; i < settledResults.length; i++) {\n const settledResult = settledResults[i]\n const productId = productIds[i]\n\n // Handle rejected promises\n if (settledResult.status === 'rejected') {\n console.error(`Error fetching versions for product ${productId}:`, settledResult.reason)\n errors.push({ productId, error: parseGQLErrorMessage(settledResult.reason) })\n continue\n }\n\n // Handle errors in fulfilled promises\n const result = settledResult.value\n if (result.error) {\n console.error(`Error fetching versions for product ${productId}:`, result.error)\n errors.push({\n productId,\n // @ts-expect-error - message\n error: parseGQLErrorMessage(result.error?.message || 'Unknown error'),\n })\n continue\n }\n\n if (!result.data) continue\n\n // Add initial page versions\n allVersions.push(...result.data.versions)\n\n // Check if there are more pages to fetch\n let pageInfo = result.data.pageInfo\n let pageCount = 1\n\n while (pageInfo && pageCount < MAX_PAGES_PER_PRODUCT) {\n const hasNextPage = desc ? pageInfo.hasPreviousPage : pageInfo.hasNextPage\n const cursor = pageInfo.endCursor\n\n if (!hasNextPage || !cursor) break\n\n // Fetch next page\n const nextPageResult = await fetchVersionsPage(productId, cursor)\n\n if (nextPageResult.error) {\n console.error(\n `Error fetching versions page ${pageCount + 1} for product ${productId}:`,\n nextPageResult.error,\n )\n errors.push({ productId, error: nextPageResult.error })\n break\n }\n\n if (!nextPageResult.data) break\n\n allVersions.push(...nextPageResult.data.versions)\n pageInfo = nextPageResult.data.pageInfo\n pageCount++\n }\n }\n\n // If some requests failed but we have data, log warning but return successful data\n if (errors.length > 0) {\n console.warn(\n `Partial success: ${errors.length} of ${productIds.length} products failed to fetch versions`,\n errors,\n )\n }\n\n return {\n data: {\n versions: allVersions,\n pageInfo: undefined, // pageInfo is undefined as we've flattened multiple queries\n errors: errors.length > 0 ? errors : undefined,\n },\n }\n },\n providesTags: provideTagsForVersionsResult,\n }),\n\n // enhance GetProducts with an infinite query\n getProductsInfinite: build.infiniteQuery<GetProductsResult, GetProductsArgs, ProductsPageParam>(\n {\n infiniteQueryOptions: {\n initialPageParam: { cursor: '', desc: false },\n // Calculate the next page param based on current page response and params\n getNextPageParam: (lastPage, _allPages, lastPageParam, _allPageParams) => {\n // Use the endCursor from the query as the next page param\n const pageInfo = lastPage.pageInfo\n const desc = lastPageParam.desc\n const hasNextPage = desc ? pageInfo?.hasPreviousPage : pageInfo?.hasNextPage\n\n if (!hasNextPage || !pageInfo?.endCursor) return undefined\n\n return {\n cursor: pageInfo?.endCursor,\n desc: lastPageParam.desc,\n }\n },\n },\n queryFn: async ({ queryArg, pageParam }, api) => {\n let result\n try {\n const { sortBy, desc, folderIds, ...rest } = queryArg\n const { cursor } = pageParam\n\n // Build the query parameters for GetProducts query\n const queryParams: any = {\n ...rest,\n }\n\n // Add cursor-based pagination\n if (sortBy) {\n queryParams.sortBy = sortBy\n if (desc) {\n queryParams.before = cursor || undefined\n queryParams.last = VP_INFINITE_QUERY_COUNT\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = VP_INFINITE_QUERY_COUNT\n }\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = VP_INFINITE_QUERY_COUNT\n }\n\n // if folderIds have a length, add them to the query params\n if (folderIds && folderIds.length) {\n queryParams.folderIds = folderIds\n }\n\n // Call the existing GetProducts gql query\n result = await api.dispatch(\n enhancedVersionsPageApi.endpoints.GetProducts.initiate(queryParams, {\n forceRefetch: true,\n }),\n )\n\n if (result.error) throw result.error\n const fallback = {\n products: [],\n pageInfo: {\n hasNextPage: false,\n endCursor: null,\n startCursor: null,\n hasPreviousPage: false,\n },\n }\n\n // Return the products directly as required by the infinite query format\n return {\n data: result.data || fallback,\n }\n } catch (e: any) {\n console.error('Error in getProductsInfiniteQuery queryFn:', e)\n return {\n error: {\n status: 'FETCH_ERROR',\n error: parseGQLErrorMessage(e.message),\n } as FetchBaseQueryError,\n }\n }\n },\n providesTags: provideTagsForProductsInfinite,\n },\n ),\n\n // Grouped versions query - fetches versions for multiple group filters\n getGroupedVersionsList: build.query<GetGroupedVersionsListResult, GetGroupedVersionsListArgs>({\n queryFn: async (\n { projectName, groups, productFilter, taskFilter, folderIds, desc, sortBy, featuredOnly },\n api,\n ) => {\n try {\n const promises = []\n for (const group of groups) {\n const count = group.count || 500\n\n const queryParams: GetVersionsQueryVariables = {\n projectName,\n versionFilter: group.filter,\n productFilter,\n taskFilter,\n folderIds: folderIds?.length ? folderIds : undefined,\n sortBy: sortBy,\n featuredOnly,\n // @ts-expect-error - group param used later on\n group: group.value,\n }\n\n if (desc) {\n queryParams.last = count\n } else {\n queryParams.first = count\n }\n\n const promise = api.dispatch(\n enhancedVersionsPageApi.endpoints.GetVersions.initiate(queryParams, {\n forceRefetch: true,\n }),\n )\n promises.push(promise)\n }\n\n const result = await Promise.all(promises)\n const versions: VersionNode[] = []\n\n for (const res of result) {\n if (res.error) throw res.error\n\n // get group value\n // @ts-expect-error - we know group does exist on res.originalArgs\n const groupValue = res.originalArgs?.group as string\n\n const hasNextPage =\n res.data?.pageInfo?.hasNextPage || res.data?.pageInfo?.hasPreviousPage || false\n\n const groupVersions =\n res.data?.versions.map((version, i, a) => ({\n ...version,\n groups: [\n {\n value: groupValue,\n hasNextPage: i === a.length - 1 && hasNextPage ? groupValue : undefined,\n },\n ],\n })) || []\n\n versions.push(...groupVersions)\n }\n\n return {\n data: {\n versions,\n },\n }\n } catch (error: any) {\n console.error('Error in getGroupedVersionsList queryFn:', error)\n return {\n error: {\n status: 'FETCH_ERROR',\n error: parseGQLErrorMessage(error.message),\n } as FetchBaseQueryError,\n }\n }\n },\n providesTags: provideTagsForVersionsResult,\n }),\n }),\n})\n\n// export gql endpoints\nexport const { useGetVersionsQuery } = enhancedVersionsPageApi\n// export custom queries\nexport const {\n useGetVersionsInfiniteInfiniteQuery: useGetVersionsInfiniteQuery,\n useGetVersionsByProductsQuery,\n useGetProductsInfiniteInfiniteQuery: useGetProductsInfiniteQuery,\n useGetGroupedVersionsListQuery,\n} = injectedVersionsPageApi\n\n// export API instances for cache manipulation\nexport { enhancedVersionsPageApi, injectedVersionsPageApi }\n"],"names":["enhancedVersionsPageApi","gqlApi","transformVersionsResponse","provideTagsForVersionsResult","transformProductsResponse","provideTagsForProductsResult","VP_INFINITE_QUERY_COUNT","VERSIONS_BY_PRODUCT_ID_QUERY_COUNT","MAX_PAGES_PER_PRODUCT","injectedVersionsPageApi","build","lastPage","_allPages","lastPageParam","_allPageParams","pageInfo","queryArg","pageParam","api","sortBy","desc","folderIds","rest","cursor","queryParams","result","fallback","e","parseGQLErrorMessage","provideTagsForVersionsInfinite","args","dispatch","forced","productIds","fetchVersionsPage","productId","promises","settledResults","allVersions","errors","i","settledResult","_a","pageCount","hasNextPage","nextPageResult","provideTagsForProductsInfinite","projectName","groups","productFilter","taskFilter","featuredOnly","group","count","promise","versions","res","groupValue","_c","_b","_e","_d","groupVersions","_f","version","a","error","useGetVersionsQuery","useGetVersionsInfiniteQuery","useGetVersionsByProductsQuery","useGetProductsInfiniteQuery","useGetGroupedVersionsListQuery"],"mappings":"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"}
1
+ {"version":3,"file":"getVersionsProducts.cjs.js","sources":["../../../../../../src/api/queries/versions/getVersionsProducts.ts"],"sourcesContent":["// QUERIES FOR THE VERSIONS PAGE, FETCHING AND UPDATING DATA\n// Uses a separate graphqlVersionsApi for increased IDE speed\n\n// There are 4 main fetch requests:\n\n// Versions Only:\n// 1. GetVersions - fetches all versions in the project for given filtering and with pagination\n\n// Products and Versions (stacked):\n// 2. GetProducts - fetches all products in the project based on product and version filtering\n// 3. GetVersionsByProducts - when a product is expanded, fetches all versions for the products that are expanded. Uses getVersionsByProductId for each parent id. (uses queryFn)\n// 4. GetVersionsByProductId - get all versions for a specific product. Used by getVersionsByProducts only.\n\n// VersionFragment is used in all version queries to ensure consistent data structure\n\nimport {\n DefinitionsFromApi,\n FetchBaseQueryError,\n InfiniteData,\n OverrideResultType,\n TagTypesFromApi,\n} from '@reduxjs/toolkit/query'\nimport {\n VpFolderFragment,\n GetProductsQuery,\n GetProductsQueryVariables,\n GetVersionsByProductIdQueryVariables,\n GetVersionsQuery,\n GetVersionsQueryVariables,\n gqlApi,\n PageInfo,\n} from '@shared/api/generated'\nimport {\n parseGQLErrorMessage,\n provideTagsForProductsInfinite,\n provideTagsForProductsResult,\n provideTagsForVersionsInfinite,\n provideTagsForVersionsResult,\n transformProductsResponse,\n transformVersionsResponse,\n} from './getVersionsProductsUtils'\n\n// Query result types\nexport type FolderAttribNode = VpFolderFragment & {\n attrib: Record<string, any> // parsed from allAttrib JSON string\n}\nexport type VersionNodeRAW = GetVersionsQuery['project']['versions']['edges'][0]['node']\nexport type VersionNode = VersionNodeRAW & {\n attrib: Record<string, any> // parsed from allAttrib JSON string\n product: VersionNodeRAW['product'] & {\n attrib: Record<string, any> // parsed from allAttrib JSON string\n folder: FolderAttribNode // folder with parsed attribs\n }\n groups?: { value?: string; hasNextPage?: string }[] // grouping metadata\n}\nexport type ProductNodeRAW = GetProductsQuery['project']['products']['edges'][0]['node']\nexport type ProductNode = Omit<ProductNodeRAW, 'versions'> & {\n attrib: Record<string, any> // parsed from allAttrib JSON string\n featuredVersion?: VersionNode | null // added separately\n folder: FolderAttribNode // folder with parsed attribs\n versions: {\n id: string\n name: string\n version: number\n heroVersionId?: string | null\n }[] // versions with isHero flag\n}\n\nexport type GetVersionsResult = {\n pageInfo?: PageInfo\n versions: VersionNode[]\n errors?: Array<{ productId: string; error: string }>\n}\n\n// for infinite query args\nexport type GetVersionsArgs = Omit<GetVersionsQueryVariables, 'cursor'> & {\n desc?: boolean // sort direction\n}\n\n// for paginated queries in infinite query\ntype VersionsPageParam = {\n cursor: string\n desc?: boolean\n}\n\nexport type GetProductsArgs = Omit<GetProductsQueryVariables, 'cursor' | 'versionIds'> & {\n desc?: boolean // sort direction\n}\n\ntype ProductsPageParam = {\n cursor: string\n desc?: boolean\n}\n\ntype GetVersionsByProductsArgs = GetVersionsByProductIdQueryVariables & {\n productIds: string[]\n desc?: boolean\n}\n\nexport type GetGroupedVersionsListArgs = {\n projectName: string\n groups: { filter: string; count?: number | null; value: string }[]\n groupFilterKey?: string\n versionFilter?: string\n productFilter?: string\n taskFilter?: string\n folderIds?: string[]\n desc?: boolean\n sortBy?: string\n featuredOnly?: string[]\n hasReviewables?: boolean\n}\n\nexport type GetGroupedVersionsListResult = {\n versions: VersionNode[]\n}\n\nexport type VersionInfiniteResult = InfiniteData<GetVersionsResult, VersionsPageParam> | undefined\n\nexport type ProductInfiniteResult = InfiniteData<GetProductsResult, ProductsPageParam> | undefined\n\nexport type GetProductsResult = {\n pageInfo: PageInfo\n products: ProductNode[]\n}\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<Definitions, 'GetVersions'> & {\n GetVersions: OverrideResultType<Definitions['GetVersions'], GetVersionsResult>\n GetVersionsByProductId: OverrideResultType<Definitions['GetVersions'], GetVersionsResult>\n GetProducts: OverrideResultType<Definitions['GetProducts'], GetProductsResult>\n}\n\nconst enhancedVersionsPageApi = gqlApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n // used by both stacked and non-stacked views\n GetVersions: {\n transformResponse: transformVersionsResponse,\n providesTags: provideTagsForVersionsResult,\n },\n // used by getVersionsByProducts only\n GetVersionsByProductId: {\n transformResponse: transformVersionsResponse,\n providesTags: provideTagsForVersionsResult,\n },\n // used by getProductsInfinite only\n GetProducts: {\n transformResponse: transformProductsResponse,\n providesTags: provideTagsForProductsResult,\n },\n },\n})\n\nexport const VP_INFINITE_QUERY_COUNT = 250 // Number of items to fetch per page\nconst VERSIONS_BY_PRODUCT_ID_QUERY_COUNT = 1000 // max number of versions to fetch per product id\nconst MAX_PAGES_PER_PRODUCT = 10 // Hard cutoff to prevent infinite loops\n\nconst injectedVersionsPageApi = enhancedVersionsPageApi.injectEndpoints({\n endpoints: (build) => ({\n // enhance GetVersions with an infinite query\n getVersionsInfinite: build.infiniteQuery<GetVersionsResult, GetVersionsArgs, VersionsPageParam>(\n {\n infiniteQueryOptions: {\n initialPageParam: { cursor: '', desc: false },\n // Calculate the next page param based on current page response and params\n getNextPageParam: (lastPage, _allPages, lastPageParam, _allPageParams) => {\n // Use the endCursor from the query as the next page param\n const pageInfo = lastPage.pageInfo\n const desc = lastPageParam.desc\n const hasNextPage = desc ? pageInfo?.hasPreviousPage : pageInfo?.hasNextPage\n\n if (!hasNextPage || !pageInfo?.endCursor) return undefined\n\n return {\n cursor: pageInfo?.endCursor,\n desc: lastPageParam.desc,\n }\n },\n },\n queryFn: async ({ queryArg, pageParam }, api) => {\n try {\n const { sortBy, desc, folderIds, ...rest } = queryArg\n const { cursor } = pageParam\n\n // Build the query parameters for GetVersions query\n const queryParams: any = {\n ...rest,\n }\n\n // Add cursor-based pagination\n if (sortBy) {\n queryParams.sortBy = sortBy\n if (desc) {\n queryParams.before = cursor || undefined\n queryParams.last = VP_INFINITE_QUERY_COUNT\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = VP_INFINITE_QUERY_COUNT\n }\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = VP_INFINITE_QUERY_COUNT\n }\n\n // if folderIds have a length, add them to the query params\n if (folderIds && folderIds.length) {\n queryParams.folderIds = folderIds\n }\n\n // Call the existing GetVersions gql query\n const result = await api.dispatch(\n enhancedVersionsPageApi.endpoints.GetVersions.initiate(queryParams, {\n forceRefetch: true,\n }),\n )\n\n if (result.error) throw result.error\n const fallback = {\n versions: [],\n pageInfo: {\n hasNextPage: false,\n endCursor: null,\n startCursor: null,\n hasPreviousPage: false,\n },\n }\n\n // Return the versions directly as required by the infinite query format\n return {\n data: result.data || fallback,\n }\n } catch (e: any) {\n console.error('Error in getVersionsInfiniteQuery queryFn:', e)\n return {\n error: {\n status: 'FETCH_ERROR',\n error: parseGQLErrorMessage(e.message),\n } as FetchBaseQueryError,\n }\n }\n },\n providesTags: provideTagsForVersionsInfinite,\n },\n ),\n\n // custom query function that fetches versions by multiple parent ids -not infinite and gets 1000 versions max\n getVersionsByProducts: build.query<GetVersionsResult, GetVersionsByProductsArgs>({\n queryFn: async (args, { dispatch, forced }) => {\n const { productIds = [], desc, ...rest } = args\n\n // Helper function to fetch a page of versions\n const fetchVersionsPage = async (productId: string, cursor?: string) => {\n const queryParams: GetVersionsByProductIdQueryVariables = {\n ...rest,\n productIds: [productId],\n }\n\n if (desc) {\n if (cursor) queryParams.before = cursor\n queryParams.last = VERSIONS_BY_PRODUCT_ID_QUERY_COUNT\n } else {\n if (cursor) queryParams.after = cursor\n queryParams.first = VERSIONS_BY_PRODUCT_ID_QUERY_COUNT\n }\n\n return dispatch(\n enhancedVersionsPageApi.endpoints.GetVersionsByProductId.initiate(queryParams, {\n forceRefetch: forced,\n }),\n )\n }\n\n // for each product id, call getVersionsByProductId\n const promises = productIds.map((productId) => fetchVersionsPage(productId))\n\n // wait for all requests to settle (either fulfilled or rejected)\n const settledResults = await Promise.allSettled(promises)\n\n // Collect all versions from initial queries\n const allVersions: VersionNode[] = []\n const errors: Array<{ productId: string; error: any }> = []\n\n // Check each result for additional pages and fetch them if needed\n for (let i = 0; i < settledResults.length; i++) {\n const settledResult = settledResults[i]\n const productId = productIds[i]\n\n // Handle rejected promises\n if (settledResult.status === 'rejected') {\n console.error(`Error fetching versions for product ${productId}:`, settledResult.reason)\n errors.push({ productId, error: parseGQLErrorMessage(settledResult.reason) })\n continue\n }\n\n // Handle errors in fulfilled promises\n const result = settledResult.value\n if (result.error) {\n console.error(`Error fetching versions for product ${productId}:`, result.error)\n errors.push({\n productId,\n // @ts-expect-error - message\n error: parseGQLErrorMessage(result.error?.message || 'Unknown error'),\n })\n continue\n }\n\n if (!result.data) continue\n\n // Add initial page versions\n allVersions.push(...result.data.versions)\n\n // Check if there are more pages to fetch\n let pageInfo = result.data.pageInfo\n let pageCount = 1\n\n while (pageInfo && pageCount < MAX_PAGES_PER_PRODUCT) {\n const hasNextPage = desc ? pageInfo.hasPreviousPage : pageInfo.hasNextPage\n const cursor = pageInfo.endCursor\n\n if (!hasNextPage || !cursor) break\n\n // Fetch next page\n const nextPageResult = await fetchVersionsPage(productId, cursor)\n\n if (nextPageResult.error) {\n console.error(\n `Error fetching versions page ${pageCount + 1} for product ${productId}:`,\n nextPageResult.error,\n )\n errors.push({ productId, error: nextPageResult.error })\n break\n }\n\n if (!nextPageResult.data) break\n\n allVersions.push(...nextPageResult.data.versions)\n pageInfo = nextPageResult.data.pageInfo\n pageCount++\n }\n }\n\n // If some requests failed but we have data, log warning but return successful data\n if (errors.length > 0) {\n console.warn(\n `Partial success: ${errors.length} of ${productIds.length} products failed to fetch versions`,\n errors,\n )\n }\n\n return {\n data: {\n versions: allVersions,\n pageInfo: undefined, // pageInfo is undefined as we've flattened multiple queries\n errors: errors.length > 0 ? errors : undefined,\n },\n }\n },\n providesTags: provideTagsForVersionsResult,\n }),\n\n // enhance GetProducts with an infinite query\n getProductsInfinite: build.infiniteQuery<GetProductsResult, GetProductsArgs, ProductsPageParam>(\n {\n infiniteQueryOptions: {\n initialPageParam: { cursor: '', desc: false },\n // Calculate the next page param based on current page response and params\n getNextPageParam: (lastPage, _allPages, lastPageParam, _allPageParams) => {\n // Use the endCursor from the query as the next page param\n const pageInfo = lastPage.pageInfo\n const desc = lastPageParam.desc\n const hasNextPage = desc ? pageInfo?.hasPreviousPage : pageInfo?.hasNextPage\n\n if (!hasNextPage || !pageInfo?.endCursor) return undefined\n\n return {\n cursor: pageInfo?.endCursor,\n desc: lastPageParam.desc,\n }\n },\n },\n queryFn: async ({ queryArg, pageParam }, api) => {\n let result\n try {\n const { sortBy, desc, folderIds, ...rest } = queryArg\n const { cursor } = pageParam\n\n // Build the query parameters for GetProducts query\n const queryParams: any = {\n ...rest,\n }\n\n // Add cursor-based pagination\n if (sortBy) {\n queryParams.sortBy = sortBy\n if (desc) {\n queryParams.before = cursor || undefined\n queryParams.last = VP_INFINITE_QUERY_COUNT\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = VP_INFINITE_QUERY_COUNT\n }\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = VP_INFINITE_QUERY_COUNT\n }\n\n // if folderIds have a length, add them to the query params\n if (folderIds && folderIds.length) {\n queryParams.folderIds = folderIds\n }\n\n // Call the existing GetProducts gql query\n result = await api.dispatch(\n enhancedVersionsPageApi.endpoints.GetProducts.initiate(queryParams, {\n forceRefetch: true,\n }),\n )\n\n if (result.error) throw result.error\n const fallback = {\n products: [],\n pageInfo: {\n hasNextPage: false,\n endCursor: null,\n startCursor: null,\n hasPreviousPage: false,\n },\n }\n\n // Return the products directly as required by the infinite query format\n return {\n data: result.data || fallback,\n }\n } catch (e: any) {\n console.error('Error in getProductsInfiniteQuery queryFn:', e)\n return {\n error: {\n status: 'FETCH_ERROR',\n error: parseGQLErrorMessage(e.message),\n } as FetchBaseQueryError,\n }\n }\n },\n providesTags: provideTagsForProductsInfinite,\n },\n ),\n\n // Grouped versions query - fetches versions for multiple group filters\n getGroupedVersionsList: build.query<GetGroupedVersionsListResult, GetGroupedVersionsListArgs>({\n queryFn: async (\n {\n projectName,\n groups,\n groupFilterKey = 'versionFilter',\n versionFilter, // most of the time overridden by group filters\n productFilter,\n taskFilter,\n folderIds,\n desc,\n sortBy,\n featuredOnly,\n hasReviewables,\n },\n api,\n ) => {\n try {\n const promises = []\n for (const group of groups) {\n const count = group.count || 500\n\n const queryParams: GetVersionsQueryVariables = {\n projectName,\n // base filters\n productFilter,\n taskFilter,\n versionFilter,\n // specific group filter\n [groupFilterKey]: group.filter,\n folderIds: folderIds?.length ? folderIds : undefined,\n sortBy: sortBy,\n featuredOnly,\n hasReviewables,\n // @ts-expect-error - group param used later on\n group: group.value,\n }\n\n if (desc) {\n queryParams.last = count\n } else {\n queryParams.first = count\n }\n\n const promise = api.dispatch(\n enhancedVersionsPageApi.endpoints.GetVersions.initiate(queryParams, {\n forceRefetch: true,\n }),\n )\n promises.push(promise)\n }\n\n const result = await Promise.all(promises)\n const versions: VersionNode[] = []\n\n for (const res of result) {\n if (res.error) throw res.error\n\n // get group value\n // @ts-expect-error - we know group does exist on res.originalArgs\n const groupValue = res.originalArgs?.group as string\n\n const hasNextPage =\n res.data?.pageInfo?.hasNextPage || res.data?.pageInfo?.hasPreviousPage || false\n\n const groupVersions =\n res.data?.versions.map((version, i, a) => ({\n ...version,\n groups: [\n {\n value: groupValue,\n hasNextPage: i === a.length - 1 && hasNextPage ? groupValue : undefined,\n },\n ],\n })) || []\n\n versions.push(...groupVersions)\n }\n\n return {\n data: {\n versions,\n },\n }\n } catch (error: any) {\n console.error('Error in getGroupedVersionsList queryFn:', error)\n return {\n error: {\n status: 'FETCH_ERROR',\n error: parseGQLErrorMessage(error.message),\n } as FetchBaseQueryError,\n }\n }\n },\n providesTags: provideTagsForVersionsResult,\n }),\n }),\n})\n\n// export gql endpoints\nexport const { useGetVersionsQuery } = enhancedVersionsPageApi\n// export custom queries\nexport const {\n useGetVersionsInfiniteInfiniteQuery: useGetVersionsInfiniteQuery,\n useGetVersionsByProductsQuery,\n useGetProductsInfiniteInfiniteQuery: useGetProductsInfiniteQuery,\n useGetGroupedVersionsListQuery,\n} = injectedVersionsPageApi\n\n// export API instances for cache manipulation\nexport { enhancedVersionsPageApi, injectedVersionsPageApi }\n"],"names":["enhancedVersionsPageApi","gqlApi","transformVersionsResponse","provideTagsForVersionsResult","transformProductsResponse","provideTagsForProductsResult","VP_INFINITE_QUERY_COUNT","VERSIONS_BY_PRODUCT_ID_QUERY_COUNT","MAX_PAGES_PER_PRODUCT","injectedVersionsPageApi","build","lastPage","_allPages","lastPageParam","_allPageParams","pageInfo","queryArg","pageParam","api","sortBy","desc","folderIds","rest","cursor","queryParams","result","fallback","e","parseGQLErrorMessage","provideTagsForVersionsInfinite","args","dispatch","forced","productIds","fetchVersionsPage","productId","promises","settledResults","allVersions","errors","i","settledResult","_a","pageCount","hasNextPage","nextPageResult","provideTagsForProductsInfinite","projectName","groups","groupFilterKey","versionFilter","productFilter","taskFilter","featuredOnly","hasReviewables","group","count","promise","versions","res","groupValue","_c","_b","_e","_d","groupVersions","_f","version","a","error","useGetVersionsQuery","useGetVersionsInfiniteQuery","useGetVersionsByProductsQuery","useGetProductsInfiniteQuery","useGetGroupedVersionsListQuery"],"mappings":"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"}