@ynput/ayon-frontend-shared 0.3.45 → 0.3.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (767) hide show
  1. package/dist/DetailsPanel.cjs.js +1 -1
  2. package/dist/DetailsPanel.es.js +38 -35
  3. package/dist/DetailsPanel.es.js.map +1 -1
  4. package/dist/ProjectTreeTable.cjs.js +1 -1
  5. package/dist/ProjectTreeTable.es.js +231 -228
  6. package/dist/ProjectTreeTable.es.js.map +1 -1
  7. package/dist/Slicer.cjs.js +1 -1
  8. package/dist/Slicer.es.js +193 -25
  9. package/dist/Slicer.es.js.map +1 -1
  10. package/dist/Views.cjs.js +1 -1
  11. package/dist/Views.es.js +27 -26
  12. package/dist/_virtual/index.cjs15.js +1 -1
  13. package/dist/_virtual/index.cjs18.js +1 -1
  14. package/dist/_virtual/index.cjs19.js +1 -1
  15. package/dist/_virtual/index.cjs22.js +1 -1
  16. package/dist/_virtual/index.cjs23.js +1 -1
  17. package/dist/_virtual/index.cjs24.js +1 -1
  18. package/dist/_virtual/index.cjs4.js +1 -1
  19. package/dist/_virtual/index.cjs5.js +1 -1
  20. package/dist/_virtual/index.cjs6.js +1 -1
  21. package/dist/_virtual/index.cjs8.js +1 -1
  22. package/dist/_virtual/index.cjs9.js +1 -1
  23. package/dist/_virtual/index.es10.js +2 -2
  24. package/dist/_virtual/index.es11.js +2 -2
  25. package/dist/_virtual/index.es13.js +2 -2
  26. package/dist/_virtual/index.es14.js +2 -2
  27. package/dist/_virtual/index.es15.js +2 -2
  28. package/dist/_virtual/index.es16.js +2 -2
  29. package/dist/_virtual/index.es17.js +2 -2
  30. package/dist/_virtual/index.es18.js +5 -2
  31. package/dist/_virtual/index.es18.js.map +1 -1
  32. package/dist/_virtual/index.es19.js +2 -2
  33. package/dist/_virtual/index.es22.js +3 -3
  34. package/dist/_virtual/index.es23.js +5 -5
  35. package/dist/_virtual/index.es24.js +5 -5
  36. package/dist/_virtual/index.es4.js +5 -2
  37. package/dist/_virtual/index.es4.js.map +1 -1
  38. package/dist/_virtual/index.es5.js +2 -5
  39. package/dist/_virtual/index.es5.js.map +1 -1
  40. package/dist/_virtual/index.es6.js +2 -2
  41. package/dist/_virtual/index.es8.js +2 -5
  42. package/dist/_virtual/index.es8.js.map +1 -1
  43. package/dist/_virtual/index.es9.js +2 -2
  44. package/dist/api.cjs.js +1 -1
  45. package/dist/api.es.js +347 -344
  46. package/dist/api.es.js.map +1 -1
  47. package/dist/components.cjs.js +1 -1
  48. package/dist/components.es.js +41 -39
  49. package/dist/components.es.js.map +1 -1
  50. package/dist/context.cjs.js +1 -1
  51. package/dist/context.es.js +55 -48
  52. package/dist/context.es.js.map +1 -1
  53. package/dist/index.cjs.js +1 -1
  54. package/dist/index.es.js +24 -21
  55. package/dist/index.es.js.map +1 -1
  56. package/dist/node_modules/match-sorter/dist/match-sorter.esm.cjs.js +1 -1
  57. package/dist/node_modules/match-sorter/dist/match-sorter.esm.es.js +1 -1
  58. package/dist/node_modules/parse-numeric-range/index.cjs.js +1 -1
  59. package/dist/node_modules/parse-numeric-range/index.es.js +1 -1
  60. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
  61. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  62. package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
  63. package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
  64. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  65. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  66. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  67. package/dist/node_modules/remove-accents/index.es.js +1 -1
  68. package/dist/shared/node_modules/@module-federation/error-codes/dist/index.cjs.js +1 -1
  69. package/dist/shared/node_modules/@module-federation/error-codes/dist/index.es.js +1 -1
  70. package/dist/shared/node_modules/@module-federation/runtime/dist/index.cjs.js +1 -1
  71. package/dist/shared/node_modules/@module-federation/runtime/dist/index.es.js +1 -1
  72. package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.cjs.js +1 -1
  73. package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.es.js +1 -1
  74. package/dist/shared/node_modules/@module-federation/runtime-core/dist/module/index.cjs.js +1 -1
  75. package/dist/shared/node_modules/@module-federation/runtime-core/dist/module/index.es.js +1 -1
  76. package/dist/shared/node_modules/@module-federation/runtime-core/dist/plugins/snapshot/index.cjs.js +1 -1
  77. package/dist/shared/node_modules/@module-federation/runtime-core/dist/plugins/snapshot/index.es.js +1 -1
  78. package/dist/shared/node_modules/@module-federation/runtime-core/dist/remote/index.cjs.js +1 -1
  79. package/dist/shared/node_modules/@module-federation/runtime-core/dist/remote/index.es.js +1 -1
  80. package/dist/shared/node_modules/@module-federation/runtime-core/dist/shared/index.cjs.js +1 -1
  81. package/dist/shared/node_modules/@module-federation/runtime-core/dist/shared/index.es.js +1 -1
  82. package/dist/shared/node_modules/@module-federation/runtime-core/dist/type/index.cjs.js +1 -1
  83. package/dist/shared/node_modules/@module-federation/runtime-core/dist/type/index.es.js +1 -1
  84. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/hooks/index.cjs.js +1 -1
  85. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/hooks/index.es.js +1 -1
  86. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/index.cjs.js +1 -1
  87. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/index.es.js +1 -1
  88. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.cjs.js +1 -1
  89. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.cjs.js.map +1 -1
  90. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.es.js +1 -1
  91. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/utils.cjs.js +1 -1
  92. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/utils.es.js +1 -1
  93. package/dist/shared/node_modules/@module-federation/sdk/dist/index.cjs.js +1 -1
  94. package/dist/shared/node_modules/@module-federation/sdk/dist/index.es.js +1 -1
  95. package/dist/shared/node_modules/@module-federation/sdk/dist/utils.cjs.js +1 -1
  96. package/dist/shared/node_modules/@module-federation/sdk/dist/utils.es.js +1 -1
  97. package/dist/shared/node_modules/prop-types/index.cjs.js +1 -1
  98. package/dist/shared/node_modules/prop-types/index.es.js +1 -1
  99. package/dist/shared/node_modules/react-is/index.cjs.js +1 -1
  100. package/dist/shared/node_modules/react-is/index.es.js +1 -1
  101. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js +1 -1
  102. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js.map +1 -1
  103. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.es.js +1 -1
  104. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js +1 -1
  105. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js.map +1 -1
  106. package/dist/shared/node_modules/react-transition-group/esm/Transition.es.js +1 -1
  107. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js +1 -1
  108. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js.map +1 -1
  109. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.es.js +1 -1
  110. package/dist/shared/src/api/generated/graphql.cjs.js +3 -3
  111. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  112. package/dist/shared/src/api/generated/graphql.es.js +3 -3
  113. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  114. package/dist/shared/src/api/queries/actions/refreshActiveAndPurgeOthers.cjs.js +2 -0
  115. package/dist/shared/src/api/queries/actions/refreshActiveAndPurgeOthers.cjs.js.map +1 -0
  116. package/dist/shared/src/api/queries/actions/refreshActiveAndPurgeOthers.es.js +42 -0
  117. package/dist/shared/src/api/queries/actions/refreshActiveAndPurgeOthers.es.js.map +1 -0
  118. package/dist/shared/src/api/queries/activities/getActivities.cjs.js +1 -1
  119. package/dist/shared/src/api/queries/activities/getActivities.cjs.js.map +1 -1
  120. package/dist/shared/src/api/queries/activities/getActivities.es.js +121 -156
  121. package/dist/shared/src/api/queries/activities/getActivities.es.js.map +1 -1
  122. package/dist/shared/src/api/queries/activities/util/activitiesHelpers.cjs.js +1 -1
  123. package/dist/shared/src/api/queries/activities/util/activitiesHelpers.cjs.js.map +1 -1
  124. package/dist/shared/src/api/queries/activities/util/activitiesHelpers.es.js +93 -68
  125. package/dist/shared/src/api/queries/activities/util/activitiesHelpers.es.js.map +1 -1
  126. package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.cjs.js +1 -1
  127. package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.cjs.js.map +1 -1
  128. package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.es.js +63 -56
  129. package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.es.js.map +1 -1
  130. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +1 -1
  131. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
  132. package/dist/shared/src/api/queries/entities/updateEntity.es.js +120 -119
  133. package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
  134. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +1 -1
  135. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
  136. package/dist/shared/src/api/queries/entityLists/getLists.es.js +70 -62
  137. package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
  138. package/dist/shared/src/api/queries/folders/getFolders.cjs.js.map +1 -1
  139. package/dist/shared/src/api/queries/folders/getFolders.es.js.map +1 -1
  140. package/dist/shared/src/api/queries/links/getEntityLinks.cjs.js +1 -1
  141. package/dist/shared/src/api/queries/links/getEntityLinks.cjs.js.map +1 -1
  142. package/dist/shared/src/api/queries/links/getEntityLinks.es.js +85 -85
  143. package/dist/shared/src/api/queries/links/getEntityLinks.es.js.map +1 -1
  144. package/dist/shared/src/api/queries/overview/getOverview.cjs.js +1 -1
  145. package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
  146. package/dist/shared/src/api/queries/overview/getOverview.es.js +267 -259
  147. package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
  148. package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js +1 -1
  149. package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js.map +1 -1
  150. package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js +85 -79
  151. package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js.map +1 -1
  152. package/dist/shared/src/components/ColumnHeaderMenuUI.cjs.js +1 -1
  153. package/dist/shared/src/components/ColumnHeaderMenuUI.cjs.js.map +1 -1
  154. package/dist/shared/src/components/ColumnHeaderMenuUI.es.js +170 -2
  155. package/dist/shared/src/components/ColumnHeaderMenuUI.es.js.map +1 -1
  156. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +1 -1
  157. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
  158. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +18 -15
  159. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
  160. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js +1 -1
  161. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js.map +1 -1
  162. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js +165 -2
  163. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js.map +1 -1
  164. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js +2 -2
  165. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js.map +1 -1
  166. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js +164 -2
  167. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js.map +1 -1
  168. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js +1 -1
  169. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js.map +1 -1
  170. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js +174 -2
  171. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js.map +1 -1
  172. package/dist/shared/src/components/EntityIcon/EntityIcon.cjs.js +1 -1
  173. package/dist/shared/src/components/EntityIcon/EntityIcon.cjs.js.map +1 -1
  174. package/dist/shared/src/components/EntityIcon/EntityIcon.es.js +173 -2
  175. package/dist/shared/src/components/EntityIcon/EntityIcon.es.js.map +1 -1
  176. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
  177. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
  178. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +5 -2
  179. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
  180. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js +1 -1
  181. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js.map +1 -1
  182. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js +16 -13
  183. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js.map +1 -1
  184. package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js +1 -1
  185. package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js.map +1 -1
  186. package/dist/shared/src/components/EntityPath/SegmentProvider.es.js +168 -2
  187. package/dist/shared/src/components/EntityPath/SegmentProvider.es.js.map +1 -1
  188. package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js +1 -1
  189. package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js.map +1 -1
  190. package/dist/shared/src/components/Feedback/FeedbackContext.es.js +260 -89
  191. package/dist/shared/src/components/Feedback/FeedbackContext.es.js.map +1 -1
  192. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js +1 -1
  193. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js.map +1 -1
  194. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js +44 -78
  195. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js.map +1 -1
  196. package/dist/shared/src/components/LinksManager/LinksManager.cjs.js +1 -1
  197. package/dist/shared/src/components/LinksManager/LinksManager.cjs.js.map +1 -1
  198. package/dist/shared/src/components/LinksManager/LinksManager.es.js +172 -2
  199. package/dist/shared/src/components/LinksManager/LinksManager.es.js.map +1 -1
  200. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
  201. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
  202. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +5 -2
  203. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
  204. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js +1 -1
  205. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js.map +1 -1
  206. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js +173 -2
  207. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js.map +1 -1
  208. package/dist/shared/src/components/ListMetaData/ListMetaData.cjs.js +1 -1
  209. package/dist/shared/src/components/ListMetaData/ListMetaData.cjs.js.map +1 -1
  210. package/dist/shared/src/components/ListMetaData/ListMetaData.es.js +158 -2
  211. package/dist/shared/src/components/ListMetaData/ListMetaData.es.js.map +1 -1
  212. package/dist/shared/src/components/Menu/Menu.cjs.js +1 -1
  213. package/dist/shared/src/components/Menu/Menu.cjs.js.map +1 -1
  214. package/dist/shared/src/components/Menu/Menu.es.js +171 -2
  215. package/dist/shared/src/components/Menu/Menu.es.js.map +1 -1
  216. package/dist/shared/src/components/Menu/MenuItem.cjs.js +1 -1
  217. package/dist/shared/src/components/Menu/MenuItem.cjs.js.map +1 -1
  218. package/dist/shared/src/components/Menu/MenuItem.es.js +167 -0
  219. package/dist/shared/src/components/Menu/MenuItem.es.js.map +1 -1
  220. package/dist/shared/src/components/Menu/MenuList.cjs.js +1 -1
  221. package/dist/shared/src/components/Menu/MenuList.cjs.js.map +1 -1
  222. package/dist/shared/src/components/Menu/MenuList.es.js +209 -40
  223. package/dist/shared/src/components/Menu/MenuList.es.js.map +1 -1
  224. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js +1 -1
  225. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js.map +1 -1
  226. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js +171 -2
  227. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js.map +1 -1
  228. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +1 -1
  229. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
  230. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +170 -2
  231. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
  232. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js +1 -1
  233. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js.map +1 -1
  234. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js +16 -13
  235. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js.map +1 -1
  236. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +2 -2
  237. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  238. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +82 -79
  239. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  240. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +1 -1
  241. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
  242. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +169 -3
  243. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
  244. package/dist/shared/src/components/RemotePage/ProjectPageRemote.cjs.js +1 -1
  245. package/dist/shared/src/components/RemotePage/ProjectPageRemote.cjs.js.map +1 -1
  246. package/dist/shared/src/components/RemotePage/ProjectPageRemote.es.js +12 -9
  247. package/dist/shared/src/components/RemotePage/ProjectPageRemote.es.js.map +1 -1
  248. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js +1 -1
  249. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +1 -1
  250. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js +5 -2
  251. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -1
  252. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +1 -1
  253. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
  254. package/dist/shared/src/components/RenameForm/RenameForm.es.js +5 -2
  255. package/dist/shared/src/components/RenameForm/RenameForm.es.js.map +1 -1
  256. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +1 -1
  257. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  258. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +41 -38
  259. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  260. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +1 -1
  261. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  262. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +19 -16
  263. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  264. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +1 -1
  265. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  266. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +17 -14
  267. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  268. package/dist/shared/src/components/ReviewablesSelector/Card.cjs.js +1 -1
  269. package/dist/shared/src/components/ReviewablesSelector/Card.cjs.js.map +1 -1
  270. package/dist/shared/src/components/ReviewablesSelector/Card.es.js +18 -15
  271. package/dist/shared/src/components/ReviewablesSelector/Card.es.js.map +1 -1
  272. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +1 -1
  273. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
  274. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +453 -284
  275. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
  276. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js +2 -2
  277. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js.map +1 -1
  278. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js +172 -2
  279. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js.map +1 -1
  280. package/dist/shared/src/components/SimpleFormDialog/FormFile.cjs.js +1 -1
  281. package/dist/shared/src/components/SimpleFormDialog/FormFile.cjs.js.map +1 -1
  282. package/dist/shared/src/components/SimpleFormDialog/FormFile.es.js +18 -15
  283. package/dist/shared/src/components/SimpleFormDialog/FormFile.es.js.map +1 -1
  284. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +1 -1
  285. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  286. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +18 -15
  287. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  288. package/dist/shared/src/components/SyncButton/SyncButton.cjs.js +52 -0
  289. package/dist/shared/src/components/SyncButton/SyncButton.cjs.js.map +1 -0
  290. package/dist/shared/src/components/SyncButton/SyncButton.es.js +265 -0
  291. package/dist/shared/src/components/SyncButton/SyncButton.es.js.map +1 -0
  292. package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js +1 -1
  293. package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js.map +1 -1
  294. package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js +171 -2
  295. package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js.map +1 -1
  296. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +1 -1
  297. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
  298. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +18 -15
  299. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
  300. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +1 -1
  301. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -1
  302. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +20 -17
  303. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
  304. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
  305. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  306. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +18 -15
  307. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  308. package/dist/shared/src/containers/Actions/Actions.cjs.js +1 -1
  309. package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
  310. package/dist/shared/src/containers/Actions/Actions.es.js +213 -44
  311. package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
  312. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
  313. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  314. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +18 -15
  315. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  316. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  317. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  318. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +39 -36
  319. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  320. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
  321. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  322. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js +18 -15
  323. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  324. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
  325. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  326. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.es.js +19 -16
  327. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  328. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
  329. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  330. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.es.js +51 -48
  331. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  332. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.cjs.js +1 -1
  333. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.cjs.js.map +1 -1
  334. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.es.js +173 -3
  335. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.es.js.map +1 -1
  336. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.cjs.js +1 -1
  337. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.cjs.js.map +1 -1
  338. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.es.js +18 -15
  339. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.es.js.map +1 -1
  340. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.cjs.js +1 -1
  341. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.cjs.js.map +1 -1
  342. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.es.js +18 -15
  343. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.es.js.map +1 -1
  344. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +1 -1
  345. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
  346. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +168 -2
  347. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
  348. package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js +1 -1
  349. package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js.map +1 -1
  350. package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.es.js +32 -29
  351. package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.es.js.map +1 -1
  352. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js +1 -1
  353. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js.map +1 -1
  354. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js +18 -15
  355. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js.map +1 -1
  356. package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.cjs.js +1 -1
  357. package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.cjs.js.map +1 -1
  358. package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.es.js +81 -78
  359. package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.es.js.map +1 -1
  360. package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.cjs.js +1 -1
  361. package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.cjs.js.map +1 -1
  362. package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.es.js +144 -2
  363. package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.es.js.map +1 -1
  364. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +1 -1
  365. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
  366. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +174 -2
  367. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
  368. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
  369. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
  370. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +18 -15
  371. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js.map +1 -1
  372. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
  373. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
  374. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +18 -15
  375. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
  376. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
  377. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
  378. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +18 -15
  379. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
  380. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
  381. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
  382. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +18 -15
  383. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
  384. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js +1 -1
  385. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js.map +1 -1
  386. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js +178 -7
  387. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js.map +1 -1
  388. package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -1
  389. package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
  390. package/dist/shared/src/containers/Feed/Feed.es.js +206 -59
  391. package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
  392. package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.cjs.js +1 -1
  393. package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.cjs.js.map +1 -1
  394. package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.es.js +18 -15
  395. package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.es.js.map +1 -1
  396. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
  397. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
  398. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +19 -16
  399. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
  400. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js +1 -1
  401. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js.map +1 -1
  402. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js +18 -15
  403. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js.map +1 -1
  404. package/dist/shared/src/containers/Feed/components/ActivityItem.cjs.js +1 -1
  405. package/dist/shared/src/containers/Feed/components/ActivityItem.cjs.js.map +1 -1
  406. package/dist/shared/src/containers/Feed/components/ActivityItem.es.js +16 -16
  407. package/dist/shared/src/containers/Feed/components/ActivityItem.es.js.map +1 -1
  408. package/dist/shared/src/containers/Feed/components/ActivityStatusChange/ActivityStatusChange.cjs.js +1 -1
  409. package/dist/shared/src/containers/Feed/components/ActivityStatusChange/ActivityStatusChange.cjs.js.map +1 -1
  410. package/dist/shared/src/containers/Feed/components/ActivityStatusChange/ActivityStatusChange.es.js +30 -17
  411. package/dist/shared/src/containers/Feed/components/ActivityStatusChange/ActivityStatusChange.es.js.map +1 -1
  412. package/dist/shared/src/containers/Feed/components/ActivityStatusChange/ActivityStatusSecondary.cjs.js +11 -0
  413. package/dist/shared/src/containers/Feed/components/ActivityStatusChange/ActivityStatusSecondary.cjs.js.map +1 -0
  414. package/dist/shared/src/containers/Feed/components/ActivityStatusChange/ActivityStatusSecondary.es.js +27 -0
  415. package/dist/shared/src/containers/Feed/components/ActivityStatusChange/ActivityStatusSecondary.es.js.map +1 -0
  416. package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.cjs.js +1 -1
  417. package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.cjs.js.map +1 -1
  418. package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.es.js +20 -17
  419. package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.es.js.map +1 -1
  420. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js +1 -1
  421. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js.map +1 -1
  422. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js +218 -39
  423. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js.map +1 -1
  424. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +1 -1
  425. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js.map +1 -1
  426. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js +78 -75
  427. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
  428. package/dist/shared/src/containers/Feed/components/CommentInput/helpers.cjs.js +1 -1
  429. package/dist/shared/src/containers/Feed/components/CommentInput/helpers.cjs.js.map +1 -1
  430. package/dist/shared/src/containers/Feed/components/CommentInput/helpers.es.js +22 -19
  431. package/dist/shared/src/containers/Feed/components/CommentInput/helpers.es.js.map +1 -1
  432. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js +1 -1
  433. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js.map +1 -1
  434. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js +173 -2
  435. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js.map +1 -1
  436. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js +1 -1
  437. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js.map +1 -1
  438. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js +173 -2
  439. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js.map +1 -1
  440. package/dist/shared/src/containers/Feed/components/FeedSearchFilter.cjs.js +2 -2
  441. package/dist/shared/src/containers/Feed/components/FeedSearchFilter.cjs.js.map +1 -1
  442. package/dist/shared/src/containers/Feed/components/FeedSearchFilter.es.js +181 -14
  443. package/dist/shared/src/containers/Feed/components/FeedSearchFilter.es.js.map +1 -1
  444. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +1 -1
  445. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
  446. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +169 -2
  447. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js.map +1 -1
  448. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -1
  449. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
  450. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +80 -77
  451. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
  452. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +1 -1
  453. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  454. package/dist/shared/src/containers/Feed/context/FeedContext.es.js +197 -26
  455. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  456. package/dist/shared/src/containers/Feed/helpers/groupActivityVersions.cjs.js +1 -1
  457. package/dist/shared/src/containers/Feed/helpers/groupActivityVersions.cjs.js.map +1 -1
  458. package/dist/shared/src/containers/Feed/helpers/groupActivityVersions.es.js +9 -8
  459. package/dist/shared/src/containers/Feed/helpers/groupActivityVersions.es.js.map +1 -1
  460. package/dist/shared/src/containers/ListTable/ListTable.cjs.js +1 -1
  461. package/dist/shared/src/containers/ListTable/ListTable.cjs.js.map +1 -1
  462. package/dist/shared/src/containers/ListTable/ListTable.es.js +24 -21
  463. package/dist/shared/src/containers/ListTable/ListTable.es.js.map +1 -1
  464. package/dist/shared/src/containers/ListTable/ListTableCell.cjs.js +1 -1
  465. package/dist/shared/src/containers/ListTable/ListTableCell.cjs.js.map +1 -1
  466. package/dist/shared/src/containers/ListTable/ListTableCell.es.js +18 -15
  467. package/dist/shared/src/containers/ListTable/ListTableCell.es.js.map +1 -1
  468. package/dist/shared/src/containers/ListTable/ListTableHeader.cjs.js +1 -1
  469. package/dist/shared/src/containers/ListTable/ListTableHeader.cjs.js.map +1 -1
  470. package/dist/shared/src/containers/ListTable/ListTableHeader.es.js +17 -14
  471. package/dist/shared/src/containers/ListTable/ListTableHeader.es.js.map +1 -1
  472. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
  473. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  474. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +5 -2
  475. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  476. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  477. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  478. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +18 -15
  479. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  480. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.cjs.js +1 -1
  481. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.cjs.js.map +1 -1
  482. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.es.js +5 -2
  483. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.es.js.map +1 -1
  484. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js +1 -1
  485. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js.map +1 -1
  486. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js +84 -81
  487. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js.map +1 -1
  488. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
  489. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  490. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +17 -14
  491. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  492. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
  493. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
  494. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +18 -15
  495. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
  496. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +5 -5
  497. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
  498. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +521 -337
  499. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
  500. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js +1 -1
  501. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js.map +1 -1
  502. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js +18 -15
  503. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js.map +1 -1
  504. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +1 -1
  505. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
  506. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +175 -4
  507. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
  508. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js +1 -1
  509. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
  510. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js +176 -6
  511. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
  512. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +1 -1
  513. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
  514. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +18 -15
  515. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
  516. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +1 -1
  517. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
  518. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +174 -2
  519. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
  520. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
  521. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  522. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +21 -18
  523. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  524. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  525. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  526. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +18 -15
  527. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  528. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
  529. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  530. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +18 -15
  531. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  532. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
  533. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
  534. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +18 -15
  535. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
  536. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js +1 -1
  537. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js.map +1 -1
  538. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js +18 -15
  539. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js.map +1 -1
  540. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js +1 -1
  541. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js.map +1 -1
  542. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js +5 -2
  543. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js.map +1 -1
  544. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +1 -1
  545. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
  546. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +408 -396
  547. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
  548. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +1 -1
  549. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
  550. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +18 -15
  551. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
  552. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js +1 -1
  553. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js.map +1 -1
  554. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js +18 -15
  555. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js.map +1 -1
  556. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
  557. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
  558. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +19 -17
  559. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
  560. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
  561. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
  562. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +5 -2
  563. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js.map +1 -1
  564. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
  565. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
  566. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +5 -2
  567. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
  568. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
  569. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
  570. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +18 -15
  571. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
  572. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js +1 -1
  573. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js.map +1 -1
  574. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js +18 -15
  575. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js.map +1 -1
  576. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js +1 -1
  577. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -1
  578. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js +265 -95
  579. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js.map +1 -1
  580. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
  581. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  582. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +29 -26
  583. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  584. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js +1 -1
  585. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js.map +1 -1
  586. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js +18 -15
  587. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js.map +1 -1
  588. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +2 -2
  589. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  590. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +94 -91
  591. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  592. package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.cjs.js +3 -3
  593. package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.cjs.js.map +1 -1
  594. package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.es.js +25 -22
  595. package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.es.js.map +1 -1
  596. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
  597. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
  598. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +20 -17
  599. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
  600. package/dist/shared/src/containers/ProjectTreeTable/widgets/MarkdownWidget.cjs.js +4 -4
  601. package/dist/shared/src/containers/ProjectTreeTable/widgets/MarkdownWidget.cjs.js.map +1 -1
  602. package/dist/shared/src/containers/ProjectTreeTable/widgets/MarkdownWidget.es.js +188 -34
  603. package/dist/shared/src/containers/ProjectTreeTable/widgets/MarkdownWidget.es.js.map +1 -1
  604. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js +1 -1
  605. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js.map +1 -1
  606. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js +18 -15
  607. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js.map +1 -1
  608. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js +1 -1
  609. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js.map +1 -1
  610. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js +25 -22
  611. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js.map +1 -1
  612. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextContentWidget.cjs.js +2 -2
  613. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextContentWidget.cjs.js.map +1 -1
  614. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextContentWidget.es.js +225 -61
  615. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextContentWidget.es.js.map +1 -1
  616. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
  617. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  618. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +18 -15
  619. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  620. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
  621. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
  622. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +21 -18
  623. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
  624. package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.cjs.js +1 -1
  625. package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.cjs.js.map +1 -1
  626. package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.es.js +37 -37
  627. package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.es.js.map +1 -1
  628. package/dist/shared/src/containers/Slicer/components/Slicer.cjs.js +2 -2
  629. package/dist/shared/src/containers/Slicer/components/Slicer.cjs.js.map +1 -1
  630. package/dist/shared/src/containers/Slicer/components/Slicer.es.js +353 -51
  631. package/dist/shared/src/containers/Slicer/components/Slicer.es.js.map +1 -1
  632. package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.cjs.js +1 -1
  633. package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.cjs.js.map +1 -1
  634. package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.es.js +172 -2
  635. package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.es.js.map +1 -1
  636. package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js +1 -1
  637. package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js.map +1 -1
  638. package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js +18 -15
  639. package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js.map +1 -1
  640. package/dist/shared/src/containers/Slicer/context/SlicerContext.cjs.js +1 -1
  641. package/dist/shared/src/containers/Slicer/context/SlicerContext.cjs.js.map +1 -1
  642. package/dist/shared/src/containers/Slicer/context/SlicerContext.es.js +216 -45
  643. package/dist/shared/src/containers/Slicer/context/SlicerContext.es.js.map +1 -1
  644. package/dist/shared/src/containers/Slicer/hooks/useEntityListsSlice.cjs.js +1 -1
  645. package/dist/shared/src/containers/Slicer/hooks/useEntityListsSlice.cjs.js.map +1 -1
  646. package/dist/shared/src/containers/Slicer/hooks/useEntityListsSlice.es.js +185 -13
  647. package/dist/shared/src/containers/Slicer/hooks/useEntityListsSlice.es.js.map +1 -1
  648. package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.cjs.js +1 -1
  649. package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.cjs.js.map +1 -1
  650. package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.es.js +174 -2
  651. package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.es.js.map +1 -1
  652. package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.cjs.js +1 -1
  653. package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.cjs.js.map +1 -1
  654. package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.es.js +40 -289
  655. package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.es.js.map +1 -1
  656. package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.cjs.js +1 -1
  657. package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.cjs.js.map +1 -1
  658. package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.es.js +174 -2
  659. package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.es.js.map +1 -1
  660. package/dist/shared/src/containers/Slicer/hooks/useSlicerRemotes.cjs.js +1 -1
  661. package/dist/shared/src/containers/Slicer/hooks/useSlicerRemotes.cjs.js.map +1 -1
  662. package/dist/shared/src/containers/Slicer/hooks/useSlicerRemotes.es.js +173 -2
  663. package/dist/shared/src/containers/Slicer/hooks/useSlicerRemotes.es.js.map +1 -1
  664. package/dist/shared/src/containers/Slicer/hooks/useSlicerRowSelection.cjs.js +1 -1
  665. package/dist/shared/src/containers/Slicer/hooks/useSlicerRowSelection.cjs.js.map +1 -1
  666. package/dist/shared/src/containers/Slicer/hooks/useSlicerRowSelection.es.js +174 -2
  667. package/dist/shared/src/containers/Slicer/hooks/useSlicerRowSelection.es.js.map +1 -1
  668. package/dist/shared/src/containers/Slicer/hooks/useSlicerSplitter.cjs.js +1 -1
  669. package/dist/shared/src/containers/Slicer/hooks/useSlicerSplitter.cjs.js.map +1 -1
  670. package/dist/shared/src/containers/Slicer/hooks/useSlicerSplitter.es.js +174 -2
  671. package/dist/shared/src/containers/Slicer/hooks/useSlicerSplitter.es.js.map +1 -1
  672. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.cjs.js +1 -1
  673. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.cjs.js.map +1 -1
  674. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.es.js +226 -52
  675. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.es.js.map +1 -1
  676. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js +1 -1
  677. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js.map +1 -1
  678. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js +176 -6
  679. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js.map +1 -1
  680. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js +1 -1
  681. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js.map +1 -1
  682. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js +5 -2
  683. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js.map +1 -1
  684. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js +2 -2
  685. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js.map +1 -1
  686. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js +185 -18
  687. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js.map +1 -1
  688. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
  689. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
  690. package/dist/shared/src/containers/Views/context/ViewsContext.es.js +209 -38
  691. package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
  692. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js +1 -1
  693. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js.map +1 -1
  694. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js +180 -10
  695. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js.map +1 -1
  696. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js +1 -1
  697. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js.map +1 -1
  698. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js +107 -73
  699. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js.map +1 -1
  700. package/dist/shared/src/context/DetailsPanelContext.cjs.js +1 -1
  701. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  702. package/dist/shared/src/context/DetailsPanelContext.es.js +210 -38
  703. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  704. package/dist/shared/src/context/EntityUpdatesContext.cjs.js +2 -0
  705. package/dist/shared/src/context/EntityUpdatesContext.cjs.js.map +1 -0
  706. package/dist/shared/src/context/EntityUpdatesContext.es.js +392 -0
  707. package/dist/shared/src/context/EntityUpdatesContext.es.js.map +1 -0
  708. package/dist/shared/src/context/EntityUpdatesContextInstance.cjs.js +2 -0
  709. package/dist/shared/src/context/EntityUpdatesContextInstance.cjs.js.map +1 -0
  710. package/dist/shared/src/context/EntityUpdatesContextInstance.es.js +6 -0
  711. package/dist/shared/src/context/EntityUpdatesContextInstance.es.js.map +1 -0
  712. package/dist/shared/src/context/MenuContext.es.js +3 -3
  713. package/dist/shared/src/context/PowerpackContext.cjs.js +1 -1
  714. package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
  715. package/dist/shared/src/context/PowerpackContext.es.js +178 -6
  716. package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
  717. package/dist/shared/src/context/ProjectFoldersContext.cjs.js +1 -1
  718. package/dist/shared/src/context/ProjectFoldersContext.cjs.js.map +1 -1
  719. package/dist/shared/src/context/ProjectFoldersContext.es.js +196 -24
  720. package/dist/shared/src/context/ProjectFoldersContext.es.js.map +1 -1
  721. package/dist/shared/src/context/SubtasksModulesContext.cjs.js +1 -1
  722. package/dist/shared/src/context/SubtasksModulesContext.cjs.js.map +1 -1
  723. package/dist/shared/src/context/SubtasksModulesContext.es.js +176 -4
  724. package/dist/shared/src/context/SubtasksModulesContext.es.js.map +1 -1
  725. package/dist/shared/src/context/WebsocketContext.cjs.js +1 -1
  726. package/dist/shared/src/context/WebsocketContext.cjs.js.map +1 -1
  727. package/dist/shared/src/context/WebsocketContext.es.js +52 -45
  728. package/dist/shared/src/context/WebsocketContext.es.js.map +1 -1
  729. package/dist/shared/src/hooks/useEntityUpdate.cjs.js +1 -1
  730. package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
  731. package/dist/shared/src/hooks/useEntityUpdate.es.js +174 -2
  732. package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
  733. package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js +1 -1
  734. package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js.map +1 -1
  735. package/dist/shared/src/hooks/useGroupByRemoteModules.es.js +174 -2
  736. package/dist/shared/src/hooks/useGroupByRemoteModules.es.js.map +1 -1
  737. package/dist/shared/src/hooks/useHierarchyTable.cjs.js +1 -1
  738. package/dist/shared/src/hooks/useHierarchyTable.cjs.js.map +1 -1
  739. package/dist/shared/src/hooks/useHierarchyTable.es.js +174 -2
  740. package/dist/shared/src/hooks/useHierarchyTable.es.js.map +1 -1
  741. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +1 -1
  742. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
  743. package/dist/shared/src/hooks/useUserProjectConfig.es.js +174 -2
  744. package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
  745. package/dist/types/api/generated/graphql.d.ts +3 -3
  746. package/dist/types/api/queries/actions/index.d.ts +1 -0
  747. package/dist/types/api/queries/actions/refreshActiveAndPurgeOthers.d.ts +11 -0
  748. package/dist/types/api/queries/activities/getActivities.d.ts +65 -855
  749. package/dist/types/api/queries/activities/util/activitiesHelpers.d.ts +19 -0
  750. package/dist/types/api/queries/links/getEntityLinks.d.ts +4 -2
  751. package/dist/types/components/SyncButton/SyncButton.d.ts +11 -0
  752. package/dist/types/components/SyncButton/index.d.ts +1 -0
  753. package/dist/types/components/index.d.ts +1 -0
  754. package/dist/types/containers/Feed/components/ActivityStatusChange/ActivityStatusSecondary.d.ts +7 -0
  755. package/dist/types/containers/Feed/components/ActivityVersions/ActivityVersions.d.ts +3 -0
  756. package/dist/types/containers/Feed/hooks/useGetFeedActivitiesData.d.ts +3 -42
  757. package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +4 -4
  758. package/dist/types/containers/ProjectTreeTable/hooks/useFetchOverviewData.d.ts +10 -2
  759. package/dist/types/containers/ProjectTreeTable/types/overviewContext.d.ts +9 -2
  760. package/dist/types/containers/Slicer/context/SlicerContext.d.ts +1 -0
  761. package/dist/types/containers/Slicer/hooks/useSelectedEntityIds.d.ts +7 -1
  762. package/dist/types/containers/Views/utils/viewUpdateHelper.d.ts +7 -0
  763. package/dist/types/context/EntityUpdatesContext.d.ts +44 -0
  764. package/dist/types/context/EntityUpdatesContextInstance.d.ts +2 -0
  765. package/dist/types/context/ProjectFoldersContext.d.ts +2 -2
  766. package/dist/types/context/index.d.ts +1 -0
  767. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"getEntityLinks.es.js","sources":["../../../../../../src/api/queries/links/getEntityLinks.ts"],"sourcesContent":["import { FetchBaseQueryError } from '@reduxjs/toolkit/query'\nimport {\n GetFoldersLinksQuery,\n GetTasksLinksQuery,\n GetProductsLinksQuery,\n GetVersionsLinksQuery,\n GetRepresentationsLinksQuery,\n GetWorkfilesLinksQuery,\n gqlLinksApi,\n foldersApi,\n} from '@shared/api/generated'\nimport { formatEntityLabel } from './utils/formatEntityLinks'\nimport { toast } from 'react-toastify'\nimport { PubSub } from '@shared/util'\n\n/**\n * Custom queryFn for fetching entity links with optimized caching behavior.\n *\n * Key features:\n * 1. Single cache per project and entity type - different entityIds combinations don't create new caches\n * 2. Skips fetching entities that are already cached\n * 3. Force refetch when entityIds change\n * 4. Merges new entities into cache without duplicates\n * 5. Supports all entity types: folders, tasks, products, versions, representations, workfiles\n */\n\n// Define the arguments for the query\nexport type GetEntityLinksArgs = {\n projectName: string\n entityIds: string[]\n entityType: 'folder' | 'task' | 'product' | 'version' | 'representation' | 'workfile'\n}\n\n// Define link types for each entity\nexport type FolderLink =\n GetFoldersLinksQuery['project']['folders']['edges'][0]['node']['links']['edges'][0]\nexport type TaskLink =\n GetTasksLinksQuery['project']['tasks']['edges'][0]['node']['links']['edges'][0]\nexport type ProductLink =\n GetProductsLinksQuery['project']['products']['edges'][0]['node']['links']['edges'][0]\nexport type VersionLink =\n GetVersionsLinksQuery['project']['versions']['edges'][0]['node']['links']['edges'][0]\nexport type RepresentationLink =\n GetRepresentationsLinksQuery['project']['representations']['edges'][0]['node']['links']['edges'][0]\nexport type WorkfileLink =\n GetWorkfilesLinksQuery['project']['workfiles']['edges'][0]['node']['links']['edges'][0]\n\nexport type EntityLinkQuery =\n | FolderLink\n | TaskLink\n | ProductLink\n | VersionLink\n | RepresentationLink\n | WorkfileLink\nexport type EntityLink = Pick<EntityLinkQuery, 'direction' | 'entityType' | 'id' | 'linkType'> & {\n node: Pick<EntityLinkQuery['node'], 'name' | 'id'> & {\n label?: string | null\n parents: string[]\n subType: string | undefined\n } | null\n isRestricted?: boolean // flag to indicate if this link is restricted\n}\n\n// Define the result type for the query - simplified without edges wrapper\nexport type EntityWithLinks = {\n id: string\n links: EntityLink[]\n}\n\nexport type GetEntityLinksResult = EntityWithLinks[]\n\n// Map entity types to their corresponding GraphQL endpoints\nconst entityEndpoints = {\n folder: 'GetFoldersLinks',\n task: 'GetTasksLinks',\n product: 'GetProductsLinks',\n version: 'GetVersionsLinks',\n representation: 'GetRepresentationsLinks',\n workfile: 'GetWorkfilesLinks',\n} as const\n\n// Map entity types to their result path in the GraphQL response\nconst entityResultPaths = {\n folder: 'folders',\n task: 'tasks',\n product: 'products',\n version: 'versions',\n representation: 'representations',\n workfile: 'workfiles',\n} as const\n\nconst injectedQueries = foldersApi.injectEndpoints({\n endpoints: (build) => ({\n getEntityLinks: build.query<GetEntityLinksResult, GetEntityLinksArgs>({\n queryFn: async (\n { projectName, entityIds, entityType },\n { getState, dispatch, queryCacheKey, forced },\n ) => {\n try {\n // Get current state to access cached data\n const state = getState() as any\n const cacheKey = JSON.stringify({ projectName, entityType })\n\n // Access the cache entry for this project and entity type\n const cacheEntry =\n state.restApi?.queries?.[queryCacheKey || `getEntityLinks(${cacheKey})`]\n const cachedData = cacheEntry?.data || []\n\n // 1. When fetching new data for entityIds, we should skip entities that are already in the cache.\n const cachedEntityIds = new Set(cachedData.map((entity: EntityWithLinks) => entity.id))\n const entityIdsToFetch = entityIds.filter((id) => !cachedEntityIds?.has(id) || forced)\n\n // If all entities are already cached, return the cached data\n if (entityIdsToFetch.length === 0) {\n return { data: cachedData }\n }\n\n // Get the appropriate endpoint and parameter names\n const endpoint = entityEndpoints[entityType]\n const resultPath = entityResultPaths[entityType]\n\n // Fetch only the entities that aren't already cached\n const result = await dispatch(\n (gqlLinksApi.endpoints as any)[endpoint].initiate(\n { projectName, entityIds: entityIdsToFetch },\n { forceRefetch: true },\n ),\n ).unwrap()\n\n const newEntities =\n result.project?.[resultPath]?.edges?.map(({ node }: { node: any }) => {\n // Log restricted links\n const restrictedLinks = node.links.edges?.filter((e: EntityLinkQuery | null) => !e?.node) || []\n if (restrictedLinks.length > 0) {\n console.log(`[RESTRICTED LINKS] Entity ${node.id} (${node.name}) has ${restrictedLinks.length} restricted link(s):`,\n restrictedLinks.map((link: any) => ({\n linkId: link?.id,\n linkType: link?.linkType,\n direction: link?.direction,\n entityType: link?.entityType,\n nodeIsNull: !link?.node\n }))\n )\n }\n\n return {\n id: node.id,\n links:\n node.links.edges\n ?.map((linkEdge: EntityLinkQuery | null) => {\n if (!linkEdge?.node) {\n // Restricted link - node is null\n return {\n ...linkEdge,\n node: null,\n isRestricted: true,\n } as EntityLink\n }\n // Normal link\n return {\n ...linkEdge,\n node: {\n id: linkEdge.node.id,\n name: linkEdge.node.name,\n label: formatEntityLabel(linkEdge.node),\n parents: linkEdge.node.parents || [],\n subType: 'subType' in linkEdge.node ? linkEdge.node.subType : undefined,\n },\n isRestricted: false,\n } as EntityLink\n }) || [], // Flatten the edges structure\n }\n }) || []\n\n // Return the new entities - the merge function will handle combining with existing cache\n return { data: newEntities }\n } catch (error: any) {\n console.error(`Error in getEntityLinks queryFn for ${entityType}:`, error)\n toast.error(`Error fetching ${entityType} links`)\n return { error: { status: 'FETCH_ERROR', error: error.message } as FetchBaseQueryError }\n }\n },\n // 2. We should not create new caches when the entityIds argument changes.\n serializeQueryArgs: ({ queryArgs }) => {\n // Use only projectName and entityType for the cache key, ignoring entityIds\n return { projectName: queryArgs.projectName, entityType: queryArgs.entityType }\n },\n // 3. We should force a refetch every time the entityIds changes.\n forceRefetch: ({ currentArg, previousArg }) => {\n // Force refetch if entityIds array is different\n if (!currentArg || !previousArg) return true\n\n // Compare arrays by converting to sets\n const currentIds = new Set(currentArg.entityIds)\n const previousIds = new Set(previousArg.entityIds)\n\n if (currentIds.size !== previousIds.size) return true\n\n // Check if any IDs are different\n for (const id of currentIds) {\n if (!previousIds.has(id)) return true\n }\n\n return false\n },\n // 4. We should merge new entities into the cache ensuring there are no duplicates.\n merge: (currentCache, newItems) => {\n if (!currentCache) return newItems\n\n const cacheMap = new Map(currentCache.map((item) => [item.id, item]))\n for (const newItem of newItems) {\n cacheMap.set(newItem.id, newItem) // Overwrite if exists, add if not\n }\n // Update currentCache in-place\n currentCache.length = 0\n currentCache.push(...cacheMap.values())\n },\n // Provide tags for potential invalidation\n providesTags: (result, error, arg) =>\n result\n ? [\n ...result.flatMap((entity) =>\n entity.links\n .filter((link) => link.node !== null)\n .map((link) => ({ type: 'link', id: link.node!.id })),\n ),\n { type: 'link', id: `${arg.projectName}-${arg.entityType}` },\n ]\n : [{ type: 'link', id: `${arg.projectName}-${arg.entityType}` }],\n // Subscribe to link.created and link.deleted WebSocket events\n async onCacheEntryAdded(\n { projectName, entityIds, entityType },\n { cacheDataLoaded, cacheEntryRemoved, updateCachedData, dispatch },\n ) {\n let token: any\n const pendingEntityIds = new Set<string>()\n const MAX_BATCH = 100\n const INTERVAL = 500\n let scheduled = false\n\n const schedule = () => {\n if (scheduled) return\n scheduled = true\n setTimeout(flush, INTERVAL)\n }\n\n const flush = async () => {\n scheduled = false\n if (!pendingEntityIds.size) return\n const batchIds = Array.from(pendingEntityIds).slice(0, MAX_BATCH)\n batchIds.forEach((id) => pendingEntityIds.delete(id))\n\n try {\n // Get the appropriate endpoint and parameter names\n const endpoint = entityEndpoints[entityType]\n const resultPath = entityResultPaths[entityType]\n\n // Fetch fresh data for the affected entities\n const result = await dispatch(\n (gqlLinksApi.endpoints as any)[endpoint].initiate(\n { projectName, entityIds: batchIds },\n { forceRefetch: true },\n ),\n ).unwrap()\n\n const updatedEntities =\n result.project?.[resultPath]?.edges?.map(({ node }: { node: any }) => {\n\n return {\n id: node.id,\n links:\n node.links.edges\n ?.map((linkEdge: EntityLinkQuery | null) => {\n if (!linkEdge?.node) {\n // Restricted link - node is null\n return {\n ...linkEdge,\n node: null,\n isRestricted: true,\n } as EntityLink\n }\n // Normal link\n return {\n ...linkEdge,\n node: {\n id: linkEdge.node.id,\n name: linkEdge.node.name,\n label: formatEntityLabel(linkEdge.node),\n parents: linkEdge.node.parents || [],\n subType: 'subType' in linkEdge.node ? linkEdge.node.subType : undefined,\n },\n isRestricted: false,\n } as EntityLink\n }) || [],\n }\n }) || []\n\n updateCachedData((draft: EntityWithLinks[]) => {\n for (const updatedEntity of updatedEntities) {\n const idx = draft.findIndex((entity) => entity.id === updatedEntity.id)\n if (idx > -1) {\n // Update existing entity's links\n draft[idx] = updatedEntity\n } else {\n // Add new entity if not in cache\n draft.push(updatedEntity)\n }\n }\n })\n } catch (err) {\n console.error('Realtime link batch update failed', err)\n } finally {\n if (pendingEntityIds.size) schedule()\n }\n }\n\n try {\n await cacheDataLoaded\n\n const handlePubSub = async (_topic: string, message: any) => {\n // Only react to link.created and link.deleted events for this project\n if (!_topic.startsWith('link.created') && !_topic.startsWith('link.deleted')) return\n if (message?.project !== projectName) return\n\n // Link events have inputId and outputId in the summary (both entities affected by the link)\n const inputId = message?.summary?.inputId\n const outputId = message?.summary?.outputId\n if (!inputId && !outputId) return\n\n // Add both entities to pending list since both are affected by the link change\n if (inputId) pendingEntityIds.add(inputId)\n if (outputId) pendingEntityIds.add(outputId)\n schedule()\n }\n\n // Subscribe to link events\n // NOTE: backend emits topics like 'link.created' and 'link.deleted'.\n // PubSub supports prefix matching when subscribing.\n token = PubSub.subscribe('link', handlePubSub)\n } catch (e) {\n // cache entry removed before loaded - ignore\n }\n\n await cacheEntryRemoved\n if (token) PubSub.unsubscribe(token)\n },\n }),\n }),\n})\n\nexport const { useGetEntityLinksQuery } = injectedQueries\nexport { injectedQueries as entityLinksApi }\n"],"names":["entityEndpoints","entityResultPaths","injectedQueries","foldersApi","build","projectName","entityIds","entityType","getState","dispatch","queryCacheKey","forced","state","cacheKey","cachedData","cachedEntityIds","entity","entityIdsToFetch","id","endpoint","resultPath","gqlLinksApi","node","restrictedLinks","e","link","linkEdge","formatEntityLabel","error","toast","queryArgs","currentArg","previousArg","currentIds","previousIds","currentCache","newItems","cacheMap","item","newItem","result","arg","cacheDataLoaded","cacheEntryRemoved","updateCachedData","token","pendingEntityIds","MAX_BATCH","INTERVAL","scheduled","schedule","flush","batchIds","updatedEntities","draft","updatedEntity","idx","err","handlePubSub","_topic","message","inputId","outputId","PubSub","useGetEntityLinksQuery"],"mappings":"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"}
1
+ {"version":3,"file":"getEntityLinks.es.js","sources":["../../../../../../src/api/queries/links/getEntityLinks.ts"],"sourcesContent":["import { FetchBaseQueryError } from '@reduxjs/toolkit/query'\nimport {\n GetFoldersLinksQuery,\n GetTasksLinksQuery,\n GetProductsLinksQuery,\n GetVersionsLinksQuery,\n GetRepresentationsLinksQuery,\n GetWorkfilesLinksQuery,\n gqlLinksApi,\n foldersApi,\n} from '@shared/api/generated'\nimport { formatEntityLabel } from './utils/formatEntityLinks'\nimport { toast } from 'react-toastify'\nimport { PubSub } from '@shared/util'\n\n/**\n * Custom queryFn for fetching entity links with optimized caching behavior.\n *\n * Key features:\n * 1. Single cache per project and entity type - different entityIds combinations don't create new caches\n * 2. Skips fetching entities that are already cached\n * 3. Force refetch when entityIds change\n * 4. Merges new entities into cache without duplicates\n * 5. Supports all entity types: folders, tasks, products, versions, representations, workfiles\n */\n\n// Define the arguments for the query\nexport type GetEntityLinksArgs = {\n projectName: string\n entityIds: string[]\n entityType: 'folder' | 'task' | 'product' | 'version' | 'representation' | 'workfile'\n}\n\n// Define link types for each entity\nexport type FolderLink =\n GetFoldersLinksQuery['project']['folders']['edges'][0]['node']['links']['edges'][0]\nexport type TaskLink =\n GetTasksLinksQuery['project']['tasks']['edges'][0]['node']['links']['edges'][0]\nexport type ProductLink =\n GetProductsLinksQuery['project']['products']['edges'][0]['node']['links']['edges'][0]\nexport type VersionLink =\n GetVersionsLinksQuery['project']['versions']['edges'][0]['node']['links']['edges'][0]\nexport type RepresentationLink =\n GetRepresentationsLinksQuery['project']['representations']['edges'][0]['node']['links']['edges'][0]\nexport type WorkfileLink =\n GetWorkfilesLinksQuery['project']['workfiles']['edges'][0]['node']['links']['edges'][0]\n\nexport type EntityLinkQuery =\n | FolderLink\n | TaskLink\n | ProductLink\n | VersionLink\n | RepresentationLink\n | WorkfileLink\nexport type EntityLink = Pick<EntityLinkQuery, 'direction' | 'entityType' | 'id' | 'linkType'> & {\n node:\n | (EntityLinkQuery['node'] & {\n name: string\n id: string\n label?: string | null\n parents: string[]\n subType: string | undefined\n })\n | null\n isRestricted?: boolean // flag to indicate if this link is restricted\n}\n\n// Define the result type for the query - simplified without edges wrapper\nexport type EntityWithLinks = {\n id: string\n links: EntityLink[]\n}\n\nexport type GetEntityLinksResult = EntityWithLinks[]\n\n// Map entity types to their corresponding GraphQL endpoints\nconst entityEndpoints = {\n folder: 'GetFoldersLinks',\n task: 'GetTasksLinks',\n product: 'GetProductsLinks',\n version: 'GetVersionsLinks',\n representation: 'GetRepresentationsLinks',\n workfile: 'GetWorkfilesLinks',\n} as const\n\n// Map entity types to their result path in the GraphQL response\nconst entityResultPaths = {\n folder: 'folders',\n task: 'tasks',\n product: 'products',\n version: 'versions',\n representation: 'representations',\n workfile: 'workfiles',\n} as const\n\nconst injectedQueries = foldersApi.injectEndpoints({\n endpoints: (build) => ({\n getEntityLinks: build.query<GetEntityLinksResult, GetEntityLinksArgs>({\n queryFn: async (\n { projectName, entityIds, entityType },\n { getState, dispatch, queryCacheKey, forced },\n ) => {\n try {\n // Get current state to access cached data\n const state = getState() as any\n const cacheKey = JSON.stringify({ projectName, entityType })\n\n // Access the cache entry for this project and entity type\n const cacheEntry =\n state.restApi?.queries?.[queryCacheKey || `getEntityLinks(${cacheKey})`]\n const cachedData = cacheEntry?.data || []\n\n // 1. When fetching new data for entityIds, we should skip entities that are already in the cache.\n const cachedEntityIds = new Set(cachedData.map((entity: EntityWithLinks) => entity.id))\n const entityIdsToFetch = entityIds.filter((id) => !cachedEntityIds?.has(id) || forced)\n\n // If all entities are already cached, return the cached data\n if (entityIdsToFetch.length === 0) {\n return { data: cachedData }\n }\n\n // Get the appropriate endpoint and parameter names\n const endpoint = entityEndpoints[entityType]\n const resultPath = entityResultPaths[entityType]\n\n // Fetch only the entities that aren't already cached\n const result = await dispatch(\n (gqlLinksApi.endpoints as any)[endpoint].initiate(\n { projectName, entityIds: entityIdsToFetch },\n { forceRefetch: true },\n ),\n ).unwrap()\n\n const newEntities =\n result.project?.[resultPath]?.edges?.map(({ node }: { node: any }) => {\n // Log restricted links\n const restrictedLinks =\n node.links.edges?.filter((e: EntityLinkQuery | null) => !e?.node) || []\n if (restrictedLinks.length > 0) {\n console.log(\n `[RESTRICTED LINKS] Entity ${node.id} (${node.name}) has ${restrictedLinks.length} restricted link(s):`,\n restrictedLinks.map((link: any) => ({\n linkId: link?.id,\n linkType: link?.linkType,\n direction: link?.direction,\n entityType: link?.entityType,\n nodeIsNull: !link?.node,\n })),\n )\n }\n\n return {\n id: node.id,\n links:\n node.links.edges?.map((linkEdge: EntityLinkQuery | null) => {\n if (!linkEdge?.node) {\n // Restricted link - node is null\n return {\n ...linkEdge,\n node: null,\n isRestricted: true,\n } as EntityLink\n }\n // Normal link\n return {\n ...linkEdge,\n node: {\n id: linkEdge.node.id,\n name: linkEdge.node.name,\n label: formatEntityLabel(linkEdge.node),\n parents: linkEdge.node.parents || [],\n subType: 'subType' in linkEdge.node ? linkEdge.node.subType : undefined,\n },\n isRestricted: false,\n } as EntityLink\n }) || [], // Flatten the edges structure\n }\n }) || []\n\n // Return the new entities - the merge function will handle combining with existing cache\n return { data: newEntities }\n } catch (error: any) {\n console.error(`Error in getEntityLinks queryFn for ${entityType}:`, error)\n toast.error(`Error fetching ${entityType} links`)\n return { error: { status: 'FETCH_ERROR', error: error.message } as FetchBaseQueryError }\n }\n },\n // 2. We should not create new caches when the entityIds argument changes.\n serializeQueryArgs: ({ queryArgs }) => {\n // Use only projectName and entityType for the cache key, ignoring entityIds\n return { projectName: queryArgs.projectName, entityType: queryArgs.entityType }\n },\n // 3. We should force a refetch every time the entityIds changes.\n forceRefetch: ({ currentArg, previousArg }) => {\n // Force refetch if entityIds array is different\n if (!currentArg || !previousArg) return true\n\n // Compare arrays by converting to sets\n const currentIds = new Set(currentArg.entityIds)\n const previousIds = new Set(previousArg.entityIds)\n\n if (currentIds.size !== previousIds.size) return true\n\n // Check if any IDs are different\n for (const id of currentIds) {\n if (!previousIds.has(id)) return true\n }\n\n return false\n },\n // 4. We should merge new entities into the cache ensuring there are no duplicates.\n merge: (currentCache, newItems) => {\n if (!currentCache) return newItems\n\n const cacheMap = new Map(currentCache.map((item) => [item.id, item]))\n for (const newItem of newItems) {\n cacheMap.set(newItem.id, newItem) // Overwrite if exists, add if not\n }\n // Update currentCache in-place\n currentCache.length = 0\n currentCache.push(...cacheMap.values())\n },\n // Provide tags for potential invalidation\n providesTags: (result, error, arg) =>\n result\n ? [\n ...result.flatMap((entity) =>\n entity.links\n .filter((link) => link.node !== null)\n .map((link) => ({ type: 'link', id: link.node!.id as string })),\n ),\n { type: 'link', id: `${arg.projectName}-${arg.entityType}` },\n ]\n : [{ type: 'link', id: `${arg.projectName}-${arg.entityType}` }],\n // Subscribe to link.created and link.deleted WebSocket events\n async onCacheEntryAdded(\n { projectName, entityType },\n { cacheDataLoaded, cacheEntryRemoved, updateCachedData, dispatch },\n ) {\n let token: any\n const pendingEntityIds = new Set<string>()\n const MAX_BATCH = 100\n const INTERVAL = 500\n let scheduled = false\n\n const schedule = () => {\n if (scheduled) return\n scheduled = true\n setTimeout(flush, INTERVAL)\n }\n\n const flush = async () => {\n scheduled = false\n if (!pendingEntityIds.size) return\n const batchIds = Array.from(pendingEntityIds).slice(0, MAX_BATCH)\n batchIds.forEach((id) => pendingEntityIds.delete(id))\n\n try {\n // Get the appropriate endpoint and parameter names\n const endpoint = entityEndpoints[entityType]\n const resultPath = entityResultPaths[entityType]\n\n // Fetch fresh data for the affected entities\n const result = await dispatch(\n (gqlLinksApi.endpoints as any)[endpoint].initiate(\n { projectName, entityIds: batchIds },\n { forceRefetch: true },\n ),\n ).unwrap()\n\n const updatedEntities =\n result.project?.[resultPath]?.edges?.map(({ node }: { node: any }) => {\n return {\n id: node.id,\n links:\n node.links.edges?.map((linkEdge: EntityLinkQuery | null) => {\n if (!linkEdge?.node) {\n // Restricted link - node is null\n return {\n ...linkEdge,\n node: null,\n isRestricted: true,\n } as EntityLink\n }\n // Normal link\n return {\n ...linkEdge,\n node: {\n id: linkEdge.node.id,\n name: linkEdge.node.name,\n label: formatEntityLabel(linkEdge.node),\n parents: linkEdge.node.parents || [],\n subType: 'subType' in linkEdge.node ? linkEdge.node.subType : undefined,\n },\n isRestricted: false,\n } as EntityLink\n }) || [],\n }\n }) || []\n\n updateCachedData((draft: EntityWithLinks[]) => {\n for (const updatedEntity of updatedEntities) {\n const idx = draft.findIndex((entity) => entity.id === updatedEntity.id)\n if (idx > -1) {\n // Update existing entity's links\n draft[idx] = updatedEntity\n } else {\n // Add new entity if not in cache\n draft.push(updatedEntity)\n }\n }\n })\n } catch (err) {\n console.error('Realtime link batch update failed', err)\n } finally {\n if (pendingEntityIds.size) schedule()\n }\n }\n\n try {\n await cacheDataLoaded\n\n const handlePubSub = async (_topic: string, message: any) => {\n // Only react to link.created and link.deleted events for this project\n if (!_topic.startsWith('link.created') && !_topic.startsWith('link.deleted')) return\n if (message?.project !== projectName) return\n\n // Link events have inputId and outputId in the summary (both entities affected by the link)\n const inputId = message?.summary?.inputId\n const outputId = message?.summary?.outputId\n if (!inputId && !outputId) return\n\n // Add both entities to pending list since both are affected by the link change\n if (inputId) pendingEntityIds.add(inputId)\n if (outputId) pendingEntityIds.add(outputId)\n schedule()\n }\n\n // Subscribe to link events\n // NOTE: backend emits topics like 'link.created' and 'link.deleted'.\n // PubSub supports prefix matching when subscribing.\n token = PubSub.subscribe('link', handlePubSub)\n } catch (e) {\n // cache entry removed before loaded - ignore\n }\n\n await cacheEntryRemoved\n if (token) PubSub.unsubscribe(token)\n },\n }),\n }),\n})\n\nexport const { useGetEntityLinksQuery } = injectedQueries\nexport { injectedQueries as entityLinksApi }\n"],"names":["entityEndpoints","entityResultPaths","injectedQueries","foldersApi","build","projectName","entityIds","entityType","getState","dispatch","queryCacheKey","forced","state","cacheKey","cachedData","cachedEntityIds","entity","entityIdsToFetch","id","endpoint","resultPath","gqlLinksApi","node","restrictedLinks","e","link","linkEdge","formatEntityLabel","error","toast","queryArgs","currentArg","previousArg","currentIds","previousIds","currentCache","newItems","cacheMap","item","newItem","result","arg","cacheDataLoaded","cacheEntryRemoved","updateCachedData","token","pendingEntityIds","MAX_BATCH","INTERVAL","scheduled","schedule","flush","batchIds","updatedEntities","draft","updatedEntity","idx","err","handlePubSub","_topic","message","inputId","outputId","PubSub","useGetEntityLinksQuery"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("../../base/client.cjs.js");const U=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/dataImport.cjs.js");require("../../generated/desktop.cjs.js");require("../../generated/entityLists.cjs.js");require("../../generated/events.cjs.js");require("../../generated/files.cjs.js");const K=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/projectFolders.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 R=require("../../../util/pubsub.cjs.js");require("lodash");require("react-toastify");require("uuid");const B=require("../../../util/thumbnailWebsocket.cjs.js");require("../actions/getActions.cjs.js");require("../activities/getActivities.cjs.js");require("../activities/updateReaction.cjs.js");require("../activities/getMentions.cjs.js");require("../activities/getCategories.cjs.js");require("../addons/getAddons.cjs.js");require("../addons/updateAddons.cjs.js");require("../attributes/getAttributes.cjs.js");require("../attributes/updateAttributes.cjs.js");require("../authentication/getAuthentication.cjs.js");require("../bundles/getBundles.cjs.js");require("../bundles/updateBundles.cjs.js");require("../cloud/cloud.cjs.js");const A=require("../columnStats/columnStats.cjs.js"),M=require("../columnStats/metricTargets.cjs.js");require("../columnStats/groupCounts.cjs.js");require("../config/getConfig.cjs.js");require("../config/updateConfig.cjs.js");require("../entities/getEntity.cjs.js");require("../entities/getEntityPanel.cjs.js");require("./updateOverview.cjs.js");require("../versions/getVersionsProducts.cjs.js");require("../links/getEntityLinks.cjs.js");require("../entities/updateEntity.cjs.js");require("../entityLists/getLists.cjs.js");require("../entityLists/updateLists.cjs.js");require("../entityLists/getListsAttributes.cjs.js");require("../entityLists/listItemsColumnStats.cjs.js");require("../entityLists/updateListsAttributes.cjs.js");require("../entityLists/listFolders.cjs.js");require("../folders/getFolders.cjs.js");require("../folders/getFolderDeleteInfo.cjs.js");require("../grouping/getGrouping.cjs.js");require("../links/updateLinks.cjs.js");require("../links/getLinks.cjs.js");require("../permissions/getPermissions.cjs.js");require("../products/createProduct.cjs.js");require("../products/getFolderProducts.cjs.js");require("../project/getProject.cjs.js");require("../project/updateProject.cjs.js");require("../projectFolders/projectFolders.cjs.js");require("../review/getReview.cjs.js");require("../review/updateReview.cjs.js");require("../share/share.cjs.js");require("../system/getSystem.cjs.js");require("../tasks/getTasks.cjs.js");require("../tasks/updateTasks.cjs.js");require("../teams/getTeams.cjs.js");require("../userDashboard/getUserDashboard.cjs.js");require("../users/getUsers.cjs.js");require("../users/updateUsers.cjs.js");require("../users/guests.cjs.js");require("../versions/updateVersions.cjs.js");require("../views/getViews.cjs.js");require("../views/updateViews.cjs.js");require("../watchers/getWatchers.cjs.js");require("../uris/getUris.cjs.js");const j=r=>{try{return JSON.parse(r)}catch{return{}}},H=r=>{if(!r.project)return[];const e=[];for(const{node:s}of r.project.tasks.edges)e.push({...s,folderId:s.folderId||"root",attrib:j(s.allAttrib),entityId:s.id,entityType:"task",links:[]});return e},P=(r=[],e,s)=>{const i=r?.map(o=>({type:"overviewTask",id:o.id}))||[],a=s?(Array.isArray(s)?s:[s]).map(o=>({type:"overviewTask",id:o})):[];return[...i,...a,{type:"overviewTask",id:e},{type:"overviewTask",id:"LIST"}]},C=U.api.enhanceEndpoints({endpoints:{GetTasksByParent:{transformResponse:r=>({pageInfo:r?.project?.tasks?.pageInfo??{hasNextPage:!1,endCursor:null},tasks:H(r)}),providesTags:(r,e,{parentIds:s,projectName:i})=>P(r?.tasks||[],i,s)},GetTasksList:{transformResponse:r=>({tasks:H(r),pageInfo:r.project.tasks.pageInfo}),providesTags:(r,e,{projectName:s})=>P(r?.tasks||[],s)},GetFolderColumnStats:{transformResponse:r=>A.normalizeFieldStats(r?.project?.folders?.fieldStats??[]),transformErrorResponse:r=>A.transformStatsError(r,"folder"),serializeQueryArgs:({queryArgs:{targets:r,...e}})=>e,merge:(r,e)=>A.mergeFieldStats(e,r),forceRefetch:({currentArg:r,previousArg:e})=>M.hasNewTargetFields(r,e),providesTags:(r,e,{projectName:s})=>[{type:"folderColumnStats",id:s}]},GetTaskColumnStats:{transformResponse:r=>A.normalizeFieldStats(r?.project?.tasks?.fieldStats??[]),transformErrorResponse:r=>A.transformStatsError(r,"task"),serializeQueryArgs:({queryArgs:{targets:r,...e}})=>e,merge:(r,e)=>A.mergeFieldStats(e,r),forceRefetch:({currentArg:r,previousArg:e})=>M.hasNewTargetFields(r,e),providesTags:(r,e,{projectName:s})=>[{type:"taskColumnStats",id:s}]}}}),X=K.api.enhanceEndpoints({endpoints:{searchFolders:{}}}),N=100,_={},z=(r,e,s,i,a)=>JSON.stringify({projectName:r,filter:e,folderFilter:s,search:i,showComments:a}),V=(r,e)=>{_[r]||(_[r]=new Set),e.forEach(s=>_[r].add(s))},$=r=>_[r]||new Set,Q=C.injectEndpoints({endpoints:r=>({getOverviewTasksByFolders:r.query({async queryFn({projectName:e,parentIds:s,filter:i,folderFilter:a,search:o,showComments:k},{dispatch:S,getState:w}){try{const m=w(),b={projectName:e,filter:i,folderFilter:a,search:o,showComments:k},I=Q.endpoints.getOverviewTasksByFolders.select(b)(m)?.data||[],F=z(e,i,a,o,k),q=$(F),t=s.filter(n=>!q.has(n));if(t.length===0)return{data:I};const u=[],c=100,d=20,l=10,f=1e3,p=c*d;if(t.length>f)throw new Error(`Exceeded maximum folders count limit ${f} (${t.length}). Please reduce the number of expanded folders.`);for(let n=0;n<t.length;n+=c){const y=t.slice(n,n+c);let v=!0,E,x=0;for(;v&&x<l;){if(x++,x===l)throw new Error(`Exceeded maximum tasks count limit ${l*p}.`);const G=await S(C.endpoints.GetTasksByParent.initiate({projectName:e,parentIds:y,filter:i,folderFilter:a,search:o,showComments:!!k,first:p,after:E},{forceRefetch:!0}));if(G.error)throw G.error;const O=G.data,J=O?.tasks||[];u.push(...J);const L=O?.pageInfo;v=L?.hasNextPage||!1,E=L?.endCursor||void 0}}V(F,t);const h=[...I,...u],g=new Map(h.map(n=>[n.id,n]));return{data:Array.from(g.values())}}catch(m){return console.error(m),{error:{status:"FETCH_ERROR",error:m.message||m.data?.message||JSON.stringify(m)||"Unknown Fetch Error"}}}},serializeQueryArgs:({queryArgs:{parentIds:e,...s}})=>({...s}),forceRefetch({currentArg:e,previousArg:s}){return JSON.stringify(e)!==JSON.stringify(s)},providesTags:(e,s,{parentIds:i,projectName:a})=>P(e,a,i),async onCacheEntryAdded({projectName:e,parentIds:s,filter:i,folderFilter:a,search:o,showComments:k},{cacheDataLoaded:S,cacheEntryRemoved:w,updateCachedData:m,dispatch:b}){let T;const I=new Set,F=100,q=500;let t=!1;const u=()=>{t||(t=!0,setTimeout(c,q))},c=async()=>{if(t=!1,!I.size)return;const f=Array.from(I).slice(0,F);f.forEach(p=>I.delete(p));try{const h=(await b(C.endpoints.GetTasksList.initiate({projectName:e,taskIds:f,showComments:!!k},{forceRefetch:!0})).unwrap()).tasks||[],g=new Map(h.map(n=>[n.id,n]));m(n=>{for(const y of h){const v=n.findIndex(E=>E.id===y.id);v>-1?n[v]=y:n.push(y)}for(const y of f)if(!g.has(y)){const v=n.findIndex(E=>E.id===y);v>-1&&n.splice(v,1)}})}catch(p){console.error("Realtime overview batch update failed",p)}finally{I.size&&u()}};let d;try{await S,d=B.subscribeToThumbnailUpdates(p=>{m(h=>{p.forEach(g=>{if(g.summary.entityType==="task"&&g.summary.thumbnailHash){const n=h.findIndex(y=>y.id===g.summary.entityId);n>-1&&(h[n].thumbnailHash=g.summary.thumbnailHash)}})})},["task"]);const f=async(p,h)=>{const g=h?.summary?.entityId,n=h?.summary?.parentId;!g||!n||s.includes(n)&&(I.add(g),u())};T=R.subscribe("entity.task",f)}catch{}await w;const l=z(e,i,a,o,k);delete _[l],T&&R.unsubscribe(T),d&&d()}}),getSearchFolders:r.query({async queryFn({projectName:e,folderSearchRequest:s},{dispatch:i}){try{return{data:(await i(X.endpoints.searchFolders.initiate({projectName:e,folderSearchRequest:s}))).data?.folderIds||[]}}catch(a){return console.error(a),{error:{status:"FETCH_ERROR",error:a.message}}}},providesTags:(e,s,{projectName:i})=>[{type:"tasksFolder",id:i}]}),getTasksListInfinite:r.infiniteQuery({infiniteQueryOptions:{initialPageParam:{cursor:"",desc:!1},getNextPageParam:(e,s,i,a)=>{const o=e.pageInfo;if(!(!(i.desc?o.hasPreviousPage:o.hasNextPage)||!o.endCursor))return{cursor:o.endCursor,desc:i.desc}}},queryFn:async({queryArg:e,pageParam:s},i)=>{try{const{projectName:a,filter:o,folderFilter:k,search:S,folderIds:w,taskIds:m,sortBy:b,desc:T,showComments:I,includeFolderChildren:F}=e,{cursor:q}=s,t={projectName:a,filter:o,folderFilter:k,search:S,folderIds:w,taskIds:m,showComments:!!I,includeFolderChildren:F!==!1};b?(t.sortBy=b,T?(t.before=q||void 0,t.last=N):(t.after=q||void 0,t.first=N)):(t.after=q||void 0,t.first=N);const u=await i.dispatch(C.endpoints.GetTasksList.initiate(t,{forceRefetch:!0}));if(u.error)throw u.error;const c={tasks:[],pageInfo:{hasNextPage:!1,endCursor:null,startCursor:null,hasPreviousPage:!1}};return{data:u.data||c}}catch(a){return console.error("Error in getTasksListInfinite queryFn:",a),{error:{status:"FETCH_ERROR",error:a.message}}}},providesTags:(e,s,{projectName:i})=>P(e?.pages.flatMap(a=>a.tasks)||[],i),async onCacheEntryAdded(e,{cacheDataLoaded:s,cacheEntryRemoved:i,updateCachedData:a,dispatch:o}){let k;const S=new Set,w=100,m=500;let b=!1;const T=()=>{b||(b=!0,setTimeout(I,m))},I=async()=>{if(b=!1,!S.size)return;const q=Array.from(S).slice(0,w);q.forEach(t=>S.delete(t));try{const u=(await o(C.endpoints.GetTasksList.initiate({projectName:e.projectName,taskIds:q,folderIds:e.folderIds,showComments:!!e.showComments},{forceRefetch:!0})).unwrap()).tasks||[],c=new Map(u.map(d=>[d.id,d]));a(d=>{for(const l of u){let f=!1;for(const p of d.pages){const h=p.tasks.findIndex(g=>g.id===l.id);if(h!==-1){p.tasks[h]=l,f=!0;break}}f||(d.pages.length?d.pages[0].tasks.unshift(l):d.pages.push({tasks:[l],pageInfo:{startCursor:null,endCursor:null,hasNextPage:!1,hasPreviousPage:!1}}))}for(const l of q)if(!c.has(l))for(const f of d.pages){const p=f.tasks.findIndex(h=>h.id===l);if(p!==-1){f.tasks.splice(p,1);break}}})}catch(t){console.error("Realtime infinite tasks batch update failed",t)}finally{S.size&&T()}};let F;try{await s,F=B.subscribeToThumbnailUpdates(t=>{a(u=>{t.forEach(c=>{if(c.summary.entityType==="task"&&c.summary.thumbnailHash)for(const d of u.pages){const l=d.tasks.findIndex(f=>f.id===c.summary.entityId);if(l>-1){d.tasks[l].thumbnailHash=c.summary.thumbnailHash;break}}})})},["task"]);const q=async(t,u)=>{const c=u?.summary?.entityId;c&&(S.add(c),T())};k=R.subscribe("entity.task",q)}catch{}await i,k&&R.unsubscribe(k),F&&F()}}),getGroupedTasksList:r.query({queryFn:async({projectName:e,groups:s,search:i,folderFilter:a,folderIds:o,desc:k,sortBy:S,groupCount:w,showComments:m},b)=>{try{let T=[];const I=new Set(["folderType"]);for(const t of s){const u=w||t.count||500;let c=t.filter,d=a;if(t.filter)try{const p=JSON.parse(t.filter),h=p.conditions||[],g=h.filter(y=>!I.has(y.key)),n=h.filter(y=>I.has(y.key));if(n.length>0){c=g.length?JSON.stringify({...p,conditions:g}):void 0;const y=a?JSON.parse(a):null,E=[...y&&Array.isArray(y.conditions)?y.conditions:[],...n];d=JSON.stringify(y?{...y,conditions:E}:{conditions:E})}}catch{}const l={projectName:e,filter:c,folderFilter:d,search:i,folderIds:o,sortBy:S,showComments:!!m,group:t.value};k?l.last=u:l.first=u;const f=b.dispatch(C.endpoints.GetTasksList.initiate(l,{forceRefetch:!0}));T.push(f)}const F=await Promise.all(T),q=[];for(const t of F){if(t.error)throw t.error;const u=t.originalArgs?.group,c=t.data?.pageInfo?.hasNextPage||t.data?.pageInfo?.hasPreviousPage||!1,d=t.data?.tasks.map((l,f,p)=>({...l,groups:[{value:u,hasNextPage:f===p.length-1&&c?u:void 0}]}))||[];q.push(...d)}return{data:{tasks:q}}}catch(T){return console.error("Error in getGroupedTasksList queryFn:",T),{error:{status:"FETCH_ERROR",error:T.message}}}},providesTags:(e,s,{projectName:i})=>P(e?.tasks,i)})})}),{useGetOverviewTasksByFoldersQuery:Y,useGetSearchFoldersQuery:D,useGetTasksListQuery:W,useGetTasksListInfiniteInfiniteQuery:Z,useLazyGetTasksByParentQuery:ee,useGetGroupedTasksListQuery:re,useGetFolderColumnStatsQuery:se,useGetTaskColumnStatsQuery:te}=Q;exports.TASKS_INFINITE_QUERY_COUNT=N;exports.default=Q;exports.parseAllAttribs=j;exports.useGetFolderColumnStatsQuery=se;exports.useGetGroupedTasksListQuery=re;exports.useGetOverviewTasksByFoldersQuery=Y;exports.useGetSearchFoldersQuery=D;exports.useGetTaskColumnStatsQuery=te;exports.useGetTasksListInfiniteInfiniteQuery=Z;exports.useGetTasksListQuery=W;exports.useLazyGetTasksByParentQuery=ee;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("../../base/client.cjs.js");const K=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/dataImport.cjs.js");require("../../generated/desktop.cjs.js");require("../../generated/entityLists.cjs.js");require("../../generated/events.cjs.js");require("../../generated/files.cjs.js");const X=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/projectFolders.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("../../../util/pubsub.cjs.js");require("lodash");require("react-toastify");require("uuid");const H=require("../../../util/thumbnailWebsocket.cjs.js");require("../actions/getActions.cjs.js");require("../activities/getActivities.cjs.js");require("../activities/updateReaction.cjs.js");require("../activities/getMentions.cjs.js");require("../activities/getCategories.cjs.js");require("../addons/getAddons.cjs.js");require("../addons/updateAddons.cjs.js");require("../attributes/getAttributes.cjs.js");require("../attributes/updateAttributes.cjs.js");require("../authentication/getAuthentication.cjs.js");require("../bundles/getBundles.cjs.js");require("../bundles/updateBundles.cjs.js");require("../cloud/cloud.cjs.js");const A=require("../columnStats/columnStats.cjs.js"),U=require("../columnStats/metricTargets.cjs.js");require("../columnStats/groupCounts.cjs.js");require("../config/getConfig.cjs.js");require("../config/updateConfig.cjs.js");require("../entities/getEntity.cjs.js");require("../entities/getEntityPanel.cjs.js");require("./updateOverview.cjs.js");require("../versions/getVersionsProducts.cjs.js");require("../links/getEntityLinks.cjs.js");require("../entities/updateEntity.cjs.js");require("../entityLists/getLists.cjs.js");require("../entityLists/updateLists.cjs.js");require("../entityLists/getListsAttributes.cjs.js");require("../entityLists/listItemsColumnStats.cjs.js");require("../entityLists/updateListsAttributes.cjs.js");require("../entityLists/listFolders.cjs.js");require("../folders/getFolders.cjs.js");require("../folders/getFolderDeleteInfo.cjs.js");require("../grouping/getGrouping.cjs.js");require("../links/updateLinks.cjs.js");require("../links/getLinks.cjs.js");require("../permissions/getPermissions.cjs.js");require("../products/createProduct.cjs.js");require("../products/getFolderProducts.cjs.js");require("../project/getProject.cjs.js");require("../project/updateProject.cjs.js");require("../projectFolders/projectFolders.cjs.js");require("../review/getReview.cjs.js");require("../review/updateReview.cjs.js");require("../share/share.cjs.js");require("../system/getSystem.cjs.js");require("../tasks/getTasks.cjs.js");require("../tasks/updateTasks.cjs.js");require("../teams/getTeams.cjs.js");require("../userDashboard/getUserDashboard.cjs.js");require("../users/getUsers.cjs.js");require("../users/updateUsers.cjs.js");require("../users/guests.cjs.js");require("../versions/updateVersions.cjs.js");require("../views/getViews.cjs.js");require("../views/updateViews.cjs.js");require("../watchers/getWatchers.cjs.js");require("../uris/getUris.cjs.js");const C=10,D=r=>{try{return JSON.parse(r)}catch{return{}}},z=r=>{if(!r.project)return[];const e=[];for(const{node:s}of r.project.tasks.edges)e.push({...s,folderId:s.folderId||"root",attrib:D(s.allAttrib),entityId:s.id,entityType:"task",links:[]});return e},P=(r=[],e,s)=>{const i=r?.map(c=>({type:"overviewTask",id:c.id}))||[],a=s?(Array.isArray(s)?s:[s]).map(c=>({type:"overviewTask",id:c})):[];return[...i,...a,{type:"overviewTask",id:e},{type:"overviewTask",id:"LIST"}]},_=K.api.enhanceEndpoints({endpoints:{GetTasksByParent:{transformResponse:r=>({pageInfo:r?.project?.tasks?.pageInfo??{hasNextPage:!1,endCursor:null},tasks:z(r)}),providesTags:(r,e,{parentIds:s,projectName:i})=>P(r?.tasks||[],i,s),keepUnusedDataFor:C},GetTasksList:{transformResponse:r=>({tasks:z(r),pageInfo:r.project.tasks.pageInfo}),providesTags:(r,e,{projectName:s})=>P(r?.tasks||[],s),keepUnusedDataFor:C},GetFolderColumnStats:{transformResponse:r=>A.normalizeFieldStats(r?.project?.folders?.fieldStats??[]),transformErrorResponse:r=>A.transformStatsError(r,"folder"),serializeQueryArgs:({queryArgs:{targets:r,...e}})=>e,merge:(r,e)=>A.mergeFieldStats(e,r),forceRefetch:({currentArg:r,previousArg:e})=>U.hasNewTargetFields(r,e),providesTags:(r,e,{projectName:s})=>[{type:"folderColumnStats",id:s}],keepUnusedDataFor:C},GetTaskColumnStats:{transformResponse:r=>A.normalizeFieldStats(r?.project?.tasks?.fieldStats??[]),transformErrorResponse:r=>A.transformStatsError(r,"task"),serializeQueryArgs:({queryArgs:{targets:r,...e}})=>e,merge:(r,e)=>A.mergeFieldStats(e,r),forceRefetch:({currentArg:r,previousArg:e})=>U.hasNewTargetFields(r,e),providesTags:(r,e,{projectName:s})=>[{type:"taskColumnStats",id:s}],keepUnusedDataFor:C}}}),V=X.api.enhanceEndpoints({endpoints:{searchFolders:{}}}),x=100,R={},j=(r,e,s,i,a)=>JSON.stringify({projectName:r,filter:e,folderFilter:s,search:i,showComments:a}),$=(r,e)=>{R[r]||(R[r]=new Set),e.forEach(s=>R[r].add(s))},Y=r=>R[r]||new Set,O=_.injectEndpoints({endpoints:r=>({getOverviewTasksByFolders:r.query({async queryFn({projectName:e,parentIds:s,filter:i,folderFilter:a,search:c,showComments:T},{dispatch:I,getState:w,forced:b}){try{const g=w(),k={projectName:e,filter:i,folderFilter:a,search:c,showComments:T},S=O.endpoints.getOverviewTasksByFolders.select(k)(g)?.data||[],q=j(e,i,a,c,T),t=Y(q),o=b?s:s.filter(n=>!t.has(n));if(o.length===0)return{data:S};const l=[],u=100,p=20,d=10,f=1e3,y=u*p;if(o.length>f)throw new Error(`Exceeded maximum folders count limit ${f} (${o.length}). Please reduce the number of expanded folders.`);for(let n=0;n<o.length;n+=u){const v=o.slice(n,n+u);let E=!0,L,G=0;for(;E&&G<d;){if(G++,G===d)throw new Error(`Exceeded maximum tasks count limit ${d*y}.`);const Q=await I(_.endpoints.GetTasksByParent.initiate({projectName:e,parentIds:v,filter:i,folderFilter:a,search:c,showComments:!!T,first:y,after:L},{forceRefetch:!0}));if(Q.error)throw Q.error;const M=Q.data,J=M?.tasks||[];l.push(...J);const B=M?.pageInfo;E=B?.hasNextPage||!1,L=B?.endCursor||void 0}}$(q,o);const m=[...S,...l],h=new Map(m.map(n=>[n.id,n]));return{data:Array.from(h.values())}}catch(g){return console.error(g),{error:{status:"FETCH_ERROR",error:g.message||g.data?.message||JSON.stringify(g)||"Unknown Fetch Error"}}}},serializeQueryArgs:({queryArgs:{parentIds:e,...s}})=>({...s}),forceRefetch({currentArg:e,previousArg:s}){return JSON.stringify(e)!==JSON.stringify(s)},providesTags:(e,s,{parentIds:i,projectName:a})=>P(e,a,i),async onCacheEntryAdded({projectName:e,parentIds:s,filter:i,folderFilter:a,search:c,showComments:T},{cacheDataLoaded:I,cacheEntryRemoved:w,updateCachedData:b,dispatch:g}){let k;const F=new Set,S=100,q=500;let t=!1;const o=()=>{t||(t=!0,setTimeout(l,q))},l=async()=>{if(t=!1,!F.size)return;const d=Array.from(F).slice(0,S);d.forEach(f=>F.delete(f));try{const y=(await g(_.endpoints.GetTasksList.initiate({projectName:e,taskIds:d,showComments:!!T},{forceRefetch:!0})).unwrap()).tasks||[],m=new Map(y.map(h=>[h.id,h]));b(h=>{for(const n of y){const v=h.findIndex(E=>E.id===n.id);v>-1?h[v]=n:h.push(n)}for(const n of d)if(!m.has(n)){const v=h.findIndex(E=>E.id===n);v>-1&&h.splice(v,1)}})}catch(f){console.error("Realtime overview batch update failed",f)}finally{F.size&&o()}};let u;try{await I,u=H.subscribeToThumbnailUpdates(f=>{b(y=>{f.forEach(m=>{if(m.summary.entityType==="task"&&m.summary.thumbnailHash){const h=y.findIndex(n=>n.id===m.summary.entityId);h>-1&&(y[h].thumbnailHash=m.summary.thumbnailHash)}})})},["task"]);const d=async(f,y)=>{const m=y?.summary?.entityId,h=y?.summary?.parentId;!m||!h||s.includes(h)&&(F.add(m),o())};k=N.subscribe("entity.task",d)}catch{}await w;const p=j(e,i,a,c,T);delete R[p],k&&N.unsubscribe(k),u&&u()},keepUnusedDataFor:C}),getSearchFolders:r.query({async queryFn({projectName:e,folderSearchRequest:s},{dispatch:i}){try{return{data:(await i(V.endpoints.searchFolders.initiate({projectName:e,folderSearchRequest:s}))).data?.folderIds||[]}}catch(a){return console.error(a),{error:{status:"FETCH_ERROR",error:a.message}}}},providesTags:(e,s,{projectName:i})=>[{type:"tasksFolder",id:i}],keepUnusedDataFor:C}),getTasksListInfinite:r.infiniteQuery({infiniteQueryOptions:{initialPageParam:{cursor:"",desc:!1},getNextPageParam:(e,s,i,a)=>{const c=e.pageInfo;if(!(!(i.desc?c.hasPreviousPage:c.hasNextPage)||!c.endCursor))return{cursor:c.endCursor,desc:i.desc}}},queryFn:async({queryArg:e,pageParam:s},i)=>{try{const{projectName:a,filter:c,folderFilter:T,search:I,folderIds:w,taskIds:b,sortBy:g,desc:k,showComments:F,includeFolderChildren:S}=e,{cursor:q}=s,t={projectName:a,filter:c,folderFilter:T,search:I,folderIds:w,taskIds:b,showComments:!!F,includeFolderChildren:S!==!1};g?(t.sortBy=g,k?(t.before=q||void 0,t.last=x):(t.after=q||void 0,t.first=x)):(t.after=q||void 0,t.first=x);const o=await i.dispatch(_.endpoints.GetTasksList.initiate(t,{forceRefetch:!0}));if(o.error)throw o.error;const l={tasks:[],pageInfo:{hasNextPage:!1,endCursor:null,startCursor:null,hasPreviousPage:!1}};return{data:o.data||l}}catch(a){return console.error("Error in getTasksListInfinite queryFn:",a),{error:{status:"FETCH_ERROR",error:a.message}}}},providesTags:(e,s,{projectName:i})=>P(e?.pages.flatMap(a=>a.tasks)||[],i),async onCacheEntryAdded(e,{cacheDataLoaded:s,cacheEntryRemoved:i,updateCachedData:a,dispatch:c}){let T;const I=new Set,w=100,b=500;let g=!1;const k=()=>{g||(g=!0,setTimeout(F,b))},F=async()=>{if(g=!1,!I.size)return;const q=Array.from(I).slice(0,w);q.forEach(t=>I.delete(t));try{const o=(await c(_.endpoints.GetTasksList.initiate({projectName:e.projectName,taskIds:q,folderIds:e.folderIds,showComments:!!e.showComments},{forceRefetch:!0})).unwrap()).tasks||[],l=new Map(o.map(u=>[u.id,u]));a(u=>{for(const p of o){let d=!1;for(const f of u.pages){const y=f.tasks.findIndex(m=>m.id===p.id);if(y!==-1){f.tasks[y]=p,d=!0;break}}d||(u.pages.length?u.pages[0].tasks.unshift(p):u.pages.push({tasks:[p],pageInfo:{startCursor:null,endCursor:null,hasNextPage:!1,hasPreviousPage:!1}}))}for(const p of q)if(!l.has(p))for(const d of u.pages){const f=d.tasks.findIndex(y=>y.id===p);if(f!==-1){d.tasks.splice(f,1);break}}})}catch(t){console.error("Realtime infinite tasks batch update failed",t)}finally{I.size&&k()}};let S;try{await s,S=H.subscribeToThumbnailUpdates(t=>{a(o=>{t.forEach(l=>{if(l.summary.entityType==="task"&&l.summary.thumbnailHash)for(const u of o.pages){const p=u.tasks.findIndex(d=>d.id===l.summary.entityId);if(p>-1){u.tasks[p].thumbnailHash=l.summary.thumbnailHash;break}}})})},["task"]);const q=async(t,o)=>{const l=o?.summary?.entityId;l&&(I.add(l),k())};T=N.subscribe("entity.task",q)}catch{}await i,T&&N.unsubscribe(T),S&&S()},keepUnusedDataFor:C}),getGroupedTasksList:r.query({queryFn:async({projectName:e,groups:s,search:i,folderFilter:a,folderIds:c,desc:T,sortBy:I,groupCount:w,showComments:b},g)=>{try{let k=[];const F=new Set(["folderType"]);for(const t of s){const o=w||t.count||500;let l=t.filter,u=a;if(t.filter)try{const f=JSON.parse(t.filter),y=f.conditions||[],m=y.filter(n=>!F.has(n.key)),h=y.filter(n=>F.has(n.key));if(h.length>0){l=m.length?JSON.stringify({...f,conditions:m}):void 0;const n=a?JSON.parse(a):null,E=[...n&&Array.isArray(n.conditions)?n.conditions:[],...h];u=JSON.stringify(n?{...n,conditions:E}:{conditions:E})}}catch{}const p={projectName:e,filter:l,folderFilter:u,search:i,folderIds:c,sortBy:I,showComments:!!b,group:t.value};T?p.last=o:p.first=o;const d=g.dispatch(_.endpoints.GetTasksList.initiate(p,{forceRefetch:!0}));k.push(d)}const S=await Promise.all(k),q=[];for(const t of S){if(t.error)throw t.error;const o=t.originalArgs?.group,l=t.data?.pageInfo?.hasNextPage||t.data?.pageInfo?.hasPreviousPage||!1,u=t.data?.tasks.map((p,d,f)=>({...p,groups:[{value:o,hasNextPage:d===f.length-1&&l?o:void 0}]}))||[];q.push(...u)}return{data:{tasks:q}}}catch(k){return console.error("Error in getGroupedTasksList queryFn:",k),{error:{status:"FETCH_ERROR",error:k.message}}}},providesTags:(e,s,{projectName:i})=>P(e?.tasks,i),keepUnusedDataFor:C})})}),{useGetOverviewTasksByFoldersQuery:W,useGetSearchFoldersQuery:Z,useGetTasksListQuery:ee,useGetTasksListInfiniteInfiniteQuery:re,useLazyGetTasksByParentQuery:se,useGetGroupedTasksListQuery:te,useGetFolderColumnStatsQuery:ie,useGetTaskColumnStatsQuery:ae}=O;exports.TASKS_INFINITE_QUERY_COUNT=x;exports.default=O;exports.parseAllAttribs=D;exports.useGetFolderColumnStatsQuery=ie;exports.useGetGroupedTasksListQuery=te;exports.useGetOverviewTasksByFoldersQuery=W;exports.useGetSearchFoldersQuery=Z;exports.useGetTaskColumnStatsQuery=ae;exports.useGetTasksListInfiniteInfiniteQuery=re;exports.useGetTasksListQuery=ee;exports.useLazyGetTasksByParentQuery=se;
2
2
  //# sourceMappingURL=getOverview.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getOverview.cjs.js","sources":["../../../../../../src/api/queries/overview/getOverview.ts"],"sourcesContent":["import {\n gqlApi,\n GetTasksByParentQuery,\n GetTasksListQuery,\n GetFolderColumnStatsQuery,\n GetTaskColumnStatsQuery,\n foldersApi,\n SearchFoldersApiArg,\n GetTasksListQueryVariables,\n} from '@shared/api/generated'\nimport PubSub from '@shared/util/pubsub'\nimport { subscribeToThumbnailUpdates, ThumbnailUpdateMessage } from '@shared/util'\nimport { EditorTaskNode } from '@shared/containers/ProjectTreeTable'\nimport type { FieldStats } from '../columnStats'\nimport {\n normalizeFieldStats,\n mergeFieldStats,\n hasNewTargetFields,\n transformStatsError,\n} from '../columnStats'\nimport {\n DefinitionsFromApi,\n FetchBaseQueryError,\n OverrideResultType,\n TagTypesFromApi,\n} from '@reduxjs/toolkit/query'\n\n// parse attribs JSON string to object\nexport const parseAllAttribs = (allAttrib: string) => {\n try {\n return JSON.parse(allAttrib)\n } catch (e) {\n return {}\n }\n}\n\nconst transformFilteredEntitiesByParent = (response: GetTasksByParentQuery): EditorTaskNode[] => {\n if (!response.project) {\n return []\n }\n\n const tasks: EditorTaskNode[] = []\n for (const { node: taskNode } of response.project.tasks.edges) {\n tasks.push({\n ...taskNode,\n folderId: taskNode.folderId || 'root',\n attrib: parseAllAttribs(taskNode.allAttrib),\n entityId: taskNode.id,\n entityType: 'task',\n links: [],\n })\n }\n\n return tasks\n}\n\nconst getOverviewTaskTags = (\n result: EditorTaskNode[] | undefined = [],\n projectName: string,\n parentIds?: string | string[],\n) => {\n const taskTags = result?.map((task) => ({ type: 'overviewTask', id: task.id })) || []\n\n const parentTags = parentIds\n ? (Array.isArray(parentIds) ? parentIds : [parentIds]).map((id) => ({\n type: 'overviewTask',\n id,\n }))\n : []\n\n return [\n ...taskTags,\n ...parentTags,\n { type: 'overviewTask', id: projectName },\n { type: 'overviewTask', id: 'LIST' },\n ]\n}\n\nexport type GetTasksListResult = {\n pageInfo: GetTasksListQuery['project']['tasks']['pageInfo']\n tasks: EditorTaskNode[]\n}\nexport type GetTasksByParentResult = {\n pageInfo: GetTasksByParentQuery['project']['tasks']['pageInfo']\n tasks: EditorTaskNode[]\n}\n\nexport type GetTasksListArgs = {\n projectName: string\n filter?: string\n folderFilter?: string\n search?: string\n folderIds?: string[]\n taskIds?: string[]\n desc?: boolean\n sortBy?: string\n showComments?: boolean\n includeFolderChildren?: boolean\n}\n\nexport type GetGroupedTasksListResult = {\n tasks: EditorTaskNode[]\n}\n\nexport type GetGroupedTasksListArgs = {\n projectName: string\n groups: { filter: string; count: number; value: string }[]\n search?: string\n folderFilter?: string\n folderIds?: string[]\n desc?: boolean\n sortBy?: string\n groupCount?: number // optional override for all groups\n showComments?: boolean\n}\n\n// Define the page param type for infinite query\ntype TasksListPageParam = {\n cursor: string\n desc?: boolean\n}\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\ntype UpdatedDefinitions = Omit<Definitions, 'GetFilteredEntities'> & {\n GetTasksByParent: OverrideResultType<Definitions['GetTasksByParent'], GetTasksByParentResult>\n GetTasksList: OverrideResultType<Definitions['GetTasksList'], GetTasksListResult>\n GetFolderColumnStats: OverrideResultType<Definitions['GetFolderColumnStats'], FieldStats[]>\n GetTaskColumnStats: OverrideResultType<Definitions['GetTaskColumnStats'], FieldStats[]>\n}\n\n// GRAPHQL API\nconst enhancedApi = gqlApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n // This gets tasks for all parent folders provided\n // But in this case it will only ever receive one parent folder from the getOverviewTasksByFolders query\n // It is only used by getOverviewTasksByFolders in this file\n GetTasksByParent: {\n transformResponse: (res: GetTasksByParentQuery) => ({\n pageInfo: res?.project?.tasks?.pageInfo ?? { hasNextPage: false, endCursor: null },\n tasks: transformFilteredEntitiesByParent(res),\n }),\n providesTags: (result, _e, { parentIds, projectName }) =>\n getOverviewTaskTags(result?.tasks || [], projectName, parentIds),\n },\n GetTasksList: {\n transformResponse: (result: GetTasksListQuery) => ({\n tasks: transformFilteredEntitiesByParent(result),\n pageInfo: result.project.tasks.pageInfo,\n }),\n providesTags: (result, _e, { projectName }) =>\n getOverviewTaskTags(result?.tasks || [], projectName),\n },\n // footer stats: `targets` excluded from cache key + responses merged,\n // so column toggles reuse cache and only added targets refetch\n GetFolderColumnStats: {\n transformResponse: (res: GetFolderColumnStatsQuery) =>\n normalizeFieldStats(res?.project?.folders?.fieldStats ?? []),\n transformErrorResponse: (error: any) => transformStatsError(error, 'folder'),\n serializeQueryArgs: ({ queryArgs: { targets: _t, ...rest } }) => rest,\n merge: (cache, incoming) => mergeFieldStats(incoming, cache),\n forceRefetch: ({ currentArg, previousArg }) => hasNewTargetFields(currentArg, previousArg),\n providesTags: (_r, _e, { projectName }) => [{ type: 'folderColumnStats', id: projectName }],\n },\n GetTaskColumnStats: {\n transformResponse: (res: GetTaskColumnStatsQuery) =>\n normalizeFieldStats(res?.project?.tasks?.fieldStats ?? []),\n transformErrorResponse: (error: any) => transformStatsError(error, 'task'),\n serializeQueryArgs: ({ queryArgs: { targets: _t, ...rest } }) => rest,\n merge: (cache, incoming) => mergeFieldStats(incoming, cache),\n forceRefetch: ({ currentArg, previousArg }) => hasNewTargetFields(currentArg, previousArg),\n providesTags: (_r, _e, { projectName }) => [{ type: 'taskColumnStats', id: projectName }],\n },\n },\n})\n\n// REST FOLDERS API\nconst foldersApiEnhanced = foldersApi.enhanceEndpoints({\n endpoints: {\n searchFolders: {},\n },\n})\n\nexport const TASKS_INFINITE_QUERY_COUNT = 100 // Number of items to fetch per page\n\n// --- TRACKING REGISTRY FOR EMPTY FOLDERS (FILTER-AWARE) ---\nconst queriedFoldersRegistry: Record<string, Set<string>> = {}\n\nconst getCacheKey = (\n projectName: string,\n filter?: string,\n folderFilter?: string,\n search?: string,\n showComments?: boolean,\n) => {\n return JSON.stringify({ projectName, filter, folderFilter, search, showComments })\n}\n\nconst markFoldersAsQueried = (cacheKey: string, folderIds: string[]) => {\n if (!queriedFoldersRegistry[cacheKey]) {\n queriedFoldersRegistry[cacheKey] = new Set()\n }\n folderIds.forEach((id) => queriedFoldersRegistry[cacheKey].add(id))\n}\n\nconst getQueriedFolders = (cacheKey: string): Set<string> => {\n return queriedFoldersRegistry[cacheKey] || new Set()\n}\n\nconst injectedApi = enhancedApi.injectEndpoints({\n endpoints: (build) => ({\n // Each project has one cache for all the tasks of the expanded folders\n // Changing the expanded folders will trigger a refetch but not a new cache\n // Each expanded folder has it's own query that is looped over here\n // When new folders are expanded, the new tasks are fetched and we use the cache for the rest\n // This also solves the pagination issue of getting all tasks in one query, splitting it up in multiple queries to avoid pagination limits\n getOverviewTasksByFolders: build.query<\n EditorTaskNode[],\n {\n projectName: string\n parentIds: string[]\n filter?: string\n folderFilter?: string\n search?: string\n showComments?: boolean\n }\n >({\n async queryFn(\n { projectName, parentIds, filter, folderFilter, search, showComments },\n { dispatch, getState },\n ) {\n try {\n const state = getState()\n const cacheArgs = { projectName, filter, folderFilter, search, showComments }\n\n // Select current flat cache state\n const currentCache = (injectedApi.endpoints as any).getOverviewTasksByFolders.select(\n cacheArgs,\n )(state)\n const cacheData: EditorTaskNode[] = currentCache?.data || []\n\n // 1. Generate a stable cache key matching RTK Query's serialization\n const cacheKey = getCacheKey(projectName, filter, folderFilter, search, showComments)\n\n // 2. Fetch our registry specific to THIS combination of search/filters\n const alreadyQueriedFolders = getQueriedFolders(cacheKey)\n\n // 3. Diffing: Only request folders that haven't hit the network under these specific filters\n const newFolderIds = parentIds.filter((id) => !alreadyQueriedFolders.has(id))\n\n // Short-circuit if all expanded folders have been evaluated for this filter setup\n if (newFolderIds.length === 0) {\n return { data: cacheData }\n }\n\n const allNewTasks: EditorTaskNode[] = []\n const BATCH_SIZE = 100\n const TASK_PER_FOLDER = 20\n const MAX_PAGES_PER_BATCH = 10\n const MAX_FOLDERS = 1000\n const TASKS_PER_PAGE = BATCH_SIZE * TASK_PER_FOLDER\n\n if (newFolderIds.length > MAX_FOLDERS) {\n throw new Error(\n `Exceeded maximum folders count limit ${MAX_FOLDERS} (${newFolderIds.length}). Please reduce the number of expanded folders.`,\n )\n }\n\n // 5. Batch folder IDs into groups and process them sequentially\n for (let i = 0; i < newFolderIds.length; i += BATCH_SIZE) {\n const batchFolderIds = newFolderIds.slice(i, i + BATCH_SIZE)\n\n let hasNextPage = true\n let cursor: string | undefined = undefined\n let pageCount = 0\n\n while (hasNextPage && pageCount < MAX_PAGES_PER_BATCH) {\n pageCount++\n\n if (pageCount === MAX_PAGES_PER_BATCH) {\n throw new Error(\n `Exceeded maximum tasks count limit ${MAX_PAGES_PER_BATCH * TASKS_PER_PAGE}.`,\n )\n }\n\n const result = await dispatch(\n enhancedApi.endpoints.GetTasksByParent.initiate(\n {\n projectName,\n parentIds: batchFolderIds,\n filter,\n folderFilter,\n search,\n showComments: !!showComments,\n first: TASKS_PER_PAGE,\n after: cursor,\n },\n { forceRefetch: true },\n ),\n )\n\n if (result.error) throw result.error\n const data = result.data as GetTasksByParentResult\n\n const fetchedTasks = data?.tasks || []\n allNewTasks.push(...fetchedTasks)\n\n const pageInfo = data?.pageInfo\n hasNextPage = pageInfo?.hasNextPage || false\n cursor = pageInfo?.endCursor || undefined\n }\n }\n\n // 4. Only mark folders as queried if the network loops complete successfully\n markFoldersAsQueried(cacheKey, newFolderIds)\n\n // 5. Append new tasks to the existing flat array cache with task ID deduplication\n const finalTasks = [...cacheData, ...allNewTasks]\n const uniqueTasksMap = new Map(finalTasks.map((task) => [task.id, task]))\n\n return {\n data: Array.from(uniqueTasksMap.values()),\n }\n } catch (e: any) {\n console.error(e)\n const errorMessage =\n e.message || e.data?.message || JSON.stringify(e) || 'Unknown Fetch Error'\n return { error: { status: 'FETCH_ERROR', error: errorMessage } as FetchBaseQueryError }\n }\n },\n // keep one cache per project\n serializeQueryArgs: ({ queryArgs: { parentIds, ...rest } }) => ({\n ...rest,\n }),\n // Refetch when the page arg changes\n forceRefetch({ currentArg, previousArg }) {\n return JSON.stringify(currentArg) !== JSON.stringify(previousArg)\n },\n providesTags: (result, _e, { parentIds, projectName }) =>\n getOverviewTaskTags(result, projectName, parentIds),\n async onCacheEntryAdded(\n { projectName, parentIds, filter, folderFilter, search, showComments },\n { cacheDataLoaded, cacheEntryRemoved, updateCachedData, dispatch },\n ) {\n let token: any\n const pendingTaskIds = new Set<string>()\n const MAX_BATCH = 100\n const INTERVAL = 500\n let scheduled = false\n\n const schedule = () => {\n if (scheduled) return\n scheduled = true\n setTimeout(flush, INTERVAL)\n }\n\n const flush = async () => {\n scheduled = false\n if (!pendingTaskIds.size) return\n const batchIds = Array.from(pendingTaskIds).slice(0, MAX_BATCH)\n batchIds.forEach((id) => pendingTaskIds.delete(id))\n try {\n const res = await dispatch(\n enhancedApi.endpoints.GetTasksList.initiate(\n {\n projectName,\n taskIds: batchIds,\n showComments: !!showComments,\n } as any,\n { forceRefetch: true },\n ),\n ).unwrap()\n const returned = res.tasks || []\n const returnedMap = new Map(returned.map((t: EditorTaskNode) => [t.id, t]))\n\n updateCachedData((draft: EditorTaskNode[]) => {\n // update or add\n for (const task of returned) {\n const idx = draft.findIndex((t) => t.id === task.id)\n if (idx > -1) draft[idx] = task\n else draft.push(task)\n }\n // remove missing\n for (const id of batchIds) {\n if (!returnedMap.has(id)) {\n const idx = draft.findIndex((t) => t.id === id)\n if (idx > -1) draft.splice(idx, 1)\n }\n }\n })\n } catch (err) {\n console.error('Realtime overview batch update failed', err)\n } finally {\n if (pendingTaskIds.size) schedule()\n }\n }\n let unsubscribeThumbnails: (() => void) | undefined\n try {\n await cacheDataLoaded\n\n unsubscribeThumbnails = subscribeToThumbnailUpdates(\n (messages: ThumbnailUpdateMessage[]) => {\n updateCachedData((draft: EditorTaskNode[]) => {\n messages.forEach((message) => {\n if (message.summary.entityType === 'task' && message.summary.thumbnailHash) {\n const idx = draft.findIndex((t) => t.id === message.summary.entityId)\n if (idx > -1) {\n draft[idx].thumbnailHash = message.summary.thumbnailHash\n }\n }\n })\n })\n },\n ['task'],\n )\n\n const handlePubSub = async (_topic: string, message: any) => {\n const taskId = message?.summary?.entityId\n const parentId = message?.summary?.parentId\n if (!taskId || !parentId) return\n // Only react if the parent folder is part of the current expanded set\n if (!parentIds.includes(parentId)) return\n pendingTaskIds.add(taskId)\n schedule()\n }\n\n // Subscribe to task entity updates\n // NOTE: backend emits topics like 'entity.task.assignees_changed'.\n // Assuming PubSub supports prefix matching when subscribing without the suffix.\n token = PubSub.subscribe('entity.task', handlePubSub)\n } catch (e) {\n // cache entry removed before loaded - ignore\n }\n\n await cacheEntryRemoved\n\n // Evict tracking map memory entry completely when this RTK Query cache entry expires\n const deadCacheKey = getCacheKey(projectName, filter, folderFilter, search, showComments)\n delete queriedFoldersRegistry[deadCacheKey]\n\n if (token) PubSub.unsubscribe(token)\n if (unsubscribeThumbnails) unsubscribeThumbnails()\n },\n }),\n // searchFolders is a post so it's a bit annoying to consume\n // we wrap it in a queryFn to make it easier to consume as a query hook\n getSearchFolders: build.query<string[], SearchFoldersApiArg>({\n async queryFn({ projectName, folderSearchRequest }, { dispatch }) {\n try {\n const result = await dispatch(\n foldersApiEnhanced.endpoints.searchFolders.initiate({\n projectName,\n folderSearchRequest,\n }),\n )\n\n const data = result.data?.folderIds || []\n\n return { data }\n } catch (e: any) {\n console.error(e)\n const error = { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError\n return { error }\n }\n },\n providesTags: (_r, _e, { projectName }) => [{ type: 'tasksFolder', id: projectName }],\n }),\n // Add new infinite query endpoint for tasks list\n getTasksListInfinite: build.infiniteQuery<\n GetTasksListResult,\n GetTasksListArgs,\n TasksListPageParam\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 {\n projectName,\n filter,\n folderFilter,\n search,\n folderIds,\n taskIds,\n sortBy,\n desc,\n showComments,\n includeFolderChildren,\n } = queryArg\n const { cursor } = pageParam\n\n // Build the query parameters for GetTasksList\n const queryParams: any = {\n projectName,\n filter,\n folderFilter,\n search,\n folderIds,\n taskIds,\n showComments: !!showComments,\n includeFolderChildren: includeFolderChildren !== false, // default to true\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 = TASKS_INFINITE_QUERY_COUNT\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = TASKS_INFINITE_QUERY_COUNT\n }\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = TASKS_INFINITE_QUERY_COUNT\n }\n\n // Call the existing GetTasksList endpoint\n const result = await api.dispatch(\n enhancedApi.endpoints.GetTasksList.initiate(queryParams, { forceRefetch: true }),\n )\n\n if (result.error) throw result.error\n const fallback = {\n tasks: [],\n pageInfo: {\n hasNextPage: false,\n endCursor: null,\n startCursor: null,\n hasPreviousPage: false,\n },\n }\n\n // Return the tasks 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 getTasksListInfinite queryFn:', e)\n return { error: { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError }\n }\n },\n providesTags: (result, _e, { projectName }) =>\n getOverviewTaskTags(result?.pages.flatMap((p) => p.tasks) || [], projectName),\n async onCacheEntryAdded(\n arg,\n { cacheDataLoaded, cacheEntryRemoved, updateCachedData, dispatch },\n ) {\n let token: any\n const pendingTaskIds = new Set<string>()\n const MAX_BATCH = 100\n const INTERVAL = 500\n let scheduled = false\n\n const schedule = () => {\n if (scheduled) return\n scheduled = true\n setTimeout(flush, INTERVAL)\n }\n\n const flush = async () => {\n scheduled = false\n if (!pendingTaskIds.size) return\n const batchIds = Array.from(pendingTaskIds).slice(0, MAX_BATCH)\n batchIds.forEach((id) => pendingTaskIds.delete(id))\n try {\n const res = await dispatch(\n enhancedApi.endpoints.GetTasksList.initiate(\n {\n projectName: arg.projectName,\n taskIds: batchIds,\n folderIds: arg.folderIds,\n showComments: !!arg.showComments,\n } as any,\n { forceRefetch: true },\n ),\n ).unwrap()\n\n const returned = res.tasks || []\n const returnedMap = new Map(returned.map((t: EditorTaskNode) => [t.id, t]))\n\n updateCachedData((draft: { pages: GetTasksListResult[]; pageParams: any[] }) => {\n // update/insert\n for (const task of returned) {\n let located = false\n for (const page of draft.pages) {\n const idx = page.tasks.findIndex((t) => t.id === task.id)\n if (idx !== -1) {\n page.tasks[idx] = task\n located = true\n break\n }\n }\n if (!located) {\n if (draft.pages.length) draft.pages[0].tasks.unshift(task)\n else\n draft.pages.push({\n tasks: [task],\n pageInfo: {\n startCursor: null,\n endCursor: null,\n hasNextPage: false,\n hasPreviousPage: false,\n },\n })\n }\n }\n // remove any requested but missing tasks\n for (const id of batchIds) {\n if (returnedMap.has(id)) continue\n for (const page of draft.pages) {\n const idx = page.tasks.findIndex((t) => t.id === id)\n if (idx !== -1) {\n page.tasks.splice(idx, 1)\n break\n }\n }\n }\n })\n } catch (err) {\n console.error('Realtime infinite tasks batch update failed', err)\n } finally {\n if (pendingTaskIds.size) schedule()\n }\n }\n let unsubscribeThumbnails: (() => void) | undefined\n try {\n await cacheDataLoaded\n\n unsubscribeThumbnails = subscribeToThumbnailUpdates(\n (messages: ThumbnailUpdateMessage[]) => {\n updateCachedData((draft: { pages: GetTasksListResult[]; pageParams: any[] }) => {\n messages.forEach((message) => {\n if (message.summary.entityType === 'task' && message.summary.thumbnailHash) {\n for (const page of draft.pages) {\n const idx = page.tasks.findIndex((t) => t.id === message.summary.entityId)\n if (idx > -1) {\n page.tasks[idx].thumbnailHash = message.summary.thumbnailHash\n break\n }\n }\n }\n })\n })\n },\n ['task'],\n )\n\n const handlePubSub = async (_topic: string, message: any) => {\n const taskId = message?.summary?.entityId\n if (!taskId) return\n pendingTaskIds.add(taskId)\n schedule()\n }\n\n token = PubSub.subscribe('entity.task', handlePubSub)\n } catch (_) {\n // ignore\n }\n await cacheEntryRemoved\n if (token) PubSub.unsubscribe(token)\n if (unsubscribeThumbnails) unsubscribeThumbnails()\n },\n }),\n getGroupedTasksList: build.query<GetGroupedTasksListResult, GetGroupedTasksListArgs>({\n queryFn: async (\n {\n projectName,\n groups,\n search,\n folderFilter,\n folderIds,\n desc,\n sortBy,\n groupCount,\n showComments,\n },\n api,\n ) => {\n try {\n let promises = []\n // Folder-level filter keys that must go in folderFilter, not task filter\n const folderFilterKeys = new Set(['folderType'])\n\n for (const group of groups) {\n // Determine count for this group - use argument override, else group count, else default\n const count = groupCount || group.count || 500\n\n // Separate folder-level conditions from task-level conditions in the group filter\n let taskFilter: string | undefined = group.filter\n let mergedFolderFilter = folderFilter\n if (group.filter) {\n try {\n const parsed = JSON.parse(group.filter)\n const conditions = parsed.conditions || []\n const taskConditions = conditions.filter((c: any) => !folderFilterKeys.has(c.key))\n const folderConditions = conditions.filter((c: any) => folderFilterKeys.has(c.key))\n\n if (folderConditions.length > 0) {\n taskFilter = taskConditions.length\n ? JSON.stringify({ ...parsed, conditions: taskConditions })\n : undefined\n // Merge folder conditions with existing folderFilter, preserving metadata\n const existingFolderFilter = folderFilter ? JSON.parse(folderFilter) : null\n const existingConditions =\n existingFolderFilter && Array.isArray(existingFolderFilter.conditions)\n ? existingFolderFilter.conditions\n : []\n const allFolderConditions = [...existingConditions, ...folderConditions]\n mergedFolderFilter = JSON.stringify(\n existingFolderFilter\n ? { ...existingFolderFilter, conditions: allFolderConditions }\n : { conditions: allFolderConditions },\n )\n }\n } catch {\n // If parsing fails, use the original filter as-is\n }\n }\n\n const queryParams: GetTasksListQueryVariables = {\n projectName,\n filter: taskFilter,\n folderFilter: mergedFolderFilter,\n search,\n folderIds,\n sortBy: sortBy,\n showComments: !!showComments,\n // @ts-expect-error - we know group does not exist on query variables but we need it for later\n group: group.value,\n }\n if (desc) {\n queryParams.last = count\n } else {\n queryParams.first = count\n }\n\n const promise = api.dispatch(\n enhancedApi.endpoints.GetTasksList.initiate(queryParams, { forceRefetch: true }),\n )\n promises.push(promise)\n }\n\n const result = await Promise.all(promises)\n const tasks: EditorTaskNode[] = []\n for (const res of result) {\n if (res.error) throw res.error\n // get group value\n // @ts-expect-error - we know group does exist on res.originalArgs from line 319\n const groupValue = res.originalArgs?.group as string\n\n const hasNextPage =\n res.data?.pageInfo?.hasNextPage || res.data?.pageInfo?.hasPreviousPage || false\n const groupTasks =\n res.data?.tasks.map((task, i, a) => ({\n ...task,\n groups: [\n {\n value: groupValue,\n hasNextPage: i === a.length - 1 && hasNextPage ? groupValue : undefined, // Only add hasNextPage to the last task in the group\n },\n ],\n })) || []\n\n tasks.push(...groupTasks)\n }\n\n // Return the tasks directly as required by the query format\n return {\n data: {\n tasks,\n },\n }\n } catch (error: any) {\n console.error('Error in getGroupedTasksList queryFn:', error)\n return { error: { status: 'FETCH_ERROR', error: error.message } as FetchBaseQueryError }\n }\n },\n providesTags: (result, _e, { projectName }) =>\n getOverviewTaskTags(result?.tasks, projectName),\n }),\n }),\n})\n\nexport const {\n useGetOverviewTasksByFoldersQuery,\n useGetSearchFoldersQuery,\n useGetTasksListQuery,\n useGetTasksListInfiniteInfiniteQuery,\n useLazyGetTasksByParentQuery,\n useGetGroupedTasksListQuery,\n useGetFolderColumnStatsQuery,\n useGetTaskColumnStatsQuery,\n} = injectedApi\nexport default injectedApi\n"],"names":["parseAllAttribs","allAttrib","transformFilteredEntitiesByParent","response","tasks","taskNode","getOverviewTaskTags","result","projectName","parentIds","taskTags","task","parentTags","id","enhancedApi","gqlApi","res","_e","normalizeFieldStats","error","transformStatsError","_t","rest","cache","incoming","mergeFieldStats","currentArg","previousArg","hasNewTargetFields","_r","foldersApiEnhanced","foldersApi","TASKS_INFINITE_QUERY_COUNT","queriedFoldersRegistry","getCacheKey","filter","folderFilter","search","showComments","markFoldersAsQueried","cacheKey","folderIds","getQueriedFolders","injectedApi","build","dispatch","getState","state","cacheArgs","cacheData","alreadyQueriedFolders","newFolderIds","allNewTasks","BATCH_SIZE","TASK_PER_FOLDER","MAX_PAGES_PER_BATCH","MAX_FOLDERS","TASKS_PER_PAGE","i","batchFolderIds","hasNextPage","cursor","pageCount","data","fetchedTasks","pageInfo","finalTasks","uniqueTasksMap","e","cacheDataLoaded","cacheEntryRemoved","updateCachedData","token","pendingTaskIds","MAX_BATCH","INTERVAL","scheduled","schedule","flush","batchIds","returned","returnedMap","t","draft","idx","err","unsubscribeThumbnails","subscribeToThumbnailUpdates","messages","message","handlePubSub","_topic","taskId","parentId","PubSub","deadCacheKey","folderSearchRequest","lastPage","_allPages","lastPageParam","_allPageParams","queryArg","pageParam","api","taskIds","sortBy","desc","includeFolderChildren","queryParams","fallback","p","arg","located","page","groups","groupCount","promises","folderFilterKeys","group","count","taskFilter","mergedFolderFilter","parsed","conditions","taskConditions","c","folderConditions","existingFolderFilter","allFolderConditions","promise","groupValue","groupTasks","a","useGetOverviewTasksByFoldersQuery","useGetSearchFoldersQuery","useGetTasksListQuery","useGetTasksListInfiniteInfiniteQuery","useLazyGetTasksByParentQuery","useGetGroupedTasksListQuery","useGetFolderColumnStatsQuery","useGetTaskColumnStatsQuery"],"mappings":"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"}
1
+ {"version":3,"file":"getOverview.cjs.js","sources":["../../../../../../src/api/queries/overview/getOverview.ts"],"sourcesContent":["import {\n gqlApi,\n GetTasksByParentQuery,\n GetTasksListQuery,\n GetFolderColumnStatsQuery,\n GetTaskColumnStatsQuery,\n foldersApi,\n SearchFoldersApiArg,\n GetTasksListQueryVariables,\n} from '@shared/api/generated'\nimport PubSub from '@shared/util/pubsub'\nimport { subscribeToThumbnailUpdates, ThumbnailUpdateMessage } from '@shared/util'\nimport { EditorTaskNode } from '@shared/containers/ProjectTreeTable'\nimport type { FieldStats } from '../columnStats'\nimport {\n normalizeFieldStats,\n mergeFieldStats,\n hasNewTargetFields,\n transformStatsError,\n} from '../columnStats'\nimport {\n DefinitionsFromApi,\n FetchBaseQueryError,\n OverrideResultType,\n TagTypesFromApi,\n} from '@reduxjs/toolkit/query'\n\nconst CACHE_TIME = 10 // seconds\n\n// parse attribs JSON string to object\nexport const parseAllAttribs = (allAttrib: string) => {\n try {\n return JSON.parse(allAttrib)\n } catch (e) {\n return {}\n }\n}\n\nconst transformFilteredEntitiesByParent = (response: GetTasksByParentQuery): EditorTaskNode[] => {\n if (!response.project) {\n return []\n }\n\n const tasks: EditorTaskNode[] = []\n for (const { node: taskNode } of response.project.tasks.edges) {\n tasks.push({\n ...taskNode,\n folderId: taskNode.folderId || 'root',\n attrib: parseAllAttribs(taskNode.allAttrib),\n entityId: taskNode.id,\n entityType: 'task',\n links: [],\n })\n }\n\n return tasks\n}\n\nconst getOverviewTaskTags = (\n result: EditorTaskNode[] | undefined = [],\n projectName: string,\n parentIds?: string | string[],\n) => {\n const taskTags = result?.map((task) => ({ type: 'overviewTask', id: task.id })) || []\n\n const parentTags = parentIds\n ? (Array.isArray(parentIds) ? parentIds : [parentIds]).map((id) => ({\n type: 'overviewTask',\n id,\n }))\n : []\n\n return [\n ...taskTags,\n ...parentTags,\n { type: 'overviewTask', id: projectName },\n { type: 'overviewTask', id: 'LIST' },\n ]\n}\n\nexport type GetTasksListResult = {\n pageInfo: GetTasksListQuery['project']['tasks']['pageInfo']\n tasks: EditorTaskNode[]\n}\nexport type GetTasksByParentResult = {\n pageInfo: GetTasksByParentQuery['project']['tasks']['pageInfo']\n tasks: EditorTaskNode[]\n}\n\nexport type GetTasksListArgs = {\n projectName: string\n filter?: string\n folderFilter?: string\n search?: string\n folderIds?: string[]\n taskIds?: string[]\n desc?: boolean\n sortBy?: string\n showComments?: boolean\n includeFolderChildren?: boolean\n}\n\nexport type GetGroupedTasksListResult = {\n tasks: EditorTaskNode[]\n}\n\nexport type GetGroupedTasksListArgs = {\n projectName: string\n groups: { filter: string; count: number; value: string }[]\n search?: string\n folderFilter?: string\n folderIds?: string[]\n desc?: boolean\n sortBy?: string\n groupCount?: number // optional override for all groups\n showComments?: boolean\n}\n\n// Define the page param type for infinite query\ntype TasksListPageParam = {\n cursor: string\n desc?: boolean\n}\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\ntype UpdatedDefinitions = Omit<Definitions, 'GetFilteredEntities'> & {\n GetTasksByParent: OverrideResultType<Definitions['GetTasksByParent'], GetTasksByParentResult>\n GetTasksList: OverrideResultType<Definitions['GetTasksList'], GetTasksListResult>\n GetFolderColumnStats: OverrideResultType<Definitions['GetFolderColumnStats'], FieldStats[]>\n GetTaskColumnStats: OverrideResultType<Definitions['GetTaskColumnStats'], FieldStats[]>\n}\n\n// GRAPHQL API\nconst enhancedApi = gqlApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n // This gets tasks for all parent folders provided\n // But in this case it will only ever receive one parent folder from the getOverviewTasksByFolders query\n // It is only used by getOverviewTasksByFolders in this file\n GetTasksByParent: {\n transformResponse: (res: GetTasksByParentQuery) => ({\n pageInfo: res?.project?.tasks?.pageInfo ?? { hasNextPage: false, endCursor: null },\n tasks: transformFilteredEntitiesByParent(res),\n }),\n providesTags: (result, _e, { parentIds, projectName }) =>\n getOverviewTaskTags(result?.tasks || [], projectName, parentIds),\n keepUnusedDataFor: CACHE_TIME,\n },\n GetTasksList: {\n transformResponse: (result: GetTasksListQuery) => ({\n tasks: transformFilteredEntitiesByParent(result),\n pageInfo: result.project.tasks.pageInfo,\n }),\n providesTags: (result, _e, { projectName }) =>\n getOverviewTaskTags(result?.tasks || [], projectName),\n keepUnusedDataFor: CACHE_TIME,\n },\n // footer stats: `targets` excluded from cache key + responses merged,\n // so column toggles reuse cache and only added targets refetch\n GetFolderColumnStats: {\n transformResponse: (res: GetFolderColumnStatsQuery) =>\n normalizeFieldStats(res?.project?.folders?.fieldStats ?? []),\n transformErrorResponse: (error: any) => transformStatsError(error, 'folder'),\n serializeQueryArgs: ({ queryArgs: { targets: _t, ...rest } }) => rest,\n merge: (cache, incoming) => mergeFieldStats(incoming, cache),\n forceRefetch: ({ currentArg, previousArg }) => hasNewTargetFields(currentArg, previousArg),\n providesTags: (_r, _e, { projectName }) => [{ type: 'folderColumnStats', id: projectName }],\n keepUnusedDataFor: CACHE_TIME,\n },\n GetTaskColumnStats: {\n transformResponse: (res: GetTaskColumnStatsQuery) =>\n normalizeFieldStats(res?.project?.tasks?.fieldStats ?? []),\n transformErrorResponse: (error: any) => transformStatsError(error, 'task'),\n serializeQueryArgs: ({ queryArgs: { targets: _t, ...rest } }) => rest,\n merge: (cache, incoming) => mergeFieldStats(incoming, cache),\n forceRefetch: ({ currentArg, previousArg }) => hasNewTargetFields(currentArg, previousArg),\n providesTags: (_r, _e, { projectName }) => [{ type: 'taskColumnStats', id: projectName }],\n keepUnusedDataFor: CACHE_TIME,\n },\n },\n})\n\n// REST FOLDERS API\nconst foldersApiEnhanced = foldersApi.enhanceEndpoints({\n endpoints: {\n searchFolders: {},\n },\n})\n\nexport const TASKS_INFINITE_QUERY_COUNT = 100 // Number of items to fetch per page\n\n// --- TRACKING REGISTRY FOR EMPTY FOLDERS (FILTER-AWARE) ---\nconst queriedFoldersRegistry: Record<string, Set<string>> = {}\n\nconst getCacheKey = (\n projectName: string,\n filter?: string,\n folderFilter?: string,\n search?: string,\n showComments?: boolean,\n) => {\n return JSON.stringify({ projectName, filter, folderFilter, search, showComments })\n}\n\nconst markFoldersAsQueried = (cacheKey: string, folderIds: string[]) => {\n if (!queriedFoldersRegistry[cacheKey]) {\n queriedFoldersRegistry[cacheKey] = new Set()\n }\n folderIds.forEach((id) => queriedFoldersRegistry[cacheKey].add(id))\n}\n\nconst getQueriedFolders = (cacheKey: string): Set<string> => {\n return queriedFoldersRegistry[cacheKey] || new Set()\n}\n\nconst injectedApi = enhancedApi.injectEndpoints({\n endpoints: (build) => ({\n // Each project has one cache for all the tasks of the expanded folders\n // Changing the expanded folders will trigger a refetch but not a new cache\n // Each expanded folder has it's own query that is looped over here\n // When new folders are expanded, the new tasks are fetched and we use the cache for the rest\n // This also solves the pagination issue of getting all tasks in one query, splitting it up in multiple queries to avoid pagination limits\n getOverviewTasksByFolders: build.query<\n EditorTaskNode[],\n {\n projectName: string\n parentIds: string[]\n filter?: string\n folderFilter?: string\n search?: string\n showComments?: boolean\n }\n >({\n async queryFn(\n { projectName, parentIds, filter, folderFilter, search, showComments },\n { dispatch, getState, forced },\n ) {\n try {\n const state = getState()\n const cacheArgs = { projectName, filter, folderFilter, search, showComments }\n\n // Select current flat cache state\n const currentCache = (injectedApi.endpoints as any).getOverviewTasksByFolders.select(\n cacheArgs,\n )(state)\n const cacheData: EditorTaskNode[] = currentCache?.data || []\n\n // 1. Generate a stable cache key matching RTK Query's serialization\n const cacheKey = getCacheKey(projectName, filter, folderFilter, search, showComments)\n\n // 2. Fetch our registry specific to THIS combination of search/filters\n const alreadyQueriedFolders = getQueriedFolders(cacheKey)\n\n // 3. Diffing: Only request folders that haven't hit the network under these specific filters\n // If forced, we ignore the registry and fetch all folders again, like a refresh\n const newFolderIds = forced\n ? parentIds\n : parentIds.filter((id) => !alreadyQueriedFolders.has(id))\n\n // Short-circuit if all expanded folders have been evaluated for this filter setup\n if (newFolderIds.length === 0) {\n return { data: cacheData }\n }\n\n const allNewTasks: EditorTaskNode[] = []\n const BATCH_SIZE = 100\n const TASK_PER_FOLDER = 20\n const MAX_PAGES_PER_BATCH = 10\n const MAX_FOLDERS = 1000\n const TASKS_PER_PAGE = BATCH_SIZE * TASK_PER_FOLDER\n\n if (newFolderIds.length > MAX_FOLDERS) {\n throw new Error(\n `Exceeded maximum folders count limit ${MAX_FOLDERS} (${newFolderIds.length}). Please reduce the number of expanded folders.`,\n )\n }\n\n // 5. Batch folder IDs into groups and process them sequentially\n for (let i = 0; i < newFolderIds.length; i += BATCH_SIZE) {\n const batchFolderIds = newFolderIds.slice(i, i + BATCH_SIZE)\n\n let hasNextPage = true\n let cursor: string | undefined = undefined\n let pageCount = 0\n\n while (hasNextPage && pageCount < MAX_PAGES_PER_BATCH) {\n pageCount++\n\n if (pageCount === MAX_PAGES_PER_BATCH) {\n throw new Error(\n `Exceeded maximum tasks count limit ${MAX_PAGES_PER_BATCH * TASKS_PER_PAGE}.`,\n )\n }\n\n const result = await dispatch(\n enhancedApi.endpoints.GetTasksByParent.initiate(\n {\n projectName,\n parentIds: batchFolderIds,\n filter,\n folderFilter,\n search,\n showComments: !!showComments,\n first: TASKS_PER_PAGE,\n after: cursor,\n },\n { forceRefetch: true },\n ),\n )\n\n if (result.error) throw result.error\n const data = result.data as GetTasksByParentResult\n\n const fetchedTasks = data?.tasks || []\n allNewTasks.push(...fetchedTasks)\n\n const pageInfo = data?.pageInfo\n hasNextPage = pageInfo?.hasNextPage || false\n cursor = pageInfo?.endCursor || undefined\n }\n }\n\n // 4. Only mark folders as queried if the network loops complete successfully\n markFoldersAsQueried(cacheKey, newFolderIds)\n\n // 5. Append new tasks to the existing flat array cache with task ID deduplication\n const finalTasks = [...cacheData, ...allNewTasks]\n const uniqueTasksMap = new Map(finalTasks.map((task) => [task.id, task]))\n\n return {\n data: Array.from(uniqueTasksMap.values()),\n }\n } catch (e: any) {\n console.error(e)\n const errorMessage =\n e.message || e.data?.message || JSON.stringify(e) || 'Unknown Fetch Error'\n return { error: { status: 'FETCH_ERROR', error: errorMessage } as FetchBaseQueryError }\n }\n },\n // keep one cache per project\n serializeQueryArgs: ({ queryArgs: { parentIds, ...rest } }) => ({\n ...rest,\n }),\n // Refetch when the page arg changes\n forceRefetch({ currentArg, previousArg }) {\n return JSON.stringify(currentArg) !== JSON.stringify(previousArg)\n },\n providesTags: (result, _e, { parentIds, projectName }) =>\n getOverviewTaskTags(result, projectName, parentIds),\n async onCacheEntryAdded(\n { projectName, parentIds, filter, folderFilter, search, showComments },\n { cacheDataLoaded, cacheEntryRemoved, updateCachedData, dispatch },\n ) {\n let token: any\n const pendingTaskIds = new Set<string>()\n const MAX_BATCH = 100\n const INTERVAL = 500\n let scheduled = false\n\n const schedule = () => {\n if (scheduled) return\n scheduled = true\n setTimeout(flush, INTERVAL)\n }\n\n const flush = async () => {\n scheduled = false\n if (!pendingTaskIds.size) return\n const batchIds = Array.from(pendingTaskIds).slice(0, MAX_BATCH)\n batchIds.forEach((id) => pendingTaskIds.delete(id))\n try {\n const res = await dispatch(\n enhancedApi.endpoints.GetTasksList.initiate(\n {\n projectName,\n taskIds: batchIds,\n showComments: !!showComments,\n } as any,\n { forceRefetch: true },\n ),\n ).unwrap()\n const returned = res.tasks || []\n const returnedMap = new Map(returned.map((t: EditorTaskNode) => [t.id, t]))\n\n updateCachedData((draft: EditorTaskNode[]) => {\n // update or add\n for (const task of returned) {\n const idx = draft.findIndex((t) => t.id === task.id)\n if (idx > -1) draft[idx] = task\n else draft.push(task)\n }\n // remove missing\n for (const id of batchIds) {\n if (!returnedMap.has(id)) {\n const idx = draft.findIndex((t) => t.id === id)\n if (idx > -1) draft.splice(idx, 1)\n }\n }\n })\n } catch (err) {\n console.error('Realtime overview batch update failed', err)\n } finally {\n if (pendingTaskIds.size) schedule()\n }\n }\n let unsubscribeThumbnails: (() => void) | undefined\n try {\n await cacheDataLoaded\n\n unsubscribeThumbnails = subscribeToThumbnailUpdates(\n (messages: ThumbnailUpdateMessage[]) => {\n updateCachedData((draft: EditorTaskNode[]) => {\n messages.forEach((message) => {\n if (message.summary.entityType === 'task' && message.summary.thumbnailHash) {\n const idx = draft.findIndex((t) => t.id === message.summary.entityId)\n if (idx > -1) {\n draft[idx].thumbnailHash = message.summary.thumbnailHash\n }\n }\n })\n })\n },\n ['task'],\n )\n\n const handlePubSub = async (_topic: string, message: any) => {\n const taskId = message?.summary?.entityId\n const parentId = message?.summary?.parentId\n if (!taskId || !parentId) return\n // Only react if the parent folder is part of the current expanded set\n if (!parentIds.includes(parentId)) return\n pendingTaskIds.add(taskId)\n schedule()\n }\n\n // Subscribe to task entity updates\n // NOTE: backend emits topics like 'entity.task.assignees_changed'.\n // Assuming PubSub supports prefix matching when subscribing without the suffix.\n token = PubSub.subscribe('entity.task', handlePubSub)\n } catch (e) {\n // cache entry removed before loaded - ignore\n }\n\n await cacheEntryRemoved\n\n // Evict tracking map memory entry completely when this RTK Query cache entry expires\n const deadCacheKey = getCacheKey(projectName, filter, folderFilter, search, showComments)\n delete queriedFoldersRegistry[deadCacheKey]\n\n if (token) PubSub.unsubscribe(token)\n if (unsubscribeThumbnails) unsubscribeThumbnails()\n },\n keepUnusedDataFor: CACHE_TIME,\n }),\n // searchFolders is a post so it's a bit annoying to consume\n // we wrap it in a queryFn to make it easier to consume as a query hook\n getSearchFolders: build.query<string[], SearchFoldersApiArg>({\n async queryFn({ projectName, folderSearchRequest }, { dispatch }) {\n try {\n const result = await dispatch(\n foldersApiEnhanced.endpoints.searchFolders.initiate({\n projectName,\n folderSearchRequest,\n }),\n )\n\n const data = result.data?.folderIds || []\n\n return { data }\n } catch (e: any) {\n console.error(e)\n const error = { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError\n return { error }\n }\n },\n providesTags: (_r, _e, { projectName }) => [{ type: 'tasksFolder', id: projectName }],\n keepUnusedDataFor: CACHE_TIME,\n }),\n // Add new infinite query endpoint for tasks list\n getTasksListInfinite: build.infiniteQuery<\n GetTasksListResult,\n GetTasksListArgs,\n TasksListPageParam\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 {\n projectName,\n filter,\n folderFilter,\n search,\n folderIds,\n taskIds,\n sortBy,\n desc,\n showComments,\n includeFolderChildren,\n } = queryArg\n const { cursor } = pageParam\n\n // Build the query parameters for GetTasksList\n const queryParams: any = {\n projectName,\n filter,\n folderFilter,\n search,\n folderIds,\n taskIds,\n showComments: !!showComments,\n includeFolderChildren: includeFolderChildren !== false, // default to true\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 = TASKS_INFINITE_QUERY_COUNT\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = TASKS_INFINITE_QUERY_COUNT\n }\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = TASKS_INFINITE_QUERY_COUNT\n }\n\n // Call the existing GetTasksList endpoint\n const result = await api.dispatch(\n enhancedApi.endpoints.GetTasksList.initiate(queryParams, { forceRefetch: true }),\n )\n\n if (result.error) throw result.error\n const fallback = {\n tasks: [],\n pageInfo: {\n hasNextPage: false,\n endCursor: null,\n startCursor: null,\n hasPreviousPage: false,\n },\n }\n\n // Return the tasks 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 getTasksListInfinite queryFn:', e)\n return { error: { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError }\n }\n },\n providesTags: (result, _e, { projectName }) =>\n getOverviewTaskTags(result?.pages.flatMap((p) => p.tasks) || [], projectName),\n async onCacheEntryAdded(\n arg,\n { cacheDataLoaded, cacheEntryRemoved, updateCachedData, dispatch },\n ) {\n let token: any\n const pendingTaskIds = new Set<string>()\n const MAX_BATCH = 100\n const INTERVAL = 500\n let scheduled = false\n\n const schedule = () => {\n if (scheduled) return\n scheduled = true\n setTimeout(flush, INTERVAL)\n }\n\n const flush = async () => {\n scheduled = false\n if (!pendingTaskIds.size) return\n const batchIds = Array.from(pendingTaskIds).slice(0, MAX_BATCH)\n batchIds.forEach((id) => pendingTaskIds.delete(id))\n try {\n const res = await dispatch(\n enhancedApi.endpoints.GetTasksList.initiate(\n {\n projectName: arg.projectName,\n taskIds: batchIds,\n folderIds: arg.folderIds,\n showComments: !!arg.showComments,\n } as any,\n { forceRefetch: true },\n ),\n ).unwrap()\n\n const returned = res.tasks || []\n const returnedMap = new Map(returned.map((t: EditorTaskNode) => [t.id, t]))\n\n updateCachedData((draft: { pages: GetTasksListResult[]; pageParams: any[] }) => {\n // update/insert\n for (const task of returned) {\n let located = false\n for (const page of draft.pages) {\n const idx = page.tasks.findIndex((t) => t.id === task.id)\n if (idx !== -1) {\n page.tasks[idx] = task\n located = true\n break\n }\n }\n if (!located) {\n if (draft.pages.length) draft.pages[0].tasks.unshift(task)\n else\n draft.pages.push({\n tasks: [task],\n pageInfo: {\n startCursor: null,\n endCursor: null,\n hasNextPage: false,\n hasPreviousPage: false,\n },\n })\n }\n }\n // remove any requested but missing tasks\n for (const id of batchIds) {\n if (returnedMap.has(id)) continue\n for (const page of draft.pages) {\n const idx = page.tasks.findIndex((t) => t.id === id)\n if (idx !== -1) {\n page.tasks.splice(idx, 1)\n break\n }\n }\n }\n })\n } catch (err) {\n console.error('Realtime infinite tasks batch update failed', err)\n } finally {\n if (pendingTaskIds.size) schedule()\n }\n }\n let unsubscribeThumbnails: (() => void) | undefined\n try {\n await cacheDataLoaded\n\n unsubscribeThumbnails = subscribeToThumbnailUpdates(\n (messages: ThumbnailUpdateMessage[]) => {\n updateCachedData((draft: { pages: GetTasksListResult[]; pageParams: any[] }) => {\n messages.forEach((message) => {\n if (message.summary.entityType === 'task' && message.summary.thumbnailHash) {\n for (const page of draft.pages) {\n const idx = page.tasks.findIndex((t) => t.id === message.summary.entityId)\n if (idx > -1) {\n page.tasks[idx].thumbnailHash = message.summary.thumbnailHash\n break\n }\n }\n }\n })\n })\n },\n ['task'],\n )\n\n const handlePubSub = async (_topic: string, message: any) => {\n const taskId = message?.summary?.entityId\n if (!taskId) return\n pendingTaskIds.add(taskId)\n schedule()\n }\n\n token = PubSub.subscribe('entity.task', handlePubSub)\n } catch (_) {\n // ignore\n }\n await cacheEntryRemoved\n if (token) PubSub.unsubscribe(token)\n if (unsubscribeThumbnails) unsubscribeThumbnails()\n },\n keepUnusedDataFor: CACHE_TIME,\n }),\n getGroupedTasksList: build.query<GetGroupedTasksListResult, GetGroupedTasksListArgs>({\n queryFn: async (\n {\n projectName,\n groups,\n search,\n folderFilter,\n folderIds,\n desc,\n sortBy,\n groupCount,\n showComments,\n },\n api,\n ) => {\n try {\n let promises = []\n // Folder-level filter keys that must go in folderFilter, not task filter\n const folderFilterKeys = new Set(['folderType'])\n\n for (const group of groups) {\n // Determine count for this group - use argument override, else group count, else default\n const count = groupCount || group.count || 500\n\n // Separate folder-level conditions from task-level conditions in the group filter\n let taskFilter: string | undefined = group.filter\n let mergedFolderFilter = folderFilter\n if (group.filter) {\n try {\n const parsed = JSON.parse(group.filter)\n const conditions = parsed.conditions || []\n const taskConditions = conditions.filter((c: any) => !folderFilterKeys.has(c.key))\n const folderConditions = conditions.filter((c: any) => folderFilterKeys.has(c.key))\n\n if (folderConditions.length > 0) {\n taskFilter = taskConditions.length\n ? JSON.stringify({ ...parsed, conditions: taskConditions })\n : undefined\n // Merge folder conditions with existing folderFilter, preserving metadata\n const existingFolderFilter = folderFilter ? JSON.parse(folderFilter) : null\n const existingConditions =\n existingFolderFilter && Array.isArray(existingFolderFilter.conditions)\n ? existingFolderFilter.conditions\n : []\n const allFolderConditions = [...existingConditions, ...folderConditions]\n mergedFolderFilter = JSON.stringify(\n existingFolderFilter\n ? { ...existingFolderFilter, conditions: allFolderConditions }\n : { conditions: allFolderConditions },\n )\n }\n } catch {\n // If parsing fails, use the original filter as-is\n }\n }\n\n const queryParams: GetTasksListQueryVariables = {\n projectName,\n filter: taskFilter,\n folderFilter: mergedFolderFilter,\n search,\n folderIds,\n sortBy: sortBy,\n showComments: !!showComments,\n // @ts-expect-error - we know group does not exist on query variables but we need it for later\n group: group.value,\n }\n if (desc) {\n queryParams.last = count\n } else {\n queryParams.first = count\n }\n\n const promise = api.dispatch(\n enhancedApi.endpoints.GetTasksList.initiate(queryParams, { forceRefetch: true }),\n )\n promises.push(promise)\n }\n\n const result = await Promise.all(promises)\n const tasks: EditorTaskNode[] = []\n for (const res of result) {\n if (res.error) throw res.error\n // get group value\n // @ts-expect-error - we know group does exist on res.originalArgs from line 319\n const groupValue = res.originalArgs?.group as string\n\n const hasNextPage =\n res.data?.pageInfo?.hasNextPage || res.data?.pageInfo?.hasPreviousPage || false\n const groupTasks =\n res.data?.tasks.map((task, i, a) => ({\n ...task,\n groups: [\n {\n value: groupValue,\n hasNextPage: i === a.length - 1 && hasNextPage ? groupValue : undefined, // Only add hasNextPage to the last task in the group\n },\n ],\n })) || []\n\n tasks.push(...groupTasks)\n }\n\n // Return the tasks directly as required by the query format\n return {\n data: {\n tasks,\n },\n }\n } catch (error: any) {\n console.error('Error in getGroupedTasksList queryFn:', error)\n return { error: { status: 'FETCH_ERROR', error: error.message } as FetchBaseQueryError }\n }\n },\n providesTags: (result, _e, { projectName }) =>\n getOverviewTaskTags(result?.tasks, projectName),\n keepUnusedDataFor: CACHE_TIME,\n }),\n }),\n})\n\nexport const {\n useGetOverviewTasksByFoldersQuery,\n useGetSearchFoldersQuery,\n useGetTasksListQuery,\n useGetTasksListInfiniteInfiniteQuery,\n useLazyGetTasksByParentQuery,\n useGetGroupedTasksListQuery,\n useGetFolderColumnStatsQuery,\n useGetTaskColumnStatsQuery,\n} = injectedApi\nexport default injectedApi\n"],"names":["CACHE_TIME","parseAllAttribs","allAttrib","transformFilteredEntitiesByParent","response","tasks","taskNode","getOverviewTaskTags","result","projectName","parentIds","taskTags","task","parentTags","id","enhancedApi","gqlApi","res","_e","normalizeFieldStats","error","transformStatsError","_t","rest","cache","incoming","mergeFieldStats","currentArg","previousArg","hasNewTargetFields","_r","foldersApiEnhanced","foldersApi","TASKS_INFINITE_QUERY_COUNT","queriedFoldersRegistry","getCacheKey","filter","folderFilter","search","showComments","markFoldersAsQueried","cacheKey","folderIds","getQueriedFolders","injectedApi","build","dispatch","getState","forced","state","cacheArgs","cacheData","alreadyQueriedFolders","newFolderIds","allNewTasks","BATCH_SIZE","TASK_PER_FOLDER","MAX_PAGES_PER_BATCH","MAX_FOLDERS","TASKS_PER_PAGE","i","batchFolderIds","hasNextPage","cursor","pageCount","data","fetchedTasks","pageInfo","finalTasks","uniqueTasksMap","e","cacheDataLoaded","cacheEntryRemoved","updateCachedData","token","pendingTaskIds","MAX_BATCH","INTERVAL","scheduled","schedule","flush","batchIds","returned","returnedMap","t","draft","idx","err","unsubscribeThumbnails","subscribeToThumbnailUpdates","messages","message","handlePubSub","_topic","taskId","parentId","PubSub","deadCacheKey","folderSearchRequest","lastPage","_allPages","lastPageParam","_allPageParams","queryArg","pageParam","api","taskIds","sortBy","desc","includeFolderChildren","queryParams","fallback","p","arg","located","page","groups","groupCount","promises","folderFilterKeys","group","count","taskFilter","mergedFolderFilter","parsed","conditions","taskConditions","c","folderConditions","existingFolderFilter","allFolderConditions","promise","groupValue","groupTasks","a","useGetOverviewTasksByFoldersQuery","useGetSearchFoldersQuery","useGetTasksListQuery","useGetTasksListInfiniteInfiniteQuery","useLazyGetTasksByParentQuery","useGetGroupedTasksListQuery","useGetFolderColumnStatsQuery","useGetTaskColumnStatsQuery"],"mappings":"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"}