@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/CmsReviewGateway/CmsReviewGateway.test.js","sources":["../../../../src/features/gateway/CmsReviewGateway/CmsReviewGateway.test.ts"],"sourcesContent":["import { beforeEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/abstractions.js\";\nimport { REVIEW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { BLOCKING_REVIEW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { STEP_RUN_INFO_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_WITH_FLAGS_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { STEP_CANDIDATE_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { WORKFLOW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { ReviewState } from \"@webiny/app-workflows/review/domain/ReviewState.js\";\nimport { StepState } from \"@webiny/app-workflows/review/domain/StepState.js\";\nimport { ReviewAppGateway as GatewayAbstraction } from \"@webiny/app-workflows/review/appGateway/abstractions.js\";\nimport { CmsReviewGateway } from \"./CmsReviewGateway.js\";\n\ndescribe(\"CmsReviewGateway\", () => {\n const client = { execute: vi.fn() };\n let gateway: GatewayAbstraction.Interface;\n\n beforeEach(() => {\n client.execute.mockReset();\n\n const container = new Container();\n container.registerInstance(MainGraphQLClient, client);\n container.register(CmsReviewGateway);\n gateway = container.resolve(GatewayAbstraction);\n });\n\n it(\"serves the cms app (R347)\", () => {\n expect(gateway.app).toBe(\"cms\");\n });\n\n it(\"claims every CMS model namespace and nothing else (R347)\", () => {\n expect(gateway.canHandle(\"cms.article\")).toBe(true);\n expect(gateway.canHandle(\"cms.author\")).toBe(true);\n expect(gateway.canHandle(\"wb.page\")).toBe(false);\n expect(gateway.canHandle(\"cms\")).toBe(false);\n expect(gateway.canHandle(\"cms.article.extra\")).toBe(false);\n expect(gateway.canHandle(\"article\")).toBe(false);\n expect(client.execute).not.toHaveBeenCalled();\n });\n\n it(\"lists the CMS workflows without variables\", async () => {\n const envelope = { data: [{ id: \"workflow-1\" }], error: null };\n client.execute.mockResolvedValue({ cms: { listCmsEntryWorkflows: envelope } });\n\n const result = await gateway.listWorkflows();\n\n expect(result).toEqual(envelope);\n expect(client.execute).toHaveBeenCalledTimes(1);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toBeUndefined();\n expect(request.query).toContain(\"listCmsEntryWorkflows\");\n expect(request.query).toContain(WORKFLOW_FIELDS);\n });\n\n it(\"reads the target review by model id and revision id\", async () => {\n const envelope = { data: { review: { id: \"review-1\" }, flags: {} }, error: null };\n client.execute.mockResolvedValue({ cms: { getCmsEntryTargetReview: envelope } });\n\n const result = await gateway.getTargetReview({\n namespace: \"cms.article\",\n targetRevisionId: \"entry-1#0001\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ modelId: \"article\", revisionId: \"entry-1#0001\" });\n expect(request.query).toContain(\n \"getCmsEntryTargetReview(modelId: $modelId, revisionId: $revisionId)\"\n );\n expect(request.query).toContain(REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS);\n });\n\n it(\"returns an empty target review as is\", async () => {\n const envelope = { data: null, error: null };\n client.execute.mockResolvedValue({ cms: { getCmsEntryTargetReview: envelope } });\n\n const result = await gateway.getTargetReview({\n namespace: \"cms.article\",\n targetRevisionId: \"entry-1#0001\"\n });\n\n expect(result).toEqual({ data: null, error: null });\n });\n\n it(\"rejects a non-CMS namespace before sending a request\", async () => {\n const targetReview = gateway.getTargetReview({\n namespace: \"wb.page\",\n targetRevisionId: \"page-1#0001\"\n });\n const requestReview = gateway.requestReview({\n target: { namespace: \"wb.page\", targetRevisionId: \"page-1#0001\" },\n title: \"Review\",\n picks: []\n });\n const stepCandidates = gateway.listStepCandidates({\n workflowId: \"workflow-1\",\n stepId: \"step-1\",\n target: { namespace: \"wb.page\", targetRevisionId: \"page-1#0001\" }\n });\n const cancelForDelete = gateway.cancelForDelete({\n namespace: \"wb.page\",\n targetId: \"page-1\",\n targetRevisionId: null,\n action: \"trash\"\n });\n const blockingReviews = gateway.listBlockingReviews({\n namespace: \"wb.page\",\n targetIds: [\"page-1\"]\n });\n\n await expect(targetReview).rejects.toThrow('Invalid app name: \"wb.page\".');\n await expect(requestReview).rejects.toThrow('Invalid app name: \"wb.page\".');\n await expect(stepCandidates).rejects.toThrow('Invalid app name: \"wb.page\".');\n await expect(cancelForDelete).rejects.toThrow('Invalid app name: \"wb.page\".');\n await expect(blockingReviews).rejects.toThrow('Invalid app name: \"wb.page\".');\n\n expect(client.execute).not.toHaveBeenCalled();\n });\n\n it(\"reads one review by id\", async () => {\n const envelope = { data: { review: { id: \"review-1\" }, flags: {} }, error: null };\n client.execute.mockResolvedValue({ cms: { getCmsEntryReview: envelope } });\n\n const result = await gateway.getReview(\"review-1\");\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ id: \"review-1\" });\n expect(request.query).toContain(\"getCmsEntryReview(id: $id)\");\n expect(request.query).toContain(REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS);\n });\n\n it(\"lists reviews with the content type and the My requests filters passed through\", async () => {\n const envelope = {\n data: [{ review: { id: \"review-1\" }, flags: {} }],\n meta: { cursor: \"cursor-2\", hasMoreItems: true },\n error: null\n };\n client.execute.mockResolvedValue({ cms: { listCmsEntryReviews: envelope } });\n\n const result = await gateway.listReviews({\n list: \"myRequests\",\n where: {\n modelId: \"article\",\n titleContains: \"launch\",\n reviewState: ReviewState.Approved,\n stepState: StepState.Approved\n },\n sort: \"lastChangedOn_DESC\",\n limit: 20,\n after: \"cursor-1\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n list: \"myRequests\",\n where: {\n modelId: \"article\",\n titleContains: \"launch\",\n reviewState: ReviewState.Approved,\n stepState: StepState.Approved\n },\n sort: \"lastChangedOn_DESC\",\n limit: 20,\n after: \"cursor-1\"\n });\n expect(request.query).toContain(\"listCmsEntryReviews(\");\n expect(request.query).toContain(\"meta\");\n expect(request.query).toContain(\"hasMoreItems\");\n expect(request.query).toContain(REVIEW_WITH_FLAGS_FIELDS);\n });\n\n it(\"lists the candidates of a step before a review exists\", async () => {\n const envelope = { data: [{ id: \"user-1\" }], error: null };\n client.execute.mockResolvedValue({ cms: { listCmsEntryStepCandidates: envelope } });\n\n const result = await gateway.listStepCandidates({\n workflowId: \"workflow-1\",\n stepId: \"step-1\",\n target: { namespace: \"cms.article\", targetRevisionId: \"entry-1#0001\" }\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n workflowId: \"workflow-1\",\n stepId: \"step-1\",\n modelId: \"article\",\n revisionId: \"entry-1#0001\"\n });\n expect(request.query).toContain(\"listCmsEntryStepCandidates(\");\n expect(request.query).toContain(STEP_CANDIDATE_FIELDS);\n });\n\n it(\"lists who a step of a review can be reassigned to\", async () => {\n const envelope = { data: [{ id: \"user-2\" }], error: null };\n client.execute.mockResolvedValue({ cms: { listCmsEntryReviewStepCandidates: envelope } });\n\n const result = await gateway.listReviewStepCandidates({\n reviewId: \"review-1\",\n stepId: \"step-1\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ reviewId: \"review-1\", stepId: \"step-1\" });\n expect(request.query).toContain(\"listCmsEntryReviewStepCandidates(\");\n expect(request.query).toContain(STEP_CANDIDATE_FIELDS);\n });\n\n it(\"requests a review with the title and the picks\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({ cms: { requestCmsEntryReview: envelope } });\n\n const result = await gateway.requestReview({\n target: { namespace: \"cms.article\", targetRevisionId: \"entry-1#0001\" },\n title: \"Launch article\",\n picks: [{ stepId: \"step-1\", userId: \"user-2\" }]\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n modelId: \"article\",\n revisionId: \"entry-1#0001\",\n title: \"Launch article\",\n picks: [{ stepId: \"step-1\", userId: \"user-2\" }]\n });\n expect(request.query).toContain(\"requestCmsEntryReview(\");\n expect(request.query).toContain(REVIEW_FIELDS);\n });\n\n it(\"starts a step\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({ cms: { startCmsEntryReviewStep: envelope } });\n\n const result = await gateway.startStep({ reviewId: \"review-1\", stepId: \"step-1\" });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ reviewId: \"review-1\", stepId: \"step-1\" });\n expect(request.query).toContain(\"startCmsEntryReviewStep(\");\n expect(request.query).toContain(REVIEW_FIELDS);\n });\n\n it(\"takes a step over and passes the notify choice\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({ cms: { takeOverCmsEntryReviewStep: envelope } });\n\n const result = await gateway.takeOverStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n notifyPreviousOwner: false\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n notifyPreviousOwner: false\n });\n expect(request.query).toContain(\"takeOverCmsEntryReviewStep(\");\n });\n\n it(\"reassigns a step\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({ cms: { reassignCmsEntryReviewStep: envelope } });\n\n const result = await gateway.reassignStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n userId: \"user-2\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n userId: \"user-2\"\n });\n expect(request.query).toContain(\"reassignCmsEntryReviewStep(\");\n });\n\n it(\"approves a step with and without a comment\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({ cms: { approveCmsEntryReviewStep: envelope } });\n\n await gateway.approveStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: \"Looks good\"\n });\n const result = await gateway.approveStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: null\n });\n\n expect(result).toEqual(envelope);\n expect(client.execute.mock.calls[0][0].variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: \"Looks good\"\n });\n expect(client.execute.mock.calls[1][0].variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: null\n });\n expect(client.execute.mock.calls[0][0].query).toContain(\"approveCmsEntryReviewStep(\");\n });\n\n it(\"rejects a step with the comment\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({ cms: { rejectCmsEntryReviewStep: envelope } });\n\n const result = await gateway.rejectStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: \"The headline needs work.\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: \"The headline needs work.\"\n });\n expect(request.query).toContain(\"rejectCmsEntryReviewStep(\");\n });\n\n it(\"cancels a review\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({ cms: { cancelCmsEntryReview: envelope } });\n\n const result = await gateway.cancelReview({ reviewId: \"review-1\" });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ reviewId: \"review-1\" });\n expect(request.query).toContain(\"cancelCmsEntryReview(reviewId: $reviewId)\");\n });\n\n it(\"cancels the reviews of a revision before a delete\", async () => {\n const envelope = { data: [{ id: \"review-1\" }], error: null };\n client.execute.mockResolvedValue({ cms: { cancelCmsEntryReviewsForDelete: envelope } });\n\n const result = await gateway.cancelForDelete({\n namespace: \"cms.article\",\n targetId: \"entry-1\",\n targetRevisionId: \"entry-1#0002\",\n action: \"delete\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n modelId: \"article\",\n entryId: \"entry-1\",\n revisionId: \"entry-1#0002\",\n action: \"delete\"\n });\n expect(request.query).toContain(\"cancelCmsEntryReviewsForDelete(\");\n });\n\n it(\"cancels every review of an entry when no revision is given\", async () => {\n const envelope = { data: [], error: null };\n client.execute.mockResolvedValue({ cms: { cancelCmsEntryReviewsForDelete: envelope } });\n\n await gateway.cancelForDelete({\n namespace: \"cms.article\",\n targetId: \"entry-1\",\n targetRevisionId: null,\n action: \"trash\"\n });\n\n expect(client.execute.mock.calls[0][0].variables).toEqual({\n modelId: \"article\",\n entryId: \"entry-1\",\n revisionId: null,\n action: \"trash\"\n });\n });\n\n it(\"restarts a step\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({ cms: { restartCmsEntryReviewStep: envelope } });\n\n const result = await gateway.restartStep({ reviewId: \"review-1\", stepId: \"step-1\" });\n\n expect(result).toEqual(envelope);\n expect(client.execute).toHaveBeenCalledTimes(1);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ reviewId: \"review-1\", stepId: \"step-1\" });\n expect(request.query).toContain(\"mutation RestartCmsEntryReviewStep\");\n expect(request.query).toContain(\n \"restartCmsEntryReviewStep(reviewId: $reviewId, stepId: $stepId)\"\n );\n expect(request.query).toContain(REVIEW_FIELDS);\n });\n\n it(\"returns a restart conflict as an envelope error and never throws for it\", async () => {\n const envelope = {\n data: null,\n error: { code: \"Workflows/Review/InvalidState\", message: \"Not failed.\", data: null }\n };\n client.execute.mockResolvedValue({ cms: { restartCmsEntryReviewStep: envelope } });\n\n const result = await gateway.restartStep({ reviewId: \"review-1\", stepId: \"step-1\" });\n\n expect(result).toEqual(envelope);\n });\n\n it(\"reads the run of a step by review, step and task id\", async () => {\n const envelope = { data: { taskId: \"task-1\", status: \"done\" }, error: null };\n client.execute.mockResolvedValue({ cms: { getCmsEntryReviewStepRun: envelope } });\n\n const result = await gateway.getStepRun({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n taskId: \"task-1\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n taskId: \"task-1\"\n });\n expect(request.query).toContain(\"query GetCmsEntryReviewStepRun\");\n expect(request.query).toContain(\n \"getCmsEntryReviewStepRun(reviewId: $reviewId, stepId: $stepId, taskId: $taskId)\"\n );\n expect(request.query).toContain(STEP_RUN_INFO_FIELDS);\n });\n\n it(\"returns a gone task (null data) as is\", async () => {\n const envelope = { data: null, error: null };\n client.execute.mockResolvedValue({ cms: { getCmsEntryReviewStepRun: envelope } });\n\n const result = await gateway.getStepRun({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n taskId: \"task-1\"\n });\n\n expect(result).toEqual({ data: null, error: null });\n });\n\n it(\"lists the blocking reviews of entries by the model id of the namespace (R265)\", async () => {\n const envelope = { data: [{ reviewId: \"review-1\" }], error: null };\n client.execute.mockResolvedValue({ cms: { listCmsEntryBlockingReviews: envelope } });\n\n const result = await gateway.listBlockingReviews({\n namespace: \"cms.article\",\n targetIds: [\"entry-1\", \"entry-2\"]\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n modelId: \"article\",\n entryIds: [\"entry-1\", \"entry-2\"]\n });\n expect(request.query).toContain(\"query ListCmsEntryBlockingReviews\");\n expect(request.query).toContain(\n \"listCmsEntryBlockingReviews(modelId: $modelId, entryIds: $entryIds)\"\n );\n expect(request.query).toContain(BLOCKING_REVIEW_FIELDS);\n });\n\n it(\"returns an envelope error as is and never throws for it\", async () => {\n const envelope = {\n data: null,\n error: { code: \"Workflows/Review/StepNotCurrent\", message: \"Not current.\", data: null }\n };\n client.execute.mockResolvedValue({ cms: { startCmsEntryReviewStep: envelope } });\n\n const result = await gateway.startStep({ reviewId: \"review-1\", stepId: \"step-1\" });\n\n expect(result).toEqual(envelope);\n });\n\n it(\"lets a transport error pass through\", async () => {\n client.execute.mockRejectedValue(new Error(\"Network down.\"));\n\n const promise = gateway.getReview(\"review-1\");\n\n await expect(promise).rejects.toThrow(\"Network down.\");\n });\n});\n"],"names":["describe","client","vi","gateway","beforeEach","container","Container","MainGraphQLClient","CmsReviewGateway","GatewayAbstraction","it","expect","envelope","result","request","WORKFLOW_FIELDS","REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS","targetReview","requestReview","stepCandidates","cancelForDelete","blockingReviews","ReviewState","StepState","REVIEW_WITH_FLAGS_FIELDS","STEP_CANDIDATE_FIELDS","REVIEW_FIELDS","STEP_RUN_INFO_FIELDS","BLOCKING_REVIEW_FIELDS","Error","promise"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { WebsocketEventHandler } from "@webiny/app-websockets/events/abstractions.js";
2
+ import { ReviewNotificationHandler } from "@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js";
3
+ declare class CmsReviewNotificationHandlerImpl extends ReviewNotificationHandler implements WebsocketEventHandler.Interface {
4
+ }
5
+ export declare const CmsReviewNotificationHandler: typeof CmsReviewNotificationHandlerImpl & {
6
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/app/features/eventPublisher/abstractions.js").IEventHandler<import("@webiny/app-websockets/events/WebsocketEvent.js").WebsocketEvent>>;
7
+ };
8
+ export {};
@@ -0,0 +1,16 @@
1
+ import { WebsocketEventHandler } from "@webiny/app-websockets/events/abstractions.js";
2
+ import { ReviewNotificationHandler } from "@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js";
3
+ import { ReviewNotificationService } from "@webiny/app-workflows/review/notifications/abstractions.js";
4
+ import { CmsReviewContentAdapter } from "./CmsReviewContentAdapter/abstractions.js";
5
+ class CmsReviewNotificationHandlerImpl extends ReviewNotificationHandler {
6
+ }
7
+ const CmsReviewNotificationHandler = WebsocketEventHandler.createImplementation({
8
+ implementation: CmsReviewNotificationHandlerImpl,
9
+ dependencies: [
10
+ ReviewNotificationService,
11
+ CmsReviewContentAdapter
12
+ ]
13
+ });
14
+ export { CmsReviewNotificationHandler };
15
+
16
+ //# sourceMappingURL=CmsReviewNotificationHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/CmsReviewNotificationHandler.js","sources":["../../../src/features/gateway/CmsReviewNotificationHandler.ts"],"sourcesContent":["import { WebsocketEventHandler } from \"@webiny/app-websockets/events/abstractions.js\";\nimport { ReviewNotificationHandler } from \"@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js\";\nimport { ReviewNotificationService } from \"@webiny/app-workflows/review/notifications/abstractions.js\";\nimport { CmsReviewContentAdapter } from \"./CmsReviewContentAdapter/abstractions.js\";\n\n// A subclass of its own (see CmsReviewRowProviderImpl): the Website Builder binds its own.\nclass CmsReviewNotificationHandlerImpl\n extends ReviewNotificationHandler\n implements WebsocketEventHandler.Interface {}\n\nexport const CmsReviewNotificationHandler = WebsocketEventHandler.createImplementation({\n implementation: CmsReviewNotificationHandlerImpl,\n dependencies: [ReviewNotificationService, CmsReviewContentAdapter]\n});\n"],"names":["CmsReviewNotificationHandlerImpl","ReviewNotificationHandler","CmsReviewNotificationHandler","WebsocketEventHandler","ReviewNotificationService","CmsReviewContentAdapter"],"mappings":";;;;AAMA,MAAMA,yCACMC;AACoC;AAEzC,MAAMC,+BAA+BC,sBAAsB,oBAAoB,CAAC;IACnF,gBAAgBH;IAChB,cAAc;QAACI;QAA2BC;KAAwB;AACtE"}
@@ -0,0 +1,8 @@
1
+ import { AppReviewRowProvider } from "@webiny/app-workflows/review/mounting/AppReviewRowProvider.js";
2
+ import { CmsReviewRowProvider as Abstraction } from "./abstractions.js";
3
+ declare class CmsReviewRowProviderImpl extends AppReviewRowProvider implements Abstraction.Interface {
4
+ }
5
+ export declare const CmsReviewRowProvider: typeof CmsReviewRowProviderImpl & {
6
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/app-workflows/review/presentation/reviewList/abstractions.js").IReviewRowProvider>;
7
+ };
8
+ export {};
@@ -0,0 +1,14 @@
1
+ import { AppReviewRowProvider } from "@webiny/app-workflows/review/mounting/AppReviewRowProvider.js";
2
+ import { CmsReviewContentAdapter } from "../CmsReviewContentAdapter/abstractions.js";
3
+ import { CmsReviewRowProvider } from "./abstractions.js";
4
+ class CmsReviewRowProviderImpl extends AppReviewRowProvider {
5
+ }
6
+ const CmsReviewRowProvider_CmsReviewRowProvider = CmsReviewRowProvider.createImplementation({
7
+ implementation: CmsReviewRowProviderImpl,
8
+ dependencies: [
9
+ CmsReviewContentAdapter
10
+ ]
11
+ });
12
+ export { CmsReviewRowProvider_CmsReviewRowProvider as CmsReviewRowProvider };
13
+
14
+ //# sourceMappingURL=CmsReviewRowProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.js","sources":["../../../../src/features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.ts"],"sourcesContent":["import { AppReviewRowProvider } from \"@webiny/app-workflows/review/mounting/AppReviewRowProvider.js\";\nimport { CmsReviewContentAdapter } from \"../CmsReviewContentAdapter/abstractions.js\";\nimport { CmsReviewRowProvider as Abstraction } from \"./abstractions.js\";\n\n// A subclass of its own: `createImplementation` stores the abstraction on the class, so the shared\n// class must never be bound directly (it would collide with the Website Builder binding).\nclass CmsReviewRowProviderImpl extends AppReviewRowProvider implements Abstraction.Interface {}\n\nexport const CmsReviewRowProvider = Abstraction.createImplementation({\n implementation: CmsReviewRowProviderImpl,\n dependencies: [CmsReviewContentAdapter]\n});\n"],"names":["CmsReviewRowProviderImpl","AppReviewRowProvider","CmsReviewRowProvider","Abstraction","CmsReviewContentAdapter"],"mappings":";;;AAMA,MAAMA,iCAAiCC;AAAuD;AAEvF,MAAMC,4CAAuBC,qBAAAA,oBAAgC,CAAC;IACjE,gBAAgBH;IAChB,cAAc;QAACI;KAAwB;AAC3C"}
@@ -0,0 +1,5 @@
1
+ import type { IReviewRowProvider } from "@webiny/app-workflows/review/presentation/reviewList/abstractions.js";
2
+ export declare const CmsReviewRowProvider: import("@webiny/di").Abstraction<IReviewRowProvider>;
3
+ export declare namespace CmsReviewRowProvider {
4
+ type Interface = IReviewRowProvider;
5
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/admin";
2
+ const CmsReviewRowProvider = createAbstraction("Cms/Workflows/ReviewRowProvider");
3
+ export { CmsReviewRowProvider };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/CmsReviewRowProvider/abstractions.js","sources":["../../../../src/features/gateway/CmsReviewRowProvider/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { IReviewRowProvider } from \"@webiny/app-workflows/review/presentation/reviewList/abstractions.js\";\n\nexport const CmsReviewRowProvider = createAbstraction<IReviewRowProvider>(\n \"Cms/Workflows/ReviewRowProvider\"\n);\n\nexport namespace CmsReviewRowProvider {\n export type Interface = IReviewRowProvider;\n}\n"],"names":["CmsReviewRowProvider","createAbstraction"],"mappings":";AAGO,MAAMA,uBAAuBC,kBAChC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,125 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { Container } from "@webiny/di";
3
+ import { WebsocketEvent } from "@webiny/app-websockets/events/WebsocketEvent.js";
4
+ import { WebsocketEventHandler } from "@webiny/app-websockets/events/abstractions.js";
5
+ import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/abstractions.js";
6
+ import { ModelsCache } from "@webiny/app-headless-cms/features/model/abstractions.js";
7
+ import { AppReviewRowProvider } from "@webiny/app-workflows/review/mounting/AppReviewRowProvider.js";
8
+ import { ReviewNotificationHandler } from "@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js";
9
+ import { ReviewNotificationService } from "@webiny/app-workflows/review/notifications/abstractions.js";
10
+ import { ReviewActivity } from "@webiny/app-workflows/review/activity/abstractions.js";
11
+ import { ReviewChangeMessageHandler } from "@webiny/app-workflows/review/mounting/ReviewChangeMessageHandler.js";
12
+ import { WORKFLOWS_NOTIFICATION_ACTION, WORKFLOWS_REVIEW_CHANGED_ACTION } from "@webiny/app-workflows/review/domain/constants.js";
13
+ import { CmsReviewFeature } from "./feature.js";
14
+ import { CmsReviewRowProvider } from "./CmsReviewRowProvider/abstractions.js";
15
+ const handle = vi.fn();
16
+ const notify = vi.fn();
17
+ const createContainer = ()=>{
18
+ const container = new Container();
19
+ container.registerInstance(MainGraphQLClient, {
20
+ execute: vi.fn()
21
+ });
22
+ container.registerInstance(ModelsCache, {
23
+ getItem: ()=>void 0,
24
+ getItems: ()=>[],
25
+ hasItems: ()=>true
26
+ });
27
+ container.registerInstance(ReviewNotificationService, {
28
+ handle: handle
29
+ });
30
+ container.registerInstance(ReviewActivity, {
31
+ subscribe: vi.fn(),
32
+ notify: notify
33
+ });
34
+ return container;
35
+ };
36
+ const message = (namespace)=>new WebsocketEvent({
37
+ action: WORKFLOWS_NOTIFICATION_ACTION,
38
+ data: {
39
+ event: "assigned",
40
+ reviewId: "review-1",
41
+ stepId: "step-1",
42
+ namespace,
43
+ targetId: "entry-1",
44
+ targetRevisionId: "entry-1#0001",
45
+ title: "Review assigned",
46
+ body: "Maja Kos asked you to review Spring launch"
47
+ }
48
+ });
49
+ const changeMessage = (namespace)=>new WebsocketEvent({
50
+ action: WORKFLOWS_REVIEW_CHANGED_ACTION,
51
+ data: {
52
+ kind: "stepStarted",
53
+ reviewId: "review-1",
54
+ stepId: "step-1",
55
+ namespace,
56
+ targetId: "entry-1",
57
+ targetRevisionId: "entry-1#0001"
58
+ }
59
+ });
60
+ describe("CmsReviewFeature Content Reviews registrations", ()=>{
61
+ beforeEach(()=>{
62
+ handle.mockReset();
63
+ notify.mockReset();
64
+ });
65
+ it("registers a row provider that binds only cms namespaces", ()=>{
66
+ const container = createContainer();
67
+ CmsReviewFeature.register(container);
68
+ const provider = container.resolve(CmsReviewRowProvider);
69
+ expect(provider).toBeInstanceOf(AppReviewRowProvider);
70
+ expect(provider.getBinding("cms.article")).not.toBeNull();
71
+ expect(provider.getBinding("wb.page")).toBeNull();
72
+ });
73
+ it("hands out the same provider as the feature export", ()=>{
74
+ const container = createContainer();
75
+ CmsReviewFeature.register(container);
76
+ const { rowProvider } = CmsReviewFeature.resolve(container);
77
+ expect(rowProvider).toBe(container.resolve(CmsReviewRowProvider));
78
+ });
79
+ it("registers a notification handler that handles cms messages and ignores wb messages (R223)", async ()=>{
80
+ const container = createContainer();
81
+ CmsReviewFeature.register(container);
82
+ const handlers = container.resolveAll(WebsocketEventHandler);
83
+ const own = handlers.filter((handler)=>handler instanceof ReviewNotificationHandler);
84
+ expect(own).toHaveLength(1);
85
+ await own[0].handle(message("cms.article"));
86
+ expect(handle).toHaveBeenCalledTimes(1);
87
+ expect(handle.mock.calls[0][0].data.namespace).toBe("cms.article");
88
+ expect(handle.mock.calls[0][0].url).toContain("/cms/content-entries/article");
89
+ await own[0].handle(message("wb.page"));
90
+ expect(handle).toHaveBeenCalledTimes(1);
91
+ });
92
+ it("registers a change message handler that signals cms frames and ignores wb frames (R260)", async ()=>{
93
+ const container = createContainer();
94
+ CmsReviewFeature.register(container);
95
+ const handlers = container.resolveAll(WebsocketEventHandler);
96
+ const own = handlers.filter((handler)=>handler instanceof ReviewChangeMessageHandler);
97
+ expect(own).toHaveLength(1);
98
+ await own[0].handle(changeMessage("cms.article"));
99
+ expect(notify).toHaveBeenCalledTimes(1);
100
+ expect(notify).toHaveBeenCalledWith({
101
+ namespace: "cms.article",
102
+ source: "remote",
103
+ reviewId: "review-1",
104
+ targetRevisionId: "entry-1#0001"
105
+ });
106
+ await own[0].handle(changeMessage("wb.page"));
107
+ expect(notify).toHaveBeenCalledTimes(1);
108
+ });
109
+ it("shows no toast for a change message and signals nothing for a notification (R253)", async ()=>{
110
+ const container = createContainer();
111
+ CmsReviewFeature.register(container);
112
+ const handlers = container.resolveAll(WebsocketEventHandler);
113
+ const changeHandler = handlers.find((handler)=>handler instanceof ReviewChangeMessageHandler);
114
+ const notificationHandler = handlers.find((handler)=>handler instanceof ReviewNotificationHandler);
115
+ if (!changeHandler || !notificationHandler) throw new Error("Both handlers must be registered.");
116
+ await changeHandler.handle(changeMessage("cms.article"));
117
+ expect(handle).not.toHaveBeenCalled();
118
+ await notificationHandler.handle(changeMessage("cms.article"));
119
+ await changeHandler.handle(message("cms.article"));
120
+ expect(handle).not.toHaveBeenCalled();
121
+ expect(notify).toHaveBeenCalledTimes(1);
122
+ });
123
+ });
124
+
125
+ //# sourceMappingURL=contentReviewsBindings.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/contentReviewsBindings.test.js","sources":["../../../src/features/gateway/contentReviewsBindings.test.ts"],"sourcesContent":["import { beforeEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { WebsocketEvent } from \"@webiny/app-websockets/events/WebsocketEvent.js\";\nimport { WebsocketEventHandler } from \"@webiny/app-websockets/events/abstractions.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/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 { WORKFLOWS_REVIEW_CHANGED_ACTION } from \"@webiny/app-workflows/review/domain/constants.js\";\nimport { WORKFLOWS_NOTIFICATION_ACTION } from \"@webiny/app-workflows/review/domain/constants.js\";\nimport { CmsReviewFeature } from \"./feature.js\";\nimport { CmsReviewRowProvider } from \"./CmsReviewRowProvider/abstractions.js\";\n\nconst handle = vi.fn();\nconst notify = vi.fn();\n\n// The leaf dependencies of Task 11's gateway and adapter (the `MainGraphQLClient` and `ModelsCache`\n// registrations its feature test also makes; here `ModelsCache` is a stub because only the handler\n// is under test) and the shared service the handler reports to.\nconst createContainer = (): Container => {\n const container = new Container();\n container.registerInstance(MainGraphQLClient, {\n execute: vi.fn()\n } as unknown as MainGraphQLClient.Interface);\n container.registerInstance(ModelsCache, {\n getItem: () => undefined,\n getItems: () => [],\n hasItems: () => true\n } as unknown as ModelsCache.Interface);\n container.registerInstance(ReviewNotificationService, { handle });\n container.registerInstance(ReviewActivity, { subscribe: vi.fn(), notify });\n return container;\n};\n\nconst message = (namespace: string) => {\n return new WebsocketEvent({\n action: WORKFLOWS_NOTIFICATION_ACTION,\n data: {\n event: \"assigned\",\n reviewId: \"review-1\",\n stepId: \"step-1\",\n namespace,\n targetId: \"entry-1\",\n targetRevisionId: \"entry-1#0001\",\n title: \"Review assigned\",\n body: \"Maja Kos asked you to review Spring launch\"\n }\n });\n};\n\nconst changeMessage = (namespace: string) => {\n return new WebsocketEvent({\n action: WORKFLOWS_REVIEW_CHANGED_ACTION,\n data: {\n kind: \"stepStarted\",\n reviewId: \"review-1\",\n stepId: \"step-1\",\n namespace,\n targetId: \"entry-1\",\n targetRevisionId: \"entry-1#0001\"\n }\n });\n};\n\ndescribe(\"CmsReviewFeature Content Reviews registrations\", () => {\n beforeEach(() => {\n handle.mockReset();\n notify.mockReset();\n });\n\n it(\"registers a row provider that binds only cms namespaces\", () => {\n const container = createContainer();\n CmsReviewFeature.register(container);\n\n const provider = container.resolve(CmsReviewRowProvider);\n\n expect(provider).toBeInstanceOf(AppReviewRowProvider);\n expect(provider.getBinding(\"cms.article\")).not.toBeNull();\n expect(provider.getBinding(\"wb.page\")).toBeNull();\n });\n\n it(\"hands out the same provider as the feature export\", () => {\n const container = createContainer();\n CmsReviewFeature.register(container);\n\n const { rowProvider } = CmsReviewFeature.resolve(container);\n\n expect(rowProvider).toBe(container.resolve(CmsReviewRowProvider));\n });\n\n it(\"registers a notification handler that handles cms messages and ignores wb messages (R223)\", async () => {\n const container = createContainer();\n CmsReviewFeature.register(container);\n\n const handlers = container.resolveAll(WebsocketEventHandler);\n const own = handlers.filter(handler => handler instanceof ReviewNotificationHandler);\n expect(own).toHaveLength(1);\n\n await own[0].handle(message(\"cms.article\"));\n expect(handle).toHaveBeenCalledTimes(1);\n expect(handle.mock.calls[0][0].data.namespace).toBe(\"cms.article\");\n expect(handle.mock.calls[0][0].url).toContain(\"/cms/content-entries/article\");\n\n await own[0].handle(message(\"wb.page\"));\n expect(handle).toHaveBeenCalledTimes(1);\n });\n\n it(\"registers a change message handler that signals cms frames and ignores wb frames (R260)\", async () => {\n const container = createContainer();\n CmsReviewFeature.register(container);\n\n const handlers = container.resolveAll(WebsocketEventHandler);\n const own = handlers.filter(handler => handler instanceof ReviewChangeMessageHandler);\n expect(own).toHaveLength(1);\n\n await own[0].handle(changeMessage(\"cms.article\"));\n expect(notify).toHaveBeenCalledTimes(1);\n expect(notify).toHaveBeenCalledWith({\n namespace: \"cms.article\",\n source: \"remote\",\n reviewId: \"review-1\",\n targetRevisionId: \"entry-1#0001\"\n });\n\n await own[0].handle(changeMessage(\"wb.page\"));\n expect(notify).toHaveBeenCalledTimes(1);\n });\n\n it(\"shows no toast for a change message and signals nothing for a notification (R253)\", async () => {\n const container = createContainer();\n CmsReviewFeature.register(container);\n\n const handlers = container.resolveAll(WebsocketEventHandler);\n const changeHandler = handlers.find(\n handler => handler instanceof ReviewChangeMessageHandler\n );\n const notificationHandler = handlers.find(handler => {\n return handler instanceof ReviewNotificationHandler;\n });\n if (!changeHandler || !notificationHandler) {\n throw new Error(\"Both handlers must be registered.\");\n }\n\n await changeHandler.handle(changeMessage(\"cms.article\"));\n expect(handle).not.toHaveBeenCalled();\n\n await notificationHandler.handle(changeMessage(\"cms.article\"));\n await changeHandler.handle(message(\"cms.article\"));\n expect(handle).not.toHaveBeenCalled();\n expect(notify).toHaveBeenCalledTimes(1);\n });\n});\n"],"names":["handle","vi","notify","createContainer","container","Container","MainGraphQLClient","ModelsCache","undefined","ReviewNotificationService","ReviewActivity","message","namespace","WebsocketEvent","WORKFLOWS_NOTIFICATION_ACTION","changeMessage","WORKFLOWS_REVIEW_CHANGED_ACTION","describe","beforeEach","it","CmsReviewFeature","provider","CmsReviewRowProvider","expect","AppReviewRowProvider","rowProvider","handlers","WebsocketEventHandler","own","handler","ReviewNotificationHandler","ReviewChangeMessageHandler","changeHandler","notificationHandler","Error"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const CmsReviewFeature: import("@webiny/feature/admin").FeatureDefinition<{
2
+ contentAdapter: import("@webiny/app-workflows/review/content/IReviewContentAdapter.js").IReviewContentAdapter;
3
+ rowProvider: import("@webiny/app-workflows/review/presentation/reviewList/abstractions.js").IReviewRowProvider;
4
+ }, []>;
@@ -0,0 +1,27 @@
1
+ import { createFeature } from "@webiny/feature/admin";
2
+ import { CmsReviewRowProvider } from "./CmsReviewRowProvider/abstractions.js";
3
+ import { CmsReviewRowProvider as CmsReviewRowProvider_js_CmsReviewRowProvider } from "./CmsReviewRowProvider/CmsReviewRowProvider.js";
4
+ import { CmsReviewNotificationHandler } from "./CmsReviewNotificationHandler.js";
5
+ import { CmsReviewChangeMessageHandler } from "./CmsReviewChangeMessageHandler.js";
6
+ import { CmsReviewContentAdapter } from "./CmsReviewContentAdapter/abstractions.js";
7
+ import { CmsReviewContentAdapter as CmsReviewContentAdapter_js_CmsReviewContentAdapter } from "./CmsReviewContentAdapter/CmsReviewContentAdapter.js";
8
+ import { CmsReviewGateway } from "./CmsReviewGateway/CmsReviewGateway.js";
9
+ const CmsReviewFeature = createFeature({
10
+ name: "CmsWorkflows/Review",
11
+ register (container) {
12
+ container.register(CmsReviewGateway).inSingletonScope();
13
+ container.register(CmsReviewContentAdapter_js_CmsReviewContentAdapter).inSingletonScope();
14
+ container.register(CmsReviewRowProvider_js_CmsReviewRowProvider).inSingletonScope();
15
+ container.register(CmsReviewNotificationHandler);
16
+ container.register(CmsReviewChangeMessageHandler);
17
+ },
18
+ resolve (container) {
19
+ return {
20
+ contentAdapter: container.resolve(CmsReviewContentAdapter),
21
+ rowProvider: container.resolve(CmsReviewRowProvider)
22
+ };
23
+ }
24
+ });
25
+ export { CmsReviewFeature };
26
+
27
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/feature.js","sources":["../../../src/features/gateway/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { CmsReviewRowProvider as RowProviderAbstraction } from \"./CmsReviewRowProvider/abstractions.js\";\nimport { CmsReviewRowProvider } from \"./CmsReviewRowProvider/CmsReviewRowProvider.js\";\nimport { CmsReviewNotificationHandler } from \"./CmsReviewNotificationHandler.js\";\nimport { CmsReviewChangeMessageHandler } from \"./CmsReviewChangeMessageHandler.js\";\nimport { CmsReviewContentAdapter as AdapterAbstraction } from \"./CmsReviewContentAdapter/abstractions.js\";\nimport { CmsReviewContentAdapter } from \"./CmsReviewContentAdapter/CmsReviewContentAdapter.js\";\nimport { CmsReviewGateway } from \"./CmsReviewGateway/CmsReviewGateway.js\";\n\n/*\n * The CMS review registrations: the review gateway under the shared `ReviewAppGateway` token\n * (R347), the content adapter, the Content Reviews row provider and the two websocket handlers.\n */\nexport const CmsReviewFeature = createFeature({\n name: \"CmsWorkflows/Review\",\n register(container) {\n container.register(CmsReviewGateway).inSingletonScope();\n container.register(CmsReviewContentAdapter).inSingletonScope();\n container.register(CmsReviewRowProvider).inSingletonScope();\n container.register(CmsReviewNotificationHandler);\n container.register(CmsReviewChangeMessageHandler);\n },\n resolve(container) {\n return {\n contentAdapter: container.resolve(AdapterAbstraction),\n rowProvider: container.resolve(RowProviderAbstraction)\n };\n }\n});\n"],"names":["CmsReviewFeature","createFeature","container","CmsReviewGateway","CmsReviewContentAdapter","CmsReviewRowProvider","CmsReviewNotificationHandler","CmsReviewChangeMessageHandler","AdapterAbstraction","RowProviderAbstraction"],"mappings":";;;;;;;;AAaO,MAAMA,mBAAmBC,cAAc;IAC1C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,kBAAkB,gBAAgB;QACrDD,UAAU,QAAQ,CAACE,oDAAyB,gBAAgB;QAC5DF,UAAU,QAAQ,CAACG,8CAAsB,gBAAgB;QACzDH,UAAU,QAAQ,CAACI;QACnBJ,UAAU,QAAQ,CAACK;IACvB;IACA,SAAQL,SAAS;QACb,OAAO;YACH,gBAAgBA,UAAU,OAAO,CAACM;YAClC,aAAaN,UAAU,OAAO,CAACO;QACnC;IACJ;AACJ"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,79 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { Container } from "@webiny/di";
3
+ import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/abstractions.js";
4
+ import { ListCache } from "@webiny/app-admin/features/listCache/index.js";
5
+ import { ModelsCache } from "@webiny/app-headless-cms/features/model/abstractions.js";
6
+ import { ReviewAppGateway } from "@webiny/app-workflows/review/appGateway/abstractions.js";
7
+ import { CmsReviewContentAdapter } from "./CmsReviewContentAdapter/abstractions.js";
8
+ import { CmsReviewRowProvider } from "./CmsReviewRowProvider/abstractions.js";
9
+ import { CmsReviewGateway } from "./CmsReviewGateway/CmsReviewGateway.js";
10
+ import { CmsReviewFeature } from "./feature.js";
11
+ describe("CmsReviewFeature", ()=>{
12
+ const client = {
13
+ execute: vi.fn()
14
+ };
15
+ let container;
16
+ beforeEach(()=>{
17
+ client.execute.mockReset();
18
+ container = new Container();
19
+ container.registerInstance(MainGraphQLClient, client);
20
+ const modelsCache = new ListCache("modelId");
21
+ container.registerInstance(ModelsCache, modelsCache);
22
+ CmsReviewFeature.register(container);
23
+ });
24
+ it("resolves the content adapter and the row provider and nothing else (R354)", ()=>{
25
+ const resolved = CmsReviewFeature.resolve(container);
26
+ const keys = Object.keys(resolved).sort();
27
+ expect(keys).toEqual([
28
+ "contentAdapter",
29
+ "rowProvider"
30
+ ]);
31
+ expect(resolved.contentAdapter).toBe(container.resolve(CmsReviewContentAdapter));
32
+ expect(resolved.rowProvider).toBe(container.resolve(CmsReviewRowProvider));
33
+ });
34
+ it("binds CmsReviewGateway itself to the shared review app token, once (R347, R358)", ()=>{
35
+ const gateways = container.resolveAll(ReviewAppGateway);
36
+ expect(gateways).toHaveLength(1);
37
+ expect(Object.getPrototypeOf(gateways[0])).toBe(CmsReviewGateway.prototype);
38
+ expect(gateways[0].app).toBe("cms");
39
+ });
40
+ it("registers the gateway and the adapter as singletons", ()=>{
41
+ const [firstGateway] = container.resolveAll(ReviewAppGateway);
42
+ const [secondGateway] = container.resolveAll(ReviewAppGateway);
43
+ const firstAdapter = container.resolve(CmsReviewContentAdapter);
44
+ const secondAdapter = container.resolve(CmsReviewContentAdapter);
45
+ expect(firstGateway).toBe(secondGateway);
46
+ expect(firstAdapter).toBe(secondAdapter);
47
+ });
48
+ it("claims the CMS namespaces only", ()=>{
49
+ const [gateway] = container.resolveAll(ReviewAppGateway);
50
+ expect(gateway.canHandle("cms.article")).toBe(true);
51
+ expect(gateway.canHandle("wb.page")).toBe(false);
52
+ });
53
+ it("sends the CMS document and resolves with the envelope (R204)", async ()=>{
54
+ client.execute.mockResolvedValue({
55
+ cms: {
56
+ getCmsEntryTargetReview: {
57
+ data: null,
58
+ error: null
59
+ }
60
+ }
61
+ });
62
+ const [gateway] = container.resolveAll(ReviewAppGateway);
63
+ const envelope = await gateway.getTargetReview({
64
+ namespace: "cms.article",
65
+ targetRevisionId: "entry-1#0001"
66
+ });
67
+ expect(envelope).toEqual({
68
+ data: null,
69
+ error: null
70
+ });
71
+ expect(client.execute).toHaveBeenCalledTimes(1);
72
+ expect(client.execute.mock.calls[0][0].variables).toEqual({
73
+ modelId: "article",
74
+ revisionId: "entry-1#0001"
75
+ });
76
+ });
77
+ });
78
+
79
+ //# sourceMappingURL=feature.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/feature.test.js","sources":["../../../src/features/gateway/feature.test.ts"],"sourcesContent":["import { beforeEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/abstractions.js\";\nimport { ListCache } from \"@webiny/app-admin/features/listCache/index.js\";\nimport { ModelsCache } from \"@webiny/app-headless-cms/features/model/abstractions.js\";\nimport type { CmsModel } from \"@webiny/app-headless-cms/types.js\";\nimport { ReviewAppGateway } from \"@webiny/app-workflows/review/appGateway/abstractions.js\";\nimport { CmsReviewContentAdapter } from \"./CmsReviewContentAdapter/abstractions.js\";\nimport { CmsReviewRowProvider } from \"./CmsReviewRowProvider/abstractions.js\";\nimport { CmsReviewGateway } from \"./CmsReviewGateway/CmsReviewGateway.js\";\nimport { CmsReviewFeature } from \"./feature.js\";\n\ndescribe(\"CmsReviewFeature\", () => {\n const client = { execute: vi.fn() };\n let container: Container;\n\n beforeEach(() => {\n client.execute.mockReset();\n\n container = new Container();\n container.registerInstance(MainGraphQLClient, client);\n const modelsCache = new ListCache<CmsModel>(\"modelId\");\n container.registerInstance(ModelsCache, modelsCache);\n CmsReviewFeature.register(container);\n });\n\n it(\"resolves the content adapter and the row provider and nothing else (R354)\", () => {\n const resolved = CmsReviewFeature.resolve(container);\n const keys = Object.keys(resolved).sort();\n\n expect(keys).toEqual([\"contentAdapter\", \"rowProvider\"]);\n expect(resolved.contentAdapter).toBe(container.resolve(CmsReviewContentAdapter));\n expect(resolved.rowProvider).toBe(container.resolve(CmsReviewRowProvider));\n });\n\n it(\"binds CmsReviewGateway itself to the shared review app token, once (R347, R358)\", () => {\n const gateways = container.resolveAll(ReviewAppGateway);\n\n expect(gateways).toHaveLength(1);\n expect(Object.getPrototypeOf(gateways[0])).toBe(CmsReviewGateway.prototype);\n expect(gateways[0].app).toBe(\"cms\");\n });\n\n it(\"registers the gateway and the adapter as singletons\", () => {\n const [firstGateway] = container.resolveAll(ReviewAppGateway);\n const [secondGateway] = container.resolveAll(ReviewAppGateway);\n const firstAdapter = container.resolve(CmsReviewContentAdapter);\n const secondAdapter = container.resolve(CmsReviewContentAdapter);\n\n expect(firstGateway).toBe(secondGateway);\n expect(firstAdapter).toBe(secondAdapter);\n });\n\n it(\"claims the CMS namespaces only\", () => {\n const [gateway] = container.resolveAll(ReviewAppGateway);\n\n expect(gateway.canHandle(\"cms.article\")).toBe(true);\n expect(gateway.canHandle(\"wb.page\")).toBe(false);\n });\n\n it(\"sends the CMS document and resolves with the envelope (R204)\", async () => {\n client.execute.mockResolvedValue({\n cms: { getCmsEntryTargetReview: { data: null, error: null } }\n });\n const [gateway] = container.resolveAll(ReviewAppGateway);\n\n const envelope = await gateway.getTargetReview({\n namespace: \"cms.article\",\n targetRevisionId: \"entry-1#0001\"\n });\n\n expect(envelope).toEqual({ data: null, error: null });\n expect(client.execute).toHaveBeenCalledTimes(1);\n expect(client.execute.mock.calls[0][0].variables).toEqual({\n modelId: \"article\",\n revisionId: \"entry-1#0001\"\n });\n });\n});\n"],"names":["describe","client","vi","container","beforeEach","Container","MainGraphQLClient","modelsCache","ListCache","ModelsCache","CmsReviewFeature","it","resolved","keys","Object","expect","CmsReviewContentAdapter","CmsReviewRowProvider","gateways","ReviewAppGateway","CmsReviewGateway","firstGateway","secondGateway","firstAdapter","secondAdapter","gateway","envelope"],"mappings":";;;;;;;;;;AAgBAA,SAAS,oBAAoB;IACzB,MAAMC,SAAS;QAAE,SAASC,GAAG,EAAE;IAAG;IAClC,IAAIC;IAEJC,WAAW;QACPH,OAAO,OAAO,CAAC,SAAS;QAExBE,YAAY,IAAIE;QAChBF,UAAU,gBAAgB,CAACG,mBAAmBL;QAC9C,MAAMM,cAAc,IAAIC,UAAoB;QAC5CL,UAAU,gBAAgB,CAACM,aAAaF;QACxCG,iBAAiB,QAAQ,CAACP;IAC9B;IAEAQ,GAAG,6EAA6E;QAC5E,MAAMC,WAAWF,iBAAiB,OAAO,CAACP;QAC1C,MAAMU,OAAOC,OAAO,IAAI,CAACF,UAAU,IAAI;QAEvCG,OAAOF,MAAM,OAAO,CAAC;YAAC;YAAkB;SAAc;QACtDE,OAAOH,SAAS,cAAc,EAAE,IAAI,CAACT,UAAU,OAAO,CAACa;QACvDD,OAAOH,SAAS,WAAW,EAAE,IAAI,CAACT,UAAU,OAAO,CAACc;IACxD;IAEAN,GAAG,mFAAmF;QAClF,MAAMO,WAAWf,UAAU,UAAU,CAACgB;QAEtCJ,OAAOG,UAAU,YAAY,CAAC;QAC9BH,OAAOD,OAAO,cAAc,CAACI,QAAQ,CAAC,EAAE,GAAG,IAAI,CAACE,iBAAiB,SAAS;QAC1EL,OAAOG,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC;IACjC;IAEAP,GAAG,uDAAuD;QACtD,MAAM,CAACU,aAAa,GAAGlB,UAAU,UAAU,CAACgB;QAC5C,MAAM,CAACG,cAAc,GAAGnB,UAAU,UAAU,CAACgB;QAC7C,MAAMI,eAAepB,UAAU,OAAO,CAACa;QACvC,MAAMQ,gBAAgBrB,UAAU,OAAO,CAACa;QAExCD,OAAOM,cAAc,IAAI,CAACC;QAC1BP,OAAOQ,cAAc,IAAI,CAACC;IAC9B;IAEAb,GAAG,kCAAkC;QACjC,MAAM,CAACc,QAAQ,GAAGtB,UAAU,UAAU,CAACgB;QAEvCJ,OAAOU,QAAQ,SAAS,CAAC,gBAAgB,IAAI,CAAC;QAC9CV,OAAOU,QAAQ,SAAS,CAAC,YAAY,IAAI,CAAC;IAC9C;IAEAd,GAAG,gEAAgE;QAC/DV,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,KAAK;gBAAE,yBAAyB;oBAAE,MAAM;oBAAM,OAAO;gBAAK;YAAE;QAChE;QACA,MAAM,CAACwB,QAAQ,GAAGtB,UAAU,UAAU,CAACgB;QAEvC,MAAMO,WAAW,MAAMD,QAAQ,eAAe,CAAC;YAC3C,WAAW;YACX,kBAAkB;QACtB;QAEAV,OAAOW,UAAU,OAAO,CAAC;YAAE,MAAM;YAAM,OAAO;QAAK;QACnDX,OAAOd,OAAO,OAAO,EAAE,qBAAqB,CAAC;QAC7Cc,OAAOd,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;YACtD,SAAS;YACT,YAAY;QAChB;IACJ;AACJ"}
@@ -0,0 +1,3 @@
1
+ export interface CmsOperationResponse<TName extends string, TEnvelope> {
2
+ cms: Record<TName, TEnvelope>;
3
+ }
@@ -0,0 +1 @@
1
+ export declare const APPROVE_CMS_ENTRY_REVIEW_STEP = "\n mutation ApproveCmsEntryReviewStep($reviewId: ID!, $stepId: ID!, $comment: String) {\n cms {\n approveCmsEntryReviewStep(reviewId: $reviewId, stepId: $stepId, comment: $comment) {\n data {\n \n id\n workflowId\n model\n targetId\n targetRevisionId\n title\n isActive\n state\n currentStepId\n currentStepState\n currentStepType\n currentOwnerId\n currentCandidateTeamIds\n targetContext {\n folder {\n id\n type\n }\n modelId\n title\n author {\n id\n displayName\n }\n }\n workflow {\n name\n models\n }\n steps {\n id\n title\n color\n description\n type\n state\n owner {\n \n type\n id\n displayName\n identityType\n\n }\n comment\n pickedUserId\n candidateTeamIds\n candidateTeams {\n id\n name\n }\n assignmentSource\n assignment {\n source\n ruleId\n reason\n by {\n \n type\n id\n displayName\n identityType\n\n }\n }\n reachedOn\n startedOn\n finishedOn\n taskId\n runs {\n taskId\n startedOn\n finishedOn\n outcome\n reason\n }\n issues {\n fieldPath\n severity\n message\n suggestion\n }\n }\n createdBy {\n \n type\n id\n displayName\n identityType\n\n }\n cancelledBy {\n \n type\n id\n displayName\n identityType\n\n }\n createdOn\n savedOn\n lastChangedOn\n\n }\n error {\n \n code\n message\n data\n\n }\n }\n }\n }\n";
@@ -0,0 +1,18 @@
1
+ import { ERROR_FIELDS, REVIEW_FIELDS } from "@webiny/app-workflows/review/gateway/reviewFields.js";
2
+ const APPROVE_CMS_ENTRY_REVIEW_STEP = `
3
+ mutation ApproveCmsEntryReviewStep($reviewId: ID!, $stepId: ID!, $comment: String) {
4
+ cms {
5
+ approveCmsEntryReviewStep(reviewId: $reviewId, stepId: $stepId, comment: $comment) {
6
+ data {
7
+ ${REVIEW_FIELDS}
8
+ }
9
+ error {
10
+ ${ERROR_FIELDS}
11
+ }
12
+ }
13
+ }
14
+ }
15
+ `;
16
+ export { APPROVE_CMS_ENTRY_REVIEW_STEP };
17
+
18
+ //# sourceMappingURL=approveCmsEntryReviewStep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/graphql/approveCmsEntryReviewStep.js","sources":["../../../../src/features/gateway/graphql/approveCmsEntryReviewStep.ts"],"sourcesContent":["import { ERROR_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\n\nexport const APPROVE_CMS_ENTRY_REVIEW_STEP = /* GraphQL */ `\n mutation ApproveCmsEntryReviewStep($reviewId: ID!, $stepId: ID!, $comment: String) {\n cms {\n approveCmsEntryReviewStep(reviewId: $reviewId, stepId: $stepId, comment: $comment) {\n data {\n ${REVIEW_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"names":["APPROVE_CMS_ENTRY_REVIEW_STEP","REVIEW_FIELDS","ERROR_FIELDS"],"mappings":";AAGO,MAAMA,gCAA8C,CAAC;;;;;oBAKxC,EAAEC,cAAc;;;oBAGhB,EAAEC,aAAa;;;;;AAKnC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const CANCEL_CMS_ENTRY_REVIEW = "\n mutation CancelCmsEntryReview($reviewId: ID!) {\n cms {\n cancelCmsEntryReview(reviewId: $reviewId) {\n data {\n \n id\n workflowId\n model\n targetId\n targetRevisionId\n title\n isActive\n state\n currentStepId\n currentStepState\n currentStepType\n currentOwnerId\n currentCandidateTeamIds\n targetContext {\n folder {\n id\n type\n }\n modelId\n title\n author {\n id\n displayName\n }\n }\n workflow {\n name\n models\n }\n steps {\n id\n title\n color\n description\n type\n state\n owner {\n \n type\n id\n displayName\n identityType\n\n }\n comment\n pickedUserId\n candidateTeamIds\n candidateTeams {\n id\n name\n }\n assignmentSource\n assignment {\n source\n ruleId\n reason\n by {\n \n type\n id\n displayName\n identityType\n\n }\n }\n reachedOn\n startedOn\n finishedOn\n taskId\n runs {\n taskId\n startedOn\n finishedOn\n outcome\n reason\n }\n issues {\n fieldPath\n severity\n message\n suggestion\n }\n }\n createdBy {\n \n type\n id\n displayName\n identityType\n\n }\n cancelledBy {\n \n type\n id\n displayName\n identityType\n\n }\n createdOn\n savedOn\n lastChangedOn\n\n }\n error {\n \n code\n message\n data\n\n }\n }\n }\n }\n";
@@ -0,0 +1,18 @@
1
+ import { ERROR_FIELDS, REVIEW_FIELDS } from "@webiny/app-workflows/review/gateway/reviewFields.js";
2
+ const CANCEL_CMS_ENTRY_REVIEW = `
3
+ mutation CancelCmsEntryReview($reviewId: ID!) {
4
+ cms {
5
+ cancelCmsEntryReview(reviewId: $reviewId) {
6
+ data {
7
+ ${REVIEW_FIELDS}
8
+ }
9
+ error {
10
+ ${ERROR_FIELDS}
11
+ }
12
+ }
13
+ }
14
+ }
15
+ `;
16
+ export { CANCEL_CMS_ENTRY_REVIEW };
17
+
18
+ //# sourceMappingURL=cancelCmsEntryReview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/graphql/cancelCmsEntryReview.js","sources":["../../../../src/features/gateway/graphql/cancelCmsEntryReview.ts"],"sourcesContent":["import { ERROR_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\n\nexport const CANCEL_CMS_ENTRY_REVIEW = /* GraphQL */ `\n mutation CancelCmsEntryReview($reviewId: ID!) {\n cms {\n cancelCmsEntryReview(reviewId: $reviewId) {\n data {\n ${REVIEW_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"names":["CANCEL_CMS_ENTRY_REVIEW","REVIEW_FIELDS","ERROR_FIELDS"],"mappings":";AAGO,MAAMA,0BAAwC,CAAC;;;;;oBAKlC,EAAEC,cAAc;;;oBAGhB,EAAEC,aAAa;;;;;AAKnC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const CANCEL_CMS_ENTRY_REVIEWS_FOR_DELETE = "\n mutation CancelCmsEntryReviewsForDelete(\n $modelId: ID!\n $entryId: ID!\n $revisionId: ID\n $action: WorkflowsReviewsForDeleteAction!\n ) {\n cms {\n cancelCmsEntryReviewsForDelete(\n modelId: $modelId\n entryId: $entryId\n revisionId: $revisionId\n action: $action\n ) {\n data {\n \n id\n workflowId\n model\n targetId\n targetRevisionId\n title\n isActive\n state\n currentStepId\n currentStepState\n currentStepType\n currentOwnerId\n currentCandidateTeamIds\n targetContext {\n folder {\n id\n type\n }\n modelId\n title\n author {\n id\n displayName\n }\n }\n workflow {\n name\n models\n }\n steps {\n id\n title\n color\n description\n type\n state\n owner {\n \n type\n id\n displayName\n identityType\n\n }\n comment\n pickedUserId\n candidateTeamIds\n candidateTeams {\n id\n name\n }\n assignmentSource\n assignment {\n source\n ruleId\n reason\n by {\n \n type\n id\n displayName\n identityType\n\n }\n }\n reachedOn\n startedOn\n finishedOn\n taskId\n runs {\n taskId\n startedOn\n finishedOn\n outcome\n reason\n }\n issues {\n fieldPath\n severity\n message\n suggestion\n }\n }\n createdBy {\n \n type\n id\n displayName\n identityType\n\n }\n cancelledBy {\n \n type\n id\n displayName\n identityType\n\n }\n createdOn\n savedOn\n lastChangedOn\n\n }\n error {\n \n code\n message\n data\n\n }\n }\n }\n }\n";
@@ -0,0 +1,28 @@
1
+ import { ERROR_FIELDS, REVIEW_FIELDS } from "@webiny/app-workflows/review/gateway/reviewFields.js";
2
+ const CANCEL_CMS_ENTRY_REVIEWS_FOR_DELETE = `
3
+ mutation CancelCmsEntryReviewsForDelete(
4
+ $modelId: ID!
5
+ $entryId: ID!
6
+ $revisionId: ID
7
+ $action: WorkflowsReviewsForDeleteAction!
8
+ ) {
9
+ cms {
10
+ cancelCmsEntryReviewsForDelete(
11
+ modelId: $modelId
12
+ entryId: $entryId
13
+ revisionId: $revisionId
14
+ action: $action
15
+ ) {
16
+ data {
17
+ ${REVIEW_FIELDS}
18
+ }
19
+ error {
20
+ ${ERROR_FIELDS}
21
+ }
22
+ }
23
+ }
24
+ }
25
+ `;
26
+ export { CANCEL_CMS_ENTRY_REVIEWS_FOR_DELETE };
27
+
28
+ //# sourceMappingURL=cancelCmsEntryReviewsForDelete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/graphql/cancelCmsEntryReviewsForDelete.js","sources":["../../../../src/features/gateway/graphql/cancelCmsEntryReviewsForDelete.ts"],"sourcesContent":["import { ERROR_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\n\nexport const CANCEL_CMS_ENTRY_REVIEWS_FOR_DELETE = /* GraphQL */ `\n mutation CancelCmsEntryReviewsForDelete(\n $modelId: ID!\n $entryId: ID!\n $revisionId: ID\n $action: WorkflowsReviewsForDeleteAction!\n ) {\n cms {\n cancelCmsEntryReviewsForDelete(\n modelId: $modelId\n entryId: $entryId\n revisionId: $revisionId\n action: $action\n ) {\n data {\n ${REVIEW_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"names":["CANCEL_CMS_ENTRY_REVIEWS_FOR_DELETE","REVIEW_FIELDS","ERROR_FIELDS"],"mappings":";AAGO,MAAMA,sCAAoD,CAAC;;;;;;;;;;;;;;;oBAe9C,EAAEC,cAAc;;;oBAGhB,EAAEC,aAAa;;;;;AAKnC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const GET_CMS_ENTRY_REVIEW = "\n query GetCmsEntryReview($id: ID!) {\n cms {\n getCmsEntryReview(id: $id) {\n data {\n \n review {\n \n id\n workflowId\n model\n targetId\n targetRevisionId\n title\n isActive\n state\n currentStepId\n currentStepState\n currentStepType\n currentOwnerId\n currentCandidateTeamIds\n targetContext {\n folder {\n id\n type\n }\n modelId\n title\n author {\n id\n displayName\n }\n }\n workflow {\n name\n models\n }\n steps {\n id\n title\n color\n description\n type\n state\n owner {\n \n type\n id\n displayName\n identityType\n\n }\n comment\n pickedUserId\n candidateTeamIds\n candidateTeams {\n id\n name\n }\n assignmentSource\n assignment {\n source\n ruleId\n reason\n by {\n \n type\n id\n displayName\n identityType\n\n }\n }\n reachedOn\n startedOn\n finishedOn\n taskId\n runs {\n taskId\n startedOn\n finishedOn\n outcome\n reason\n }\n issues {\n fieldPath\n severity\n message\n suggestion\n }\n }\n createdBy {\n \n type\n id\n displayName\n identityType\n\n }\n cancelledBy {\n \n type\n id\n displayName\n identityType\n\n }\n createdOn\n savedOn\n lastChangedOn\n\n steps {\n \n assignments {\n id\n kind\n userId\n userDisplayName\n assignedOn\n source\n ruleId\n by {\n \n type\n id\n displayName\n identityType\n\n }\n reason\n }\n\n }\n }\n flags {\n \n canStart\n canTakeOver\n canApprove\n canReject\n canCancel\n canReassign\n canRestart\n\n }\n\n }\n error {\n \n code\n message\n data\n\n }\n }\n }\n }\n";
@@ -0,0 +1,18 @@
1
+ import { ERROR_FIELDS, REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS } from "@webiny/app-workflows/review/gateway/reviewFields.js";
2
+ const GET_CMS_ENTRY_REVIEW = `
3
+ query GetCmsEntryReview($id: ID!) {
4
+ cms {
5
+ getCmsEntryReview(id: $id) {
6
+ data {
7
+ ${REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS}
8
+ }
9
+ error {
10
+ ${ERROR_FIELDS}
11
+ }
12
+ }
13
+ }
14
+ }
15
+ `;
16
+ export { GET_CMS_ENTRY_REVIEW };
17
+
18
+ //# sourceMappingURL=getCmsEntryReview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/graphql/getCmsEntryReview.js","sources":["../../../../src/features/gateway/graphql/getCmsEntryReview.ts"],"sourcesContent":["import { ERROR_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\n\nexport const GET_CMS_ENTRY_REVIEW = /* GraphQL */ `\n query GetCmsEntryReview($id: ID!) {\n cms {\n getCmsEntryReview(id: $id) {\n data {\n ${REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"names":["GET_CMS_ENTRY_REVIEW","REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS","ERROR_FIELDS"],"mappings":";AAGO,MAAMA,uBAAqC,CAAC;;;;;oBAK/B,EAAEC,wCAAwC;;;oBAG1C,EAAEC,aAAa;;;;;AAKnC,CAAC"}