@webiny/app-headless-cms-workflows 0.0.0-unstable.0156a4c312

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 (417) hide show
  1. package/Components/CmsEntriesList/CmsReviewMoveEntryAction.d.ts +2 -0
  2. package/Components/CmsEntriesList/CmsReviewMoveEntryAction.js +43 -0
  3. package/Components/CmsEntriesList/CmsReviewMoveEntryAction.js.map +1 -0
  4. package/Components/CmsEntriesList/CmsReviewMoveEntryAction.test.d.ts +1 -0
  5. package/Components/CmsEntriesList/CmsReviewMoveEntryAction.test.js +118 -0
  6. package/Components/CmsEntriesList/CmsReviewMoveEntryAction.test.js.map +1 -0
  7. package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.d.ts +2 -0
  8. package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.js +22 -0
  9. package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.js.map +1 -0
  10. package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.test.d.ts +1 -0
  11. package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.test.js +98 -0
  12. package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.test.js.map +1 -0
  13. package/Components/ContentEntryForm/CmsEntryReviewBar.d.ts +2 -0
  14. package/Components/ContentEntryForm/CmsEntryReviewBar.js +32 -0
  15. package/Components/ContentEntryForm/CmsEntryReviewBar.js.map +1 -0
  16. package/Components/ContentEntryForm/CmsEntryReviewBar.test.d.ts +1 -0
  17. package/Components/ContentEntryForm/CmsEntryReviewBar.test.js +128 -0
  18. package/Components/ContentEntryForm/CmsEntryReviewBar.test.js.map +1 -0
  19. package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.d.ts +2 -0
  20. package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.js +46 -0
  21. package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.js.map +1 -0
  22. package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.test.d.ts +1 -0
  23. package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.test.js +222 -0
  24. package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.test.js.map +1 -0
  25. package/Components/ContentEntryForm/CmsEntryReviewFormLock.d.ts +2 -0
  26. package/Components/ContentEntryForm/CmsEntryReviewFormLock.js +32 -0
  27. package/Components/ContentEntryForm/CmsEntryReviewFormLock.js.map +1 -0
  28. package/Components/ContentEntryForm/CmsEntryReviewFormLock.test.d.ts +1 -0
  29. package/Components/ContentEntryForm/CmsEntryReviewFormLock.test.js +94 -0
  30. package/Components/ContentEntryForm/CmsEntryReviewFormLock.test.js.map +1 -0
  31. package/Components/ContentEntryForm/CmsEntryReviewNewRevision.d.ts +2 -0
  32. package/Components/ContentEntryForm/CmsEntryReviewNewRevision.js +56 -0
  33. package/Components/ContentEntryForm/CmsEntryReviewNewRevision.js.map +1 -0
  34. package/Components/ContentEntryForm/CmsEntryReviewNewRevision.test.d.ts +1 -0
  35. package/Components/ContentEntryForm/CmsEntryReviewNewRevision.test.js +186 -0
  36. package/Components/ContentEntryForm/CmsEntryReviewNewRevision.test.js.map +1 -0
  37. package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.d.ts +2 -0
  38. package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.js +26 -0
  39. package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.js.map +1 -0
  40. package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.test.d.ts +1 -0
  41. package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.test.js +78 -0
  42. package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.test.js.map +1 -0
  43. package/Components/ContentEntryForm/getModelFieldLabels.d.ts +3 -0
  44. package/Components/ContentEntryForm/getModelFieldLabels.js +8 -0
  45. package/Components/ContentEntryForm/getModelFieldLabels.js.map +1 -0
  46. package/Components/ContentEntryForm/index.d.ts +5 -0
  47. package/Components/ContentEntryForm/index.js +5 -0
  48. package/Components/ContentReviews/CmsContentReviews.d.ts +2 -0
  49. package/Components/ContentReviews/CmsContentReviews.js +11 -0
  50. package/Components/ContentReviews/CmsContentReviews.js.map +1 -0
  51. package/Components/ContentReviews/CmsContentReviews.test.d.ts +1 -0
  52. package/Components/ContentReviews/CmsContentReviews.test.js +214 -0
  53. package/Components/ContentReviews/CmsContentReviews.test.js.map +1 -0
  54. package/Components/ContentReviews/CmsContentReviewsMount.d.ts +4 -0
  55. package/Components/ContentReviews/CmsContentReviewsMount.js +44 -0
  56. package/Components/ContentReviews/CmsContentReviewsMount.js.map +1 -0
  57. package/Components/ContentReviews/CmsContentReviewsSidebarItem.d.ts +2 -0
  58. package/Components/ContentReviews/CmsContentReviewsSidebarItem.js +20 -0
  59. package/Components/ContentReviews/CmsContentReviewsSidebarItem.js.map +1 -0
  60. package/Components/ContentReviews/CmsContentReviewsSidebarItem.test.d.ts +1 -0
  61. package/Components/ContentReviews/CmsContentReviewsSidebarItem.test.js +83 -0
  62. package/Components/ContentReviews/CmsContentReviewsSidebarItem.test.js.map +1 -0
  63. package/Components/ModelDelete/ModelBoundToWorkflowErrorData.d.ts +8 -0
  64. package/Components/ModelDelete/ModelBoundToWorkflowErrorData.js +0 -0
  65. package/Components/ModelDelete/ModelDeleteWorkflowCopy.d.ts +10 -0
  66. package/Components/ModelDelete/ModelDeleteWorkflowCopy.js +0 -0
  67. package/Components/ModelDelete/ModelDeleteWorkflowError.d.ts +2 -0
  68. package/Components/ModelDelete/ModelDeleteWorkflowError.js +34 -0
  69. package/Components/ModelDelete/ModelDeleteWorkflowError.js.map +1 -0
  70. package/Components/ModelDelete/ModelDeleteWorkflowError.test.d.ts +1 -0
  71. package/Components/ModelDelete/ModelDeleteWorkflowError.test.js +73 -0
  72. package/Components/ModelDelete/ModelDeleteWorkflowError.test.js.map +1 -0
  73. package/Components/ModelDelete/getModelDeleteWorkflowCopy.d.ts +3 -0
  74. package/Components/ModelDelete/getModelDeleteWorkflowCopy.js +17 -0
  75. package/Components/ModelDelete/getModelDeleteWorkflowCopy.js.map +1 -0
  76. package/Components/ModelDelete/getModelDeleteWorkflowCopy.test.d.ts +1 -0
  77. package/Components/ModelDelete/getModelDeleteWorkflowCopy.test.js +28 -0
  78. package/Components/ModelDelete/getModelDeleteWorkflowCopy.test.js.map +1 -0
  79. package/Components/ignoreAction.d.ts +1 -0
  80. package/Components/ignoreAction.js +4 -0
  81. package/Components/ignoreAction.js.map +1 -0
  82. package/LICENSE +21 -0
  83. package/README.md +11 -0
  84. package/Routes/CmsWorkflowEditor.d.ts +2 -0
  85. package/Routes/CmsWorkflowEditor.js +23 -0
  86. package/Routes/CmsWorkflowEditor.js.map +1 -0
  87. package/Routes/CmsWorkflowEditor.test.d.ts +1 -0
  88. package/Routes/CmsWorkflowEditor.test.js +141 -0
  89. package/Routes/CmsWorkflowEditor.test.js.map +1 -0
  90. package/Routes/index.d.ts +1 -0
  91. package/Routes/index.js +1 -0
  92. package/features/cache/CmsReviewCacheSyncHandler.d.ts +8 -0
  93. package/features/cache/CmsReviewCacheSyncHandler.js +14 -0
  94. package/features/cache/CmsReviewCacheSyncHandler.js.map +1 -0
  95. package/features/cache/CmsReviewCacheWriter.d.ts +14 -0
  96. package/features/cache/CmsReviewCacheWriter.js +39 -0
  97. package/features/cache/CmsReviewCacheWriter.js.map +1 -0
  98. package/features/cache/CmsReviewCacheWriter.test.d.ts +1 -0
  99. package/features/cache/CmsReviewCacheWriter.test.js +207 -0
  100. package/features/cache/CmsReviewCacheWriter.test.js.map +1 -0
  101. package/features/cache/CmsReviewEntriesCacheProviderDecorator.d.ts +12 -0
  102. package/features/cache/CmsReviewEntriesCacheProviderDecorator.js +17 -0
  103. package/features/cache/CmsReviewEntriesCacheProviderDecorator.js.map +1 -0
  104. package/features/cache/CmsReviewEntriesCacheProviderDecorator.test.d.ts +1 -0
  105. package/features/cache/CmsReviewEntriesCacheProviderDecorator.test.js +129 -0
  106. package/features/cache/CmsReviewEntriesCacheProviderDecorator.test.js.map +1 -0
  107. package/features/cache/ReviewPreservingEntriesCache.d.ts +18 -0
  108. package/features/cache/ReviewPreservingEntriesCache.js +54 -0
  109. package/features/cache/ReviewPreservingEntriesCache.js.map +1 -0
  110. package/features/cache/abstractions.d.ts +5 -0
  111. package/features/cache/abstractions.js +5 -0
  112. package/features/cache/abstractions.js.map +1 -0
  113. package/features/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.d.ts +26 -0
  114. package/features/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.js +104 -0
  115. package/features/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.js.map +1 -0
  116. package/features/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.test.d.ts +1 -0
  117. package/features/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.test.js +589 -0
  118. package/features/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.test.js.map +1 -0
  119. package/features/editorGateway/feature.d.ts +1 -0
  120. package/features/editorGateway/feature.js +11 -0
  121. package/features/editorGateway/feature.js.map +1 -0
  122. package/features/editorGateway/feature.test.d.ts +1 -0
  123. package/features/editorGateway/feature.test.js +272 -0
  124. package/features/editorGateway/feature.test.js.map +1 -0
  125. package/features/editorGateway/graphql/cmsEntryFolderExists.d.ts +1 -0
  126. package/features/editorGateway/graphql/cmsEntryFolderExists.js +16 -0
  127. package/features/editorGateway/graphql/cmsEntryFolderExists.js.map +1 -0
  128. package/features/editorGateway/graphql/deleteCmsEntryWorkflow.d.ts +1 -0
  129. package/features/editorGateway/graphql/deleteCmsEntryWorkflow.js +19 -0
  130. package/features/editorGateway/graphql/deleteCmsEntryWorkflow.js.map +1 -0
  131. package/features/editorGateway/graphql/getCmsEntryWorkflow.d.ts +1 -0
  132. package/features/editorGateway/graphql/getCmsEntryWorkflow.js +19 -0
  133. package/features/editorGateway/graphql/getCmsEntryWorkflow.js.map +1 -0
  134. package/features/editorGateway/graphql/inspectCmsEntryRouting.d.ts +1 -0
  135. package/features/editorGateway/graphql/inspectCmsEntryRouting.js +19 -0
  136. package/features/editorGateway/graphql/inspectCmsEntryRouting.js.map +1 -0
  137. package/features/editorGateway/graphql/listCmsEntryWorkflowModels.d.ts +1 -0
  138. package/features/editorGateway/graphql/listCmsEntryWorkflowModels.js +29 -0
  139. package/features/editorGateway/graphql/listCmsEntryWorkflowModels.js.map +1 -0
  140. package/features/editorGateway/graphql/storeCmsEntryWorkflow.d.ts +1 -0
  141. package/features/editorGateway/graphql/storeCmsEntryWorkflow.js +19 -0
  142. package/features/editorGateway/graphql/storeCmsEntryWorkflow.js.map +1 -0
  143. package/features/editorMounting/CmsWorkflowEditorAppAdapter.d.ts +25 -0
  144. package/features/editorMounting/CmsWorkflowEditorAppAdapter.js +51 -0
  145. package/features/editorMounting/CmsWorkflowEditorAppAdapter.js.map +1 -0
  146. package/features/editorMounting/CmsWorkflowEditorAppAdapter.test.d.ts +1 -0
  147. package/features/editorMounting/CmsWorkflowEditorAppAdapter.test.js +185 -0
  148. package/features/editorMounting/CmsWorkflowEditorAppAdapter.test.js.map +1 -0
  149. package/features/editorMounting/abstractions.d.ts +5 -0
  150. package/features/editorMounting/abstractions.js +5 -0
  151. package/features/editorMounting/abstractions.js.map +1 -0
  152. package/features/editorMounting/feature.d.ts +3 -0
  153. package/features/editorMounting/feature.js +19 -0
  154. package/features/editorMounting/feature.js.map +1 -0
  155. package/features/editorMounting/feature.test.d.ts +1 -0
  156. package/features/editorMounting/feature.test.js +100 -0
  157. package/features/editorMounting/feature.test.js.map +1 -0
  158. package/features/editorReview/CmsEntryReview.d.ts +8 -0
  159. package/features/editorReview/CmsEntryReview.js +14 -0
  160. package/features/editorReview/CmsEntryReview.js.map +1 -0
  161. package/features/editorReview/abstractions.d.ts +5 -0
  162. package/features/editorReview/abstractions.js +5 -0
  163. package/features/editorReview/abstractions.js.map +1 -0
  164. package/features/editorReview/feature.d.ts +3 -0
  165. package/features/editorReview/feature.js +17 -0
  166. package/features/editorReview/feature.js.map +1 -0
  167. package/features/editorReview/feature.test.d.ts +1 -0
  168. package/features/editorReview/feature.test.js +46 -0
  169. package/features/editorReview/feature.test.js.map +1 -0
  170. package/features/editorReview/useCmsEntryReview.d.ts +2 -0
  171. package/features/editorReview/useCmsEntryReview.js +8 -0
  172. package/features/editorReview/useCmsEntryReview.js.map +1 -0
  173. package/features/feature.d.ts +1 -0
  174. package/features/feature.js +15 -0
  175. package/features/feature.js.map +1 -0
  176. package/features/gateway/CmsReviewChangeMessageHandler.d.ts +8 -0
  177. package/features/gateway/CmsReviewChangeMessageHandler.js +16 -0
  178. package/features/gateway/CmsReviewChangeMessageHandler.js.map +1 -0
  179. package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.d.ts +16 -0
  180. package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.js +39 -0
  181. package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.js.map +1 -0
  182. package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.test.d.ts +1 -0
  183. package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.test.js +83 -0
  184. package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.test.js.map +1 -0
  185. package/features/gateway/CmsReviewContentAdapter/abstractions.d.ts +5 -0
  186. package/features/gateway/CmsReviewContentAdapter/abstractions.js +5 -0
  187. package/features/gateway/CmsReviewContentAdapter/abstractions.js.map +1 -0
  188. package/features/gateway/CmsReviewGateway/CmsReviewGateway.d.ts +52 -0
  189. package/features/gateway/CmsReviewGateway/CmsReviewGateway.js +221 -0
  190. package/features/gateway/CmsReviewGateway/CmsReviewGateway.js.map +1 -0
  191. package/features/gateway/CmsReviewGateway/CmsReviewGateway.test.d.ts +1 -0
  192. package/features/gateway/CmsReviewGateway/CmsReviewGateway.test.js +689 -0
  193. package/features/gateway/CmsReviewGateway/CmsReviewGateway.test.js.map +1 -0
  194. package/features/gateway/CmsReviewNotificationHandler.d.ts +8 -0
  195. package/features/gateway/CmsReviewNotificationHandler.js +16 -0
  196. package/features/gateway/CmsReviewNotificationHandler.js.map +1 -0
  197. package/features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.d.ts +8 -0
  198. package/features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.js +14 -0
  199. package/features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.js.map +1 -0
  200. package/features/gateway/CmsReviewRowProvider/abstractions.d.ts +5 -0
  201. package/features/gateway/CmsReviewRowProvider/abstractions.js +5 -0
  202. package/features/gateway/CmsReviewRowProvider/abstractions.js.map +1 -0
  203. package/features/gateway/contentReviewsBindings.test.d.ts +1 -0
  204. package/features/gateway/contentReviewsBindings.test.js +125 -0
  205. package/features/gateway/contentReviewsBindings.test.js.map +1 -0
  206. package/features/gateway/feature.d.ts +4 -0
  207. package/features/gateway/feature.js +27 -0
  208. package/features/gateway/feature.js.map +1 -0
  209. package/features/gateway/feature.test.d.ts +1 -0
  210. package/features/gateway/feature.test.js +79 -0
  211. package/features/gateway/feature.test.js.map +1 -0
  212. package/features/gateway/graphql/CmsOperationResponse.d.ts +3 -0
  213. package/features/gateway/graphql/CmsOperationResponse.js +0 -0
  214. package/features/gateway/graphql/approveCmsEntryReviewStep.d.ts +1 -0
  215. package/features/gateway/graphql/approveCmsEntryReviewStep.js +18 -0
  216. package/features/gateway/graphql/approveCmsEntryReviewStep.js.map +1 -0
  217. package/features/gateway/graphql/cancelCmsEntryReview.d.ts +1 -0
  218. package/features/gateway/graphql/cancelCmsEntryReview.js +18 -0
  219. package/features/gateway/graphql/cancelCmsEntryReview.js.map +1 -0
  220. package/features/gateway/graphql/cancelCmsEntryReviewsForDelete.d.ts +1 -0
  221. package/features/gateway/graphql/cancelCmsEntryReviewsForDelete.js +28 -0
  222. package/features/gateway/graphql/cancelCmsEntryReviewsForDelete.js.map +1 -0
  223. package/features/gateway/graphql/getCmsEntryReview.d.ts +1 -0
  224. package/features/gateway/graphql/getCmsEntryReview.js +18 -0
  225. package/features/gateway/graphql/getCmsEntryReview.js.map +1 -0
  226. package/features/gateway/graphql/getCmsEntryReviewStepRun.d.ts +1 -0
  227. package/features/gateway/graphql/getCmsEntryReviewStepRun.js +18 -0
  228. package/features/gateway/graphql/getCmsEntryReviewStepRun.js.map +1 -0
  229. package/features/gateway/graphql/getCmsEntryTargetReview.d.ts +1 -0
  230. package/features/gateway/graphql/getCmsEntryTargetReview.js +18 -0
  231. package/features/gateway/graphql/getCmsEntryTargetReview.js.map +1 -0
  232. package/features/gateway/graphql/listCmsEntryBlockingReviews.d.ts +1 -0
  233. package/features/gateway/graphql/listCmsEntryBlockingReviews.js +18 -0
  234. package/features/gateway/graphql/listCmsEntryBlockingReviews.js.map +1 -0
  235. package/features/gateway/graphql/listCmsEntryReviewStepCandidates.d.ts +1 -0
  236. package/features/gateway/graphql/listCmsEntryReviewStepCandidates.js +18 -0
  237. package/features/gateway/graphql/listCmsEntryReviewStepCandidates.js.map +1 -0
  238. package/features/gateway/graphql/listCmsEntryReviews.d.ts +1 -0
  239. package/features/gateway/graphql/listCmsEntryReviews.js +34 -0
  240. package/features/gateway/graphql/listCmsEntryReviews.js.map +1 -0
  241. package/features/gateway/graphql/listCmsEntryStepCandidates.d.ts +1 -0
  242. package/features/gateway/graphql/listCmsEntryStepCandidates.js +28 -0
  243. package/features/gateway/graphql/listCmsEntryStepCandidates.js.map +1 -0
  244. package/features/gateway/graphql/listCmsEntryWorkflows.d.ts +1 -0
  245. package/features/gateway/graphql/listCmsEntryWorkflows.js +18 -0
  246. package/features/gateway/graphql/listCmsEntryWorkflows.js.map +1 -0
  247. package/features/gateway/graphql/reassignCmsEntryReviewStep.d.ts +1 -0
  248. package/features/gateway/graphql/reassignCmsEntryReviewStep.js +18 -0
  249. package/features/gateway/graphql/reassignCmsEntryReviewStep.js.map +1 -0
  250. package/features/gateway/graphql/rejectCmsEntryReviewStep.d.ts +1 -0
  251. package/features/gateway/graphql/rejectCmsEntryReviewStep.js +18 -0
  252. package/features/gateway/graphql/rejectCmsEntryReviewStep.js.map +1 -0
  253. package/features/gateway/graphql/requestCmsEntryReview.d.ts +1 -0
  254. package/features/gateway/graphql/requestCmsEntryReview.js +28 -0
  255. package/features/gateway/graphql/requestCmsEntryReview.js.map +1 -0
  256. package/features/gateway/graphql/restartCmsEntryReviewStep.d.ts +1 -0
  257. package/features/gateway/graphql/restartCmsEntryReviewStep.js +18 -0
  258. package/features/gateway/graphql/restartCmsEntryReviewStep.js.map +1 -0
  259. package/features/gateway/graphql/startCmsEntryReviewStep.d.ts +1 -0
  260. package/features/gateway/graphql/startCmsEntryReviewStep.js +18 -0
  261. package/features/gateway/graphql/startCmsEntryReviewStep.js.map +1 -0
  262. package/features/gateway/graphql/takeOverCmsEntryReviewStep.d.ts +1 -0
  263. package/features/gateway/graphql/takeOverCmsEntryReviewStep.js +22 -0
  264. package/features/gateway/graphql/takeOverCmsEntryReviewStep.js.map +1 -0
  265. package/features/trash/BulkDeletePresenterReviewDecorator.d.ts +20 -0
  266. package/features/trash/BulkDeletePresenterReviewDecorator.js +81 -0
  267. package/features/trash/BulkDeletePresenterReviewDecorator.js.map +1 -0
  268. package/features/trash/BulkDeletePresenterReviewDecorator.test.d.ts +1 -0
  269. package/features/trash/BulkDeletePresenterReviewDecorator.test.js +693 -0
  270. package/features/trash/BulkDeletePresenterReviewDecorator.test.js.map +1 -0
  271. package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.d.ts +13 -0
  272. package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.js +23 -0
  273. package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.js.map +1 -0
  274. package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.test.d.ts +1 -0
  275. package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.test.js +123 -0
  276. package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.test.js.map +1 -0
  277. package/features/trash/DeleteEntryUseCaseReviewDecorator.d.ts +13 -0
  278. package/features/trash/DeleteEntryUseCaseReviewDecorator.js +23 -0
  279. package/features/trash/DeleteEntryUseCaseReviewDecorator.js.map +1 -0
  280. package/features/trash/DeleteEntryUseCaseReviewDecorator.test.d.ts +1 -0
  281. package/features/trash/DeleteEntryUseCaseReviewDecorator.test.js +139 -0
  282. package/features/trash/DeleteEntryUseCaseReviewDecorator.test.js.map +1 -0
  283. package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.d.ts +13 -0
  284. package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.js +23 -0
  285. package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.js.map +1 -0
  286. package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.test.d.ts +1 -0
  287. package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.test.js +122 -0
  288. package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.test.js.map +1 -0
  289. package/features/trash/feature.d.ts +1 -0
  290. package/features/trash/feature.js +17 -0
  291. package/features/trash/feature.js.map +1 -0
  292. package/features/trash/feature.test.d.ts +1 -0
  293. package/features/trash/feature.test.js +213 -0
  294. package/features/trash/feature.test.js.map +1 -0
  295. package/index.d.ts +2 -0
  296. package/index.editor.test.d.ts +1 -0
  297. package/index.editor.test.js +149 -0
  298. package/index.editor.test.js.map +1 -0
  299. package/index.js +41 -0
  300. package/index.js.map +1 -0
  301. package/index.lists.test.d.ts +1 -0
  302. package/index.lists.test.js +172 -0
  303. package/index.lists.test.js.map +1 -0
  304. package/index.mount.test.d.ts +1 -0
  305. package/index.mount.test.js +49 -0
  306. package/index.mount.test.js.map +1 -0
  307. package/index.test.d.ts +1 -0
  308. package/index.test.js +414 -0
  309. package/index.test.js.map +1 -0
  310. package/package.json +54 -0
  311. package/presentation/CmsEntryContentReloader.d.ts +8 -0
  312. package/presentation/CmsEntryContentReloader.js +20 -0
  313. package/presentation/CmsEntryContentReloader.js.map +1 -0
  314. package/presentation/CmsEntryContentReloader.test.d.ts +1 -0
  315. package/presentation/CmsEntryContentReloader.test.js +118 -0
  316. package/presentation/CmsEntryContentReloader.test.js.map +1 -0
  317. package/presentation/CmsEntryFormPresenterReviewDecorator.d.ts +27 -0
  318. package/presentation/CmsEntryFormPresenterReviewDecorator.js +167 -0
  319. package/presentation/CmsEntryFormPresenterReviewDecorator.js.map +1 -0
  320. package/presentation/CmsEntryFormPresenterReviewDecorator.test.d.ts +1 -0
  321. package/presentation/CmsEntryFormPresenterReviewDecorator.test.js +601 -0
  322. package/presentation/CmsEntryFormPresenterReviewDecorator.test.js.map +1 -0
  323. package/presentation/CmsEntryUnsavedChanges.d.ts +7 -0
  324. package/presentation/CmsEntryUnsavedChanges.js +12 -0
  325. package/presentation/CmsEntryUnsavedChanges.js.map +1 -0
  326. package/presentation/CmsEntryUnsavedChanges.test.d.ts +1 -0
  327. package/presentation/CmsEntryUnsavedChanges.test.js +23 -0
  328. package/presentation/CmsEntryUnsavedChanges.test.js.map +1 -0
  329. package/presentation/CmsReviewFieldSelections.test.d.ts +1 -0
  330. package/presentation/CmsReviewFieldSelections.test.js +27 -0
  331. package/presentation/CmsReviewFieldSelections.test.js.map +1 -0
  332. package/presentation/CmsReviewGetEntryFieldSelection.d.ts +8 -0
  333. package/presentation/CmsReviewGetEntryFieldSelection.js +16 -0
  334. package/presentation/CmsReviewGetEntryFieldSelection.js.map +1 -0
  335. package/presentation/CmsReviewListEntriesFieldSelection.d.ts +8 -0
  336. package/presentation/CmsReviewListEntriesFieldSelection.js +16 -0
  337. package/presentation/CmsReviewListEntriesFieldSelection.js.map +1 -0
  338. package/presentation/CmsReviewTableRowMapperDecorator.d.ts +11 -0
  339. package/presentation/CmsReviewTableRowMapperDecorator.js +24 -0
  340. package/presentation/CmsReviewTableRowMapperDecorator.js.map +1 -0
  341. package/presentation/CmsReviewTableRowMapperDecorator.test.d.ts +1 -0
  342. package/presentation/CmsReviewTableRowMapperDecorator.test.js +120 -0
  343. package/presentation/CmsReviewTableRowMapperDecorator.test.js.map +1 -0
  344. package/presentation/CmsRevisionsListPresenterDecorator.d.ts +24 -0
  345. package/presentation/CmsRevisionsListPresenterDecorator.js +66 -0
  346. package/presentation/CmsRevisionsListPresenterDecorator.js.map +1 -0
  347. package/presentation/CmsRevisionsListPresenterDecorator.test.d.ts +1 -0
  348. package/presentation/CmsRevisionsListPresenterDecorator.test.js +174 -0
  349. package/presentation/CmsRevisionsListPresenterDecorator.test.js.map +1 -0
  350. package/presentation/contentReviews/CmsContentReviewsPresenter.d.ts +28 -0
  351. package/presentation/contentReviews/CmsContentReviewsPresenter.js +103 -0
  352. package/presentation/contentReviews/CmsContentReviewsPresenter.js.map +1 -0
  353. package/presentation/contentReviews/CmsContentReviewsPresenter.test.d.ts +1 -0
  354. package/presentation/contentReviews/CmsContentReviewsPresenter.test.js +238 -0
  355. package/presentation/contentReviews/CmsContentReviewsPresenter.test.js.map +1 -0
  356. package/presentation/contentReviews/abstractions.d.ts +31 -0
  357. package/presentation/contentReviews/abstractions.js +5 -0
  358. package/presentation/contentReviews/abstractions.js.map +1 -0
  359. package/presentation/contentReviews/feature.d.ts +3 -0
  360. package/presentation/contentReviews/feature.js +17 -0
  361. package/presentation/contentReviews/feature.js.map +1 -0
  362. package/presentation/contentReviews/toContentTypes.d.ts +3 -0
  363. package/presentation/contentReviews/toContentTypes.js +14 -0
  364. package/presentation/contentReviews/toContentTypes.js.map +1 -0
  365. package/presentation/contentReviews/toContentTypes.test.d.ts +1 -0
  366. package/presentation/contentReviews/toContentTypes.test.js +20 -0
  367. package/presentation/contentReviews/toContentTypes.test.js.map +1 -0
  368. package/presentation/feature.d.ts +1 -0
  369. package/presentation/feature.js +19 -0
  370. package/presentation/feature.js.map +1 -0
  371. package/presentation/getCmsEntryReviewContext.d.ts +4 -0
  372. package/presentation/getCmsEntryReviewContext.js +12 -0
  373. package/presentation/getCmsEntryReviewContext.js.map +1 -0
  374. package/presentation/getCmsEntryReviewInitParams.d.ts +13 -0
  375. package/presentation/getCmsEntryReviewInitParams.js +18 -0
  376. package/presentation/getCmsEntryReviewInitParams.js.map +1 -0
  377. package/presentation/getCmsEntryReviewInitParams.test.d.ts +1 -0
  378. package/presentation/getCmsEntryReviewInitParams.test.js +69 -0
  379. package/presentation/getCmsEntryReviewInitParams.test.js.map +1 -0
  380. package/routes.d.ts +11 -0
  381. package/routes.js +21 -0
  382. package/routes.js.map +1 -0
  383. package/testing/createEntry.d.ts +3 -0
  384. package/testing/createEntry.js +22 -0
  385. package/testing/createEntry.js.map +1 -0
  386. package/testing/createEntrySession.d.ts +9 -0
  387. package/testing/createEntrySession.js +29 -0
  388. package/testing/createEntrySession.js.map +1 -0
  389. package/testing/createFolder.d.ts +2 -0
  390. package/testing/createFolder.js +13 -0
  391. package/testing/createFolder.js.map +1 -0
  392. package/testing/createFormVm.d.ts +2 -0
  393. package/testing/createFormVm.js +22 -0
  394. package/testing/createFormVm.js.map +1 -0
  395. package/testing/models.d.ts +4 -0
  396. package/testing/models.js +23 -0
  397. package/testing/models.js.map +1 -0
  398. package/testing/renderEditorTree.d.ts +17 -0
  399. package/testing/renderEditorTree.js +93 -0
  400. package/testing/renderEditorTree.js.map +1 -0
  401. package/testing/reviewStates.d.ts +17 -0
  402. package/testing/reviewStates.js +65 -0
  403. package/testing/reviewStates.js.map +1 -0
  404. package/types.d.ts +10 -0
  405. package/types.js +0 -0
  406. package/utils/appName.d.ts +4 -0
  407. package/utils/appName.js +13 -0
  408. package/utils/appName.js.map +1 -0
  409. package/utils/isReviewableModel.d.ts +2 -0
  410. package/utils/isReviewableModel.js +7 -0
  411. package/utils/isReviewableModel.js.map +1 -0
  412. package/utils/renderModelIcon.d.ts +3 -0
  413. package/utils/renderModelIcon.js +19 -0
  414. package/utils/renderModelIcon.js.map +1 -0
  415. package/utils/renderModelIconOrFallback.d.ts +3 -0
  416. package/utils/renderModelIconOrFallback.js +17 -0
  417. package/utils/renderModelIconOrFallback.js.map +1 -0
package/index.test.js ADDED
@@ -0,0 +1,414 @@
1
+ import react from "react";
2
+ import { describe, expect, it, vi } from "vitest";
3
+ import { render, screen } from "@testing-library/react";
4
+ import { Container } from "@webiny/di";
5
+ import { DiContainerProvider } from "@webiny/app/shared/di/DiContainerProvider.js";
6
+ import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/abstractions.js";
7
+ import { FeatureFlagsService } from "@webiny/app-admin/features/featureFlags/abstractions.js";
8
+ import { FeatureFlags } from "@webiny/feature-flags";
9
+ import { WebsocketEventHandler } from "@webiny/app-websockets/events/abstractions.js";
10
+ import { FolderModelProvider } from "@webiny/app-aco/features/folders/abstractions.js";
11
+ import { ListFoldersGateway } from "@webiny/app-aco/features/folders/listFolders/abstractions.js";
12
+ import { ModelsCache } from "@webiny/app-headless-cms/features/model/abstractions.js";
13
+ import { AppReviewRowProvider } from "@webiny/app-workflows/review/mounting/AppReviewRowProvider.js";
14
+ import { ReviewNotificationHandler } from "@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js";
15
+ import { ReviewNotificationService } from "@webiny/app-workflows/review/notifications/abstractions.js";
16
+ import { ReviewActivity } from "@webiny/app-workflows/review/activity/abstractions.js";
17
+ import { ReviewChangeMessageHandler } from "@webiny/app-workflows/review/mounting/ReviewChangeMessageHandler.js";
18
+ import { CmsReviewGateway } from "./features/gateway/CmsReviewGateway/CmsReviewGateway.js";
19
+ import { WorkflowEditorAppGateway } from "@webiny/app-workflows/editor/appGateway/abstractions.js";
20
+ import { WorkflowEditorGateway } from "@webiny/app-workflows/editor/gateway/abstractions.js";
21
+ import { WorkflowEditorRepositoryFeature } from "@webiny/app-workflows/editor/repository/feature.js";
22
+ import { InspectRoutingUseCase } from "@webiny/app-workflows/editor/useCases/inspectRouting/abstractions.js";
23
+ import { InspectRoutingFeature } from "@webiny/app-workflows/editor/useCases/inspectRouting/feature.js";
24
+ import { createEditorWorkflowDto } from "@webiny/app-workflows/editor/testing/editorFixtures.js";
25
+ import { createFakeEditorAppGateway } from "@webiny/app-workflows/editor/testing/fakeWorkflowEditorAppGateway.js";
26
+ import { ListModelsUseCase } from "@webiny/app-headless-cms/features/model/listModels/abstractions.js";
27
+ import { Notifications } from "@webiny/app-admin/features/notifications/abstractions.js";
28
+ import { IdentityContext } from "@webiny/app-admin/features/security/IdentityContext/abstractions.js";
29
+ import { createWorkflowsIdentityContext } from "@webiny/app-workflows/review/testing/createWorkflowsIdentityContext.js";
30
+ import { CmsContentReviewsPresenter } from "./presentation/contentReviews/abstractions.js";
31
+ import { CmsReviewRowProvider } from "./features/gateway/CmsReviewRowProvider/abstractions.js";
32
+ import { CmsReviewContentAdapter } from "./features/gateway/CmsReviewContentAdapter/abstractions.js";
33
+ import { CmsWorkflowEditorAppAdapter } from "./features/editorMounting/abstractions.js";
34
+ import { createFolder } from "./testing/createFolder.js";
35
+ import { ReviewAppGateway } from "@webiny/app-workflows/review/appGateway/abstractions.js";
36
+ import { ReviewGateway } from "@webiny/app-workflows/review/gateway/abstractions.js";
37
+ import { ReviewServicesFeature } from "@webiny/app-workflows/review/feature.js";
38
+ import { createFakeReviewAppGateway } from "@webiny/app-workflows/review/testing/fakeReviewAppGateway.js";
39
+ import { createReviewDto, createReviewWithFlagsDto } from "@webiny/app-workflows/review/testing/reviewFixtures.js";
40
+ import { CmsWorkflows } from "./index.js";
41
+ vi.mock("~/Components/CmsEntriesList/CmsReviewMoveEntryAction.js", ()=>({
42
+ CmsReviewMoveEntryAction: ()=>null
43
+ }));
44
+ vi.mock("~/Components/CmsEntriesList/CmsReviewScheduleEntryAction.js", ()=>({
45
+ CmsReviewScheduleEntryAction: ()=>null
46
+ }));
47
+ vi.mock("~/Components/ModelDelete/ModelDeleteWorkflowError.js", ()=>({
48
+ ModelDeleteWorkflowError: ()=>null
49
+ }));
50
+ vi.mock("~/Routes/index.js", ()=>({
51
+ CmsWorkflowEditor: ()=>null
52
+ }));
53
+ vi.mock("~/Components/ContentEntryForm/index.js", ()=>({
54
+ CmsEntryReviewBar: ()=>null,
55
+ CmsEntryReviewBlockedActions: ()=>null,
56
+ CmsEntryReviewFormLock: ()=>null,
57
+ CmsEntryReviewNewRevision: ()=>null,
58
+ CmsEntryReviewScheduleMenuItem: ()=>null
59
+ }));
60
+ vi.mock("~/Components/ContentReviews/CmsContentReviews.js", ()=>({
61
+ CmsContentReviews: ()=>/*#__PURE__*/ react.createElement("div", {
62
+ "data-testid": "cms-content-reviews"
63
+ })
64
+ }));
65
+ vi.mock("~/Components/ContentReviews/CmsContentReviewsSidebarItem.js", ()=>({
66
+ CmsContentReviewsSidebarItem: ()=>/*#__PURE__*/ react.createElement("div", {
67
+ "data-testid": "cms-content-reviews-sidebar"
68
+ })
69
+ }));
70
+ vi.mock("~/presentation/feature.js", ()=>({
71
+ CmsWorkflowsFeature: {
72
+ name: "Mock",
73
+ register: ()=>void 0,
74
+ resolve: ()=>void 0
75
+ }
76
+ }));
77
+ vi.mock("~/features/feature.js", ()=>({
78
+ CmsWorkflowsCacheFeature: {
79
+ name: "Mock",
80
+ register: ()=>void 0,
81
+ resolve: ()=>void 0
82
+ }
83
+ }));
84
+ describe("CmsWorkflows composition", ()=>{
85
+ const createContainer = (isEnabled)=>{
86
+ const flagsService = {
87
+ getFlags: ()=>new FeatureFlags({
88
+ advancedPublishingWorkflow: isEnabled
89
+ }),
90
+ isLoaded: ()=>true,
91
+ loadFlags: async ()=>void 0
92
+ };
93
+ const container = new Container();
94
+ container.registerInstance(FeatureFlagsService, flagsService);
95
+ const client = {
96
+ execute: vi.fn()
97
+ };
98
+ container.registerInstance(MainGraphQLClient, client);
99
+ container.registerInstance(ModelsCache, {
100
+ getItem: ()=>void 0,
101
+ getItems: ()=>[],
102
+ hasItems: ()=>true
103
+ });
104
+ container.registerInstance(ReviewNotificationService, {
105
+ handle: vi.fn()
106
+ });
107
+ container.registerInstance(ReviewActivity, {
108
+ subscribe: vi.fn(),
109
+ notify: vi.fn()
110
+ });
111
+ container.registerInstance(ListModelsUseCase, {
112
+ execute: async ()=>[]
113
+ });
114
+ container.registerInstance(IdentityContext, createWorkflowsIdentityContext());
115
+ container.registerInstance(Notifications, {
116
+ error: vi.fn()
117
+ });
118
+ container.registerInstance(FolderModelProvider, {
119
+ getModel: vi.fn().mockRejectedValue(new Error("The folder model is not needed here.")),
120
+ getGraphQLSelection: vi.fn().mockResolvedValue("{ id title parentId }")
121
+ });
122
+ return container;
123
+ };
124
+ it("sends the routing inspection of the editor through the CMS gateway with the flag on", async ()=>{
125
+ const container = createContainer(true);
126
+ WorkflowEditorRepositoryFeature.register(container);
127
+ InspectRoutingFeature.register(container);
128
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
129
+ container: container
130
+ }, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
131
+ const client = container.resolve(MainGraphQLClient);
132
+ vi.mocked(client.execute).mockResolvedValue({
133
+ cms: {
134
+ inspectCmsEntryRouting: {
135
+ data: {
136
+ owner: null,
137
+ source: "pool",
138
+ ruleId: null,
139
+ strategy: "none",
140
+ narrowedTeamId: null,
141
+ candidateIds: [],
142
+ candidateCount: 0,
143
+ trace: [],
144
+ skipped: []
145
+ },
146
+ error: null
147
+ }
148
+ }
149
+ });
150
+ const useCase = container.resolve(InspectRoutingUseCase);
151
+ const inspection = await useCase.execute({
152
+ app: "cms",
153
+ stepConfig: {
154
+ teams: [
155
+ "team-1"
156
+ ],
157
+ assignment: {
158
+ strategy: "none",
159
+ rules: []
160
+ }
161
+ },
162
+ requesterId: "user-1",
163
+ folderId: null,
164
+ modelId: "article"
165
+ });
166
+ const calls = vi.mocked(client.execute).mock.calls;
167
+ const lastRequest = calls[calls.length - 1][0];
168
+ expect(inspection.source).toBe("pool");
169
+ expect(inspection.owner).toBeNull();
170
+ expect(lastRequest.query).toContain("inspectCmsEntryRouting");
171
+ });
172
+ it("registers the Content Reviews row provider and the notification handler with the flag on", ()=>{
173
+ const container = createContainer(true);
174
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
175
+ container: container
176
+ }, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
177
+ expect(container.resolve(CmsReviewRowProvider)).toBeInstanceOf(AppReviewRowProvider);
178
+ const handlers = container.resolveAll(WebsocketEventHandler);
179
+ expect(handlers.some((handler)=>handler instanceof ReviewNotificationHandler)).toBe(true);
180
+ });
181
+ it("registers neither the row provider nor the notification handler with the flag off", ()=>{
182
+ const container = createContainer(false);
183
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
184
+ container: container
185
+ }, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
186
+ expect(()=>container.resolve(CmsReviewRowProvider)).toThrow("No registration found");
187
+ const handlers = container.resolveAll(WebsocketEventHandler);
188
+ expect(handlers.some((handler)=>handler instanceof ReviewNotificationHandler)).toBe(false);
189
+ });
190
+ it("registers the change message handler with the flag on", ()=>{
191
+ const container = createContainer(true);
192
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
193
+ container: container
194
+ }, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
195
+ const handlers = container.resolveAll(WebsocketEventHandler);
196
+ expect(handlers.some((handler)=>handler instanceof ReviewChangeMessageHandler)).toBe(true);
197
+ });
198
+ it("registers no change message handler with the flag off", ()=>{
199
+ const container = createContainer(false);
200
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
201
+ container: container
202
+ }, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
203
+ const handlers = container.resolveAll(WebsocketEventHandler);
204
+ expect(handlers.some((handler)=>handler instanceof ReviewChangeMessageHandler)).toBe(false);
205
+ });
206
+ it("mounts the Content Reviews route and sidebar item and registers the presenter with the flag on", ()=>{
207
+ const container = createContainer(true);
208
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
209
+ container: container
210
+ }, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
211
+ expect(screen.queryByTestId("cms-content-reviews")).not.toBeNull();
212
+ expect(screen.queryByTestId("cms-content-reviews-sidebar")).not.toBeNull();
213
+ expect(container.resolve(CmsContentReviewsPresenter)).toBeDefined();
214
+ });
215
+ it("mounts no Content Reviews glue and registers no presenter with the flag off", ()=>{
216
+ const container = createContainer(false);
217
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
218
+ container: container
219
+ }, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
220
+ expect(screen.queryByTestId("cms-content-reviews")).toBeNull();
221
+ expect(screen.queryByTestId("cms-content-reviews-sidebar")).toBeNull();
222
+ expect(()=>container.resolve(CmsContentReviewsPresenter)).toThrow("No registration found");
223
+ });
224
+ it("registers the CMS editor gateway under the shared token and the CMS editor adapter with the flag on (R347)", ()=>{
225
+ const container = createContainer(true);
226
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
227
+ container: container
228
+ }, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
229
+ const adapter = container.resolve(CmsWorkflowEditorAppAdapter);
230
+ const contentAdapter = container.resolve(CmsReviewContentAdapter);
231
+ expect(adapter.appKind).toBe("cms");
232
+ expect(adapter.contentAdapter).toBe(contentAdapter);
233
+ const gateways = container.resolveAll(WorkflowEditorAppGateway);
234
+ expect(gateways).toHaveLength(1);
235
+ expect(gateways[0].app).toBe("cms");
236
+ });
237
+ it("lists the folders of a model through the editor adapter with the flag on", async ()=>{
238
+ const container = createContainer(true);
239
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
240
+ container: container
241
+ }, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
242
+ const client = container.resolve(MainGraphQLClient);
243
+ vi.mocked(client.execute).mockResolvedValue({
244
+ aco: {
245
+ listFolders: {
246
+ data: [
247
+ createFolder("folder-a", "Campaigns", "root")
248
+ ],
249
+ error: null
250
+ }
251
+ }
252
+ });
253
+ const adapter = container.resolve(CmsWorkflowEditorAppAdapter);
254
+ const folders = await adapter.listFolders("article");
255
+ expect(adapter.getFolderType("article")).toBe("cms:article");
256
+ expect(folders).toEqual([
257
+ {
258
+ id: "folder-a",
259
+ path: "/Campaigns"
260
+ }
261
+ ]);
262
+ });
263
+ it("registers no folder gateway with the flag off", ()=>{
264
+ const container = createContainer(false);
265
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
266
+ container: container
267
+ }, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
268
+ expect(()=>container.resolve(ListFoldersGateway)).toThrow("No registration found");
269
+ });
270
+ it("registers neither the CMS editor gateway nor the CMS editor adapter with the flag off", ()=>{
271
+ const container = createContainer(false);
272
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
273
+ container: container
274
+ }, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
275
+ expect(()=>container.resolve(CmsWorkflowEditorAppAdapter)).toThrow("No registration found");
276
+ expect(container.resolveAll(WorkflowEditorAppGateway)).toEqual([]);
277
+ });
278
+ it("routes the editor by app only after the render: cms to the CMS gateway, wb to the other app (R349, R362)", async ()=>{
279
+ const container = createContainer(true);
280
+ WorkflowEditorRepositoryFeature.register(container);
281
+ const wbGateway = createFakeEditorAppGateway("wb");
282
+ wbGateway.getWorkflow.mockResolvedValue({
283
+ data: createEditorWorkflowDto({
284
+ id: "workflow-wb",
285
+ models: [
286
+ "wb.page"
287
+ ]
288
+ }),
289
+ error: null
290
+ });
291
+ const createWbGateway = vi.fn(()=>wbGateway);
292
+ container.registerFactory(WorkflowEditorAppGateway, createWbGateway);
293
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
294
+ container: container
295
+ }, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
296
+ expect(createWbGateway).not.toHaveBeenCalled();
297
+ const client = container.resolve(MainGraphQLClient);
298
+ vi.mocked(client.execute).mockClear();
299
+ vi.mocked(client.execute).mockResolvedValue({
300
+ cms: {
301
+ getCmsEntryWorkflow: {
302
+ data: createEditorWorkflowDto({
303
+ id: "workflow-cms"
304
+ }),
305
+ error: null
306
+ }
307
+ }
308
+ });
309
+ const gateway = container.resolve(WorkflowEditorGateway);
310
+ const cms = await gateway.getWorkflow({
311
+ app: "cms",
312
+ id: "workflow-cms"
313
+ });
314
+ const wb = await gateway.getWorkflow({
315
+ app: "wb",
316
+ id: "workflow-wb"
317
+ });
318
+ expect(createWbGateway).toHaveBeenCalledTimes(1);
319
+ expect(cms.id).toBe("workflow-cms");
320
+ expect(wb.id).toBe("workflow-wb");
321
+ expect(vi.mocked(client.execute)).toHaveBeenCalledTimes(1);
322
+ expect(vi.mocked(client.execute).mock.calls[0][0].query).toContain("getCmsEntryWorkflow");
323
+ expect(wbGateway.getWorkflow).toHaveBeenCalledWith("workflow-wb");
324
+ });
325
+ it("routes no editor operation to the CMS with the flag off", async ()=>{
326
+ const container = createContainer(false);
327
+ WorkflowEditorRepositoryFeature.register(container);
328
+ const wbGateway = createFakeEditorAppGateway("wb");
329
+ container.registerInstance(WorkflowEditorAppGateway, wbGateway);
330
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
331
+ container: container
332
+ }, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
333
+ const gateway = container.resolve(WorkflowEditorGateway);
334
+ const client = container.resolve(MainGraphQLClient);
335
+ await expect(gateway.getWorkflow({
336
+ app: "cms",
337
+ id: "workflow-cms"
338
+ })).rejects.toThrow('No workflows app is registered for "cms".');
339
+ expect(vi.mocked(client.execute)).not.toHaveBeenCalled();
340
+ });
341
+ it("registers CmsReviewGateway itself under the shared token only with the flag on (R358)", ()=>{
342
+ const enabled = createContainer(true);
343
+ const disabled = createContainer(false);
344
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
345
+ container: enabled
346
+ }, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
347
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
348
+ container: disabled
349
+ }, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
350
+ const registered = enabled.resolveAll(ReviewAppGateway);
351
+ expect(registered.map((appGateway)=>appGateway.app)).toEqual([
352
+ "cms"
353
+ ]);
354
+ expect(Object.getPrototypeOf(registered[0])).toBe(CmsReviewGateway.prototype);
355
+ expect(disabled.resolveAll(ReviewAppGateway)).toEqual([]);
356
+ });
357
+ it("routes CMS namespaces to the CMS gateway and the page namespace to the other app, built after the render (Review Focus 10, R362)", async ()=>{
358
+ const container = createContainer(true);
359
+ ReviewServicesFeature.register(container);
360
+ const wbStub = createFakeReviewAppGateway("wb", [
361
+ "wb.page"
362
+ ]);
363
+ const phases = [];
364
+ let phase = "render";
365
+ container.registerFactory(ReviewAppGateway, ()=>{
366
+ phases.push(phase);
367
+ return wbStub;
368
+ });
369
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
370
+ container: container
371
+ }, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
372
+ phase = "after";
373
+ const gateway = container.resolve(ReviewGateway);
374
+ const client = container.resolve(MainGraphQLClient);
375
+ vi.mocked(client.execute).mockResolvedValue({
376
+ cms: {
377
+ getCmsEntryReview: {
378
+ data: createReviewWithFlagsDto(),
379
+ error: null
380
+ }
381
+ }
382
+ });
383
+ const pageReviewDto = createReviewDto({
384
+ id: "review-2"
385
+ });
386
+ const pageReview = createReviewWithFlagsDto({
387
+ review: pageReviewDto
388
+ });
389
+ wbStub.getReview.mockResolvedValue({
390
+ data: pageReview,
391
+ error: null
392
+ });
393
+ const cmsReview = await gateway.getReview({
394
+ namespace: "cms.article",
395
+ reviewId: "review-1"
396
+ });
397
+ const wbReview = await gateway.getReview({
398
+ namespace: "wb.page",
399
+ reviewId: "review-2"
400
+ });
401
+ expect(phases).toEqual([
402
+ "after"
403
+ ]);
404
+ expect(gateway.getApp("cms.article")).toBe("cms");
405
+ expect(gateway.getApp("wb.page")).toBe("wb");
406
+ expect(cmsReview.review.id).toBe("review-1");
407
+ expect(wbReview.review.id).toBe("review-2");
408
+ const queries = vi.mocked(client.execute).mock.calls.map((call)=>call[0].query);
409
+ expect(queries.filter((query)=>query.includes("getCmsEntryReview("))).toHaveLength(1);
410
+ expect(wbStub.getReview).toHaveBeenCalledWith("review-2");
411
+ });
412
+ });
413
+
414
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sources":["../src/index.test.tsx"],"sourcesContent":["import React from \"react\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { render } from \"@testing-library/react\";\nimport { screen } from \"@testing-library/react\";\nimport { Container } from \"@webiny/di\";\nimport { DiContainerProvider } from \"@webiny/app/shared/di/DiContainerProvider.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/abstractions.js\";\nimport { FeatureFlagsService } from \"@webiny/app-admin/features/featureFlags/abstractions.js\";\nimport { FeatureFlags } from \"@webiny/feature-flags\";\nimport { WebsocketEventHandler } from \"@webiny/app-websockets/events/abstractions.js\";\nimport { FolderModelProvider } from \"@webiny/app-aco/features/folders/abstractions.js\";\nimport { ListFoldersGateway } from \"@webiny/app-aco/features/folders/listFolders/abstractions.js\";\nimport { ModelsCache } from \"@webiny/app-headless-cms/features/model/abstractions.js\";\nimport { AppReviewRowProvider } from \"@webiny/app-workflows/review/mounting/AppReviewRowProvider.js\";\nimport { ReviewNotificationHandler } from \"@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js\";\nimport { ReviewNotificationService } from \"@webiny/app-workflows/review/notifications/abstractions.js\";\nimport { ReviewActivity } from \"@webiny/app-workflows/review/activity/abstractions.js\";\nimport { ReviewChangeMessageHandler } from \"@webiny/app-workflows/review/mounting/ReviewChangeMessageHandler.js\";\nimport { CmsReviewGateway } from \"~/features/gateway/CmsReviewGateway/CmsReviewGateway.js\";\nimport { WorkflowEditorAppGateway } from \"@webiny/app-workflows/editor/appGateway/abstractions.js\";\nimport { WorkflowEditorGateway } from \"@webiny/app-workflows/editor/gateway/abstractions.js\";\nimport { WorkflowEditorRepositoryFeature } from \"@webiny/app-workflows/editor/repository/feature.js\";\nimport { InspectRoutingUseCase } from \"@webiny/app-workflows/editor/useCases/inspectRouting/abstractions.js\";\nimport { InspectRoutingFeature } from \"@webiny/app-workflows/editor/useCases/inspectRouting/feature.js\";\nimport { createEditorWorkflowDto } from \"@webiny/app-workflows/editor/testing/editorFixtures.js\";\nimport { createFakeEditorAppGateway } from \"@webiny/app-workflows/editor/testing/fakeWorkflowEditorAppGateway.js\";\nimport { ListModelsUseCase } from \"@webiny/app-headless-cms/features/model/listModels/abstractions.js\";\nimport { Notifications } from \"@webiny/app-admin/features/notifications/abstractions.js\";\nimport { IdentityContext } from \"@webiny/app-admin/features/security/IdentityContext/abstractions.js\";\nimport { createWorkflowsIdentityContext } from \"@webiny/app-workflows/review/testing/createWorkflowsIdentityContext.js\";\nimport { CmsContentReviewsPresenter } from \"~/presentation/contentReviews/abstractions.js\";\nimport { CmsReviewRowProvider } from \"~/features/gateway/CmsReviewRowProvider/abstractions.js\";\nimport { CmsReviewContentAdapter } from \"~/features/gateway/CmsReviewContentAdapter/abstractions.js\";\nimport { CmsWorkflowEditorAppAdapter } from \"~/features/editorMounting/abstractions.js\";\nimport { createFolder } from \"~/testing/createFolder.js\";\nimport { ReviewAppGateway } from \"@webiny/app-workflows/review/appGateway/abstractions.js\";\nimport { ReviewGateway as ReviewGatewayAbstraction } from \"@webiny/app-workflows/review/gateway/abstractions.js\";\nimport { ReviewServicesFeature } from \"@webiny/app-workflows/review/feature.js\";\nimport { createFakeReviewAppGateway } from \"@webiny/app-workflows/review/testing/fakeReviewAppGateway.js\";\nimport { createReviewDto } from \"@webiny/app-workflows/review/testing/reviewFixtures.js\";\nimport { createReviewWithFlagsDto } from \"@webiny/app-workflows/review/testing/reviewFixtures.js\";\nimport { CmsWorkflows } from \"./index.js\";\n\nvi.mock(\"~/Components/CmsEntriesList/CmsReviewMoveEntryAction.js\", () => {\n return { CmsReviewMoveEntryAction: () => null };\n});\n\nvi.mock(\"~/Components/CmsEntriesList/CmsReviewScheduleEntryAction.js\", () => {\n return { CmsReviewScheduleEntryAction: () => null };\n});\n\nvi.mock(\"~/Components/ModelDelete/ModelDeleteWorkflowError.js\", () => {\n return { ModelDeleteWorkflowError: () => null };\n});\n\nvi.mock(\"~/Routes/index.js\", () => {\n return { CmsWorkflowEditor: () => null };\n});\n\nvi.mock(\"~/Components/ContentEntryForm/index.js\", () => {\n return {\n CmsEntryReviewBar: () => null,\n CmsEntryReviewBlockedActions: () => null,\n CmsEntryReviewFormLock: () => null,\n CmsEntryReviewNewRevision: () => null,\n CmsEntryReviewScheduleMenuItem: () => null\n };\n});\n\nvi.mock(\"~/Components/ContentReviews/CmsContentReviews.js\", () => {\n return { CmsContentReviews: () => <div data-testid=\"cms-content-reviews\" /> };\n});\n\nvi.mock(\"~/Components/ContentReviews/CmsContentReviewsSidebarItem.js\", () => {\n return {\n CmsContentReviewsSidebarItem: () => <div data-testid=\"cms-content-reviews-sidebar\" />\n };\n});\n\nvi.mock(\"~/presentation/feature.js\", () => {\n return {\n CmsWorkflowsFeature: { name: \"Mock\", register: () => undefined, resolve: () => undefined }\n };\n});\n\nvi.mock(\"~/features/feature.js\", () => {\n return {\n CmsWorkflowsCacheFeature: {\n name: \"Mock\",\n register: () => undefined,\n resolve: () => undefined\n }\n };\n});\n\ndescribe(\"CmsWorkflows composition\", () => {\n const createContainer = (isEnabled: boolean): Container => {\n const flagsService: FeatureFlagsService.Interface = {\n getFlags: () => {\n return new FeatureFlags({ advancedPublishingWorkflow: isEnabled });\n },\n isLoaded: () => true,\n loadFlags: async () => undefined\n };\n const container = new Container();\n container.registerInstance(FeatureFlagsService, flagsService);\n const client = { execute: vi.fn() };\n container.registerInstance(MainGraphQLClient, client);\n container.registerInstance(ModelsCache, {\n getItem: () => undefined,\n getItems: () => [],\n hasItems: () => true\n } as unknown as ModelsCache.Interface);\n container.registerInstance(ReviewNotificationService, { handle: vi.fn() });\n container.registerInstance(ReviewActivity, { subscribe: vi.fn(), notify: vi.fn() });\n container.registerInstance(ListModelsUseCase, {\n execute: async () => []\n } as unknown as ListModelsUseCase.Interface);\n // The admin registers the signed-in identity; the model list waits for one.\n container.registerInstance(IdentityContext, createWorkflowsIdentityContext());\n container.registerInstance(Notifications, {\n error: vi.fn()\n } as unknown as Notifications.Interface);\n // app-aco's module registers the folder model provider in the real admin.\n container.registerInstance(FolderModelProvider, {\n getModel: vi.fn().mockRejectedValue(new Error(\"The folder model is not needed here.\")),\n getGraphQLSelection: vi.fn().mockResolvedValue(\"{ id title parentId }\")\n });\n return container;\n };\n\n it(\"sends the routing inspection of the editor through the CMS gateway with the flag on\", async () => {\n const container = createContainer(true);\n // The data layer of app-workflows, which WorkflowsAdminApp registers in the admin.\n WorkflowEditorRepositoryFeature.register(container);\n InspectRoutingFeature.register(container);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n const client = container.resolve(MainGraphQLClient);\n vi.mocked(client.execute).mockResolvedValue({\n cms: {\n inspectCmsEntryRouting: {\n data: {\n owner: null,\n source: \"pool\",\n ruleId: null,\n strategy: \"none\",\n narrowedTeamId: null,\n candidateIds: [],\n candidateCount: 0,\n trace: [],\n skipped: []\n },\n error: null\n }\n }\n });\n\n const useCase = container.resolve(InspectRoutingUseCase);\n const inspection = await useCase.execute({\n app: \"cms\",\n stepConfig: { teams: [\"team-1\"], assignment: { strategy: \"none\", rules: [] } },\n requesterId: \"user-1\",\n folderId: null,\n modelId: \"article\"\n });\n\n const calls = vi.mocked(client.execute).mock.calls;\n const lastRequest = calls[calls.length - 1][0];\n expect(inspection.source).toBe(\"pool\");\n expect(inspection.owner).toBeNull();\n expect(lastRequest.query).toContain(\"inspectCmsEntryRouting\");\n });\n\n it(\"registers the Content Reviews row provider and the notification handler with the flag on\", () => {\n const container = createContainer(true);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n expect(container.resolve(CmsReviewRowProvider)).toBeInstanceOf(AppReviewRowProvider);\n const handlers = container.resolveAll(WebsocketEventHandler);\n expect(handlers.some(handler => handler instanceof ReviewNotificationHandler)).toBe(true);\n });\n\n it(\"registers neither the row provider nor the notification handler with the flag off\", () => {\n const container = createContainer(false);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n expect(() => container.resolve(CmsReviewRowProvider)).toThrow(\"No registration found\");\n const handlers = container.resolveAll(WebsocketEventHandler);\n expect(handlers.some(handler => handler instanceof ReviewNotificationHandler)).toBe(false);\n });\n\n it(\"registers the change message handler with the flag on\", () => {\n const container = createContainer(true);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n const handlers = container.resolveAll(WebsocketEventHandler);\n expect(handlers.some(handler => handler instanceof ReviewChangeMessageHandler)).toBe(true);\n });\n\n it(\"registers no change message handler with the flag off\", () => {\n const container = createContainer(false);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n const handlers = container.resolveAll(WebsocketEventHandler);\n expect(handlers.some(handler => handler instanceof ReviewChangeMessageHandler)).toBe(false);\n });\n\n it(\"mounts the Content Reviews route and sidebar item and registers the presenter with the flag on\", () => {\n const container = createContainer(true);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n expect(screen.queryByTestId(\"cms-content-reviews\")).not.toBeNull();\n expect(screen.queryByTestId(\"cms-content-reviews-sidebar\")).not.toBeNull();\n expect(container.resolve(CmsContentReviewsPresenter)).toBeDefined();\n });\n\n it(\"mounts no Content Reviews glue and registers no presenter with the flag off\", () => {\n const container = createContainer(false);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n expect(screen.queryByTestId(\"cms-content-reviews\")).toBeNull();\n expect(screen.queryByTestId(\"cms-content-reviews-sidebar\")).toBeNull();\n expect(() => container.resolve(CmsContentReviewsPresenter)).toThrow(\n \"No registration found\"\n );\n });\n\n it(\"registers the CMS editor gateway under the shared token and the CMS editor adapter with the flag on (R347)\", () => {\n const container = createContainer(true);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n const adapter = container.resolve(CmsWorkflowEditorAppAdapter);\n const contentAdapter = container.resolve(CmsReviewContentAdapter);\n\n expect(adapter.appKind).toBe(\"cms\");\n expect(adapter.contentAdapter).toBe(contentAdapter);\n // The CMS editor gateway is registered under the shared app gateway token (R347).\n const gateways = container.resolveAll(WorkflowEditorAppGateway);\n expect(gateways).toHaveLength(1);\n expect(gateways[0].app).toBe(\"cms\");\n });\n\n it(\"lists the folders of a model through the editor adapter with the flag on\", async () => {\n const container = createContainer(true);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n const client = container.resolve(MainGraphQLClient);\n vi.mocked(client.execute).mockResolvedValue({\n aco: {\n listFolders: {\n data: [createFolder(\"folder-a\", \"Campaigns\", \"root\")],\n error: null\n }\n }\n });\n\n const adapter = container.resolve(CmsWorkflowEditorAppAdapter);\n const folders = await adapter.listFolders(\"article\");\n\n expect(adapter.getFolderType(\"article\")).toBe(\"cms:article\");\n expect(folders).toEqual([{ id: \"folder-a\", path: \"/Campaigns\" }]);\n });\n\n it(\"registers no folder gateway with the flag off\", () => {\n const container = createContainer(false);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n expect(() => container.resolve(ListFoldersGateway)).toThrow(\"No registration found\");\n });\n\n it(\"registers neither the CMS editor gateway nor the CMS editor adapter with the flag off\", () => {\n const container = createContainer(false);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n expect(() => container.resolve(CmsWorkflowEditorAppAdapter)).toThrow(\n \"No registration found\"\n );\n expect(container.resolveAll(WorkflowEditorAppGateway)).toEqual([]);\n });\n\n it(\"routes the editor by app only after the render: cms to the CMS gateway, wb to the other app (R349, R362)\", async () => {\n const container = createContainer(true);\n WorkflowEditorRepositoryFeature.register(container);\n const wbGateway = createFakeEditorAppGateway(\"wb\");\n wbGateway.getWorkflow.mockResolvedValue({\n data: createEditorWorkflowDto({ id: \"workflow-wb\", models: [\"wb.page\"] }),\n error: null\n });\n // A factory runs each time a routing gateway collects the app gateways, so it counts the builds.\n const createWbGateway = vi.fn(() => wbGateway);\n container.registerFactory(WorkflowEditorAppGateway, createWbGateway);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n expect(createWbGateway).not.toHaveBeenCalled();\n const client = container.resolve(MainGraphQLClient);\n vi.mocked(client.execute).mockClear();\n vi.mocked(client.execute).mockResolvedValue({\n cms: {\n getCmsEntryWorkflow: {\n data: createEditorWorkflowDto({ id: \"workflow-cms\" }),\n error: null\n }\n }\n });\n\n const gateway = container.resolve(WorkflowEditorGateway);\n const cms = await gateway.getWorkflow({ app: \"cms\", id: \"workflow-cms\" });\n const wb = await gateway.getWorkflow({ app: \"wb\", id: \"workflow-wb\" });\n\n expect(createWbGateway).toHaveBeenCalledTimes(1);\n expect(cms.id).toBe(\"workflow-cms\");\n expect(wb.id).toBe(\"workflow-wb\");\n expect(vi.mocked(client.execute)).toHaveBeenCalledTimes(1);\n expect(vi.mocked(client.execute).mock.calls[0][0].query).toContain(\"getCmsEntryWorkflow\");\n expect(wbGateway.getWorkflow).toHaveBeenCalledWith(\"workflow-wb\");\n });\n\n it(\"routes no editor operation to the CMS with the flag off\", async () => {\n const container = createContainer(false);\n WorkflowEditorRepositoryFeature.register(container);\n const wbGateway = createFakeEditorAppGateway(\"wb\");\n container.registerInstance(WorkflowEditorAppGateway, wbGateway);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n const gateway = container.resolve(WorkflowEditorGateway);\n const client = container.resolve(MainGraphQLClient);\n\n await expect(gateway.getWorkflow({ app: \"cms\", id: \"workflow-cms\" })).rejects.toThrow(\n 'No workflows app is registered for \"cms\".'\n );\n expect(vi.mocked(client.execute)).not.toHaveBeenCalled();\n });\n it(\"registers CmsReviewGateway itself under the shared token only with the flag on (R358)\", () => {\n const enabled = createContainer(true);\n const disabled = createContainer(false);\n\n render(\n <DiContainerProvider container={enabled}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n render(\n <DiContainerProvider container={disabled}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n const registered = enabled.resolveAll(ReviewAppGateway);\n expect(registered.map(appGateway => appGateway.app)).toEqual([\"cms\"]);\n expect(Object.getPrototypeOf(registered[0])).toBe(CmsReviewGateway.prototype);\n expect(disabled.resolveAll(ReviewAppGateway)).toEqual([]);\n });\n\n it(\"routes CMS namespaces to the CMS gateway and the page namespace to the other app, built after the render (Review Focus 10, R362)\", async () => {\n const container = createContainer(true);\n // The review data features of app-workflows, as WorkflowsAdminApp registers them.\n ReviewServicesFeature.register(container);\n const wbStub = createFakeReviewAppGateway(\"wb\", [\"wb.page\"]);\n const phases: string[] = [];\n let phase = \"render\";\n // The routing gateway collects the app gateways once, when it is built (R349).\n container.registerFactory(ReviewAppGateway, () => {\n phases.push(phase);\n return wbStub;\n });\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n phase = \"after\";\n\n const gateway = container.resolve(ReviewGatewayAbstraction);\n const client = container.resolve(MainGraphQLClient);\n vi.mocked(client.execute).mockResolvedValue({\n cms: { getCmsEntryReview: { data: createReviewWithFlagsDto(), error: null } }\n });\n const pageReviewDto = createReviewDto({ id: \"review-2\" });\n const pageReview = createReviewWithFlagsDto({ review: pageReviewDto });\n wbStub.getReview.mockResolvedValue({ data: pageReview, error: null });\n\n const cmsReview = await gateway.getReview({\n namespace: \"cms.article\",\n reviewId: \"review-1\"\n });\n const wbReview = await gateway.getReview({ namespace: \"wb.page\", reviewId: \"review-2\" });\n\n expect(phases).toEqual([\"after\"]);\n expect(gateway.getApp(\"cms.article\")).toBe(\"cms\");\n expect(gateway.getApp(\"wb.page\")).toBe(\"wb\");\n expect(cmsReview.review.id).toBe(\"review-1\");\n expect(wbReview.review.id).toBe(\"review-2\");\n const queries = vi.mocked(client.execute).mock.calls.map(call => call[0].query as string);\n expect(queries.filter(query => query.includes(\"getCmsEntryReview(\"))).toHaveLength(1);\n expect(wbStub.getReview).toHaveBeenCalledWith(\"review-2\");\n });\n});\n"],"names":["vi","undefined","describe","createContainer","isEnabled","flagsService","FeatureFlags","container","Container","FeatureFlagsService","client","MainGraphQLClient","ModelsCache","ReviewNotificationService","ReviewActivity","ListModelsUseCase","IdentityContext","createWorkflowsIdentityContext","Notifications","FolderModelProvider","Error","it","WorkflowEditorRepositoryFeature","InspectRoutingFeature","render","DiContainerProvider","CmsWorkflows","useCase","InspectRoutingUseCase","inspection","calls","lastRequest","expect","CmsReviewRowProvider","AppReviewRowProvider","handlers","WebsocketEventHandler","handler","ReviewNotificationHandler","ReviewChangeMessageHandler","screen","CmsContentReviewsPresenter","adapter","CmsWorkflowEditorAppAdapter","contentAdapter","CmsReviewContentAdapter","gateways","WorkflowEditorAppGateway","createFolder","folders","ListFoldersGateway","wbGateway","createFakeEditorAppGateway","createEditorWorkflowDto","createWbGateway","gateway","WorkflowEditorGateway","cms","wb","enabled","disabled","registered","ReviewAppGateway","appGateway","Object","CmsReviewGateway","ReviewServicesFeature","wbStub","createFakeReviewAppGateway","phases","phase","ReviewGatewayAbstraction","createReviewWithFlagsDto","pageReviewDto","createReviewDto","pageReview","cmsReview","wbReview","queries","call","query"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CAA,GAAG,IAAI,CAAC,2DAA2D,IACxD;QAAE,0BAA0B,IAAM;IAAK;AAGlDA,GAAG,IAAI,CAAC,+DAA+D,IAC5D;QAAE,8BAA8B,IAAM;IAAK;AAGtDA,GAAG,IAAI,CAAC,wDAAwD,IACrD;QAAE,0BAA0B,IAAM;IAAK;AAGlDA,GAAG,IAAI,CAAC,qBAAqB,IAClB;QAAE,mBAAmB,IAAM;IAAK;AAG3CA,GAAG,IAAI,CAAC,0CAA0C,IACvC;QACH,mBAAmB,IAAM;QACzB,8BAA8B,IAAM;QACpC,wBAAwB,IAAM;QAC9B,2BAA2B,IAAM;QACjC,gCAAgC,IAAM;IAC1C;AAGJA,GAAG,IAAI,CAAC,oDAAoD,IACjD;QAAE,mBAAmB,kBAAM,oBAAC;gBAAI,eAAY;;IAAyB;AAGhFA,GAAG,IAAI,CAAC,+DAA+D,IAC5D;QACH,8BAA8B,kBAAM,oBAAC;gBAAI,eAAY;;IACzD;AAGJA,GAAG,IAAI,CAAC,6BAA6B,IAC1B;QACH,qBAAqB;YAAE,MAAM;YAAQ,UAAU,IAAMC;YAAW,SAAS,IAAMA;QAAU;IAC7F;AAGJD,GAAG,IAAI,CAAC,yBAAyB,IACtB;QACH,0BAA0B;YACtB,MAAM;YACN,UAAU,IAAMC;YAChB,SAAS,IAAMA;QACnB;IACJ;AAGJC,SAAS,4BAA4B;IACjC,MAAMC,kBAAkB,CAACC;QACrB,MAAMC,eAA8C;YAChD,UAAU,IACC,IAAIC,aAAa;oBAAE,4BAA4BF;gBAAU;YAEpE,UAAU,IAAM;YAChB,WAAW,UAAYH;QAC3B;QACA,MAAMM,YAAY,IAAIC;QACtBD,UAAU,gBAAgB,CAACE,qBAAqBJ;QAChD,MAAMK,SAAS;YAAE,SAASV,GAAG,EAAE;QAAG;QAClCO,UAAU,gBAAgB,CAACI,mBAAmBD;QAC9CH,UAAU,gBAAgB,CAACK,aAAa;YACpC,SAAS,IAAMX;YACf,UAAU,IAAM,EAAE;YAClB,UAAU,IAAM;QACpB;QACAM,UAAU,gBAAgB,CAACM,2BAA2B;YAAE,QAAQb,GAAG,EAAE;QAAG;QACxEO,UAAU,gBAAgB,CAACO,gBAAgB;YAAE,WAAWd,GAAG,EAAE;YAAI,QAAQA,GAAG,EAAE;QAAG;QACjFO,UAAU,gBAAgB,CAACQ,mBAAmB;YAC1C,SAAS,UAAY,EAAE;QAC3B;QAEAR,UAAU,gBAAgB,CAACS,iBAAiBC;QAC5CV,UAAU,gBAAgB,CAACW,eAAe;YACtC,OAAOlB,GAAG,EAAE;QAChB;QAEAO,UAAU,gBAAgB,CAACY,qBAAqB;YAC5C,UAAUnB,GAAG,EAAE,GAAG,iBAAiB,CAAC,IAAIoB,MAAM;YAC9C,qBAAqBpB,GAAG,EAAE,GAAG,iBAAiB,CAAC;QACnD;QACA,OAAOO;IACX;IAEAc,GAAG,uFAAuF;QACtF,MAAMd,YAAYJ,gBAAgB;QAElCmB,gCAAgC,QAAQ,CAACf;QACzCgB,sBAAsB,QAAQ,CAAChB;QAE/BiB,OAAO,WAADA,GACF,oBAACC,qBAAmBA;YAAC,WAAWlB;yBAC5B,oBAACmB,cAAYA;QAGrB,MAAMhB,SAASH,UAAU,OAAO,CAACI;QACjCX,GAAG,MAAM,CAACU,OAAO,OAAO,EAAE,iBAAiB,CAAC;YACxC,KAAK;gBACD,wBAAwB;oBACpB,MAAM;wBACF,OAAO;wBACP,QAAQ;wBACR,QAAQ;wBACR,UAAU;wBACV,gBAAgB;wBAChB,cAAc,EAAE;wBAChB,gBAAgB;wBAChB,OAAO,EAAE;wBACT,SAAS,EAAE;oBACf;oBACA,OAAO;gBACX;YACJ;QACJ;QAEA,MAAMiB,UAAUpB,UAAU,OAAO,CAACqB;QAClC,MAAMC,aAAa,MAAMF,QAAQ,OAAO,CAAC;YACrC,KAAK;YACL,YAAY;gBAAE,OAAO;oBAAC;iBAAS;gBAAE,YAAY;oBAAE,UAAU;oBAAQ,OAAO,EAAE;gBAAC;YAAE;YAC7E,aAAa;YACb,UAAU;YACV,SAAS;QACb;QAEA,MAAMG,QAAQ9B,GAAG,MAAM,CAACU,OAAO,OAAO,EAAE,IAAI,CAAC,KAAK;QAClD,MAAMqB,cAAcD,KAAK,CAACA,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE;QAC9CE,OAAOH,WAAW,MAAM,EAAE,IAAI,CAAC;QAC/BG,OAAOH,WAAW,KAAK,EAAE,QAAQ;QACjCG,OAAOD,YAAY,KAAK,EAAE,SAAS,CAAC;IACxC;IAEAV,GAAG,4FAA4F;QAC3F,MAAMd,YAAYJ,gBAAgB;QAElCqB,OAAO,WAADA,GACF,oBAACC,qBAAmBA;YAAC,WAAWlB;yBAC5B,oBAACmB,cAAYA;QAIrBM,OAAOzB,UAAU,OAAO,CAAC0B,uBAAuB,cAAc,CAACC;QAC/D,MAAMC,WAAW5B,UAAU,UAAU,CAAC6B;QACtCJ,OAAOG,SAAS,IAAI,CAACE,CAAAA,UAAWA,mBAAmBC,4BAA4B,IAAI,CAAC;IACxF;IAEAjB,GAAG,qFAAqF;QACpF,MAAMd,YAAYJ,gBAAgB;QAElCqB,OAAO,WAADA,GACF,oBAACC,qBAAmBA;YAAC,WAAWlB;yBAC5B,oBAACmB,cAAYA;QAIrBM,OAAO,IAAMzB,UAAU,OAAO,CAAC0B,uBAAuB,OAAO,CAAC;QAC9D,MAAME,WAAW5B,UAAU,UAAU,CAAC6B;QACtCJ,OAAOG,SAAS,IAAI,CAACE,CAAAA,UAAWA,mBAAmBC,4BAA4B,IAAI,CAAC;IACxF;IAEAjB,GAAG,yDAAyD;QACxD,MAAMd,YAAYJ,gBAAgB;QAElCqB,OAAO,WAADA,GACF,oBAACC,qBAAmBA;YAAC,WAAWlB;yBAC5B,oBAACmB,cAAYA;QAIrB,MAAMS,WAAW5B,UAAU,UAAU,CAAC6B;QACtCJ,OAAOG,SAAS,IAAI,CAACE,CAAAA,UAAWA,mBAAmBE,6BAA6B,IAAI,CAAC;IACzF;IAEAlB,GAAG,yDAAyD;QACxD,MAAMd,YAAYJ,gBAAgB;QAElCqB,OAAO,WAADA,GACF,oBAACC,qBAAmBA;YAAC,WAAWlB;yBAC5B,oBAACmB,cAAYA;QAIrB,MAAMS,WAAW5B,UAAU,UAAU,CAAC6B;QACtCJ,OAAOG,SAAS,IAAI,CAACE,CAAAA,UAAWA,mBAAmBE,6BAA6B,IAAI,CAAC;IACzF;IAEAlB,GAAG,kGAAkG;QACjG,MAAMd,YAAYJ,gBAAgB;QAElCqB,OAAO,WAADA,GACF,oBAACC,qBAAmBA;YAAC,WAAWlB;yBAC5B,oBAACmB,cAAYA;QAIrBM,OAAOQ,OAAO,aAAa,CAAC,wBAAwB,GAAG,CAAC,QAAQ;QAChER,OAAOQ,OAAO,aAAa,CAAC,gCAAgC,GAAG,CAAC,QAAQ;QACxER,OAAOzB,UAAU,OAAO,CAACkC,6BAA6B,WAAW;IACrE;IAEApB,GAAG,+EAA+E;QAC9E,MAAMd,YAAYJ,gBAAgB;QAElCqB,OAAO,WAADA,GACF,oBAACC,qBAAmBA;YAAC,WAAWlB;yBAC5B,oBAACmB,cAAYA;QAIrBM,OAAOQ,OAAO,aAAa,CAAC,wBAAwB,QAAQ;QAC5DR,OAAOQ,OAAO,aAAa,CAAC,gCAAgC,QAAQ;QACpER,OAAO,IAAMzB,UAAU,OAAO,CAACkC,6BAA6B,OAAO,CAC/D;IAER;IAEApB,GAAG,8GAA8G;QAC7G,MAAMd,YAAYJ,gBAAgB;QAElCqB,OAAO,WAADA,GACF,oBAACC,qBAAmBA;YAAC,WAAWlB;yBAC5B,oBAACmB,cAAYA;QAIrB,MAAMgB,UAAUnC,UAAU,OAAO,CAACoC;QAClC,MAAMC,iBAAiBrC,UAAU,OAAO,CAACsC;QAEzCb,OAAOU,QAAQ,OAAO,EAAE,IAAI,CAAC;QAC7BV,OAAOU,QAAQ,cAAc,EAAE,IAAI,CAACE;QAEpC,MAAME,WAAWvC,UAAU,UAAU,CAACwC;QACtCf,OAAOc,UAAU,YAAY,CAAC;QAC9Bd,OAAOc,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC;IACjC;IAEAzB,GAAG,4EAA4E;QAC3E,MAAMd,YAAYJ,gBAAgB;QAElCqB,OAAO,WAADA,GACF,oBAACC,qBAAmBA;YAAC,WAAWlB;yBAC5B,oBAACmB,cAAYA;QAGrB,MAAMhB,SAASH,UAAU,OAAO,CAACI;QACjCX,GAAG,MAAM,CAACU,OAAO,OAAO,EAAE,iBAAiB,CAAC;YACxC,KAAK;gBACD,aAAa;oBACT,MAAM;wBAACsC,aAAa,YAAY,aAAa;qBAAQ;oBACrD,OAAO;gBACX;YACJ;QACJ;QAEA,MAAMN,UAAUnC,UAAU,OAAO,CAACoC;QAClC,MAAMM,UAAU,MAAMP,QAAQ,WAAW,CAAC;QAE1CV,OAAOU,QAAQ,aAAa,CAAC,YAAY,IAAI,CAAC;QAC9CV,OAAOiB,SAAS,OAAO,CAAC;YAAC;gBAAE,IAAI;gBAAY,MAAM;YAAa;SAAE;IACpE;IAEA5B,GAAG,iDAAiD;QAChD,MAAMd,YAAYJ,gBAAgB;QAElCqB,OAAO,WAADA,GACF,oBAACC,qBAAmBA;YAAC,WAAWlB;yBAC5B,oBAACmB,cAAYA;QAIrBM,OAAO,IAAMzB,UAAU,OAAO,CAAC2C,qBAAqB,OAAO,CAAC;IAChE;IAEA7B,GAAG,yFAAyF;QACxF,MAAMd,YAAYJ,gBAAgB;QAElCqB,OAAO,WAADA,GACF,oBAACC,qBAAmBA;YAAC,WAAWlB;yBAC5B,oBAACmB,cAAYA;QAIrBM,OAAO,IAAMzB,UAAU,OAAO,CAACoC,8BAA8B,OAAO,CAChE;QAEJX,OAAOzB,UAAU,UAAU,CAACwC,2BAA2B,OAAO,CAAC,EAAE;IACrE;IAEA1B,GAAG,4GAA4G;QAC3G,MAAMd,YAAYJ,gBAAgB;QAClCmB,gCAAgC,QAAQ,CAACf;QACzC,MAAM4C,YAAYC,2BAA2B;QAC7CD,UAAU,WAAW,CAAC,iBAAiB,CAAC;YACpC,MAAME,wBAAwB;gBAAE,IAAI;gBAAe,QAAQ;oBAAC;iBAAU;YAAC;YACvE,OAAO;QACX;QAEA,MAAMC,kBAAkBtD,GAAG,EAAE,CAAC,IAAMmD;QACpC5C,UAAU,eAAe,CAACwC,0BAA0BO;QAEpD9B,OAAO,WAADA,GACF,oBAACC,qBAAmBA;YAAC,WAAWlB;yBAC5B,oBAACmB,cAAYA;QAIrBM,OAAOsB,iBAAiB,GAAG,CAAC,gBAAgB;QAC5C,MAAM5C,SAASH,UAAU,OAAO,CAACI;QACjCX,GAAG,MAAM,CAACU,OAAO,OAAO,EAAE,SAAS;QACnCV,GAAG,MAAM,CAACU,OAAO,OAAO,EAAE,iBAAiB,CAAC;YACxC,KAAK;gBACD,qBAAqB;oBACjB,MAAM2C,wBAAwB;wBAAE,IAAI;oBAAe;oBACnD,OAAO;gBACX;YACJ;QACJ;QAEA,MAAME,UAAUhD,UAAU,OAAO,CAACiD;QAClC,MAAMC,MAAM,MAAMF,QAAQ,WAAW,CAAC;YAAE,KAAK;YAAO,IAAI;QAAe;QACvE,MAAMG,KAAK,MAAMH,QAAQ,WAAW,CAAC;YAAE,KAAK;YAAM,IAAI;QAAc;QAEpEvB,OAAOsB,iBAAiB,qBAAqB,CAAC;QAC9CtB,OAAOyB,IAAI,EAAE,EAAE,IAAI,CAAC;QACpBzB,OAAO0B,GAAG,EAAE,EAAE,IAAI,CAAC;QACnB1B,OAAOhC,GAAG,MAAM,CAACU,OAAO,OAAO,GAAG,qBAAqB,CAAC;QACxDsB,OAAOhC,GAAG,MAAM,CAACU,OAAO,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC;QACnEsB,OAAOmB,UAAU,WAAW,EAAE,oBAAoB,CAAC;IACvD;IAEA9B,GAAG,2DAA2D;QAC1D,MAAMd,YAAYJ,gBAAgB;QAClCmB,gCAAgC,QAAQ,CAACf;QACzC,MAAM4C,YAAYC,2BAA2B;QAC7C7C,UAAU,gBAAgB,CAACwC,0BAA0BI;QAErD3B,OAAO,WAADA,GACF,oBAACC,qBAAmBA;YAAC,WAAWlB;yBAC5B,oBAACmB,cAAYA;QAGrB,MAAM6B,UAAUhD,UAAU,OAAO,CAACiD;QAClC,MAAM9C,SAASH,UAAU,OAAO,CAACI;QAEjC,MAAMqB,OAAOuB,QAAQ,WAAW,CAAC;YAAE,KAAK;YAAO,IAAI;QAAe,IAAI,OAAO,CAAC,OAAO,CACjF;QAEJvB,OAAOhC,GAAG,MAAM,CAACU,OAAO,OAAO,GAAG,GAAG,CAAC,gBAAgB;IAC1D;IACAW,GAAG,yFAAyF;QACxF,MAAMsC,UAAUxD,gBAAgB;QAChC,MAAMyD,WAAWzD,gBAAgB;QAEjCqB,OAAO,WAADA,GACF,oBAACC,qBAAmBA;YAAC,WAAWkC;yBAC5B,oBAACjC,cAAYA;QAGrBF,OAAO,WAADA,GACF,oBAACC,qBAAmBA;YAAC,WAAWmC;yBAC5B,oBAAClC,cAAYA;QAIrB,MAAMmC,aAAaF,QAAQ,UAAU,CAACG;QACtC9B,OAAO6B,WAAW,GAAG,CAACE,CAAAA,aAAcA,WAAW,GAAG,GAAG,OAAO,CAAC;YAAC;SAAM;QACpE/B,OAAOgC,OAAO,cAAc,CAACH,UAAU,CAAC,EAAE,GAAG,IAAI,CAACI,iBAAiB,SAAS;QAC5EjC,OAAO4B,SAAS,UAAU,CAACE,mBAAmB,OAAO,CAAC,EAAE;IAC5D;IAEAzC,GAAG,oIAAoI;QACnI,MAAMd,YAAYJ,gBAAgB;QAElC+D,sBAAsB,QAAQ,CAAC3D;QAC/B,MAAM4D,SAASC,2BAA2B,MAAM;YAAC;SAAU;QAC3D,MAAMC,SAAmB,EAAE;QAC3B,IAAIC,QAAQ;QAEZ/D,UAAU,eAAe,CAACuD,kBAAkB;YACxCO,OAAO,IAAI,CAACC;YACZ,OAAOH;QACX;QAEA3C,OAAO,WAADA,GACF,oBAACC,qBAAmBA;YAAC,WAAWlB;yBAC5B,oBAACmB,cAAYA;QAGrB4C,QAAQ;QAER,MAAMf,UAAUhD,UAAU,OAAO,CAACgE;QAClC,MAAM7D,SAASH,UAAU,OAAO,CAACI;QACjCX,GAAG,MAAM,CAACU,OAAO,OAAO,EAAE,iBAAiB,CAAC;YACxC,KAAK;gBAAE,mBAAmB;oBAAE,MAAM8D;oBAA4B,OAAO;gBAAK;YAAE;QAChF;QACA,MAAMC,gBAAgBC,gBAAgB;YAAE,IAAI;QAAW;QACvD,MAAMC,aAAaH,yBAAyB;YAAE,QAAQC;QAAc;QACpEN,OAAO,SAAS,CAAC,iBAAiB,CAAC;YAAE,MAAMQ;YAAY,OAAO;QAAK;QAEnE,MAAMC,YAAY,MAAMrB,QAAQ,SAAS,CAAC;YACtC,WAAW;YACX,UAAU;QACd;QACA,MAAMsB,WAAW,MAAMtB,QAAQ,SAAS,CAAC;YAAE,WAAW;YAAW,UAAU;QAAW;QAEtFvB,OAAOqC,QAAQ,OAAO,CAAC;YAAC;SAAQ;QAChCrC,OAAOuB,QAAQ,MAAM,CAAC,gBAAgB,IAAI,CAAC;QAC3CvB,OAAOuB,QAAQ,MAAM,CAAC,YAAY,IAAI,CAAC;QACvCvB,OAAO4C,UAAU,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC;QACjC5C,OAAO6C,SAAS,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC;QAChC,MAAMC,UAAU9E,GAAG,MAAM,CAACU,OAAO,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAACqE,CAAAA,OAAQA,IAAI,CAAC,EAAE,CAAC,KAAK;QAC9E/C,OAAO8C,QAAQ,MAAM,CAACE,CAAAA,QAASA,MAAM,QAAQ,CAAC,wBAAwB,YAAY,CAAC;QACnFhD,OAAOmC,OAAO,SAAS,EAAE,oBAAoB,CAAC;IAClD;AACJ"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@webiny/app-headless-cms-workflows",
3
+ "version": "0.0.0-unstable.0156a4c312",
4
+ "type": "module",
5
+ "exports": {
6
+ ".": "./index.js",
7
+ "./*": "./*"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/webiny/webiny-js.git"
12
+ },
13
+ "author": "Webiny Ltd",
14
+ "license": "MIT",
15
+ "dependencies": {
16
+ "@fortawesome/react-fontawesome": "3.5.0",
17
+ "@webiny/admin-ui": "0.0.0-unstable.0156a4c312",
18
+ "@webiny/app": "0.0.0-unstable.0156a4c312",
19
+ "@webiny/app-aco": "0.0.0-unstable.0156a4c312",
20
+ "@webiny/app-admin": "0.0.0-unstable.0156a4c312",
21
+ "@webiny/app-headless-cms": "0.0.0-unstable.0156a4c312",
22
+ "@webiny/app-headless-cms-common": "0.0.0-unstable.0156a4c312",
23
+ "@webiny/app-websockets": "0.0.0-unstable.0156a4c312",
24
+ "@webiny/app-workflows": "0.0.0-unstable.0156a4c312",
25
+ "@webiny/feature": "0.0.0-unstable.0156a4c312",
26
+ "@webiny/icons": "0.0.0-unstable.0156a4c312",
27
+ "mobx": "7.1.4",
28
+ "react": "19.3.1",
29
+ "react-dom": "19.3.1"
30
+ },
31
+ "devDependencies": {
32
+ "@testing-library/react": "16.3.3",
33
+ "@types/react": "19.3.0",
34
+ "@webiny/build-tools": "0.0.0-unstable.0156a4c312",
35
+ "@webiny/di": "2.0.0",
36
+ "@webiny/feature-flags": "0.0.0-unstable.0156a4c312",
37
+ "@webiny/react-composition": "0.0.0-unstable.0156a4c312",
38
+ "rimraf": "6.1.3",
39
+ "typescript": "7.0.2",
40
+ "vitest": "5.0.5"
41
+ },
42
+ "publishConfig": {
43
+ "access": "public"
44
+ },
45
+ "svgo": {
46
+ "plugins": {
47
+ "removeViewBox": false
48
+ }
49
+ },
50
+ "gitHead": "b8aec8a1be3f25c3b428b357fe1e352c7cbff9ae",
51
+ "webiny": {
52
+ "publishFrom": "dist"
53
+ }
54
+ }
@@ -0,0 +1,8 @@
1
+ import type { ContentEntryFormPresenter } from "@webiny/app-headless-cms/presentation/contentEntries/form/abstractions.js";
2
+ import type { IReviewContentReloader } from "@webiny/app-workflows/review/content/IReviewContentReloader.js";
3
+ export declare class CmsEntryContentReloader implements IReviewContentReloader {
4
+ private readonly form;
5
+ private readonly revisionId;
6
+ constructor(form: ContentEntryFormPresenter.Interface, revisionId: string);
7
+ reload(): Promise<boolean>;
8
+ }
@@ -0,0 +1,20 @@
1
+ class CmsEntryContentReloader {
2
+ constructor(form, revisionId){
3
+ this.form = form;
4
+ this.revisionId = revisionId;
5
+ }
6
+ async reload() {
7
+ const before = this.form.vm.entry;
8
+ if (!before || before.id !== this.revisionId) return false;
9
+ if (this.form.vm.isDirty) return false;
10
+ await this.form.loadRevision(this.revisionId);
11
+ const after = this.form.vm.entry;
12
+ if (!after || after.id !== this.revisionId) return false;
13
+ const sameSavedOn = after.revisionSavedOn === before.revisionSavedOn;
14
+ const sameModifiedOn = after.revisionModifiedOn === before.revisionModifiedOn;
15
+ return !sameSavedOn || !sameModifiedOn;
16
+ }
17
+ }
18
+ export { CmsEntryContentReloader };
19
+
20
+ //# sourceMappingURL=CmsEntryContentReloader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/CmsEntryContentReloader.js","sources":["../../src/presentation/CmsEntryContentReloader.ts"],"sourcesContent":["import type { ContentEntryFormPresenter } from \"@webiny/app-headless-cms/presentation/contentEntries/form/abstractions.js\";\nimport type { IReviewContentReloader } from \"@webiny/app-workflows/review/content/IReviewContentReloader.js\";\n\n/*\n * Reloads the revision a review is tracking after an AI or automation step may have changed it\n * (R262). It works on the undecorated form presenter and never touches the review presenter, so\n * the review bar is not re-initialised. `true` means the reloaded revision differs from the loaded\n * one.\n */\nexport class CmsEntryContentReloader implements IReviewContentReloader {\n constructor(\n private readonly form: ContentEntryFormPresenter.Interface,\n private readonly revisionId: string\n ) {}\n\n async reload(): Promise<boolean> {\n const before = this.form.vm.entry;\n\n // The editor moved to another revision, or has none loaded: there is nothing to reload.\n if (!before || before.id !== this.revisionId) {\n return false;\n }\n\n // An unsaved edit is never overwritten. While a review locks the form it cannot be dirty.\n if (this.form.vm.isDirty) {\n return false;\n }\n\n await this.form.loadRevision(this.revisionId);\n\n const after = this.form.vm.entry;\n\n if (!after || after.id !== this.revisionId) {\n return false;\n }\n\n const sameSavedOn = after.revisionSavedOn === before.revisionSavedOn;\n const sameModifiedOn = after.revisionModifiedOn === before.revisionModifiedOn;\n\n return !sameSavedOn || !sameModifiedOn;\n }\n}\n"],"names":["CmsEntryContentReloader","form","revisionId","before","after","sameSavedOn","sameModifiedOn"],"mappings":"AASO,MAAMA;IACT,YACqBC,IAAyC,EACzCC,UAAkB,CACrC;aAFmBD,IAAI,GAAJA;aACAC,UAAU,GAAVA;IAClB;IAEH,MAAM,SAA2B;QAC7B,MAAMC,SAAS,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK;QAGjC,IAAI,CAACA,UAAUA,OAAO,EAAE,KAAK,IAAI,CAAC,UAAU,EACxC,OAAO;QAIX,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EACpB,OAAO;QAGX,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU;QAE5C,MAAMC,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK;QAEhC,IAAI,CAACA,SAASA,MAAM,EAAE,KAAK,IAAI,CAAC,UAAU,EACtC,OAAO;QAGX,MAAMC,cAAcD,MAAM,eAAe,KAAKD,OAAO,eAAe;QACpE,MAAMG,iBAAiBF,MAAM,kBAAkB,KAAKD,OAAO,kBAAkB;QAE7E,OAAO,CAACE,eAAe,CAACC;IAC5B;AACJ"}
@@ -0,0 +1 @@
1
+ export {};