@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
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@webiny/app-website-builder-workflows",
|
|
3
|
+
"version": "0.0.0-unstable.0156a4c312",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": "./index.js",
|
|
7
|
+
"./*": "./*"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/webiny/webiny-js.git"
|
|
12
|
+
},
|
|
13
|
+
"author": "Webiny Ltd",
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@webiny/admin-ui": "0.0.0-unstable.0156a4c312",
|
|
17
|
+
"@webiny/app": "0.0.0-unstable.0156a4c312",
|
|
18
|
+
"@webiny/app-aco": "0.0.0-unstable.0156a4c312",
|
|
19
|
+
"@webiny/app-admin": "0.0.0-unstable.0156a4c312",
|
|
20
|
+
"@webiny/app-website-builder": "0.0.0-unstable.0156a4c312",
|
|
21
|
+
"@webiny/app-websockets": "0.0.0-unstable.0156a4c312",
|
|
22
|
+
"@webiny/app-workflows": "0.0.0-unstable.0156a4c312",
|
|
23
|
+
"@webiny/feature": "0.0.0-unstable.0156a4c312",
|
|
24
|
+
"@webiny/icons": "0.0.0-unstable.0156a4c312",
|
|
25
|
+
"mobx": "7.1.4",
|
|
26
|
+
"react": "19.3.1",
|
|
27
|
+
"react-dom": "19.3.1"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@testing-library/react": "16.3.3",
|
|
31
|
+
"@types/react": "19.3.0",
|
|
32
|
+
"@webiny/app-headless-cms-workflows": "0.0.0-unstable.0156a4c312",
|
|
33
|
+
"@webiny/build-tools": "0.0.0-unstable.0156a4c312",
|
|
34
|
+
"@webiny/di": "2.0.0",
|
|
35
|
+
"@webiny/feature-flags": "0.0.0-unstable.0156a4c312",
|
|
36
|
+
"@webiny/react-composition": "0.0.0-unstable.0156a4c312",
|
|
37
|
+
"@webiny/website-builder-sdk": "0.0.0-unstable.0156a4c312",
|
|
38
|
+
"rimraf": "6.1.3",
|
|
39
|
+
"typescript": "7.0.2",
|
|
40
|
+
"vitest": "5.0.5"
|
|
41
|
+
},
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public"
|
|
44
|
+
},
|
|
45
|
+
"svgo": {
|
|
46
|
+
"plugins": {
|
|
47
|
+
"removeViewBox": false
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"gitHead": "b8aec8a1be3f25c3b428b357fe1e352c7cbff9ae",
|
|
51
|
+
"webiny": {
|
|
52
|
+
"publishFrom": "dist"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "~/types.js";
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { cleanup, fireEvent, render, screen } from "@testing-library/react";
|
|
3
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
4
|
+
import { Container } from "@webiny/di";
|
|
5
|
+
import { DiContainerProvider } from "@webiny/app";
|
|
6
|
+
import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/abstractions.js";
|
|
7
|
+
import { ListCache } from "@webiny/app-admin/features/listCache/index.js";
|
|
8
|
+
import { CompositionProvider } from "@webiny/react-composition";
|
|
9
|
+
import { Page, PageDtoMapper } from "@webiny/app-website-builder/domain/Page/index.js";
|
|
10
|
+
import { PageListConfig, PageListWithConfig, usePageListConfig } from "@webiny/app-website-builder/presentation/pages/PageList/configs/index.js";
|
|
11
|
+
import { PageProvider } from "@webiny/app-website-builder/presentation/pages/PageList/hooks/usePage.js";
|
|
12
|
+
import { FullPageCache, PageListCache } from "@webiny/app-website-builder/features/pages/shared/abstractions.js";
|
|
13
|
+
import { TableRowMapper } from "@webiny/app-website-builder/presentation/pages/PageList/components/Table/TableRowMapper.js";
|
|
14
|
+
import { ReviewNotificationService } from "@webiny/app-workflows/review/notifications/abstractions.js";
|
|
15
|
+
import { ReviewState } from "@webiny/app-workflows/review/domain/ReviewState.js";
|
|
16
|
+
import { StepState } from "@webiny/app-workflows/review/domain/StepState.js";
|
|
17
|
+
import { Routes } from "./routes.js";
|
|
18
|
+
import "./types.js";
|
|
19
|
+
import { WebsiteBuilderWorkflows } from "./index.js";
|
|
20
|
+
const flags = vi.hoisted(()=>({
|
|
21
|
+
enabled: true
|
|
22
|
+
}));
|
|
23
|
+
const goToRoute = vi.hoisted(()=>vi.fn());
|
|
24
|
+
vi.mock("@webiny/app-admin", async (importOriginal)=>{
|
|
25
|
+
const actual = await importOriginal();
|
|
26
|
+
return {
|
|
27
|
+
...actual,
|
|
28
|
+
useFeatureFlags: ()=>({
|
|
29
|
+
isEnabled: ()=>flags.enabled
|
|
30
|
+
}),
|
|
31
|
+
useRouter: ()=>({
|
|
32
|
+
goToRoute: goToRoute
|
|
33
|
+
})
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
vi.mock("@webiny/admin-ui", async (importOriginal)=>{
|
|
37
|
+
const actual = await importOriginal();
|
|
38
|
+
const React = await import("react");
|
|
39
|
+
const Item = (props)=>React.createElement("button", {
|
|
40
|
+
onClick: props.onClick
|
|
41
|
+
}, props.text);
|
|
42
|
+
const ItemIcon = ()=>React.createElement("span");
|
|
43
|
+
return {
|
|
44
|
+
...actual,
|
|
45
|
+
Sidebar: {
|
|
46
|
+
...actual.Sidebar,
|
|
47
|
+
Item: Object.assign(Item, {
|
|
48
|
+
Icon: ItemIcon
|
|
49
|
+
})
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
vi.mock("~/Routes/index.js", ()=>({
|
|
54
|
+
WebsiteBuilderWorkflowsMenu: ()=>null
|
|
55
|
+
}));
|
|
56
|
+
vi.mock("~/Components/ContentReviews/WbContentReviews.js", ()=>({
|
|
57
|
+
WbContentReviews: ()=>null
|
|
58
|
+
}));
|
|
59
|
+
vi.mock("@webiny/app-website-builder/presentation/pages/PageList/configs/Browser/PageAction.js", async ()=>{
|
|
60
|
+
const { makeDecoratable } = await import("@webiny/react-composition");
|
|
61
|
+
const PageAction = makeDecoratable("PageAction", (props)=>props.element ?? null);
|
|
62
|
+
return {
|
|
63
|
+
PageAction
|
|
64
|
+
};
|
|
65
|
+
});
|
|
66
|
+
const { Browser: Browser } = PageListConfig;
|
|
67
|
+
const createDto = (reviewState)=>{
|
|
68
|
+
let system = null;
|
|
69
|
+
if (null !== reviewState) system = {
|
|
70
|
+
workflow: {
|
|
71
|
+
workflowId: "workflow-1",
|
|
72
|
+
reviewState,
|
|
73
|
+
stepId: "step-1",
|
|
74
|
+
stepName: "Legal",
|
|
75
|
+
stepState: StepState.InReview
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const page = Page.create({
|
|
79
|
+
id: "page-1#0001",
|
|
80
|
+
entryId: "page-1",
|
|
81
|
+
system
|
|
82
|
+
});
|
|
83
|
+
return PageDtoMapper.toDTO(page);
|
|
84
|
+
};
|
|
85
|
+
const SidebarFooterProbe = ()=>{
|
|
86
|
+
const { browser } = usePageListConfig();
|
|
87
|
+
return /*#__PURE__*/ react.createElement("div", {
|
|
88
|
+
"data-testid": "sidebar-footer"
|
|
89
|
+
}, browser.sidebarFooter.map((footer)=>/*#__PURE__*/ react.createElement("div", {
|
|
90
|
+
key: footer.name,
|
|
91
|
+
"data-name": footer.name
|
|
92
|
+
}, footer.element)));
|
|
93
|
+
};
|
|
94
|
+
const waitForActions = async ()=>{
|
|
95
|
+
await screen.findByTestId("edit");
|
|
96
|
+
};
|
|
97
|
+
const mountRoot = (enabled, reviewState)=>{
|
|
98
|
+
flags.enabled = enabled;
|
|
99
|
+
const container = new Container();
|
|
100
|
+
container.register(TableRowMapper);
|
|
101
|
+
container.registerInstance(PageListCache, new ListCache("entryId"));
|
|
102
|
+
container.registerInstance(FullPageCache, new ListCache("id"));
|
|
103
|
+
container.registerInstance(MainGraphQLClient, {
|
|
104
|
+
execute: vi.fn()
|
|
105
|
+
});
|
|
106
|
+
container.registerInstance(ReviewNotificationService, {
|
|
107
|
+
handle: vi.fn()
|
|
108
|
+
});
|
|
109
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
110
|
+
container: container
|
|
111
|
+
}, /*#__PURE__*/ react.createElement(CompositionProvider, null, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null), /*#__PURE__*/ react.createElement(PageListConfig, null, /*#__PURE__*/ react.createElement(Browser.Sidebar.Footer, {
|
|
112
|
+
name: "neutral",
|
|
113
|
+
element: /*#__PURE__*/ react.createElement("span", null)
|
|
114
|
+
})), /*#__PURE__*/ react.createElement(PageListWithConfig, null, /*#__PURE__*/ react.createElement(SidebarFooterProbe, null), /*#__PURE__*/ react.createElement(PageProvider, {
|
|
115
|
+
page: createDto(reviewState)
|
|
116
|
+
}, /*#__PURE__*/ react.createElement(Browser.Page.Action, {
|
|
117
|
+
name: "changeStatus",
|
|
118
|
+
element: /*#__PURE__*/ react.createElement("span", {
|
|
119
|
+
"data-testid": "change-status"
|
|
120
|
+
})
|
|
121
|
+
}), /*#__PURE__*/ react.createElement(Browser.Page.Action, {
|
|
122
|
+
name: "edit",
|
|
123
|
+
element: /*#__PURE__*/ react.createElement("span", {
|
|
124
|
+
"data-testid": "edit"
|
|
125
|
+
})
|
|
126
|
+
}))))));
|
|
127
|
+
};
|
|
128
|
+
describe("Website Builder Change status decoration from the composition root", ()=>{
|
|
129
|
+
afterEach(()=>{
|
|
130
|
+
cleanup();
|
|
131
|
+
goToRoute.mockReset();
|
|
132
|
+
});
|
|
133
|
+
it("flag on: the action is hidden for a page whose review is in progress", async ()=>{
|
|
134
|
+
mountRoot(true, ReviewState.InProgress);
|
|
135
|
+
await waitForActions();
|
|
136
|
+
expect(screen.queryAllByTestId("change-status")).toHaveLength(0);
|
|
137
|
+
expect(screen.queryAllByTestId("edit")).toHaveLength(1);
|
|
138
|
+
});
|
|
139
|
+
it("flag on: the action is shown for an approved review", async ()=>{
|
|
140
|
+
mountRoot(true, ReviewState.Approved);
|
|
141
|
+
await waitForActions();
|
|
142
|
+
expect(screen.queryAllByTestId("change-status")).toHaveLength(1);
|
|
143
|
+
});
|
|
144
|
+
it("flag on: the action is shown for a page with no review", async ()=>{
|
|
145
|
+
mountRoot(true, null);
|
|
146
|
+
await waitForActions();
|
|
147
|
+
expect(screen.queryAllByTestId("change-status")).toHaveLength(1);
|
|
148
|
+
});
|
|
149
|
+
it("flag off: the action is left untouched even for a review in progress", async ()=>{
|
|
150
|
+
mountRoot(false, ReviewState.InProgress);
|
|
151
|
+
await waitForActions();
|
|
152
|
+
expect(screen.queryAllByTestId("change-status")).toHaveLength(1);
|
|
153
|
+
});
|
|
154
|
+
it("flag on: the Content Reviews sidebar item is mounted and opens the route", async ()=>{
|
|
155
|
+
mountRoot(true, null);
|
|
156
|
+
await waitForActions();
|
|
157
|
+
const footer = screen.getByTestId("sidebar-footer");
|
|
158
|
+
expect(footer.querySelector('[data-name="contentReviews"]')).not.toBeNull();
|
|
159
|
+
fireEvent.click(screen.getByRole("button", {
|
|
160
|
+
name: "Content Reviews"
|
|
161
|
+
}));
|
|
162
|
+
expect(goToRoute).toHaveBeenCalledWith(Routes.Pages.WorkflowStateList);
|
|
163
|
+
});
|
|
164
|
+
it("flag off: no Content Reviews sidebar item is mounted", async ()=>{
|
|
165
|
+
mountRoot(false, null);
|
|
166
|
+
await waitForActions();
|
|
167
|
+
const footer = screen.getByTestId("sidebar-footer");
|
|
168
|
+
expect(footer.querySelector('[data-name="contentReviews"]')).toBeNull();
|
|
169
|
+
expect(screen.queryByRole("button", {
|
|
170
|
+
name: "Content Reviews"
|
|
171
|
+
})).toBeNull();
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
//# sourceMappingURL=pageListChangeStatus.wiring.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageListChangeStatus.wiring.test.js","sources":["../src/pageListChangeStatus.wiring.test.tsx"],"sourcesContent":["import React from \"react\";\nimport { cleanup } from \"@testing-library/react\";\nimport { fireEvent } 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 { DiContainerProvider } from \"@webiny/app\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/abstractions.js\";\nimport { ListCache } from \"@webiny/app-admin/features/listCache/index.js\";\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 { usePageListConfig } from \"@webiny/app-website-builder/presentation/pages/PageList/configs/index.js\";\nimport { PageListWithConfig } 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 { FullPageCache } from \"@webiny/app-website-builder/features/pages/shared/abstractions.js\";\nimport { PageListCache } from \"@webiny/app-website-builder/features/pages/shared/abstractions.js\";\nimport { TableRowMapper as BaseTableRowMapper } from \"@webiny/app-website-builder/presentation/pages/PageList/components/Table/TableRowMapper.js\";\nimport { ReviewNotificationService } from \"@webiny/app-workflows/review/notifications/abstractions.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 { Routes } from \"~/routes.js\";\nimport \"~/types.js\";\nimport { WebsiteBuilderWorkflows } from \"~/index.js\";\n\ninterface SidebarItemStubProps {\n text: string;\n onClick: () => void;\n}\n\nconst flags = vi.hoisted(() => {\n return { enabled: true };\n});\n\nconst goToRoute = vi.hoisted(() => vi.fn());\n\nvi.mock(\"@webiny/app-admin\", async importOriginal => {\n const actual = await importOriginal<typeof import(\"@webiny/app-admin\")>();\n return {\n ...actual,\n useFeatureFlags: () => ({ isEnabled: () => flags.enabled }),\n useRouter: () => ({ goToRoute })\n };\n});\n\nvi.mock(\"@webiny/admin-ui\", async importOriginal => {\n const actual = await importOriginal<typeof import(\"@webiny/admin-ui\")>();\n const React = await import(\"react\");\n const Item = (props: SidebarItemStubProps) => {\n return React.createElement(\"button\", { onClick: props.onClick }, props.text);\n };\n const ItemIcon = () => React.createElement(\"span\");\n return {\n ...actual,\n Sidebar: { ...actual.Sidebar, Item: Object.assign(Item, { Icon: ItemIcon }) }\n };\n});\n\nvi.mock(\"~/Routes/index.js\", () => {\n return { WebsiteBuilderWorkflowsMenu: () => null };\n});\n\nvi.mock(\"~/Components/ContentReviews/WbContentReviews.js\", () => {\n return { WbContentReviews: () => null };\n});\n\n/*\n * The row action host needs the page list shell; the stub renders the element it is given, so what\n * decides visibility is the real decorator that the real PagesList mounts through the real config.\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 let system = null;\n if (reviewState !== null) {\n system = {\n workflow: {\n workflowId: \"workflow-1\",\n reviewState,\n stepId: \"step-1\",\n stepName: \"Legal\",\n stepState: StepState.InReview\n }\n };\n }\n const page = Page.create({ id: \"page-1#0001\", entryId: \"page-1\", system });\n return PageDtoMapper.toDTO(page);\n};\n\n/* Renders the sidebar footer slot the way the page list does. */\nconst SidebarFooterProbe = () => {\n const { browser } = usePageListConfig();\n\n return (\n <div data-testid={\"sidebar-footer\"}>\n {browser.sidebarFooter.map(footer => (\n <div key={footer.name} data-name={footer.name}>\n {footer.element}\n </div>\n ))}\n </div>\n );\n};\n\n/* The page list renders its children once the config has been collected. */\nconst waitForActions = async () => {\n await screen.findByTestId(\"edit\");\n};\n\nconst mountRoot = (enabled: boolean, reviewState: ReviewStateValue | null) => {\n flags.enabled = enabled;\n const container = new Container();\n container.register(BaseTableRowMapper);\n container.registerInstance(PageListCache, new ListCache<Page>(\"entryId\"));\n container.registerInstance(FullPageCache, new ListCache<Page>(\"id\"));\n container.registerInstance(MainGraphQLClient, { execute: vi.fn() });\n container.registerInstance(ReviewNotificationService, { handle: vi.fn() });\n\n render(\n <DiContainerProvider container={container}>\n <CompositionProvider>\n <WebsiteBuilderWorkflows />\n {/* A neutral config entry, so the page list config flushes with the flag off too. */}\n <PageListConfig>\n <Browser.Sidebar.Footer name={\"neutral\"} element={<span />} />\n </PageListConfig>\n <PageListWithConfig>\n <SidebarFooterProbe />\n <PageProvider page={createDto(reviewState)}>\n <Browser.Page.Action\n name={\"changeStatus\"}\n element={<span data-testid={\"change-status\"} />}\n />\n <Browser.Page.Action\n name={\"edit\"}\n element={<span data-testid={\"edit\"} />}\n />\n </PageProvider>\n </PageListWithConfig>\n </CompositionProvider>\n </DiContainerProvider>\n );\n};\n\ndescribe(\"Website Builder Change status decoration from the composition root\", () => {\n afterEach(() => {\n cleanup();\n goToRoute.mockReset();\n });\n\n it(\"flag on: the action is hidden for a page whose review is in progress\", async () => {\n mountRoot(true, ReviewState.InProgress);\n\n await waitForActions();\n expect(screen.queryAllByTestId(\"change-status\")).toHaveLength(0);\n expect(screen.queryAllByTestId(\"edit\")).toHaveLength(1);\n });\n\n it(\"flag on: the action is shown for an approved review\", async () => {\n mountRoot(true, ReviewState.Approved);\n\n await waitForActions();\n expect(screen.queryAllByTestId(\"change-status\")).toHaveLength(1);\n });\n\n it(\"flag on: the action is shown for a page with no review\", async () => {\n mountRoot(true, null);\n\n await waitForActions();\n expect(screen.queryAllByTestId(\"change-status\")).toHaveLength(1);\n });\n\n it(\"flag off: the action is left untouched even for a review in progress\", async () => {\n mountRoot(false, ReviewState.InProgress);\n\n await waitForActions();\n expect(screen.queryAllByTestId(\"change-status\")).toHaveLength(1);\n });\n\n it(\"flag on: the Content Reviews sidebar item is mounted and opens the route\", async () => {\n mountRoot(true, null);\n\n await waitForActions();\n const footer = screen.getByTestId(\"sidebar-footer\");\n expect(footer.querySelector('[data-name=\"contentReviews\"]')).not.toBeNull();\n fireEvent.click(screen.getByRole(\"button\", { name: \"Content Reviews\" }));\n expect(goToRoute).toHaveBeenCalledWith(Routes.Pages.WorkflowStateList);\n });\n\n it(\"flag off: no Content Reviews sidebar item is mounted\", async () => {\n mountRoot(false, null);\n\n await waitForActions();\n const footer = screen.getByTestId(\"sidebar-footer\");\n expect(footer.querySelector('[data-name=\"contentReviews\"]')).toBeNull();\n expect(screen.queryByRole(\"button\", { name: \"Content Reviews\" })).toBeNull();\n });\n});\n"],"names":["flags","vi","goToRoute","importOriginal","actual","React","Item","props","ItemIcon","Object","makeDecoratable","PageAction","Browser","PageListConfig","createDto","reviewState","system","StepState","page","Page","PageDtoMapper","SidebarFooterProbe","browser","usePageListConfig","footer","waitForActions","screen","mountRoot","enabled","container","Container","BaseTableRowMapper","PageListCache","ListCache","FullPageCache","MainGraphQLClient","ReviewNotificationService","render","DiContainerProvider","CompositionProvider","WebsiteBuilderWorkflows","PageListWithConfig","PageProvider","describe","afterEach","cleanup","it","ReviewState","expect","fireEvent","Routes"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "~/types.js";
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { cleanup, render } from "@testing-library/react";
|
|
3
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
4
|
+
import { Container } from "@webiny/di";
|
|
5
|
+
import { DiContainerProvider } from "@webiny/app";
|
|
6
|
+
import { ListCache } from "@webiny/app-admin/features/listCache/index.js";
|
|
7
|
+
import { createAbstraction } from "@webiny/feature/admin";
|
|
8
|
+
import { CompositionProvider } from "@webiny/react-composition";
|
|
9
|
+
import { Page } from "@webiny/app-website-builder/domain/Page/index.js";
|
|
10
|
+
import { WbPageStatus } from "@webiny/app-website-builder/constants.js";
|
|
11
|
+
import { GetPageGraphQLFieldSelection } from "@webiny/app-website-builder/features/pages/getPage/abstractions.js";
|
|
12
|
+
import { ListPagesGraphQLFieldSelection } from "@webiny/app-website-builder/features/pages/listPages/abstractions.js";
|
|
13
|
+
import { FullPageCache, PageListCache } from "@webiny/app-website-builder/features/pages/shared/abstractions.js";
|
|
14
|
+
import { TableRowMapper } from "@webiny/app-website-builder/presentation/pages/PageList/components/Table/abstractions.js";
|
|
15
|
+
import { TableRowMapper as TableRowMapper_js_TableRowMapper } from "@webiny/app-website-builder/presentation/pages/PageList/components/Table/TableRowMapper.js";
|
|
16
|
+
import { ReviewState } from "@webiny/app-workflows/review/domain/ReviewState.js";
|
|
17
|
+
import { StepState } from "@webiny/app-workflows/review/domain/StepState.js";
|
|
18
|
+
import { toSystemWorkflow } from "@webiny/app-workflows/review/domain/toSystemWorkflow.js";
|
|
19
|
+
import { ReviewCacheSyncHandler } from "@webiny/app-workflows/review/cache/ReviewCacheSyncHandler.js";
|
|
20
|
+
import { ReviewChangedEvent } from "@webiny/app-workflows/review/events/ReviewChangedEvent.js";
|
|
21
|
+
import { ReviewChangedHandler } from "@webiny/app-workflows/review/events/ReviewChangedHandler.js";
|
|
22
|
+
import { createReview } from "@webiny/app-workflows/review/testing/reviewFixtures.js";
|
|
23
|
+
import "./types.js";
|
|
24
|
+
import { WebsiteBuilderWorkflows } from "./index.js";
|
|
25
|
+
const flags = vi.hoisted(()=>({
|
|
26
|
+
enabled: true
|
|
27
|
+
}));
|
|
28
|
+
vi.mock("@webiny/app-admin", async (importOriginal)=>{
|
|
29
|
+
const actual = await importOriginal();
|
|
30
|
+
return {
|
|
31
|
+
...actual,
|
|
32
|
+
useFeatureFlags: ()=>({
|
|
33
|
+
isEnabled: ()=>flags.enabled
|
|
34
|
+
})
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
vi.mock("~/Routes/index.js", ()=>({
|
|
38
|
+
WebsiteBuilderWorkflowsMenu: ()=>null
|
|
39
|
+
}));
|
|
40
|
+
vi.mock("~/Components/PagesList/index.js", ()=>({
|
|
41
|
+
PagesList: ()=>null
|
|
42
|
+
}));
|
|
43
|
+
vi.mock("~/Components/ContentReviews/WbContentReviews.js", ()=>({
|
|
44
|
+
WbContentReviews: ()=>null
|
|
45
|
+
}));
|
|
46
|
+
const createPage = (id, entryId)=>Page.create({
|
|
47
|
+
id,
|
|
48
|
+
entryId,
|
|
49
|
+
status: WbPageStatus.Draft
|
|
50
|
+
});
|
|
51
|
+
const OtherAppWriter = createAbstraction("Test/OtherAppReviewCacheWriter");
|
|
52
|
+
class OtherAppCacheSyncHandlerImpl extends ReviewCacheSyncHandler {
|
|
53
|
+
}
|
|
54
|
+
const OtherAppCacheSyncHandler = ReviewChangedHandler.createImplementation({
|
|
55
|
+
implementation: OtherAppCacheSyncHandlerImpl,
|
|
56
|
+
dependencies: [
|
|
57
|
+
OtherAppWriter
|
|
58
|
+
]
|
|
59
|
+
});
|
|
60
|
+
const mountRoot = (enabled)=>{
|
|
61
|
+
flags.enabled = enabled;
|
|
62
|
+
const listCache = new ListCache("entryId");
|
|
63
|
+
const fullCache = new ListCache("id");
|
|
64
|
+
listCache.addItems([
|
|
65
|
+
createPage("page-1#0001", "page-1"),
|
|
66
|
+
createPage("page-2#0001", "page-2")
|
|
67
|
+
]);
|
|
68
|
+
fullCache.addItems([
|
|
69
|
+
createPage("page-1#0001", "page-1")
|
|
70
|
+
]);
|
|
71
|
+
const container = new Container();
|
|
72
|
+
container.register(TableRowMapper_js_TableRowMapper);
|
|
73
|
+
container.registerInstance(PageListCache, listCache);
|
|
74
|
+
container.registerInstance(FullPageCache, fullCache);
|
|
75
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
76
|
+
container: container
|
|
77
|
+
}, /*#__PURE__*/ react.createElement(CompositionProvider, null, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null))));
|
|
78
|
+
return {
|
|
79
|
+
container,
|
|
80
|
+
listCache,
|
|
81
|
+
fullCache
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
const createInProgressPage = ()=>Page.create({
|
|
85
|
+
id: "page-1#0001",
|
|
86
|
+
entryId: "page-1",
|
|
87
|
+
status: WbPageStatus.Draft,
|
|
88
|
+
system: {
|
|
89
|
+
workflow: {
|
|
90
|
+
workflowId: "workflow-1",
|
|
91
|
+
reviewState: ReviewState.InProgress,
|
|
92
|
+
stepId: "step-1",
|
|
93
|
+
stepName: "Legal",
|
|
94
|
+
stepState: StepState.InReview
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
describe("Website Builder page list glue from the composition root", ()=>{
|
|
99
|
+
afterEach(()=>{
|
|
100
|
+
cleanup();
|
|
101
|
+
});
|
|
102
|
+
it("flag on: both field selections ask for system.workflow", ()=>{
|
|
103
|
+
const { container } = mountRoot(true);
|
|
104
|
+
const listSelections = container.resolveAll(ListPagesGraphQLFieldSelection);
|
|
105
|
+
const getSelections = container.resolveAll(GetPageGraphQLFieldSelection);
|
|
106
|
+
expect(listSelections).toHaveLength(1);
|
|
107
|
+
expect(getSelections).toHaveLength(1);
|
|
108
|
+
expect(listSelections[0].getSelection()[0]).toContain("reviewState");
|
|
109
|
+
expect(getSelections[0].getSelection()[0]).toContain("reviewState");
|
|
110
|
+
});
|
|
111
|
+
it("flag on: rows of pages in review are not selectable", ()=>{
|
|
112
|
+
const { container } = mountRoot(true);
|
|
113
|
+
const mapper = container.resolve(TableRowMapper);
|
|
114
|
+
const row = mapper.fromPage(createInProgressPage());
|
|
115
|
+
expect(row.$selectable).toBe(false);
|
|
116
|
+
});
|
|
117
|
+
it("flag on: a review change updates the page row through the shared handler and the writer", async ()=>{
|
|
118
|
+
const { container, listCache, fullCache } = mountRoot(true);
|
|
119
|
+
const handlers = container.resolveAll(ReviewChangedHandler);
|
|
120
|
+
expect(handlers).toHaveLength(1);
|
|
121
|
+
const review = createReview({
|
|
122
|
+
namespace: "wb.page",
|
|
123
|
+
targetId: "page-1",
|
|
124
|
+
targetRevisionId: "page-1#0001",
|
|
125
|
+
state: ReviewState.InProgress
|
|
126
|
+
});
|
|
127
|
+
const expected = toSystemWorkflow(review);
|
|
128
|
+
expect(expected).not.toBeNull();
|
|
129
|
+
await handlers[0].handle(new ReviewChangedEvent({
|
|
130
|
+
namespace: "wb.page",
|
|
131
|
+
targetId: "page-1",
|
|
132
|
+
targetRevisionId: "page-1#0001",
|
|
133
|
+
review
|
|
134
|
+
}));
|
|
135
|
+
const home = listCache.getItems().find((page)=>"page-1" === page.entryId);
|
|
136
|
+
const other = listCache.getItems().find((page)=>"page-2" === page.entryId);
|
|
137
|
+
const full = fullCache.getItems().find((page)=>"page-1#0001" === page.id);
|
|
138
|
+
expect(home?.system?.workflow).toEqual(expected);
|
|
139
|
+
expect(full?.system?.workflow).toEqual(expected);
|
|
140
|
+
expect(other?.system).toBeNull();
|
|
141
|
+
await handlers[0].handle(new ReviewChangedEvent({
|
|
142
|
+
namespace: "wb.page",
|
|
143
|
+
targetId: "page-1",
|
|
144
|
+
targetRevisionId: "page-1#0001",
|
|
145
|
+
review: null
|
|
146
|
+
}));
|
|
147
|
+
const cleared = listCache.getItems().find((page)=>"page-1" === page.entryId);
|
|
148
|
+
expect(cleared?.system?.workflow).toBeNull();
|
|
149
|
+
});
|
|
150
|
+
it("flag on: another app's subclass of the shared handler coexists with this app's (R237)", async ()=>{
|
|
151
|
+
const { container, listCache } = mountRoot(true);
|
|
152
|
+
const otherWrite = vi.fn();
|
|
153
|
+
const otherWriter = {
|
|
154
|
+
canHandle: (namespace)=>"cms.article" === namespace,
|
|
155
|
+
write: otherWrite
|
|
156
|
+
};
|
|
157
|
+
container.registerInstance(OtherAppWriter, otherWriter);
|
|
158
|
+
container.register(OtherAppCacheSyncHandler);
|
|
159
|
+
const handlers = container.resolveAll(ReviewChangedHandler);
|
|
160
|
+
expect(handlers).toHaveLength(2);
|
|
161
|
+
const pageReview = createReview({
|
|
162
|
+
namespace: "wb.page",
|
|
163
|
+
targetId: "page-1",
|
|
164
|
+
targetRevisionId: "page-1#0001",
|
|
165
|
+
state: ReviewState.InProgress
|
|
166
|
+
});
|
|
167
|
+
const entryReview = createReview({
|
|
168
|
+
namespace: "cms.article",
|
|
169
|
+
targetId: "entry-1",
|
|
170
|
+
targetRevisionId: "entry-1#0001",
|
|
171
|
+
state: ReviewState.InProgress
|
|
172
|
+
});
|
|
173
|
+
for (const handler of handlers)await handler.handle(new ReviewChangedEvent({
|
|
174
|
+
namespace: "wb.page",
|
|
175
|
+
targetId: "page-1",
|
|
176
|
+
targetRevisionId: "page-1#0001",
|
|
177
|
+
review: pageReview
|
|
178
|
+
}));
|
|
179
|
+
const home = listCache.getItems().find((page)=>"page-1" === page.entryId);
|
|
180
|
+
expect(home?.system?.workflow).toEqual(toSystemWorkflow(pageReview));
|
|
181
|
+
expect(otherWrite).not.toHaveBeenCalled();
|
|
182
|
+
for (const handler of handlers)await handler.handle(new ReviewChangedEvent({
|
|
183
|
+
namespace: "cms.article",
|
|
184
|
+
targetId: "entry-1",
|
|
185
|
+
targetRevisionId: "entry-1#0001",
|
|
186
|
+
review: entryReview
|
|
187
|
+
}));
|
|
188
|
+
expect(otherWrite).toHaveBeenCalledTimes(1);
|
|
189
|
+
const stillHome = listCache.getItems().find((page)=>"page-1" === page.entryId);
|
|
190
|
+
expect(stillHome?.system?.workflow).toEqual(toSystemWorkflow(pageReview));
|
|
191
|
+
});
|
|
192
|
+
it("flag on: a review of another namespace is ignored", async ()=>{
|
|
193
|
+
const { container, listCache } = mountRoot(true);
|
|
194
|
+
const handlers = container.resolveAll(ReviewChangedHandler);
|
|
195
|
+
const review = createReview({
|
|
196
|
+
namespace: "cms.article",
|
|
197
|
+
targetId: "page-1",
|
|
198
|
+
targetRevisionId: "page-1#0001"
|
|
199
|
+
});
|
|
200
|
+
await handlers[0].handle(new ReviewChangedEvent({
|
|
201
|
+
namespace: "cms.article",
|
|
202
|
+
targetId: "page-1",
|
|
203
|
+
targetRevisionId: "page-1#0001",
|
|
204
|
+
review
|
|
205
|
+
}));
|
|
206
|
+
const home = listCache.getItems().find((page)=>"page-1" === page.entryId);
|
|
207
|
+
expect(home?.system).toBeNull();
|
|
208
|
+
});
|
|
209
|
+
it("flag off: nothing is registered and rows stay selectable", ()=>{
|
|
210
|
+
const { container } = mountRoot(false);
|
|
211
|
+
expect(container.resolveAll(ListPagesGraphQLFieldSelection)).toHaveLength(0);
|
|
212
|
+
expect(container.resolveAll(GetPageGraphQLFieldSelection)).toHaveLength(0);
|
|
213
|
+
expect(container.resolveAll(ReviewChangedHandler)).toHaveLength(0);
|
|
214
|
+
const mapper = container.resolve(TableRowMapper);
|
|
215
|
+
const row = mapper.fromPage(createInProgressPage());
|
|
216
|
+
expect(row.$selectable).toBe(true);
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
//# sourceMappingURL=pageListGlue.wiring.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageListGlue.wiring.test.js","sources":["../src/pageListGlue.wiring.test.tsx"],"sourcesContent":["import React from \"react\";\nimport { cleanup } from \"@testing-library/react\";\nimport { render } 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 { DiContainerProvider } from \"@webiny/app\";\nimport { ListCache } from \"@webiny/app-admin/features/listCache/index.js\";\nimport { createAbstraction } from \"@webiny/feature/admin\";\nimport { CompositionProvider } from \"@webiny/react-composition\";\nimport { Page } from \"@webiny/app-website-builder/domain/Page/index.js\";\nimport { WbPageStatus } from \"@webiny/app-website-builder/constants.js\";\nimport { GetPageGraphQLFieldSelection } from \"@webiny/app-website-builder/features/pages/getPage/abstractions.js\";\nimport { ListPagesGraphQLFieldSelection } from \"@webiny/app-website-builder/features/pages/listPages/abstractions.js\";\nimport { FullPageCache } from \"@webiny/app-website-builder/features/pages/shared/abstractions.js\";\nimport { PageListCache } from \"@webiny/app-website-builder/features/pages/shared/abstractions.js\";\nimport { TableRowMapper as TableRowMapperAbstraction } from \"@webiny/app-website-builder/presentation/pages/PageList/components/Table/abstractions.js\";\nimport { TableRowMapper as BaseTableRowMapper } from \"@webiny/app-website-builder/presentation/pages/PageList/components/Table/TableRowMapper.js\";\nimport { ReviewState } from \"@webiny/app-workflows/review/domain/ReviewState.js\";\nimport { StepState } from \"@webiny/app-workflows/review/domain/StepState.js\";\nimport { toSystemWorkflow } from \"@webiny/app-workflows/review/domain/toSystemWorkflow.js\";\nimport type { IReviewCacheWriter } from \"@webiny/app-workflows/review/cache/IReviewCacheWriter.js\";\nimport { ReviewCacheSyncHandler } from \"@webiny/app-workflows/review/cache/ReviewCacheSyncHandler.js\";\nimport { ReviewChangedEvent } from \"@webiny/app-workflows/review/events/ReviewChangedEvent.js\";\nimport { ReviewChangedHandler } from \"@webiny/app-workflows/review/events/ReviewChangedHandler.js\";\nimport { createReview } from \"@webiny/app-workflows/review/testing/reviewFixtures.js\";\nimport \"~/types.js\";\nimport { WebsiteBuilderWorkflows } from \"~/index.js\";\n\nconst flags = vi.hoisted(() => {\n return { enabled: true };\n});\n\nvi.mock(\"@webiny/app-admin\", async importOriginal => {\n const actual = await importOriginal<typeof import(\"@webiny/app-admin\")>();\n return { ...actual, useFeatureFlags: () => ({ isEnabled: () => flags.enabled }) };\n});\n\nvi.mock(\"~/Routes/index.js\", () => {\n return { WebsiteBuilderWorkflowsMenu: () => null };\n});\n\nvi.mock(\"~/Components/PagesList/index.js\", () => {\n return { PagesList: () => null };\n});\n\nvi.mock(\"~/Components/ContentReviews/WbContentReviews.js\", () => {\n return { WbContentReviews: () => null };\n});\n\nconst createPage = (id: string, entryId: string): Page => {\n return Page.create({ id, entryId, status: WbPageStatus.Draft });\n};\n\n/*\n * Stands in for another app's cache sync: its own subclass of the shared handler (R237), bound to\n * its own writer token.\n */\nconst OtherAppWriter = createAbstraction<IReviewCacheWriter>(\"Test/OtherAppReviewCacheWriter\");\n\nclass OtherAppCacheSyncHandlerImpl\n extends ReviewCacheSyncHandler\n implements ReviewChangedHandler.Interface {}\n\nconst OtherAppCacheSyncHandler = ReviewChangedHandler.createImplementation({\n implementation: OtherAppCacheSyncHandlerImpl,\n dependencies: [OtherAppWriter]\n});\n\nconst mountRoot = (enabled: boolean) => {\n flags.enabled = enabled;\n const listCache = new ListCache<Page>(\"entryId\");\n const fullCache = new ListCache<Page>(\"id\");\n listCache.addItems([createPage(\"page-1#0001\", \"page-1\"), createPage(\"page-2#0001\", \"page-2\")]);\n fullCache.addItems([createPage(\"page-1#0001\", \"page-1\")]);\n\n const container = new Container();\n container.register(BaseTableRowMapper);\n container.registerInstance(PageListCache, listCache);\n container.registerInstance(FullPageCache, fullCache);\n\n render(\n <DiContainerProvider container={container}>\n <CompositionProvider>\n <WebsiteBuilderWorkflows />\n </CompositionProvider>\n </DiContainerProvider>\n );\n\n return { container, listCache, fullCache };\n};\n\nconst createInProgressPage = (): Page => {\n return Page.create({\n id: \"page-1#0001\",\n entryId: \"page-1\",\n status: WbPageStatus.Draft,\n system: {\n workflow: {\n workflowId: \"workflow-1\",\n reviewState: ReviewState.InProgress,\n stepId: \"step-1\",\n stepName: \"Legal\",\n stepState: StepState.InReview\n }\n }\n });\n};\n\ndescribe(\"Website Builder page list glue from the composition root\", () => {\n afterEach(() => {\n cleanup();\n });\n\n it(\"flag on: both field selections ask for system.workflow\", () => {\n const { container } = mountRoot(true);\n\n const listSelections = container.resolveAll(ListPagesGraphQLFieldSelection);\n const getSelections = container.resolveAll(GetPageGraphQLFieldSelection);\n\n expect(listSelections).toHaveLength(1);\n expect(getSelections).toHaveLength(1);\n expect(listSelections[0].getSelection()[0]).toContain(\"reviewState\");\n expect(getSelections[0].getSelection()[0]).toContain(\"reviewState\");\n });\n\n it(\"flag on: rows of pages in review are not selectable\", () => {\n const { container } = mountRoot(true);\n const mapper = container.resolve(TableRowMapperAbstraction);\n\n const row = mapper.fromPage(createInProgressPage());\n\n expect(row.$selectable).toBe(false);\n });\n\n it(\"flag on: a review change updates the page row through the shared handler and the writer\", async () => {\n const { container, listCache, fullCache } = mountRoot(true);\n const handlers = container.resolveAll(ReviewChangedHandler);\n expect(handlers).toHaveLength(1);\n const review = createReview({\n namespace: \"wb.page\",\n targetId: \"page-1\",\n targetRevisionId: \"page-1#0001\",\n state: ReviewState.InProgress\n });\n const expected = toSystemWorkflow(review);\n expect(expected).not.toBeNull();\n\n await handlers[0].handle(\n new ReviewChangedEvent({\n namespace: \"wb.page\",\n targetId: \"page-1\",\n targetRevisionId: \"page-1#0001\",\n review\n })\n );\n\n const home = listCache.getItems().find(page => page.entryId === \"page-1\");\n const other = listCache.getItems().find(page => page.entryId === \"page-2\");\n const full = fullCache.getItems().find(page => page.id === \"page-1#0001\");\n expect(home?.system?.workflow).toEqual(expected);\n expect(full?.system?.workflow).toEqual(expected);\n expect(other?.system).toBeNull();\n\n await handlers[0].handle(\n new ReviewChangedEvent({\n namespace: \"wb.page\",\n targetId: \"page-1\",\n targetRevisionId: \"page-1#0001\",\n review: null\n })\n );\n\n const cleared = listCache.getItems().find(page => page.entryId === \"page-1\");\n expect(cleared?.system?.workflow).toBeNull();\n });\n\n it(\"flag on: another app's subclass of the shared handler coexists with this app's (R237)\", async () => {\n const { container, listCache } = mountRoot(true);\n const otherWrite = vi.fn();\n const otherWriter: IReviewCacheWriter = {\n canHandle: namespace => namespace === \"cms.article\",\n write: otherWrite\n };\n container.registerInstance(OtherAppWriter, otherWriter);\n container.register(OtherAppCacheSyncHandler);\n const handlers = container.resolveAll(ReviewChangedHandler);\n expect(handlers).toHaveLength(2);\n const pageReview = createReview({\n namespace: \"wb.page\",\n targetId: \"page-1\",\n targetRevisionId: \"page-1#0001\",\n state: ReviewState.InProgress\n });\n const entryReview = createReview({\n namespace: \"cms.article\",\n targetId: \"entry-1\",\n targetRevisionId: \"entry-1#0001\",\n state: ReviewState.InProgress\n });\n\n for (const handler of handlers) {\n await handler.handle(\n new ReviewChangedEvent({\n namespace: \"wb.page\",\n targetId: \"page-1\",\n targetRevisionId: \"page-1#0001\",\n review: pageReview\n })\n );\n }\n const home = listCache.getItems().find(page => page.entryId === \"page-1\");\n expect(home?.system?.workflow).toEqual(toSystemWorkflow(pageReview));\n expect(otherWrite).not.toHaveBeenCalled();\n\n for (const handler of handlers) {\n await handler.handle(\n new ReviewChangedEvent({\n namespace: \"cms.article\",\n targetId: \"entry-1\",\n targetRevisionId: \"entry-1#0001\",\n review: entryReview\n })\n );\n }\n expect(otherWrite).toHaveBeenCalledTimes(1);\n const stillHome = listCache.getItems().find(page => page.entryId === \"page-1\");\n expect(stillHome?.system?.workflow).toEqual(toSystemWorkflow(pageReview));\n });\n\n it(\"flag on: a review of another namespace is ignored\", async () => {\n const { container, listCache } = mountRoot(true);\n const handlers = container.resolveAll(ReviewChangedHandler);\n const review = createReview({\n namespace: \"cms.article\",\n targetId: \"page-1\",\n targetRevisionId: \"page-1#0001\"\n });\n\n await handlers[0].handle(\n new ReviewChangedEvent({\n namespace: \"cms.article\",\n targetId: \"page-1\",\n targetRevisionId: \"page-1#0001\",\n review\n })\n );\n\n const home = listCache.getItems().find(page => page.entryId === \"page-1\");\n expect(home?.system).toBeNull();\n });\n\n it(\"flag off: nothing is registered and rows stay selectable\", () => {\n const { container } = mountRoot(false);\n\n expect(container.resolveAll(ListPagesGraphQLFieldSelection)).toHaveLength(0);\n expect(container.resolveAll(GetPageGraphQLFieldSelection)).toHaveLength(0);\n expect(container.resolveAll(ReviewChangedHandler)).toHaveLength(0);\n const mapper = container.resolve(TableRowMapperAbstraction);\n const row = mapper.fromPage(createInProgressPage());\n expect(row.$selectable).toBe(true);\n });\n});\n"],"names":["flags","vi","importOriginal","actual","createPage","id","entryId","Page","WbPageStatus","OtherAppWriter","createAbstraction","OtherAppCacheSyncHandlerImpl","ReviewCacheSyncHandler","OtherAppCacheSyncHandler","ReviewChangedHandler","mountRoot","enabled","listCache","ListCache","fullCache","container","Container","BaseTableRowMapper","PageListCache","FullPageCache","render","DiContainerProvider","CompositionProvider","WebsiteBuilderWorkflows","createInProgressPage","ReviewState","StepState","describe","afterEach","cleanup","it","listSelections","ListPagesGraphQLFieldSelection","getSelections","GetPageGraphQLFieldSelection","expect","mapper","TableRowMapperAbstraction","row","handlers","review","createReview","expected","toSystemWorkflow","ReviewChangedEvent","home","page","other","full","cleared","otherWrite","otherWriter","namespace","pageReview","entryReview","handler","stillHome"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { GetPageGraphQLFieldSelection } from "@webiny/app-website-builder/features/pages/getPage/abstractions.js";
|
|
2
|
+
declare class WbReviewGetPageFieldSelectionImpl implements GetPageGraphQLFieldSelection.Interface {
|
|
3
|
+
getSelection(): string[];
|
|
4
|
+
}
|
|
5
|
+
export declare const WbReviewGetPageFieldSelection: typeof WbReviewGetPageFieldSelectionImpl & {
|
|
6
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/app-website-builder/features/pages/getPage/abstractions.js").IGetPageGraphQLFieldSelection>;
|
|
7
|
+
};
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { GetPageGraphQLFieldSelection } from "@webiny/app-website-builder/features/pages/getPage/abstractions.js";
|
|
2
|
+
import { WB_REVIEW_PAGE_SELECTION } from "../wbReviewPageSelection.js";
|
|
3
|
+
class WbReviewGetPageFieldSelectionImpl {
|
|
4
|
+
getSelection() {
|
|
5
|
+
return [
|
|
6
|
+
WB_REVIEW_PAGE_SELECTION
|
|
7
|
+
];
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
const WbReviewGetPageFieldSelection = GetPageGraphQLFieldSelection.createImplementation({
|
|
11
|
+
dependencies: [],
|
|
12
|
+
implementation: WbReviewGetPageFieldSelectionImpl
|
|
13
|
+
});
|
|
14
|
+
export { WbReviewGetPageFieldSelection };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=WbReviewGetPageFieldSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/page/PageGet/WbReviewGetPageFieldSelection.js","sources":["../../../../src/presentation/page/PageGet/WbReviewGetPageFieldSelection.ts"],"sourcesContent":["import { GetPageGraphQLFieldSelection } from \"@webiny/app-website-builder/features/pages/getPage/abstractions.js\";\nimport { WB_REVIEW_PAGE_SELECTION } from \"../wbReviewPageSelection.js\";\n\nclass WbReviewGetPageFieldSelectionImpl implements GetPageGraphQLFieldSelection.Interface {\n getSelection(): string[] {\n return [WB_REVIEW_PAGE_SELECTION];\n }\n}\n\nexport const WbReviewGetPageFieldSelection = GetPageGraphQLFieldSelection.createImplementation({\n dependencies: [],\n implementation: WbReviewGetPageFieldSelectionImpl\n});\n"],"names":["WbReviewGetPageFieldSelectionImpl","WB_REVIEW_PAGE_SELECTION","WbReviewGetPageFieldSelection","GetPageGraphQLFieldSelection"],"mappings":";;AAGA,MAAMA;IACF,eAAyB;QACrB,OAAO;YAACC;SAAyB;IACrC;AACJ;AAEO,MAAMC,gCAAgCC,6BAA6B,oBAAoB,CAAC;IAC3F,cAAc,EAAE;IAChB,gBAAgBH;AACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { Container } from "@webiny/di";
|
|
3
|
+
import { GetPageGraphQLFieldSelection } from "@webiny/app-website-builder/features/pages/getPage/abstractions.js";
|
|
4
|
+
import { REVIEW_SYSTEM_WORKFLOW_SELECTION } from "@webiny/app-workflows/review/gateway/reviewFields.js";
|
|
5
|
+
import { WbReviewGetPageFieldSelection } from "./WbReviewGetPageFieldSelection.js";
|
|
6
|
+
describe("WbReviewGetPageFieldSelection", ()=>{
|
|
7
|
+
it("selects system.workflow with the shared selection constant", ()=>{
|
|
8
|
+
const container = new Container();
|
|
9
|
+
container.register(WbReviewGetPageFieldSelection);
|
|
10
|
+
const selections = container.resolveAll(GetPageGraphQLFieldSelection);
|
|
11
|
+
expect(selections).toHaveLength(1);
|
|
12
|
+
const fields = selections[0].getSelection();
|
|
13
|
+
expect(fields).toHaveLength(1);
|
|
14
|
+
const normalized = fields[0].replace(/\s+/g, " ").trim();
|
|
15
|
+
expect(normalized).toBe(`system { workflow { ${REVIEW_SYSTEM_WORKFLOW_SELECTION} } }`);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=WbReviewGetPageFieldSelection.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/page/PageGet/WbReviewGetPageFieldSelection.test.js","sources":["../../../../src/presentation/page/PageGet/WbReviewGetPageFieldSelection.test.ts"],"sourcesContent":["import { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { GetPageGraphQLFieldSelection } from \"@webiny/app-website-builder/features/pages/getPage/abstractions.js\";\nimport { REVIEW_SYSTEM_WORKFLOW_SELECTION } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { WbReviewGetPageFieldSelection } from \"./WbReviewGetPageFieldSelection.js\";\n\ndescribe(\"WbReviewGetPageFieldSelection\", () => {\n it(\"selects system.workflow with the shared selection constant\", () => {\n const container = new Container();\n container.register(WbReviewGetPageFieldSelection);\n\n const selections = container.resolveAll(GetPageGraphQLFieldSelection);\n\n expect(selections).toHaveLength(1);\n const fields = selections[0].getSelection();\n expect(fields).toHaveLength(1);\n const normalized = fields[0].replace(/\\s+/g, \" \").trim();\n expect(normalized).toBe(`system { workflow { ${REVIEW_SYSTEM_WORKFLOW_SELECTION} } }`);\n });\n});\n"],"names":["describe","it","container","Container","WbReviewGetPageFieldSelection","selections","GetPageGraphQLFieldSelection","expect","fields","normalized","REVIEW_SYSTEM_WORKFLOW_SELECTION"],"mappings":";;;;;AAQAA,SAAS,iCAAiC;IACtCC,GAAG,8DAA8D;QAC7D,MAAMC,YAAY,IAAIC;QACtBD,UAAU,QAAQ,CAACE;QAEnB,MAAMC,aAAaH,UAAU,UAAU,CAACI;QAExCC,OAAOF,YAAY,YAAY,CAAC;QAChC,MAAMG,SAASH,UAAU,CAAC,EAAE,CAAC,YAAY;QACzCE,OAAOC,QAAQ,YAAY,CAAC;QAC5B,MAAMC,aAAaD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI;QACtDD,OAAOE,YAAY,IAAI,CAAC,CAAC,oBAAoB,EAAEC,iCAAiC,IAAI,CAAC;IACzF;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const PageGetWorkflowsFeature: import("@webiny/feature/admin").FeatureDefinition<any, []>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/admin";
|
|
2
|
+
import { WbReviewGetPageFieldSelection } from "./WbReviewGetPageFieldSelection.js";
|
|
3
|
+
const PageGetWorkflowsFeature = createFeature({
|
|
4
|
+
name: "PageGetWorkflows",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(WbReviewGetPageFieldSelection);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export { PageGetWorkflowsFeature };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/page/PageGet/feature.js","sources":["../../../../src/presentation/page/PageGet/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { WbReviewGetPageFieldSelection } from \"./WbReviewGetPageFieldSelection.js\";\n\nexport const PageGetWorkflowsFeature = createFeature({\n name: \"PageGetWorkflows\",\n register(container) {\n container.register(WbReviewGetPageFieldSelection);\n }\n});\n"],"names":["PageGetWorkflowsFeature","createFeature","container","WbReviewGetPageFieldSelection"],"mappings":";;AAGO,MAAMA,0BAA0BC,cAAc;IACjD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ListPagesGraphQLFieldSelection } from "@webiny/app-website-builder/features/pages/listPages/abstractions.js";
|
|
2
|
+
declare class WbReviewListPagesFieldSelectionImpl implements ListPagesGraphQLFieldSelection.Interface {
|
|
3
|
+
getSelection(): string[];
|
|
4
|
+
}
|
|
5
|
+
export declare const WbReviewListPagesFieldSelection: typeof WbReviewListPagesFieldSelectionImpl & {
|
|
6
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/app-website-builder/features/pages/listPages/abstractions.js").IListPagesGraphQLFieldSelection>;
|
|
7
|
+
};
|
|
8
|
+
export {};
|