@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,107 @@
1
+ import react from "react";
2
+ import { act, cleanup, render, screen, waitFor } from "@testing-library/react";
3
+ import { afterEach, describe, expect, it } from "vitest";
4
+ import { Container } from "@webiny/di";
5
+ import { InternalPageEditorConfig, PageEditorConfig } from "@webiny/app-website-builder/presentation/pages/PageEditor/PageEditorConfig.js";
6
+ import { WbPageReview } from "../../features/editorReview/abstractions.js";
7
+ import { WbEditorHarness } from "../../testing/WbEditorHarness.js";
8
+ import { createFakeSession } from "../../testing/createFakeSession.js";
9
+ import { createPageEditor } from "../../testing/createPageEditor.js";
10
+ import { PageNewRevisionDecorator } from "./PageNewRevisionDecorator.js";
11
+ const { Ui: Ui } = PageEditorConfig;
12
+ const mountNewRevision = (kind, isUnpublished = false)=>{
13
+ const handle = createFakeSession(kind, isUnpublished);
14
+ const container = new Container();
15
+ container.registerInstance(WbPageReview, handle.session);
16
+ const editor = createPageEditor(isUnpublished ? "unpublished" : "published");
17
+ render(/*#__PURE__*/ react.createElement(WbEditorHarness, {
18
+ container: container,
19
+ editor: editor,
20
+ groups: [
21
+ "actions"
22
+ ]
23
+ }, /*#__PURE__*/ react.createElement(PageNewRevisionDecorator, null), /*#__PURE__*/ react.createElement(InternalPageEditorConfig, null, /*#__PURE__*/ react.createElement(Ui.TopBar.Action, {
24
+ name: "sentinel",
25
+ element: /*#__PURE__*/ react.createElement("span", {
26
+ "data-testid": "sentinel"
27
+ })
28
+ }), /*#__PURE__*/ react.createElement(Ui.TopBar.Action, {
29
+ name: "buttonNewRevision",
30
+ element: /*#__PURE__*/ react.createElement("span", {
31
+ "data-testid": "new-revision"
32
+ })
33
+ }), /*#__PURE__*/ react.createElement(Ui.TopBar.Action, {
34
+ name: "buttonSettings",
35
+ element: /*#__PURE__*/ react.createElement("span", {
36
+ "data-testid": "other-action"
37
+ })
38
+ }))));
39
+ return handle;
40
+ };
41
+ const CASES = [
42
+ {
43
+ kind: "loading",
44
+ shown: false
45
+ },
46
+ {
47
+ kind: "failed",
48
+ shown: false
49
+ },
50
+ {
51
+ kind: "noWorkflow",
52
+ shown: true
53
+ },
54
+ {
55
+ kind: "none",
56
+ shown: true
57
+ },
58
+ {
59
+ kind: "inProgress",
60
+ shown: false
61
+ },
62
+ {
63
+ kind: "approved",
64
+ shown: true
65
+ },
66
+ {
67
+ kind: "rejected",
68
+ shown: true
69
+ }
70
+ ];
71
+ describe("PageNewRevisionDecorator", ()=>{
72
+ afterEach(()=>{
73
+ cleanup();
74
+ });
75
+ it.each(CASES)("$kind review: New Revision shown is $shown", async ({ kind, shown })=>{
76
+ mountNewRevision(kind);
77
+ await screen.findByTestId("sentinel");
78
+ await waitFor(()=>{
79
+ expect(screen.queryAllByTestId("new-revision")).toHaveLength(shown ? 1 : 0);
80
+ });
81
+ });
82
+ it("an unpublished page with no review shows New Revision (Q19)", async ()=>{
83
+ mountNewRevision("none", true);
84
+ await screen.findByTestId("sentinel");
85
+ await waitFor(()=>{
86
+ expect(screen.queryAllByTestId("new-revision")).toHaveLength(1);
87
+ });
88
+ });
89
+ it("leaves every other top bar action alone", async ()=>{
90
+ mountNewRevision("inProgress");
91
+ await screen.findByTestId("sentinel");
92
+ expect(screen.queryAllByTestId("other-action")).toHaveLength(1);
93
+ });
94
+ it("follows the review while the editor is open: hidden in progress, shown once rejected (Q17)", async ()=>{
95
+ const { setKind } = mountNewRevision("inProgress");
96
+ await screen.findByTestId("sentinel");
97
+ expect(screen.queryAllByTestId("new-revision")).toHaveLength(0);
98
+ act(()=>{
99
+ setKind("rejected");
100
+ });
101
+ await waitFor(()=>{
102
+ expect(screen.queryAllByTestId("new-revision")).toHaveLength(1);
103
+ });
104
+ });
105
+ });
106
+
107
+ //# sourceMappingURL=PageNewRevisionDecorator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Components/PageEditor/PageNewRevisionDecorator.test.js","sources":["../../../src/Components/PageEditor/PageNewRevisionDecorator.test.tsx"],"sourcesContent":["import React from \"react\";\nimport { act } from \"@testing-library/react\";\nimport { cleanup } from \"@testing-library/react\";\nimport { render } from \"@testing-library/react\";\nimport { screen } from \"@testing-library/react\";\nimport { waitFor } from \"@testing-library/react\";\nimport { afterEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { InternalPageEditorConfig } from \"@webiny/app-website-builder/presentation/pages/PageEditor/PageEditorConfig.js\";\nimport { PageEditorConfig } from \"@webiny/app-website-builder/presentation/pages/PageEditor/PageEditorConfig.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 type { FakeReviewKind } from \"~/testing/createFakeVm.js\";\nimport { PageNewRevisionDecorator } from \"./PageNewRevisionDecorator.js\";\n\nconst { Ui } = PageEditorConfig;\n\nconst mountNewRevision = (kind: FakeReviewKind, isUnpublished: boolean = false) => {\n const handle = createFakeSession(kind, isUnpublished);\n const container = new Container();\n container.registerInstance(WbPageReview, handle.session);\n const editor = createPageEditor(isUnpublished ? \"unpublished\" : \"published\");\n\n render(\n <WbEditorHarness container={container} editor={editor} groups={[\"actions\"]}>\n <PageNewRevisionDecorator />\n <InternalPageEditorConfig>\n <Ui.TopBar.Action name={\"sentinel\"} element={<span data-testid={\"sentinel\"} />} />\n <Ui.TopBar.Action\n name={\"buttonNewRevision\"}\n element={<span data-testid={\"new-revision\"} />}\n />\n <Ui.TopBar.Action\n name={\"buttonSettings\"}\n element={<span data-testid={\"other-action\"} />}\n />\n </InternalPageEditorConfig>\n </WbEditorHarness>\n );\n\n return handle;\n};\n\ninterface NewRevisionCase {\n kind: FakeReviewKind;\n shown: boolean;\n}\n\nconst CASES: NewRevisionCase[] = [\n { kind: \"loading\", shown: false },\n { kind: \"failed\", shown: false },\n { kind: \"noWorkflow\", shown: true },\n { kind: \"none\", shown: true },\n { kind: \"inProgress\", shown: false },\n { kind: \"approved\", shown: true },\n { kind: \"rejected\", shown: true }\n];\n\ndescribe(\"PageNewRevisionDecorator\", () => {\n afterEach(() => {\n cleanup();\n });\n\n it.each(CASES)(\"$kind review: New Revision shown is $shown\", async ({ kind, shown }) => {\n mountNewRevision(kind);\n await screen.findByTestId(\"sentinel\");\n\n await waitFor(() => {\n expect(screen.queryAllByTestId(\"new-revision\")).toHaveLength(shown ? 1 : 0);\n });\n });\n\n it(\"an unpublished page with no review shows New Revision (Q19)\", async () => {\n mountNewRevision(\"none\", true);\n await screen.findByTestId(\"sentinel\");\n\n await waitFor(() => {\n expect(screen.queryAllByTestId(\"new-revision\")).toHaveLength(1);\n });\n });\n\n it(\"leaves every other top bar action alone\", async () => {\n mountNewRevision(\"inProgress\");\n await screen.findByTestId(\"sentinel\");\n\n expect(screen.queryAllByTestId(\"other-action\")).toHaveLength(1);\n });\n\n it(\"follows the review while the editor is open: hidden in progress, shown once rejected (Q17)\", async () => {\n const { setKind } = mountNewRevision(\"inProgress\");\n await screen.findByTestId(\"sentinel\");\n expect(screen.queryAllByTestId(\"new-revision\")).toHaveLength(0);\n\n act(() => {\n setKind(\"rejected\");\n });\n\n await waitFor(() => {\n expect(screen.queryAllByTestId(\"new-revision\")).toHaveLength(1);\n });\n });\n});\n"],"names":["Ui","PageEditorConfig","mountNewRevision","kind","isUnpublished","handle","createFakeSession","container","Container","WbPageReview","editor","createPageEditor","render","WbEditorHarness","PageNewRevisionDecorator","InternalPageEditorConfig","CASES","describe","afterEach","cleanup","it","shown","screen","waitFor","expect","setKind","act"],"mappings":";;;;;;;;;;AAoBA,MAAM,EAAEA,IAAAA,EAAE,EAAE,GAAGC;AAEf,MAAMC,mBAAmB,CAACC,MAAsBC,gBAAyB,KAAK;IAC1E,MAAMC,SAASC,kBAAkBH,MAAMC;IACvC,MAAMG,YAAY,IAAIC;IACtBD,UAAU,gBAAgB,CAACE,cAAcJ,OAAO,OAAO;IACvD,MAAMK,SAASC,iBAAiBP,gBAAgB,gBAAgB;IAEhEQ,OAAO,WAADA,GACF,oBAACC,iBAAeA;QAAC,WAAWN;QAAW,QAAQG;QAAQ,QAAQ;YAAC;SAAU;qBACtE,oBAACI,0BAAwBA,OAAAA,WAAAA,GACzB,oBAACC,0BAAwBA,MAAAA,WAAAA,GACrB,oBAACf,GAAG,MAAM,CAAC,MAAM;QAAC,MAAM;QAAY,uBAAS,oBAAC;YAAK,eAAa;;sBAChE,oBAACA,GAAG,MAAM,CAAC,MAAM;QACb,MAAM;QACN,uBAAS,oBAAC;YAAK,eAAa;;sBAEhC,oBAACA,GAAG,MAAM,CAAC,MAAM;QACb,MAAM;QACN,uBAAS,oBAAC;YAAK,eAAa;;;IAM5C,OAAOK;AACX;AAOA,MAAMW,QAA2B;IAC7B;QAAE,MAAM;QAAW,OAAO;IAAM;IAChC;QAAE,MAAM;QAAU,OAAO;IAAM;IAC/B;QAAE,MAAM;QAAc,OAAO;IAAK;IAClC;QAAE,MAAM;QAAQ,OAAO;IAAK;IAC5B;QAAE,MAAM;QAAc,OAAO;IAAM;IACnC;QAAE,MAAM;QAAY,OAAO;IAAK;IAChC;QAAE,MAAM;QAAY,OAAO;IAAK;CACnC;AAEDC,SAAS,4BAA4B;IACjCC,UAAU;QACNC;IACJ;IAEAC,GAAG,IAAI,CAACJ,OAAO,8CAA8C,OAAO,EAAEb,IAAI,EAAEkB,KAAK,EAAE;QAC/EnB,iBAAiBC;QACjB,MAAMmB,OAAO,YAAY,CAAC;QAE1B,MAAMC,QAAQ;YACVC,OAAOF,OAAO,gBAAgB,CAAC,iBAAiB,YAAY,CAACD,QAAQ,IAAI;QAC7E;IACJ;IAEAD,GAAG,+DAA+D;QAC9DlB,iBAAiB,QAAQ;QACzB,MAAMoB,OAAO,YAAY,CAAC;QAE1B,MAAMC,QAAQ;YACVC,OAAOF,OAAO,gBAAgB,CAAC,iBAAiB,YAAY,CAAC;QACjE;IACJ;IAEAF,GAAG,2CAA2C;QAC1ClB,iBAAiB;QACjB,MAAMoB,OAAO,YAAY,CAAC;QAE1BE,OAAOF,OAAO,gBAAgB,CAAC,iBAAiB,YAAY,CAAC;IACjE;IAEAF,GAAG,8FAA8F;QAC7F,MAAM,EAAEK,OAAO,EAAE,GAAGvB,iBAAiB;QACrC,MAAMoB,OAAO,YAAY,CAAC;QAC1BE,OAAOF,OAAO,gBAAgB,CAAC,iBAAiB,YAAY,CAAC;QAE7DI,IAAI;YACAD,QAAQ;QACZ;QAEA,MAAMF,QAAQ;YACVC,OAAOF,OAAO,gBAAgB,CAAC,iBAAiB,YAAY,CAAC;QACjE;IACJ;AACJ"}
@@ -0,0 +1,3 @@
1
+ export declare const PageReadOnlySync: (() => null) & import("react").NamedExoticComponent<unknown> & {
2
+ readonly type: () => null;
3
+ };
@@ -0,0 +1,23 @@
1
+ import { useEffect } from "react";
2
+ import { useFeature } from "@webiny/app";
3
+ import { createReactiveComponent } from "@webiny/app-admin";
4
+ import { useDocumentEditor } from "@webiny/app-website-builder/DocumentEditor/index.js";
5
+ import { WbPageReviewFeature } from "../../features/editorReview/feature.js";
6
+ const PageReadOnlySync = createReactiveComponent(()=>{
7
+ const { session } = useFeature(WbPageReviewFeature);
8
+ const editor = useDocumentEditor();
9
+ const allowsEditing = session.presenter.vm.allowsEditing;
10
+ useEffect(()=>{
11
+ const options = editor.getEditorOptions();
12
+ editor.updateEditor((state)=>{
13
+ state.isReadOnly = true === options.isReadOnly || !allowsEditing;
14
+ });
15
+ }, [
16
+ editor,
17
+ allowsEditing
18
+ ]);
19
+ return null;
20
+ });
21
+ export { PageReadOnlySync };
22
+
23
+ //# sourceMappingURL=PageReadOnlySync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Components/PageEditor/PageReadOnlySync.js","sources":["../../../src/Components/PageEditor/PageReadOnlySync.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { useFeature } from \"@webiny/app\";\nimport { createReactiveComponent } from \"@webiny/app-admin\";\nimport { useDocumentEditor } from \"@webiny/app-website-builder/DocumentEditor/index.js\";\nimport { WbPageReviewFeature } from \"~/features/editorReview/feature.js\";\n\n/*\n * The one place that decides whether the canvas is read-only: the editor's own options (a page\n * that is not a draft) or a review state that does not allow editing, including an unknown one.\n */\nexport const PageReadOnlySync = createReactiveComponent(() => {\n const { session } = useFeature(WbPageReviewFeature);\n const editor = useDocumentEditor();\n const allowsEditing = session.presenter.vm.allowsEditing;\n\n useEffect(() => {\n const options = editor.getEditorOptions();\n editor.updateEditor(state => {\n state.isReadOnly = options.isReadOnly === true || !allowsEditing;\n });\n }, [editor, allowsEditing]);\n\n return null;\n});\n"],"names":["PageReadOnlySync","createReactiveComponent","session","useFeature","WbPageReviewFeature","editor","useDocumentEditor","allowsEditing","useEffect","options","state"],"mappings":";;;;;AAUO,MAAMA,mBAAmBC,wBAAwB;IACpD,MAAM,EAAEC,OAAO,EAAE,GAAGC,WAAWC;IAC/B,MAAMC,SAASC;IACf,MAAMC,gBAAgBL,QAAQ,SAAS,CAAC,EAAE,CAAC,aAAa;IAExDM,UAAU;QACN,MAAMC,UAAUJ,OAAO,gBAAgB;QACvCA,OAAO,YAAY,CAACK,CAAAA;YAChBA,MAAM,UAAU,GAAGD,AAAuB,SAAvBA,QAAQ,UAAU,IAAa,CAACF;QACvD;IACJ,GAAG;QAACF;QAAQE;KAAc;IAE1B,OAAO;AACX"}
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ export declare const PageReviewBar: (() => React.JSX.Element | null) & React.NamedExoticComponent<unknown> & {
3
+ readonly type: () => React.JSX.Element | null;
4
+ };
@@ -0,0 +1,93 @@
1
+ import react, { useEffect } from "react";
2
+ import { Alert } from "@webiny/admin-ui";
3
+ import { useFeature } from "@webiny/app";
4
+ import { createReactiveComponent } from "@webiny/app-admin";
5
+ import { useSelectFromDocument } from "@webiny/app-website-builder/BaseEditor/hooks/useSelectFromDocument.js";
6
+ import { WbPageStatus } from "@webiny/app-website-builder/constants.js";
7
+ import { useDocumentEditor } from "@webiny/app-website-builder/DocumentEditor/index.js";
8
+ import { EditorReviewBar } from "@webiny/app-workflows/review/editor/components/EditorReviewBar.js";
9
+ import { WB_PAGE_APP } from "../../constants.js";
10
+ import { WbPageReviewFeature } from "../../features/editorReview/feature.js";
11
+ import { GetPageFeature } from "@webiny/app-website-builder/features/pages/getPage/index.js";
12
+ import { SharedPageInfrastructureFeature } from "@webiny/app-website-builder/features/pages/shared/feature.js";
13
+ import { usePermissions } from "@webiny/app-website-builder/presentation/security/usePermissions.js";
14
+ import { WbPageContentReloader } from "../../features/editorReview/WbPageContentReloader.js";
15
+ import { WbPageUnsavedChanges } from "../../features/editorReview/WbPageUnsavedChanges.js";
16
+ import { Routes } from "../../routes.js";
17
+ import { getPageReadOnlyReason } from "./getPageReadOnlyReason.js";
18
+ import { getPageReviewContext } from "./getPageReviewContext.js";
19
+ const selectPage = (doc)=>({
20
+ id: doc.id,
21
+ title: doc.properties.title || "",
22
+ status: doc.status || WbPageStatus.Draft,
23
+ createdById: doc.createdBy?.id ?? null
24
+ });
25
+ const PageReviewBar = createReactiveComponent(()=>{
26
+ const { session } = useFeature(WbPageReviewFeature);
27
+ const { fullPageCache } = useFeature(SharedPageInfrastructureFeature);
28
+ const { useCase: getPage } = useFeature(GetPageFeature);
29
+ const editor = useDocumentEditor();
30
+ const page = useSelectFromDocument(selectPage);
31
+ const permissions = usePermissions();
32
+ const canEdit = permissions.canEdit("page", page.createdById ? {
33
+ createdBy: {
34
+ id: page.createdById
35
+ }
36
+ } : void 0);
37
+ useEffect(()=>{
38
+ const context = getPageReviewContext(editor, page, canEdit);
39
+ const contentReloader = new WbPageContentReloader(editor, fullPageCache, getPage);
40
+ const unsavedChanges = new WbPageUnsavedChanges(editor);
41
+ session.presenter.init({
42
+ target: {
43
+ namespace: WB_PAGE_APP,
44
+ targetRevisionId: page.id
45
+ },
46
+ contentReloader,
47
+ unsavedChanges,
48
+ ...context
49
+ });
50
+ return ()=>{
51
+ session.presenter.dispose();
52
+ };
53
+ }, [
54
+ session,
55
+ editor,
56
+ page.id,
57
+ fullPageCache,
58
+ getPage
59
+ ]);
60
+ useEffect(()=>{
61
+ const context = getPageReviewContext(editor, page, canEdit);
62
+ session.presenter.setContext(context);
63
+ }, [
64
+ session,
65
+ editor,
66
+ page.title,
67
+ page.status,
68
+ canEdit
69
+ ]);
70
+ const { vm } = session.presenter;
71
+ if ("noWorkflow" === vm.status) return null;
72
+ const reason = getPageReadOnlyReason(vm, page.status);
73
+ let note = null;
74
+ if (reason) note = /*#__PURE__*/ react.createElement("div", {
75
+ "data-role": "page-review-note",
76
+ className: "px-md my-sm"
77
+ }, /*#__PURE__*/ react.createElement(Alert, {
78
+ type: "info",
79
+ variant: "subtle"
80
+ }, reason));
81
+ return /*#__PURE__*/ react.createElement("div", {
82
+ className: "w-full min-w-0",
83
+ "data-affects-preview": "height"
84
+ }, /*#__PURE__*/ react.createElement(EditorReviewBar, {
85
+ session: session,
86
+ reviewsRoute: Routes.Pages.WorkflowStateList,
87
+ contentTypeLabel: "Pages",
88
+ layout: "strip"
89
+ }), note);
90
+ });
91
+ export { PageReviewBar };
92
+
93
+ //# sourceMappingURL=PageReviewBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Components/PageEditor/PageReviewBar.js","sources":["../../../src/Components/PageEditor/PageReviewBar.tsx"],"sourcesContent":["import React from \"react\";\nimport { useEffect } from \"react\";\nimport { Alert } from \"@webiny/admin-ui\";\nimport { useFeature } from \"@webiny/app\";\nimport { createReactiveComponent } from \"@webiny/app-admin\";\nimport { useSelectFromDocument } from \"@webiny/app-website-builder/BaseEditor/hooks/useSelectFromDocument.js\";\nimport { WbPageStatus } from \"@webiny/app-website-builder/constants.js\";\nimport { useDocumentEditor } from \"@webiny/app-website-builder/DocumentEditor/index.js\";\nimport { EditorReviewBar } from \"@webiny/app-workflows/review/editor/components/EditorReviewBar.js\";\nimport { WB_PAGE_APP } from \"~/constants.js\";\nimport { WbPageReviewFeature } from \"~/features/editorReview/feature.js\";\nimport { GetPageFeature } from \"@webiny/app-website-builder/features/pages/getPage/index.js\";\nimport { SharedPageInfrastructureFeature } from \"@webiny/app-website-builder/features/pages/shared/feature.js\";\nimport { usePermissions } from \"@webiny/app-website-builder/presentation/security/usePermissions.js\";\nimport { WbPageContentReloader } from \"~/features/editorReview/WbPageContentReloader.js\";\nimport { WbPageUnsavedChanges } from \"~/features/editorReview/WbPageUnsavedChanges.js\";\nimport { Routes } from \"~/routes.js\";\nimport { getPageReadOnlyReason } from \"./getPageReadOnlyReason.js\";\nimport { getPageReviewContext } from \"./getPageReviewContext.js\";\nimport type { IPageEditorDocument } from \"./pageEditorDocument.js\";\nimport type { ISelectedPage } from \"./pageEditorDocument.js\";\n\nconst selectPage = (doc: IPageEditorDocument): ISelectedPage => {\n return {\n id: doc.id,\n title: doc.properties.title || \"\",\n status: doc.status || WbPageStatus.Draft,\n createdById: doc.createdBy?.id ?? null\n };\n};\n\nexport const PageReviewBar = createReactiveComponent(() => {\n const { session } = useFeature(WbPageReviewFeature);\n const { fullPageCache } = useFeature(SharedPageInfrastructureFeature);\n const { useCase: getPage } = useFeature(GetPageFeature);\n const editor = useDocumentEditor<IPageEditorDocument>();\n const page = useSelectFromDocument<ISelectedPage, IPageEditorDocument>(selectPage);\n const permissions = usePermissions();\n const canEdit = permissions.canEdit(\n \"page\",\n page.createdById ? { createdBy: { id: page.createdById } } : undefined\n );\n\n useEffect(() => {\n const context = getPageReviewContext(editor, page, canEdit);\n const contentReloader = new WbPageContentReloader(editor, fullPageCache, getPage);\n const unsavedChanges = new WbPageUnsavedChanges(editor);\n void session.presenter.init({\n target: { namespace: WB_PAGE_APP, targetRevisionId: page.id },\n contentReloader,\n unsavedChanges,\n ...context\n });\n return () => {\n session.presenter.dispose();\n };\n }, [session, editor, page.id, fullPageCache, getPage]);\n\n useEffect(() => {\n const context = getPageReviewContext(editor, page, canEdit);\n session.presenter.setContext(context);\n }, [session, editor, page.title, page.status, canEdit]);\n\n const { vm } = session.presenter;\n if (vm.status === \"noWorkflow\") {\n return null;\n }\n\n const reason = getPageReadOnlyReason(vm, page.status);\n let note: React.ReactElement | null = null;\n if (reason) {\n note = (\n <div data-role={\"page-review-note\"} className={\"px-md my-sm\"}>\n <Alert type={\"info\"} variant={\"subtle\"}>\n {reason}\n </Alert>\n </div>\n );\n }\n\n return (\n <div className={\"w-full min-w-0\"} data-affects-preview={\"height\"}>\n <EditorReviewBar\n session={session}\n reviewsRoute={Routes.Pages.WorkflowStateList}\n contentTypeLabel={\"Pages\"}\n layout={\"strip\"}\n />\n {note}\n </div>\n );\n});\n"],"names":["selectPage","doc","WbPageStatus","PageReviewBar","createReactiveComponent","session","useFeature","WbPageReviewFeature","fullPageCache","SharedPageInfrastructureFeature","getPage","GetPageFeature","editor","useDocumentEditor","page","useSelectFromDocument","permissions","usePermissions","canEdit","undefined","useEffect","context","getPageReviewContext","contentReloader","WbPageContentReloader","unsavedChanges","WbPageUnsavedChanges","WB_PAGE_APP","vm","reason","getPageReadOnlyReason","note","Alert","EditorReviewBar","Routes"],"mappings":";;;;;;;;;;;;;;;;;;AAsBA,MAAMA,aAAa,CAACC,MACT;QACH,IAAIA,IAAI,EAAE;QACV,OAAOA,IAAI,UAAU,CAAC,KAAK,IAAI;QAC/B,QAAQA,IAAI,MAAM,IAAIC,aAAa,KAAK;QACxC,aAAaD,IAAI,SAAS,EAAE,MAAM;IACtC;AAGG,MAAME,gBAAgBC,wBAAwB;IACjD,MAAM,EAAEC,OAAO,EAAE,GAAGC,WAAWC;IAC/B,MAAM,EAAEC,aAAa,EAAE,GAAGF,WAAWG;IACrC,MAAM,EAAE,SAASC,OAAO,EAAE,GAAGJ,WAAWK;IACxC,MAAMC,SAASC;IACf,MAAMC,OAAOC,sBAA0Df;IACvE,MAAMgB,cAAcC;IACpB,MAAMC,UAAUF,YAAY,OAAO,CAC/B,QACAF,KAAK,WAAW,GAAG;QAAE,WAAW;YAAE,IAAIA,KAAK,WAAW;QAAC;IAAE,IAAIK;IAGjEC,UAAU;QACN,MAAMC,UAAUC,qBAAqBV,QAAQE,MAAMI;QACnD,MAAMK,kBAAkB,IAAIC,sBAAsBZ,QAAQJ,eAAeE;QACzE,MAAMe,iBAAiB,IAAIC,qBAAqBd;QAC3CP,QAAQ,SAAS,CAAC,IAAI,CAAC;YACxB,QAAQ;gBAAE,WAAWsB;gBAAa,kBAAkBb,KAAK,EAAE;YAAC;YAC5DS;YACAE;YACA,GAAGJ,OAAO;QACd;QACA,OAAO;YACHhB,QAAQ,SAAS,CAAC,OAAO;QAC7B;IACJ,GAAG;QAACA;QAASO;QAAQE,KAAK,EAAE;QAAEN;QAAeE;KAAQ;IAErDU,UAAU;QACN,MAAMC,UAAUC,qBAAqBV,QAAQE,MAAMI;QACnDb,QAAQ,SAAS,CAAC,UAAU,CAACgB;IACjC,GAAG;QAAChB;QAASO;QAAQE,KAAK,KAAK;QAAEA,KAAK,MAAM;QAAEI;KAAQ;IAEtD,MAAM,EAAEU,EAAE,EAAE,GAAGvB,QAAQ,SAAS;IAChC,IAAIuB,AAAc,iBAAdA,GAAG,MAAM,EACT,OAAO;IAGX,MAAMC,SAASC,sBAAsBF,IAAId,KAAK,MAAM;IACpD,IAAIiB,OAAkC;IACtC,IAAIF,QACAE,OAAO,WAAPA,GACI,oBAAC;QAAI,aAAW;QAAoB,WAAW;qBAC3C,oBAACC,OAAKA;QAAC,MAAM;QAAQ,SAAS;OACzBH;IAMjB,OAAO,WAAP,GACI,oBAAC;QAAI,WAAW;QAAkB,wBAAsB;qBACpD,oBAACI,iBAAeA;QACZ,SAAS5B;QACT,cAAc6B,OAAO,KAAK,CAAC,iBAAiB;QAC5C,kBAAkB;QAClB,QAAQ;QAEXH;AAGb"}
@@ -0,0 +1 @@
1
+ import "@webiny/app-admin";
@@ -0,0 +1,135 @@
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 { Page } from "@webiny/app-website-builder/domain/Page/index.js";
6
+ import "@webiny/app-admin";
7
+ import { WbPageReview } from "../../features/editorReview/abstractions.js";
8
+ import { WbPageContentReloader } from "../../features/editorReview/WbPageContentReloader.js";
9
+ import { WbPageUnsavedChanges } from "../../features/editorReview/WbPageUnsavedChanges.js";
10
+ import { WbEditorHarness } from "../../testing/WbEditorHarness.js";
11
+ import { createFakeSession } from "../../testing/createFakeSession.js";
12
+ import { createPageEditor } from "../../testing/createPageEditor.js";
13
+ import { registerPageContent } from "../../testing/registerPageContent.js";
14
+ import { PageReviewBar } from "./PageReviewBar.js";
15
+ vi.mock("@webiny/icons/info.svg", ()=>({
16
+ ReactComponent: ()=>null
17
+ }));
18
+ vi.mock("@webiny/app-workflows/review/editor/components/EditorReviewBar.js", async ()=>{
19
+ const React = await import("react");
20
+ const EditorReviewBar = (props)=>React.createElement("div", {
21
+ "data-testid": "review-bar",
22
+ "data-layout": props.layout,
23
+ "data-content-type-label": props.contentTypeLabel
24
+ });
25
+ return {
26
+ EditorReviewBar
27
+ };
28
+ });
29
+ const mountBar = (params = {})=>{
30
+ const { canEdit = true, createdById = null } = params;
31
+ const handle = createFakeSession("inProgress");
32
+ const container = new Container();
33
+ container.registerInstance(WbPageReview, handle.session);
34
+ const content = registerPageContent(container);
35
+ content.permissions.canEdit.mockReturnValue(canEdit);
36
+ const editor = createPageEditor("draft", "Home", createdById);
37
+ const view = render(/*#__PURE__*/ react.createElement(WbEditorHarness, {
38
+ container: container,
39
+ editor: editor
40
+ }, /*#__PURE__*/ react.createElement(PageReviewBar, null)));
41
+ return {
42
+ ...handle,
43
+ ...content,
44
+ editor,
45
+ view
46
+ };
47
+ };
48
+ describe("PageReviewBar", ()=>{
49
+ afterEach(()=>{
50
+ cleanup();
51
+ });
52
+ it("renders the review bar", ()=>{
53
+ mountBar();
54
+ expect(screen.queryAllByTestId("review-bar")).toHaveLength(1);
55
+ });
56
+ it("passes Pages as the content type label", ()=>{
57
+ mountBar();
58
+ expect(screen.getByTestId("review-bar").getAttribute("data-content-type-label")).toBe("Pages");
59
+ });
60
+ it("renders the bar as a full-width strip without its own padding wrapper", ()=>{
61
+ mountBar();
62
+ const bar = screen.getByTestId("review-bar");
63
+ expect(bar.getAttribute("data-layout")).toBe("strip");
64
+ const wrapper = bar.parentElement;
65
+ expect(wrapper.className).not.toContain("p-sm");
66
+ expect(wrapper.getAttribute("data-affects-preview")).toBe("height");
67
+ });
68
+ it("initialises the presenter with the target, the context and a page content reloader (R262)", ()=>{
69
+ const { presenter } = mountBar();
70
+ expect(presenter.init).toHaveBeenCalledTimes(1);
71
+ const params = presenter.init.mock.calls[0][0];
72
+ expect(params).not.toHaveProperty("useCases");
73
+ expect(params.target).toEqual({
74
+ namespace: "wb.page",
75
+ targetRevisionId: "page-1#0001"
76
+ });
77
+ expect(params.targetTitle).toBe("Home");
78
+ expect(params.contentReloader).toBeInstanceOf(WbPageContentReloader);
79
+ expect(params.unsavedChanges).toBeInstanceOf(WbPageUnsavedChanges);
80
+ });
81
+ it("lets a user who can edit the draft request a review", ()=>{
82
+ const { presenter } = mountBar();
83
+ expect(presenter.init.mock.calls[0][0].canRequest).toBe(true);
84
+ });
85
+ it("does not let a user who cannot edit the page request a review", ()=>{
86
+ const { presenter } = mountBar({
87
+ canEdit: false
88
+ });
89
+ expect(presenter.init.mock.calls[0][0].canRequest).toBe(false);
90
+ expect(presenter.setContext).toHaveBeenLastCalledWith(expect.objectContaining({
91
+ canRequest: false
92
+ }));
93
+ });
94
+ it("asks the edit permission for the page's author", ()=>{
95
+ const { permissions } = mountBar({
96
+ createdById: "user-2"
97
+ });
98
+ expect(permissions.canEdit).toHaveBeenCalledWith("page", {
99
+ createdBy: {
100
+ id: "user-2"
101
+ }
102
+ });
103
+ });
104
+ it("builds a reloader over the editor, the full page cache and the get use case", async ()=>{
105
+ const { presenter, getPage, cache } = mountBar();
106
+ cache.addItems([
107
+ Page.create({
108
+ id: "page-1#0001"
109
+ })
110
+ ]);
111
+ let cachedWhenRead;
112
+ getPage.execute.mockImplementation(async (params)=>{
113
+ cachedWhenRead = cache.getItem((page)=>page.id === params.id);
114
+ return Page.create({
115
+ id: params.id
116
+ });
117
+ });
118
+ const reloader = presenter.init.mock.calls[0][0].contentReloader;
119
+ if (!reloader) throw new Error("The init params carry no reloader.");
120
+ await reloader.reload();
121
+ expect(getPage.execute).toHaveBeenCalledTimes(1);
122
+ expect(getPage.execute).toHaveBeenCalledWith({
123
+ id: "page-1#0001"
124
+ });
125
+ expect(cachedWhenRead).toBeUndefined();
126
+ expect(cache.getItems()).toEqual([]);
127
+ });
128
+ it("disposes the presenter on unmount", ()=>{
129
+ const { presenter, view } = mountBar();
130
+ view.unmount();
131
+ expect(presenter.dispose).toHaveBeenCalledTimes(1);
132
+ });
133
+ });
134
+
135
+ //# sourceMappingURL=PageReviewBar.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Components/PageEditor/PageReviewBar.test.js","sources":["../../../src/Components/PageEditor/PageReviewBar.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 { Page } from \"@webiny/app-website-builder/domain/Page/index.js\";\n// Loads the admin package before the editor modules, the order the other editor tests get through their imports.\nimport \"@webiny/app-admin\";\nimport { WbPageReview } from \"~/features/editorReview/abstractions.js\";\nimport { WbPageContentReloader } from \"~/features/editorReview/WbPageContentReloader.js\";\nimport { WbPageUnsavedChanges } from \"~/features/editorReview/WbPageUnsavedChanges.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 { PageReviewBar } from \"./PageReviewBar.js\";\n\nvi.mock(\"@webiny/icons/info.svg\", () => {\n return { ReactComponent: () => null };\n});\n\ninterface EditorReviewBarMockProps {\n layout?: string;\n contentTypeLabel?: string;\n}\n\nvi.mock(\"@webiny/app-workflows/review/editor/components/EditorReviewBar.js\", async () => {\n const React = await import(\"react\");\n const EditorReviewBar = (props: EditorReviewBarMockProps) => {\n return React.createElement(\"div\", {\n \"data-testid\": \"review-bar\",\n \"data-layout\": props.layout,\n \"data-content-type-label\": props.contentTypeLabel\n });\n };\n return { EditorReviewBar };\n});\n\ninterface MountBarParams {\n canEdit?: boolean;\n createdById?: string | null;\n}\n\nconst mountBar = (params: MountBarParams = {}) => {\n const { canEdit = true, createdById = null } = params;\n const handle = createFakeSession(\"inProgress\");\n const container = new Container();\n container.registerInstance(WbPageReview, handle.session);\n const content = registerPageContent(container);\n content.permissions.canEdit.mockReturnValue(canEdit);\n const editor = createPageEditor(\"draft\", \"Home\", createdById);\n\n const view = render(\n <WbEditorHarness container={container} editor={editor}>\n <PageReviewBar />\n </WbEditorHarness>\n );\n\n return { ...handle, ...content, editor, view };\n};\n\ndescribe(\"PageReviewBar\", () => {\n afterEach(() => {\n cleanup();\n });\n\n it(\"renders the review bar\", () => {\n mountBar();\n\n expect(screen.queryAllByTestId(\"review-bar\")).toHaveLength(1);\n });\n\n it(\"passes Pages as the content type label\", () => {\n mountBar();\n\n expect(screen.getByTestId(\"review-bar\").getAttribute(\"data-content-type-label\")).toBe(\n \"Pages\"\n );\n });\n\n it(\"renders the bar as a full-width strip without its own padding wrapper\", () => {\n mountBar();\n\n const bar = screen.getByTestId(\"review-bar\");\n expect(bar.getAttribute(\"data-layout\")).toBe(\"strip\");\n const wrapper = bar.parentElement as HTMLElement;\n expect(wrapper.className).not.toContain(\"p-sm\");\n expect(wrapper.getAttribute(\"data-affects-preview\")).toBe(\"height\");\n });\n\n it(\"initialises the presenter with the target, the context and a page content reloader (R262)\", () => {\n const { presenter } = mountBar();\n\n expect(presenter.init).toHaveBeenCalledTimes(1);\n const params = presenter.init.mock.calls[0][0];\n expect(params).not.toHaveProperty(\"useCases\");\n expect(params.target).toEqual({ namespace: \"wb.page\", targetRevisionId: \"page-1#0001\" });\n expect(params.targetTitle).toBe(\"Home\");\n expect(params.contentReloader).toBeInstanceOf(WbPageContentReloader);\n expect(params.unsavedChanges).toBeInstanceOf(WbPageUnsavedChanges);\n });\n\n it(\"lets a user who can edit the draft request a review\", () => {\n const { presenter } = mountBar();\n\n expect(presenter.init.mock.calls[0][0].canRequest).toBe(true);\n });\n\n it(\"does not let a user who cannot edit the page request a review\", () => {\n const { presenter } = mountBar({ canEdit: false });\n\n expect(presenter.init.mock.calls[0][0].canRequest).toBe(false);\n expect(presenter.setContext).toHaveBeenLastCalledWith(\n expect.objectContaining({ canRequest: false })\n );\n });\n\n it(\"asks the edit permission for the page's author\", () => {\n const { permissions } = mountBar({ createdById: \"user-2\" });\n\n expect(permissions.canEdit).toHaveBeenCalledWith(\"page\", { createdBy: { id: \"user-2\" } });\n });\n\n it(\"builds a reloader over the editor, the full page cache and the get use case\", async () => {\n const { presenter, getPage, cache } = mountBar();\n cache.addItems([Page.create({ id: \"page-1#0001\" })]);\n let cachedWhenRead: Page | undefined;\n getPage.execute.mockImplementation(async params => {\n cachedWhenRead = cache.getItem(page => page.id === params.id);\n return Page.create({ id: params.id });\n });\n const reloader = presenter.init.mock.calls[0][0].contentReloader;\n if (!reloader) {\n throw new Error(\"The init params carry no reloader.\");\n }\n\n await reloader.reload();\n\n expect(getPage.execute).toHaveBeenCalledTimes(1);\n expect(getPage.execute).toHaveBeenCalledWith({ id: \"page-1#0001\" });\n // The page was evicted from the full page cache before the read (A96).\n expect(cachedWhenRead).toBeUndefined();\n expect(cache.getItems()).toEqual([]);\n });\n\n it(\"disposes the presenter on unmount\", () => {\n const { presenter, view } = mountBar();\n\n view.unmount();\n\n expect(presenter.dispose).toHaveBeenCalledTimes(1);\n });\n});\n"],"names":["vi","React","EditorReviewBar","props","mountBar","params","canEdit","createdById","handle","createFakeSession","container","Container","WbPageReview","content","registerPageContent","editor","createPageEditor","view","render","WbEditorHarness","PageReviewBar","describe","afterEach","cleanup","it","expect","screen","bar","wrapper","presenter","WbPageContentReloader","WbPageUnsavedChanges","permissions","getPage","cache","Page","cachedWhenRead","page","reloader","Error"],"mappings":";;;;;;;;;;;;;;AAsBAA,GAAG,IAAI,CAAC,0BAA0B,IACvB;QAAE,gBAAgB,IAAM;IAAK;AAQxCA,GAAG,IAAI,CAAC,qEAAqE;IACzE,MAAMC,QAAQ,MAAM,MAAM,CAAC;IAC3B,MAAMC,kBAAkB,CAACC,QACdF,MAAM,aAAa,CAAC,OAAO;YAC9B,eAAe;YACf,eAAeE,MAAM,MAAM;YAC3B,2BAA2BA,MAAM,gBAAgB;QACrD;IAEJ,OAAO;QAAED;IAAgB;AAC7B;AAOA,MAAME,WAAW,CAACC,SAAyB,CAAC,CAAC;IACzC,MAAM,EAAEC,UAAU,IAAI,EAAEC,cAAc,IAAI,EAAE,GAAGF;IAC/C,MAAMG,SAASC,kBAAkB;IACjC,MAAMC,YAAY,IAAIC;IACtBD,UAAU,gBAAgB,CAACE,cAAcJ,OAAO,OAAO;IACvD,MAAMK,UAAUC,oBAAoBJ;IACpCG,QAAQ,WAAW,CAAC,OAAO,CAAC,eAAe,CAACP;IAC5C,MAAMS,SAASC,iBAAiB,SAAS,QAAQT;IAEjD,MAAMU,OAAOC,OAAO,WAADA,GACf,oBAACC,iBAAeA;QAAC,WAAWT;QAAW,QAAQK;qBAC3C,oBAACK,eAAaA;IAItB,OAAO;QAAE,GAAGZ,MAAM;QAAE,GAAGK,OAAO;QAAEE;QAAQE;IAAK;AACjD;AAEAI,SAAS,iBAAiB;IACtBC,UAAU;QACNC;IACJ;IAEAC,GAAG,0BAA0B;QACzBpB;QAEAqB,OAAOC,OAAO,gBAAgB,CAAC,eAAe,YAAY,CAAC;IAC/D;IAEAF,GAAG,0CAA0C;QACzCpB;QAEAqB,OAAOC,OAAO,WAAW,CAAC,cAAc,YAAY,CAAC,4BAA4B,IAAI,CACjF;IAER;IAEAF,GAAG,yEAAyE;QACxEpB;QAEA,MAAMuB,MAAMD,OAAO,WAAW,CAAC;QAC/BD,OAAOE,IAAI,YAAY,CAAC,gBAAgB,IAAI,CAAC;QAC7C,MAAMC,UAAUD,IAAI,aAAa;QACjCF,OAAOG,QAAQ,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC;QACxCH,OAAOG,QAAQ,YAAY,CAAC,yBAAyB,IAAI,CAAC;IAC9D;IAEAJ,GAAG,6FAA6F;QAC5F,MAAM,EAAEK,SAAS,EAAE,GAAGzB;QAEtBqB,OAAOI,UAAU,IAAI,EAAE,qBAAqB,CAAC;QAC7C,MAAMxB,SAASwB,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC9CJ,OAAOpB,QAAQ,GAAG,CAAC,cAAc,CAAC;QAClCoB,OAAOpB,OAAO,MAAM,EAAE,OAAO,CAAC;YAAE,WAAW;YAAW,kBAAkB;QAAc;QACtFoB,OAAOpB,OAAO,WAAW,EAAE,IAAI,CAAC;QAChCoB,OAAOpB,OAAO,eAAe,EAAE,cAAc,CAACyB;QAC9CL,OAAOpB,OAAO,cAAc,EAAE,cAAc,CAAC0B;IACjD;IAEAP,GAAG,uDAAuD;QACtD,MAAM,EAAEK,SAAS,EAAE,GAAGzB;QAEtBqB,OAAOI,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC;IAC5D;IAEAL,GAAG,iEAAiE;QAChE,MAAM,EAAEK,SAAS,EAAE,GAAGzB,SAAS;YAAE,SAAS;QAAM;QAEhDqB,OAAOI,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC;QACxDJ,OAAOI,UAAU,UAAU,EAAE,wBAAwB,CACjDJ,OAAO,gBAAgB,CAAC;YAAE,YAAY;QAAM;IAEpD;IAEAD,GAAG,kDAAkD;QACjD,MAAM,EAAEQ,WAAW,EAAE,GAAG5B,SAAS;YAAE,aAAa;QAAS;QAEzDqB,OAAOO,YAAY,OAAO,EAAE,oBAAoB,CAAC,QAAQ;YAAE,WAAW;gBAAE,IAAI;YAAS;QAAE;IAC3F;IAEAR,GAAG,+EAA+E;QAC9E,MAAM,EAAEK,SAAS,EAAEI,OAAO,EAAEC,KAAK,EAAE,GAAG9B;QACtC8B,MAAM,QAAQ,CAAC;YAACC,KAAK,MAAM,CAAC;gBAAE,IAAI;YAAc;SAAG;QACnD,IAAIC;QACJH,QAAQ,OAAO,CAAC,kBAAkB,CAAC,OAAM5B;YACrC+B,iBAAiBF,MAAM,OAAO,CAACG,CAAAA,OAAQA,KAAK,EAAE,KAAKhC,OAAO,EAAE;YAC5D,OAAO8B,KAAK,MAAM,CAAC;gBAAE,IAAI9B,OAAO,EAAE;YAAC;QACvC;QACA,MAAMiC,WAAWT,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,eAAe;QAChE,IAAI,CAACS,UACD,MAAM,IAAIC,MAAM;QAGpB,MAAMD,SAAS,MAAM;QAErBb,OAAOQ,QAAQ,OAAO,EAAE,qBAAqB,CAAC;QAC9CR,OAAOQ,QAAQ,OAAO,EAAE,oBAAoB,CAAC;YAAE,IAAI;QAAc;QAEjER,OAAOW,gBAAgB,aAAa;QACpCX,OAAOS,MAAM,QAAQ,IAAI,OAAO,CAAC,EAAE;IACvC;IAEAV,GAAG,qCAAqC;QACpC,MAAM,EAAEK,SAAS,EAAEZ,IAAI,EAAE,GAAGb;QAE5Ba,KAAK,OAAO;QAEZQ,OAAOI,UAAU,OAAO,EAAE,qBAAqB,CAAC;IACpD;AACJ"}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const PageReviewPublishAction: () => React.JSX.Element;
@@ -0,0 +1,15 @@
1
+ import react from "react";
2
+ import { PageEditorConfig } from "@webiny/app-website-builder/presentation/pages/PageEditor/PageEditorConfig.js";
3
+ import { HasPermission } from "@webiny/app-website-builder/presentation/security/HasPermission.js";
4
+ import { PageReviewPublishButton } from "./PageReviewPublishButton.js";
5
+ const { Ui: Ui } = PageEditorConfig;
6
+ const PageReviewPublishAction = ()=>/*#__PURE__*/ react.createElement(Ui.TopBar.Action, {
7
+ name: "buttonWorkflowPublish",
8
+ element: /*#__PURE__*/ react.createElement(HasPermission, {
9
+ entity: "page",
10
+ action: "publish"
11
+ }, /*#__PURE__*/ react.createElement(PageReviewPublishButton, null))
12
+ });
13
+ export { PageReviewPublishAction };
14
+
15
+ //# sourceMappingURL=PageReviewPublishAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Components/PageEditor/PageReviewPublishAction.js","sources":["../../../src/Components/PageEditor/PageReviewPublishAction.tsx"],"sourcesContent":["import React from \"react\";\nimport { PageEditorConfig } from \"@webiny/app-website-builder/presentation/pages/PageEditor/PageEditorConfig.js\";\nimport { HasPermission } from \"@webiny/app-website-builder/presentation/security/HasPermission.js\";\nimport { PageReviewPublishButton } from \"./PageReviewPublishButton.js\";\n\nconst { Ui } = PageEditorConfig;\n\n/*\n * Registered outside `Ui.IsNotReadOnly` on purpose: the base Publish is mounted only while the\n * canvas is editable, and an approved revision is read-only (A73).\n */\nexport const PageReviewPublishAction = () => {\n return (\n <Ui.TopBar.Action\n name={\"buttonWorkflowPublish\"}\n element={\n <HasPermission entity={\"page\"} action={\"publish\"}>\n <PageReviewPublishButton />\n </HasPermission>\n }\n />\n );\n};\n"],"names":["Ui","PageEditorConfig","PageReviewPublishAction","HasPermission","PageReviewPublishButton"],"mappings":";;;;AAKA,MAAM,EAAEA,IAAAA,EAAE,EAAE,GAAGC;AAMR,MAAMC,0BAA0B,IAC5B,WAAP,GACI,oBAACF,GAAG,MAAM,CAAC,MAAM;QACb,MAAM;QACN,uBACI,oBAACG,eAAaA;YAAC,QAAQ;YAAQ,QAAQ;yBACnC,oBAACC,yBAAuBA"}
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ export declare const PageReviewPublishButton: (() => React.JSX.Element | null) & React.NamedExoticComponent<unknown> & {
3
+ readonly type: () => React.JSX.Element | null;
4
+ };
@@ -0,0 +1,23 @@
1
+ import react from "react";
2
+ import { useFeature } from "@webiny/app";
3
+ import { createReactiveComponent } from "@webiny/app-admin";
4
+ import { useSelectFromDocument } from "@webiny/app-website-builder/BaseEditor/hooks/useSelectFromDocument.js";
5
+ import { WbPageStatus } from "@webiny/app-website-builder/constants.js";
6
+ import { PublishButton } from "@webiny/app-website-builder/presentation/pages/PageEditor/TopBar/PublishButton.js";
7
+ import { WbPageReviewFeature } from "../../features/editorReview/feature.js";
8
+ import { DisabledPublishButton } from "./DisabledPublishButton.js";
9
+ const selectStatus = (doc)=>doc.status || WbPageStatus.Draft;
10
+ const PageReviewPublishButton = createReactiveComponent(()=>{
11
+ const { session } = useFeature(WbPageReviewFeature);
12
+ const pageStatus = useSelectFromDocument(selectStatus);
13
+ const { vm } = session.presenter;
14
+ if ("noWorkflow" === vm.status) return null;
15
+ if (pageStatus === WbPageStatus.Published) return null;
16
+ if (vm.allowsPublishing) return /*#__PURE__*/ react.createElement(PublishButton, null);
17
+ return /*#__PURE__*/ react.createElement(DisabledPublishButton, {
18
+ presenter: session.presenter
19
+ });
20
+ });
21
+ export { PageReviewPublishButton };
22
+
23
+ //# sourceMappingURL=PageReviewPublishButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Components/PageEditor/PageReviewPublishButton.js","sources":["../../../src/Components/PageEditor/PageReviewPublishButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { useFeature } from \"@webiny/app\";\nimport { createReactiveComponent } from \"@webiny/app-admin\";\nimport { useSelectFromDocument } from \"@webiny/app-website-builder/BaseEditor/hooks/useSelectFromDocument.js\";\nimport { WbPageStatus } from \"@webiny/app-website-builder/constants.js\";\nimport type { WbStatus } from \"@webiny/app-website-builder/constants.js\";\nimport { PublishButton } from \"@webiny/app-website-builder/presentation/pages/PageEditor/TopBar/PublishButton.js\";\nimport { WbPageReviewFeature } from \"~/features/editorReview/feature.js\";\nimport { DisabledPublishButton } from \"./DisabledPublishButton.js\";\nimport type { IPageEditorDocument } from \"./pageEditorDocument.js\";\n\nconst selectStatus = (doc: IPageEditorDocument): WbStatus => {\n return doc.status || WbPageStatus.Draft;\n};\n\n/*\n * Publish for every namespace that has a workflow. It does not depend on the canvas being editable:\n * an approved revision is read-only and still publishes (A73).\n */\nexport const PageReviewPublishButton = createReactiveComponent(() => {\n const { session } = useFeature(WbPageReviewFeature);\n const pageStatus = useSelectFromDocument<WbStatus, IPageEditorDocument>(selectStatus);\n const { vm } = session.presenter;\n\n if (vm.status === \"noWorkflow\") {\n return null;\n }\n\n if (pageStatus === WbPageStatus.Published) {\n return null;\n }\n\n if (vm.allowsPublishing) {\n return <PublishButton />;\n }\n\n return <DisabledPublishButton presenter={session.presenter} />;\n});\n"],"names":["selectStatus","doc","WbPageStatus","PageReviewPublishButton","createReactiveComponent","session","useFeature","WbPageReviewFeature","pageStatus","useSelectFromDocument","vm","PublishButton","DisabledPublishButton"],"mappings":";;;;;;;;AAWA,MAAMA,eAAe,CAACC,MACXA,IAAI,MAAM,IAAIC,aAAa,KAAK;AAOpC,MAAMC,0BAA0BC,wBAAwB;IAC3D,MAAM,EAAEC,OAAO,EAAE,GAAGC,WAAWC;IAC/B,MAAMC,aAAaC,sBAAqDT;IACxE,MAAM,EAAEU,EAAE,EAAE,GAAGL,QAAQ,SAAS;IAEhC,IAAIK,AAAc,iBAAdA,GAAG,MAAM,EACT,OAAO;IAGX,IAAIF,eAAeN,aAAa,SAAS,EACrC,OAAO;IAGX,IAAIQ,GAAG,gBAAgB,EACnB,OAAO,WAAP,GAAO,oBAACC,eAAaA;IAGzB,OAAO,WAAP,GAAO,oBAACC,uBAAqBA;QAAC,WAAWP,QAAQ,SAAS;;AAC9D"}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const PageScheduleDecorator: (props: unknown) => React.JSX.Element;
@@ -0,0 +1,23 @@
1
+ import react from "react";
2
+ import { useFeature } from "@webiny/app";
3
+ import { createReactiveComponent } from "@webiny/app-admin";
4
+ import { PageEditorConfig } from "@webiny/app-website-builder/presentation/pages/PageEditor/PageEditorConfig.js";
5
+ import { WbPageReviewFeature } from "../../features/editorReview/feature.js";
6
+ const { Ui: Ui } = PageEditorConfig;
7
+ const ScheduleGate = createReactiveComponent((props)=>{
8
+ const { session } = useFeature(WbPageReviewFeature);
9
+ if (!session.presenter.vm.allowsPublishing) return null;
10
+ return props.element ?? null;
11
+ });
12
+ const PageScheduleDecorator = Ui.TopBar.DropdownAction.createDecorator((Original)=>function(props) {
13
+ if ("scheduler" === props.name) return /*#__PURE__*/ react.createElement(Original, {
14
+ ...props,
15
+ element: /*#__PURE__*/ react.createElement(ScheduleGate, {
16
+ element: props.element
17
+ })
18
+ });
19
+ return /*#__PURE__*/ react.createElement(Original, props);
20
+ });
21
+ export { PageScheduleDecorator };
22
+
23
+ //# sourceMappingURL=PageScheduleDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Components/PageEditor/PageScheduleDecorator.js","sources":["../../../src/Components/PageEditor/PageScheduleDecorator.tsx"],"sourcesContent":["import React from \"react\";\nimport { useFeature } from \"@webiny/app\";\nimport { createReactiveComponent } from \"@webiny/app-admin\";\nimport { PageEditorConfig } from \"@webiny/app-website-builder/presentation/pages/PageEditor/PageEditorConfig.js\";\nimport { WbPageReviewFeature } from \"~/features/editorReview/feature.js\";\n\nconst { Ui } = PageEditorConfig;\n\ninterface ScheduleGateProps {\n element?: React.ReactElement | null;\n}\n\nconst ScheduleGate = createReactiveComponent((props: ScheduleGateProps) => {\n const { session } = useFeature(WbPageReviewFeature);\n\n if (!session.presenter.vm.allowsPublishing) {\n return null;\n }\n\n return props.element ?? null;\n});\n\n/*\n * Scheduling a publish needs what publishing needs, so the scheduler's \"Schedule\" dropdown\n * action (only present when the scheduler is installed) is hidden unless the review allows\n * publishing; every other dropdown action passes through.\n */\nexport const PageScheduleDecorator = Ui.TopBar.DropdownAction.createDecorator(Original => {\n return function PageScheduleDecoratorAction(props) {\n if (props.name === \"scheduler\") {\n return <Original {...props} element={<ScheduleGate element={props.element} />} />;\n }\n return <Original {...props} />;\n };\n});\n"],"names":["Ui","PageEditorConfig","ScheduleGate","createReactiveComponent","props","session","useFeature","WbPageReviewFeature","PageScheduleDecorator","Original"],"mappings":";;;;;AAMA,MAAM,EAAEA,IAAAA,EAAE,EAAE,GAAGC;AAMf,MAAMC,eAAeC,wBAAwB,CAACC;IAC1C,MAAM,EAAEC,OAAO,EAAE,GAAGC,WAAWC;IAE/B,IAAI,CAACF,QAAQ,SAAS,CAAC,EAAE,CAAC,gBAAgB,EACtC,OAAO;IAGX,OAAOD,MAAM,OAAO,IAAI;AAC5B;AAOO,MAAMI,wBAAwBR,GAAG,MAAM,CAAC,cAAc,CAAC,eAAe,CAACS,CAAAA,WACnE,SAAqCL,KAAK;QAC7C,IAAIA,AAAe,gBAAfA,MAAM,IAAI,EACV,OAAO,WAAP,GAAO,oBAACK,UAAAA;YAAU,GAAGL,KAAK;YAAE,uBAAS,oBAACF,cAAYA;gBAAC,SAASE,MAAM,OAAO;;;QAE7E,OAAO,WAAP,GAAO,oBAACK,UAAaL;IACzB"}
@@ -0,0 +1,75 @@
1
+ import react from "react";
2
+ import { cleanup, render, screen } from "@testing-library/react";
3
+ import { afterEach, describe, expect, it } from "vitest";
4
+ import { Container } from "@webiny/di";
5
+ import { InternalPageEditorConfig, PageEditorConfig } from "@webiny/app-website-builder/presentation/pages/PageEditor/PageEditorConfig.js";
6
+ import { WbPageReview } from "../../features/editorReview/abstractions.js";
7
+ import { WbEditorHarness } from "../../testing/WbEditorHarness.js";
8
+ import { createFakeSession } from "../../testing/createFakeSession.js";
9
+ import { createPageEditor } from "../../testing/createPageEditor.js";
10
+ import { PageScheduleDecorator } from "./PageScheduleDecorator.js";
11
+ const { Ui: Ui } = PageEditorConfig;
12
+ const mountSchedule = (kind)=>{
13
+ const handle = createFakeSession(kind);
14
+ const container = new Container();
15
+ container.registerInstance(WbPageReview, handle.session);
16
+ render(/*#__PURE__*/ react.createElement(WbEditorHarness, {
17
+ container: container,
18
+ editor: createPageEditor("draft"),
19
+ groups: [
20
+ "dropdownActions"
21
+ ]
22
+ }, /*#__PURE__*/ react.createElement(PageScheduleDecorator, null), /*#__PURE__*/ react.createElement(InternalPageEditorConfig, null, /*#__PURE__*/ react.createElement(Ui.TopBar.DropdownAction, {
23
+ name: "scheduler",
24
+ element: /*#__PURE__*/ react.createElement("span", {
25
+ "data-testid": "schedule"
26
+ })
27
+ }), /*#__PURE__*/ react.createElement(Ui.TopBar.DropdownAction, {
28
+ name: "other",
29
+ element: /*#__PURE__*/ react.createElement("span", {
30
+ "data-testid": "other-action"
31
+ })
32
+ }))));
33
+ };
34
+ const CASES = [
35
+ {
36
+ kind: "loading",
37
+ shown: false
38
+ },
39
+ {
40
+ kind: "failed",
41
+ shown: false
42
+ },
43
+ {
44
+ kind: "noWorkflow",
45
+ shown: true
46
+ },
47
+ {
48
+ kind: "none",
49
+ shown: false
50
+ },
51
+ {
52
+ kind: "inProgress",
53
+ shown: false
54
+ },
55
+ {
56
+ kind: "approved",
57
+ shown: true
58
+ },
59
+ {
60
+ kind: "rejected",
61
+ shown: false
62
+ }
63
+ ];
64
+ describe("PageScheduleDecorator", ()=>{
65
+ afterEach(()=>{
66
+ cleanup();
67
+ });
68
+ it.each(CASES)("$kind review: Schedule shown is $shown", async ({ kind, shown })=>{
69
+ mountSchedule(kind);
70
+ await screen.findByTestId("other-action");
71
+ expect(screen.queryAllByTestId("schedule")).toHaveLength(shown ? 1 : 0);
72
+ });
73
+ });
74
+
75
+ //# sourceMappingURL=PageScheduleDecorator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Components/PageEditor/PageScheduleDecorator.test.js","sources":["../../../src/Components/PageEditor/PageScheduleDecorator.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 { Container } from \"@webiny/di\";\nimport { InternalPageEditorConfig } from \"@webiny/app-website-builder/presentation/pages/PageEditor/PageEditorConfig.js\";\nimport { PageEditorConfig } from \"@webiny/app-website-builder/presentation/pages/PageEditor/PageEditorConfig.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 type { FakeReviewKind } from \"~/testing/createFakeVm.js\";\nimport { PageScheduleDecorator } from \"./PageScheduleDecorator.js\";\n\nconst { Ui } = PageEditorConfig;\n\nconst mountSchedule = (kind: FakeReviewKind) => {\n const handle = createFakeSession(kind);\n const container = new Container();\n container.registerInstance(WbPageReview, handle.session);\n\n render(\n <WbEditorHarness\n container={container}\n editor={createPageEditor(\"draft\")}\n groups={[\"dropdownActions\"]}\n >\n <PageScheduleDecorator />\n <InternalPageEditorConfig>\n <Ui.TopBar.DropdownAction\n name={\"scheduler\"}\n element={<span data-testid={\"schedule\"} />}\n />\n <Ui.TopBar.DropdownAction\n name={\"other\"}\n element={<span data-testid={\"other-action\"} />}\n />\n </InternalPageEditorConfig>\n </WbEditorHarness>\n );\n};\n\ninterface ScheduleCase {\n kind: FakeReviewKind;\n shown: boolean;\n}\n\nconst CASES: ScheduleCase[] = [\n { kind: \"loading\", shown: false },\n { kind: \"failed\", shown: false },\n { kind: \"noWorkflow\", shown: true },\n { kind: \"none\", shown: false },\n { kind: \"inProgress\", shown: false },\n { kind: \"approved\", shown: true },\n { kind: \"rejected\", shown: false }\n];\n\ndescribe(\"PageScheduleDecorator\", () => {\n afterEach(() => {\n cleanup();\n });\n\n it.each(CASES)(\"$kind review: Schedule shown is $shown\", async ({ kind, shown }) => {\n mountSchedule(kind);\n // The other action renders in the same pass, so the Schedule count is settled.\n await screen.findByTestId(\"other-action\");\n\n expect(screen.queryAllByTestId(\"schedule\")).toHaveLength(shown ? 1 : 0);\n });\n});\n"],"names":["Ui","PageEditorConfig","mountSchedule","kind","handle","createFakeSession","container","Container","WbPageReview","render","WbEditorHarness","createPageEditor","PageScheduleDecorator","InternalPageEditorConfig","CASES","describe","afterEach","cleanup","it","shown","screen","expect"],"mappings":";;;;;;;;;;AAkBA,MAAM,EAAEA,IAAAA,EAAE,EAAE,GAAGC;AAEf,MAAMC,gBAAgB,CAACC;IACnB,MAAMC,SAASC,kBAAkBF;IACjC,MAAMG,YAAY,IAAIC;IACtBD,UAAU,gBAAgB,CAACE,cAAcJ,OAAO,OAAO;IAEvDK,OAAO,WAADA,GACF,oBAACC,iBAAeA;QACZ,WAAWJ;QACX,QAAQK,iBAAiB;QACzB,QAAQ;YAAC;SAAkB;qBAE3B,oBAACC,uBAAqBA,OAAAA,WAAAA,GACtB,oBAACC,0BAAwBA,MAAAA,WAAAA,GACrB,oBAACb,GAAG,MAAM,CAAC,cAAc;QACrB,MAAM;QACN,uBAAS,oBAAC;YAAK,eAAa;;sBAEhC,oBAACA,GAAG,MAAM,CAAC,cAAc;QACrB,MAAM;QACN,uBAAS,oBAAC;YAAK,eAAa;;;AAKhD;AAOA,MAAMc,QAAwB;IAC1B;QAAE,MAAM;QAAW,OAAO;IAAM;IAChC;QAAE,MAAM;QAAU,OAAO;IAAM;IAC/B;QAAE,MAAM;QAAc,OAAO;IAAK;IAClC;QAAE,MAAM;QAAQ,OAAO;IAAM;IAC7B;QAAE,MAAM;QAAc,OAAO;IAAM;IACnC;QAAE,MAAM;QAAY,OAAO;IAAK;IAChC;QAAE,MAAM;QAAY,OAAO;IAAM;CACpC;AAEDC,SAAS,yBAAyB;IAC9BC,UAAU;QACNC;IACJ;IAEAC,GAAG,IAAI,CAACJ,OAAO,0CAA0C,OAAO,EAAEX,IAAI,EAAEgB,KAAK,EAAE;QAC3EjB,cAAcC;QAEd,MAAMiB,OAAO,YAAY,CAAC;QAE1BC,OAAOD,OAAO,gBAAgB,CAAC,aAAa,YAAY,CAACD,QAAQ,IAAI;IACzE;AACJ"}