@webiny/app-website-builder-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 (402) hide show
  1. package/Components/ContentReviews/WbContentReviews.d.ts +2 -0
  2. package/Components/ContentReviews/WbContentReviews.js +41 -0
  3. package/Components/ContentReviews/WbContentReviews.js.map +1 -0
  4. package/Components/ContentReviews/WbContentReviews.smoke.test.d.ts +1 -0
  5. package/Components/ContentReviews/WbContentReviews.smoke.test.js +59 -0
  6. package/Components/ContentReviews/WbContentReviews.smoke.test.js.map +1 -0
  7. package/Components/ContentReviews/WbContentReviews.test.d.ts +1 -0
  8. package/Components/ContentReviews/WbContentReviews.test.js +80 -0
  9. package/Components/ContentReviews/WbContentReviews.test.js.map +1 -0
  10. package/Components/ContentReviews/WbContentReviewsSidebarItem.d.ts +2 -0
  11. package/Components/ContentReviews/WbContentReviewsSidebarItem.js +18 -0
  12. package/Components/ContentReviews/WbContentReviewsSidebarItem.js.map +1 -0
  13. package/Components/ContentReviews/WbContentReviewsSidebarItem.test.d.ts +1 -0
  14. package/Components/ContentReviews/WbContentReviewsSidebarItem.test.js +67 -0
  15. package/Components/ContentReviews/WbContentReviewsSidebarItem.test.js.map +1 -0
  16. package/Components/PageEditor/DisabledPublishButton.d.ts +6 -0
  17. package/Components/PageEditor/DisabledPublishButton.js +17 -0
  18. package/Components/PageEditor/DisabledPublishButton.js.map +1 -0
  19. package/Components/PageEditor/DisabledPublishButton.test.d.ts +1 -0
  20. package/Components/PageEditor/DisabledPublishButton.test.js +67 -0
  21. package/Components/PageEditor/DisabledPublishButton.test.js.map +1 -0
  22. package/Components/PageEditor/PageBasePublishDecorator.d.ts +2 -0
  23. package/Components/PageEditor/PageBasePublishDecorator.js +23 -0
  24. package/Components/PageEditor/PageBasePublishDecorator.js.map +1 -0
  25. package/Components/PageEditor/PageEditorAutoSave.d.ts +2 -0
  26. package/Components/PageEditor/PageEditorAutoSave.js +23 -0
  27. package/Components/PageEditor/PageEditorAutoSave.js.map +1 -0
  28. package/Components/PageEditor/PageEditorAutoSave.test.d.ts +1 -0
  29. package/Components/PageEditor/PageEditorAutoSave.test.js +111 -0
  30. package/Components/PageEditor/PageEditorAutoSave.test.js.map +1 -0
  31. package/Components/PageEditor/PageEditorConfig.d.ts +2 -0
  32. package/Components/PageEditor/PageEditorConfig.js +13 -0
  33. package/Components/PageEditor/PageEditorConfig.js.map +1 -0
  34. package/Components/PageEditor/PageEditorLayout.d.ts +2 -0
  35. package/Components/PageEditor/PageEditorLayout.js +10 -0
  36. package/Components/PageEditor/PageEditorLayout.js.map +1 -0
  37. package/Components/PageEditor/PageEditorLayout.test.d.ts +1 -0
  38. package/Components/PageEditor/PageEditorLayout.test.js +121 -0
  39. package/Components/PageEditor/PageEditorLayout.test.js.map +1 -0
  40. package/Components/PageEditor/PageEditorTopBar.d.ts +2 -0
  41. package/Components/PageEditor/PageEditorTopBar.js +10 -0
  42. package/Components/PageEditor/PageEditorTopBar.js.map +1 -0
  43. package/Components/PageEditor/PageEditorTopBar.test.d.ts +1 -0
  44. package/Components/PageEditor/PageEditorTopBar.test.js +175 -0
  45. package/Components/PageEditor/PageEditorTopBar.test.js.map +1 -0
  46. package/Components/PageEditor/PageNewRevisionDecorator.d.ts +2 -0
  47. package/Components/PageEditor/PageNewRevisionDecorator.js +24 -0
  48. package/Components/PageEditor/PageNewRevisionDecorator.js.map +1 -0
  49. package/Components/PageEditor/PageNewRevisionDecorator.test.d.ts +1 -0
  50. package/Components/PageEditor/PageNewRevisionDecorator.test.js +107 -0
  51. package/Components/PageEditor/PageNewRevisionDecorator.test.js.map +1 -0
  52. package/Components/PageEditor/PageReadOnlySync.d.ts +3 -0
  53. package/Components/PageEditor/PageReadOnlySync.js +23 -0
  54. package/Components/PageEditor/PageReadOnlySync.js.map +1 -0
  55. package/Components/PageEditor/PageReviewBar.d.ts +4 -0
  56. package/Components/PageEditor/PageReviewBar.js +93 -0
  57. package/Components/PageEditor/PageReviewBar.js.map +1 -0
  58. package/Components/PageEditor/PageReviewBar.test.d.ts +1 -0
  59. package/Components/PageEditor/PageReviewBar.test.js +135 -0
  60. package/Components/PageEditor/PageReviewBar.test.js.map +1 -0
  61. package/Components/PageEditor/PageReviewPublishAction.d.ts +2 -0
  62. package/Components/PageEditor/PageReviewPublishAction.js +15 -0
  63. package/Components/PageEditor/PageReviewPublishAction.js.map +1 -0
  64. package/Components/PageEditor/PageReviewPublishButton.d.ts +4 -0
  65. package/Components/PageEditor/PageReviewPublishButton.js +23 -0
  66. package/Components/PageEditor/PageReviewPublishButton.js.map +1 -0
  67. package/Components/PageEditor/PageScheduleDecorator.d.ts +2 -0
  68. package/Components/PageEditor/PageScheduleDecorator.js +23 -0
  69. package/Components/PageEditor/PageScheduleDecorator.js.map +1 -0
  70. package/Components/PageEditor/PageScheduleDecorator.test.d.ts +1 -0
  71. package/Components/PageEditor/PageScheduleDecorator.test.js +75 -0
  72. package/Components/PageEditor/PageScheduleDecorator.test.js.map +1 -0
  73. package/Components/PageEditor/getPageReadOnlyReason.d.ts +4 -0
  74. package/Components/PageEditor/getPageReadOnlyReason.js +20 -0
  75. package/Components/PageEditor/getPageReadOnlyReason.js.map +1 -0
  76. package/Components/PageEditor/getPageReadOnlyReason.test.d.ts +1 -0
  77. package/Components/PageEditor/getPageReadOnlyReason.test.js +122 -0
  78. package/Components/PageEditor/getPageReadOnlyReason.test.js.map +1 -0
  79. package/Components/PageEditor/getPageReviewContext.d.ts +9 -0
  80. package/Components/PageEditor/getPageReviewContext.js +13 -0
  81. package/Components/PageEditor/getPageReviewContext.js.map +1 -0
  82. package/Components/PageEditor/getPageReviewContext.test.d.ts +1 -0
  83. package/Components/PageEditor/getPageReviewContext.test.js +42 -0
  84. package/Components/PageEditor/getPageReviewContext.test.js.map +1 -0
  85. package/Components/PageEditor/pageEditorDocument.d.ts +17 -0
  86. package/Components/PageEditor/pageEditorDocument.js +0 -0
  87. package/Components/PageEditor/pageReviewMatrix.test.d.ts +1 -0
  88. package/Components/PageEditor/pageReviewMatrix.test.js +223 -0
  89. package/Components/PageEditor/pageReviewMatrix.test.js.map +1 -0
  90. package/Components/PageEditor/publishMatrix.test.d.ts +1 -0
  91. package/Components/PageEditor/publishMatrix.test.js +313 -0
  92. package/Components/PageEditor/publishMatrix.test.js.map +1 -0
  93. package/Components/PagesList/PageListReviewGatedActions.d.ts +2 -0
  94. package/Components/PagesList/PageListReviewGatedActions.js +27 -0
  95. package/Components/PagesList/PageListReviewGatedActions.js.map +1 -0
  96. package/Components/PagesList/PageListReviewGatedActions.test.d.ts +1 -0
  97. package/Components/PagesList/PageListReviewGatedActions.test.js +94 -0
  98. package/Components/PagesList/PageListReviewGatedActions.test.js.map +1 -0
  99. package/Components/PagesList/PagesList.d.ts +2 -0
  100. package/Components/PagesList/PagesList.js +8 -0
  101. package/Components/PagesList/PagesList.js.map +1 -0
  102. package/Components/PagesList/PagesList.test.d.ts +1 -0
  103. package/Components/PagesList/PagesList.test.js +47 -0
  104. package/Components/PagesList/PagesList.test.js.map +1 -0
  105. package/Components/PagesList/index.d.ts +1 -0
  106. package/Components/PagesList/index.js +1 -0
  107. package/Components/index.d.ts +2 -0
  108. package/Components/index.js +2 -0
  109. package/LICENSE +21 -0
  110. package/README.md +11 -0
  111. package/Routes/WebsiteBuilderWorkflowsMenu.d.ts +2 -0
  112. package/Routes/WebsiteBuilderWorkflowsMenu.js +23 -0
  113. package/Routes/WebsiteBuilderWorkflowsMenu.js.map +1 -0
  114. package/Routes/WebsiteBuilderWorkflowsMenu.test.d.ts +1 -0
  115. package/Routes/WebsiteBuilderWorkflowsMenu.test.js +141 -0
  116. package/Routes/WebsiteBuilderWorkflowsMenu.test.js.map +1 -0
  117. package/Routes/index.d.ts +1 -0
  118. package/Routes/index.js +1 -0
  119. package/constants.d.ts +1 -0
  120. package/constants.js +4 -0
  121. package/constants.js.map +1 -0
  122. package/editorGlue.wiring.test.d.ts +1 -0
  123. package/editorGlue.wiring.test.js +128 -0
  124. package/editorGlue.wiring.test.js.map +1 -0
  125. package/features/cache/WbReviewCacheSyncHandler.d.ts +8 -0
  126. package/features/cache/WbReviewCacheSyncHandler.js +14 -0
  127. package/features/cache/WbReviewCacheSyncHandler.js.map +1 -0
  128. package/features/cache/WbReviewPageCacheWriter.d.ts +17 -0
  129. package/features/cache/WbReviewPageCacheWriter.js +39 -0
  130. package/features/cache/WbReviewPageCacheWriter.js.map +1 -0
  131. package/features/cache/WbReviewPageCacheWriter.test.d.ts +1 -0
  132. package/features/cache/WbReviewPageCacheWriter.test.js +115 -0
  133. package/features/cache/WbReviewPageCacheWriter.test.js.map +1 -0
  134. package/features/cache/abstractions.d.ts +5 -0
  135. package/features/cache/abstractions.js +5 -0
  136. package/features/cache/abstractions.js.map +1 -0
  137. package/features/cache/feature.d.ts +1 -0
  138. package/features/cache/feature.js +13 -0
  139. package/features/cache/feature.js.map +1 -0
  140. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.d.ts +25 -0
  141. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.js +112 -0
  142. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.js.map +1 -0
  143. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.test.d.ts +1 -0
  144. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.test.js +632 -0
  145. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.test.js.map +1 -0
  146. package/features/editorGateway/feature.d.ts +1 -0
  147. package/features/editorGateway/feature.js +11 -0
  148. package/features/editorGateway/feature.js.map +1 -0
  149. package/features/editorGateway/feature.test.d.ts +1 -0
  150. package/features/editorGateway/feature.test.js +244 -0
  151. package/features/editorGateway/feature.test.js.map +1 -0
  152. package/features/editorGateway/graphql/deleteWebsiteBuilderPageWorkflow.d.ts +1 -0
  153. package/features/editorGateway/graphql/deleteWebsiteBuilderPageWorkflow.js +19 -0
  154. package/features/editorGateway/graphql/deleteWebsiteBuilderPageWorkflow.js.map +1 -0
  155. package/features/editorGateway/graphql/getWebsiteBuilderPageWorkflow.d.ts +1 -0
  156. package/features/editorGateway/graphql/getWebsiteBuilderPageWorkflow.js +19 -0
  157. package/features/editorGateway/graphql/getWebsiteBuilderPageWorkflow.js.map +1 -0
  158. package/features/editorGateway/graphql/inspectWebsiteBuilderPageRouting.d.ts +1 -0
  159. package/features/editorGateway/graphql/inspectWebsiteBuilderPageRouting.js +19 -0
  160. package/features/editorGateway/graphql/inspectWebsiteBuilderPageRouting.js.map +1 -0
  161. package/features/editorGateway/graphql/listWebsiteBuilderPageWorkflowNames.d.ts +1 -0
  162. package/features/editorGateway/graphql/listWebsiteBuilderPageWorkflowNames.js +23 -0
  163. package/features/editorGateway/graphql/listWebsiteBuilderPageWorkflowNames.js.map +1 -0
  164. package/features/editorGateway/graphql/storeWebsiteBuilderPageWorkflow.d.ts +1 -0
  165. package/features/editorGateway/graphql/storeWebsiteBuilderPageWorkflow.js +19 -0
  166. package/features/editorGateway/graphql/storeWebsiteBuilderPageWorkflow.js.map +1 -0
  167. package/features/editorGateway/graphql/websiteBuilderPageFolderExists.d.ts +1 -0
  168. package/features/editorGateway/graphql/websiteBuilderPageFolderExists.js +16 -0
  169. package/features/editorGateway/graphql/websiteBuilderPageFolderExists.js.map +1 -0
  170. package/features/editorMounting/WbWorkflowEditorAppAdapter.d.ts +21 -0
  171. package/features/editorMounting/WbWorkflowEditorAppAdapter.js +45 -0
  172. package/features/editorMounting/WbWorkflowEditorAppAdapter.js.map +1 -0
  173. package/features/editorMounting/WbWorkflowEditorAppAdapter.test.d.ts +1 -0
  174. package/features/editorMounting/WbWorkflowEditorAppAdapter.test.js +115 -0
  175. package/features/editorMounting/WbWorkflowEditorAppAdapter.test.js.map +1 -0
  176. package/features/editorMounting/abstractions.d.ts +5 -0
  177. package/features/editorMounting/abstractions.js +5 -0
  178. package/features/editorMounting/abstractions.js.map +1 -0
  179. package/features/editorMounting/feature.d.ts +3 -0
  180. package/features/editorMounting/feature.js +19 -0
  181. package/features/editorMounting/feature.js.map +1 -0
  182. package/features/editorMounting/feature.test.d.ts +1 -0
  183. package/features/editorMounting/feature.test.js +93 -0
  184. package/features/editorMounting/feature.test.js.map +1 -0
  185. package/features/editorReview/WbPageContentReloader.d.ts +12 -0
  186. package/features/editorReview/WbPageContentReloader.js +40 -0
  187. package/features/editorReview/WbPageContentReloader.js.map +1 -0
  188. package/features/editorReview/WbPageContentReloader.test.d.ts +1 -0
  189. package/features/editorReview/WbPageContentReloader.test.js +222 -0
  190. package/features/editorReview/WbPageContentReloader.test.js.map +1 -0
  191. package/features/editorReview/WbPageReview.d.ts +8 -0
  192. package/features/editorReview/WbPageReview.js +14 -0
  193. package/features/editorReview/WbPageReview.js.map +1 -0
  194. package/features/editorReview/WbPageUnsavedChanges.d.ts +8 -0
  195. package/features/editorReview/WbPageUnsavedChanges.js +12 -0
  196. package/features/editorReview/WbPageUnsavedChanges.js.map +1 -0
  197. package/features/editorReview/WbPageUnsavedChanges.test.d.ts +1 -0
  198. package/features/editorReview/WbPageUnsavedChanges.test.js +33 -0
  199. package/features/editorReview/WbPageUnsavedChanges.test.js.map +1 -0
  200. package/features/editorReview/abstractions.d.ts +5 -0
  201. package/features/editorReview/abstractions.js +5 -0
  202. package/features/editorReview/abstractions.js.map +1 -0
  203. package/features/editorReview/feature.d.ts +3 -0
  204. package/features/editorReview/feature.js +17 -0
  205. package/features/editorReview/feature.js.map +1 -0
  206. package/features/gateway/WbReviewChangeMessageHandler.d.ts +8 -0
  207. package/features/gateway/WbReviewChangeMessageHandler.js +16 -0
  208. package/features/gateway/WbReviewChangeMessageHandler.js.map +1 -0
  209. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.d.ts +13 -0
  210. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.js +35 -0
  211. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.js.map +1 -0
  212. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.test.d.ts +1 -0
  213. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.test.js +47 -0
  214. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.test.js.map +1 -0
  215. package/features/gateway/WbReviewContentAdapter/abstractions.d.ts +5 -0
  216. package/features/gateway/WbReviewContentAdapter/abstractions.js +5 -0
  217. package/features/gateway/WbReviewContentAdapter/abstractions.js.map +1 -0
  218. package/features/gateway/WbReviewGateway/WbReviewGateway.d.ts +51 -0
  219. package/features/gateway/WbReviewGateway/WbReviewGateway.js +216 -0
  220. package/features/gateway/WbReviewGateway/WbReviewGateway.js.map +1 -0
  221. package/features/gateway/WbReviewGateway/WbReviewGateway.test.d.ts +1 -0
  222. package/features/gateway/WbReviewGateway/WbReviewGateway.test.js +647 -0
  223. package/features/gateway/WbReviewGateway/WbReviewGateway.test.js.map +1 -0
  224. package/features/gateway/WbReviewNotificationHandler.d.ts +8 -0
  225. package/features/gateway/WbReviewNotificationHandler.js +16 -0
  226. package/features/gateway/WbReviewNotificationHandler.js.map +1 -0
  227. package/features/gateway/WbReviewRowProvider/WbReviewRowProvider.d.ts +8 -0
  228. package/features/gateway/WbReviewRowProvider/WbReviewRowProvider.js +14 -0
  229. package/features/gateway/WbReviewRowProvider/WbReviewRowProvider.js.map +1 -0
  230. package/features/gateway/WbReviewRowProvider/abstractions.d.ts +5 -0
  231. package/features/gateway/WbReviewRowProvider/abstractions.js +5 -0
  232. package/features/gateway/WbReviewRowProvider/abstractions.js.map +1 -0
  233. package/features/gateway/assertWbPageNamespace.d.ts +1 -0
  234. package/features/gateway/assertWbPageNamespace.js +7 -0
  235. package/features/gateway/assertWbPageNamespace.js.map +1 -0
  236. package/features/gateway/contentReviewsBindings.test.d.ts +1 -0
  237. package/features/gateway/contentReviewsBindings.test.js +159 -0
  238. package/features/gateway/contentReviewsBindings.test.js.map +1 -0
  239. package/features/gateway/feature.d.ts +4 -0
  240. package/features/gateway/feature.js +27 -0
  241. package/features/gateway/feature.js.map +1 -0
  242. package/features/gateway/feature.test.d.ts +1 -0
  243. package/features/gateway/feature.test.js +85 -0
  244. package/features/gateway/feature.test.js.map +1 -0
  245. package/features/gateway/graphql/WbOperationResponse.d.ts +3 -0
  246. package/features/gateway/graphql/WbOperationResponse.js +0 -0
  247. package/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.d.ts +1 -0
  248. package/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.js +22 -0
  249. package/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.js.map +1 -0
  250. package/features/gateway/graphql/cancelWebsiteBuilderPageReview.d.ts +1 -0
  251. package/features/gateway/graphql/cancelWebsiteBuilderPageReview.js +18 -0
  252. package/features/gateway/graphql/cancelWebsiteBuilderPageReview.js.map +1 -0
  253. package/features/gateway/graphql/cancelWebsiteBuilderPageReviewsForDelete.d.ts +1 -0
  254. package/features/gateway/graphql/cancelWebsiteBuilderPageReviewsForDelete.js +26 -0
  255. package/features/gateway/graphql/cancelWebsiteBuilderPageReviewsForDelete.js.map +1 -0
  256. package/features/gateway/graphql/getWebsiteBuilderPageReview.d.ts +1 -0
  257. package/features/gateway/graphql/getWebsiteBuilderPageReview.js +18 -0
  258. package/features/gateway/graphql/getWebsiteBuilderPageReview.js.map +1 -0
  259. package/features/gateway/graphql/getWebsiteBuilderPageReviewStepRun.d.ts +1 -0
  260. package/features/gateway/graphql/getWebsiteBuilderPageReviewStepRun.js +18 -0
  261. package/features/gateway/graphql/getWebsiteBuilderPageReviewStepRun.js.map +1 -0
  262. package/features/gateway/graphql/getWebsiteBuilderPageTargetReview.d.ts +1 -0
  263. package/features/gateway/graphql/getWebsiteBuilderPageTargetReview.js +18 -0
  264. package/features/gateway/graphql/getWebsiteBuilderPageTargetReview.js.map +1 -0
  265. package/features/gateway/graphql/listWebsiteBuilderPageReviewStepCandidates.d.ts +1 -0
  266. package/features/gateway/graphql/listWebsiteBuilderPageReviewStepCandidates.js +18 -0
  267. package/features/gateway/graphql/listWebsiteBuilderPageReviewStepCandidates.js.map +1 -0
  268. package/features/gateway/graphql/listWebsiteBuilderPageReviews.d.ts +1 -0
  269. package/features/gateway/graphql/listWebsiteBuilderPageReviews.js +34 -0
  270. package/features/gateway/graphql/listWebsiteBuilderPageReviews.js.map +1 -0
  271. package/features/gateway/graphql/listWebsiteBuilderPageStepCandidates.d.ts +1 -0
  272. package/features/gateway/graphql/listWebsiteBuilderPageStepCandidates.js +22 -0
  273. package/features/gateway/graphql/listWebsiteBuilderPageStepCandidates.js.map +1 -0
  274. package/features/gateway/graphql/listWebsiteBuilderPageWorkflows.d.ts +1 -0
  275. package/features/gateway/graphql/listWebsiteBuilderPageWorkflows.js +18 -0
  276. package/features/gateway/graphql/listWebsiteBuilderPageWorkflows.js.map +1 -0
  277. package/features/gateway/graphql/reassignWebsiteBuilderPageReviewStep.d.ts +1 -0
  278. package/features/gateway/graphql/reassignWebsiteBuilderPageReviewStep.js +22 -0
  279. package/features/gateway/graphql/reassignWebsiteBuilderPageReviewStep.js.map +1 -0
  280. package/features/gateway/graphql/rejectWebsiteBuilderPageReviewStep.d.ts +1 -0
  281. package/features/gateway/graphql/rejectWebsiteBuilderPageReviewStep.js +22 -0
  282. package/features/gateway/graphql/rejectWebsiteBuilderPageReviewStep.js.map +1 -0
  283. package/features/gateway/graphql/requestWebsiteBuilderPageReview.d.ts +1 -0
  284. package/features/gateway/graphql/requestWebsiteBuilderPageReview.js +26 -0
  285. package/features/gateway/graphql/requestWebsiteBuilderPageReview.js.map +1 -0
  286. package/features/gateway/graphql/restartWebsiteBuilderPageReviewStep.d.ts +1 -0
  287. package/features/gateway/graphql/restartWebsiteBuilderPageReviewStep.js +18 -0
  288. package/features/gateway/graphql/restartWebsiteBuilderPageReviewStep.js.map +1 -0
  289. package/features/gateway/graphql/startWebsiteBuilderPageReviewStep.d.ts +1 -0
  290. package/features/gateway/graphql/startWebsiteBuilderPageReviewStep.js +18 -0
  291. package/features/gateway/graphql/startWebsiteBuilderPageReviewStep.js.map +1 -0
  292. package/features/gateway/graphql/takeOverWebsiteBuilderPageReviewStep.d.ts +1 -0
  293. package/features/gateway/graphql/takeOverWebsiteBuilderPageReviewStep.js +26 -0
  294. package/features/gateway/graphql/takeOverWebsiteBuilderPageReviewStep.js.map +1 -0
  295. package/features/trash/BulkDeletePresenterReviewDecorator.d.ts +14 -0
  296. package/features/trash/BulkDeletePresenterReviewDecorator.js +27 -0
  297. package/features/trash/BulkDeletePresenterReviewDecorator.js.map +1 -0
  298. package/features/trash/BulkDeletePresenterReviewDecorator.test.d.ts +1 -0
  299. package/features/trash/BulkDeletePresenterReviewDecorator.test.js +234 -0
  300. package/features/trash/BulkDeletePresenterReviewDecorator.test.js.map +1 -0
  301. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.d.ts +13 -0
  302. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.js +23 -0
  303. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.js.map +1 -0
  304. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.test.d.ts +1 -0
  305. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.test.js +114 -0
  306. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.test.js.map +1 -0
  307. package/features/trash/DeletePageUseCaseReviewDecorator.d.ts +13 -0
  308. package/features/trash/DeletePageUseCaseReviewDecorator.js +23 -0
  309. package/features/trash/DeletePageUseCaseReviewDecorator.js.map +1 -0
  310. package/features/trash/DeletePageUseCaseReviewDecorator.test.d.ts +1 -0
  311. package/features/trash/DeletePageUseCaseReviewDecorator.test.js +134 -0
  312. package/features/trash/DeletePageUseCaseReviewDecorator.test.js.map +1 -0
  313. package/features/trash/feature.d.ts +1 -0
  314. package/features/trash/feature.js +15 -0
  315. package/features/trash/feature.js.map +1 -0
  316. package/features/trash/feature.test.d.ts +1 -0
  317. package/features/trash/feature.test.js +183 -0
  318. package/features/trash/feature.test.js.map +1 -0
  319. package/hooks/usePage.d.ts +5 -0
  320. package/hooks/usePage.js +15 -0
  321. package/hooks/usePage.js.map +1 -0
  322. package/hooks/usePage.test.d.ts +1 -0
  323. package/hooks/usePage.test.js +49 -0
  324. package/hooks/usePage.test.js.map +1 -0
  325. package/index.d.ts +2 -0
  326. package/index.js +40 -0
  327. package/index.js.map +1 -0
  328. package/index.mount.test.d.ts +1 -0
  329. package/index.mount.test.js +50 -0
  330. package/index.mount.test.js.map +1 -0
  331. package/index.test.d.ts +1 -0
  332. package/index.test.js +523 -0
  333. package/index.test.js.map +1 -0
  334. package/package.json +54 -0
  335. package/pageListChangeStatus.wiring.test.d.ts +1 -0
  336. package/pageListChangeStatus.wiring.test.js +175 -0
  337. package/pageListChangeStatus.wiring.test.js.map +1 -0
  338. package/pageListGlue.wiring.test.d.ts +1 -0
  339. package/pageListGlue.wiring.test.js +220 -0
  340. package/pageListGlue.wiring.test.js.map +1 -0
  341. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.d.ts +8 -0
  342. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.js +16 -0
  343. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.js.map +1 -0
  344. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.test.d.ts +1 -0
  345. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.test.js +19 -0
  346. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.test.js.map +1 -0
  347. package/presentation/page/PageGet/feature.d.ts +1 -0
  348. package/presentation/page/PageGet/feature.js +11 -0
  349. package/presentation/page/PageGet/feature.js.map +1 -0
  350. package/presentation/page/PageList/WbReviewListPagesFieldSelection.d.ts +8 -0
  351. package/presentation/page/PageList/WbReviewListPagesFieldSelection.js +16 -0
  352. package/presentation/page/PageList/WbReviewListPagesFieldSelection.js.map +1 -0
  353. package/presentation/page/PageList/WbReviewListPagesFieldSelection.test.d.ts +1 -0
  354. package/presentation/page/PageList/WbReviewListPagesFieldSelection.test.js +19 -0
  355. package/presentation/page/PageList/WbReviewListPagesFieldSelection.test.js.map +1 -0
  356. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.d.ts +12 -0
  357. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.js +24 -0
  358. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.js.map +1 -0
  359. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.test.d.ts +1 -0
  360. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.test.js +70 -0
  361. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.test.js.map +1 -0
  362. package/presentation/page/PageList/feature.d.ts +1 -0
  363. package/presentation/page/PageList/feature.js +13 -0
  364. package/presentation/page/PageList/feature.js.map +1 -0
  365. package/presentation/page/RevisionList/RevisionListPresenterDecorator.d.ts +15 -0
  366. package/presentation/page/RevisionList/RevisionListPresenterDecorator.js +36 -0
  367. package/presentation/page/RevisionList/RevisionListPresenterDecorator.js.map +1 -0
  368. package/presentation/page/RevisionList/RevisionListPresenterDecorator.test.d.ts +1 -0
  369. package/presentation/page/RevisionList/RevisionListPresenterDecorator.test.js +119 -0
  370. package/presentation/page/RevisionList/RevisionListPresenterDecorator.test.js.map +1 -0
  371. package/presentation/page/RevisionList/feature.d.ts +1 -0
  372. package/presentation/page/RevisionList/feature.js +11 -0
  373. package/presentation/page/RevisionList/feature.js.map +1 -0
  374. package/presentation/page/wbReviewPageSelection.d.ts +1 -0
  375. package/presentation/page/wbReviewPageSelection.js +9 -0
  376. package/presentation/page/wbReviewPageSelection.js.map +1 -0
  377. package/publishAutosave.wiring.test.d.ts +1 -0
  378. package/publishAutosave.wiring.test.js +162 -0
  379. package/publishAutosave.wiring.test.js.map +1 -0
  380. package/routes.d.ts +9 -0
  381. package/routes.js +19 -0
  382. package/routes.js.map +1 -0
  383. package/testing/WbEditorHarness.d.ts +11 -0
  384. package/testing/WbEditorHarness.js +22 -0
  385. package/testing/WbEditorHarness.js.map +1 -0
  386. package/testing/createFakeSession.d.ts +9 -0
  387. package/testing/createFakeSession.js +29 -0
  388. package/testing/createFakeSession.js.map +1 -0
  389. package/testing/createFakeVm.d.ts +3 -0
  390. package/testing/createFakeVm.js +51 -0
  391. package/testing/createFakeVm.js.map +1 -0
  392. package/testing/createFolder.d.ts +2 -0
  393. package/testing/createFolder.js +13 -0
  394. package/testing/createFolder.js.map +1 -0
  395. package/testing/createPageEditor.d.ts +4 -0
  396. package/testing/createPageEditor.js +26 -0
  397. package/testing/createPageEditor.js.map +1 -0
  398. package/testing/registerPageContent.d.ts +20 -0
  399. package/testing/registerPageContent.js +28 -0
  400. package/testing/registerPageContent.js.map +1 -0
  401. package/types.d.ts +9 -0
  402. package/types.js +0 -0
@@ -0,0 +1,23 @@
1
+ import react from "react";
2
+ import { useFeature } from "@webiny/app";
3
+ import { WorkflowEditorMenu } from "@webiny/app-workflows/editor/mounting/components/WorkflowEditorMenu.js";
4
+ import { WorkflowEditorRoute } from "@webiny/app-workflows/editor/mounting/components/WorkflowEditorRoute.js";
5
+ import { WbWorkflowEditorMountingFeature } from "../features/editorMounting/feature.js";
6
+ import { Routes } from "../routes.js";
7
+ const WebsiteBuilderWorkflowsMenu = ()=>{
8
+ const { app } = useFeature(WbWorkflowEditorMountingFeature);
9
+ return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(WorkflowEditorRoute, {
10
+ route: Routes.Pages.Workflows,
11
+ appBreadcrumbName: "wb",
12
+ appBreadcrumbLabel: "Website Builder",
13
+ breadcrumbName: "wb.workflows",
14
+ app: app
15
+ }), /*#__PURE__*/ react.createElement(WorkflowEditorMenu, {
16
+ name: "websiteBuilder.pages.workflows",
17
+ parent: "wb",
18
+ route: Routes.Pages.Workflows
19
+ }));
20
+ };
21
+ export { WebsiteBuilderWorkflowsMenu };
22
+
23
+ //# sourceMappingURL=WebsiteBuilderWorkflowsMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Routes/WebsiteBuilderWorkflowsMenu.js","sources":["../../src/Routes/WebsiteBuilderWorkflowsMenu.tsx"],"sourcesContent":["import React from \"react\";\nimport { useFeature } from \"@webiny/app\";\nimport { WorkflowEditorMenu } from \"@webiny/app-workflows/editor/mounting/components/WorkflowEditorMenu.js\";\nimport { WorkflowEditorRoute } from \"@webiny/app-workflows/editor/mounting/components/WorkflowEditorRoute.js\";\nimport { WbWorkflowEditorMountingFeature } from \"~/features/editorMounting/feature.js\";\nimport { Routes } from \"~/routes.js\";\n\n/*\n * Mounts the shared workflow editor route and menu item with the Website Builder adapter. Without\n * the workflows `editor` permission the menu item renders nothing and the route shows the\n * no-access view (D162, R331).\n */\nexport const WebsiteBuilderWorkflowsMenu = () => {\n const { app } = useFeature(WbWorkflowEditorMountingFeature);\n\n return (\n <>\n <WorkflowEditorRoute\n route={Routes.Pages.Workflows}\n appBreadcrumbName=\"wb\"\n appBreadcrumbLabel=\"Website Builder\"\n breadcrumbName=\"wb.workflows\"\n app={app}\n />\n <WorkflowEditorMenu\n name=\"websiteBuilder.pages.workflows\"\n parent=\"wb\"\n route={Routes.Pages.Workflows}\n />\n </>\n );\n};\n"],"names":["WebsiteBuilderWorkflowsMenu","app","useFeature","WbWorkflowEditorMountingFeature","WorkflowEditorRoute","Routes","WorkflowEditorMenu"],"mappings":";;;;;;AAYO,MAAMA,8BAA8B;IACvC,MAAM,EAAEC,GAAG,EAAE,GAAGC,WAAWC;IAE3B,OAAO,WAAP,GACI,wDACI,oBAACC,qBAAmBA;QAChB,OAAOC,OAAO,KAAK,CAAC,SAAS;QAC7B,mBAAkB;QAClB,oBAAmB;QACnB,gBAAe;QACf,KAAKJ;sBAET,oBAACK,oBAAkBA;QACf,MAAK;QACL,QAAO;QACP,OAAOD,OAAO,KAAK,CAAC,SAAS;;AAI7C"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,141 @@
1
+ import react from "react";
2
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
+ import { cleanup, render, screen } from "@testing-library/react";
4
+ import { Container } from "@webiny/di";
5
+ import { DiContainerProvider } from "@webiny/app";
6
+ import { Route } from "@webiny/app/features/router/Route.js";
7
+ import { RouterWithConfig, useRouterConfig } from "@webiny/app/config/RouterConfig.js";
8
+ import { AdminConfig } from "@webiny/app-admin";
9
+ import { AdminConfigPlugin, AdminWithConfig, useAdminConfig } from "@webiny/app-admin/config/AdminConfig.js";
10
+ import { CompositionProvider } from "@webiny/react-composition";
11
+ import { createFakeAppAdapter } from "@webiny/app-workflows/editor/testing/fakeEditorAppAdapter.js";
12
+ import { findElements } from "@webiny/app-workflows/editor/testing/findElements.js";
13
+ import { WorkflowEditorView } from "@webiny/app-workflows/editor/presentation/editor/components/WorkflowEditorView.js";
14
+ import { WbWorkflowEditorAppAdapter } from "../features/editorMounting/abstractions.js";
15
+ import { WebsiteBuilderWorkflowsMenu } from "./WebsiteBuilderWorkflowsMenu.js";
16
+ const permission = vi.hoisted(()=>({
17
+ editor: true
18
+ }));
19
+ vi.mock("@webiny/app-workflows/presentation/permissions/useWorkflowsPermission.js", ()=>({
20
+ useWorkflowsPermission: ()=>({
21
+ editor: permission.editor,
22
+ reassign: false
23
+ })
24
+ }));
25
+ vi.mock("@webiny/app-workflows/editor/presentation/editor/components/WorkflowEditorView.js", ()=>({
26
+ WorkflowEditorView: ()=>null
27
+ }));
28
+ vi.mock("@webiny/app-admin", async (importOriginal)=>{
29
+ const actual = await importOriginal();
30
+ return {
31
+ ...actual,
32
+ useRouter: ()=>({
33
+ getLink: (route)=>route.path
34
+ })
35
+ };
36
+ });
37
+ const captured = {
38
+ routes: [],
39
+ menus: []
40
+ };
41
+ const Probe = ()=>{
42
+ const routerConfig = useRouterConfig();
43
+ const adminConfig = useAdminConfig();
44
+ captured.routes = routerConfig.routes.map((item)=>({
45
+ name: item.route.name,
46
+ element: item.element
47
+ }));
48
+ captured.menus = adminConfig.menus.map((menu)=>({
49
+ name: menu.name,
50
+ parent: menu.parent ?? null,
51
+ element: /*#__PURE__*/ react.isValidElement(menu.element) ? menu.element : void 0
52
+ }));
53
+ const routeNames = captured.routes.map((item)=>item.name);
54
+ const menuNames = captured.menus.map((item)=>`${item.name}:${item.parent ?? ""}`);
55
+ return /*#__PURE__*/ react.createElement("div", {
56
+ "data-testid": "probe",
57
+ "data-routes": routeNames.join(","),
58
+ "data-menus": menuNames.join(",")
59
+ });
60
+ };
61
+ const app = createFakeAppAdapter("wb");
62
+ const { Menu: Menu } = AdminConfig;
63
+ const sentinelRoute = new Route({
64
+ name: "Test/Sentinel",
65
+ path: "/test/sentinel"
66
+ });
67
+ const mount = async ()=>{
68
+ const container = new Container();
69
+ container.registerInstance(WbWorkflowEditorAppAdapter, app);
70
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
71
+ container: container
72
+ }, /*#__PURE__*/ react.createElement(CompositionProvider, null, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflowsMenu, null), /*#__PURE__*/ react.createElement(AdminConfig, null, /*#__PURE__*/ react.createElement(Menu, {
73
+ name: "test.sentinel",
74
+ element: /*#__PURE__*/ react.createElement("div", null)
75
+ }), /*#__PURE__*/ react.createElement(AdminConfig.Route, {
76
+ route: sentinelRoute,
77
+ element: /*#__PURE__*/ react.createElement("div", null)
78
+ })), /*#__PURE__*/ react.createElement(AdminWithConfig, null, AdminConfigPlugin, /*#__PURE__*/ react.createElement(RouterWithConfig, null, /*#__PURE__*/ react.createElement(Probe, null))))));
79
+ const probe = await screen.findByTestId("probe");
80
+ await vi.waitFor(()=>{
81
+ expect(probe.getAttribute("data-menus")).toContain("test.sentinel");
82
+ });
83
+ return captured;
84
+ };
85
+ describe("WebsiteBuilderWorkflowsMenu", ()=>{
86
+ beforeEach(()=>{
87
+ permission.editor = true;
88
+ captured.routes = [];
89
+ captured.menus = [];
90
+ });
91
+ afterEach(()=>{
92
+ cleanup();
93
+ });
94
+ it("registers the /website-builder/workflows route and the Website Builder menu item for an editor", async ()=>{
95
+ const result = await mount();
96
+ const routeNames = result.routes.map((item)=>item.name);
97
+ const menuNames = result.menus.map((item)=>`${item.name}:${item.parent ?? ""}`);
98
+ expect(routeNames).toContain("WebsiteBuilder/PageWorkflow");
99
+ expect(menuNames).toContain("websiteBuilder.pages.workflows:wb");
100
+ });
101
+ it("links the menu item to /website-builder/workflows", async ()=>{
102
+ const result = await mount();
103
+ const menu = result.menus.find((item)=>"websiteBuilder.pages.workflows" === item.name);
104
+ expect(menu?.element?.props.text).toBe("Workflows");
105
+ expect(menu?.element?.props.to).toBe("/website-builder/workflows");
106
+ });
107
+ it("gives the view the WB review use cases and the WB adapter, no editor use cases (R353)", async ()=>{
108
+ const result = await mount();
109
+ const route = result.routes.find((item)=>"WebsiteBuilder/PageWorkflow" === item.name);
110
+ if (!route) throw new Error("The editor route is not registered.");
111
+ const views = findElements(route.element, WorkflowEditorView);
112
+ expect(views).toHaveLength(1);
113
+ expect(views[0].props).not.toHaveProperty("useCases");
114
+ expect(Object.keys(views[0].props)).toEqual([
115
+ "app",
116
+ "breadcrumbName"
117
+ ]);
118
+ expect(views[0].props.app).toBe(app);
119
+ });
120
+ it("names the breadcrumbs Website Builder and Workflows", async ()=>{
121
+ const result = await mount();
122
+ const route = result.routes.find((item)=>"WebsiteBuilder/PageWorkflow" === item.name);
123
+ if (!route) throw new Error("The editor route is not registered.");
124
+ const breadcrumbs = findElements(route.element, AdminConfig.Breadcrumb);
125
+ const texts = breadcrumbs.map((item)=>`${item.props.name}:${item.props.label}`);
126
+ expect(texts).toEqual([
127
+ "wb:Website Builder",
128
+ "wb.workflows:Workflows"
129
+ ]);
130
+ });
131
+ it("registers the route but not the menu item without the editor permission", async ()=>{
132
+ permission.editor = false;
133
+ const result = await mount();
134
+ const routeNames = result.routes.map((item)=>item.name);
135
+ const menuNames = result.menus.map((item)=>item.name);
136
+ expect(routeNames).toContain("WebsiteBuilder/PageWorkflow");
137
+ expect(menuNames).not.toContain("websiteBuilder.pages.workflows");
138
+ });
139
+ });
140
+
141
+ //# sourceMappingURL=WebsiteBuilderWorkflowsMenu.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Routes/WebsiteBuilderWorkflowsMenu.test.js","sources":["../../src/Routes/WebsiteBuilderWorkflowsMenu.test.tsx"],"sourcesContent":["import React from \"react\";\nimport { afterEach } from \"vitest\";\nimport { beforeEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { cleanup } from \"@testing-library/react\";\nimport { render } from \"@testing-library/react\";\nimport { screen } from \"@testing-library/react\";\nimport { Container } from \"@webiny/di\";\nimport { DiContainerProvider } from \"@webiny/app\";\nimport { Route } from \"@webiny/app/features/router/Route.js\";\nimport { RouterWithConfig } from \"@webiny/app/config/RouterConfig.js\";\nimport { useRouterConfig } from \"@webiny/app/config/RouterConfig.js\";\nimport { AdminConfig } from \"@webiny/app-admin\";\nimport { AdminConfigPlugin } from \"@webiny/app-admin/config/AdminConfig.js\";\nimport { AdminWithConfig } from \"@webiny/app-admin/config/AdminConfig.js\";\nimport { useAdminConfig } from \"@webiny/app-admin/config/AdminConfig.js\";\nimport { CompositionProvider } from \"@webiny/react-composition\";\nimport { createFakeAppAdapter } from \"@webiny/app-workflows/editor/testing/fakeEditorAppAdapter.js\";\nimport { findElements } from \"@webiny/app-workflows/editor/testing/findElements.js\";\nimport { WorkflowEditorView } from \"@webiny/app-workflows/editor/presentation/editor/components/WorkflowEditorView.js\";\nimport { WbWorkflowEditorAppAdapter } from \"~/features/editorMounting/abstractions.js\";\nimport { WebsiteBuilderWorkflowsMenu } from \"./WebsiteBuilderWorkflowsMenu.js\";\n\ninterface RouteStub {\n path: string;\n}\n\nconst permission = vi.hoisted(() => {\n return { editor: true };\n});\n\nvi.mock(\"@webiny/app-workflows/presentation/permissions/useWorkflowsPermission.js\", () => {\n return {\n useWorkflowsPermission: () => {\n return { editor: permission.editor, reassign: false };\n }\n };\n});\n\nvi.mock(\"@webiny/app-workflows/editor/presentation/editor/components/WorkflowEditorView.js\", () => {\n return { WorkflowEditorView: () => null };\n});\n\nvi.mock(\"@webiny/app-admin\", async importOriginal => {\n const actual = await importOriginal<typeof import(\"@webiny/app-admin\")>();\n return {\n ...actual,\n useRouter: () => {\n return { getLink: (route: RouteStub) => route.path };\n }\n };\n});\n\ninterface CapturedRoute {\n name: string;\n element: React.ReactElement;\n}\n\ninterface CapturedMenu {\n name: string;\n parent: string | null;\n element: React.ReactElement<Record<string, unknown>> | undefined;\n}\n\ninterface Captured {\n routes: CapturedRoute[];\n menus: CapturedMenu[];\n}\n\nconst captured: Captured = { routes: [], menus: [] };\n\nconst Probe = () => {\n const routerConfig = useRouterConfig();\n const adminConfig = useAdminConfig();\n captured.routes = routerConfig.routes.map(item => {\n return { name: item.route.name, element: item.element };\n });\n captured.menus = adminConfig.menus.map(menu => {\n return {\n name: menu.name,\n parent: menu.parent ?? null,\n // A guard, not a cast: only an element whose props can be read is kept.\n element: React.isValidElement<Record<string, unknown>>(menu.element)\n ? menu.element\n : undefined\n };\n });\n const routeNames = captured.routes.map(item => item.name);\n const menuNames = captured.menus.map(item => `${item.name}:${item.parent ?? \"\"}`);\n\n return (\n <div\n data-testid=\"probe\"\n data-routes={routeNames.join(\",\")}\n data-menus={menuNames.join(\",\")}\n />\n );\n};\n\nconst app = createFakeAppAdapter(\"wb\");\n\nconst { Menu } = AdminConfig;\n\n// The router renders nothing without a route, so a sentinel keeps the probe mounted.\nconst sentinelRoute = new Route({ name: \"Test/Sentinel\", path: \"/test/sentinel\" });\n\n// The real mounting feature resolves the two tokens, which the test registers as instances.\nconst mount = async (): Promise<Captured> => {\n const container = new Container();\n container.registerInstance(WbWorkflowEditorAppAdapter, app);\n\n render(\n <DiContainerProvider container={container}>\n <CompositionProvider>\n <WebsiteBuilderWorkflowsMenu />\n <AdminConfig>\n <Menu name=\"test.sentinel\" element={<div />} />\n <AdminConfig.Route route={sentinelRoute} element={<div />} />\n </AdminConfig>\n <AdminWithConfig>\n {AdminConfigPlugin}\n <RouterWithConfig>\n <Probe />\n </RouterWithConfig>\n </AdminWithConfig>\n </CompositionProvider>\n </DiContainerProvider>\n );\n\n const probe = await screen.findByTestId(\"probe\");\n // The sentinel menu proves the configs flushed, so a missing editor route or menu is real.\n await vi.waitFor(() => {\n expect(probe.getAttribute(\"data-menus\")).toContain(\"test.sentinel\");\n });\n\n return captured;\n};\n\ndescribe(\"WebsiteBuilderWorkflowsMenu\", () => {\n beforeEach(() => {\n permission.editor = true;\n captured.routes = [];\n captured.menus = [];\n });\n\n afterEach(() => {\n cleanup();\n });\n\n it(\"registers the /website-builder/workflows route and the Website Builder menu item for an editor\", async () => {\n const result = await mount();\n const routeNames = result.routes.map(item => item.name);\n const menuNames = result.menus.map(item => `${item.name}:${item.parent ?? \"\"}`);\n\n expect(routeNames).toContain(\"WebsiteBuilder/PageWorkflow\");\n expect(menuNames).toContain(\"websiteBuilder.pages.workflows:wb\");\n });\n\n it(\"links the menu item to /website-builder/workflows\", async () => {\n const result = await mount();\n\n const menu = result.menus.find(item => item.name === \"websiteBuilder.pages.workflows\");\n\n expect(menu?.element?.props.text).toBe(\"Workflows\");\n expect(menu?.element?.props.to).toBe(\"/website-builder/workflows\");\n });\n\n it(\"gives the view the WB review use cases and the WB adapter, no editor use cases (R353)\", async () => {\n const result = await mount();\n const route = result.routes.find(item => item.name === \"WebsiteBuilder/PageWorkflow\");\n if (!route) {\n throw new Error(\"The editor route is not registered.\");\n }\n\n const views = findElements(route.element, WorkflowEditorView);\n\n expect(views).toHaveLength(1);\n expect(views[0].props).not.toHaveProperty(\"useCases\");\n expect(Object.keys(views[0].props)).toEqual([\"app\", \"breadcrumbName\"]);\n expect(views[0].props.app).toBe(app);\n });\n\n it(\"names the breadcrumbs Website Builder and Workflows\", async () => {\n const result = await mount();\n const route = result.routes.find(item => item.name === \"WebsiteBuilder/PageWorkflow\");\n if (!route) {\n throw new Error(\"The editor route is not registered.\");\n }\n\n const breadcrumbs = findElements(route.element, AdminConfig.Breadcrumb);\n const texts = breadcrumbs.map(item => `${item.props.name}:${item.props.label}`);\n\n expect(texts).toEqual([\"wb:Website Builder\", \"wb.workflows:Workflows\"]);\n });\n\n it(\"registers the route but not the menu item without the editor permission\", async () => {\n permission.editor = false;\n\n const result = await mount();\n const routeNames = result.routes.map(item => item.name);\n const menuNames = result.menus.map(item => item.name);\n\n expect(routeNames).toContain(\"WebsiteBuilder/PageWorkflow\");\n expect(menuNames).not.toContain(\"websiteBuilder.pages.workflows\");\n });\n});\n"],"names":["permission","vi","importOriginal","actual","route","captured","Probe","routerConfig","useRouterConfig","adminConfig","useAdminConfig","item","menu","React","undefined","routeNames","menuNames","app","createFakeAppAdapter","Menu","AdminConfig","sentinelRoute","Route","mount","container","Container","WbWorkflowEditorAppAdapter","render","DiContainerProvider","CompositionProvider","WebsiteBuilderWorkflowsMenu","AdminWithConfig","AdminConfigPlugin","RouterWithConfig","probe","screen","expect","describe","beforeEach","afterEach","cleanup","it","result","Error","views","findElements","WorkflowEditorView","Object","breadcrumbs","texts"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { WebsiteBuilderWorkflowsMenu } from "./WebsiteBuilderWorkflowsMenu.js";
@@ -0,0 +1 @@
1
+ export { WebsiteBuilderWorkflowsMenu } from "./WebsiteBuilderWorkflowsMenu.js";
package/constants.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare const WB_PAGE_APP = "wb.page";
package/constants.js ADDED
@@ -0,0 +1,4 @@
1
+ const WB_PAGE_APP = "wb.page";
2
+ export { WB_PAGE_APP };
3
+
4
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../src/constants.ts"],"sourcesContent":["export const WB_PAGE_APP = \"wb.page\";\n"],"names":["WB_PAGE_APP"],"mappings":"AAAO,MAAMA,cAAc"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,128 @@
1
+ import react from "react";
2
+ import { cleanup, render, screen } from "@testing-library/react";
3
+ import { afterEach, describe, expect, it, vi } from "vitest";
4
+ import { Container } from "@webiny/di";
5
+ import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/abstractions.js";
6
+ import { PageEditorConfig } from "@webiny/app-website-builder/presentation/pages/PageEditor/PageEditorConfig.js";
7
+ import { TargetReviewPresenter } from "@webiny/app-workflows/review/presentation/targetReview/abstractions.js";
8
+ import { CmsEntryReview } from "@webiny/app-headless-cms-workflows/features/editorReview/abstractions.js";
9
+ import { CmsEntryReviewFeature } from "@webiny/app-headless-cms-workflows/features/editorReview/feature.js";
10
+ import { CmsReviewFeature } from "@webiny/app-headless-cms-workflows/features/gateway/feature.js";
11
+ import { WbPageReview } from "./features/editorReview/abstractions.js";
12
+ import { WbEditorHarness } from "./testing/WbEditorHarness.js";
13
+ import { createFakeSession } from "./testing/createFakeSession.js";
14
+ import { createPageEditor } from "./testing/createPageEditor.js";
15
+ import { registerPageContent } from "./testing/registerPageContent.js";
16
+ import { WebsiteBuilderWorkflows } from "./index.js";
17
+ const flags = vi.hoisted(()=>({
18
+ enabled: true
19
+ }));
20
+ vi.mock("@webiny/icons/info.svg", ()=>({
21
+ ReactComponent: ()=>null
22
+ }));
23
+ vi.mock("@webiny/app-admin", async (importOriginal)=>{
24
+ const actual = await importOriginal();
25
+ return {
26
+ ...actual,
27
+ useFeatureFlags: ()=>({
28
+ isEnabled: ()=>flags.enabled
29
+ })
30
+ };
31
+ });
32
+ vi.mock("~/Routes/index.js", ()=>({
33
+ WebsiteBuilderWorkflowsMenu: ()=>null
34
+ }));
35
+ vi.mock("~/Components/PagesList/index.js", ()=>({
36
+ PagesList: ()=>null
37
+ }));
38
+ vi.mock("~/Components/ContentReviews/WbContentReviews.js", ()=>({
39
+ WbContentReviews: ()=>null
40
+ }));
41
+ vi.mock("@webiny/app-website-builder/BaseEditor/config/Layout.js", async ()=>{
42
+ const React = await import("react");
43
+ const { makeDecoratable } = await import("@webiny/react-composition");
44
+ const Layout = makeDecoratable("EditorLayout", ()=>React.createElement("div", {
45
+ "data-testid": "base-layout"
46
+ }));
47
+ return {
48
+ Layout
49
+ };
50
+ });
51
+ vi.mock("@webiny/app-website-builder/BaseEditor/config/TopBar/Layout.js", async ()=>{
52
+ const React = await import("react");
53
+ const { makeDecoratable } = await import("@webiny/react-composition");
54
+ const Layout = makeDecoratable("TopBarLayout", ()=>React.createElement("div", {
55
+ "data-testid": "base-top-bar"
56
+ }));
57
+ return {
58
+ Layout,
59
+ TopBarOptionsMenu: ()=>null
60
+ };
61
+ });
62
+ vi.mock("@webiny/app-workflows/review/editor/components/EditorReviewBar.js", async ()=>{
63
+ const React = await import("react");
64
+ const EditorReviewBar = ()=>React.createElement("div", {
65
+ "data-testid": "review-bar"
66
+ });
67
+ return {
68
+ EditorReviewBar
69
+ };
70
+ });
71
+ const { Ui: Ui } = PageEditorConfig;
72
+ const mountRoot = (enabled)=>{
73
+ flags.enabled = enabled;
74
+ const handle = createFakeSession("inProgress");
75
+ const container = new Container();
76
+ container.registerInstance(TargetReviewPresenter, handle.presenter);
77
+ container.registerInstance(MainGraphQLClient, {
78
+ execute: vi.fn()
79
+ });
80
+ registerPageContent(container);
81
+ const editor = createPageEditor("draft");
82
+ render(/*#__PURE__*/ react.createElement(WbEditorHarness, {
83
+ container: container,
84
+ editor: editor
85
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null), /*#__PURE__*/ react.createElement(Ui.Layout, null), /*#__PURE__*/ react.createElement(Ui.TopBar.Layout, null)));
86
+ return {
87
+ ...handle,
88
+ container,
89
+ editor
90
+ };
91
+ };
92
+ describe("Website Builder editor glue from the composition root", ()=>{
93
+ afterEach(()=>{
94
+ cleanup();
95
+ });
96
+ it("flag on: the session is registered over the shared presenter, without use cases (R352)", ()=>{
97
+ const { container, presenter } = mountRoot(true);
98
+ const session = container.resolve(WbPageReview);
99
+ expect(session.presenter).toBe(presenter);
100
+ expect(session).not.toHaveProperty("useCases");
101
+ });
102
+ it("flag on: this app's session and the CMS editor session coexist in one container (R237)", ()=>{
103
+ const { container, presenter } = mountRoot(true);
104
+ CmsReviewFeature.register(container);
105
+ CmsEntryReviewFeature.register(container);
106
+ const wbSession = container.resolve(WbPageReview);
107
+ const cmsSession = container.resolve(CmsEntryReview);
108
+ expect(cmsSession).not.toBe(wbSession);
109
+ expect(wbSession.presenter).toBe(presenter);
110
+ expect(cmsSession.presenter).toBe(presenter);
111
+ expect(wbSession.constructor).not.toBe(cmsSession.constructor);
112
+ });
113
+ it("flag on: the bar is mounted under the top bar and the canvas follows the review", ()=>{
114
+ const { presenter, editor } = mountRoot(true);
115
+ expect(screen.getAllByTestId("review-bar")).toHaveLength(1);
116
+ expect(presenter.init).toHaveBeenCalledTimes(1);
117
+ expect(editor.getEditorState().read().isReadOnly).toBe(true);
118
+ });
119
+ it("flag off: nothing is registered or mounted", ()=>{
120
+ const { container, presenter, editor } = mountRoot(false);
121
+ expect(()=>container.resolve(WbPageReview)).toThrow();
122
+ expect(screen.queryByTestId("review-bar")).toBeNull();
123
+ expect(presenter.init).not.toHaveBeenCalled();
124
+ expect(editor.getEditorState().read().isReadOnly).toBe(false);
125
+ });
126
+ });
127
+
128
+ //# sourceMappingURL=editorGlue.wiring.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorGlue.wiring.test.js","sources":["../src/editorGlue.wiring.test.tsx"],"sourcesContent":["import React from \"react\";\nimport { cleanup } from \"@testing-library/react\";\nimport { render } from \"@testing-library/react\";\nimport { screen } from \"@testing-library/react\";\nimport { afterEach } 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 { PageEditorConfig } from \"@webiny/app-website-builder/presentation/pages/PageEditor/PageEditorConfig.js\";\nimport { TargetReviewPresenter } from \"@webiny/app-workflows/review/presentation/targetReview/abstractions.js\";\nimport { CmsEntryReview } from \"@webiny/app-headless-cms-workflows/features/editorReview/abstractions.js\";\nimport { CmsEntryReviewFeature } from \"@webiny/app-headless-cms-workflows/features/editorReview/feature.js\";\nimport { CmsReviewFeature } from \"@webiny/app-headless-cms-workflows/features/gateway/feature.js\";\nimport { WbPageReview } from \"~/features/editorReview/abstractions.js\";\nimport { WbEditorHarness } from \"~/testing/WbEditorHarness.js\";\nimport { createFakeSession } from \"~/testing/createFakeSession.js\";\nimport { createPageEditor } from \"~/testing/createPageEditor.js\";\nimport { registerPageContent } from \"~/testing/registerPageContent.js\";\nimport { WebsiteBuilderWorkflows } from \"~/index.js\";\n\nconst flags = vi.hoisted(() => {\n return { enabled: true };\n});\n\nvi.mock(\"@webiny/icons/info.svg\", () => {\n return { ReactComponent: () => null };\n});\n\nvi.mock(\"@webiny/app-admin\", async importOriginal => {\n const actual = await importOriginal<typeof import(\"@webiny/app-admin\")>();\n return { ...actual, useFeatureFlags: () => ({ isEnabled: () => flags.enabled }) };\n});\n\nvi.mock(\"~/Routes/index.js\", () => {\n return { WebsiteBuilderWorkflowsMenu: () => null };\n});\n\nvi.mock(\"~/Components/PagesList/index.js\", () => {\n return { PagesList: () => null };\n});\n\nvi.mock(\"~/Components/ContentReviews/WbContentReviews.js\", () => {\n return { WbContentReviews: () => null };\n});\n\nvi.mock(\"@webiny/app-website-builder/BaseEditor/config/Layout.js\", async () => {\n const React = await import(\"react\");\n const { makeDecoratable } = await import(\"@webiny/react-composition\");\n const Layout = makeDecoratable(\"EditorLayout\", () => {\n return React.createElement(\"div\", { \"data-testid\": \"base-layout\" });\n });\n return { Layout };\n});\n\nvi.mock(\"@webiny/app-website-builder/BaseEditor/config/TopBar/Layout.js\", async () => {\n const React = await import(\"react\");\n const { makeDecoratable } = await import(\"@webiny/react-composition\");\n const Layout = makeDecoratable(\"TopBarLayout\", () => {\n return React.createElement(\"div\", { \"data-testid\": \"base-top-bar\" });\n });\n return { Layout, TopBarOptionsMenu: () => null };\n});\n\nvi.mock(\"@webiny/app-workflows/review/editor/components/EditorReviewBar.js\", async () => {\n const React = await import(\"react\");\n const EditorReviewBar = () => {\n return React.createElement(\"div\", { \"data-testid\": \"review-bar\" });\n };\n return { EditorReviewBar };\n});\n\nconst { Ui } = PageEditorConfig;\n\nconst mountRoot = (enabled: boolean) => {\n flags.enabled = enabled;\n const handle = createFakeSession(\"inProgress\");\n const container = new Container();\n container.registerInstance(TargetReviewPresenter, handle.presenter);\n container.registerInstance(MainGraphQLClient, { execute: vi.fn() });\n registerPageContent(container);\n const editor = createPageEditor(\"draft\");\n\n render(\n <WbEditorHarness container={container} editor={editor}>\n <WebsiteBuilderWorkflows />\n <Ui.Layout />\n <Ui.TopBar.Layout />\n </WbEditorHarness>\n );\n\n return { ...handle, container, editor };\n};\n\ndescribe(\"Website Builder editor glue from the composition root\", () => {\n afterEach(() => {\n cleanup();\n });\n\n it(\"flag on: the session is registered over the shared presenter, without use cases (R352)\", () => {\n const { container, presenter } = mountRoot(true);\n\n const session = container.resolve(WbPageReview);\n expect(session.presenter).toBe(presenter);\n expect(session).not.toHaveProperty(\"useCases\");\n });\n\n it(\"flag on: this app's session and the CMS editor session coexist in one container (R237)\", () => {\n const { container, presenter } = mountRoot(true);\n CmsReviewFeature.register(container);\n CmsEntryReviewFeature.register(container);\n\n const wbSession = container.resolve(WbPageReview);\n const cmsSession = container.resolve(CmsEntryReview);\n\n expect(cmsSession).not.toBe(wbSession);\n expect(wbSession.presenter).toBe(presenter);\n expect(cmsSession.presenter).toBe(presenter);\n expect(wbSession.constructor).not.toBe(cmsSession.constructor);\n });\n\n it(\"flag on: the bar is mounted under the top bar and the canvas follows the review\", () => {\n const { presenter, editor } = mountRoot(true);\n\n expect(screen.getAllByTestId(\"review-bar\")).toHaveLength(1);\n expect(presenter.init).toHaveBeenCalledTimes(1);\n expect(editor.getEditorState().read().isReadOnly).toBe(true);\n });\n\n it(\"flag off: nothing is registered or mounted\", () => {\n const { container, presenter, editor } = mountRoot(false);\n\n expect(() => container.resolve(WbPageReview)).toThrow();\n expect(screen.queryByTestId(\"review-bar\")).toBeNull();\n expect(presenter.init).not.toHaveBeenCalled();\n expect(editor.getEditorState().read().isReadOnly).toBe(false);\n });\n});\n"],"names":["flags","vi","importOriginal","actual","React","makeDecoratable","Layout","EditorReviewBar","Ui","PageEditorConfig","mountRoot","enabled","handle","createFakeSession","container","Container","TargetReviewPresenter","MainGraphQLClient","registerPageContent","editor","createPageEditor","render","WbEditorHarness","WebsiteBuilderWorkflows","describe","afterEach","cleanup","it","presenter","session","WbPageReview","expect","CmsReviewFeature","CmsEntryReviewFeature","wbSession","cmsSession","CmsEntryReview","screen"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { ReviewCacheSyncHandler } from "@webiny/app-workflows/review/cache/ReviewCacheSyncHandler.js";
2
+ import { ReviewChangedHandler } from "@webiny/app-workflows/review/events/ReviewChangedHandler.js";
3
+ declare class WbReviewCacheSyncHandlerImpl extends ReviewCacheSyncHandler implements ReviewChangedHandler.Interface {
4
+ }
5
+ export declare const WbReviewCacheSyncHandler: typeof WbReviewCacheSyncHandlerImpl & {
6
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/app/features/eventPublisher/abstractions.js").IEventHandler<import("@webiny/app-workflows/review/events/ReviewChangedEvent.js").ReviewChangedEvent>>;
7
+ };
8
+ export {};
@@ -0,0 +1,14 @@
1
+ import { ReviewCacheSyncHandler } from "@webiny/app-workflows/review/cache/ReviewCacheSyncHandler.js";
2
+ import { ReviewChangedHandler } from "@webiny/app-workflows/review/events/ReviewChangedHandler.js";
3
+ import { WbReviewPageCacheWriter } from "./abstractions.js";
4
+ class WbReviewCacheSyncHandlerImpl extends ReviewCacheSyncHandler {
5
+ }
6
+ const WbReviewCacheSyncHandler = ReviewChangedHandler.createImplementation({
7
+ implementation: WbReviewCacheSyncHandlerImpl,
8
+ dependencies: [
9
+ WbReviewPageCacheWriter
10
+ ]
11
+ });
12
+ export { WbReviewCacheSyncHandler };
13
+
14
+ //# sourceMappingURL=WbReviewCacheSyncHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/cache/WbReviewCacheSyncHandler.js","sources":["../../../src/features/cache/WbReviewCacheSyncHandler.ts"],"sourcesContent":["import { ReviewCacheSyncHandler } from \"@webiny/app-workflows/review/cache/ReviewCacheSyncHandler.js\";\nimport { ReviewChangedHandler } from \"@webiny/app-workflows/review/events/ReviewChangedHandler.js\";\nimport { WbReviewPageCacheWriter } from \"./abstractions.js\";\n\n/*\n * The shared handler is never registered itself: `createImplementation` stores the abstraction and\n * dependencies on the class, so each app subclasses it once (R237).\n */\nclass WbReviewCacheSyncHandlerImpl\n extends ReviewCacheSyncHandler\n implements ReviewChangedHandler.Interface {}\n\nexport const WbReviewCacheSyncHandler = ReviewChangedHandler.createImplementation({\n implementation: WbReviewCacheSyncHandlerImpl,\n dependencies: [WbReviewPageCacheWriter]\n});\n"],"names":["WbReviewCacheSyncHandlerImpl","ReviewCacheSyncHandler","WbReviewCacheSyncHandler","ReviewChangedHandler","WbReviewPageCacheWriter"],"mappings":";;;AAQA,MAAMA,qCACMC;AACmC;AAExC,MAAMC,2BAA2BC,qBAAqB,oBAAoB,CAAC;IAC9E,gBAAgBH;IAChB,cAAc;QAACI;KAAwB;AAC3C"}
@@ -0,0 +1,17 @@
1
+ import type { ReviewCacheRef } from "@webiny/app-workflows/review/cache/IReviewCacheWriter.js";
2
+ import type { SystemWorkflowValue } from "@webiny/app-workflows/review/domain/types.js";
3
+ import { FullPageCache } from "@webiny/app-website-builder/features/pages/shared/abstractions.js";
4
+ import { PageListCache } from "@webiny/app-website-builder/features/pages/shared/abstractions.js";
5
+ import "~/types.js";
6
+ import { WbReviewPageCacheWriter as Abstraction } from "./abstractions.js";
7
+ declare class WbReviewPageCacheWriterImpl implements Abstraction.Interface {
8
+ private pageListCache;
9
+ private fullPageCache;
10
+ constructor(pageListCache: PageListCache.Interface, fullPageCache: FullPageCache.Interface);
11
+ canHandle(namespace: string): boolean;
12
+ write(ref: ReviewCacheRef, workflow: SystemWorkflowValue | null): void;
13
+ }
14
+ export declare const WbReviewPageCacheWriter: typeof WbReviewPageCacheWriterImpl & {
15
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/app-workflows/review/cache/IReviewCacheWriter.js").IReviewCacheWriter>;
16
+ };
17
+ export {};
@@ -0,0 +1,39 @@
1
+ import { Page } from "@webiny/app-website-builder/domain/Page/index.js";
2
+ import { FullPageCache, PageListCache } from "@webiny/app-website-builder/features/pages/shared/abstractions.js";
3
+ import { WB_PAGE_APP } from "../../constants.js";
4
+ import "../../types.js";
5
+ import { WbReviewPageCacheWriter } from "./abstractions.js";
6
+ class WbReviewPageCacheWriterImpl {
7
+ constructor(pageListCache, fullPageCache){
8
+ this.pageListCache = pageListCache;
9
+ this.fullPageCache = fullPageCache;
10
+ }
11
+ canHandle(namespace) {
12
+ return namespace === WB_PAGE_APP;
13
+ }
14
+ write(ref, workflow) {
15
+ const updatePage = (page)=>{
16
+ if (page.id !== ref.targetRevisionId) return page;
17
+ const system = {
18
+ ...page.system,
19
+ workflow
20
+ };
21
+ return Page.create({
22
+ ...page,
23
+ system
24
+ });
25
+ };
26
+ this.pageListCache.updateItems(updatePage);
27
+ this.fullPageCache.updateItems(updatePage);
28
+ }
29
+ }
30
+ const WbReviewPageCacheWriter_WbReviewPageCacheWriter = WbReviewPageCacheWriter.createImplementation({
31
+ implementation: WbReviewPageCacheWriterImpl,
32
+ dependencies: [
33
+ PageListCache,
34
+ FullPageCache
35
+ ]
36
+ });
37
+ export { WbReviewPageCacheWriter_WbReviewPageCacheWriter as WbReviewPageCacheWriter };
38
+
39
+ //# sourceMappingURL=WbReviewPageCacheWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/cache/WbReviewPageCacheWriter.js","sources":["../../../src/features/cache/WbReviewPageCacheWriter.ts"],"sourcesContent":["import type { ReviewCacheRef } from \"@webiny/app-workflows/review/cache/IReviewCacheWriter.js\";\nimport type { SystemWorkflowValue } from \"@webiny/app-workflows/review/domain/types.js\";\nimport { Page } from \"@webiny/app-website-builder/domain/Page/index.js\";\nimport { FullPageCache } from \"@webiny/app-website-builder/features/pages/shared/abstractions.js\";\nimport { PageListCache } from \"@webiny/app-website-builder/features/pages/shared/abstractions.js\";\nimport type { WbPageSystem } from \"@webiny/app-website-builder/types.js\";\nimport { WB_PAGE_APP } from \"~/constants.js\";\nimport \"~/types.js\";\nimport { WbReviewPageCacheWriter as Abstraction } from \"./abstractions.js\";\n\nclass WbReviewPageCacheWriterImpl implements Abstraction.Interface {\n constructor(\n private pageListCache: PageListCache.Interface,\n private fullPageCache: FullPageCache.Interface\n ) {}\n\n canHandle(namespace: string): boolean {\n return namespace === WB_PAGE_APP;\n }\n\n write(ref: ReviewCacheRef, workflow: SystemWorkflowValue | null): void {\n /*\n * Only the revision the review belongs to is updated: a review of an older revision must\n * not mark the latest revision held by the list cache.\n */\n const updatePage = (page: Page): Page => {\n if (page.id !== ref.targetRevisionId) {\n return page;\n }\n\n const system: WbPageSystem = { ...page.system, workflow };\n return Page.create({ ...page, system });\n };\n\n this.pageListCache.updateItems(updatePage);\n this.fullPageCache.updateItems(updatePage);\n }\n}\n\nexport const WbReviewPageCacheWriter = Abstraction.createImplementation({\n implementation: WbReviewPageCacheWriterImpl,\n dependencies: [PageListCache, FullPageCache]\n});\n"],"names":["WbReviewPageCacheWriterImpl","pageListCache","fullPageCache","namespace","WB_PAGE_APP","ref","workflow","updatePage","page","system","Page","WbReviewPageCacheWriter","Abstraction","PageListCache","FullPageCache"],"mappings":";;;;;AAUA,MAAMA;IACF,YACYC,aAAsC,EACtCC,aAAsC,CAChD;aAFUD,aAAa,GAAbA;aACAC,aAAa,GAAbA;IACT;IAEH,UAAUC,SAAiB,EAAW;QAClC,OAAOA,cAAcC;IACzB;IAEA,MAAMC,GAAmB,EAAEC,QAAoC,EAAQ;QAKnE,MAAMC,aAAa,CAACC;YAChB,IAAIA,KAAK,EAAE,KAAKH,IAAI,gBAAgB,EAChC,OAAOG;YAGX,MAAMC,SAAuB;gBAAE,GAAGD,KAAK,MAAM;gBAAEF;YAAS;YACxD,OAAOI,KAAK,MAAM,CAAC;gBAAE,GAAGF,IAAI;gBAAEC;YAAO;QACzC;QAEA,IAAI,CAAC,aAAa,CAAC,WAAW,CAACF;QAC/B,IAAI,CAAC,aAAa,CAAC,WAAW,CAACA;IACnC;AACJ;AAEO,MAAMI,kDAA0BC,wBAAAA,oBAAgC,CAAC;IACpE,gBAAgBZ;IAChB,cAAc;QAACa;QAAeC;KAAc;AAChD"}
@@ -0,0 +1 @@
1
+ import "~/types.js";
@@ -0,0 +1,115 @@
1
+ import { beforeEach, describe, expect, it } from "vitest";
2
+ import { Container } from "@webiny/di";
3
+ import { ListCache } from "@webiny/app-admin/features/listCache/index.js";
4
+ import { Page } from "@webiny/app-website-builder/domain/Page/index.js";
5
+ import { WbPageStatus } from "@webiny/app-website-builder/constants.js";
6
+ import { FullPageCache, PageListCache } from "@webiny/app-website-builder/features/pages/shared/abstractions.js";
7
+ import { ReviewState } from "@webiny/app-workflows/review/domain/ReviewState.js";
8
+ import { StepState } from "@webiny/app-workflows/review/domain/StepState.js";
9
+ import "../../types.js";
10
+ import { WbReviewPageCacheWriter } from "./abstractions.js";
11
+ import { WbReviewPageCacheWriter as external_WbReviewPageCacheWriter_js_WbReviewPageCacheWriter } from "./WbReviewPageCacheWriter.js";
12
+ const WORKFLOW = {
13
+ workflowId: "workflow-1",
14
+ reviewState: ReviewState.InProgress,
15
+ stepId: "step-1",
16
+ stepName: "Legal",
17
+ stepState: StepState.InReview
18
+ };
19
+ const createPage = (id, entryId, title)=>Page.create({
20
+ id,
21
+ entryId,
22
+ status: WbPageStatus.Draft,
23
+ properties: {
24
+ title
25
+ }
26
+ });
27
+ const snapshot = (cache)=>JSON.parse(JSON.stringify(cache.getItems()));
28
+ describe("WbReviewPageCacheWriter", ()=>{
29
+ let listCache;
30
+ let fullCache;
31
+ let writer;
32
+ beforeEach(()=>{
33
+ listCache = new ListCache("entryId");
34
+ fullCache = new ListCache("id");
35
+ listCache.addItems([
36
+ createPage("page-1#0002", "page-1", "Home"),
37
+ createPage("page-2#0001", "page-2", "About")
38
+ ]);
39
+ fullCache.addItems([
40
+ createPage("page-1#0002", "page-1", "Home"),
41
+ createPage("page-1#0001", "page-1", "Home old")
42
+ ]);
43
+ const container = new Container();
44
+ container.registerInstance(PageListCache, listCache);
45
+ container.registerInstance(FullPageCache, fullCache);
46
+ container.register(external_WbReviewPageCacheWriter_js_WbReviewPageCacheWriter);
47
+ writer = container.resolve(WbReviewPageCacheWriter);
48
+ });
49
+ it("handles only the Website Builder page namespace", ()=>{
50
+ expect(writer.canHandle("wb.page")).toBe(true);
51
+ expect(writer.canHandle("cms.article")).toBe(false);
52
+ });
53
+ it("puts the workflow on the matching revision in both caches and nothing else", ()=>{
54
+ writer.write({
55
+ namespace: "wb.page",
56
+ targetId: "page-1",
57
+ targetRevisionId: "page-1#0002"
58
+ }, WORKFLOW);
59
+ const listItems = listCache.getItems();
60
+ const home = listItems.find((page)=>"page-1" === page.entryId);
61
+ const about = listItems.find((page)=>"page-2" === page.entryId);
62
+ expect(home?.system?.workflow).toEqual(WORKFLOW);
63
+ expect(about?.system).toBeNull();
64
+ const fullItems = fullCache.getItems();
65
+ const latest = fullItems.find((page)=>"page-1#0002" === page.id);
66
+ const older = fullItems.find((page)=>"page-1#0001" === page.id);
67
+ expect(latest?.system?.workflow).toEqual(WORKFLOW);
68
+ expect(older?.system).toBeNull();
69
+ });
70
+ it("a review of an older revision does not mark the latest row", ()=>{
71
+ writer.write({
72
+ namespace: "wb.page",
73
+ targetId: "page-1",
74
+ targetRevisionId: "page-1#0001"
75
+ }, WORKFLOW);
76
+ const home = listCache.getItems().find((page)=>"page-1" === page.entryId);
77
+ expect(home?.system).toBeNull();
78
+ const older = fullCache.getItems().find((page)=>"page-1#0001" === page.id);
79
+ expect(older?.system?.workflow).toEqual(WORKFLOW);
80
+ });
81
+ it("clears the workflow with null", ()=>{
82
+ const ref = {
83
+ namespace: "wb.page",
84
+ targetId: "page-1",
85
+ targetRevisionId: "page-1#0002"
86
+ };
87
+ writer.write(ref, WORKFLOW);
88
+ writer.write(ref, null);
89
+ const home = listCache.getItems().find((page)=>"page-1" === page.entryId);
90
+ expect(home?.system?.workflow).toBeNull();
91
+ const latest = fullCache.getItems().find((page)=>"page-1#0002" === page.id);
92
+ expect(latest?.system?.workflow).toBeNull();
93
+ });
94
+ it("keeps the other fields of the page and is a no-op for a page that is not cached", ()=>{
95
+ const listBefore = snapshot(listCache);
96
+ const fullBefore = snapshot(fullCache);
97
+ writer.write({
98
+ namespace: "wb.page",
99
+ targetId: "page-9",
100
+ targetRevisionId: "page-9#0001"
101
+ }, WORKFLOW);
102
+ expect(snapshot(listCache)).toEqual(listBefore);
103
+ expect(snapshot(fullCache)).toEqual(fullBefore);
104
+ writer.write({
105
+ namespace: "wb.page",
106
+ targetId: "page-1",
107
+ targetRevisionId: "page-1#0002"
108
+ }, WORKFLOW);
109
+ const home = listCache.getItems().find((page)=>"page-1" === page.entryId);
110
+ expect(home?.properties.title).toBe("Home");
111
+ expect(home?.id).toBe("page-1#0002");
112
+ });
113
+ });
114
+
115
+ //# sourceMappingURL=WbReviewPageCacheWriter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/cache/WbReviewPageCacheWriter.test.js","sources":["../../../src/features/cache/WbReviewPageCacheWriter.test.ts"],"sourcesContent":["import { beforeEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { ListCache } from \"@webiny/app-admin/features/listCache/index.js\";\nimport { Page } from \"@webiny/app-website-builder/domain/Page/index.js\";\nimport { WbPageStatus } from \"@webiny/app-website-builder/constants.js\";\nimport { FullPageCache } from \"@webiny/app-website-builder/features/pages/shared/abstractions.js\";\nimport { PageListCache } from \"@webiny/app-website-builder/features/pages/shared/abstractions.js\";\nimport { ReviewState } from \"@webiny/app-workflows/review/domain/ReviewState.js\";\nimport { StepState } from \"@webiny/app-workflows/review/domain/StepState.js\";\nimport type { SystemWorkflowValue } from \"@webiny/app-workflows/review/domain/types.js\";\nimport \"~/types.js\";\nimport { WbReviewPageCacheWriter as WriterAbstraction } from \"./abstractions.js\";\nimport { WbReviewPageCacheWriter } from \"./WbReviewPageCacheWriter.js\";\n\nconst WORKFLOW: SystemWorkflowValue = {\n workflowId: \"workflow-1\",\n reviewState: ReviewState.InProgress,\n stepId: \"step-1\",\n stepName: \"Legal\",\n stepState: StepState.InReview\n};\n\nconst createPage = (id: string, entryId: string, title: string): Page => {\n return Page.create({\n id,\n entryId,\n status: WbPageStatus.Draft,\n properties: { title }\n });\n};\n\n// A deep copy, so that a write that changes the cached objects in place is still seen.\nconst snapshot = (cache: ListCache<Page>): unknown => {\n return JSON.parse(JSON.stringify(cache.getItems()));\n};\n\ndescribe(\"WbReviewPageCacheWriter\", () => {\n let listCache: ListCache<Page>;\n let fullCache: ListCache<Page>;\n let writer: WriterAbstraction.Interface;\n\n beforeEach(() => {\n listCache = new ListCache<Page>(\"entryId\");\n fullCache = new ListCache<Page>(\"id\");\n listCache.addItems([\n createPage(\"page-1#0002\", \"page-1\", \"Home\"),\n createPage(\"page-2#0001\", \"page-2\", \"About\")\n ]);\n fullCache.addItems([\n createPage(\"page-1#0002\", \"page-1\", \"Home\"),\n createPage(\"page-1#0001\", \"page-1\", \"Home old\")\n ]);\n\n const container = new Container();\n container.registerInstance(PageListCache, listCache);\n container.registerInstance(FullPageCache, fullCache);\n container.register(WbReviewPageCacheWriter);\n writer = container.resolve(WriterAbstraction);\n });\n\n it(\"handles only the Website Builder page namespace\", () => {\n expect(writer.canHandle(\"wb.page\")).toBe(true);\n expect(writer.canHandle(\"cms.article\")).toBe(false);\n });\n\n it(\"puts the workflow on the matching revision in both caches and nothing else\", () => {\n writer.write(\n { namespace: \"wb.page\", targetId: \"page-1\", targetRevisionId: \"page-1#0002\" },\n WORKFLOW\n );\n\n const listItems = listCache.getItems();\n const home = listItems.find(page => page.entryId === \"page-1\");\n const about = listItems.find(page => page.entryId === \"page-2\");\n expect(home?.system?.workflow).toEqual(WORKFLOW);\n expect(about?.system).toBeNull();\n\n const fullItems = fullCache.getItems();\n const latest = fullItems.find(page => page.id === \"page-1#0002\");\n const older = fullItems.find(page => page.id === \"page-1#0001\");\n expect(latest?.system?.workflow).toEqual(WORKFLOW);\n expect(older?.system).toBeNull();\n });\n\n it(\"a review of an older revision does not mark the latest row\", () => {\n writer.write(\n { namespace: \"wb.page\", targetId: \"page-1\", targetRevisionId: \"page-1#0001\" },\n WORKFLOW\n );\n\n const home = listCache.getItems().find(page => page.entryId === \"page-1\");\n expect(home?.system).toBeNull();\n const older = fullCache.getItems().find(page => page.id === \"page-1#0001\");\n expect(older?.system?.workflow).toEqual(WORKFLOW);\n });\n\n it(\"clears the workflow with null\", () => {\n const ref = { namespace: \"wb.page\", targetId: \"page-1\", targetRevisionId: \"page-1#0002\" };\n writer.write(ref, WORKFLOW);\n\n writer.write(ref, null);\n\n const home = listCache.getItems().find(page => page.entryId === \"page-1\");\n expect(home?.system?.workflow).toBeNull();\n const latest = fullCache.getItems().find(page => page.id === \"page-1#0002\");\n expect(latest?.system?.workflow).toBeNull();\n });\n\n it(\"keeps the other fields of the page and is a no-op for a page that is not cached\", () => {\n const listBefore = snapshot(listCache);\n const fullBefore = snapshot(fullCache);\n\n writer.write(\n { namespace: \"wb.page\", targetId: \"page-9\", targetRevisionId: \"page-9#0001\" },\n WORKFLOW\n );\n\n expect(snapshot(listCache)).toEqual(listBefore);\n expect(snapshot(fullCache)).toEqual(fullBefore);\n\n writer.write(\n { namespace: \"wb.page\", targetId: \"page-1\", targetRevisionId: \"page-1#0002\" },\n WORKFLOW\n );\n\n const home = listCache.getItems().find(page => page.entryId === \"page-1\");\n expect(home?.properties.title).toBe(\"Home\");\n expect(home?.id).toBe(\"page-1#0002\");\n });\n});\n"],"names":["WORKFLOW","ReviewState","StepState","createPage","id","entryId","title","Page","WbPageStatus","snapshot","cache","JSON","describe","listCache","fullCache","writer","beforeEach","ListCache","container","Container","PageListCache","FullPageCache","WbReviewPageCacheWriter","WriterAbstraction","it","expect","listItems","home","page","about","fullItems","latest","older","ref","listBefore","fullBefore"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { IReviewCacheWriter } from "@webiny/app-workflows/review/cache/IReviewCacheWriter.js";
2
+ export declare const WbReviewPageCacheWriter: import("@webiny/di").Abstraction<IReviewCacheWriter>;
3
+ export declare namespace WbReviewPageCacheWriter {
4
+ type Interface = IReviewCacheWriter;
5
+ }