@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,118 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { createEntry } from "../testing/createEntry.js";
3
+ import { createFormVm } from "../testing/createFormVm.js";
4
+ import { CmsEntryContentReloader } from "./CmsEntryContentReloader.js";
5
+ const SAVED_LATER = "2026-10-17T11:00:00.000Z";
6
+ const MODIFIED_LATER = "2026-10-17T11:05:00.000Z";
7
+ describe("CmsEntryContentReloader", ()=>{
8
+ let state;
9
+ let loadRevision;
10
+ let reloader;
11
+ beforeEach(()=>{
12
+ state = {
13
+ vm: createFormVm({
14
+ entry: createEntry(),
15
+ isDirty: false
16
+ })
17
+ };
18
+ loadRevision = vi.fn(async (_id)=>void 0);
19
+ const form = {
20
+ get vm () {
21
+ return state.vm;
22
+ },
23
+ loadRevision
24
+ };
25
+ reloader = new CmsEntryContentReloader(form, "entry-1#0001");
26
+ });
27
+ it("reads the revision again and returns true when revisionSavedOn changed", async ()=>{
28
+ loadRevision.mockImplementation(async ()=>{
29
+ state.vm = createFormVm({
30
+ entry: createEntry({}, {
31
+ revisionSavedOn: SAVED_LATER
32
+ })
33
+ });
34
+ });
35
+ const changed = await reloader.reload();
36
+ expect(changed).toBe(true);
37
+ expect(loadRevision).toHaveBeenCalledTimes(1);
38
+ expect(loadRevision).toHaveBeenCalledWith("entry-1#0001");
39
+ });
40
+ it("returns true when only revisionModifiedOn changed", async ()=>{
41
+ loadRevision.mockImplementation(async ()=>{
42
+ state.vm = createFormVm({
43
+ entry: createEntry({}, {
44
+ revisionModifiedOn: MODIFIED_LATER
45
+ })
46
+ });
47
+ });
48
+ const changed = await reloader.reload();
49
+ expect(changed).toBe(true);
50
+ });
51
+ it("returns false when both timestamps are the same after the read", async ()=>{
52
+ loadRevision.mockImplementation(async ()=>{
53
+ state.vm = createFormVm({
54
+ entry: createEntry()
55
+ });
56
+ });
57
+ const changed = await reloader.reload();
58
+ expect(changed).toBe(false);
59
+ expect(loadRevision).toHaveBeenCalledTimes(1);
60
+ });
61
+ it("does not read while the form is dirty", async ()=>{
62
+ state.vm = createFormVm({
63
+ entry: createEntry(),
64
+ isDirty: true
65
+ });
66
+ const changed = await reloader.reload();
67
+ expect(changed).toBe(false);
68
+ expect(loadRevision).not.toHaveBeenCalled();
69
+ });
70
+ it("does not read when no entry is loaded", async ()=>{
71
+ state.vm = createFormVm({
72
+ entry: null
73
+ });
74
+ const changed = await reloader.reload();
75
+ expect(changed).toBe(false);
76
+ expect(loadRevision).not.toHaveBeenCalled();
77
+ });
78
+ it("does not read when the editor moved to another revision", async ()=>{
79
+ state.vm = createFormVm({
80
+ entry: createEntry({}, {
81
+ id: "entry-1#0002"
82
+ })
83
+ });
84
+ const changed = await reloader.reload();
85
+ expect(changed).toBe(false);
86
+ expect(loadRevision).not.toHaveBeenCalled();
87
+ });
88
+ it("returns false when the read left no entry", async ()=>{
89
+ loadRevision.mockImplementation(async ()=>{
90
+ state.vm = createFormVm({
91
+ entry: null
92
+ });
93
+ });
94
+ const changed = await reloader.reload();
95
+ expect(changed).toBe(false);
96
+ });
97
+ it("returns false when the read left another revision loaded", async ()=>{
98
+ loadRevision.mockImplementation(async ()=>{
99
+ state.vm = createFormVm({
100
+ entry: createEntry({}, {
101
+ id: "entry-1#0002",
102
+ revisionSavedOn: SAVED_LATER
103
+ })
104
+ });
105
+ });
106
+ const changed = await reloader.reload();
107
+ expect(changed).toBe(false);
108
+ expect(loadRevision).toHaveBeenCalledTimes(1);
109
+ });
110
+ it("lets a failed read reject so the presenter can ignore it", async ()=>{
111
+ const failure = new Error("Network down");
112
+ loadRevision.mockRejectedValue(failure);
113
+ const error = await reloader.reload().catch((e)=>e);
114
+ expect(error).toBe(failure);
115
+ });
116
+ });
117
+
118
+ //# sourceMappingURL=CmsEntryContentReloader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/CmsEntryContentReloader.test.js","sources":["../../src/presentation/CmsEntryContentReloader.test.ts"],"sourcesContent":["import { beforeEach } from \"vitest\";\nimport type { Mock } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport type { ContentEntryFormPresenter } from \"@webiny/app-headless-cms/presentation/contentEntries/form/abstractions.js\";\nimport { createEntry } from \"~/testing/createEntry.js\";\nimport { createFormVm } from \"~/testing/createFormVm.js\";\nimport { CmsEntryContentReloader } from \"./CmsEntryContentReloader.js\";\n\nconst SAVED_LATER = \"2026-10-17T11:00:00.000Z\";\nconst MODIFIED_LATER = \"2026-10-17T11:05:00.000Z\";\n\ninterface FormState {\n vm: ContentEntryFormPresenter.ViewModel;\n}\n\ndescribe(\"CmsEntryContentReloader\", () => {\n let state: FormState;\n let loadRevision: Mock;\n let reloader: CmsEntryContentReloader;\n\n beforeEach(() => {\n state = { vm: createFormVm({ entry: createEntry(), isDirty: false }) };\n loadRevision = vi.fn(async (_id: string) => undefined);\n const form = {\n get vm() {\n return state.vm;\n },\n loadRevision\n } as unknown as ContentEntryFormPresenter.Interface;\n reloader = new CmsEntryContentReloader(form, \"entry-1#0001\");\n });\n\n it(\"reads the revision again and returns true when revisionSavedOn changed\", async () => {\n loadRevision.mockImplementation(async () => {\n state.vm = createFormVm({\n entry: createEntry({}, { revisionSavedOn: SAVED_LATER })\n });\n });\n\n const changed = await reloader.reload();\n\n expect(changed).toBe(true);\n expect(loadRevision).toHaveBeenCalledTimes(1);\n expect(loadRevision).toHaveBeenCalledWith(\"entry-1#0001\");\n });\n\n it(\"returns true when only revisionModifiedOn changed\", async () => {\n loadRevision.mockImplementation(async () => {\n state.vm = createFormVm({\n entry: createEntry({}, { revisionModifiedOn: MODIFIED_LATER })\n });\n });\n\n const changed = await reloader.reload();\n\n expect(changed).toBe(true);\n });\n\n it(\"returns false when both timestamps are the same after the read\", async () => {\n loadRevision.mockImplementation(async () => {\n state.vm = createFormVm({ entry: createEntry() });\n });\n\n const changed = await reloader.reload();\n\n expect(changed).toBe(false);\n expect(loadRevision).toHaveBeenCalledTimes(1);\n });\n\n it(\"does not read while the form is dirty\", async () => {\n state.vm = createFormVm({ entry: createEntry(), isDirty: true });\n\n const changed = await reloader.reload();\n\n expect(changed).toBe(false);\n expect(loadRevision).not.toHaveBeenCalled();\n });\n\n it(\"does not read when no entry is loaded\", async () => {\n state.vm = createFormVm({ entry: null });\n\n const changed = await reloader.reload();\n\n expect(changed).toBe(false);\n expect(loadRevision).not.toHaveBeenCalled();\n });\n\n it(\"does not read when the editor moved to another revision\", async () => {\n state.vm = createFormVm({ entry: createEntry({}, { id: \"entry-1#0002\" }) });\n\n const changed = await reloader.reload();\n\n expect(changed).toBe(false);\n expect(loadRevision).not.toHaveBeenCalled();\n });\n\n it(\"returns false when the read left no entry\", async () => {\n loadRevision.mockImplementation(async () => {\n state.vm = createFormVm({ entry: null });\n });\n\n const changed = await reloader.reload();\n\n expect(changed).toBe(false);\n });\n\n it(\"returns false when the read left another revision loaded\", async () => {\n loadRevision.mockImplementation(async () => {\n state.vm = createFormVm({\n entry: createEntry({}, { id: \"entry-1#0002\", revisionSavedOn: SAVED_LATER })\n });\n });\n\n const changed = await reloader.reload();\n\n expect(changed).toBe(false);\n expect(loadRevision).toHaveBeenCalledTimes(1);\n });\n\n it(\"lets a failed read reject so the presenter can ignore it\", async () => {\n const failure = new Error(\"Network down\");\n loadRevision.mockRejectedValue(failure);\n\n const error = await reloader.reload().catch(e => e);\n\n expect(error).toBe(failure);\n });\n});\n"],"names":["SAVED_LATER","MODIFIED_LATER","describe","state","loadRevision","reloader","beforeEach","createFormVm","createEntry","vi","_id","undefined","form","CmsEntryContentReloader","it","changed","expect","failure","Error","error","e"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { ContentEntryFormPresenter } from "@webiny/app-headless-cms/presentation/contentEntries/form/abstractions.js";
2
+ import { CmsEntryReview } from "../features/editorReview/abstractions.js";
3
+ interface SaveRevisionOptions {
4
+ skipValidation?: boolean;
5
+ }
6
+ declare class CmsEntryFormPresenterWithReview implements ContentEntryFormPresenter.Interface {
7
+ private readonly session;
8
+ private readonly original;
9
+ private phase;
10
+ private revisionId;
11
+ constructor(session: CmsEntryReview.Interface, original: ContentEntryFormPresenter.Interface);
12
+ get vm(): ContentEntryFormPresenter.ViewModel;
13
+ loadRevision(id: string): Promise<void>;
14
+ saveRevision(options?: SaveRevisionOptions): Promise<boolean>;
15
+ publishRevision(): Promise<boolean>;
16
+ unpublishRevision(): Promise<boolean>;
17
+ deleteEntry(): Promise<boolean>;
18
+ setFolderId(folderId: string | null): void;
19
+ newEntry(initialValues?: Record<string, unknown>): void;
20
+ patchEntryMeta(meta: Parameters<ContentEntryFormPresenter.Interface["patchEntryMeta"]>[0]): void;
21
+ reset(): void;
22
+ private setPhase;
23
+ }
24
+ export declare const CmsEntryFormPresenterReviewDecorator: typeof CmsEntryFormPresenterWithReview & {
25
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/app-headless-cms/presentation/contentEntries/form/abstractions.js").IContentEntryFormPresenter>;
26
+ };
27
+ export {};
@@ -0,0 +1,167 @@
1
+ import { computed, makeAutoObservable } from "mobx";
2
+ import { ContentEntryFormPresenter } from "@webiny/app-headless-cms/presentation/contentEntries/form/abstractions.js";
3
+ import { CmsEntryReview } from "../features/editorReview/abstractions.js";
4
+ import { getCmsEntryReviewContext } from "./getCmsEntryReviewContext.js";
5
+ import { CmsEntryContentReloader } from "./CmsEntryContentReloader.js";
6
+ import { CmsEntryUnsavedChanges } from "./CmsEntryUnsavedChanges.js";
7
+ import { getCmsEntryReviewInitParams } from "./getCmsEntryReviewInitParams.js";
8
+ import { isReviewableModel } from "../utils/isReviewableModel.js";
9
+ class CmsEntryFormPresenterWithReview {
10
+ constructor(session, original){
11
+ this.session = session;
12
+ this.original = original;
13
+ this.phase = "idle";
14
+ this.revisionId = null;
15
+ makeAutoObservable(this, {
16
+ session: false,
17
+ original: false,
18
+ vm: computed
19
+ });
20
+ }
21
+ get vm() {
22
+ const base = this.original.vm;
23
+ if ("idle" === this.phase) return base;
24
+ if ("loading" === this.phase) return {
25
+ ...base,
26
+ canSave: false,
27
+ canCreateNewRevision: false,
28
+ canPublish: false
29
+ };
30
+ const review = this.session.presenter.vm;
31
+ return {
32
+ ...base,
33
+ canSave: base.canSave && review.allowsEditing,
34
+ canCreateNewRevision: base.canCreateNewRevision && review.allowsEditing,
35
+ canPublish: base.canPublish && review.allowsPublishing
36
+ };
37
+ }
38
+ async loadRevision(id) {
39
+ const model = this.original.vm.model;
40
+ if (!isReviewableModel(model)) {
41
+ this.setPhase("idle", null);
42
+ await this.original.loadRevision(id);
43
+ return;
44
+ }
45
+ this.setPhase("loading", id);
46
+ try {
47
+ await this.original.loadRevision(id);
48
+ } catch (error) {
49
+ this.setPhase("idle", null);
50
+ throw error;
51
+ }
52
+ if ("loading" !== this.phase || this.revisionId !== id) return;
53
+ const entry = this.original.vm.entry;
54
+ if (!entry) return void this.setPhase("idle", null);
55
+ this.setPhase("tracking", entry.id);
56
+ const contentReloader = new CmsEntryContentReloader(this.original, entry.id);
57
+ const unsavedChanges = new CmsEntryUnsavedChanges(this.original);
58
+ const params = getCmsEntryReviewInitParams({
59
+ model,
60
+ entry,
61
+ canRequest: this.original.vm.canSave,
62
+ contentReloader,
63
+ unsavedChanges
64
+ });
65
+ await this.session.presenter.init(params);
66
+ }
67
+ async saveRevision(options) {
68
+ if ("idle" === this.phase) {
69
+ const saved = await this.original.saveRevision(options);
70
+ const entry = this.original.vm.entry;
71
+ const model = this.original.vm.model;
72
+ if (!saved || !entry || !isReviewableModel(model)) return saved;
73
+ this.setPhase("tracking", entry.id);
74
+ const contentReloader = new CmsEntryContentReloader(this.original, entry.id);
75
+ const unsavedChanges = new CmsEntryUnsavedChanges(this.original);
76
+ const params = getCmsEntryReviewInitParams({
77
+ model,
78
+ entry,
79
+ canRequest: this.original.vm.canSave,
80
+ contentReloader,
81
+ unsavedChanges
82
+ });
83
+ await this.session.presenter.init(params);
84
+ return saved;
85
+ }
86
+ if ("loading" === this.phase) return false;
87
+ const review = this.session.presenter.vm;
88
+ if (!review.allowsEditing) {
89
+ const entry = this.original.vm.entry;
90
+ const isCleanDraft = null !== entry && !entry.meta.locked && !this.original.vm.isDirty;
91
+ return review.allowsPublishing && isCleanDraft;
92
+ }
93
+ const saved = await this.original.saveRevision(options);
94
+ const entry = this.original.vm.entry;
95
+ if (!saved || !entry) return saved;
96
+ const model = this.original.vm.model;
97
+ const canRequest = this.original.vm.canSave;
98
+ if (entry.id === this.revisionId) {
99
+ const context = getCmsEntryReviewContext(model, entry, canRequest);
100
+ this.session.presenter.setContext(context);
101
+ return saved;
102
+ }
103
+ this.setPhase("tracking", entry.id);
104
+ const contentReloader = new CmsEntryContentReloader(this.original, entry.id);
105
+ const unsavedChanges = new CmsEntryUnsavedChanges(this.original);
106
+ const params = getCmsEntryReviewInitParams({
107
+ model,
108
+ entry,
109
+ canRequest,
110
+ contentReloader,
111
+ unsavedChanges
112
+ });
113
+ await this.session.presenter.init(params);
114
+ return saved;
115
+ }
116
+ async publishRevision() {
117
+ if ("idle" === this.phase) return this.original.publishRevision();
118
+ if ("loading" === this.phase || !this.session.presenter.vm.allowsPublishing) return false;
119
+ const published = await this.original.publishRevision();
120
+ const entry = this.original.vm.entry;
121
+ if (published && entry) {
122
+ const context = getCmsEntryReviewContext(this.original.vm.model, entry, this.original.vm.canSave);
123
+ this.session.presenter.setContext(context);
124
+ }
125
+ return published;
126
+ }
127
+ async unpublishRevision() {
128
+ const unpublished = await this.original.unpublishRevision();
129
+ const entry = this.original.vm.entry;
130
+ if (unpublished && entry && "tracking" === this.phase) {
131
+ const context = getCmsEntryReviewContext(this.original.vm.model, entry, this.original.vm.canSave);
132
+ this.session.presenter.setContext(context);
133
+ }
134
+ return unpublished;
135
+ }
136
+ deleteEntry() {
137
+ return this.original.deleteEntry();
138
+ }
139
+ setFolderId(folderId) {
140
+ this.original.setFolderId(folderId);
141
+ }
142
+ newEntry(initialValues) {
143
+ this.setPhase("idle", null);
144
+ this.original.newEntry(initialValues);
145
+ }
146
+ patchEntryMeta(meta) {
147
+ this.original.patchEntryMeta(meta);
148
+ }
149
+ reset() {
150
+ this.original.reset();
151
+ this.session.presenter.dispose();
152
+ this.setPhase("idle", null);
153
+ }
154
+ setPhase(phase, revisionId) {
155
+ this.phase = phase;
156
+ this.revisionId = revisionId;
157
+ }
158
+ }
159
+ const CmsEntryFormPresenterReviewDecorator = ContentEntryFormPresenter.createDecorator({
160
+ decorator: CmsEntryFormPresenterWithReview,
161
+ dependencies: [
162
+ CmsEntryReview
163
+ ]
164
+ });
165
+ export { CmsEntryFormPresenterReviewDecorator };
166
+
167
+ //# sourceMappingURL=CmsEntryFormPresenterReviewDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/CmsEntryFormPresenterReviewDecorator.js","sources":["../../src/presentation/CmsEntryFormPresenterReviewDecorator.ts"],"sourcesContent":["import { computed } from \"mobx\";\nimport { makeAutoObservable } from \"mobx\";\nimport { ContentEntryFormPresenter } from \"@webiny/app-headless-cms/presentation/contentEntries/form/abstractions.js\";\nimport { CmsEntryReview } from \"~/features/editorReview/abstractions.js\";\nimport { getCmsEntryReviewContext } from \"~/presentation/getCmsEntryReviewContext.js\";\nimport { CmsEntryContentReloader } from \"~/presentation/CmsEntryContentReloader.js\";\nimport { CmsEntryUnsavedChanges } from \"~/presentation/CmsEntryUnsavedChanges.js\";\nimport { getCmsEntryReviewInitParams } from \"~/presentation/getCmsEntryReviewInitParams.js\";\nimport { isReviewableModel } from \"~/utils/isReviewableModel.js\";\n\n/*\n * idle: the form is not tied to a review (new entry before its first save, singleton model,\n * nothing loaded).\n * loading: a revision is being loaded, the review status is not asked yet.\n * tracking: the shared presenter was initialised for the loaded revision.\n */\ntype ReviewPhase = \"idle\" | \"loading\" | \"tracking\";\n\ninterface SaveRevisionOptions {\n skipValidation?: boolean;\n}\n\nclass CmsEntryFormPresenterWithReview implements ContentEntryFormPresenter.Interface {\n private phase: ReviewPhase = \"idle\";\n private revisionId: string | null = null;\n\n constructor(\n private readonly session: CmsEntryReview.Interface,\n private readonly original: ContentEntryFormPresenter.Interface\n ) {\n makeAutoObservable<CmsEntryFormPresenterWithReview, \"session\" | \"original\">(this, {\n session: false,\n original: false,\n vm: computed\n });\n }\n\n get vm(): ContentEntryFormPresenter.ViewModel {\n const base = this.original.vm;\n\n if (this.phase === \"idle\") {\n return base;\n }\n\n if (this.phase === \"loading\") {\n return { ...base, canSave: false, canCreateNewRevision: false, canPublish: false };\n }\n\n const review = this.session.presenter.vm;\n\n return {\n ...base,\n canSave: base.canSave && review.allowsEditing,\n // The base \"New Revision\" button reads only this flag and saves through `saveRevision`.\n canCreateNewRevision: base.canCreateNewRevision && review.allowsEditing,\n canPublish: base.canPublish && review.allowsPublishing\n };\n }\n\n async loadRevision(id: string): Promise<void> {\n const model = this.original.vm.model;\n\n if (!isReviewableModel(model)) {\n this.setPhase(\"idle\", null);\n await this.original.loadRevision(id);\n return;\n }\n\n this.setPhase(\"loading\", id);\n\n try {\n await this.original.loadRevision(id);\n } catch (error) {\n this.setPhase(\"idle\", null);\n throw error;\n }\n\n // The editor was reset or moved to another revision while this one was loading.\n if (this.phase !== \"loading\" || this.revisionId !== id) {\n return;\n }\n\n const entry = this.original.vm.entry;\n\n if (!entry) {\n this.setPhase(\"idle\", null);\n return;\n }\n\n this.setPhase(\"tracking\", entry.id);\n\n const contentReloader = new CmsEntryContentReloader(this.original, entry.id);\n const unsavedChanges = new CmsEntryUnsavedChanges(this.original);\n const params = getCmsEntryReviewInitParams({\n model,\n entry,\n canRequest: this.original.vm.canSave,\n contentReloader,\n unsavedChanges\n });\n\n await this.session.presenter.init(params);\n }\n\n async saveRevision(options?: SaveRevisionOptions): Promise<boolean> {\n if (this.phase === \"idle\") {\n const saved = await this.original.saveRevision(options);\n const entry = this.original.vm.entry;\n const model = this.original.vm.model;\n\n // The first save of a new entry creates it without a revision load: the review is\n // tracked from here, so the new draft gets its review bar and \"Save & Publish\" asks\n // the review status before publishing.\n if (!saved || !entry || !isReviewableModel(model)) {\n return saved;\n }\n\n this.setPhase(\"tracking\", entry.id);\n\n const contentReloader = new CmsEntryContentReloader(this.original, entry.id);\n const unsavedChanges = new CmsEntryUnsavedChanges(this.original);\n const params = getCmsEntryReviewInitParams({\n model,\n entry,\n canRequest: this.original.vm.canSave,\n contentReloader,\n unsavedChanges\n });\n\n await this.session.presenter.init(params);\n\n return saved;\n }\n\n if (this.phase === \"loading\") {\n return false;\n }\n\n const review = this.session.presenter.vm;\n\n if (!review.allowsEditing) {\n // Nothing can be saved while the status is unknown or a review locks the content.\n // A clean, unlocked approved draft still reports success, so that \"Save & Publish\"\n // goes on to publish. A locked entry never does: saving it would create a new\n // revision.\n const entry = this.original.vm.entry;\n const isCleanDraft = entry !== null && !entry.meta.locked && !this.original.vm.isDirty;\n\n return review.allowsPublishing && isCleanDraft;\n }\n\n const saved = await this.original.saveRevision(options);\n const entry = this.original.vm.entry;\n\n if (!saved || !entry) {\n return saved;\n }\n\n const model = this.original.vm.model;\n const canRequest = this.original.vm.canSave;\n\n if (entry.id === this.revisionId) {\n const context = getCmsEntryReviewContext(model, entry, canRequest);\n this.session.presenter.setContext(context);\n return saved;\n }\n\n // Saving a locked revision creates a new revision, which has no review yet.\n this.setPhase(\"tracking\", entry.id);\n\n const contentReloader = new CmsEntryContentReloader(this.original, entry.id);\n const unsavedChanges = new CmsEntryUnsavedChanges(this.original);\n const params = getCmsEntryReviewInitParams({\n model,\n entry,\n canRequest,\n contentReloader,\n unsavedChanges\n });\n\n await this.session.presenter.init(params);\n\n return saved;\n }\n\n async publishRevision(): Promise<boolean> {\n if (this.phase === \"idle\") {\n return this.original.publishRevision();\n }\n\n if (this.phase === \"loading\" || !this.session.presenter.vm.allowsPublishing) {\n return false;\n }\n\n const published = await this.original.publishRevision();\n const entry = this.original.vm.entry;\n\n if (published && entry) {\n const context = getCmsEntryReviewContext(\n this.original.vm.model,\n entry,\n this.original.vm.canSave\n );\n this.session.presenter.setContext(context);\n }\n\n return published;\n }\n\n async unpublishRevision(): Promise<boolean> {\n const unpublished = await this.original.unpublishRevision();\n const entry = this.original.vm.entry;\n\n if (unpublished && entry && this.phase === \"tracking\") {\n const context = getCmsEntryReviewContext(\n this.original.vm.model,\n entry,\n this.original.vm.canSave\n );\n this.session.presenter.setContext(context);\n }\n\n return unpublished;\n }\n\n deleteEntry(): Promise<boolean> {\n return this.original.deleteEntry();\n }\n\n setFolderId(folderId: string | null): void {\n this.original.setFolderId(folderId);\n }\n\n newEntry(initialValues?: Record<string, unknown>): void {\n this.setPhase(\"idle\", null);\n this.original.newEntry(initialValues);\n }\n\n patchEntryMeta(\n meta: Parameters<ContentEntryFormPresenter.Interface[\"patchEntryMeta\"]>[0]\n ): void {\n this.original.patchEntryMeta(meta);\n }\n\n reset(): void {\n this.original.reset();\n this.session.presenter.dispose();\n this.setPhase(\"idle\", null);\n }\n\n private setPhase(phase: ReviewPhase, revisionId: string | null): void {\n this.phase = phase;\n this.revisionId = revisionId;\n }\n}\n\nexport const CmsEntryFormPresenterReviewDecorator = ContentEntryFormPresenter.createDecorator({\n decorator: CmsEntryFormPresenterWithReview,\n dependencies: [CmsEntryReview]\n});\n"],"names":["CmsEntryFormPresenterWithReview","session","original","makeAutoObservable","computed","base","review","id","model","isReviewableModel","error","entry","contentReloader","CmsEntryContentReloader","unsavedChanges","CmsEntryUnsavedChanges","params","getCmsEntryReviewInitParams","options","saved","isCleanDraft","canRequest","context","getCmsEntryReviewContext","published","unpublished","folderId","initialValues","meta","phase","revisionId","CmsEntryFormPresenterReviewDecorator","ContentEntryFormPresenter","CmsEntryReview"],"mappings":"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"}