@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,313 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { act, cleanup, render, screen, waitFor } from "@testing-library/react";
|
|
3
|
+
import { afterEach, describe, expect, it, vi } 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 { PageBasePublishDecorator } from "./PageBasePublishDecorator.js";
|
|
11
|
+
import { PageEditorLayout } from "./PageEditorLayout.js";
|
|
12
|
+
import { PageReviewPublishAction } from "./PageReviewPublishAction.js";
|
|
13
|
+
vi.mock("@webiny/icons/publish.svg", ()=>({
|
|
14
|
+
ReactComponent: ()=>null
|
|
15
|
+
}));
|
|
16
|
+
vi.mock("@webiny/app-website-builder/presentation/pages/PageEditor/TopBar/PublishButton.js", async ()=>{
|
|
17
|
+
const React = await import("react");
|
|
18
|
+
const PublishButton = ()=>React.createElement("button", {
|
|
19
|
+
"data-testid": "enabled-publish"
|
|
20
|
+
}, "Publish");
|
|
21
|
+
return {
|
|
22
|
+
PublishButton
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
vi.mock("@webiny/app-workflows/review/presentation/targetReview/components/ReviewTooltip.js", async ()=>{
|
|
26
|
+
const React = await import("react");
|
|
27
|
+
const ReviewTooltip = (props)=>{
|
|
28
|
+
const reason = props.presenter.vm.publishDisabledReason ?? "";
|
|
29
|
+
return React.createElement("span", {
|
|
30
|
+
"data-testid": "review-tooltip",
|
|
31
|
+
"data-reason": reason
|
|
32
|
+
}, props.children("tooltip-description"));
|
|
33
|
+
};
|
|
34
|
+
return {
|
|
35
|
+
ReviewTooltip
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
const permission = vi.hoisted(()=>({
|
|
39
|
+
allowed: true,
|
|
40
|
+
requests: []
|
|
41
|
+
}));
|
|
42
|
+
vi.mock("@webiny/app-website-builder/presentation/security/HasPermission.js", async ()=>{
|
|
43
|
+
const React = await import("react");
|
|
44
|
+
const HasPermission = (props)=>{
|
|
45
|
+
permission.requests.push({
|
|
46
|
+
entity: props.entity,
|
|
47
|
+
action: props.action
|
|
48
|
+
});
|
|
49
|
+
if (!permission.allowed) return null;
|
|
50
|
+
return React.createElement(React.Fragment, null, props.children);
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
HasPermission
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
vi.mock("@webiny/app-website-builder/BaseEditor/config/Layout.js", async ()=>{
|
|
57
|
+
const React = await import("react");
|
|
58
|
+
const { makeDecoratable } = await import("@webiny/react-composition");
|
|
59
|
+
const Layout = makeDecoratable("EditorLayout", ()=>React.createElement("div", {
|
|
60
|
+
"data-testid": "base-layout"
|
|
61
|
+
}));
|
|
62
|
+
return {
|
|
63
|
+
Layout
|
|
64
|
+
};
|
|
65
|
+
});
|
|
66
|
+
const { Ui: Ui } = PageEditorConfig;
|
|
67
|
+
const MATRIX = [
|
|
68
|
+
{
|
|
69
|
+
kind: "loading",
|
|
70
|
+
page: "draft",
|
|
71
|
+
base: false,
|
|
72
|
+
enabled: false,
|
|
73
|
+
disabled: true
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
kind: "loading",
|
|
77
|
+
page: "published",
|
|
78
|
+
base: false,
|
|
79
|
+
enabled: false,
|
|
80
|
+
disabled: false
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
kind: "loading",
|
|
84
|
+
page: "unpublished",
|
|
85
|
+
base: false,
|
|
86
|
+
enabled: false,
|
|
87
|
+
disabled: true
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
kind: "failed",
|
|
91
|
+
page: "draft",
|
|
92
|
+
base: false,
|
|
93
|
+
enabled: false,
|
|
94
|
+
disabled: true
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
kind: "failed",
|
|
98
|
+
page: "published",
|
|
99
|
+
base: false,
|
|
100
|
+
enabled: false,
|
|
101
|
+
disabled: false
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
kind: "failed",
|
|
105
|
+
page: "unpublished",
|
|
106
|
+
base: false,
|
|
107
|
+
enabled: false,
|
|
108
|
+
disabled: true
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
kind: "noWorkflow",
|
|
112
|
+
page: "draft",
|
|
113
|
+
base: true,
|
|
114
|
+
enabled: false,
|
|
115
|
+
disabled: false
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
kind: "noWorkflow",
|
|
119
|
+
page: "published",
|
|
120
|
+
base: false,
|
|
121
|
+
enabled: false,
|
|
122
|
+
disabled: false
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
kind: "noWorkflow",
|
|
126
|
+
page: "unpublished",
|
|
127
|
+
base: false,
|
|
128
|
+
enabled: false,
|
|
129
|
+
disabled: false
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
kind: "none",
|
|
133
|
+
page: "draft",
|
|
134
|
+
base: false,
|
|
135
|
+
enabled: false,
|
|
136
|
+
disabled: true
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
kind: "none",
|
|
140
|
+
page: "published",
|
|
141
|
+
base: false,
|
|
142
|
+
enabled: false,
|
|
143
|
+
disabled: false
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
kind: "none",
|
|
147
|
+
page: "unpublished",
|
|
148
|
+
base: false,
|
|
149
|
+
enabled: true,
|
|
150
|
+
disabled: false
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
kind: "inProgress",
|
|
154
|
+
page: "draft",
|
|
155
|
+
base: false,
|
|
156
|
+
enabled: false,
|
|
157
|
+
disabled: true
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
kind: "inProgress",
|
|
161
|
+
page: "published",
|
|
162
|
+
base: false,
|
|
163
|
+
enabled: false,
|
|
164
|
+
disabled: false
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
kind: "inProgress",
|
|
168
|
+
page: "unpublished",
|
|
169
|
+
base: false,
|
|
170
|
+
enabled: false,
|
|
171
|
+
disabled: true
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
kind: "approved",
|
|
175
|
+
page: "draft",
|
|
176
|
+
base: false,
|
|
177
|
+
enabled: true,
|
|
178
|
+
disabled: false
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
kind: "approved",
|
|
182
|
+
page: "published",
|
|
183
|
+
base: false,
|
|
184
|
+
enabled: false,
|
|
185
|
+
disabled: false
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
kind: "approved",
|
|
189
|
+
page: "unpublished",
|
|
190
|
+
base: false,
|
|
191
|
+
enabled: true,
|
|
192
|
+
disabled: false
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
kind: "rejected",
|
|
196
|
+
page: "draft",
|
|
197
|
+
base: false,
|
|
198
|
+
enabled: false,
|
|
199
|
+
disabled: true
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
kind: "rejected",
|
|
203
|
+
page: "published",
|
|
204
|
+
base: false,
|
|
205
|
+
enabled: false,
|
|
206
|
+
disabled: false
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
kind: "rejected",
|
|
210
|
+
page: "unpublished",
|
|
211
|
+
base: false,
|
|
212
|
+
enabled: false,
|
|
213
|
+
disabled: true
|
|
214
|
+
}
|
|
215
|
+
];
|
|
216
|
+
const mountPublish = (pageStatus, kind)=>{
|
|
217
|
+
const handle = createFakeSession(kind, "unpublished" === pageStatus);
|
|
218
|
+
const container = new Container();
|
|
219
|
+
container.registerInstance(WbPageReview, handle.session);
|
|
220
|
+
const editor = createPageEditor(pageStatus);
|
|
221
|
+
render(/*#__PURE__*/ react.createElement(WbEditorHarness, {
|
|
222
|
+
container: container,
|
|
223
|
+
editor: editor,
|
|
224
|
+
groups: [
|
|
225
|
+
"actions"
|
|
226
|
+
]
|
|
227
|
+
}, /*#__PURE__*/ react.createElement(PageEditorLayout, null), /*#__PURE__*/ react.createElement(Ui.Layout, null), /*#__PURE__*/ react.createElement(PageBasePublishDecorator, null), /*#__PURE__*/ react.createElement(InternalPageEditorConfig, null, /*#__PURE__*/ react.createElement(Ui.TopBar.Action, {
|
|
228
|
+
name: "sentinel",
|
|
229
|
+
element: /*#__PURE__*/ react.createElement("span", {
|
|
230
|
+
"data-testid": "sentinel"
|
|
231
|
+
})
|
|
232
|
+
}), /*#__PURE__*/ react.createElement(Ui.IsNotReadOnly, null, /*#__PURE__*/ react.createElement(Ui.TopBar.Action, {
|
|
233
|
+
name: "buttonPublish",
|
|
234
|
+
element: /*#__PURE__*/ react.createElement("span", {
|
|
235
|
+
"data-testid": "base-publish"
|
|
236
|
+
})
|
|
237
|
+
}))), /*#__PURE__*/ react.createElement(PageEditorConfig, null, /*#__PURE__*/ react.createElement(PageReviewPublishAction, null))));
|
|
238
|
+
return {
|
|
239
|
+
...handle,
|
|
240
|
+
editor
|
|
241
|
+
};
|
|
242
|
+
};
|
|
243
|
+
const getDisabledButtons = ()=>Array.from(document.querySelectorAll("button[aria-disabled='true']"));
|
|
244
|
+
describe("Publish by review status and page status", ()=>{
|
|
245
|
+
afterEach(()=>{
|
|
246
|
+
cleanup();
|
|
247
|
+
permission.allowed = true;
|
|
248
|
+
permission.requests = [];
|
|
249
|
+
});
|
|
250
|
+
it.each(MATRIX)("$kind review on a $page page", async ({ kind, page, base, enabled, disabled })=>{
|
|
251
|
+
const { presenter } = mountPublish(page, kind);
|
|
252
|
+
await screen.findByTestId("sentinel");
|
|
253
|
+
await waitFor(()=>{
|
|
254
|
+
expect(screen.queryAllByTestId("base-publish")).toHaveLength(base ? 1 : 0);
|
|
255
|
+
expect(screen.queryAllByTestId("enabled-publish")).toHaveLength(enabled ? 1 : 0);
|
|
256
|
+
expect(getDisabledButtons()).toHaveLength(disabled ? 1 : 0);
|
|
257
|
+
});
|
|
258
|
+
if (disabled) {
|
|
259
|
+
const button = getDisabledButtons()[0];
|
|
260
|
+
const tooltip = button.closest("[data-testid='review-tooltip']");
|
|
261
|
+
const reason = presenter.vm.publishDisabledReason;
|
|
262
|
+
expect(reason).not.toBeNull();
|
|
263
|
+
expect(tooltip?.getAttribute("data-reason")).toBe(reason);
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
it("an approved, unpublished page shows an enabled Publish although the canvas is read-only", async ()=>{
|
|
267
|
+
const { editor } = mountPublish("unpublished", "approved");
|
|
268
|
+
await screen.findByTestId("sentinel");
|
|
269
|
+
await waitFor(()=>{
|
|
270
|
+
expect(screen.queryAllByTestId("enabled-publish")).toHaveLength(1);
|
|
271
|
+
});
|
|
272
|
+
expect(editor.getEditorState().read().isReadOnly).toBe(true);
|
|
273
|
+
expect(screen.queryAllByTestId("base-publish")).toHaveLength(0);
|
|
274
|
+
});
|
|
275
|
+
it("an unpublished page with no review shows an enabled Publish: it was reviewed before it was published (Q19)", async ()=>{
|
|
276
|
+
const { editor } = mountPublish("unpublished", "none");
|
|
277
|
+
await screen.findByTestId("sentinel");
|
|
278
|
+
await waitFor(()=>{
|
|
279
|
+
expect(screen.queryAllByTestId("enabled-publish")).toHaveLength(1);
|
|
280
|
+
});
|
|
281
|
+
expect(editor.getEditorState().read().isReadOnly).toBe(true);
|
|
282
|
+
expect(getDisabledButtons()).toHaveLength(0);
|
|
283
|
+
expect(screen.queryAllByTestId("base-publish")).toHaveLength(0);
|
|
284
|
+
});
|
|
285
|
+
it("follows the review while the editor is open: approval turns the disabled Publish on", async ()=>{
|
|
286
|
+
const { setKind } = mountPublish("draft", "inProgress");
|
|
287
|
+
await screen.findByTestId("sentinel");
|
|
288
|
+
await waitFor(()=>{
|
|
289
|
+
expect(getDisabledButtons()).toHaveLength(1);
|
|
290
|
+
});
|
|
291
|
+
act(()=>{
|
|
292
|
+
setKind("approved");
|
|
293
|
+
});
|
|
294
|
+
await waitFor(()=>{
|
|
295
|
+
expect(screen.queryAllByTestId("enabled-publish")).toHaveLength(1);
|
|
296
|
+
});
|
|
297
|
+
expect(getDisabledButtons()).toHaveLength(0);
|
|
298
|
+
});
|
|
299
|
+
it("shows no workflows Publish to a user without the page publish permission", async ()=>{
|
|
300
|
+
permission.allowed = false;
|
|
301
|
+
mountPublish("draft", "approved");
|
|
302
|
+
await screen.findByTestId("sentinel");
|
|
303
|
+
await act(async ()=>{});
|
|
304
|
+
expect(permission.requests).toContainEqual({
|
|
305
|
+
entity: "page",
|
|
306
|
+
action: "publish"
|
|
307
|
+
});
|
|
308
|
+
expect(screen.queryAllByTestId("enabled-publish")).toHaveLength(0);
|
|
309
|
+
expect(getDisabledButtons()).toHaveLength(0);
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
//# sourceMappingURL=publishMatrix.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PageEditor/publishMatrix.test.js","sources":["../../../src/Components/PageEditor/publishMatrix.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 { vi } 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 type { WbStatus } from \"@webiny/app-website-builder/constants.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 { PageBasePublishDecorator } from \"./PageBasePublishDecorator.js\";\nimport { PageEditorLayout } from \"./PageEditorLayout.js\";\nimport { PageReviewPublishAction } from \"./PageReviewPublishAction.js\";\n\nvi.mock(\"@webiny/icons/publish.svg\", () => {\n return { ReactComponent: () => null };\n});\n\nvi.mock(\n \"@webiny/app-website-builder/presentation/pages/PageEditor/TopBar/PublishButton.js\",\n async () => {\n const React = await import(\"react\");\n const PublishButton = () => {\n return React.createElement(\"button\", { \"data-testid\": \"enabled-publish\" }, \"Publish\");\n };\n return { PublishButton };\n }\n);\n\nvi.mock(\n \"@webiny/app-workflows/review/presentation/targetReview/components/ReviewTooltip.js\",\n async () => {\n const React = await import(\"react\");\n interface StubProps {\n presenter: { vm: { publishDisabledReason: string | null } };\n children: (describedBy: string) => React.ReactNode;\n }\n const ReviewTooltip = (props: StubProps) => {\n const reason = props.presenter.vm.publishDisabledReason ?? \"\";\n return React.createElement(\n \"span\",\n { \"data-testid\": \"review-tooltip\", \"data-reason\": reason },\n props.children(\"tooltip-description\")\n );\n };\n return { ReviewTooltip };\n }\n);\n\ninterface PermissionRequest {\n entity: string;\n action: string;\n}\n\nconst permission = vi.hoisted(() => {\n return { allowed: true, requests: [] as PermissionRequest[] };\n});\n\nvi.mock(\"@webiny/app-website-builder/presentation/security/HasPermission.js\", async () => {\n const React = await import(\"react\");\n interface PermissionGateProps {\n entity: string;\n action: string;\n children: React.ReactNode;\n }\n const HasPermission = (props: PermissionGateProps) => {\n permission.requests.push({ entity: props.entity, action: props.action });\n if (!permission.allowed) {\n return null;\n }\n return React.createElement(React.Fragment, null, props.children);\n };\n return { HasPermission };\n});\n\nvi.mock(\"@webiny/app-website-builder/BaseEditor/config/Layout.js\", async () => {\n const React = await import(\"react\");\n const { makeDecoratable } = await import(\"@webiny/react-composition\");\n const Layout = makeDecoratable(\"EditorLayout\", () => {\n return React.createElement(\"div\", { \"data-testid\": \"base-layout\" });\n });\n return { Layout };\n});\n\nconst { Ui } = PageEditorConfig;\n\ninterface PublishCase {\n kind: FakeReviewKind;\n page: WbStatus;\n base: boolean;\n enabled: boolean;\n disabled: boolean;\n}\n\n/**\n * `base` is the base Publish (only for a workflow-less namespace on an editable canvas), `enabled` the\n * workflows Publish that publishes, `disabled` the focusable disabled one. The reasons are not\n * repeated here: they come from the real `getEditorRules` through the fixture and are pinned by Task 13.\n */\nconst MATRIX: PublishCase[] = [\n { kind: \"loading\", page: \"draft\", base: false, enabled: false, disabled: true },\n { kind: \"loading\", page: \"published\", base: false, enabled: false, disabled: false },\n { kind: \"loading\", page: \"unpublished\", base: false, enabled: false, disabled: true },\n { kind: \"failed\", page: \"draft\", base: false, enabled: false, disabled: true },\n { kind: \"failed\", page: \"published\", base: false, enabled: false, disabled: false },\n { kind: \"failed\", page: \"unpublished\", base: false, enabled: false, disabled: true },\n { kind: \"noWorkflow\", page: \"draft\", base: true, enabled: false, disabled: false },\n { kind: \"noWorkflow\", page: \"published\", base: false, enabled: false, disabled: false },\n { kind: \"noWorkflow\", page: \"unpublished\", base: false, enabled: false, disabled: false },\n { kind: \"none\", page: \"draft\", base: false, enabled: false, disabled: true },\n { kind: \"none\", page: \"published\", base: false, enabled: false, disabled: false },\n { kind: \"none\", page: \"unpublished\", base: false, enabled: true, disabled: false },\n { kind: \"inProgress\", page: \"draft\", base: false, enabled: false, disabled: true },\n { kind: \"inProgress\", page: \"published\", base: false, enabled: false, disabled: false },\n { kind: \"inProgress\", page: \"unpublished\", base: false, enabled: false, disabled: true },\n { kind: \"approved\", page: \"draft\", base: false, enabled: true, disabled: false },\n { kind: \"approved\", page: \"published\", base: false, enabled: false, disabled: false },\n { kind: \"approved\", page: \"unpublished\", base: false, enabled: true, disabled: false },\n { kind: \"rejected\", page: \"draft\", base: false, enabled: false, disabled: true },\n { kind: \"rejected\", page: \"published\", base: false, enabled: false, disabled: false },\n { kind: \"rejected\", page: \"unpublished\", base: false, enabled: false, disabled: true }\n];\n\nconst mountPublish = (pageStatus: WbStatus, kind: FakeReviewKind) => {\n const handle = createFakeSession(kind, pageStatus === \"unpublished\");\n const container = new Container();\n container.registerInstance(WbPageReview, handle.session);\n const editor = createPageEditor(pageStatus);\n\n render(\n <WbEditorHarness container={container} editor={editor} groups={[\"actions\"]}>\n <PageEditorLayout />\n <Ui.Layout />\n <PageBasePublishDecorator />\n <InternalPageEditorConfig>\n <Ui.TopBar.Action name={\"sentinel\"} element={<span data-testid={\"sentinel\"} />} />\n <Ui.IsNotReadOnly>\n <Ui.TopBar.Action\n name={\"buttonPublish\"}\n element={<span data-testid={\"base-publish\"} />}\n />\n </Ui.IsNotReadOnly>\n </InternalPageEditorConfig>\n <PageEditorConfig>\n <PageReviewPublishAction />\n </PageEditorConfig>\n </WbEditorHarness>\n );\n\n return { ...handle, editor };\n};\n\nconst getDisabledButtons = (): HTMLElement[] => {\n return Array.from(document.querySelectorAll<HTMLElement>(\"button[aria-disabled='true']\"));\n};\n\ndescribe(\"Publish by review status and page status\", () => {\n afterEach(() => {\n cleanup();\n permission.allowed = true;\n permission.requests = [];\n });\n\n it.each(MATRIX)(\n \"$kind review on a $page page\",\n async ({ kind, page, base, enabled, disabled }) => {\n const { presenter } = mountPublish(page, kind);\n await screen.findByTestId(\"sentinel\");\n\n await waitFor(() => {\n expect(screen.queryAllByTestId(\"base-publish\")).toHaveLength(base ? 1 : 0);\n expect(screen.queryAllByTestId(\"enabled-publish\")).toHaveLength(enabled ? 1 : 0);\n expect(getDisabledButtons()).toHaveLength(disabled ? 1 : 0);\n });\n\n if (disabled) {\n const button = getDisabledButtons()[0];\n const tooltip = button.closest(\"[data-testid='review-tooltip']\");\n const reason = presenter.vm.publishDisabledReason;\n expect(reason).not.toBeNull();\n expect(tooltip?.getAttribute(\"data-reason\")).toBe(reason);\n }\n }\n );\n\n it(\"an approved, unpublished page shows an enabled Publish although the canvas is read-only\", async () => {\n const { editor } = mountPublish(\"unpublished\", \"approved\");\n await screen.findByTestId(\"sentinel\");\n\n await waitFor(() => {\n expect(screen.queryAllByTestId(\"enabled-publish\")).toHaveLength(1);\n });\n expect(editor.getEditorState().read().isReadOnly).toBe(true);\n expect(screen.queryAllByTestId(\"base-publish\")).toHaveLength(0);\n });\n\n it(\"an unpublished page with no review shows an enabled Publish: it was reviewed before it was published (Q19)\", async () => {\n const { editor } = mountPublish(\"unpublished\", \"none\");\n await screen.findByTestId(\"sentinel\");\n\n await waitFor(() => {\n expect(screen.queryAllByTestId(\"enabled-publish\")).toHaveLength(1);\n });\n expect(editor.getEditorState().read().isReadOnly).toBe(true);\n expect(getDisabledButtons()).toHaveLength(0);\n expect(screen.queryAllByTestId(\"base-publish\")).toHaveLength(0);\n });\n\n it(\"follows the review while the editor is open: approval turns the disabled Publish on\", async () => {\n const { setKind } = mountPublish(\"draft\", \"inProgress\");\n await screen.findByTestId(\"sentinel\");\n await waitFor(() => {\n expect(getDisabledButtons()).toHaveLength(1);\n });\n\n act(() => {\n setKind(\"approved\");\n });\n\n await waitFor(() => {\n expect(screen.queryAllByTestId(\"enabled-publish\")).toHaveLength(1);\n });\n expect(getDisabledButtons()).toHaveLength(0);\n });\n\n it(\"shows no workflows Publish to a user without the page publish permission\", async () => {\n permission.allowed = false;\n mountPublish(\"draft\", \"approved\");\n await screen.findByTestId(\"sentinel\");\n await act(async () => {});\n\n expect(permission.requests).toContainEqual({ entity: \"page\", action: \"publish\" });\n expect(screen.queryAllByTestId(\"enabled-publish\")).toHaveLength(0);\n expect(getDisabledButtons()).toHaveLength(0);\n });\n});\n"],"names":["vi","React","PublishButton","ReviewTooltip","props","reason","permission","HasPermission","makeDecoratable","Layout","Ui","PageEditorConfig","MATRIX","mountPublish","pageStatus","kind","handle","createFakeSession","container","Container","WbPageReview","editor","createPageEditor","render","WbEditorHarness","PageEditorLayout","PageBasePublishDecorator","InternalPageEditorConfig","PageReviewPublishAction","getDisabledButtons","Array","document","describe","afterEach","cleanup","it","page","base","enabled","disabled","presenter","screen","waitFor","expect","button","tooltip","setKind","act"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { PageListConfig } from "@webiny/app-website-builder/presentation/pages/PageList/configs/index.js";
|
|
3
|
+
import { isReviewSelectable } from "@webiny/app-workflows/review/domain/isReviewSelectable.js";
|
|
4
|
+
import { usePage } from "../../hooks/usePage.js";
|
|
5
|
+
const { Browser: Browser } = PageListConfig;
|
|
6
|
+
const WrappedElement = (props)=>{
|
|
7
|
+
const { page } = usePage();
|
|
8
|
+
const reviewState = page.workflow?.reviewState ?? null;
|
|
9
|
+
if (isReviewSelectable(reviewState)) return props.element ?? null;
|
|
10
|
+
return null;
|
|
11
|
+
};
|
|
12
|
+
const REVIEW_GATED_ACTIONS = [
|
|
13
|
+
"changeStatus",
|
|
14
|
+
"page-schedule"
|
|
15
|
+
];
|
|
16
|
+
const PageListReviewGatedActions = Browser.Page.Action.createDecorator((Original)=>function(props) {
|
|
17
|
+
if (REVIEW_GATED_ACTIONS.includes(props.name)) return /*#__PURE__*/ react.createElement(Original, {
|
|
18
|
+
...props,
|
|
19
|
+
element: /*#__PURE__*/ react.createElement(WrappedElement, {
|
|
20
|
+
element: props.element
|
|
21
|
+
})
|
|
22
|
+
});
|
|
23
|
+
return /*#__PURE__*/ react.createElement(Original, props);
|
|
24
|
+
});
|
|
25
|
+
export { PageListReviewGatedActions };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=PageListReviewGatedActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PagesList/PageListReviewGatedActions.js","sources":["../../../src/Components/PagesList/PageListReviewGatedActions.tsx"],"sourcesContent":["import React from \"react\";\nimport { PageListConfig } from \"@webiny/app-website-builder/presentation/pages/PageList/configs/index.js\";\nimport { isReviewSelectable } from \"@webiny/app-workflows/review/domain/isReviewSelectable.js\";\nimport { usePage } from \"~/hooks/usePage.js\";\n\nconst { Browser } = PageListConfig;\n\ninterface IWrappedElementProps {\n element: React.ReactElement | undefined;\n}\n\nconst WrappedElement = (props: IWrappedElementProps) => {\n const { page } = usePage();\n const reviewState = page.workflow?.reviewState ?? null;\n\n if (isReviewSelectable(reviewState)) {\n return props.element ?? null;\n }\n\n return null;\n};\n\n/*\n * Row actions that publish or unpublish a page, which a review blocks: \"Change status\" and the\n * scheduler's \"Schedule\" (only present when the scheduler is installed).\n */\nconst REVIEW_GATED_ACTIONS = [\"changeStatus\", \"page-schedule\"];\n\nexport const PageListReviewGatedActions = Browser.Page.Action.createDecorator(Original => {\n return function PageListReviewGatedAction(props) {\n if (REVIEW_GATED_ACTIONS.includes(props.name)) {\n return <Original {...props} element={<WrappedElement element={props.element} />} />;\n }\n return <Original {...props} />;\n };\n});\n"],"names":["Browser","PageListConfig","WrappedElement","props","page","usePage","reviewState","isReviewSelectable","REVIEW_GATED_ACTIONS","PageListReviewGatedActions","Original"],"mappings":";;;;AAKA,MAAM,EAAEA,SAAAA,OAAO,EAAE,GAAGC;AAMpB,MAAMC,iBAAiB,CAACC;IACpB,MAAM,EAAEC,IAAI,EAAE,GAAGC;IACjB,MAAMC,cAAcF,KAAK,QAAQ,EAAE,eAAe;IAElD,IAAIG,mBAAmBD,cACnB,OAAOH,MAAM,OAAO,IAAI;IAG5B,OAAO;AACX;AAMA,MAAMK,uBAAuB;IAAC;IAAgB;CAAgB;AAEvD,MAAMC,6BAA6BT,QAAQ,IAAI,CAAC,MAAM,CAAC,eAAe,CAACU,CAAAA,WACnE,SAAmCP,KAAK;QAC3C,IAAIK,qBAAqB,QAAQ,CAACL,MAAM,IAAI,GACxC,OAAO,WAAP,GAAO,oBAACO,UAAAA;YAAU,GAAGP,KAAK;YAAE,uBAAS,oBAACD,gBAAcA;gBAAC,SAASC,MAAM,OAAO;;;QAE/E,OAAO,WAAP,GAAO,oBAACO,UAAaP;IACzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "~/types.js";
|
|
@@ -0,0 +1,94 @@
|
|
|
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 { CompositionProvider } from "@webiny/react-composition";
|
|
5
|
+
import { Page, PageDtoMapper } from "@webiny/app-website-builder/domain/Page/index.js";
|
|
6
|
+
import { PageListConfig } from "@webiny/app-website-builder/presentation/pages/PageList/configs/index.js";
|
|
7
|
+
import { PageProvider } from "@webiny/app-website-builder/presentation/pages/PageList/hooks/usePage.js";
|
|
8
|
+
import { ReviewState } from "@webiny/app-workflows/review/domain/ReviewState.js";
|
|
9
|
+
import { StepState } from "@webiny/app-workflows/review/domain/StepState.js";
|
|
10
|
+
import "../../types.js";
|
|
11
|
+
import { PageListReviewGatedActions } from "./PageListReviewGatedActions.js";
|
|
12
|
+
vi.mock("@webiny/app-website-builder/presentation/pages/PageList/configs/Browser/PageAction.js", async ()=>{
|
|
13
|
+
const { makeDecoratable } = await import("@webiny/react-composition");
|
|
14
|
+
const PageAction = makeDecoratable("PageAction", (props)=>props.element ?? null);
|
|
15
|
+
return {
|
|
16
|
+
PageAction
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
|
+
const { Browser: Browser } = PageListConfig;
|
|
20
|
+
const createDto = (reviewState)=>{
|
|
21
|
+
const system = null === reviewState ? null : {
|
|
22
|
+
workflow: {
|
|
23
|
+
workflowId: "workflow-1",
|
|
24
|
+
reviewState,
|
|
25
|
+
stepId: "step-1",
|
|
26
|
+
stepName: "Legal",
|
|
27
|
+
stepState: StepState.InReview
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const page = Page.create({
|
|
31
|
+
id: "page-1#0001",
|
|
32
|
+
entryId: "page-1",
|
|
33
|
+
system
|
|
34
|
+
});
|
|
35
|
+
return PageDtoMapper.toDTO(page);
|
|
36
|
+
};
|
|
37
|
+
const mountActions = (reviewState)=>{
|
|
38
|
+
render(/*#__PURE__*/ react.createElement(CompositionProvider, null, /*#__PURE__*/ react.createElement(PageProvider, {
|
|
39
|
+
page: createDto(reviewState)
|
|
40
|
+
}, /*#__PURE__*/ react.createElement(PageListReviewGatedActions, null), /*#__PURE__*/ react.createElement(Browser.Page.Action, {
|
|
41
|
+
name: "changeStatus",
|
|
42
|
+
element: /*#__PURE__*/ react.createElement("span", {
|
|
43
|
+
"data-testid": "change-status"
|
|
44
|
+
})
|
|
45
|
+
}), /*#__PURE__*/ react.createElement(Browser.Page.Action, {
|
|
46
|
+
name: "page-schedule",
|
|
47
|
+
element: /*#__PURE__*/ react.createElement("span", {
|
|
48
|
+
"data-testid": "schedule"
|
|
49
|
+
})
|
|
50
|
+
}), /*#__PURE__*/ react.createElement(Browser.Page.Action, {
|
|
51
|
+
name: "edit",
|
|
52
|
+
element: /*#__PURE__*/ react.createElement("span", {
|
|
53
|
+
"data-testid": "edit"
|
|
54
|
+
})
|
|
55
|
+
}))));
|
|
56
|
+
};
|
|
57
|
+
const CASES = [
|
|
58
|
+
{
|
|
59
|
+
reviewState: null,
|
|
60
|
+
visible: true
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
reviewState: ReviewState.Approved,
|
|
64
|
+
visible: true
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
reviewState: ReviewState.InProgress,
|
|
68
|
+
visible: false
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
reviewState: ReviewState.Rejected,
|
|
72
|
+
visible: false
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
reviewState: ReviewState.Cancelled,
|
|
76
|
+
visible: false
|
|
77
|
+
}
|
|
78
|
+
];
|
|
79
|
+
describe("PageListReviewGatedActions", ()=>{
|
|
80
|
+
afterEach(()=>{
|
|
81
|
+
cleanup();
|
|
82
|
+
});
|
|
83
|
+
it.each(CASES)("review state $reviewState: Change status and Schedule visible is $visible", ({ reviewState, visible })=>{
|
|
84
|
+
mountActions(reviewState);
|
|
85
|
+
expect(screen.queryAllByTestId("change-status")).toHaveLength(visible ? 1 : 0);
|
|
86
|
+
expect(screen.queryAllByTestId("schedule")).toHaveLength(visible ? 1 : 0);
|
|
87
|
+
});
|
|
88
|
+
it("leaves every other row action alone", ()=>{
|
|
89
|
+
mountActions(ReviewState.InProgress);
|
|
90
|
+
expect(screen.queryAllByTestId("edit")).toHaveLength(1);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
//# sourceMappingURL=PageListReviewGatedActions.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PagesList/PageListReviewGatedActions.test.js","sources":["../../../src/Components/PagesList/PageListReviewGatedActions.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 { CompositionProvider } from \"@webiny/react-composition\";\nimport { Page } from \"@webiny/app-website-builder/domain/Page/index.js\";\nimport { PageDtoMapper } from \"@webiny/app-website-builder/domain/Page/index.js\";\nimport { PageListConfig } from \"@webiny/app-website-builder/presentation/pages/PageList/configs/index.js\";\nimport { PageProvider } from \"@webiny/app-website-builder/presentation/pages/PageList/hooks/usePage.js\";\nimport { ReviewState } from \"@webiny/app-workflows/review/domain/ReviewState.js\";\nimport type { ReviewStateValue } from \"@webiny/app-workflows/review/domain/ReviewState.js\";\nimport { StepState } from \"@webiny/app-workflows/review/domain/StepState.js\";\nimport \"~/types.js\";\nimport { PageListReviewGatedActions } from \"./PageListReviewGatedActions.js\";\n\nvi.mock(\n \"@webiny/app-website-builder/presentation/pages/PageList/configs/Browser/PageAction.js\",\n async () => {\n const { makeDecoratable } = await import(\"@webiny/react-composition\");\n interface StubProps {\n name: string;\n element?: React.ReactElement;\n }\n const PageAction = makeDecoratable(\"PageAction\", (props: StubProps) => {\n return props.element ?? null;\n });\n return { PageAction };\n }\n);\n\nconst { Browser } = PageListConfig;\n\nconst createDto = (reviewState: ReviewStateValue | null) => {\n const system =\n reviewState === null\n ? null\n : {\n workflow: {\n workflowId: \"workflow-1\",\n reviewState,\n stepId: \"step-1\",\n stepName: \"Legal\",\n stepState: StepState.InReview\n }\n };\n const page = Page.create({ id: \"page-1#0001\", entryId: \"page-1\", system });\n return PageDtoMapper.toDTO(page);\n};\n\nconst mountActions = (reviewState: ReviewStateValue | null) => {\n render(\n <CompositionProvider>\n <PageProvider page={createDto(reviewState)}>\n <PageListReviewGatedActions />\n <Browser.Page.Action\n name={\"changeStatus\"}\n element={<span data-testid={\"change-status\"} />}\n />\n <Browser.Page.Action\n name={\"page-schedule\"}\n element={<span data-testid={\"schedule\"} />}\n />\n <Browser.Page.Action name={\"edit\"} element={<span data-testid={\"edit\"} />} />\n </PageProvider>\n </CompositionProvider>\n );\n};\n\ninterface GateCase {\n reviewState: ReviewStateValue | null;\n visible: boolean;\n}\n\nconst CASES: GateCase[] = [\n { reviewState: null, visible: true },\n { reviewState: ReviewState.Approved, visible: true },\n { reviewState: ReviewState.InProgress, visible: false },\n { reviewState: ReviewState.Rejected, visible: false },\n { reviewState: ReviewState.Cancelled, visible: false }\n];\n\ndescribe(\"PageListReviewGatedActions\", () => {\n afterEach(() => {\n cleanup();\n });\n\n it.each(CASES)(\n \"review state $reviewState: Change status and Schedule visible is $visible\",\n ({ reviewState, visible }) => {\n mountActions(reviewState);\n\n expect(screen.queryAllByTestId(\"change-status\")).toHaveLength(visible ? 1 : 0);\n expect(screen.queryAllByTestId(\"schedule\")).toHaveLength(visible ? 1 : 0);\n }\n );\n\n it(\"leaves every other row action alone\", () => {\n mountActions(ReviewState.InProgress);\n\n expect(screen.queryAllByTestId(\"edit\")).toHaveLength(1);\n });\n});\n"],"names":["vi","makeDecoratable","PageAction","props","Browser","PageListConfig","createDto","reviewState","system","StepState","page","Page","PageDtoMapper","mountActions","render","CompositionProvider","PageProvider","PageListReviewGatedActions","CASES","ReviewState","describe","afterEach","cleanup","it","visible","expect","screen"],"mappings":";;;;;;;;;;;AAoBAA,GAAG,IAAI,CACH,yFACA;IACI,MAAM,EAAEC,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC;IAKzC,MAAMC,aAAaD,gBAAgB,cAAc,CAACE,QACvCA,MAAM,OAAO,IAAI;IAE5B,OAAO;QAAED;IAAW;AACxB;AAGJ,MAAM,EAAEE,SAAAA,OAAO,EAAE,GAAGC;AAEpB,MAAMC,YAAY,CAACC;IACf,MAAMC,SACFD,AAAgB,SAAhBA,cACM,OACA;QACI,UAAU;YACN,YAAY;YACZA;YACA,QAAQ;YACR,UAAU;YACV,WAAWE,UAAU,QAAQ;QACjC;IACJ;IACV,MAAMC,OAAOC,KAAK,MAAM,CAAC;QAAE,IAAI;QAAe,SAAS;QAAUH;IAAO;IACxE,OAAOI,cAAc,KAAK,CAACF;AAC/B;AAEA,MAAMG,eAAe,CAACN;IAClBO,OAAO,WAADA,GACF,oBAACC,qBAAmBA,MAAAA,WAAAA,GAChB,oBAACC,cAAYA;QAAC,MAAMV,UAAUC;qBAC1B,oBAACU,4BAA0BA,OAAAA,WAAAA,GAC3B,oBAACb,QAAQ,IAAI,CAAC,MAAM;QAChB,MAAM;QACN,uBAAS,oBAAC;YAAK,eAAa;;sBAEhC,oBAACA,QAAQ,IAAI,CAAC,MAAM;QAChB,MAAM;QACN,uBAAS,oBAAC;YAAK,eAAa;;sBAEhC,oBAACA,QAAQ,IAAI,CAAC,MAAM;QAAC,MAAM;QAAQ,uBAAS,oBAAC;YAAK,eAAa;;;AAI/E;AAOA,MAAMc,QAAoB;IACtB;QAAE,aAAa;QAAM,SAAS;IAAK;IACnC;QAAE,aAAaC,YAAY,QAAQ;QAAE,SAAS;IAAK;IACnD;QAAE,aAAaA,YAAY,UAAU;QAAE,SAAS;IAAM;IACtD;QAAE,aAAaA,YAAY,QAAQ;QAAE,SAAS;IAAM;IACpD;QAAE,aAAaA,YAAY,SAAS;QAAE,SAAS;IAAM;CACxD;AAEDC,SAAS,8BAA8B;IACnCC,UAAU;QACNC;IACJ;IAEAC,GAAG,IAAI,CAACL,OACJ,6EACA,CAAC,EAAEX,WAAW,EAAEiB,OAAO,EAAE;QACrBX,aAAaN;QAEbkB,OAAOC,OAAO,gBAAgB,CAAC,kBAAkB,YAAY,CAACF,UAAU,IAAI;QAC5EC,OAAOC,OAAO,gBAAgB,CAAC,aAAa,YAAY,CAACF,UAAU,IAAI;IAC3E;IAGJD,GAAG,uCAAuC;QACtCV,aAAaM,YAAY,UAAU;QAEnCM,OAAOC,OAAO,gBAAgB,CAAC,SAAS,YAAY,CAAC;IACzD;AACJ"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { PageListConfig } from "@webiny/app-website-builder";
|
|
3
|
+
import { WbContentReviewsSidebarItem } from "../ContentReviews/WbContentReviewsSidebarItem.js";
|
|
4
|
+
import { PageListReviewGatedActions } from "./PageListReviewGatedActions.js";
|
|
5
|
+
const PagesList = ()=>/*#__PURE__*/ react.createElement(PageListConfig, null, /*#__PURE__*/ react.createElement(WbContentReviewsSidebarItem, null), /*#__PURE__*/ react.createElement(PageListReviewGatedActions, null));
|
|
6
|
+
export { PagesList };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=PagesList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PagesList/PagesList.js","sources":["../../../src/Components/PagesList/PagesList.tsx"],"sourcesContent":["import React from \"react\";\nimport { PageListConfig } from \"@webiny/app-website-builder\";\nimport { WbContentReviewsSidebarItem } from \"~/Components/ContentReviews/WbContentReviewsSidebarItem.js\";\nimport { PageListReviewGatedActions } from \"./PageListReviewGatedActions.js\";\n\nexport const PagesList = () => {\n return (\n <PageListConfig>\n {/* Add a Content Reviews item to the footer of the sidebar. */}\n <WbContentReviewsSidebarItem />\n {/* Hide the Change status and Schedule row actions for pages a review blocks. */}\n <PageListReviewGatedActions />\n </PageListConfig>\n );\n};\n"],"names":["PagesList","PageListConfig","WbContentReviewsSidebarItem","PageListReviewGatedActions"],"mappings":";;;;AAKO,MAAMA,YAAY,IACd,WAAP,GACI,oBAACC,gBAAcA,MAAAA,WAAAA,GAEX,oBAACC,6BAA2BA,OAAAA,WAAAA,GAE5B,oBAACC,4BAA0BA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { cleanup, render, screen } from "@testing-library/react";
|
|
4
|
+
import { PagesList } from "./PagesList.js";
|
|
5
|
+
vi.mock("@webiny/app-website-builder", async ()=>{
|
|
6
|
+
const React = await import("react");
|
|
7
|
+
const Config = ({ children })=>React.createElement("div", {
|
|
8
|
+
"data-testid": "page-list-config"
|
|
9
|
+
}, children);
|
|
10
|
+
return {
|
|
11
|
+
PageListConfig: Object.assign(Config, {
|
|
12
|
+
Browser: {
|
|
13
|
+
Sidebar: {
|
|
14
|
+
Footer: ()=>null
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
})
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
vi.mock("./PageListReviewGatedActions.js", async ()=>{
|
|
21
|
+
const React = await import("react");
|
|
22
|
+
return {
|
|
23
|
+
PageListReviewGatedActions: ()=>React.createElement("div", {
|
|
24
|
+
"data-testid": "review-gated-actions"
|
|
25
|
+
})
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
vi.mock("~/Components/ContentReviews/WbContentReviewsSidebarItem.js", async ()=>{
|
|
29
|
+
const React = await import("react");
|
|
30
|
+
return {
|
|
31
|
+
WbContentReviewsSidebarItem: ()=>React.createElement("div", {
|
|
32
|
+
"data-testid": "wb-content-reviews-sidebar"
|
|
33
|
+
})
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
describe("PagesList", ()=>{
|
|
37
|
+
afterEach(()=>{
|
|
38
|
+
cleanup();
|
|
39
|
+
});
|
|
40
|
+
it("mounts the Content Reviews sidebar item next to the review-gated row actions", ()=>{
|
|
41
|
+
render(/*#__PURE__*/ react.createElement(PagesList, null));
|
|
42
|
+
expect(screen.getByTestId("wb-content-reviews-sidebar")).toBeTruthy();
|
|
43
|
+
expect(screen.getByTestId("review-gated-actions")).toBeTruthy();
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=PagesList.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Components/PagesList/PagesList.test.js","sources":["../../../src/Components/PagesList/PagesList.test.tsx"],"sourcesContent":["import React from \"react\";\nimport { afterEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { cleanup } from \"@testing-library/react\";\nimport { render } from \"@testing-library/react\";\nimport { screen } from \"@testing-library/react\";\nimport { PagesList } from \"./PagesList.js\";\n\ninterface ChildrenProps {\n children: React.ReactNode;\n}\n\nvi.mock(\"@webiny/app-website-builder\", async () => {\n const React = await import(\"react\");\n const Config = ({ children }: ChildrenProps) => {\n return React.createElement(\"div\", { \"data-testid\": \"page-list-config\" }, children);\n };\n return {\n PageListConfig: Object.assign(Config, { Browser: { Sidebar: { Footer: () => null } } })\n };\n});\n\nvi.mock(\"./PageListReviewGatedActions.js\", async () => {\n const React = await import(\"react\");\n return {\n PageListReviewGatedActions: () =>\n React.createElement(\"div\", { \"data-testid\": \"review-gated-actions\" })\n };\n});\n\nvi.mock(\"~/Components/ContentReviews/WbContentReviewsSidebarItem.js\", async () => {\n const React = await import(\"react\");\n return {\n WbContentReviewsSidebarItem: () =>\n React.createElement(\"div\", { \"data-testid\": \"wb-content-reviews-sidebar\" })\n };\n});\n\ndescribe(\"PagesList\", () => {\n afterEach(() => {\n cleanup();\n });\n\n it(\"mounts the Content Reviews sidebar item next to the review-gated row actions\", () => {\n render(<PagesList />);\n\n expect(screen.getByTestId(\"wb-content-reviews-sidebar\")).toBeTruthy();\n expect(screen.getByTestId(\"review-gated-actions\")).toBeTruthy();\n });\n});\n"],"names":["vi","React","Config","children","Object","describe","afterEach","cleanup","it","render","PagesList","expect","screen"],"mappings":";;;;AAeAA,GAAG,IAAI,CAAC,+BAA+B;IACnC,MAAMC,QAAQ,MAAM,MAAM,CAAC;IAC3B,MAAMC,SAAS,CAAC,EAAEC,QAAQ,EAAiB,GAChCF,MAAM,aAAa,CAAC,OAAO;YAAE,eAAe;QAAmB,GAAGE;IAE7E,OAAO;QACH,gBAAgBC,OAAO,MAAM,CAACF,QAAQ;YAAE,SAAS;gBAAE,SAAS;oBAAE,QAAQ,IAAM;gBAAK;YAAE;QAAE;IACzF;AACJ;AAEAF,GAAG,IAAI,CAAC,mCAAmC;IACvC,MAAMC,QAAQ,MAAM,MAAM,CAAC;IAC3B,OAAO;QACH,4BAA4B,IACxBA,MAAM,aAAa,CAAC,OAAO;gBAAE,eAAe;YAAuB;IAC3E;AACJ;AAEAD,GAAG,IAAI,CAAC,8DAA8D;IAClE,MAAMC,QAAQ,MAAM,MAAM,CAAC;IAC3B,OAAO;QACH,6BAA6B,IACzBA,MAAM,aAAa,CAAC,OAAO;gBAAE,eAAe;YAA6B;IACjF;AACJ;AAEAI,SAAS,aAAa;IAClBC,UAAU;QACNC;IACJ;IAEAC,GAAG,gFAAgF;QAC/EC,OAAO,WAADA,GAAC,oBAACC,WAASA;QAEjBC,OAAOC,OAAO,WAAW,CAAC,+BAA+B,UAAU;QACnED,OAAOC,OAAO,WAAW,CAAC,yBAAyB,UAAU;IACjE;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PagesList } from "./PagesList.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PagesList } from "./PagesList.js";
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Webiny
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# @webiny/app-website-builder-workflows
|
|
2
|
+
|
|
3
|
+
> [!NOTE]
|
|
4
|
+
> This package is part of the [Webiny](https://www.webiny.com) monorepo.
|
|
5
|
+
> It’s **included in every Webiny project by default** and is not meant to be used as a standalone package.
|
|
6
|
+
|
|
7
|
+
📘 **Documentation:** [https://www.webiny.com/docs](https://www.webiny.com/docs)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
_This README file is automatically generated during the publish process._
|