@webiny/api-website-builder-workflows 0.0.0-unstable.7c2def32a7 → 0.0.0-unstable.9609e4e0c9
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/WebsiteBuilderPageSchemaFactory.d.ts +10 -4
- package/WebsiteBuilderPageSchemaFactory.js +10 -7
- package/WebsiteBuilderPageSchemaFactory.js.map +1 -1
- package/WebsiteBuilderWorkflowsFeature.js +8 -2
- package/WebsiteBuilderWorkflowsFeature.js.map +1 -1
- package/constants.d.ts +4 -0
- package/constants.js +5 -0
- package/constants.js.map +1 -0
- package/features/hooks/BlockPageDeleteWhileInReview.d.ts +20 -0
- package/features/hooks/BlockPageDeleteWhileInReview.js +43 -0
- package/features/hooks/BlockPageDeleteWhileInReview.js.map +1 -0
- package/features/hooks/BlockPageFolderChangeWhileInReview.d.ts +19 -0
- package/features/hooks/BlockPageFolderChangeWhileInReview.js +27 -0
- package/features/hooks/BlockPageFolderChangeWhileInReview.js.map +1 -0
- package/features/hooks/BlockPageMoveWhileInReview.d.ts +18 -0
- package/features/hooks/BlockPageMoveWhileInReview.js +44 -0
- package/features/hooks/BlockPageMoveWhileInReview.js.map +1 -0
- package/features/hooks/BlockPageRevisionDeleteWhileInReview.d.ts +13 -0
- package/features/hooks/BlockPageRevisionDeleteWhileInReview.js +44 -0
- package/features/hooks/BlockPageRevisionDeleteWhileInReview.js.map +1 -0
- package/features/hooks/BlockPageTrashWhileInReview.d.ts +21 -0
- package/features/hooks/BlockPageTrashWhileInReview.js +43 -0
- package/features/hooks/BlockPageTrashWhileInReview.js.map +1 -0
- package/features/hooks/BlockPageUpdateWhileInReview.d.ts +20 -0
- package/features/hooks/BlockPageUpdateWhileInReview.js +25 -0
- package/features/hooks/BlockPageUpdateWhileInReview.js.map +1 -0
- package/features/hooks/DeleteReviewsOnPageDelete.d.ts +20 -0
- package/features/hooks/DeleteReviewsOnPageDelete.js +43 -0
- package/features/hooks/DeleteReviewsOnPageDelete.js.map +1 -0
- package/features/hooks/DeleteReviewsOnPageRevisionDelete.d.ts +13 -0
- package/features/hooks/DeleteReviewsOnPageRevisionDelete.js +44 -0
- package/features/hooks/DeleteReviewsOnPageRevisionDelete.js.map +1 -0
- package/features/hooks/NullReviewStateOnGraduatedVariantDecorator.d.ts +27 -0
- package/features/hooks/NullReviewStateOnGraduatedVariantDecorator.js +53 -0
- package/features/hooks/NullReviewStateOnGraduatedVariantDecorator.js.map +1 -0
- package/features/hooks/NullReviewStateOnPageRevisionCreate.d.ts +26 -0
- package/features/hooks/NullReviewStateOnPageRevisionCreate.js +43 -0
- package/features/hooks/NullReviewStateOnPageRevisionCreate.js.map +1 -0
- package/features/hooks/RequireApprovedReviewOnPagePublish.d.ts +20 -0
- package/features/hooks/RequireApprovedReviewOnPagePublish.js +42 -0
- package/features/hooks/RequireApprovedReviewOnPagePublish.js.map +1 -0
- package/features/hooks/feature.d.ts +9 -0
- package/features/hooks/feature.js +31 -0
- package/features/hooks/feature.js.map +1 -0
- package/features/target/WbPageAccess/WbPageAccess.d.ts +27 -0
- package/features/target/WbPageAccess/WbPageAccess.js +84 -0
- package/features/target/WbPageAccess/WbPageAccess.js.map +1 -0
- package/features/target/WbPageAccess/abstractions.d.ts +39 -0
- package/features/target/WbPageAccess/abstractions.js +5 -0
- package/features/target/WbPageAccess/abstractions.js.map +1 -0
- package/features/target/WbPageAccess/index.d.ts +1 -0
- package/features/target/WbPageAccess/index.js +1 -0
- package/features/target/WbPageDeniedFolders/WbPageDeniedFolders.d.ts +20 -0
- package/features/target/WbPageDeniedFolders/WbPageDeniedFolders.js +55 -0
- package/features/target/WbPageDeniedFolders/WbPageDeniedFolders.js.map +1 -0
- package/features/target/WbPageDeniedFolders/abstractions.d.ts +23 -0
- package/features/target/WbPageDeniedFolders/abstractions.js +5 -0
- package/features/target/WbPageDeniedFolders/abstractions.js.map +1 -0
- package/features/target/WbPageDeniedFolders/index.d.ts +1 -0
- package/features/target/WbPageDeniedFolders/index.js +1 -0
- package/features/target/WbPageFolderExistsService/WbPageFolderExistsService.d.ts +15 -0
- package/features/target/WbPageFolderExistsService/WbPageFolderExistsService.js +27 -0
- package/features/target/WbPageFolderExistsService/WbPageFolderExistsService.js.map +1 -0
- package/features/target/WbPageFolderExistsService/abstractions.d.ts +16 -0
- package/features/target/WbPageFolderExistsService/abstractions.js +5 -0
- package/features/target/WbPageFolderExistsService/abstractions.js.map +1 -0
- package/features/target/WbPageFolderExistsService/index.d.ts +1 -0
- package/features/target/WbPageFolderExistsService/index.js +1 -0
- package/features/target/WbPageReviewNamespace.d.ts +14 -0
- package/features/target/WbPageReviewNamespace.js +15 -0
- package/features/target/WbPageReviewNamespace.js.map +1 -0
- package/features/target/WbPageReviewReadFilter/WbPageReviewReadFilter.d.ts +17 -0
- package/features/target/WbPageReviewReadFilter/WbPageReviewReadFilter.js +53 -0
- package/features/target/WbPageReviewReadFilter/WbPageReviewReadFilter.js.map +1 -0
- package/features/target/WbPageReviewReadFilter/abstractions.d.ts +21 -0
- package/features/target/WbPageReviewReadFilter/abstractions.js +5 -0
- package/features/target/WbPageReviewReadFilter/abstractions.js.map +1 -0
- package/features/target/WbPageReviewReadFilter/index.d.ts +1 -0
- package/features/target/WbPageReviewReadFilter/index.js +1 -0
- package/features/target/WbPageReviewTargetEditor.d.ts +33 -0
- package/features/target/WbPageReviewTargetEditor.js +109 -0
- package/features/target/WbPageReviewTargetEditor.js.map +1 -0
- package/features/target/WbPageReviewTargetFolderChain.d.ts +22 -0
- package/features/target/WbPageReviewTargetFolderChain.js +34 -0
- package/features/target/WbPageReviewTargetFolderChain.js.map +1 -0
- package/features/target/WbPageReviewTargetLink.d.ts +17 -0
- package/features/target/WbPageReviewTargetLink.js +17 -0
- package/features/target/WbPageReviewTargetLink.js.map +1 -0
- package/features/target/WbPageReviewTargetLoader.d.ts +13 -0
- package/features/target/WbPageReviewTargetLoader.js +29 -0
- package/features/target/WbPageReviewTargetLoader.js.map +1 -0
- package/features/target/WbPageReviewTargetReadAccess.d.ts +33 -0
- package/features/target/WbPageReviewTargetReadAccess.js +72 -0
- package/features/target/WbPageReviewTargetReadAccess.js.map +1 -0
- package/features/target/WbPageReviewTargetSync.d.ts +23 -0
- package/features/target/WbPageReviewTargetSync.js +39 -0
- package/features/target/WbPageReviewTargetSync.js.map +1 -0
- package/features/target/WbPageTargetReader/WbPageTargetReader.d.ts +20 -0
- package/features/target/WbPageTargetReader/WbPageTargetReader.js +51 -0
- package/features/target/WbPageTargetReader/WbPageTargetReader.js.map +1 -0
- package/features/target/WbPageTargetReader/abstractions.d.ts +37 -0
- package/features/target/WbPageTargetReader/abstractions.js +5 -0
- package/features/target/WbPageTargetReader/abstractions.js.map +1 -0
- package/features/target/WbPageTargetReader/index.d.ts +1 -0
- package/features/target/WbPageTargetReader/index.js +1 -0
- package/features/target/WbWorkflowModelParser.d.ts +9 -0
- package/features/target/WbWorkflowModelParser.js +18 -0
- package/features/target/WbWorkflowModelParser.js.map +1 -0
- package/features/target/feature.d.ts +5 -0
- package/features/target/feature.js +35 -0
- package/features/target/feature.js.map +1 -0
- package/features/target/isWbPageEditorValue.d.ts +9 -0
- package/features/target/isWbPageEditorValue.js +34 -0
- package/features/target/isWbPageEditorValue.js.map +1 -0
- package/features/target/toWbPageEditorFields.d.ts +32 -0
- package/features/target/toWbPageEditorFields.js +102 -0
- package/features/target/toWbPageEditorFields.js.map +1 -0
- package/features/target/toWbPageProperties.d.ts +10 -0
- package/features/target/toWbPageProperties.js +27 -0
- package/features/target/toWbPageProperties.js.map +1 -0
- package/features/target/toWbPageReviewTarget.d.ts +4 -0
- package/features/target/toWbPageReviewTarget.js +25 -0
- package/features/target/toWbPageReviewTarget.js.map +1 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/ApproveWebsiteBuilderPageReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/ApproveWebsiteBuilderPageReviewStepUseCase.js +35 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/ApproveWebsiteBuilderPageReviewStepUseCase.js.map +1 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/abstractions.d.ts +26 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/abstractions.js +5 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/feature.d.ts +4 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/feature.js +11 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/feature.js.map +1 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/index.d.ts +1 -0
- package/features/wrappers/ApproveWebsiteBuilderPageReviewStep/index.js +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/CancelWebsiteBuilderPageReviewUseCase.d.ts +13 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/CancelWebsiteBuilderPageReviewUseCase.js +37 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/CancelWebsiteBuilderPageReviewUseCase.js.map +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/abstractions.d.ts +30 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/abstractions.js +5 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/abstractions.js.map +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/feature.d.ts +4 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/feature.js +11 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/feature.js.map +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/index.d.ts +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReview/index.js +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/CancelWebsiteBuilderPageReviewsForDeleteUseCase.d.ts +19 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/CancelWebsiteBuilderPageReviewsForDeleteUseCase.js +81 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/CancelWebsiteBuilderPageReviewsForDeleteUseCase.js.map +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/abstractions.d.ts +39 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/abstractions.js +5 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/abstractions.js.map +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/feature.d.ts +4 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/feature.js +11 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/feature.js.map +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/index.d.ts +1 -0
- package/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/index.js +1 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/DeleteWebsiteBuilderPageWorkflowUseCase.d.ts +25 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/DeleteWebsiteBuilderPageWorkflowUseCase.js +95 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/DeleteWebsiteBuilderPageWorkflowUseCase.js.map +1 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/abstractions.d.ts +32 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/abstractions.js +5 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/abstractions.js.map +1 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/feature.d.ts +4 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/feature.js +11 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/feature.js.map +1 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/index.d.ts +1 -0
- package/features/wrappers/DeleteWebsiteBuilderPageWorkflow/index.js +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/GetWebsiteBuilderPageReviewUseCase.d.ts +13 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/GetWebsiteBuilderPageReviewUseCase.js +40 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/GetWebsiteBuilderPageReviewUseCase.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/abstractions.d.ts +29 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/abstractions.js +5 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/abstractions.js.map +1 -0
- package/features/{PageWorkflows → wrappers/GetWebsiteBuilderPageReview}/feature.d.ts +1 -1
- package/features/wrappers/GetWebsiteBuilderPageReview/feature.js +11 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/feature.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/index.d.ts +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReview/index.js +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/GetWebsiteBuilderPageReviewStepRunUseCase.d.ts +13 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/GetWebsiteBuilderPageReviewStepRunUseCase.js +39 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/GetWebsiteBuilderPageReviewStepRunUseCase.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/abstractions.d.ts +33 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/abstractions.js +5 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/abstractions.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/feature.d.ts +4 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/feature.js +11 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/feature.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/index.d.ts +1 -0
- package/features/wrappers/GetWebsiteBuilderPageReviewStepRun/index.js +1 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/GetWebsiteBuilderPageTargetReviewUseCase.d.ts +19 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/GetWebsiteBuilderPageTargetReviewUseCase.js +72 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/GetWebsiteBuilderPageTargetReviewUseCase.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/abstractions.d.ts +34 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/abstractions.js +5 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/abstractions.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/feature.d.ts +4 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/feature.js +11 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/feature.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/index.d.ts +1 -0
- package/features/wrappers/GetWebsiteBuilderPageTargetReview/index.js +1 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/GetWebsiteBuilderPageWorkflowUseCase.d.ts +13 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/GetWebsiteBuilderPageWorkflowUseCase.js +34 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/GetWebsiteBuilderPageWorkflowUseCase.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/abstractions.d.ts +24 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/abstractions.js +5 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/abstractions.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/feature.d.ts +4 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/feature.js +11 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/feature.js.map +1 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/index.d.ts +1 -0
- package/features/wrappers/GetWebsiteBuilderPageWorkflow/index.js +1 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/InspectWebsiteBuilderPageRoutingUseCase.d.ts +19 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/InspectWebsiteBuilderPageRoutingUseCase.js +51 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/InspectWebsiteBuilderPageRoutingUseCase.js.map +1 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/abstractions.d.ts +34 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/abstractions.js +5 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/abstractions.js.map +1 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/feature.d.ts +4 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/feature.js +11 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/feature.js.map +1 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/index.d.ts +1 -0
- package/features/wrappers/InspectWebsiteBuilderPageRouting/index.js +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/ListWebsiteBuilderPageReviewStepCandidatesUseCase.d.ts +13 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/ListWebsiteBuilderPageReviewStepCandidatesUseCase.js +41 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/ListWebsiteBuilderPageReviewStepCandidatesUseCase.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/abstractions.d.ts +30 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/abstractions.js +5 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/abstractions.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/feature.d.ts +4 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/feature.js +11 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/feature.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/index.d.ts +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviewStepCandidates/index.js +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/ListWebsiteBuilderPageReviewsUseCase.d.ts +15 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/ListWebsiteBuilderPageReviewsUseCase.js +68 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/ListWebsiteBuilderPageReviewsUseCase.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/abstractions.d.ts +43 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/abstractions.js +5 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/abstractions.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/feature.d.ts +4 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/feature.js +11 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/feature.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/index.d.ts +2 -0
- package/features/wrappers/ListWebsiteBuilderPageReviews/index.js +1 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/ListWebsiteBuilderPageStepCandidatesUseCase.d.ts +25 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/ListWebsiteBuilderPageStepCandidatesUseCase.js +93 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/ListWebsiteBuilderPageStepCandidatesUseCase.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/abstractions.d.ts +41 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/abstractions.js +5 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/abstractions.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/feature.d.ts +4 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/feature.js +11 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/feature.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/index.d.ts +1 -0
- package/features/wrappers/ListWebsiteBuilderPageStepCandidates/index.js +1 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/ListWebsiteBuilderPageWorkflowsUseCase.d.ts +13 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/ListWebsiteBuilderPageWorkflowsUseCase.js +37 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/ListWebsiteBuilderPageWorkflowsUseCase.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/abstractions.d.ts +20 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/abstractions.js +5 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/abstractions.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/feature.d.ts +4 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/feature.js +11 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/feature.js.map +1 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/index.d.ts +1 -0
- package/features/wrappers/ListWebsiteBuilderPageWorkflows/index.js +1 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/ReassignWebsiteBuilderPageReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/ReassignWebsiteBuilderPageReviewStepUseCase.js +40 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/ReassignWebsiteBuilderPageReviewStepUseCase.js.map +1 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/abstractions.d.ts +32 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/abstractions.js +5 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/feature.d.ts +4 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/feature.js +11 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/feature.js.map +1 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/index.d.ts +1 -0
- package/features/wrappers/ReassignWebsiteBuilderPageReviewStep/index.js +1 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/RejectWebsiteBuilderPageReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/RejectWebsiteBuilderPageReviewStepUseCase.js +35 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/RejectWebsiteBuilderPageReviewStepUseCase.js.map +1 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/abstractions.d.ts +26 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/abstractions.js +5 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/feature.d.ts +4 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/feature.js +11 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/feature.js.map +1 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/index.d.ts +1 -0
- package/features/wrappers/RejectWebsiteBuilderPageReviewStep/index.js +1 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/RequestWebsiteBuilderPageReviewUseCase.d.ts +23 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/RequestWebsiteBuilderPageReviewUseCase.js +72 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/RequestWebsiteBuilderPageReviewUseCase.js.map +1 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/abstractions.d.ts +41 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/abstractions.js +5 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/abstractions.js.map +1 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/feature.d.ts +4 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/feature.js +11 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/feature.js.map +1 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/index.d.ts +1 -0
- package/features/wrappers/RequestWebsiteBuilderPageReview/index.js +1 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/RestartWebsiteBuilderPageReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/RestartWebsiteBuilderPageReviewStepUseCase.js +39 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/RestartWebsiteBuilderPageReviewStepUseCase.js.map +1 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/abstractions.d.ts +30 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/abstractions.js +5 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/feature.d.ts +4 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/feature.js +11 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/feature.js.map +1 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/index.d.ts +1 -0
- package/features/wrappers/RestartWebsiteBuilderPageReviewStep/index.js +1 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/StartWebsiteBuilderPageReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/StartWebsiteBuilderPageReviewStepUseCase.js +34 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/StartWebsiteBuilderPageReviewStepUseCase.js.map +1 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/abstractions.d.ts +25 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/abstractions.js +5 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/feature.d.ts +4 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/feature.js +11 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/feature.js.map +1 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/index.d.ts +1 -0
- package/features/wrappers/StartWebsiteBuilderPageReviewStep/index.js +1 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/StoreWebsiteBuilderPageWorkflowUseCase.d.ts +17 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/StoreWebsiteBuilderPageWorkflowUseCase.js +57 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/StoreWebsiteBuilderPageWorkflowUseCase.js.map +1 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/abstractions.d.ts +33 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/abstractions.js +5 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/abstractions.js.map +1 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/feature.d.ts +4 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/feature.js +11 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/feature.js.map +1 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/index.d.ts +1 -0
- package/features/wrappers/StoreWebsiteBuilderPageWorkflow/index.js +1 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/TakeOverWebsiteBuilderPageReviewStepUseCase.d.ts +13 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/TakeOverWebsiteBuilderPageReviewStepUseCase.js +35 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/TakeOverWebsiteBuilderPageReviewStepUseCase.js.map +1 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/abstractions.d.ts +27 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/abstractions.js +5 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/abstractions.js.map +1 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/feature.d.ts +4 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/feature.js +11 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/feature.js.map +1 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/index.d.ts +1 -0
- package/features/wrappers/TakeOverWebsiteBuilderPageReviewStep/index.js +1 -0
- package/features/wrappers/WbPageReviewGuardService/WbPageReviewGuardService.d.ts +17 -0
- package/features/wrappers/WbPageReviewGuardService/WbPageReviewGuardService.js +63 -0
- package/features/wrappers/WbPageReviewGuardService/WbPageReviewGuardService.js.map +1 -0
- package/features/wrappers/WbPageReviewGuardService/abstractions.d.ts +37 -0
- package/features/wrappers/WbPageReviewGuardService/abstractions.js +5 -0
- package/features/wrappers/WbPageReviewGuardService/abstractions.js.map +1 -0
- package/features/wrappers/WbPageReviewGuardService/index.d.ts +1 -0
- package/features/wrappers/WbPageReviewGuardService/index.js +1 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/WebsiteBuilderPageFolderExistsUseCase.d.ts +15 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/WebsiteBuilderPageFolderExistsUseCase.js +43 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/WebsiteBuilderPageFolderExistsUseCase.js.map +1 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/abstractions.d.ts +28 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/abstractions.js +5 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/abstractions.js.map +1 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/feature.d.ts +4 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/feature.js +11 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/feature.js.map +1 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/index.d.ts +1 -0
- package/features/wrappers/WebsiteBuilderPageFolderExists/index.js +1 -0
- package/features/wrappers/feature.d.ts +9 -0
- package/features/wrappers/feature.js +53 -0
- package/features/wrappers/feature.js.map +1 -0
- package/features/wrappers/shared/wbWorkflows.d.ts +8 -0
- package/features/wrappers/shared/wbWorkflows.js +9 -0
- package/features/wrappers/shared/wbWorkflows.js.map +1 -0
- package/graphql/WebsiteBuilderWorkflowsSchemaFactory.d.ts +15 -0
- package/graphql/WebsiteBuilderWorkflowsSchemaFactory.js +616 -0
- package/graphql/WebsiteBuilderWorkflowsSchemaFactory.js.map +1 -0
- package/graphql/isValidRevisionId.d.ts +6 -0
- package/graphql/isValidRevisionId.js +9 -0
- package/graphql/isValidRevisionId.js.map +1 -0
- package/package.json +22 -16
- package/features/PageWorkflows/decorators/WbWorkflowStateContextProvider.d.ts +0 -13
- package/features/PageWorkflows/decorators/WbWorkflowStateContextProvider.js +0 -27
- package/features/PageWorkflows/decorators/WbWorkflowStateContextProvider.js.map +0 -1
- package/features/PageWorkflows/decorators/WbWorkflowStateFilter.d.ts +0 -13
- package/features/PageWorkflows/decorators/WbWorkflowStateFilter.js +0 -45
- package/features/PageWorkflows/decorators/WbWorkflowStateFilter.js.map +0 -1
- package/features/PageWorkflows/errors.d.ts +0 -9
- package/features/PageWorkflows/errors.js +0 -12
- package/features/PageWorkflows/errors.js.map +0 -1
- package/features/PageWorkflows/feature.js +0 -27
- package/features/PageWorkflows/feature.js.map +0 -1
- package/features/PageWorkflows/handlers/BlockMoveOnActiveWorkflowState.d.ts +0 -11
- package/features/PageWorkflows/handlers/BlockMoveOnActiveWorkflowState.js +0 -31
- package/features/PageWorkflows/handlers/BlockMoveOnActiveWorkflowState.js.map +0 -1
- package/features/PageWorkflows/handlers/ClearPageStateOnWorkflowStateAfterDelete.d.ts +0 -11
- package/features/PageWorkflows/handlers/ClearPageStateOnWorkflowStateAfterDelete.js +0 -26
- package/features/PageWorkflows/handlers/ClearPageStateOnWorkflowStateAfterDelete.js.map +0 -1
- package/features/PageWorkflows/handlers/ClearPageStateOnWorkflowStateCancel.d.ts +0 -11
- package/features/PageWorkflows/handlers/ClearPageStateOnWorkflowStateCancel.js +0 -26
- package/features/PageWorkflows/handlers/ClearPageStateOnWorkflowStateCancel.js.map +0 -1
- package/features/PageWorkflows/handlers/DeleteWorkflowStateOnPageAfterDelete.d.ts +0 -11
- package/features/PageWorkflows/handlers/DeleteWorkflowStateOnPageAfterDelete.js +0 -21
- package/features/PageWorkflows/handlers/DeleteWorkflowStateOnPageAfterDelete.js.map +0 -1
- package/features/PageWorkflows/handlers/UpdatePageOnWorkflowStateAfterCreate.d.ts +0 -11
- package/features/PageWorkflows/handlers/UpdatePageOnWorkflowStateAfterCreate.js +0 -28
- package/features/PageWorkflows/handlers/UpdatePageOnWorkflowStateAfterCreate.js.map +0 -1
- package/features/PageWorkflows/handlers/UpdatePageOnWorkflowStateAfterUpdate.d.ts +0 -11
- package/features/PageWorkflows/handlers/UpdatePageOnWorkflowStateAfterUpdate.js +0 -27
- package/features/PageWorkflows/handlers/UpdatePageOnWorkflowStateAfterUpdate.js.map +0 -1
- package/features/PageWorkflows/handlers/ValidateWorkflowStateOnPageBeforePublish.d.ts +0 -11
- package/features/PageWorkflows/handlers/ValidateWorkflowStateOnPageBeforePublish.js +0 -37
- package/features/PageWorkflows/handlers/ValidateWorkflowStateOnPageBeforePublish.js.map +0 -1
- package/utils/appName.d.ts +0 -1
- package/utils/appName.js +0 -4
- package/utils/appName.js.map +0 -1
- package/utils/state.d.ts +0 -8
- package/utils/state.js +0 -12
- package/utils/state.js.map +0 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
const WB_PAGE_TITLE_FIELD = {
|
|
2
|
+
path: "properties.title",
|
|
3
|
+
key: "",
|
|
4
|
+
label: "Page title",
|
|
5
|
+
type: "text"
|
|
6
|
+
};
|
|
7
|
+
const WB_PAGE_SEO_FIELDS = [
|
|
8
|
+
{
|
|
9
|
+
path: "properties.seo.title",
|
|
10
|
+
key: "title",
|
|
11
|
+
label: "SEO title",
|
|
12
|
+
type: "text"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
path: "properties.seo.description",
|
|
16
|
+
key: "description",
|
|
17
|
+
label: "SEO description",
|
|
18
|
+
type: "long-text"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
path: "properties.seo.canonicalUrl",
|
|
22
|
+
key: "canonicalUrl",
|
|
23
|
+
label: "SEO canonical URL",
|
|
24
|
+
type: "text"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
path: "properties.seo.noIndex",
|
|
28
|
+
key: "noIndex",
|
|
29
|
+
label: "SEO no index",
|
|
30
|
+
type: "boolean"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
path: "properties.seo.noFollow",
|
|
34
|
+
key: "noFollow",
|
|
35
|
+
label: "SEO no follow",
|
|
36
|
+
type: "boolean"
|
|
37
|
+
}
|
|
38
|
+
];
|
|
39
|
+
const isRecord = (value)=>"object" == typeof value && null !== value && !Array.isArray(value);
|
|
40
|
+
const typeOfValue = (value)=>{
|
|
41
|
+
if (null == value) return "null";
|
|
42
|
+
if (Array.isArray(value)) return "list";
|
|
43
|
+
switch(typeof value){
|
|
44
|
+
case "string":
|
|
45
|
+
return "text";
|
|
46
|
+
case "number":
|
|
47
|
+
return "number";
|
|
48
|
+
case "boolean":
|
|
49
|
+
return "boolean";
|
|
50
|
+
default:
|
|
51
|
+
return "object";
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const toWritableRow = (field, value)=>({
|
|
55
|
+
path: field.path,
|
|
56
|
+
label: field.label,
|
|
57
|
+
type: field.type,
|
|
58
|
+
value: void 0 === value ? null : value,
|
|
59
|
+
writable: true
|
|
60
|
+
});
|
|
61
|
+
const toReadOnlyRow = (path, value)=>({
|
|
62
|
+
path,
|
|
63
|
+
label: path,
|
|
64
|
+
type: typeOfValue(value),
|
|
65
|
+
value: void 0 === value ? null : value,
|
|
66
|
+
writable: false
|
|
67
|
+
});
|
|
68
|
+
const summarizeElements = (elements)=>{
|
|
69
|
+
const components = new Map();
|
|
70
|
+
let count = 0;
|
|
71
|
+
if (isRecord(elements)) for (const element of Object.values(elements)){
|
|
72
|
+
count++;
|
|
73
|
+
const component = isRecord(element) ? element.component : void 0;
|
|
74
|
+
const name = isRecord(component) && "string" == typeof component.name ? component.name : "(none)";
|
|
75
|
+
components.set(name, (components.get(name) ?? 0) + 1);
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
count,
|
|
79
|
+
components: Object.fromEntries(components)
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
const toWbPageEditorFields = (page)=>{
|
|
83
|
+
const properties = page.properties;
|
|
84
|
+
const seo = isRecord(properties.seo) ? properties.seo : {};
|
|
85
|
+
const rows = [
|
|
86
|
+
toWritableRow(WB_PAGE_TITLE_FIELD, properties.title)
|
|
87
|
+
];
|
|
88
|
+
for (const [key, value] of Object.entries(properties))if (!("title" === key || "seo" === key || key.includes("."))) rows.push(toReadOnlyRow(`properties.${key}`, value));
|
|
89
|
+
for (const field of WB_PAGE_SEO_FIELDS)rows.push(toWritableRow(field, seo[field.key]));
|
|
90
|
+
for (const [key, value] of Object.entries(seo))if (!(key.includes(".") || WB_PAGE_SEO_FIELDS.some((field)=>field.key === key))) rows.push(toReadOnlyRow(`properties.seo.${key}`, value));
|
|
91
|
+
rows.push(toReadOnlyRow("location", page.location), toReadOnlyRow("status", page.status), toReadOnlyRow("metadata", page.metadata), toReadOnlyRow("bindings", page.bindings), toReadOnlyRow("extensions", page.extensions), {
|
|
92
|
+
path: "elements",
|
|
93
|
+
label: "elements",
|
|
94
|
+
type: "object",
|
|
95
|
+
value: summarizeElements(page.elements),
|
|
96
|
+
writable: false
|
|
97
|
+
});
|
|
98
|
+
return rows;
|
|
99
|
+
};
|
|
100
|
+
export { WB_PAGE_SEO_FIELDS, WB_PAGE_TITLE_FIELD, toWbPageEditorFields };
|
|
101
|
+
|
|
102
|
+
//# sourceMappingURL=toWbPageEditorFields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/toWbPageEditorFields.js","sources":["../../../src/features/target/toWbPageEditorFields.ts"],"sourcesContent":["import type { WbPage } from \"@webiny/api-website-builder/domain/page/abstractions.js\";\nimport type { ReviewTargetEditorField } from \"@webiny/api-workflows/features/review/ReviewTargetEditor/abstractions.js\";\n\n/** The parts of a page the editor reads. */\nexport type WbPageEditorSource = Pick<\n WbPage,\n \"properties\" | \"location\" | \"status\" | \"metadata\" | \"bindings\" | \"elements\" | \"extensions\"\n>;\n\n/** A field the AI may write (R172). */\nexport interface WbPageWritableField {\n /** The key `update` takes. */\n path: string;\n /** The key inside `properties.seo`; empty for the page title. */\n key: string;\n label: string;\n type: string;\n}\n\n/** What the model reads for the element tree instead of the tree itself. */\nexport interface WbElementsSummary {\n count: number;\n /** Component name to the number of elements that use it. */\n components: Record<string, number>;\n}\n\nexport const WB_PAGE_TITLE_FIELD: WbPageWritableField = {\n path: \"properties.title\",\n key: \"\",\n label: \"Page title\",\n type: \"text\"\n};\n\n/** The SEO scalars of the page editor's SEO group (R172). `metaTags` and the rest are read-only. */\nexport const WB_PAGE_SEO_FIELDS: WbPageWritableField[] = [\n { path: \"properties.seo.title\", key: \"title\", label: \"SEO title\", type: \"text\" },\n {\n path: \"properties.seo.description\",\n key: \"description\",\n label: \"SEO description\",\n type: \"long-text\"\n },\n {\n path: \"properties.seo.canonicalUrl\",\n key: \"canonicalUrl\",\n label: \"SEO canonical URL\",\n type: \"text\"\n },\n { path: \"properties.seo.noIndex\", key: \"noIndex\", label: \"SEO no index\", type: \"boolean\" },\n { path: \"properties.seo.noFollow\", key: \"noFollow\", label: \"SEO no follow\", type: \"boolean\" }\n];\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\nconst typeOfValue = (value: unknown): string => {\n if (value === null || value === undefined) {\n return \"null\";\n }\n if (Array.isArray(value)) {\n return \"list\";\n }\n switch (typeof value) {\n case \"string\":\n return \"text\";\n case \"number\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n default:\n return \"object\";\n }\n};\n\nconst toWritableRow = (field: WbPageWritableField, value: unknown): ReviewTargetEditorField => {\n return {\n path: field.path,\n label: field.label,\n type: field.type,\n value: value === undefined ? null : value,\n writable: true\n };\n};\n\nconst toReadOnlyRow = (path: string, value: unknown): ReviewTargetEditorField => {\n return {\n path,\n label: path,\n type: typeOfValue(value),\n value: value === undefined ? null : value,\n writable: false\n };\n};\n\nconst summarizeElements = (elements: unknown): WbElementsSummary => {\n const components = new Map<string, number>();\n let count = 0;\n if (isRecord(elements)) {\n for (const element of Object.values(elements)) {\n count++;\n const component = isRecord(element) ? element.component : undefined;\n const name =\n isRecord(component) && typeof component.name === \"string\"\n ? component.name\n : \"(none)\";\n components.set(name, (components.get(name) ?? 0) + 1);\n }\n }\n return { count, components: Object.fromEntries(components) };\n};\n\n/**\n * The page as the target editor shows it (R172): the title, every other `properties` key as one\n * read-only row with its whole value, the five writable SEO scalars, the rest of the SEO group as\n * read-only rows, the read-only page parts (`location`, `status`, `metadata`, `bindings`,\n * `extensions`) and a read-only summary of the element tree. `properties.path` and\n * `properties.language` are never writable. A `properties` key that contains a dot is skipped: its\n * row path could shadow an allowlisted path. Throws when `properties` is missing (the editor turns\n * that into a failed Result). Pure.\n */\nexport const toWbPageEditorFields = (page: WbPageEditorSource): ReviewTargetEditorField[] => {\n const properties: Record<string, unknown> = page.properties;\n const seo = isRecord(properties.seo) ? properties.seo : {};\n const rows: ReviewTargetEditorField[] = [toWritableRow(WB_PAGE_TITLE_FIELD, properties.title)];\n\n for (const [key, value] of Object.entries(properties)) {\n if (key === \"title\" || key === \"seo\" || key.includes(\".\")) {\n continue;\n }\n rows.push(toReadOnlyRow(`properties.${key}`, value));\n }\n for (const field of WB_PAGE_SEO_FIELDS) {\n rows.push(toWritableRow(field, seo[field.key]));\n }\n for (const [key, value] of Object.entries(seo)) {\n if (key.includes(\".\") || WB_PAGE_SEO_FIELDS.some(field => field.key === key)) {\n continue;\n }\n rows.push(toReadOnlyRow(`properties.seo.${key}`, value));\n }\n\n rows.push(\n toReadOnlyRow(\"location\", page.location),\n toReadOnlyRow(\"status\", page.status),\n toReadOnlyRow(\"metadata\", page.metadata),\n toReadOnlyRow(\"bindings\", page.bindings),\n toReadOnlyRow(\"extensions\", page.extensions),\n {\n path: \"elements\",\n label: \"elements\",\n type: \"object\",\n value: summarizeElements(page.elements),\n writable: false\n }\n );\n return rows;\n};\n"],"names":["WB_PAGE_TITLE_FIELD","WB_PAGE_SEO_FIELDS","isRecord","value","Array","typeOfValue","toWritableRow","field","undefined","toReadOnlyRow","path","summarizeElements","elements","components","Map","count","element","Object","component","name","toWbPageEditorFields","page","properties","seo","rows","key"],"mappings":"AA0BO,MAAMA,sBAA2C;IACpD,MAAM;IACN,KAAK;IACL,OAAO;IACP,MAAM;AACV;AAGO,MAAMC,qBAA4C;IACrD;QAAE,MAAM;QAAwB,KAAK;QAAS,OAAO;QAAa,MAAM;IAAO;IAC/E;QACI,MAAM;QACN,KAAK;QACL,OAAO;QACP,MAAM;IACV;IACA;QACI,MAAM;QACN,KAAK;QACL,OAAO;QACP,MAAM;IACV;IACA;QAAE,MAAM;QAA0B,KAAK;QAAW,OAAO;QAAgB,MAAM;IAAU;IACzF;QAAE,MAAM;QAA2B,KAAK;QAAY,OAAO;QAAiB,MAAM;IAAU;CAC/F;AAED,MAAMC,WAAW,CAACC,QACP,AAAiB,YAAjB,OAAOA,SAAsBA,AAAU,SAAVA,SAAkB,CAACC,MAAM,OAAO,CAACD;AAGzE,MAAME,cAAc,CAACF;IACjB,IAAIA,QAAAA,OACA,OAAO;IAEX,IAAIC,MAAM,OAAO,CAACD,QACd,OAAO;IAEX,OAAQ,OAAOA;QACX,KAAK;YACD,OAAO;QACX,KAAK;YACD,OAAO;QACX,KAAK;YACD,OAAO;QACX;YACI,OAAO;IACf;AACJ;AAEA,MAAMG,gBAAgB,CAACC,OAA4BJ,QACxC;QACH,MAAMI,MAAM,IAAI;QAChB,OAAOA,MAAM,KAAK;QAClB,MAAMA,MAAM,IAAI;QAChB,OAAOJ,AAAUK,WAAVL,QAAsB,OAAOA;QACpC,UAAU;IACd;AAGJ,MAAMM,gBAAgB,CAACC,MAAcP,QAC1B;QACHO;QACA,OAAOA;QACP,MAAML,YAAYF;QAClB,OAAOA,AAAUK,WAAVL,QAAsB,OAAOA;QACpC,UAAU;IACd;AAGJ,MAAMQ,oBAAoB,CAACC;IACvB,MAAMC,aAAa,IAAIC;IACvB,IAAIC,QAAQ;IACZ,IAAIb,SAASU,WACT,KAAK,MAAMI,WAAWC,OAAO,MAAM,CAACL,UAAW;QAC3CG;QACA,MAAMG,YAAYhB,SAASc,WAAWA,QAAQ,SAAS,GAAGR;QAC1D,MAAMW,OACFjB,SAASgB,cAAc,AAA0B,YAA1B,OAAOA,UAAU,IAAI,GACtCA,UAAU,IAAI,GACd;QACVL,WAAW,GAAG,CAACM,MAAON,AAAAA,CAAAA,WAAW,GAAG,CAACM,SAAS,KAAK;IACvD;IAEJ,OAAO;QAAEJ;QAAO,YAAYE,OAAO,WAAW,CAACJ;IAAY;AAC/D;AAWO,MAAMO,uBAAuB,CAACC;IACjC,MAAMC,aAAsCD,KAAK,UAAU;IAC3D,MAAME,MAAMrB,SAASoB,WAAW,GAAG,IAAIA,WAAW,GAAG,GAAG,CAAC;IACzD,MAAME,OAAkC;QAAClB,cAAcN,qBAAqBsB,WAAW,KAAK;KAAE;IAE9F,KAAK,MAAM,CAACG,KAAKtB,MAAM,IAAIc,OAAO,OAAO,CAACK,YACtC,KAAIG,CAAAA,AAAQ,YAARA,OAAmBA,AAAQ,UAARA,OAAiBA,IAAI,QAAQ,CAAC,IAAG,GAGxDD,KAAK,IAAI,CAACf,cAAc,CAAC,WAAW,EAAEgB,KAAK,EAAEtB;IAEjD,KAAK,MAAMI,SAASN,mBAChBuB,KAAK,IAAI,CAAClB,cAAcC,OAAOgB,GAAG,CAAChB,MAAM,GAAG,CAAC;IAEjD,KAAK,MAAM,CAACkB,KAAKtB,MAAM,IAAIc,OAAO,OAAO,CAACM,KACtC,KAAIE,CAAAA,IAAI,QAAQ,CAAC,QAAQxB,mBAAmB,IAAI,CAACM,CAAAA,QAASA,MAAM,GAAG,KAAKkB,IAAG,GAG3ED,KAAK,IAAI,CAACf,cAAc,CAAC,eAAe,EAAEgB,KAAK,EAAEtB;IAGrDqB,KAAK,IAAI,CACLf,cAAc,YAAYY,KAAK,QAAQ,GACvCZ,cAAc,UAAUY,KAAK,MAAM,GACnCZ,cAAc,YAAYY,KAAK,QAAQ,GACvCZ,cAAc,YAAYY,KAAK,QAAQ,GACvCZ,cAAc,cAAcY,KAAK,UAAU,GAC3C;QACI,MAAM;QACN,OAAO;QACP,MAAM;QACN,OAAOV,kBAAkBU,KAAK,QAAQ;QACtC,UAAU;IACd;IAEJ,OAAOG;AACX"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The FULL `properties` object for the page update. The update replaces `properties` as a whole
|
|
3
|
+
* (the CMS update merges top-level keys only), so every key of the current blob is carried over
|
|
4
|
+
* (`path`, `language`, `social`, `seo.metaTags` and the rest) and only the written allowlisted keys
|
|
5
|
+
* change. `seo` is a copy when any SEO key is written, a missing or non-object `seo` is created,
|
|
6
|
+
* and an SEO key written as `null` is removed. The paths are already checked against the allowlist
|
|
7
|
+
* (`toWbPageEditorFields`, `isWbPageEditorValue`), so a path is the title or one of the SEO
|
|
8
|
+
* fields. The current values are never mutated. Pure.
|
|
9
|
+
*/
|
|
10
|
+
export declare const toWbPageProperties: (current: Record<string, unknown>, updates: Record<string, unknown>) => Record<string, unknown>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { WB_PAGE_SEO_FIELDS, WB_PAGE_TITLE_FIELD } from "./toWbPageEditorFields.js";
|
|
2
|
+
const isRecord = (value)=>"object" == typeof value && null !== value && !Array.isArray(value);
|
|
3
|
+
const toWbPageProperties = (current, updates)=>{
|
|
4
|
+
const merged = {
|
|
5
|
+
...current
|
|
6
|
+
};
|
|
7
|
+
let seo = null;
|
|
8
|
+
for (const [path, value] of Object.entries(updates)){
|
|
9
|
+
if (path === WB_PAGE_TITLE_FIELD.path) {
|
|
10
|
+
merged.title = value;
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
const field = WB_PAGE_SEO_FIELDS.find((item)=>item.path === path);
|
|
14
|
+
if (field) {
|
|
15
|
+
if (null === seo) seo = isRecord(current.seo) ? {
|
|
16
|
+
...current.seo
|
|
17
|
+
} : {};
|
|
18
|
+
if (null === value) delete seo[field.key];
|
|
19
|
+
else seo[field.key] = value;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (null !== seo) merged.seo = seo;
|
|
23
|
+
return merged;
|
|
24
|
+
};
|
|
25
|
+
export { toWbPageProperties };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=toWbPageProperties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/toWbPageProperties.js","sources":["../../../src/features/target/toWbPageProperties.ts"],"sourcesContent":["import { WB_PAGE_SEO_FIELDS, WB_PAGE_TITLE_FIELD } from \"./toWbPageEditorFields.js\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\n/**\n * The FULL `properties` object for the page update. The update replaces `properties` as a whole\n * (the CMS update merges top-level keys only), so every key of the current blob is carried over\n * (`path`, `language`, `social`, `seo.metaTags` and the rest) and only the written allowlisted keys\n * change. `seo` is a copy when any SEO key is written, a missing or non-object `seo` is created,\n * and an SEO key written as `null` is removed. The paths are already checked against the allowlist\n * (`toWbPageEditorFields`, `isWbPageEditorValue`), so a path is the title or one of the SEO\n * fields. The current values are never mutated. Pure.\n */\nexport const toWbPageProperties = (\n current: Record<string, unknown>,\n updates: Record<string, unknown>\n): Record<string, unknown> => {\n const merged: Record<string, unknown> = { ...current };\n let seo: Record<string, unknown> | null = null;\n for (const [path, value] of Object.entries(updates)) {\n if (path === WB_PAGE_TITLE_FIELD.path) {\n merged.title = value;\n continue;\n }\n const field = WB_PAGE_SEO_FIELDS.find(item => item.path === path);\n if (!field) {\n continue;\n }\n if (seo === null) {\n seo = isRecord(current.seo) ? { ...current.seo } : {};\n }\n if (value === null) {\n delete seo[field.key];\n } else {\n seo[field.key] = value;\n }\n }\n if (seo !== null) {\n merged.seo = seo;\n }\n return merged;\n};\n"],"names":["isRecord","value","Array","toWbPageProperties","current","updates","merged","seo","path","Object","WB_PAGE_TITLE_FIELD","field","WB_PAGE_SEO_FIELDS","item"],"mappings":";AAEA,MAAMA,WAAW,CAACC,QACP,AAAiB,YAAjB,OAAOA,SAAsBA,AAAU,SAAVA,SAAkB,CAACC,MAAM,OAAO,CAACD;AAYlE,MAAME,qBAAqB,CAC9BC,SACAC;IAEA,MAAMC,SAAkC;QAAE,GAAGF,OAAO;IAAC;IACrD,IAAIG,MAAsC;IAC1C,KAAK,MAAM,CAACC,MAAMP,MAAM,IAAIQ,OAAO,OAAO,CAACJ,SAAU;QACjD,IAAIG,SAASE,oBAAoB,IAAI,EAAE;YACnCJ,OAAO,KAAK,GAAGL;YACf;QACJ;QACA,MAAMU,QAAQC,mBAAmB,IAAI,CAACC,CAAAA,OAAQA,KAAK,IAAI,KAAKL;QAC5D,IAAKG;YAGL,IAAIJ,AAAQ,SAARA,KACAA,MAAMP,SAASI,QAAQ,GAAG,IAAI;gBAAE,GAAGA,QAAQ,GAAG;YAAC,IAAI,CAAC;YAExD,IAAIH,AAAU,SAAVA,OACA,OAAOM,GAAG,CAACI,MAAM,GAAG,CAAC;iBAErBJ,GAAG,CAACI,MAAM,GAAG,CAAC,GAAGV;;IAEzB;IACA,IAAIM,AAAQ,SAARA,KACAD,OAAO,GAAG,GAAGC;IAEjB,OAAOD;AACX"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ReviewTarget } from "@webiny/api-workflows/features/review/ReviewTargetLoader/index.js";
|
|
2
|
+
import type { WbPageTargetReader } from "./WbPageTargetReader/index.js";
|
|
3
|
+
/** Title and typed `TargetContext` of a page revision (spec 9.3, R66). Pure. */
|
|
4
|
+
export declare const toWbPageReviewTarget: (target: WbPageTargetReader.Target) => ReviewTarget;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ROOT_FOLDER } from "@webiny/api-website-builder/constants.js";
|
|
2
|
+
import { WB_PAGE_FOLDER_TYPE } from "../../constants.js";
|
|
3
|
+
const toWbPageReviewTarget = (target)=>{
|
|
4
|
+
const { model, page } = target;
|
|
5
|
+
const title = page.properties.title;
|
|
6
|
+
const folderId = page.location.folderId;
|
|
7
|
+
return {
|
|
8
|
+
title,
|
|
9
|
+
context: {
|
|
10
|
+
folder: folderId && folderId !== ROOT_FOLDER ? {
|
|
11
|
+
id: folderId,
|
|
12
|
+
type: WB_PAGE_FOLDER_TYPE
|
|
13
|
+
} : null,
|
|
14
|
+
modelId: model.modelId,
|
|
15
|
+
title,
|
|
16
|
+
author: {
|
|
17
|
+
id: page.createdBy.id,
|
|
18
|
+
displayName: page.createdBy.displayName
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export { toWbPageReviewTarget };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=toWbPageReviewTarget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/target/toWbPageReviewTarget.js","sources":["../../../src/features/target/toWbPageReviewTarget.ts"],"sourcesContent":["import { ROOT_FOLDER } from \"@webiny/api-website-builder/constants.js\";\nimport type { ReviewTarget } from \"@webiny/api-workflows/features/review/ReviewTargetLoader/index.js\";\nimport { WB_PAGE_FOLDER_TYPE } from \"~/constants.js\";\nimport type { WbPageTargetReader } from \"./WbPageTargetReader/index.js\";\n\n/** Title and typed `TargetContext` of a page revision (spec 9.3, R66). Pure. */\nexport const toWbPageReviewTarget = (target: WbPageTargetReader.Target): ReviewTarget => {\n const { model, page } = target;\n const title = page.properties.title;\n const folderId = page.location.folderId;\n return {\n title,\n context: {\n folder:\n folderId && folderId !== ROOT_FOLDER\n ? { id: folderId, type: WB_PAGE_FOLDER_TYPE }\n : null,\n modelId: model.modelId,\n title,\n author: { id: page.createdBy.id, displayName: page.createdBy.displayName }\n }\n };\n};\n"],"names":["toWbPageReviewTarget","target","model","page","title","folderId","ROOT_FOLDER","WB_PAGE_FOLDER_TYPE"],"mappings":";;AAMO,MAAMA,uBAAuB,CAACC;IACjC,MAAM,EAAEC,KAAK,EAAEC,IAAI,EAAE,GAAGF;IACxB,MAAMG,QAAQD,KAAK,UAAU,CAAC,KAAK;IACnC,MAAME,WAAWF,KAAK,QAAQ,CAAC,QAAQ;IACvC,OAAO;QACHC;QACA,SAAS;YACL,QACIC,YAAYA,aAAaC,cACnB;gBAAE,IAAID;gBAAU,MAAME;YAAoB,IAC1C;YACV,SAASL,MAAM,OAAO;YACtBE;YACA,QAAQ;gBAAE,IAAID,KAAK,SAAS,CAAC,EAAE;gBAAE,aAAaA,KAAK,SAAS,CAAC,WAAW;YAAC;QAC7E;IACJ;AACJ"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ApproveReviewStepUseCase } from "@webiny/api-workflows/features/review/ApproveReviewStep/index.js";
|
|
2
|
+
import { WbPageReviewGuardService } from "../WbPageReviewGuardService/index.js";
|
|
3
|
+
import { ApproveWebsiteBuilderPageReviewStepUseCase as UseCase } from "./abstractions.js";
|
|
4
|
+
declare class ApproveWebsiteBuilderPageReviewStepUseCaseImpl implements UseCase.Interface {
|
|
5
|
+
private guard;
|
|
6
|
+
private engine;
|
|
7
|
+
constructor(guard: WbPageReviewGuardService.Interface, engine: ApproveReviewStepUseCase.Interface);
|
|
8
|
+
execute(input: UseCase.Input): UseCase.Return;
|
|
9
|
+
}
|
|
10
|
+
export declare const ApproveWebsiteBuilderPageReviewStepUseCase: typeof ApproveWebsiteBuilderPageReviewStepUseCaseImpl & {
|
|
11
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IApproveWebsiteBuilderPageReviewStepUseCase>;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { ApproveReviewStepUseCase } from "@webiny/api-workflows/features/review/ApproveReviewStep/index.js";
|
|
3
|
+
import { WbPageReviewGuardService } from "../WbPageReviewGuardService/index.js";
|
|
4
|
+
import { ApproveWebsiteBuilderPageReviewStepUseCase } from "./abstractions.js";
|
|
5
|
+
class ApproveWebsiteBuilderPageReviewStepUseCaseImpl {
|
|
6
|
+
constructor(guard, engine){
|
|
7
|
+
this.guard = guard;
|
|
8
|
+
this.engine = engine;
|
|
9
|
+
}
|
|
10
|
+
async execute(input) {
|
|
11
|
+
const authorized = await this.guard.authorize({
|
|
12
|
+
reviewId: input.reviewId,
|
|
13
|
+
action: "approve this step"
|
|
14
|
+
});
|
|
15
|
+
if (authorized.isFail()) return Result.fail(authorized.error);
|
|
16
|
+
const { viewer } = authorized.value;
|
|
17
|
+
return this.engine.execute({
|
|
18
|
+
reviewId: input.reviewId,
|
|
19
|
+
stepId: input.stepId,
|
|
20
|
+
actor: viewer.actor,
|
|
21
|
+
actorTeamIds: viewer.teamIds,
|
|
22
|
+
comment: input.comment ?? null
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const ApproveWebsiteBuilderPageReviewStepUseCase_ApproveWebsiteBuilderPageReviewStepUseCase = ApproveWebsiteBuilderPageReviewStepUseCase.createImplementation({
|
|
27
|
+
implementation: ApproveWebsiteBuilderPageReviewStepUseCaseImpl,
|
|
28
|
+
dependencies: [
|
|
29
|
+
WbPageReviewGuardService,
|
|
30
|
+
ApproveReviewStepUseCase
|
|
31
|
+
]
|
|
32
|
+
});
|
|
33
|
+
export { ApproveWebsiteBuilderPageReviewStepUseCase_ApproveWebsiteBuilderPageReviewStepUseCase as ApproveWebsiteBuilderPageReviewStepUseCase };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=ApproveWebsiteBuilderPageReviewStepUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/ApproveWebsiteBuilderPageReviewStep/ApproveWebsiteBuilderPageReviewStepUseCase.js","sources":["../../../../src/features/wrappers/ApproveWebsiteBuilderPageReviewStep/ApproveWebsiteBuilderPageReviewStepUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { ApproveReviewStepUseCase } from \"@webiny/api-workflows/features/review/ApproveReviewStep/index.js\";\nimport { WbPageReviewGuardService } from \"../WbPageReviewGuardService/index.js\";\nimport { ApproveWebsiteBuilderPageReviewStepUseCase as UseCase } from \"./abstractions.js\";\n\nclass ApproveWebsiteBuilderPageReviewStepUseCaseImpl implements UseCase.Interface {\n public constructor(\n private guard: WbPageReviewGuardService.Interface,\n private engine: ApproveReviewStepUseCase.Interface\n ) {}\n\n public async execute(input: UseCase.Input): UseCase.Return {\n const authorized = await this.guard.authorize({\n reviewId: input.reviewId,\n action: \"approve this step\"\n });\n if (authorized.isFail()) {\n return Result.fail(authorized.error);\n }\n\n const { viewer } = authorized.value;\n return this.engine.execute({\n reviewId: input.reviewId,\n stepId: input.stepId,\n actor: viewer.actor,\n actorTeamIds: viewer.teamIds,\n comment: input.comment ?? null\n });\n }\n}\n\nexport const ApproveWebsiteBuilderPageReviewStepUseCase = UseCase.createImplementation({\n implementation: ApproveWebsiteBuilderPageReviewStepUseCaseImpl,\n dependencies: [WbPageReviewGuardService, ApproveReviewStepUseCase]\n});\n"],"names":["ApproveWebsiteBuilderPageReviewStepUseCaseImpl","guard","engine","input","authorized","Result","viewer","ApproveWebsiteBuilderPageReviewStepUseCase","UseCase","WbPageReviewGuardService","ApproveReviewStepUseCase"],"mappings":";;;;AAKA,MAAMA;IACF,YACYC,KAAyC,EACzCC,MAA0C,CACpD;aAFUD,KAAK,GAALA;aACAC,MAAM,GAANA;IACT;IAEH,MAAa,QAAQC,KAAoB,EAAkB;QACvD,MAAMC,aAAa,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YAC1C,UAAUD,MAAM,QAAQ;YACxB,QAAQ;QACZ;QACA,IAAIC,WAAW,MAAM,IACjB,OAAOC,OAAO,IAAI,CAACD,WAAW,KAAK;QAGvC,MAAM,EAAEE,MAAM,EAAE,GAAGF,WAAW,KAAK;QACnC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YACvB,UAAUD,MAAM,QAAQ;YACxB,QAAQA,MAAM,MAAM;YACpB,OAAOG,OAAO,KAAK;YACnB,cAAcA,OAAO,OAAO;YAC5B,SAASH,MAAM,OAAO,IAAI;QAC9B;IACJ;AACJ;AAEO,MAAMI,wFAA6CC,2CAAAA,oBAA4B,CAAC;IACnF,gBAAgBR;IAChB,cAAc;QAACS;QAA0BC;KAAyB;AACtE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type Result } from "@webiny/feature/api";
|
|
2
|
+
import type { ReviewData } from "@webiny/api-workflows/domain/review/types.js";
|
|
3
|
+
import type { ApproveReviewStepUseCase } from "@webiny/api-workflows/features/review/ApproveReviewStep/index.js";
|
|
4
|
+
import type { WbPageReviewGuardService } from "../WbPageReviewGuardService/index.js";
|
|
5
|
+
export interface ApproveWebsiteBuilderPageReviewStepInput {
|
|
6
|
+
reviewId: string;
|
|
7
|
+
stepId: string;
|
|
8
|
+
comment?: string | null;
|
|
9
|
+
}
|
|
10
|
+
export interface IApproveWebsiteBuilderPageReviewStepUseCaseErrors {
|
|
11
|
+
guard: WbPageReviewGuardService.Error;
|
|
12
|
+
approve: ApproveReviewStepUseCase.Error;
|
|
13
|
+
}
|
|
14
|
+
type UseCaseError = IApproveWebsiteBuilderPageReviewStepUseCaseErrors[keyof IApproveWebsiteBuilderPageReviewStepUseCaseErrors];
|
|
15
|
+
export interface IApproveWebsiteBuilderPageReviewStepUseCase {
|
|
16
|
+
execute(input: ApproveWebsiteBuilderPageReviewStepInput): Promise<Result<ReviewData, UseCaseError>>;
|
|
17
|
+
}
|
|
18
|
+
/** Approve the page review step the user owns (spec 5.1): read access here, ownership in the engine. */
|
|
19
|
+
export declare const ApproveWebsiteBuilderPageReviewStepUseCase: import("@webiny/di").Abstraction<IApproveWebsiteBuilderPageReviewStepUseCase>;
|
|
20
|
+
export declare namespace ApproveWebsiteBuilderPageReviewStepUseCase {
|
|
21
|
+
type Interface = IApproveWebsiteBuilderPageReviewStepUseCase;
|
|
22
|
+
type Input = ApproveWebsiteBuilderPageReviewStepInput;
|
|
23
|
+
type Error = UseCaseError;
|
|
24
|
+
type Return = Promise<Result<ReviewData, UseCaseError>>;
|
|
25
|
+
}
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
+
const ApproveWebsiteBuilderPageReviewStepUseCase = createAbstraction("ApproveWebsiteBuilderPageReviewStepUseCase");
|
|
3
|
+
export { ApproveWebsiteBuilderPageReviewStepUseCase };
|
|
4
|
+
|
|
5
|
+
//# sourceMappingURL=abstractions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/ApproveWebsiteBuilderPageReviewStep/abstractions.js","sources":["../../../../src/features/wrappers/ApproveWebsiteBuilderPageReviewStep/abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { ReviewData } from \"@webiny/api-workflows/domain/review/types.js\";\nimport type { ApproveReviewStepUseCase } from \"@webiny/api-workflows/features/review/ApproveReviewStep/index.js\";\nimport type { WbPageReviewGuardService } from \"../WbPageReviewGuardService/index.js\";\n\nexport interface ApproveWebsiteBuilderPageReviewStepInput {\n reviewId: string;\n stepId: string;\n comment?: string | null;\n}\n\nexport interface IApproveWebsiteBuilderPageReviewStepUseCaseErrors {\n guard: WbPageReviewGuardService.Error;\n approve: ApproveReviewStepUseCase.Error;\n}\n\ntype UseCaseError =\n IApproveWebsiteBuilderPageReviewStepUseCaseErrors[keyof IApproveWebsiteBuilderPageReviewStepUseCaseErrors];\n\nexport interface IApproveWebsiteBuilderPageReviewStepUseCase {\n execute(\n input: ApproveWebsiteBuilderPageReviewStepInput\n ): Promise<Result<ReviewData, UseCaseError>>;\n}\n\n/** Approve the page review step the user owns (spec 5.1): read access here, ownership in the engine. */\nexport const ApproveWebsiteBuilderPageReviewStepUseCase =\n createAbstraction<IApproveWebsiteBuilderPageReviewStepUseCase>(\n \"ApproveWebsiteBuilderPageReviewStepUseCase\"\n );\n\nexport namespace ApproveWebsiteBuilderPageReviewStepUseCase {\n export type Interface = IApproveWebsiteBuilderPageReviewStepUseCase;\n export type Input = ApproveWebsiteBuilderPageReviewStepInput;\n export type Error = UseCaseError;\n export type Return = Promise<Result<ReviewData, UseCaseError>>;\n}\n"],"names":["ApproveWebsiteBuilderPageReviewStepUseCase","createAbstraction"],"mappings":";AA0BO,MAAMA,6CACTC,kBACI"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { ApproveWebsiteBuilderPageReviewStepUseCase } from "./ApproveWebsiteBuilderPageReviewStepUseCase.js";
|
|
3
|
+
const ApproveWebsiteBuilderPageReviewStepFeature = createFeature({
|
|
4
|
+
name: "WebsiteBuilderWorkflows/ApproveWebsiteBuilderPageReviewStep",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(ApproveWebsiteBuilderPageReviewStepUseCase);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export { ApproveWebsiteBuilderPageReviewStepFeature };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/ApproveWebsiteBuilderPageReviewStep/feature.js","sources":["../../../../src/features/wrappers/ApproveWebsiteBuilderPageReviewStep/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { ApproveWebsiteBuilderPageReviewStepUseCase } from \"./ApproveWebsiteBuilderPageReviewStepUseCase.js\";\n\nexport const ApproveWebsiteBuilderPageReviewStepFeature = createFeature({\n name: \"WebsiteBuilderWorkflows/ApproveWebsiteBuilderPageReviewStep\",\n register(container) {\n container.register(ApproveWebsiteBuilderPageReviewStepUseCase);\n }\n});\n"],"names":["ApproveWebsiteBuilderPageReviewStepFeature","createFeature","container","ApproveWebsiteBuilderPageReviewStepUseCase"],"mappings":";;AAGO,MAAMA,6CAA6CC,cAAc;IACpE,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ApproveWebsiteBuilderPageReviewStepUseCase } from "./abstractions.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ApproveWebsiteBuilderPageReviewStepUseCase } from "./abstractions.js";
|
package/features/wrappers/CancelWebsiteBuilderPageReview/CancelWebsiteBuilderPageReviewUseCase.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CancelReviewUseCase } from "@webiny/api-workflows/features/review/CancelReview/index.js";
|
|
2
|
+
import { WbPageReviewGuardService } from "../WbPageReviewGuardService/index.js";
|
|
3
|
+
import { CancelWebsiteBuilderPageReviewUseCase as UseCase } from "./abstractions.js";
|
|
4
|
+
declare class CancelWebsiteBuilderPageReviewUseCaseImpl implements UseCase.Interface {
|
|
5
|
+
private guard;
|
|
6
|
+
private cancelReview;
|
|
7
|
+
constructor(guard: WbPageReviewGuardService.Interface, cancelReview: CancelReviewUseCase.Interface);
|
|
8
|
+
execute(input: UseCase.Input): UseCase.Return;
|
|
9
|
+
}
|
|
10
|
+
export declare const CancelWebsiteBuilderPageReviewUseCase: typeof CancelWebsiteBuilderPageReviewUseCaseImpl & {
|
|
11
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ICancelWebsiteBuilderPageReviewUseCase>;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
package/features/wrappers/CancelWebsiteBuilderPageReview/CancelWebsiteBuilderPageReviewUseCase.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { CancelReviewUseCase } from "@webiny/api-workflows/features/review/CancelReview/index.js";
|
|
3
|
+
import { canCancelByPermission } from "@webiny/api-workflows/domain/review/canCancelByPermission.js";
|
|
4
|
+
import { WorkflowsNotAuthorizedError } from "@webiny/api-workflows/domain/permissions/errors.js";
|
|
5
|
+
import { WbPageReviewGuardService } from "../WbPageReviewGuardService/index.js";
|
|
6
|
+
import { CancelWebsiteBuilderPageReviewUseCase } from "./abstractions.js";
|
|
7
|
+
class CancelWebsiteBuilderPageReviewUseCaseImpl {
|
|
8
|
+
constructor(guard, cancelReview){
|
|
9
|
+
this.guard = guard;
|
|
10
|
+
this.cancelReview = cancelReview;
|
|
11
|
+
}
|
|
12
|
+
async execute(input) {
|
|
13
|
+
const authorized = await this.guard.authorize({
|
|
14
|
+
reviewId: input.reviewId,
|
|
15
|
+
action: "cancel this review"
|
|
16
|
+
});
|
|
17
|
+
if (authorized.isFail()) return Result.fail(authorized.error);
|
|
18
|
+
const { review, viewer } = authorized.value;
|
|
19
|
+
if (!canCancelByPermission(review, viewer)) return Result.fail(new WorkflowsNotAuthorizedError({
|
|
20
|
+
action: "cancel a review requested by someone else"
|
|
21
|
+
}));
|
|
22
|
+
return this.cancelReview.execute({
|
|
23
|
+
reviewId: input.reviewId,
|
|
24
|
+
actor: viewer.actor
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const CancelWebsiteBuilderPageReviewUseCase_CancelWebsiteBuilderPageReviewUseCase = CancelWebsiteBuilderPageReviewUseCase.createImplementation({
|
|
29
|
+
implementation: CancelWebsiteBuilderPageReviewUseCaseImpl,
|
|
30
|
+
dependencies: [
|
|
31
|
+
WbPageReviewGuardService,
|
|
32
|
+
CancelReviewUseCase
|
|
33
|
+
]
|
|
34
|
+
});
|
|
35
|
+
export { CancelWebsiteBuilderPageReviewUseCase_CancelWebsiteBuilderPageReviewUseCase as CancelWebsiteBuilderPageReviewUseCase };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=CancelWebsiteBuilderPageReviewUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/CancelWebsiteBuilderPageReview/CancelWebsiteBuilderPageReviewUseCase.js","sources":["../../../../src/features/wrappers/CancelWebsiteBuilderPageReview/CancelWebsiteBuilderPageReviewUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { CancelReviewUseCase } from \"@webiny/api-workflows/features/review/CancelReview/index.js\";\nimport { canCancelByPermission } from \"@webiny/api-workflows/domain/review/canCancelByPermission.js\";\nimport { WorkflowsNotAuthorizedError } from \"@webiny/api-workflows/domain/permissions/errors.js\";\nimport { WbPageReviewGuardService } from \"../WbPageReviewGuardService/index.js\";\nimport { CancelWebsiteBuilderPageReviewUseCase as UseCase } from \"./abstractions.js\";\n\nclass CancelWebsiteBuilderPageReviewUseCaseImpl implements UseCase.Interface {\n public constructor(\n private guard: WbPageReviewGuardService.Interface,\n private cancelReview: CancelReviewUseCase.Interface\n ) {}\n\n public async execute(input: UseCase.Input): UseCase.Return {\n const authorized = await this.guard.authorize({\n reviewId: input.reviewId,\n action: \"cancel this review\"\n });\n if (authorized.isFail()) {\n return Result.fail(authorized.error);\n }\n\n const { review, viewer } = authorized.value;\n // Permission only: the review's state is the engine's to report (1b R41).\n if (!canCancelByPermission(review, viewer)) {\n return Result.fail(\n new WorkflowsNotAuthorizedError({\n action: \"cancel a review requested by someone else\"\n })\n );\n }\n\n return this.cancelReview.execute({ reviewId: input.reviewId, actor: viewer.actor });\n }\n}\n\nexport const CancelWebsiteBuilderPageReviewUseCase = UseCase.createImplementation({\n implementation: CancelWebsiteBuilderPageReviewUseCaseImpl,\n dependencies: [WbPageReviewGuardService, CancelReviewUseCase]\n});\n"],"names":["CancelWebsiteBuilderPageReviewUseCaseImpl","guard","cancelReview","input","authorized","Result","review","viewer","canCancelByPermission","WorkflowsNotAuthorizedError","CancelWebsiteBuilderPageReviewUseCase","UseCase","WbPageReviewGuardService","CancelReviewUseCase"],"mappings":";;;;;;AAOA,MAAMA;IACF,YACYC,KAAyC,EACzCC,YAA2C,CACrD;aAFUD,KAAK,GAALA;aACAC,YAAY,GAAZA;IACT;IAEH,MAAa,QAAQC,KAAoB,EAAkB;QACvD,MAAMC,aAAa,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YAC1C,UAAUD,MAAM,QAAQ;YACxB,QAAQ;QACZ;QACA,IAAIC,WAAW,MAAM,IACjB,OAAOC,OAAO,IAAI,CAACD,WAAW,KAAK;QAGvC,MAAM,EAAEE,MAAM,EAAEC,MAAM,EAAE,GAAGH,WAAW,KAAK;QAE3C,IAAI,CAACI,sBAAsBF,QAAQC,SAC/B,OAAOF,OAAO,IAAI,CACd,IAAII,4BAA4B;YAC5B,QAAQ;QACZ;QAIR,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAAE,UAAUN,MAAM,QAAQ;YAAE,OAAOI,OAAO,KAAK;QAAC;IACrF;AACJ;AAEO,MAAMG,8EAAwCC,sCAAAA,oBAA4B,CAAC;IAC9E,gBAAgBX;IAChB,cAAc;QAACY;QAA0BC;KAAoB;AACjE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Result } from "@webiny/feature/api";
|
|
2
|
+
import type { ReviewData } from "@webiny/api-workflows/domain/review/types.js";
|
|
3
|
+
import type { WorkflowsNotAuthorizedError } from "@webiny/api-workflows/domain/permissions/errors.js";
|
|
4
|
+
import type { CancelReviewUseCase } from "@webiny/api-workflows/features/review/CancelReview/index.js";
|
|
5
|
+
import type { WbPageReviewGuardService } from "../WbPageReviewGuardService/index.js";
|
|
6
|
+
export interface CancelWebsiteBuilderPageReviewInput {
|
|
7
|
+
reviewId: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ICancelWebsiteBuilderPageReviewUseCaseErrors {
|
|
10
|
+
guard: WbPageReviewGuardService.Error;
|
|
11
|
+
notAuthorized: WorkflowsNotAuthorizedError;
|
|
12
|
+
cancel: CancelReviewUseCase.Error;
|
|
13
|
+
}
|
|
14
|
+
type UseCaseError = ICancelWebsiteBuilderPageReviewUseCaseErrors[keyof ICancelWebsiteBuilderPageReviewUseCaseErrors];
|
|
15
|
+
export interface ICancelWebsiteBuilderPageReviewUseCase {
|
|
16
|
+
execute(input: CancelWebsiteBuilderPageReviewInput): Promise<Result<ReviewData, UseCaseError>>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Cancel a page review (spec 5.1, D25, D133 point 7): read access to the target and the requester
|
|
20
|
+
* or `workflows.reassign` (`canCancelByPermission`, 1b R41). Finished reviews fail in the engine
|
|
21
|
+
* with `Workflows/Review/InvalidState`.
|
|
22
|
+
*/
|
|
23
|
+
export declare const CancelWebsiteBuilderPageReviewUseCase: import("@webiny/di").Abstraction<ICancelWebsiteBuilderPageReviewUseCase>;
|
|
24
|
+
export declare namespace CancelWebsiteBuilderPageReviewUseCase {
|
|
25
|
+
type Interface = ICancelWebsiteBuilderPageReviewUseCase;
|
|
26
|
+
type Input = CancelWebsiteBuilderPageReviewInput;
|
|
27
|
+
type Error = UseCaseError;
|
|
28
|
+
type Return = Promise<Result<ReviewData, UseCaseError>>;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/CancelWebsiteBuilderPageReview/abstractions.js","sources":["../../../../src/features/wrappers/CancelWebsiteBuilderPageReview/abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { ReviewData } from \"@webiny/api-workflows/domain/review/types.js\";\nimport type { WorkflowsNotAuthorizedError } from \"@webiny/api-workflows/domain/permissions/errors.js\";\nimport type { CancelReviewUseCase } from \"@webiny/api-workflows/features/review/CancelReview/index.js\";\nimport type { WbPageReviewGuardService } from \"../WbPageReviewGuardService/index.js\";\n\nexport interface CancelWebsiteBuilderPageReviewInput {\n reviewId: string;\n}\n\nexport interface ICancelWebsiteBuilderPageReviewUseCaseErrors {\n guard: WbPageReviewGuardService.Error;\n notAuthorized: WorkflowsNotAuthorizedError;\n cancel: CancelReviewUseCase.Error;\n}\n\ntype UseCaseError =\n ICancelWebsiteBuilderPageReviewUseCaseErrors[keyof ICancelWebsiteBuilderPageReviewUseCaseErrors];\n\nexport interface ICancelWebsiteBuilderPageReviewUseCase {\n execute(input: CancelWebsiteBuilderPageReviewInput): Promise<Result<ReviewData, UseCaseError>>;\n}\n\n/**\n * Cancel a page review (spec 5.1, D25, D133 point 7): read access to the target and the requester\n * or `workflows.reassign` (`canCancelByPermission`, 1b R41). Finished reviews fail in the engine\n * with `Workflows/Review/InvalidState`.\n */\nexport const CancelWebsiteBuilderPageReviewUseCase =\n createAbstraction<ICancelWebsiteBuilderPageReviewUseCase>(\n \"CancelWebsiteBuilderPageReviewUseCase\"\n );\n\nexport namespace CancelWebsiteBuilderPageReviewUseCase {\n export type Interface = ICancelWebsiteBuilderPageReviewUseCase;\n export type Input = CancelWebsiteBuilderPageReviewInput;\n export type Error = UseCaseError;\n export type Return = Promise<Result<ReviewData, UseCaseError>>;\n}\n"],"names":["CancelWebsiteBuilderPageReviewUseCase","createAbstraction"],"mappings":";AA4BO,MAAMA,wCACTC,kBACI"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { CancelWebsiteBuilderPageReviewUseCase } from "./CancelWebsiteBuilderPageReviewUseCase.js";
|
|
3
|
+
const CancelWebsiteBuilderPageReviewFeature = createFeature({
|
|
4
|
+
name: "WebsiteBuilderWorkflows/CancelWebsiteBuilderPageReview",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(CancelWebsiteBuilderPageReviewUseCase);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export { CancelWebsiteBuilderPageReviewFeature };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/CancelWebsiteBuilderPageReview/feature.js","sources":["../../../../src/features/wrappers/CancelWebsiteBuilderPageReview/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CancelWebsiteBuilderPageReviewUseCase } from \"./CancelWebsiteBuilderPageReviewUseCase.js\";\n\nexport const CancelWebsiteBuilderPageReviewFeature = createFeature({\n name: \"WebsiteBuilderWorkflows/CancelWebsiteBuilderPageReview\",\n register(container) {\n container.register(CancelWebsiteBuilderPageReviewUseCase);\n }\n});\n"],"names":["CancelWebsiteBuilderPageReviewFeature","createFeature","container","CancelWebsiteBuilderPageReviewUseCase"],"mappings":";;AAGO,MAAMA,wCAAwCC,cAAc;IAC/D,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { CancelWebsiteBuilderPageReviewUseCase } from "./abstractions.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { CancelWebsiteBuilderPageReviewUseCase } from "./abstractions.js";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { CurrentReviewViewer } from "@webiny/api-workflows/features/identity/CurrentReviewViewer/index.js";
|
|
2
|
+
import { ListTargetReviewsUseCase } from "@webiny/api-workflows/features/review/ListTargetReviews/index.js";
|
|
3
|
+
import { CancelTargetReviewsUseCase } from "@webiny/api-workflows/features/review/CancelTargetReviews/index.js";
|
|
4
|
+
import { WbPageTargetReader } from "../../../features/target/WbPageTargetReader/index.js";
|
|
5
|
+
import { WbPageAccess } from "../../../features/target/WbPageAccess/index.js";
|
|
6
|
+
import { CancelWebsiteBuilderPageReviewsForDeleteUseCase as UseCase } from "./abstractions.js";
|
|
7
|
+
declare class CancelWebsiteBuilderPageReviewsForDeleteUseCaseImpl implements UseCase.Interface {
|
|
8
|
+
private viewer;
|
|
9
|
+
private listTargetReviews;
|
|
10
|
+
private targets;
|
|
11
|
+
private access;
|
|
12
|
+
private cancelTargetReviews;
|
|
13
|
+
constructor(viewer: CurrentReviewViewer.Interface, listTargetReviews: ListTargetReviewsUseCase.Interface, targets: WbPageTargetReader.Interface, access: WbPageAccess.Interface, cancelTargetReviews: CancelTargetReviewsUseCase.Interface);
|
|
14
|
+
execute(input: UseCase.Input): UseCase.Return;
|
|
15
|
+
}
|
|
16
|
+
export declare const CancelWebsiteBuilderPageReviewsForDeleteUseCase: typeof CancelWebsiteBuilderPageReviewsForDeleteUseCaseImpl & {
|
|
17
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ICancelWebsiteBuilderPageReviewsForDeleteUseCase>;
|
|
18
|
+
};
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { CurrentReviewViewer } from "@webiny/api-workflows/features/identity/CurrentReviewViewer/index.js";
|
|
3
|
+
import { ListTargetReviewsUseCase } from "@webiny/api-workflows/features/review/ListTargetReviews/index.js";
|
|
4
|
+
import { CancelTargetReviewsUseCase } from "@webiny/api-workflows/features/review/CancelTargetReviews/index.js";
|
|
5
|
+
import { WorkflowsNotAuthorizedError } from "@webiny/api-workflows/domain/permissions/errors.js";
|
|
6
|
+
import { ReviewPersistenceError, ReviewTargetNotFoundError } from "@webiny/api-workflows/domain/review/errors.js";
|
|
7
|
+
import { getDeleteCancelReason } from "@webiny/api-workflows/domain/review/getDeleteCancelReason.js";
|
|
8
|
+
import { WbPageTargetReader } from "../../target/WbPageTargetReader/index.js";
|
|
9
|
+
import { WbPageAccess } from "../../target/WbPageAccess/index.js";
|
|
10
|
+
import { WB_PAGE_NAMESPACE } from "../../../constants.js";
|
|
11
|
+
import { CancelWebsiteBuilderPageReviewsForDeleteUseCase } from "./abstractions.js";
|
|
12
|
+
class CancelWebsiteBuilderPageReviewsForDeleteUseCaseImpl {
|
|
13
|
+
constructor(viewer, listTargetReviews, targets, access, cancelTargetReviews){
|
|
14
|
+
this.viewer = viewer;
|
|
15
|
+
this.listTargetReviews = listTargetReviews;
|
|
16
|
+
this.targets = targets;
|
|
17
|
+
this.access = access;
|
|
18
|
+
this.cancelTargetReviews = cancelTargetReviews;
|
|
19
|
+
}
|
|
20
|
+
async execute(input) {
|
|
21
|
+
const actor = this.viewer.getActor();
|
|
22
|
+
if (actor.isFail()) return Result.fail(actor.error);
|
|
23
|
+
let canDeleteAnyPage;
|
|
24
|
+
try {
|
|
25
|
+
canDeleteAnyPage = await this.access.canDeleteAnyPage();
|
|
26
|
+
} catch (error) {
|
|
27
|
+
return Result.fail(new ReviewPersistenceError(error instanceof Error ? error : new Error(String(error))));
|
|
28
|
+
}
|
|
29
|
+
if (!canDeleteAnyPage) return Result.fail(new WorkflowsNotAuthorizedError({
|
|
30
|
+
action: "cancel the review to delete this content"
|
|
31
|
+
}));
|
|
32
|
+
const reviews = await this.listTargetReviews.execute({
|
|
33
|
+
model: WB_PAGE_NAMESPACE,
|
|
34
|
+
targetId: input.targetId,
|
|
35
|
+
targetRevisionId: input.targetRevisionId ?? void 0,
|
|
36
|
+
state: "inProgress"
|
|
37
|
+
});
|
|
38
|
+
if (reviews.isFail()) return Result.fail(reviews.error);
|
|
39
|
+
const inProgress = reviews.value;
|
|
40
|
+
if (0 === inProgress.length) return Result.ok([]);
|
|
41
|
+
const targetRevisionId = inProgress[0].targetRevisionId;
|
|
42
|
+
let target;
|
|
43
|
+
try {
|
|
44
|
+
target = await this.targets.read({
|
|
45
|
+
model: WB_PAGE_NAMESPACE,
|
|
46
|
+
targetRevisionId
|
|
47
|
+
});
|
|
48
|
+
} catch (error) {
|
|
49
|
+
return Result.fail(new ReviewPersistenceError(error instanceof Error ? error : new Error(String(error))));
|
|
50
|
+
}
|
|
51
|
+
if (!target || target.page.entryId !== input.targetId) return Result.fail(new ReviewTargetNotFoundError({
|
|
52
|
+
model: WB_PAGE_NAMESPACE,
|
|
53
|
+
targetId: input.targetId
|
|
54
|
+
}));
|
|
55
|
+
let canDelete;
|
|
56
|
+
try {
|
|
57
|
+
canDelete = await this.access.canDelete(target);
|
|
58
|
+
} catch (error) {
|
|
59
|
+
return Result.fail(new ReviewPersistenceError(error instanceof Error ? error : new Error(String(error))));
|
|
60
|
+
}
|
|
61
|
+
if (!canDelete) return Result.ok([]);
|
|
62
|
+
return this.cancelTargetReviews.execute({
|
|
63
|
+
reviews: inProgress,
|
|
64
|
+
actor: actor.value,
|
|
65
|
+
reason: getDeleteCancelReason(input.action)
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const CancelWebsiteBuilderPageReviewsForDeleteUseCase_CancelWebsiteBuilderPageReviewsForDeleteUseCase = CancelWebsiteBuilderPageReviewsForDeleteUseCase.createImplementation({
|
|
70
|
+
implementation: CancelWebsiteBuilderPageReviewsForDeleteUseCaseImpl,
|
|
71
|
+
dependencies: [
|
|
72
|
+
CurrentReviewViewer,
|
|
73
|
+
ListTargetReviewsUseCase,
|
|
74
|
+
WbPageTargetReader,
|
|
75
|
+
WbPageAccess,
|
|
76
|
+
CancelTargetReviewsUseCase
|
|
77
|
+
]
|
|
78
|
+
});
|
|
79
|
+
export { CancelWebsiteBuilderPageReviewsForDeleteUseCase_CancelWebsiteBuilderPageReviewsForDeleteUseCase as CancelWebsiteBuilderPageReviewsForDeleteUseCase };
|
|
80
|
+
|
|
81
|
+
//# sourceMappingURL=CancelWebsiteBuilderPageReviewsForDeleteUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/CancelWebsiteBuilderPageReviewsForDeleteUseCase.js","sources":["../../../../src/features/wrappers/CancelWebsiteBuilderPageReviewsForDelete/CancelWebsiteBuilderPageReviewsForDeleteUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { CurrentReviewViewer } from \"@webiny/api-workflows/features/identity/CurrentReviewViewer/index.js\";\nimport { ListTargetReviewsUseCase } from \"@webiny/api-workflows/features/review/ListTargetReviews/index.js\";\nimport { CancelTargetReviewsUseCase } from \"@webiny/api-workflows/features/review/CancelTargetReviews/index.js\";\nimport { WorkflowsNotAuthorizedError } from \"@webiny/api-workflows/domain/permissions/errors.js\";\nimport {\n ReviewPersistenceError,\n ReviewTargetNotFoundError\n} from \"@webiny/api-workflows/domain/review/errors.js\";\nimport { getDeleteCancelReason } from \"@webiny/api-workflows/domain/review/getDeleteCancelReason.js\";\nimport { WbPageTargetReader } from \"~/features/target/WbPageTargetReader/index.js\";\nimport { WbPageAccess } from \"~/features/target/WbPageAccess/index.js\";\nimport { WB_PAGE_NAMESPACE } from \"~/constants.js\";\nimport { CancelWebsiteBuilderPageReviewsForDeleteUseCase as UseCase } from \"./abstractions.js\";\n\nclass CancelWebsiteBuilderPageReviewsForDeleteUseCaseImpl implements UseCase.Interface {\n public constructor(\n private viewer: CurrentReviewViewer.Interface,\n private listTargetReviews: ListTargetReviewsUseCase.Interface,\n private targets: WbPageTargetReader.Interface,\n private access: WbPageAccess.Interface,\n private cancelTargetReviews: CancelTargetReviewsUseCase.Interface\n ) {}\n\n public async execute(input: UseCase.Input): UseCase.Return {\n const actor = this.viewer.getActor();\n if (actor.isFail()) {\n return Result.fail(actor.error);\n }\n\n // Entity-level check first: the answer must not reveal whether a page has a review in\n // progress or exists at all (R86, same as R75).\n let canDeleteAnyPage: boolean;\n try {\n canDeleteAnyPage = await this.access.canDeleteAnyPage();\n } catch (error) {\n return Result.fail(\n new ReviewPersistenceError(\n error instanceof Error ? error : new Error(String(error))\n )\n );\n }\n if (!canDeleteAnyPage) {\n return Result.fail(\n new WorkflowsNotAuthorizedError({\n action: \"cancel the review to delete this content\"\n })\n );\n }\n\n const reviews = await this.listTargetReviews.execute({\n model: WB_PAGE_NAMESPACE,\n targetId: input.targetId,\n targetRevisionId: input.targetRevisionId ?? undefined,\n state: \"inProgress\"\n });\n if (reviews.isFail()) {\n return Result.fail(reviews.error);\n }\n const inProgress = reviews.value;\n if (inProgress.length === 0) {\n return Result.ok([]);\n }\n\n // Page permissions (own) and the folder are page-level: one revision answers for all.\n const targetRevisionId = inProgress[0].targetRevisionId;\n let target: WbPageTargetReader.Target | null;\n try {\n target = await this.targets.read({ model: WB_PAGE_NAMESPACE, targetRevisionId });\n } catch (error) {\n return Result.fail(\n new ReviewPersistenceError(\n error instanceof Error ? error : new Error(String(error))\n )\n );\n }\n if (!target || target.page.entryId !== input.targetId) {\n return Result.fail(\n new ReviewTargetNotFoundError({\n model: WB_PAGE_NAMESPACE,\n targetId: input.targetId\n })\n );\n }\n let canDelete: boolean;\n try {\n canDelete = await this.access.canDelete(target);\n } catch (error) {\n return Result.fail(\n new ReviewPersistenceError(\n error instanceof Error ? error : new Error(String(error))\n )\n );\n }\n // A user who may delete some pages but not this one gets the answer of a page without a\n // review, so the answer never shows a review (R86). Nothing is cancelled: the delete that\n // follows runs the Website Builder checks and refuses this user on its own.\n if (!canDelete) {\n return Result.ok([]);\n }\n\n // The reviews listed above; the engine does not list them again.\n return this.cancelTargetReviews.execute({\n reviews: inProgress,\n actor: actor.value,\n reason: getDeleteCancelReason(input.action)\n });\n }\n}\n\nexport const CancelWebsiteBuilderPageReviewsForDeleteUseCase = UseCase.createImplementation({\n implementation: CancelWebsiteBuilderPageReviewsForDeleteUseCaseImpl,\n dependencies: [\n CurrentReviewViewer,\n ListTargetReviewsUseCase,\n WbPageTargetReader,\n WbPageAccess,\n CancelTargetReviewsUseCase\n ]\n});\n"],"names":["CancelWebsiteBuilderPageReviewsForDeleteUseCaseImpl","viewer","listTargetReviews","targets","access","cancelTargetReviews","input","actor","Result","canDeleteAnyPage","error","ReviewPersistenceError","Error","String","WorkflowsNotAuthorizedError","reviews","WB_PAGE_NAMESPACE","undefined","inProgress","targetRevisionId","target","ReviewTargetNotFoundError","canDelete","getDeleteCancelReason","CancelWebsiteBuilderPageReviewsForDeleteUseCase","UseCase","CurrentReviewViewer","ListTargetReviewsUseCase","WbPageTargetReader","WbPageAccess","CancelTargetReviewsUseCase"],"mappings":";;;;;;;;;;;AAeA,MAAMA;IACF,YACYC,MAAqC,EACrCC,iBAAqD,EACrDC,OAAqC,EACrCC,MAA8B,EAC9BC,mBAAyD,CACnE;aALUJ,MAAM,GAANA;aACAC,iBAAiB,GAAjBA;aACAC,OAAO,GAAPA;aACAC,MAAM,GAANA;aACAC,mBAAmB,GAAnBA;IACT;IAEH,MAAa,QAAQC,KAAoB,EAAkB;QACvD,MAAMC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ;QAClC,IAAIA,MAAM,MAAM,IACZ,OAAOC,OAAO,IAAI,CAACD,MAAM,KAAK;QAKlC,IAAIE;QACJ,IAAI;YACAA,mBAAmB,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB;QACzD,EAAE,OAAOC,OAAO;YACZ,OAAOF,OAAO,IAAI,CACd,IAAIG,uBACAD,iBAAiBE,QAAQF,QAAQ,IAAIE,MAAMC,OAAOH;QAG9D;QACA,IAAI,CAACD,kBACD,OAAOD,OAAO,IAAI,CACd,IAAIM,4BAA4B;YAC5B,QAAQ;QACZ;QAIR,MAAMC,UAAU,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YACjD,OAAOC;YACP,UAAUV,MAAM,QAAQ;YACxB,kBAAkBA,MAAM,gBAAgB,IAAIW;YAC5C,OAAO;QACX;QACA,IAAIF,QAAQ,MAAM,IACd,OAAOP,OAAO,IAAI,CAACO,QAAQ,KAAK;QAEpC,MAAMG,aAAaH,QAAQ,KAAK;QAChC,IAAIG,AAAsB,MAAtBA,WAAW,MAAM,EACjB,OAAOV,OAAO,EAAE,CAAC,EAAE;QAIvB,MAAMW,mBAAmBD,UAAU,CAAC,EAAE,CAAC,gBAAgB;QACvD,IAAIE;QACJ,IAAI;YACAA,SAAS,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,OAAOJ;gBAAmBG;YAAiB;QAClF,EAAE,OAAOT,OAAO;YACZ,OAAOF,OAAO,IAAI,CACd,IAAIG,uBACAD,iBAAiBE,QAAQF,QAAQ,IAAIE,MAAMC,OAAOH;QAG9D;QACA,IAAI,CAACU,UAAUA,OAAO,IAAI,CAAC,OAAO,KAAKd,MAAM,QAAQ,EACjD,OAAOE,OAAO,IAAI,CACd,IAAIa,0BAA0B;YAC1B,OAAOL;YACP,UAAUV,MAAM,QAAQ;QAC5B;QAGR,IAAIgB;QACJ,IAAI;YACAA,YAAY,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAACF;QAC5C,EAAE,OAAOV,OAAO;YACZ,OAAOF,OAAO,IAAI,CACd,IAAIG,uBACAD,iBAAiBE,QAAQF,QAAQ,IAAIE,MAAMC,OAAOH;QAG9D;QAIA,IAAI,CAACY,WACD,OAAOd,OAAO,EAAE,CAAC,EAAE;QAIvB,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;YACpC,SAASU;YACT,OAAOX,MAAM,KAAK;YAClB,QAAQgB,sBAAsBjB,MAAM,MAAM;QAC9C;IACJ;AACJ;AAEO,MAAMkB,kGAAkDC,gDAAAA,oBAA4B,CAAC;IACxF,gBAAgBzB;IAChB,cAAc;QACV0B;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
|