@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.
- package/Components/ContentReviews/WbContentReviews.d.ts +2 -0
- package/Components/ContentReviews/WbContentReviews.js +41 -0
- package/Components/ContentReviews/WbContentReviews.js.map +1 -0
- package/Components/ContentReviews/WbContentReviews.smoke.test.d.ts +1 -0
- package/Components/ContentReviews/WbContentReviews.smoke.test.js +59 -0
- package/Components/ContentReviews/WbContentReviews.smoke.test.js.map +1 -0
- package/Components/ContentReviews/WbContentReviews.test.d.ts +1 -0
- package/Components/ContentReviews/WbContentReviews.test.js +80 -0
- package/Components/ContentReviews/WbContentReviews.test.js.map +1 -0
- package/Components/ContentReviews/WbContentReviewsSidebarItem.d.ts +2 -0
- package/Components/ContentReviews/WbContentReviewsSidebarItem.js +18 -0
- package/Components/ContentReviews/WbContentReviewsSidebarItem.js.map +1 -0
- package/Components/ContentReviews/WbContentReviewsSidebarItem.test.d.ts +1 -0
- package/Components/ContentReviews/WbContentReviewsSidebarItem.test.js +67 -0
- package/Components/ContentReviews/WbContentReviewsSidebarItem.test.js.map +1 -0
- package/Components/PageEditor/DisabledPublishButton.d.ts +6 -0
- package/Components/PageEditor/DisabledPublishButton.js +17 -0
- package/Components/PageEditor/DisabledPublishButton.js.map +1 -0
- package/Components/PageEditor/DisabledPublishButton.test.d.ts +1 -0
- package/Components/PageEditor/DisabledPublishButton.test.js +67 -0
- package/Components/PageEditor/DisabledPublishButton.test.js.map +1 -0
- package/Components/PageEditor/PageBasePublishDecorator.d.ts +2 -0
- package/Components/PageEditor/PageBasePublishDecorator.js +23 -0
- package/Components/PageEditor/PageBasePublishDecorator.js.map +1 -0
- package/Components/PageEditor/PageEditorAutoSave.d.ts +2 -0
- package/Components/PageEditor/PageEditorAutoSave.js +23 -0
- package/Components/PageEditor/PageEditorAutoSave.js.map +1 -0
- package/Components/PageEditor/PageEditorAutoSave.test.d.ts +1 -0
- package/Components/PageEditor/PageEditorAutoSave.test.js +111 -0
- package/Components/PageEditor/PageEditorAutoSave.test.js.map +1 -0
- package/Components/PageEditor/PageEditorConfig.d.ts +2 -0
- package/Components/PageEditor/PageEditorConfig.js +13 -0
- package/Components/PageEditor/PageEditorConfig.js.map +1 -0
- package/Components/PageEditor/PageEditorLayout.d.ts +2 -0
- package/Components/PageEditor/PageEditorLayout.js +10 -0
- package/Components/PageEditor/PageEditorLayout.js.map +1 -0
- package/Components/PageEditor/PageEditorLayout.test.d.ts +1 -0
- package/Components/PageEditor/PageEditorLayout.test.js +121 -0
- package/Components/PageEditor/PageEditorLayout.test.js.map +1 -0
- package/Components/PageEditor/PageEditorTopBar.d.ts +2 -0
- package/Components/PageEditor/PageEditorTopBar.js +10 -0
- package/Components/PageEditor/PageEditorTopBar.js.map +1 -0
- package/Components/PageEditor/PageEditorTopBar.test.d.ts +1 -0
- package/Components/PageEditor/PageEditorTopBar.test.js +175 -0
- package/Components/PageEditor/PageEditorTopBar.test.js.map +1 -0
- package/Components/PageEditor/PageNewRevisionDecorator.d.ts +2 -0
- package/Components/PageEditor/PageNewRevisionDecorator.js +24 -0
- package/Components/PageEditor/PageNewRevisionDecorator.js.map +1 -0
- package/Components/PageEditor/PageNewRevisionDecorator.test.d.ts +1 -0
- package/Components/PageEditor/PageNewRevisionDecorator.test.js +107 -0
- package/Components/PageEditor/PageNewRevisionDecorator.test.js.map +1 -0
- package/Components/PageEditor/PageReadOnlySync.d.ts +3 -0
- package/Components/PageEditor/PageReadOnlySync.js +23 -0
- package/Components/PageEditor/PageReadOnlySync.js.map +1 -0
- package/Components/PageEditor/PageReviewBar.d.ts +4 -0
- package/Components/PageEditor/PageReviewBar.js +93 -0
- package/Components/PageEditor/PageReviewBar.js.map +1 -0
- package/Components/PageEditor/PageReviewBar.test.d.ts +1 -0
- package/Components/PageEditor/PageReviewBar.test.js +135 -0
- package/Components/PageEditor/PageReviewBar.test.js.map +1 -0
- package/Components/PageEditor/PageReviewPublishAction.d.ts +2 -0
- package/Components/PageEditor/PageReviewPublishAction.js +15 -0
- package/Components/PageEditor/PageReviewPublishAction.js.map +1 -0
- package/Components/PageEditor/PageReviewPublishButton.d.ts +4 -0
- package/Components/PageEditor/PageReviewPublishButton.js +23 -0
- package/Components/PageEditor/PageReviewPublishButton.js.map +1 -0
- package/Components/PageEditor/PageScheduleDecorator.d.ts +2 -0
- package/Components/PageEditor/PageScheduleDecorator.js +23 -0
- package/Components/PageEditor/PageScheduleDecorator.js.map +1 -0
- package/Components/PageEditor/PageScheduleDecorator.test.d.ts +1 -0
- package/Components/PageEditor/PageScheduleDecorator.test.js +75 -0
- package/Components/PageEditor/PageScheduleDecorator.test.js.map +1 -0
- package/Components/PageEditor/getPageReadOnlyReason.d.ts +4 -0
- package/Components/PageEditor/getPageReadOnlyReason.js +20 -0
- package/Components/PageEditor/getPageReadOnlyReason.js.map +1 -0
- package/Components/PageEditor/getPageReadOnlyReason.test.d.ts +1 -0
- package/Components/PageEditor/getPageReadOnlyReason.test.js +122 -0
- package/Components/PageEditor/getPageReadOnlyReason.test.js.map +1 -0
- package/Components/PageEditor/getPageReviewContext.d.ts +9 -0
- package/Components/PageEditor/getPageReviewContext.js +13 -0
- package/Components/PageEditor/getPageReviewContext.js.map +1 -0
- package/Components/PageEditor/getPageReviewContext.test.d.ts +1 -0
- package/Components/PageEditor/getPageReviewContext.test.js +42 -0
- package/Components/PageEditor/getPageReviewContext.test.js.map +1 -0
- package/Components/PageEditor/pageEditorDocument.d.ts +17 -0
- package/Components/PageEditor/pageEditorDocument.js +0 -0
- package/Components/PageEditor/pageReviewMatrix.test.d.ts +1 -0
- package/Components/PageEditor/pageReviewMatrix.test.js +223 -0
- package/Components/PageEditor/pageReviewMatrix.test.js.map +1 -0
- package/Components/PageEditor/publishMatrix.test.d.ts +1 -0
- package/Components/PageEditor/publishMatrix.test.js +313 -0
- package/Components/PageEditor/publishMatrix.test.js.map +1 -0
- package/Components/PagesList/PageListReviewGatedActions.d.ts +2 -0
- package/Components/PagesList/PageListReviewGatedActions.js +27 -0
- package/Components/PagesList/PageListReviewGatedActions.js.map +1 -0
- package/Components/PagesList/PageListReviewGatedActions.test.d.ts +1 -0
- package/Components/PagesList/PageListReviewGatedActions.test.js +94 -0
- package/Components/PagesList/PageListReviewGatedActions.test.js.map +1 -0
- package/Components/PagesList/PagesList.d.ts +2 -0
- package/Components/PagesList/PagesList.js +8 -0
- package/Components/PagesList/PagesList.js.map +1 -0
- package/Components/PagesList/PagesList.test.d.ts +1 -0
- package/Components/PagesList/PagesList.test.js +47 -0
- package/Components/PagesList/PagesList.test.js.map +1 -0
- package/Components/PagesList/index.d.ts +1 -0
- package/Components/PagesList/index.js +1 -0
- package/Components/index.d.ts +2 -0
- package/Components/index.js +2 -0
- package/LICENSE +21 -0
- package/README.md +11 -0
- package/Routes/WebsiteBuilderWorkflowsMenu.d.ts +2 -0
- package/Routes/WebsiteBuilderWorkflowsMenu.js +23 -0
- package/Routes/WebsiteBuilderWorkflowsMenu.js.map +1 -0
- package/Routes/WebsiteBuilderWorkflowsMenu.test.d.ts +1 -0
- package/Routes/WebsiteBuilderWorkflowsMenu.test.js +141 -0
- package/Routes/WebsiteBuilderWorkflowsMenu.test.js.map +1 -0
- package/Routes/index.d.ts +1 -0
- package/Routes/index.js +1 -0
- package/constants.d.ts +1 -0
- package/constants.js +4 -0
- package/constants.js.map +1 -0
- package/editorGlue.wiring.test.d.ts +1 -0
- package/editorGlue.wiring.test.js +128 -0
- package/editorGlue.wiring.test.js.map +1 -0
- package/features/cache/WbReviewCacheSyncHandler.d.ts +8 -0
- package/features/cache/WbReviewCacheSyncHandler.js +14 -0
- package/features/cache/WbReviewCacheSyncHandler.js.map +1 -0
- package/features/cache/WbReviewPageCacheWriter.d.ts +17 -0
- package/features/cache/WbReviewPageCacheWriter.js +39 -0
- package/features/cache/WbReviewPageCacheWriter.js.map +1 -0
- package/features/cache/WbReviewPageCacheWriter.test.d.ts +1 -0
- package/features/cache/WbReviewPageCacheWriter.test.js +115 -0
- package/features/cache/WbReviewPageCacheWriter.test.js.map +1 -0
- package/features/cache/abstractions.d.ts +5 -0
- package/features/cache/abstractions.js +5 -0
- package/features/cache/abstractions.js.map +1 -0
- package/features/cache/feature.d.ts +1 -0
- package/features/cache/feature.js +13 -0
- package/features/cache/feature.js.map +1 -0
- package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.d.ts +25 -0
- package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.js +112 -0
- package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.js.map +1 -0
- package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.test.d.ts +1 -0
- package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.test.js +632 -0
- package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.test.js.map +1 -0
- package/features/editorGateway/feature.d.ts +1 -0
- package/features/editorGateway/feature.js +11 -0
- package/features/editorGateway/feature.js.map +1 -0
- package/features/editorGateway/feature.test.d.ts +1 -0
- package/features/editorGateway/feature.test.js +244 -0
- package/features/editorGateway/feature.test.js.map +1 -0
- package/features/editorGateway/graphql/deleteWebsiteBuilderPageWorkflow.d.ts +1 -0
- package/features/editorGateway/graphql/deleteWebsiteBuilderPageWorkflow.js +19 -0
- package/features/editorGateway/graphql/deleteWebsiteBuilderPageWorkflow.js.map +1 -0
- package/features/editorGateway/graphql/getWebsiteBuilderPageWorkflow.d.ts +1 -0
- package/features/editorGateway/graphql/getWebsiteBuilderPageWorkflow.js +19 -0
- package/features/editorGateway/graphql/getWebsiteBuilderPageWorkflow.js.map +1 -0
- package/features/editorGateway/graphql/inspectWebsiteBuilderPageRouting.d.ts +1 -0
- package/features/editorGateway/graphql/inspectWebsiteBuilderPageRouting.js +19 -0
- package/features/editorGateway/graphql/inspectWebsiteBuilderPageRouting.js.map +1 -0
- package/features/editorGateway/graphql/listWebsiteBuilderPageWorkflowNames.d.ts +1 -0
- package/features/editorGateway/graphql/listWebsiteBuilderPageWorkflowNames.js +23 -0
- package/features/editorGateway/graphql/listWebsiteBuilderPageWorkflowNames.js.map +1 -0
- package/features/editorGateway/graphql/storeWebsiteBuilderPageWorkflow.d.ts +1 -0
- package/features/editorGateway/graphql/storeWebsiteBuilderPageWorkflow.js +19 -0
- package/features/editorGateway/graphql/storeWebsiteBuilderPageWorkflow.js.map +1 -0
- package/features/editorGateway/graphql/websiteBuilderPageFolderExists.d.ts +1 -0
- package/features/editorGateway/graphql/websiteBuilderPageFolderExists.js +16 -0
- package/features/editorGateway/graphql/websiteBuilderPageFolderExists.js.map +1 -0
- package/features/editorMounting/WbWorkflowEditorAppAdapter.d.ts +21 -0
- package/features/editorMounting/WbWorkflowEditorAppAdapter.js +45 -0
- package/features/editorMounting/WbWorkflowEditorAppAdapter.js.map +1 -0
- package/features/editorMounting/WbWorkflowEditorAppAdapter.test.d.ts +1 -0
- package/features/editorMounting/WbWorkflowEditorAppAdapter.test.js +115 -0
- package/features/editorMounting/WbWorkflowEditorAppAdapter.test.js.map +1 -0
- package/features/editorMounting/abstractions.d.ts +5 -0
- package/features/editorMounting/abstractions.js +5 -0
- package/features/editorMounting/abstractions.js.map +1 -0
- package/features/editorMounting/feature.d.ts +3 -0
- package/features/editorMounting/feature.js +19 -0
- package/features/editorMounting/feature.js.map +1 -0
- package/features/editorMounting/feature.test.d.ts +1 -0
- package/features/editorMounting/feature.test.js +93 -0
- package/features/editorMounting/feature.test.js.map +1 -0
- package/features/editorReview/WbPageContentReloader.d.ts +12 -0
- package/features/editorReview/WbPageContentReloader.js +40 -0
- package/features/editorReview/WbPageContentReloader.js.map +1 -0
- package/features/editorReview/WbPageContentReloader.test.d.ts +1 -0
- package/features/editorReview/WbPageContentReloader.test.js +222 -0
- package/features/editorReview/WbPageContentReloader.test.js.map +1 -0
- package/features/editorReview/WbPageReview.d.ts +8 -0
- package/features/editorReview/WbPageReview.js +14 -0
- package/features/editorReview/WbPageReview.js.map +1 -0
- package/features/editorReview/WbPageUnsavedChanges.d.ts +8 -0
- package/features/editorReview/WbPageUnsavedChanges.js +12 -0
- package/features/editorReview/WbPageUnsavedChanges.js.map +1 -0
- package/features/editorReview/WbPageUnsavedChanges.test.d.ts +1 -0
- package/features/editorReview/WbPageUnsavedChanges.test.js +33 -0
- package/features/editorReview/WbPageUnsavedChanges.test.js.map +1 -0
- package/features/editorReview/abstractions.d.ts +5 -0
- package/features/editorReview/abstractions.js +5 -0
- package/features/editorReview/abstractions.js.map +1 -0
- package/features/editorReview/feature.d.ts +3 -0
- package/features/editorReview/feature.js +17 -0
- package/features/editorReview/feature.js.map +1 -0
- package/features/gateway/WbReviewChangeMessageHandler.d.ts +8 -0
- package/features/gateway/WbReviewChangeMessageHandler.js +16 -0
- package/features/gateway/WbReviewChangeMessageHandler.js.map +1 -0
- package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.d.ts +13 -0
- package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.js +35 -0
- package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.js.map +1 -0
- package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.test.d.ts +1 -0
- package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.test.js +47 -0
- package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.test.js.map +1 -0
- package/features/gateway/WbReviewContentAdapter/abstractions.d.ts +5 -0
- package/features/gateway/WbReviewContentAdapter/abstractions.js +5 -0
- package/features/gateway/WbReviewContentAdapter/abstractions.js.map +1 -0
- package/features/gateway/WbReviewGateway/WbReviewGateway.d.ts +51 -0
- package/features/gateway/WbReviewGateway/WbReviewGateway.js +216 -0
- package/features/gateway/WbReviewGateway/WbReviewGateway.js.map +1 -0
- package/features/gateway/WbReviewGateway/WbReviewGateway.test.d.ts +1 -0
- package/features/gateway/WbReviewGateway/WbReviewGateway.test.js +647 -0
- package/features/gateway/WbReviewGateway/WbReviewGateway.test.js.map +1 -0
- package/features/gateway/WbReviewNotificationHandler.d.ts +8 -0
- package/features/gateway/WbReviewNotificationHandler.js +16 -0
- package/features/gateway/WbReviewNotificationHandler.js.map +1 -0
- package/features/gateway/WbReviewRowProvider/WbReviewRowProvider.d.ts +8 -0
- package/features/gateway/WbReviewRowProvider/WbReviewRowProvider.js +14 -0
- package/features/gateway/WbReviewRowProvider/WbReviewRowProvider.js.map +1 -0
- package/features/gateway/WbReviewRowProvider/abstractions.d.ts +5 -0
- package/features/gateway/WbReviewRowProvider/abstractions.js +5 -0
- package/features/gateway/WbReviewRowProvider/abstractions.js.map +1 -0
- package/features/gateway/assertWbPageNamespace.d.ts +1 -0
- package/features/gateway/assertWbPageNamespace.js +7 -0
- package/features/gateway/assertWbPageNamespace.js.map +1 -0
- package/features/gateway/contentReviewsBindings.test.d.ts +1 -0
- package/features/gateway/contentReviewsBindings.test.js +159 -0
- package/features/gateway/contentReviewsBindings.test.js.map +1 -0
- package/features/gateway/feature.d.ts +4 -0
- package/features/gateway/feature.js +27 -0
- package/features/gateway/feature.js.map +1 -0
- package/features/gateway/feature.test.d.ts +1 -0
- package/features/gateway/feature.test.js +85 -0
- package/features/gateway/feature.test.js.map +1 -0
- package/features/gateway/graphql/WbOperationResponse.d.ts +3 -0
- package/features/gateway/graphql/WbOperationResponse.js +0 -0
- package/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.d.ts +1 -0
- package/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.js +22 -0
- package/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.js.map +1 -0
- package/features/gateway/graphql/cancelWebsiteBuilderPageReview.d.ts +1 -0
- package/features/gateway/graphql/cancelWebsiteBuilderPageReview.js +18 -0
- package/features/gateway/graphql/cancelWebsiteBuilderPageReview.js.map +1 -0
- package/features/gateway/graphql/cancelWebsiteBuilderPageReviewsForDelete.d.ts +1 -0
- package/features/gateway/graphql/cancelWebsiteBuilderPageReviewsForDelete.js +26 -0
- package/features/gateway/graphql/cancelWebsiteBuilderPageReviewsForDelete.js.map +1 -0
- package/features/gateway/graphql/getWebsiteBuilderPageReview.d.ts +1 -0
- package/features/gateway/graphql/getWebsiteBuilderPageReview.js +18 -0
- package/features/gateway/graphql/getWebsiteBuilderPageReview.js.map +1 -0
- package/features/gateway/graphql/getWebsiteBuilderPageReviewStepRun.d.ts +1 -0
- package/features/gateway/graphql/getWebsiteBuilderPageReviewStepRun.js +18 -0
- package/features/gateway/graphql/getWebsiteBuilderPageReviewStepRun.js.map +1 -0
- package/features/gateway/graphql/getWebsiteBuilderPageTargetReview.d.ts +1 -0
- package/features/gateway/graphql/getWebsiteBuilderPageTargetReview.js +18 -0
- package/features/gateway/graphql/getWebsiteBuilderPageTargetReview.js.map +1 -0
- package/features/gateway/graphql/listWebsiteBuilderPageReviewStepCandidates.d.ts +1 -0
- package/features/gateway/graphql/listWebsiteBuilderPageReviewStepCandidates.js +18 -0
- package/features/gateway/graphql/listWebsiteBuilderPageReviewStepCandidates.js.map +1 -0
- package/features/gateway/graphql/listWebsiteBuilderPageReviews.d.ts +1 -0
- package/features/gateway/graphql/listWebsiteBuilderPageReviews.js +34 -0
- package/features/gateway/graphql/listWebsiteBuilderPageReviews.js.map +1 -0
- package/features/gateway/graphql/listWebsiteBuilderPageStepCandidates.d.ts +1 -0
- package/features/gateway/graphql/listWebsiteBuilderPageStepCandidates.js +22 -0
- package/features/gateway/graphql/listWebsiteBuilderPageStepCandidates.js.map +1 -0
- package/features/gateway/graphql/listWebsiteBuilderPageWorkflows.d.ts +1 -0
- package/features/gateway/graphql/listWebsiteBuilderPageWorkflows.js +18 -0
- package/features/gateway/graphql/listWebsiteBuilderPageWorkflows.js.map +1 -0
- package/features/gateway/graphql/reassignWebsiteBuilderPageReviewStep.d.ts +1 -0
- package/features/gateway/graphql/reassignWebsiteBuilderPageReviewStep.js +22 -0
- package/features/gateway/graphql/reassignWebsiteBuilderPageReviewStep.js.map +1 -0
- package/features/gateway/graphql/rejectWebsiteBuilderPageReviewStep.d.ts +1 -0
- package/features/gateway/graphql/rejectWebsiteBuilderPageReviewStep.js +22 -0
- package/features/gateway/graphql/rejectWebsiteBuilderPageReviewStep.js.map +1 -0
- package/features/gateway/graphql/requestWebsiteBuilderPageReview.d.ts +1 -0
- package/features/gateway/graphql/requestWebsiteBuilderPageReview.js +26 -0
- package/features/gateway/graphql/requestWebsiteBuilderPageReview.js.map +1 -0
- package/features/gateway/graphql/restartWebsiteBuilderPageReviewStep.d.ts +1 -0
- package/features/gateway/graphql/restartWebsiteBuilderPageReviewStep.js +18 -0
- package/features/gateway/graphql/restartWebsiteBuilderPageReviewStep.js.map +1 -0
- package/features/gateway/graphql/startWebsiteBuilderPageReviewStep.d.ts +1 -0
- package/features/gateway/graphql/startWebsiteBuilderPageReviewStep.js +18 -0
- package/features/gateway/graphql/startWebsiteBuilderPageReviewStep.js.map +1 -0
- package/features/gateway/graphql/takeOverWebsiteBuilderPageReviewStep.d.ts +1 -0
- package/features/gateway/graphql/takeOverWebsiteBuilderPageReviewStep.js +26 -0
- package/features/gateway/graphql/takeOverWebsiteBuilderPageReviewStep.js.map +1 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.d.ts +14 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.js +27 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.js.map +1 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.test.d.ts +1 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.test.js +234 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.test.js.map +1 -0
- package/features/trash/DeletePageRevisionUseCaseReviewDecorator.d.ts +13 -0
- package/features/trash/DeletePageRevisionUseCaseReviewDecorator.js +23 -0
- package/features/trash/DeletePageRevisionUseCaseReviewDecorator.js.map +1 -0
- package/features/trash/DeletePageRevisionUseCaseReviewDecorator.test.d.ts +1 -0
- package/features/trash/DeletePageRevisionUseCaseReviewDecorator.test.js +114 -0
- package/features/trash/DeletePageRevisionUseCaseReviewDecorator.test.js.map +1 -0
- package/features/trash/DeletePageUseCaseReviewDecorator.d.ts +13 -0
- package/features/trash/DeletePageUseCaseReviewDecorator.js +23 -0
- package/features/trash/DeletePageUseCaseReviewDecorator.js.map +1 -0
- package/features/trash/DeletePageUseCaseReviewDecorator.test.d.ts +1 -0
- package/features/trash/DeletePageUseCaseReviewDecorator.test.js +134 -0
- package/features/trash/DeletePageUseCaseReviewDecorator.test.js.map +1 -0
- package/features/trash/feature.d.ts +1 -0
- package/features/trash/feature.js +15 -0
- package/features/trash/feature.js.map +1 -0
- package/features/trash/feature.test.d.ts +1 -0
- package/features/trash/feature.test.js +183 -0
- package/features/trash/feature.test.js.map +1 -0
- package/hooks/usePage.d.ts +5 -0
- package/hooks/usePage.js +15 -0
- package/hooks/usePage.js.map +1 -0
- package/hooks/usePage.test.d.ts +1 -0
- package/hooks/usePage.test.js +49 -0
- package/hooks/usePage.test.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.js +40 -0
- package/index.js.map +1 -0
- package/index.mount.test.d.ts +1 -0
- package/index.mount.test.js +50 -0
- package/index.mount.test.js.map +1 -0
- package/index.test.d.ts +1 -0
- package/index.test.js +523 -0
- package/index.test.js.map +1 -0
- package/package.json +54 -0
- package/pageListChangeStatus.wiring.test.d.ts +1 -0
- package/pageListChangeStatus.wiring.test.js +175 -0
- package/pageListChangeStatus.wiring.test.js.map +1 -0
- package/pageListGlue.wiring.test.d.ts +1 -0
- package/pageListGlue.wiring.test.js +220 -0
- package/pageListGlue.wiring.test.js.map +1 -0
- package/presentation/page/PageGet/WbReviewGetPageFieldSelection.d.ts +8 -0
- package/presentation/page/PageGet/WbReviewGetPageFieldSelection.js +16 -0
- package/presentation/page/PageGet/WbReviewGetPageFieldSelection.js.map +1 -0
- package/presentation/page/PageGet/WbReviewGetPageFieldSelection.test.d.ts +1 -0
- package/presentation/page/PageGet/WbReviewGetPageFieldSelection.test.js +19 -0
- package/presentation/page/PageGet/WbReviewGetPageFieldSelection.test.js.map +1 -0
- package/presentation/page/PageGet/feature.d.ts +1 -0
- package/presentation/page/PageGet/feature.js +11 -0
- package/presentation/page/PageGet/feature.js.map +1 -0
- package/presentation/page/PageList/WbReviewListPagesFieldSelection.d.ts +8 -0
- package/presentation/page/PageList/WbReviewListPagesFieldSelection.js +16 -0
- package/presentation/page/PageList/WbReviewListPagesFieldSelection.js.map +1 -0
- package/presentation/page/PageList/WbReviewListPagesFieldSelection.test.d.ts +1 -0
- package/presentation/page/PageList/WbReviewListPagesFieldSelection.test.js +19 -0
- package/presentation/page/PageList/WbReviewListPagesFieldSelection.test.js.map +1 -0
- package/presentation/page/PageList/WbReviewTableRowMapperDecorator.d.ts +12 -0
- package/presentation/page/PageList/WbReviewTableRowMapperDecorator.js +24 -0
- package/presentation/page/PageList/WbReviewTableRowMapperDecorator.js.map +1 -0
- package/presentation/page/PageList/WbReviewTableRowMapperDecorator.test.d.ts +1 -0
- package/presentation/page/PageList/WbReviewTableRowMapperDecorator.test.js +70 -0
- package/presentation/page/PageList/WbReviewTableRowMapperDecorator.test.js.map +1 -0
- package/presentation/page/PageList/feature.d.ts +1 -0
- package/presentation/page/PageList/feature.js +13 -0
- package/presentation/page/PageList/feature.js.map +1 -0
- package/presentation/page/RevisionList/RevisionListPresenterDecorator.d.ts +15 -0
- package/presentation/page/RevisionList/RevisionListPresenterDecorator.js +36 -0
- package/presentation/page/RevisionList/RevisionListPresenterDecorator.js.map +1 -0
- package/presentation/page/RevisionList/RevisionListPresenterDecorator.test.d.ts +1 -0
- package/presentation/page/RevisionList/RevisionListPresenterDecorator.test.js +119 -0
- package/presentation/page/RevisionList/RevisionListPresenterDecorator.test.js.map +1 -0
- package/presentation/page/RevisionList/feature.d.ts +1 -0
- package/presentation/page/RevisionList/feature.js +11 -0
- package/presentation/page/RevisionList/feature.js.map +1 -0
- package/presentation/page/wbReviewPageSelection.d.ts +1 -0
- package/presentation/page/wbReviewPageSelection.js +9 -0
- package/presentation/page/wbReviewPageSelection.js.map +1 -0
- package/publishAutosave.wiring.test.d.ts +1 -0
- package/publishAutosave.wiring.test.js +162 -0
- package/publishAutosave.wiring.test.js.map +1 -0
- package/routes.d.ts +9 -0
- package/routes.js +19 -0
- package/routes.js.map +1 -0
- package/testing/WbEditorHarness.d.ts +11 -0
- package/testing/WbEditorHarness.js +22 -0
- package/testing/WbEditorHarness.js.map +1 -0
- package/testing/createFakeSession.d.ts +9 -0
- package/testing/createFakeSession.js +29 -0
- package/testing/createFakeSession.js.map +1 -0
- package/testing/createFakeVm.d.ts +3 -0
- package/testing/createFakeVm.js +51 -0
- package/testing/createFakeVm.js.map +1 -0
- package/testing/createFolder.d.ts +2 -0
- package/testing/createFolder.js +13 -0
- package/testing/createFolder.js.map +1 -0
- package/testing/createPageEditor.d.ts +4 -0
- package/testing/createPageEditor.js +26 -0
- package/testing/createPageEditor.js.map +1 -0
- package/testing/registerPageContent.d.ts +20 -0
- package/testing/registerPageContent.js +28 -0
- package/testing/registerPageContent.js.map +1 -0
- package/types.d.ts +9 -0
- 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,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,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,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,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,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 @@
|
|
|
1
|
+
export {};
|
|
@@ -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"}
|