@webiny/app-headless-cms-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/CmsEntriesList/CmsReviewMoveEntryAction.d.ts +2 -0
- package/Components/CmsEntriesList/CmsReviewMoveEntryAction.js +43 -0
- package/Components/CmsEntriesList/CmsReviewMoveEntryAction.js.map +1 -0
- package/Components/CmsEntriesList/CmsReviewMoveEntryAction.test.d.ts +1 -0
- package/Components/CmsEntriesList/CmsReviewMoveEntryAction.test.js +118 -0
- package/Components/CmsEntriesList/CmsReviewMoveEntryAction.test.js.map +1 -0
- package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.d.ts +2 -0
- package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.js +22 -0
- package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.js.map +1 -0
- package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.test.d.ts +1 -0
- package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.test.js +98 -0
- package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.test.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewBar.d.ts +2 -0
- package/Components/ContentEntryForm/CmsEntryReviewBar.js +32 -0
- package/Components/ContentEntryForm/CmsEntryReviewBar.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewBar.test.d.ts +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewBar.test.js +128 -0
- package/Components/ContentEntryForm/CmsEntryReviewBar.test.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.d.ts +2 -0
- package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.js +46 -0
- package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.test.d.ts +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.test.js +222 -0
- package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.test.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewFormLock.d.ts +2 -0
- package/Components/ContentEntryForm/CmsEntryReviewFormLock.js +32 -0
- package/Components/ContentEntryForm/CmsEntryReviewFormLock.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewFormLock.test.d.ts +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewFormLock.test.js +94 -0
- package/Components/ContentEntryForm/CmsEntryReviewFormLock.test.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewNewRevision.d.ts +2 -0
- package/Components/ContentEntryForm/CmsEntryReviewNewRevision.js +56 -0
- package/Components/ContentEntryForm/CmsEntryReviewNewRevision.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewNewRevision.test.d.ts +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewNewRevision.test.js +186 -0
- package/Components/ContentEntryForm/CmsEntryReviewNewRevision.test.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.d.ts +2 -0
- package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.js +26 -0
- package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.test.d.ts +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.test.js +78 -0
- package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.test.js.map +1 -0
- package/Components/ContentEntryForm/getModelFieldLabels.d.ts +3 -0
- package/Components/ContentEntryForm/getModelFieldLabels.js +8 -0
- package/Components/ContentEntryForm/getModelFieldLabels.js.map +1 -0
- package/Components/ContentEntryForm/index.d.ts +5 -0
- package/Components/ContentEntryForm/index.js +5 -0
- package/Components/ContentReviews/CmsContentReviews.d.ts +2 -0
- package/Components/ContentReviews/CmsContentReviews.js +11 -0
- package/Components/ContentReviews/CmsContentReviews.js.map +1 -0
- package/Components/ContentReviews/CmsContentReviews.test.d.ts +1 -0
- package/Components/ContentReviews/CmsContentReviews.test.js +214 -0
- package/Components/ContentReviews/CmsContentReviews.test.js.map +1 -0
- package/Components/ContentReviews/CmsContentReviewsMount.d.ts +4 -0
- package/Components/ContentReviews/CmsContentReviewsMount.js +44 -0
- package/Components/ContentReviews/CmsContentReviewsMount.js.map +1 -0
- package/Components/ContentReviews/CmsContentReviewsSidebarItem.d.ts +2 -0
- package/Components/ContentReviews/CmsContentReviewsSidebarItem.js +20 -0
- package/Components/ContentReviews/CmsContentReviewsSidebarItem.js.map +1 -0
- package/Components/ContentReviews/CmsContentReviewsSidebarItem.test.d.ts +1 -0
- package/Components/ContentReviews/CmsContentReviewsSidebarItem.test.js +83 -0
- package/Components/ContentReviews/CmsContentReviewsSidebarItem.test.js.map +1 -0
- package/Components/ModelDelete/ModelBoundToWorkflowErrorData.d.ts +8 -0
- package/Components/ModelDelete/ModelBoundToWorkflowErrorData.js +0 -0
- package/Components/ModelDelete/ModelDeleteWorkflowCopy.d.ts +10 -0
- package/Components/ModelDelete/ModelDeleteWorkflowCopy.js +0 -0
- package/Components/ModelDelete/ModelDeleteWorkflowError.d.ts +2 -0
- package/Components/ModelDelete/ModelDeleteWorkflowError.js +34 -0
- package/Components/ModelDelete/ModelDeleteWorkflowError.js.map +1 -0
- package/Components/ModelDelete/ModelDeleteWorkflowError.test.d.ts +1 -0
- package/Components/ModelDelete/ModelDeleteWorkflowError.test.js +73 -0
- package/Components/ModelDelete/ModelDeleteWorkflowError.test.js.map +1 -0
- package/Components/ModelDelete/getModelDeleteWorkflowCopy.d.ts +3 -0
- package/Components/ModelDelete/getModelDeleteWorkflowCopy.js +17 -0
- package/Components/ModelDelete/getModelDeleteWorkflowCopy.js.map +1 -0
- package/Components/ModelDelete/getModelDeleteWorkflowCopy.test.d.ts +1 -0
- package/Components/ModelDelete/getModelDeleteWorkflowCopy.test.js +28 -0
- package/Components/ModelDelete/getModelDeleteWorkflowCopy.test.js.map +1 -0
- package/Components/ignoreAction.d.ts +1 -0
- package/Components/ignoreAction.js +4 -0
- package/Components/ignoreAction.js.map +1 -0
- package/LICENSE +21 -0
- package/README.md +11 -0
- package/Routes/CmsWorkflowEditor.d.ts +2 -0
- package/Routes/CmsWorkflowEditor.js +23 -0
- package/Routes/CmsWorkflowEditor.js.map +1 -0
- package/Routes/CmsWorkflowEditor.test.d.ts +1 -0
- package/Routes/CmsWorkflowEditor.test.js +141 -0
- package/Routes/CmsWorkflowEditor.test.js.map +1 -0
- package/Routes/index.d.ts +1 -0
- package/Routes/index.js +1 -0
- package/features/cache/CmsReviewCacheSyncHandler.d.ts +8 -0
- package/features/cache/CmsReviewCacheSyncHandler.js +14 -0
- package/features/cache/CmsReviewCacheSyncHandler.js.map +1 -0
- package/features/cache/CmsReviewCacheWriter.d.ts +14 -0
- package/features/cache/CmsReviewCacheWriter.js +39 -0
- package/features/cache/CmsReviewCacheWriter.js.map +1 -0
- package/features/cache/CmsReviewCacheWriter.test.d.ts +1 -0
- package/features/cache/CmsReviewCacheWriter.test.js +207 -0
- package/features/cache/CmsReviewCacheWriter.test.js.map +1 -0
- package/features/cache/CmsReviewEntriesCacheProviderDecorator.d.ts +12 -0
- package/features/cache/CmsReviewEntriesCacheProviderDecorator.js +17 -0
- package/features/cache/CmsReviewEntriesCacheProviderDecorator.js.map +1 -0
- package/features/cache/CmsReviewEntriesCacheProviderDecorator.test.d.ts +1 -0
- package/features/cache/CmsReviewEntriesCacheProviderDecorator.test.js +129 -0
- package/features/cache/CmsReviewEntriesCacheProviderDecorator.test.js.map +1 -0
- package/features/cache/ReviewPreservingEntriesCache.d.ts +18 -0
- package/features/cache/ReviewPreservingEntriesCache.js +54 -0
- package/features/cache/ReviewPreservingEntriesCache.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/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.d.ts +26 -0
- package/features/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.js +104 -0
- package/features/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.js.map +1 -0
- package/features/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.test.d.ts +1 -0
- package/features/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.test.js +589 -0
- package/features/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.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 +272 -0
- package/features/editorGateway/feature.test.js.map +1 -0
- package/features/editorGateway/graphql/cmsEntryFolderExists.d.ts +1 -0
- package/features/editorGateway/graphql/cmsEntryFolderExists.js +16 -0
- package/features/editorGateway/graphql/cmsEntryFolderExists.js.map +1 -0
- package/features/editorGateway/graphql/deleteCmsEntryWorkflow.d.ts +1 -0
- package/features/editorGateway/graphql/deleteCmsEntryWorkflow.js +19 -0
- package/features/editorGateway/graphql/deleteCmsEntryWorkflow.js.map +1 -0
- package/features/editorGateway/graphql/getCmsEntryWorkflow.d.ts +1 -0
- package/features/editorGateway/graphql/getCmsEntryWorkflow.js +19 -0
- package/features/editorGateway/graphql/getCmsEntryWorkflow.js.map +1 -0
- package/features/editorGateway/graphql/inspectCmsEntryRouting.d.ts +1 -0
- package/features/editorGateway/graphql/inspectCmsEntryRouting.js +19 -0
- package/features/editorGateway/graphql/inspectCmsEntryRouting.js.map +1 -0
- package/features/editorGateway/graphql/listCmsEntryWorkflowModels.d.ts +1 -0
- package/features/editorGateway/graphql/listCmsEntryWorkflowModels.js +29 -0
- package/features/editorGateway/graphql/listCmsEntryWorkflowModels.js.map +1 -0
- package/features/editorGateway/graphql/storeCmsEntryWorkflow.d.ts +1 -0
- package/features/editorGateway/graphql/storeCmsEntryWorkflow.js +19 -0
- package/features/editorGateway/graphql/storeCmsEntryWorkflow.js.map +1 -0
- package/features/editorMounting/CmsWorkflowEditorAppAdapter.d.ts +25 -0
- package/features/editorMounting/CmsWorkflowEditorAppAdapter.js +51 -0
- package/features/editorMounting/CmsWorkflowEditorAppAdapter.js.map +1 -0
- package/features/editorMounting/CmsWorkflowEditorAppAdapter.test.d.ts +1 -0
- package/features/editorMounting/CmsWorkflowEditorAppAdapter.test.js +185 -0
- package/features/editorMounting/CmsWorkflowEditorAppAdapter.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 +100 -0
- package/features/editorMounting/feature.test.js.map +1 -0
- package/features/editorReview/CmsEntryReview.d.ts +8 -0
- package/features/editorReview/CmsEntryReview.js +14 -0
- package/features/editorReview/CmsEntryReview.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/editorReview/feature.test.d.ts +1 -0
- package/features/editorReview/feature.test.js +46 -0
- package/features/editorReview/feature.test.js.map +1 -0
- package/features/editorReview/useCmsEntryReview.d.ts +2 -0
- package/features/editorReview/useCmsEntryReview.js +8 -0
- package/features/editorReview/useCmsEntryReview.js.map +1 -0
- package/features/feature.d.ts +1 -0
- package/features/feature.js +15 -0
- package/features/feature.js.map +1 -0
- package/features/gateway/CmsReviewChangeMessageHandler.d.ts +8 -0
- package/features/gateway/CmsReviewChangeMessageHandler.js +16 -0
- package/features/gateway/CmsReviewChangeMessageHandler.js.map +1 -0
- package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.d.ts +16 -0
- package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.js +39 -0
- package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.js.map +1 -0
- package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.test.d.ts +1 -0
- package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.test.js +83 -0
- package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.test.js.map +1 -0
- package/features/gateway/CmsReviewContentAdapter/abstractions.d.ts +5 -0
- package/features/gateway/CmsReviewContentAdapter/abstractions.js +5 -0
- package/features/gateway/CmsReviewContentAdapter/abstractions.js.map +1 -0
- package/features/gateway/CmsReviewGateway/CmsReviewGateway.d.ts +52 -0
- package/features/gateway/CmsReviewGateway/CmsReviewGateway.js +221 -0
- package/features/gateway/CmsReviewGateway/CmsReviewGateway.js.map +1 -0
- package/features/gateway/CmsReviewGateway/CmsReviewGateway.test.d.ts +1 -0
- package/features/gateway/CmsReviewGateway/CmsReviewGateway.test.js +689 -0
- package/features/gateway/CmsReviewGateway/CmsReviewGateway.test.js.map +1 -0
- package/features/gateway/CmsReviewNotificationHandler.d.ts +8 -0
- package/features/gateway/CmsReviewNotificationHandler.js +16 -0
- package/features/gateway/CmsReviewNotificationHandler.js.map +1 -0
- package/features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.d.ts +8 -0
- package/features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.js +14 -0
- package/features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.js.map +1 -0
- package/features/gateway/CmsReviewRowProvider/abstractions.d.ts +5 -0
- package/features/gateway/CmsReviewRowProvider/abstractions.js +5 -0
- package/features/gateway/CmsReviewRowProvider/abstractions.js.map +1 -0
- package/features/gateway/contentReviewsBindings.test.d.ts +1 -0
- package/features/gateway/contentReviewsBindings.test.js +125 -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 +79 -0
- package/features/gateway/feature.test.js.map +1 -0
- package/features/gateway/graphql/CmsOperationResponse.d.ts +3 -0
- package/features/gateway/graphql/CmsOperationResponse.js +0 -0
- package/features/gateway/graphql/approveCmsEntryReviewStep.d.ts +1 -0
- package/features/gateway/graphql/approveCmsEntryReviewStep.js +18 -0
- package/features/gateway/graphql/approveCmsEntryReviewStep.js.map +1 -0
- package/features/gateway/graphql/cancelCmsEntryReview.d.ts +1 -0
- package/features/gateway/graphql/cancelCmsEntryReview.js +18 -0
- package/features/gateway/graphql/cancelCmsEntryReview.js.map +1 -0
- package/features/gateway/graphql/cancelCmsEntryReviewsForDelete.d.ts +1 -0
- package/features/gateway/graphql/cancelCmsEntryReviewsForDelete.js +28 -0
- package/features/gateway/graphql/cancelCmsEntryReviewsForDelete.js.map +1 -0
- package/features/gateway/graphql/getCmsEntryReview.d.ts +1 -0
- package/features/gateway/graphql/getCmsEntryReview.js +18 -0
- package/features/gateway/graphql/getCmsEntryReview.js.map +1 -0
- package/features/gateway/graphql/getCmsEntryReviewStepRun.d.ts +1 -0
- package/features/gateway/graphql/getCmsEntryReviewStepRun.js +18 -0
- package/features/gateway/graphql/getCmsEntryReviewStepRun.js.map +1 -0
- package/features/gateway/graphql/getCmsEntryTargetReview.d.ts +1 -0
- package/features/gateway/graphql/getCmsEntryTargetReview.js +18 -0
- package/features/gateway/graphql/getCmsEntryTargetReview.js.map +1 -0
- package/features/gateway/graphql/listCmsEntryBlockingReviews.d.ts +1 -0
- package/features/gateway/graphql/listCmsEntryBlockingReviews.js +18 -0
- package/features/gateway/graphql/listCmsEntryBlockingReviews.js.map +1 -0
- package/features/gateway/graphql/listCmsEntryReviewStepCandidates.d.ts +1 -0
- package/features/gateway/graphql/listCmsEntryReviewStepCandidates.js +18 -0
- package/features/gateway/graphql/listCmsEntryReviewStepCandidates.js.map +1 -0
- package/features/gateway/graphql/listCmsEntryReviews.d.ts +1 -0
- package/features/gateway/graphql/listCmsEntryReviews.js +34 -0
- package/features/gateway/graphql/listCmsEntryReviews.js.map +1 -0
- package/features/gateway/graphql/listCmsEntryStepCandidates.d.ts +1 -0
- package/features/gateway/graphql/listCmsEntryStepCandidates.js +28 -0
- package/features/gateway/graphql/listCmsEntryStepCandidates.js.map +1 -0
- package/features/gateway/graphql/listCmsEntryWorkflows.d.ts +1 -0
- package/features/gateway/graphql/listCmsEntryWorkflows.js +18 -0
- package/features/gateway/graphql/listCmsEntryWorkflows.js.map +1 -0
- package/features/gateway/graphql/reassignCmsEntryReviewStep.d.ts +1 -0
- package/features/gateway/graphql/reassignCmsEntryReviewStep.js +18 -0
- package/features/gateway/graphql/reassignCmsEntryReviewStep.js.map +1 -0
- package/features/gateway/graphql/rejectCmsEntryReviewStep.d.ts +1 -0
- package/features/gateway/graphql/rejectCmsEntryReviewStep.js +18 -0
- package/features/gateway/graphql/rejectCmsEntryReviewStep.js.map +1 -0
- package/features/gateway/graphql/requestCmsEntryReview.d.ts +1 -0
- package/features/gateway/graphql/requestCmsEntryReview.js +28 -0
- package/features/gateway/graphql/requestCmsEntryReview.js.map +1 -0
- package/features/gateway/graphql/restartCmsEntryReviewStep.d.ts +1 -0
- package/features/gateway/graphql/restartCmsEntryReviewStep.js +18 -0
- package/features/gateway/graphql/restartCmsEntryReviewStep.js.map +1 -0
- package/features/gateway/graphql/startCmsEntryReviewStep.d.ts +1 -0
- package/features/gateway/graphql/startCmsEntryReviewStep.js +18 -0
- package/features/gateway/graphql/startCmsEntryReviewStep.js.map +1 -0
- package/features/gateway/graphql/takeOverCmsEntryReviewStep.d.ts +1 -0
- package/features/gateway/graphql/takeOverCmsEntryReviewStep.js +22 -0
- package/features/gateway/graphql/takeOverCmsEntryReviewStep.js.map +1 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.d.ts +20 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.js +81 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.js.map +1 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.test.d.ts +1 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.test.js +693 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.test.js.map +1 -0
- package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.d.ts +13 -0
- package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.js +23 -0
- package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.js.map +1 -0
- package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.test.d.ts +1 -0
- package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.test.js +123 -0
- package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.test.js.map +1 -0
- package/features/trash/DeleteEntryUseCaseReviewDecorator.d.ts +13 -0
- package/features/trash/DeleteEntryUseCaseReviewDecorator.js +23 -0
- package/features/trash/DeleteEntryUseCaseReviewDecorator.js.map +1 -0
- package/features/trash/DeleteEntryUseCaseReviewDecorator.test.d.ts +1 -0
- package/features/trash/DeleteEntryUseCaseReviewDecorator.test.js +139 -0
- package/features/trash/DeleteEntryUseCaseReviewDecorator.test.js.map +1 -0
- package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.d.ts +13 -0
- package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.js +23 -0
- package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.js.map +1 -0
- package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.test.d.ts +1 -0
- package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.test.js +122 -0
- package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.test.js.map +1 -0
- package/features/trash/feature.d.ts +1 -0
- package/features/trash/feature.js +17 -0
- package/features/trash/feature.js.map +1 -0
- package/features/trash/feature.test.d.ts +1 -0
- package/features/trash/feature.test.js +213 -0
- package/features/trash/feature.test.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.editor.test.d.ts +1 -0
- package/index.editor.test.js +149 -0
- package/index.editor.test.js.map +1 -0
- package/index.js +41 -0
- package/index.js.map +1 -0
- package/index.lists.test.d.ts +1 -0
- package/index.lists.test.js +172 -0
- package/index.lists.test.js.map +1 -0
- package/index.mount.test.d.ts +1 -0
- package/index.mount.test.js +49 -0
- package/index.mount.test.js.map +1 -0
- package/index.test.d.ts +1 -0
- package/index.test.js +414 -0
- package/index.test.js.map +1 -0
- package/package.json +54 -0
- package/presentation/CmsEntryContentReloader.d.ts +8 -0
- package/presentation/CmsEntryContentReloader.js +20 -0
- package/presentation/CmsEntryContentReloader.js.map +1 -0
- package/presentation/CmsEntryContentReloader.test.d.ts +1 -0
- package/presentation/CmsEntryContentReloader.test.js +118 -0
- package/presentation/CmsEntryContentReloader.test.js.map +1 -0
- package/presentation/CmsEntryFormPresenterReviewDecorator.d.ts +27 -0
- package/presentation/CmsEntryFormPresenterReviewDecorator.js +167 -0
- package/presentation/CmsEntryFormPresenterReviewDecorator.js.map +1 -0
- package/presentation/CmsEntryFormPresenterReviewDecorator.test.d.ts +1 -0
- package/presentation/CmsEntryFormPresenterReviewDecorator.test.js +601 -0
- package/presentation/CmsEntryFormPresenterReviewDecorator.test.js.map +1 -0
- package/presentation/CmsEntryUnsavedChanges.d.ts +7 -0
- package/presentation/CmsEntryUnsavedChanges.js +12 -0
- package/presentation/CmsEntryUnsavedChanges.js.map +1 -0
- package/presentation/CmsEntryUnsavedChanges.test.d.ts +1 -0
- package/presentation/CmsEntryUnsavedChanges.test.js +23 -0
- package/presentation/CmsEntryUnsavedChanges.test.js.map +1 -0
- package/presentation/CmsReviewFieldSelections.test.d.ts +1 -0
- package/presentation/CmsReviewFieldSelections.test.js +27 -0
- package/presentation/CmsReviewFieldSelections.test.js.map +1 -0
- package/presentation/CmsReviewGetEntryFieldSelection.d.ts +8 -0
- package/presentation/CmsReviewGetEntryFieldSelection.js +16 -0
- package/presentation/CmsReviewGetEntryFieldSelection.js.map +1 -0
- package/presentation/CmsReviewListEntriesFieldSelection.d.ts +8 -0
- package/presentation/CmsReviewListEntriesFieldSelection.js +16 -0
- package/presentation/CmsReviewListEntriesFieldSelection.js.map +1 -0
- package/presentation/CmsReviewTableRowMapperDecorator.d.ts +11 -0
- package/presentation/CmsReviewTableRowMapperDecorator.js +24 -0
- package/presentation/CmsReviewTableRowMapperDecorator.js.map +1 -0
- package/presentation/CmsReviewTableRowMapperDecorator.test.d.ts +1 -0
- package/presentation/CmsReviewTableRowMapperDecorator.test.js +120 -0
- package/presentation/CmsReviewTableRowMapperDecorator.test.js.map +1 -0
- package/presentation/CmsRevisionsListPresenterDecorator.d.ts +24 -0
- package/presentation/CmsRevisionsListPresenterDecorator.js +66 -0
- package/presentation/CmsRevisionsListPresenterDecorator.js.map +1 -0
- package/presentation/CmsRevisionsListPresenterDecorator.test.d.ts +1 -0
- package/presentation/CmsRevisionsListPresenterDecorator.test.js +174 -0
- package/presentation/CmsRevisionsListPresenterDecorator.test.js.map +1 -0
- package/presentation/contentReviews/CmsContentReviewsPresenter.d.ts +28 -0
- package/presentation/contentReviews/CmsContentReviewsPresenter.js +103 -0
- package/presentation/contentReviews/CmsContentReviewsPresenter.js.map +1 -0
- package/presentation/contentReviews/CmsContentReviewsPresenter.test.d.ts +1 -0
- package/presentation/contentReviews/CmsContentReviewsPresenter.test.js +238 -0
- package/presentation/contentReviews/CmsContentReviewsPresenter.test.js.map +1 -0
- package/presentation/contentReviews/abstractions.d.ts +31 -0
- package/presentation/contentReviews/abstractions.js +5 -0
- package/presentation/contentReviews/abstractions.js.map +1 -0
- package/presentation/contentReviews/feature.d.ts +3 -0
- package/presentation/contentReviews/feature.js +17 -0
- package/presentation/contentReviews/feature.js.map +1 -0
- package/presentation/contentReviews/toContentTypes.d.ts +3 -0
- package/presentation/contentReviews/toContentTypes.js +14 -0
- package/presentation/contentReviews/toContentTypes.js.map +1 -0
- package/presentation/contentReviews/toContentTypes.test.d.ts +1 -0
- package/presentation/contentReviews/toContentTypes.test.js +20 -0
- package/presentation/contentReviews/toContentTypes.test.js.map +1 -0
- package/presentation/feature.d.ts +1 -0
- package/presentation/feature.js +19 -0
- package/presentation/feature.js.map +1 -0
- package/presentation/getCmsEntryReviewContext.d.ts +4 -0
- package/presentation/getCmsEntryReviewContext.js +12 -0
- package/presentation/getCmsEntryReviewContext.js.map +1 -0
- package/presentation/getCmsEntryReviewInitParams.d.ts +13 -0
- package/presentation/getCmsEntryReviewInitParams.js +18 -0
- package/presentation/getCmsEntryReviewInitParams.js.map +1 -0
- package/presentation/getCmsEntryReviewInitParams.test.d.ts +1 -0
- package/presentation/getCmsEntryReviewInitParams.test.js +69 -0
- package/presentation/getCmsEntryReviewInitParams.test.js.map +1 -0
- package/routes.d.ts +11 -0
- package/routes.js +21 -0
- package/routes.js.map +1 -0
- package/testing/createEntry.d.ts +3 -0
- package/testing/createEntry.js +22 -0
- package/testing/createEntry.js.map +1 -0
- package/testing/createEntrySession.d.ts +9 -0
- package/testing/createEntrySession.js +29 -0
- package/testing/createEntrySession.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/createFormVm.d.ts +2 -0
- package/testing/createFormVm.js +22 -0
- package/testing/createFormVm.js.map +1 -0
- package/testing/models.d.ts +4 -0
- package/testing/models.js +23 -0
- package/testing/models.js.map +1 -0
- package/testing/renderEditorTree.d.ts +17 -0
- package/testing/renderEditorTree.js +93 -0
- package/testing/renderEditorTree.js.map +1 -0
- package/testing/reviewStates.d.ts +17 -0
- package/testing/reviewStates.js +65 -0
- package/testing/reviewStates.js.map +1 -0
- package/types.d.ts +10 -0
- package/types.js +0 -0
- package/utils/appName.d.ts +4 -0
- package/utils/appName.js +13 -0
- package/utils/appName.js.map +1 -0
- package/utils/isReviewableModel.d.ts +2 -0
- package/utils/isReviewableModel.js +7 -0
- package/utils/isReviewableModel.js.map +1 -0
- package/utils/renderModelIcon.d.ts +3 -0
- package/utils/renderModelIcon.js +19 -0
- package/utils/renderModelIcon.js.map +1 -0
- package/utils/renderModelIconOrFallback.d.ts +3 -0
- package/utils/renderModelIconOrFallback.js +17 -0
- package/utils/renderModelIconOrFallback.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/CmsReviewGateway/CmsReviewGateway.test.js","sources":["../../../../src/features/gateway/CmsReviewGateway/CmsReviewGateway.test.ts"],"sourcesContent":["import { beforeEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/abstractions.js\";\nimport { REVIEW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { BLOCKING_REVIEW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { STEP_RUN_INFO_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_WITH_FLAGS_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { STEP_CANDIDATE_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { WORKFLOW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { ReviewState } from \"@webiny/app-workflows/review/domain/ReviewState.js\";\nimport { StepState } from \"@webiny/app-workflows/review/domain/StepState.js\";\nimport { ReviewAppGateway as GatewayAbstraction } from \"@webiny/app-workflows/review/appGateway/abstractions.js\";\nimport { CmsReviewGateway } from \"./CmsReviewGateway.js\";\n\ndescribe(\"CmsReviewGateway\", () => {\n const client = { execute: vi.fn() };\n let gateway: GatewayAbstraction.Interface;\n\n beforeEach(() => {\n client.execute.mockReset();\n\n const container = new Container();\n container.registerInstance(MainGraphQLClient, client);\n container.register(CmsReviewGateway);\n gateway = container.resolve(GatewayAbstraction);\n });\n\n it(\"serves the cms app (R347)\", () => {\n expect(gateway.app).toBe(\"cms\");\n });\n\n it(\"claims every CMS model namespace and nothing else (R347)\", () => {\n expect(gateway.canHandle(\"cms.article\")).toBe(true);\n expect(gateway.canHandle(\"cms.author\")).toBe(true);\n expect(gateway.canHandle(\"wb.page\")).toBe(false);\n expect(gateway.canHandle(\"cms\")).toBe(false);\n expect(gateway.canHandle(\"cms.article.extra\")).toBe(false);\n expect(gateway.canHandle(\"article\")).toBe(false);\n expect(client.execute).not.toHaveBeenCalled();\n });\n\n it(\"lists the CMS workflows without variables\", async () => {\n const envelope = { data: [{ id: \"workflow-1\" }], error: null };\n client.execute.mockResolvedValue({ cms: { listCmsEntryWorkflows: envelope } });\n\n const result = await gateway.listWorkflows();\n\n expect(result).toEqual(envelope);\n expect(client.execute).toHaveBeenCalledTimes(1);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toBeUndefined();\n expect(request.query).toContain(\"listCmsEntryWorkflows\");\n expect(request.query).toContain(WORKFLOW_FIELDS);\n });\n\n it(\"reads the target review by model id and revision id\", async () => {\n const envelope = { data: { review: { id: \"review-1\" }, flags: {} }, error: null };\n client.execute.mockResolvedValue({ cms: { getCmsEntryTargetReview: envelope } });\n\n const result = await gateway.getTargetReview({\n namespace: \"cms.article\",\n targetRevisionId: \"entry-1#0001\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ modelId: \"article\", revisionId: \"entry-1#0001\" });\n expect(request.query).toContain(\n \"getCmsEntryTargetReview(modelId: $modelId, revisionId: $revisionId)\"\n );\n expect(request.query).toContain(REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS);\n });\n\n it(\"returns an empty target review as is\", async () => {\n const envelope = { data: null, error: null };\n client.execute.mockResolvedValue({ cms: { getCmsEntryTargetReview: envelope } });\n\n const result = await gateway.getTargetReview({\n namespace: \"cms.article\",\n targetRevisionId: \"entry-1#0001\"\n });\n\n expect(result).toEqual({ data: null, error: null });\n });\n\n it(\"rejects a non-CMS namespace before sending a request\", async () => {\n const targetReview = gateway.getTargetReview({\n namespace: \"wb.page\",\n targetRevisionId: \"page-1#0001\"\n });\n const requestReview = gateway.requestReview({\n target: { namespace: \"wb.page\", targetRevisionId: \"page-1#0001\" },\n title: \"Review\",\n picks: []\n });\n const stepCandidates = gateway.listStepCandidates({\n workflowId: \"workflow-1\",\n stepId: \"step-1\",\n target: { namespace: \"wb.page\", targetRevisionId: \"page-1#0001\" }\n });\n const cancelForDelete = gateway.cancelForDelete({\n namespace: \"wb.page\",\n targetId: \"page-1\",\n targetRevisionId: null,\n action: \"trash\"\n });\n const blockingReviews = gateway.listBlockingReviews({\n namespace: \"wb.page\",\n targetIds: [\"page-1\"]\n });\n\n await expect(targetReview).rejects.toThrow('Invalid app name: \"wb.page\".');\n await expect(requestReview).rejects.toThrow('Invalid app name: \"wb.page\".');\n await expect(stepCandidates).rejects.toThrow('Invalid app name: \"wb.page\".');\n await expect(cancelForDelete).rejects.toThrow('Invalid app name: \"wb.page\".');\n await expect(blockingReviews).rejects.toThrow('Invalid app name: \"wb.page\".');\n\n expect(client.execute).not.toHaveBeenCalled();\n });\n\n it(\"reads one review by id\", async () => {\n const envelope = { data: { review: { id: \"review-1\" }, flags: {} }, error: null };\n client.execute.mockResolvedValue({ cms: { getCmsEntryReview: envelope } });\n\n const result = await gateway.getReview(\"review-1\");\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ id: \"review-1\" });\n expect(request.query).toContain(\"getCmsEntryReview(id: $id)\");\n expect(request.query).toContain(REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS);\n });\n\n it(\"lists reviews with the content type and the My requests filters passed through\", async () => {\n const envelope = {\n data: [{ review: { id: \"review-1\" }, flags: {} }],\n meta: { cursor: \"cursor-2\", hasMoreItems: true },\n error: null\n };\n client.execute.mockResolvedValue({ cms: { listCmsEntryReviews: envelope } });\n\n const result = await gateway.listReviews({\n list: \"myRequests\",\n where: {\n modelId: \"article\",\n titleContains: \"launch\",\n reviewState: ReviewState.Approved,\n stepState: StepState.Approved\n },\n sort: \"lastChangedOn_DESC\",\n limit: 20,\n after: \"cursor-1\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n list: \"myRequests\",\n where: {\n modelId: \"article\",\n titleContains: \"launch\",\n reviewState: ReviewState.Approved,\n stepState: StepState.Approved\n },\n sort: \"lastChangedOn_DESC\",\n limit: 20,\n after: \"cursor-1\"\n });\n expect(request.query).toContain(\"listCmsEntryReviews(\");\n expect(request.query).toContain(\"meta\");\n expect(request.query).toContain(\"hasMoreItems\");\n expect(request.query).toContain(REVIEW_WITH_FLAGS_FIELDS);\n });\n\n it(\"lists the candidates of a step before a review exists\", async () => {\n const envelope = { data: [{ id: \"user-1\" }], error: null };\n client.execute.mockResolvedValue({ cms: { listCmsEntryStepCandidates: envelope } });\n\n const result = await gateway.listStepCandidates({\n workflowId: \"workflow-1\",\n stepId: \"step-1\",\n target: { namespace: \"cms.article\", targetRevisionId: \"entry-1#0001\" }\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n workflowId: \"workflow-1\",\n stepId: \"step-1\",\n modelId: \"article\",\n revisionId: \"entry-1#0001\"\n });\n expect(request.query).toContain(\"listCmsEntryStepCandidates(\");\n expect(request.query).toContain(STEP_CANDIDATE_FIELDS);\n });\n\n it(\"lists who a step of a review can be reassigned to\", async () => {\n const envelope = { data: [{ id: \"user-2\" }], error: null };\n client.execute.mockResolvedValue({ cms: { listCmsEntryReviewStepCandidates: envelope } });\n\n const result = await gateway.listReviewStepCandidates({\n reviewId: \"review-1\",\n stepId: \"step-1\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ reviewId: \"review-1\", stepId: \"step-1\" });\n expect(request.query).toContain(\"listCmsEntryReviewStepCandidates(\");\n expect(request.query).toContain(STEP_CANDIDATE_FIELDS);\n });\n\n it(\"requests a review with the title and the picks\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({ cms: { requestCmsEntryReview: envelope } });\n\n const result = await gateway.requestReview({\n target: { namespace: \"cms.article\", targetRevisionId: \"entry-1#0001\" },\n title: \"Launch article\",\n picks: [{ stepId: \"step-1\", userId: \"user-2\" }]\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n modelId: \"article\",\n revisionId: \"entry-1#0001\",\n title: \"Launch article\",\n picks: [{ stepId: \"step-1\", userId: \"user-2\" }]\n });\n expect(request.query).toContain(\"requestCmsEntryReview(\");\n expect(request.query).toContain(REVIEW_FIELDS);\n });\n\n it(\"starts a step\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({ cms: { startCmsEntryReviewStep: envelope } });\n\n const result = await gateway.startStep({ reviewId: \"review-1\", stepId: \"step-1\" });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ reviewId: \"review-1\", stepId: \"step-1\" });\n expect(request.query).toContain(\"startCmsEntryReviewStep(\");\n expect(request.query).toContain(REVIEW_FIELDS);\n });\n\n it(\"takes a step over and passes the notify choice\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({ cms: { takeOverCmsEntryReviewStep: envelope } });\n\n const result = await gateway.takeOverStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n notifyPreviousOwner: false\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n notifyPreviousOwner: false\n });\n expect(request.query).toContain(\"takeOverCmsEntryReviewStep(\");\n });\n\n it(\"reassigns a step\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({ cms: { reassignCmsEntryReviewStep: envelope } });\n\n const result = await gateway.reassignStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n userId: \"user-2\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n userId: \"user-2\"\n });\n expect(request.query).toContain(\"reassignCmsEntryReviewStep(\");\n });\n\n it(\"approves a step with and without a comment\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({ cms: { approveCmsEntryReviewStep: envelope } });\n\n await gateway.approveStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: \"Looks good\"\n });\n const result = await gateway.approveStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: null\n });\n\n expect(result).toEqual(envelope);\n expect(client.execute.mock.calls[0][0].variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: \"Looks good\"\n });\n expect(client.execute.mock.calls[1][0].variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: null\n });\n expect(client.execute.mock.calls[0][0].query).toContain(\"approveCmsEntryReviewStep(\");\n });\n\n it(\"rejects a step with the comment\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({ cms: { rejectCmsEntryReviewStep: envelope } });\n\n const result = await gateway.rejectStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: \"The headline needs work.\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: \"The headline needs work.\"\n });\n expect(request.query).toContain(\"rejectCmsEntryReviewStep(\");\n });\n\n it(\"cancels a review\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({ cms: { cancelCmsEntryReview: envelope } });\n\n const result = await gateway.cancelReview({ reviewId: \"review-1\" });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ reviewId: \"review-1\" });\n expect(request.query).toContain(\"cancelCmsEntryReview(reviewId: $reviewId)\");\n });\n\n it(\"cancels the reviews of a revision before a delete\", async () => {\n const envelope = { data: [{ id: \"review-1\" }], error: null };\n client.execute.mockResolvedValue({ cms: { cancelCmsEntryReviewsForDelete: envelope } });\n\n const result = await gateway.cancelForDelete({\n namespace: \"cms.article\",\n targetId: \"entry-1\",\n targetRevisionId: \"entry-1#0002\",\n action: \"delete\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n modelId: \"article\",\n entryId: \"entry-1\",\n revisionId: \"entry-1#0002\",\n action: \"delete\"\n });\n expect(request.query).toContain(\"cancelCmsEntryReviewsForDelete(\");\n });\n\n it(\"cancels every review of an entry when no revision is given\", async () => {\n const envelope = { data: [], error: null };\n client.execute.mockResolvedValue({ cms: { cancelCmsEntryReviewsForDelete: envelope } });\n\n await gateway.cancelForDelete({\n namespace: \"cms.article\",\n targetId: \"entry-1\",\n targetRevisionId: null,\n action: \"trash\"\n });\n\n expect(client.execute.mock.calls[0][0].variables).toEqual({\n modelId: \"article\",\n entryId: \"entry-1\",\n revisionId: null,\n action: \"trash\"\n });\n });\n\n it(\"restarts a step\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({ cms: { restartCmsEntryReviewStep: envelope } });\n\n const result = await gateway.restartStep({ reviewId: \"review-1\", stepId: \"step-1\" });\n\n expect(result).toEqual(envelope);\n expect(client.execute).toHaveBeenCalledTimes(1);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ reviewId: \"review-1\", stepId: \"step-1\" });\n expect(request.query).toContain(\"mutation RestartCmsEntryReviewStep\");\n expect(request.query).toContain(\n \"restartCmsEntryReviewStep(reviewId: $reviewId, stepId: $stepId)\"\n );\n expect(request.query).toContain(REVIEW_FIELDS);\n });\n\n it(\"returns a restart conflict as an envelope error and never throws for it\", async () => {\n const envelope = {\n data: null,\n error: { code: \"Workflows/Review/InvalidState\", message: \"Not failed.\", data: null }\n };\n client.execute.mockResolvedValue({ cms: { restartCmsEntryReviewStep: envelope } });\n\n const result = await gateway.restartStep({ reviewId: \"review-1\", stepId: \"step-1\" });\n\n expect(result).toEqual(envelope);\n });\n\n it(\"reads the run of a step by review, step and task id\", async () => {\n const envelope = { data: { taskId: \"task-1\", status: \"done\" }, error: null };\n client.execute.mockResolvedValue({ cms: { getCmsEntryReviewStepRun: envelope } });\n\n const result = await gateway.getStepRun({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n taskId: \"task-1\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n taskId: \"task-1\"\n });\n expect(request.query).toContain(\"query GetCmsEntryReviewStepRun\");\n expect(request.query).toContain(\n \"getCmsEntryReviewStepRun(reviewId: $reviewId, stepId: $stepId, taskId: $taskId)\"\n );\n expect(request.query).toContain(STEP_RUN_INFO_FIELDS);\n });\n\n it(\"returns a gone task (null data) as is\", async () => {\n const envelope = { data: null, error: null };\n client.execute.mockResolvedValue({ cms: { getCmsEntryReviewStepRun: envelope } });\n\n const result = await gateway.getStepRun({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n taskId: \"task-1\"\n });\n\n expect(result).toEqual({ data: null, error: null });\n });\n\n it(\"lists the blocking reviews of entries by the model id of the namespace (R265)\", async () => {\n const envelope = { data: [{ reviewId: \"review-1\" }], error: null };\n client.execute.mockResolvedValue({ cms: { listCmsEntryBlockingReviews: envelope } });\n\n const result = await gateway.listBlockingReviews({\n namespace: \"cms.article\",\n targetIds: [\"entry-1\", \"entry-2\"]\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n modelId: \"article\",\n entryIds: [\"entry-1\", \"entry-2\"]\n });\n expect(request.query).toContain(\"query ListCmsEntryBlockingReviews\");\n expect(request.query).toContain(\n \"listCmsEntryBlockingReviews(modelId: $modelId, entryIds: $entryIds)\"\n );\n expect(request.query).toContain(BLOCKING_REVIEW_FIELDS);\n });\n\n it(\"returns an envelope error as is and never throws for it\", async () => {\n const envelope = {\n data: null,\n error: { code: \"Workflows/Review/StepNotCurrent\", message: \"Not current.\", data: null }\n };\n client.execute.mockResolvedValue({ cms: { startCmsEntryReviewStep: envelope } });\n\n const result = await gateway.startStep({ reviewId: \"review-1\", stepId: \"step-1\" });\n\n expect(result).toEqual(envelope);\n });\n\n it(\"lets a transport error pass through\", async () => {\n client.execute.mockRejectedValue(new Error(\"Network down.\"));\n\n const promise = gateway.getReview(\"review-1\");\n\n await expect(promise).rejects.toThrow(\"Network down.\");\n });\n});\n"],"names":["describe","client","vi","gateway","beforeEach","container","Container","MainGraphQLClient","CmsReviewGateway","GatewayAbstraction","it","expect","envelope","result","request","WORKFLOW_FIELDS","REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS","targetReview","requestReview","stepCandidates","cancelForDelete","blockingReviews","ReviewState","StepState","REVIEW_WITH_FLAGS_FIELDS","STEP_CANDIDATE_FIELDS","REVIEW_FIELDS","STEP_RUN_INFO_FIELDS","BLOCKING_REVIEW_FIELDS","Error","promise"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { WebsocketEventHandler } from "@webiny/app-websockets/events/abstractions.js";
|
|
2
|
+
import { ReviewNotificationHandler } from "@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js";
|
|
3
|
+
declare class CmsReviewNotificationHandlerImpl extends ReviewNotificationHandler implements WebsocketEventHandler.Interface {
|
|
4
|
+
}
|
|
5
|
+
export declare const CmsReviewNotificationHandler: typeof CmsReviewNotificationHandlerImpl & {
|
|
6
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/app/features/eventPublisher/abstractions.js").IEventHandler<import("@webiny/app-websockets/events/WebsocketEvent.js").WebsocketEvent>>;
|
|
7
|
+
};
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { WebsocketEventHandler } from "@webiny/app-websockets/events/abstractions.js";
|
|
2
|
+
import { ReviewNotificationHandler } from "@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js";
|
|
3
|
+
import { ReviewNotificationService } from "@webiny/app-workflows/review/notifications/abstractions.js";
|
|
4
|
+
import { CmsReviewContentAdapter } from "./CmsReviewContentAdapter/abstractions.js";
|
|
5
|
+
class CmsReviewNotificationHandlerImpl extends ReviewNotificationHandler {
|
|
6
|
+
}
|
|
7
|
+
const CmsReviewNotificationHandler = WebsocketEventHandler.createImplementation({
|
|
8
|
+
implementation: CmsReviewNotificationHandlerImpl,
|
|
9
|
+
dependencies: [
|
|
10
|
+
ReviewNotificationService,
|
|
11
|
+
CmsReviewContentAdapter
|
|
12
|
+
]
|
|
13
|
+
});
|
|
14
|
+
export { CmsReviewNotificationHandler };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=CmsReviewNotificationHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/CmsReviewNotificationHandler.js","sources":["../../../src/features/gateway/CmsReviewNotificationHandler.ts"],"sourcesContent":["import { WebsocketEventHandler } from \"@webiny/app-websockets/events/abstractions.js\";\nimport { ReviewNotificationHandler } from \"@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js\";\nimport { ReviewNotificationService } from \"@webiny/app-workflows/review/notifications/abstractions.js\";\nimport { CmsReviewContentAdapter } from \"./CmsReviewContentAdapter/abstractions.js\";\n\n// A subclass of its own (see CmsReviewRowProviderImpl): the Website Builder binds its own.\nclass CmsReviewNotificationHandlerImpl\n extends ReviewNotificationHandler\n implements WebsocketEventHandler.Interface {}\n\nexport const CmsReviewNotificationHandler = WebsocketEventHandler.createImplementation({\n implementation: CmsReviewNotificationHandlerImpl,\n dependencies: [ReviewNotificationService, CmsReviewContentAdapter]\n});\n"],"names":["CmsReviewNotificationHandlerImpl","ReviewNotificationHandler","CmsReviewNotificationHandler","WebsocketEventHandler","ReviewNotificationService","CmsReviewContentAdapter"],"mappings":";;;;AAMA,MAAMA,yCACMC;AACoC;AAEzC,MAAMC,+BAA+BC,sBAAsB,oBAAoB,CAAC;IACnF,gBAAgBH;IAChB,cAAc;QAACI;QAA2BC;KAAwB;AACtE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AppReviewRowProvider } from "@webiny/app-workflows/review/mounting/AppReviewRowProvider.js";
|
|
2
|
+
import { CmsReviewRowProvider as Abstraction } from "./abstractions.js";
|
|
3
|
+
declare class CmsReviewRowProviderImpl extends AppReviewRowProvider implements Abstraction.Interface {
|
|
4
|
+
}
|
|
5
|
+
export declare const CmsReviewRowProvider: typeof CmsReviewRowProviderImpl & {
|
|
6
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/app-workflows/review/presentation/reviewList/abstractions.js").IReviewRowProvider>;
|
|
7
|
+
};
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AppReviewRowProvider } from "@webiny/app-workflows/review/mounting/AppReviewRowProvider.js";
|
|
2
|
+
import { CmsReviewContentAdapter } from "../CmsReviewContentAdapter/abstractions.js";
|
|
3
|
+
import { CmsReviewRowProvider } from "./abstractions.js";
|
|
4
|
+
class CmsReviewRowProviderImpl extends AppReviewRowProvider {
|
|
5
|
+
}
|
|
6
|
+
const CmsReviewRowProvider_CmsReviewRowProvider = CmsReviewRowProvider.createImplementation({
|
|
7
|
+
implementation: CmsReviewRowProviderImpl,
|
|
8
|
+
dependencies: [
|
|
9
|
+
CmsReviewContentAdapter
|
|
10
|
+
]
|
|
11
|
+
});
|
|
12
|
+
export { CmsReviewRowProvider_CmsReviewRowProvider as CmsReviewRowProvider };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=CmsReviewRowProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.js","sources":["../../../../src/features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.ts"],"sourcesContent":["import { AppReviewRowProvider } from \"@webiny/app-workflows/review/mounting/AppReviewRowProvider.js\";\nimport { CmsReviewContentAdapter } from \"../CmsReviewContentAdapter/abstractions.js\";\nimport { CmsReviewRowProvider as Abstraction } from \"./abstractions.js\";\n\n// A subclass of its own: `createImplementation` stores the abstraction on the class, so the shared\n// class must never be bound directly (it would collide with the Website Builder binding).\nclass CmsReviewRowProviderImpl extends AppReviewRowProvider implements Abstraction.Interface {}\n\nexport const CmsReviewRowProvider = Abstraction.createImplementation({\n implementation: CmsReviewRowProviderImpl,\n dependencies: [CmsReviewContentAdapter]\n});\n"],"names":["CmsReviewRowProviderImpl","AppReviewRowProvider","CmsReviewRowProvider","Abstraction","CmsReviewContentAdapter"],"mappings":";;;AAMA,MAAMA,iCAAiCC;AAAuD;AAEvF,MAAMC,4CAAuBC,qBAAAA,oBAAgC,CAAC;IACjE,gBAAgBH;IAChB,cAAc;QAACI;KAAwB;AAC3C"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IReviewRowProvider } from "@webiny/app-workflows/review/presentation/reviewList/abstractions.js";
|
|
2
|
+
export declare const CmsReviewRowProvider: import("@webiny/di").Abstraction<IReviewRowProvider>;
|
|
3
|
+
export declare namespace CmsReviewRowProvider {
|
|
4
|
+
type Interface = IReviewRowProvider;
|
|
5
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/CmsReviewRowProvider/abstractions.js","sources":["../../../../src/features/gateway/CmsReviewRowProvider/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { IReviewRowProvider } from \"@webiny/app-workflows/review/presentation/reviewList/abstractions.js\";\n\nexport const CmsReviewRowProvider = createAbstraction<IReviewRowProvider>(\n \"Cms/Workflows/ReviewRowProvider\"\n);\n\nexport namespace CmsReviewRowProvider {\n export type Interface = IReviewRowProvider;\n}\n"],"names":["CmsReviewRowProvider","createAbstraction"],"mappings":";AAGO,MAAMA,uBAAuBC,kBAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { Container } from "@webiny/di";
|
|
3
|
+
import { WebsocketEvent } from "@webiny/app-websockets/events/WebsocketEvent.js";
|
|
4
|
+
import { WebsocketEventHandler } from "@webiny/app-websockets/events/abstractions.js";
|
|
5
|
+
import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/abstractions.js";
|
|
6
|
+
import { ModelsCache } from "@webiny/app-headless-cms/features/model/abstractions.js";
|
|
7
|
+
import { AppReviewRowProvider } from "@webiny/app-workflows/review/mounting/AppReviewRowProvider.js";
|
|
8
|
+
import { ReviewNotificationHandler } from "@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js";
|
|
9
|
+
import { ReviewNotificationService } from "@webiny/app-workflows/review/notifications/abstractions.js";
|
|
10
|
+
import { ReviewActivity } from "@webiny/app-workflows/review/activity/abstractions.js";
|
|
11
|
+
import { ReviewChangeMessageHandler } from "@webiny/app-workflows/review/mounting/ReviewChangeMessageHandler.js";
|
|
12
|
+
import { WORKFLOWS_NOTIFICATION_ACTION, WORKFLOWS_REVIEW_CHANGED_ACTION } from "@webiny/app-workflows/review/domain/constants.js";
|
|
13
|
+
import { CmsReviewFeature } from "./feature.js";
|
|
14
|
+
import { CmsReviewRowProvider } from "./CmsReviewRowProvider/abstractions.js";
|
|
15
|
+
const handle = vi.fn();
|
|
16
|
+
const notify = vi.fn();
|
|
17
|
+
const createContainer = ()=>{
|
|
18
|
+
const container = new Container();
|
|
19
|
+
container.registerInstance(MainGraphQLClient, {
|
|
20
|
+
execute: vi.fn()
|
|
21
|
+
});
|
|
22
|
+
container.registerInstance(ModelsCache, {
|
|
23
|
+
getItem: ()=>void 0,
|
|
24
|
+
getItems: ()=>[],
|
|
25
|
+
hasItems: ()=>true
|
|
26
|
+
});
|
|
27
|
+
container.registerInstance(ReviewNotificationService, {
|
|
28
|
+
handle: handle
|
|
29
|
+
});
|
|
30
|
+
container.registerInstance(ReviewActivity, {
|
|
31
|
+
subscribe: vi.fn(),
|
|
32
|
+
notify: notify
|
|
33
|
+
});
|
|
34
|
+
return container;
|
|
35
|
+
};
|
|
36
|
+
const message = (namespace)=>new WebsocketEvent({
|
|
37
|
+
action: WORKFLOWS_NOTIFICATION_ACTION,
|
|
38
|
+
data: {
|
|
39
|
+
event: "assigned",
|
|
40
|
+
reviewId: "review-1",
|
|
41
|
+
stepId: "step-1",
|
|
42
|
+
namespace,
|
|
43
|
+
targetId: "entry-1",
|
|
44
|
+
targetRevisionId: "entry-1#0001",
|
|
45
|
+
title: "Review assigned",
|
|
46
|
+
body: "Maja Kos asked you to review Spring launch"
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
const changeMessage = (namespace)=>new WebsocketEvent({
|
|
50
|
+
action: WORKFLOWS_REVIEW_CHANGED_ACTION,
|
|
51
|
+
data: {
|
|
52
|
+
kind: "stepStarted",
|
|
53
|
+
reviewId: "review-1",
|
|
54
|
+
stepId: "step-1",
|
|
55
|
+
namespace,
|
|
56
|
+
targetId: "entry-1",
|
|
57
|
+
targetRevisionId: "entry-1#0001"
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
describe("CmsReviewFeature Content Reviews registrations", ()=>{
|
|
61
|
+
beforeEach(()=>{
|
|
62
|
+
handle.mockReset();
|
|
63
|
+
notify.mockReset();
|
|
64
|
+
});
|
|
65
|
+
it("registers a row provider that binds only cms namespaces", ()=>{
|
|
66
|
+
const container = createContainer();
|
|
67
|
+
CmsReviewFeature.register(container);
|
|
68
|
+
const provider = container.resolve(CmsReviewRowProvider);
|
|
69
|
+
expect(provider).toBeInstanceOf(AppReviewRowProvider);
|
|
70
|
+
expect(provider.getBinding("cms.article")).not.toBeNull();
|
|
71
|
+
expect(provider.getBinding("wb.page")).toBeNull();
|
|
72
|
+
});
|
|
73
|
+
it("hands out the same provider as the feature export", ()=>{
|
|
74
|
+
const container = createContainer();
|
|
75
|
+
CmsReviewFeature.register(container);
|
|
76
|
+
const { rowProvider } = CmsReviewFeature.resolve(container);
|
|
77
|
+
expect(rowProvider).toBe(container.resolve(CmsReviewRowProvider));
|
|
78
|
+
});
|
|
79
|
+
it("registers a notification handler that handles cms messages and ignores wb messages (R223)", async ()=>{
|
|
80
|
+
const container = createContainer();
|
|
81
|
+
CmsReviewFeature.register(container);
|
|
82
|
+
const handlers = container.resolveAll(WebsocketEventHandler);
|
|
83
|
+
const own = handlers.filter((handler)=>handler instanceof ReviewNotificationHandler);
|
|
84
|
+
expect(own).toHaveLength(1);
|
|
85
|
+
await own[0].handle(message("cms.article"));
|
|
86
|
+
expect(handle).toHaveBeenCalledTimes(1);
|
|
87
|
+
expect(handle.mock.calls[0][0].data.namespace).toBe("cms.article");
|
|
88
|
+
expect(handle.mock.calls[0][0].url).toContain("/cms/content-entries/article");
|
|
89
|
+
await own[0].handle(message("wb.page"));
|
|
90
|
+
expect(handle).toHaveBeenCalledTimes(1);
|
|
91
|
+
});
|
|
92
|
+
it("registers a change message handler that signals cms frames and ignores wb frames (R260)", async ()=>{
|
|
93
|
+
const container = createContainer();
|
|
94
|
+
CmsReviewFeature.register(container);
|
|
95
|
+
const handlers = container.resolveAll(WebsocketEventHandler);
|
|
96
|
+
const own = handlers.filter((handler)=>handler instanceof ReviewChangeMessageHandler);
|
|
97
|
+
expect(own).toHaveLength(1);
|
|
98
|
+
await own[0].handle(changeMessage("cms.article"));
|
|
99
|
+
expect(notify).toHaveBeenCalledTimes(1);
|
|
100
|
+
expect(notify).toHaveBeenCalledWith({
|
|
101
|
+
namespace: "cms.article",
|
|
102
|
+
source: "remote",
|
|
103
|
+
reviewId: "review-1",
|
|
104
|
+
targetRevisionId: "entry-1#0001"
|
|
105
|
+
});
|
|
106
|
+
await own[0].handle(changeMessage("wb.page"));
|
|
107
|
+
expect(notify).toHaveBeenCalledTimes(1);
|
|
108
|
+
});
|
|
109
|
+
it("shows no toast for a change message and signals nothing for a notification (R253)", async ()=>{
|
|
110
|
+
const container = createContainer();
|
|
111
|
+
CmsReviewFeature.register(container);
|
|
112
|
+
const handlers = container.resolveAll(WebsocketEventHandler);
|
|
113
|
+
const changeHandler = handlers.find((handler)=>handler instanceof ReviewChangeMessageHandler);
|
|
114
|
+
const notificationHandler = handlers.find((handler)=>handler instanceof ReviewNotificationHandler);
|
|
115
|
+
if (!changeHandler || !notificationHandler) throw new Error("Both handlers must be registered.");
|
|
116
|
+
await changeHandler.handle(changeMessage("cms.article"));
|
|
117
|
+
expect(handle).not.toHaveBeenCalled();
|
|
118
|
+
await notificationHandler.handle(changeMessage("cms.article"));
|
|
119
|
+
await changeHandler.handle(message("cms.article"));
|
|
120
|
+
expect(handle).not.toHaveBeenCalled();
|
|
121
|
+
expect(notify).toHaveBeenCalledTimes(1);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
//# sourceMappingURL=contentReviewsBindings.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/contentReviewsBindings.test.js","sources":["../../../src/features/gateway/contentReviewsBindings.test.ts"],"sourcesContent":["import { beforeEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { WebsocketEvent } from \"@webiny/app-websockets/events/WebsocketEvent.js\";\nimport { WebsocketEventHandler } from \"@webiny/app-websockets/events/abstractions.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/abstractions.js\";\nimport { ModelsCache } from \"@webiny/app-headless-cms/features/model/abstractions.js\";\nimport { AppReviewRowProvider } from \"@webiny/app-workflows/review/mounting/AppReviewRowProvider.js\";\nimport { ReviewNotificationHandler } from \"@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js\";\nimport { ReviewNotificationService } from \"@webiny/app-workflows/review/notifications/abstractions.js\";\nimport { ReviewActivity } from \"@webiny/app-workflows/review/activity/abstractions.js\";\nimport { ReviewChangeMessageHandler } from \"@webiny/app-workflows/review/mounting/ReviewChangeMessageHandler.js\";\nimport { WORKFLOWS_REVIEW_CHANGED_ACTION } from \"@webiny/app-workflows/review/domain/constants.js\";\nimport { WORKFLOWS_NOTIFICATION_ACTION } from \"@webiny/app-workflows/review/domain/constants.js\";\nimport { CmsReviewFeature } from \"./feature.js\";\nimport { CmsReviewRowProvider } from \"./CmsReviewRowProvider/abstractions.js\";\n\nconst handle = vi.fn();\nconst notify = vi.fn();\n\n// The leaf dependencies of Task 11's gateway and adapter (the `MainGraphQLClient` and `ModelsCache`\n// registrations its feature test also makes; here `ModelsCache` is a stub because only the handler\n// is under test) and the shared service the handler reports to.\nconst createContainer = (): Container => {\n const container = new Container();\n container.registerInstance(MainGraphQLClient, {\n execute: vi.fn()\n } as unknown as MainGraphQLClient.Interface);\n container.registerInstance(ModelsCache, {\n getItem: () => undefined,\n getItems: () => [],\n hasItems: () => true\n } as unknown as ModelsCache.Interface);\n container.registerInstance(ReviewNotificationService, { handle });\n container.registerInstance(ReviewActivity, { subscribe: vi.fn(), notify });\n return container;\n};\n\nconst message = (namespace: string) => {\n return new WebsocketEvent({\n action: WORKFLOWS_NOTIFICATION_ACTION,\n data: {\n event: \"assigned\",\n reviewId: \"review-1\",\n stepId: \"step-1\",\n namespace,\n targetId: \"entry-1\",\n targetRevisionId: \"entry-1#0001\",\n title: \"Review assigned\",\n body: \"Maja Kos asked you to review Spring launch\"\n }\n });\n};\n\nconst changeMessage = (namespace: string) => {\n return new WebsocketEvent({\n action: WORKFLOWS_REVIEW_CHANGED_ACTION,\n data: {\n kind: \"stepStarted\",\n reviewId: \"review-1\",\n stepId: \"step-1\",\n namespace,\n targetId: \"entry-1\",\n targetRevisionId: \"entry-1#0001\"\n }\n });\n};\n\ndescribe(\"CmsReviewFeature Content Reviews registrations\", () => {\n beforeEach(() => {\n handle.mockReset();\n notify.mockReset();\n });\n\n it(\"registers a row provider that binds only cms namespaces\", () => {\n const container = createContainer();\n CmsReviewFeature.register(container);\n\n const provider = container.resolve(CmsReviewRowProvider);\n\n expect(provider).toBeInstanceOf(AppReviewRowProvider);\n expect(provider.getBinding(\"cms.article\")).not.toBeNull();\n expect(provider.getBinding(\"wb.page\")).toBeNull();\n });\n\n it(\"hands out the same provider as the feature export\", () => {\n const container = createContainer();\n CmsReviewFeature.register(container);\n\n const { rowProvider } = CmsReviewFeature.resolve(container);\n\n expect(rowProvider).toBe(container.resolve(CmsReviewRowProvider));\n });\n\n it(\"registers a notification handler that handles cms messages and ignores wb messages (R223)\", async () => {\n const container = createContainer();\n CmsReviewFeature.register(container);\n\n const handlers = container.resolveAll(WebsocketEventHandler);\n const own = handlers.filter(handler => handler instanceof ReviewNotificationHandler);\n expect(own).toHaveLength(1);\n\n await own[0].handle(message(\"cms.article\"));\n expect(handle).toHaveBeenCalledTimes(1);\n expect(handle.mock.calls[0][0].data.namespace).toBe(\"cms.article\");\n expect(handle.mock.calls[0][0].url).toContain(\"/cms/content-entries/article\");\n\n await own[0].handle(message(\"wb.page\"));\n expect(handle).toHaveBeenCalledTimes(1);\n });\n\n it(\"registers a change message handler that signals cms frames and ignores wb frames (R260)\", async () => {\n const container = createContainer();\n CmsReviewFeature.register(container);\n\n const handlers = container.resolveAll(WebsocketEventHandler);\n const own = handlers.filter(handler => handler instanceof ReviewChangeMessageHandler);\n expect(own).toHaveLength(1);\n\n await own[0].handle(changeMessage(\"cms.article\"));\n expect(notify).toHaveBeenCalledTimes(1);\n expect(notify).toHaveBeenCalledWith({\n namespace: \"cms.article\",\n source: \"remote\",\n reviewId: \"review-1\",\n targetRevisionId: \"entry-1#0001\"\n });\n\n await own[0].handle(changeMessage(\"wb.page\"));\n expect(notify).toHaveBeenCalledTimes(1);\n });\n\n it(\"shows no toast for a change message and signals nothing for a notification (R253)\", async () => {\n const container = createContainer();\n CmsReviewFeature.register(container);\n\n const handlers = container.resolveAll(WebsocketEventHandler);\n const changeHandler = handlers.find(\n handler => handler instanceof ReviewChangeMessageHandler\n );\n const notificationHandler = handlers.find(handler => {\n return handler instanceof ReviewNotificationHandler;\n });\n if (!changeHandler || !notificationHandler) {\n throw new Error(\"Both handlers must be registered.\");\n }\n\n await changeHandler.handle(changeMessage(\"cms.article\"));\n expect(handle).not.toHaveBeenCalled();\n\n await notificationHandler.handle(changeMessage(\"cms.article\"));\n await changeHandler.handle(message(\"cms.article\"));\n expect(handle).not.toHaveBeenCalled();\n expect(notify).toHaveBeenCalledTimes(1);\n });\n});\n"],"names":["handle","vi","notify","createContainer","container","Container","MainGraphQLClient","ModelsCache","undefined","ReviewNotificationService","ReviewActivity","message","namespace","WebsocketEvent","WORKFLOWS_NOTIFICATION_ACTION","changeMessage","WORKFLOWS_REVIEW_CHANGED_ACTION","describe","beforeEach","it","CmsReviewFeature","provider","CmsReviewRowProvider","expect","AppReviewRowProvider","rowProvider","handlers","WebsocketEventHandler","own","handler","ReviewNotificationHandler","ReviewChangeMessageHandler","changeHandler","notificationHandler","Error"],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const CmsReviewFeature: import("@webiny/feature/admin").FeatureDefinition<{
|
|
2
|
+
contentAdapter: import("@webiny/app-workflows/review/content/IReviewContentAdapter.js").IReviewContentAdapter;
|
|
3
|
+
rowProvider: import("@webiny/app-workflows/review/presentation/reviewList/abstractions.js").IReviewRowProvider;
|
|
4
|
+
}, []>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/admin";
|
|
2
|
+
import { CmsReviewRowProvider } from "./CmsReviewRowProvider/abstractions.js";
|
|
3
|
+
import { CmsReviewRowProvider as CmsReviewRowProvider_js_CmsReviewRowProvider } from "./CmsReviewRowProvider/CmsReviewRowProvider.js";
|
|
4
|
+
import { CmsReviewNotificationHandler } from "./CmsReviewNotificationHandler.js";
|
|
5
|
+
import { CmsReviewChangeMessageHandler } from "./CmsReviewChangeMessageHandler.js";
|
|
6
|
+
import { CmsReviewContentAdapter } from "./CmsReviewContentAdapter/abstractions.js";
|
|
7
|
+
import { CmsReviewContentAdapter as CmsReviewContentAdapter_js_CmsReviewContentAdapter } from "./CmsReviewContentAdapter/CmsReviewContentAdapter.js";
|
|
8
|
+
import { CmsReviewGateway } from "./CmsReviewGateway/CmsReviewGateway.js";
|
|
9
|
+
const CmsReviewFeature = createFeature({
|
|
10
|
+
name: "CmsWorkflows/Review",
|
|
11
|
+
register (container) {
|
|
12
|
+
container.register(CmsReviewGateway).inSingletonScope();
|
|
13
|
+
container.register(CmsReviewContentAdapter_js_CmsReviewContentAdapter).inSingletonScope();
|
|
14
|
+
container.register(CmsReviewRowProvider_js_CmsReviewRowProvider).inSingletonScope();
|
|
15
|
+
container.register(CmsReviewNotificationHandler);
|
|
16
|
+
container.register(CmsReviewChangeMessageHandler);
|
|
17
|
+
},
|
|
18
|
+
resolve (container) {
|
|
19
|
+
return {
|
|
20
|
+
contentAdapter: container.resolve(CmsReviewContentAdapter),
|
|
21
|
+
rowProvider: container.resolve(CmsReviewRowProvider)
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
export { CmsReviewFeature };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/feature.js","sources":["../../../src/features/gateway/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { CmsReviewRowProvider as RowProviderAbstraction } from \"./CmsReviewRowProvider/abstractions.js\";\nimport { CmsReviewRowProvider } from \"./CmsReviewRowProvider/CmsReviewRowProvider.js\";\nimport { CmsReviewNotificationHandler } from \"./CmsReviewNotificationHandler.js\";\nimport { CmsReviewChangeMessageHandler } from \"./CmsReviewChangeMessageHandler.js\";\nimport { CmsReviewContentAdapter as AdapterAbstraction } from \"./CmsReviewContentAdapter/abstractions.js\";\nimport { CmsReviewContentAdapter } from \"./CmsReviewContentAdapter/CmsReviewContentAdapter.js\";\nimport { CmsReviewGateway } from \"./CmsReviewGateway/CmsReviewGateway.js\";\n\n/*\n * The CMS review registrations: the review gateway under the shared `ReviewAppGateway` token\n * (R347), the content adapter, the Content Reviews row provider and the two websocket handlers.\n */\nexport const CmsReviewFeature = createFeature({\n name: \"CmsWorkflows/Review\",\n register(container) {\n container.register(CmsReviewGateway).inSingletonScope();\n container.register(CmsReviewContentAdapter).inSingletonScope();\n container.register(CmsReviewRowProvider).inSingletonScope();\n container.register(CmsReviewNotificationHandler);\n container.register(CmsReviewChangeMessageHandler);\n },\n resolve(container) {\n return {\n contentAdapter: container.resolve(AdapterAbstraction),\n rowProvider: container.resolve(RowProviderAbstraction)\n };\n }\n});\n"],"names":["CmsReviewFeature","createFeature","container","CmsReviewGateway","CmsReviewContentAdapter","CmsReviewRowProvider","CmsReviewNotificationHandler","CmsReviewChangeMessageHandler","AdapterAbstraction","RowProviderAbstraction"],"mappings":";;;;;;;;AAaO,MAAMA,mBAAmBC,cAAc;IAC1C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,kBAAkB,gBAAgB;QACrDD,UAAU,QAAQ,CAACE,oDAAyB,gBAAgB;QAC5DF,UAAU,QAAQ,CAACG,8CAAsB,gBAAgB;QACzDH,UAAU,QAAQ,CAACI;QACnBJ,UAAU,QAAQ,CAACK;IACvB;IACA,SAAQL,SAAS;QACb,OAAO;YACH,gBAAgBA,UAAU,OAAO,CAACM;YAClC,aAAaN,UAAU,OAAO,CAACO;QACnC;IACJ;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { Container } from "@webiny/di";
|
|
3
|
+
import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/abstractions.js";
|
|
4
|
+
import { ListCache } from "@webiny/app-admin/features/listCache/index.js";
|
|
5
|
+
import { ModelsCache } from "@webiny/app-headless-cms/features/model/abstractions.js";
|
|
6
|
+
import { ReviewAppGateway } from "@webiny/app-workflows/review/appGateway/abstractions.js";
|
|
7
|
+
import { CmsReviewContentAdapter } from "./CmsReviewContentAdapter/abstractions.js";
|
|
8
|
+
import { CmsReviewRowProvider } from "./CmsReviewRowProvider/abstractions.js";
|
|
9
|
+
import { CmsReviewGateway } from "./CmsReviewGateway/CmsReviewGateway.js";
|
|
10
|
+
import { CmsReviewFeature } from "./feature.js";
|
|
11
|
+
describe("CmsReviewFeature", ()=>{
|
|
12
|
+
const client = {
|
|
13
|
+
execute: vi.fn()
|
|
14
|
+
};
|
|
15
|
+
let container;
|
|
16
|
+
beforeEach(()=>{
|
|
17
|
+
client.execute.mockReset();
|
|
18
|
+
container = new Container();
|
|
19
|
+
container.registerInstance(MainGraphQLClient, client);
|
|
20
|
+
const modelsCache = new ListCache("modelId");
|
|
21
|
+
container.registerInstance(ModelsCache, modelsCache);
|
|
22
|
+
CmsReviewFeature.register(container);
|
|
23
|
+
});
|
|
24
|
+
it("resolves the content adapter and the row provider and nothing else (R354)", ()=>{
|
|
25
|
+
const resolved = CmsReviewFeature.resolve(container);
|
|
26
|
+
const keys = Object.keys(resolved).sort();
|
|
27
|
+
expect(keys).toEqual([
|
|
28
|
+
"contentAdapter",
|
|
29
|
+
"rowProvider"
|
|
30
|
+
]);
|
|
31
|
+
expect(resolved.contentAdapter).toBe(container.resolve(CmsReviewContentAdapter));
|
|
32
|
+
expect(resolved.rowProvider).toBe(container.resolve(CmsReviewRowProvider));
|
|
33
|
+
});
|
|
34
|
+
it("binds CmsReviewGateway itself to the shared review app token, once (R347, R358)", ()=>{
|
|
35
|
+
const gateways = container.resolveAll(ReviewAppGateway);
|
|
36
|
+
expect(gateways).toHaveLength(1);
|
|
37
|
+
expect(Object.getPrototypeOf(gateways[0])).toBe(CmsReviewGateway.prototype);
|
|
38
|
+
expect(gateways[0].app).toBe("cms");
|
|
39
|
+
});
|
|
40
|
+
it("registers the gateway and the adapter as singletons", ()=>{
|
|
41
|
+
const [firstGateway] = container.resolveAll(ReviewAppGateway);
|
|
42
|
+
const [secondGateway] = container.resolveAll(ReviewAppGateway);
|
|
43
|
+
const firstAdapter = container.resolve(CmsReviewContentAdapter);
|
|
44
|
+
const secondAdapter = container.resolve(CmsReviewContentAdapter);
|
|
45
|
+
expect(firstGateway).toBe(secondGateway);
|
|
46
|
+
expect(firstAdapter).toBe(secondAdapter);
|
|
47
|
+
});
|
|
48
|
+
it("claims the CMS namespaces only", ()=>{
|
|
49
|
+
const [gateway] = container.resolveAll(ReviewAppGateway);
|
|
50
|
+
expect(gateway.canHandle("cms.article")).toBe(true);
|
|
51
|
+
expect(gateway.canHandle("wb.page")).toBe(false);
|
|
52
|
+
});
|
|
53
|
+
it("sends the CMS document and resolves with the envelope (R204)", async ()=>{
|
|
54
|
+
client.execute.mockResolvedValue({
|
|
55
|
+
cms: {
|
|
56
|
+
getCmsEntryTargetReview: {
|
|
57
|
+
data: null,
|
|
58
|
+
error: null
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
const [gateway] = container.resolveAll(ReviewAppGateway);
|
|
63
|
+
const envelope = await gateway.getTargetReview({
|
|
64
|
+
namespace: "cms.article",
|
|
65
|
+
targetRevisionId: "entry-1#0001"
|
|
66
|
+
});
|
|
67
|
+
expect(envelope).toEqual({
|
|
68
|
+
data: null,
|
|
69
|
+
error: null
|
|
70
|
+
});
|
|
71
|
+
expect(client.execute).toHaveBeenCalledTimes(1);
|
|
72
|
+
expect(client.execute.mock.calls[0][0].variables).toEqual({
|
|
73
|
+
modelId: "article",
|
|
74
|
+
revisionId: "entry-1#0001"
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
//# sourceMappingURL=feature.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/feature.test.js","sources":["../../../src/features/gateway/feature.test.ts"],"sourcesContent":["import { beforeEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/abstractions.js\";\nimport { ListCache } from \"@webiny/app-admin/features/listCache/index.js\";\nimport { ModelsCache } from \"@webiny/app-headless-cms/features/model/abstractions.js\";\nimport type { CmsModel } from \"@webiny/app-headless-cms/types.js\";\nimport { ReviewAppGateway } from \"@webiny/app-workflows/review/appGateway/abstractions.js\";\nimport { CmsReviewContentAdapter } from \"./CmsReviewContentAdapter/abstractions.js\";\nimport { CmsReviewRowProvider } from \"./CmsReviewRowProvider/abstractions.js\";\nimport { CmsReviewGateway } from \"./CmsReviewGateway/CmsReviewGateway.js\";\nimport { CmsReviewFeature } from \"./feature.js\";\n\ndescribe(\"CmsReviewFeature\", () => {\n const client = { execute: vi.fn() };\n let container: Container;\n\n beforeEach(() => {\n client.execute.mockReset();\n\n container = new Container();\n container.registerInstance(MainGraphQLClient, client);\n const modelsCache = new ListCache<CmsModel>(\"modelId\");\n container.registerInstance(ModelsCache, modelsCache);\n CmsReviewFeature.register(container);\n });\n\n it(\"resolves the content adapter and the row provider and nothing else (R354)\", () => {\n const resolved = CmsReviewFeature.resolve(container);\n const keys = Object.keys(resolved).sort();\n\n expect(keys).toEqual([\"contentAdapter\", \"rowProvider\"]);\n expect(resolved.contentAdapter).toBe(container.resolve(CmsReviewContentAdapter));\n expect(resolved.rowProvider).toBe(container.resolve(CmsReviewRowProvider));\n });\n\n it(\"binds CmsReviewGateway itself to the shared review app token, once (R347, R358)\", () => {\n const gateways = container.resolveAll(ReviewAppGateway);\n\n expect(gateways).toHaveLength(1);\n expect(Object.getPrototypeOf(gateways[0])).toBe(CmsReviewGateway.prototype);\n expect(gateways[0].app).toBe(\"cms\");\n });\n\n it(\"registers the gateway and the adapter as singletons\", () => {\n const [firstGateway] = container.resolveAll(ReviewAppGateway);\n const [secondGateway] = container.resolveAll(ReviewAppGateway);\n const firstAdapter = container.resolve(CmsReviewContentAdapter);\n const secondAdapter = container.resolve(CmsReviewContentAdapter);\n\n expect(firstGateway).toBe(secondGateway);\n expect(firstAdapter).toBe(secondAdapter);\n });\n\n it(\"claims the CMS namespaces only\", () => {\n const [gateway] = container.resolveAll(ReviewAppGateway);\n\n expect(gateway.canHandle(\"cms.article\")).toBe(true);\n expect(gateway.canHandle(\"wb.page\")).toBe(false);\n });\n\n it(\"sends the CMS document and resolves with the envelope (R204)\", async () => {\n client.execute.mockResolvedValue({\n cms: { getCmsEntryTargetReview: { data: null, error: null } }\n });\n const [gateway] = container.resolveAll(ReviewAppGateway);\n\n const envelope = await gateway.getTargetReview({\n namespace: \"cms.article\",\n targetRevisionId: \"entry-1#0001\"\n });\n\n expect(envelope).toEqual({ data: null, error: null });\n expect(client.execute).toHaveBeenCalledTimes(1);\n expect(client.execute.mock.calls[0][0].variables).toEqual({\n modelId: \"article\",\n revisionId: \"entry-1#0001\"\n });\n });\n});\n"],"names":["describe","client","vi","container","beforeEach","Container","MainGraphQLClient","modelsCache","ListCache","ModelsCache","CmsReviewFeature","it","resolved","keys","Object","expect","CmsReviewContentAdapter","CmsReviewRowProvider","gateways","ReviewAppGateway","CmsReviewGateway","firstGateway","secondGateway","firstAdapter","secondAdapter","gateway","envelope"],"mappings":";;;;;;;;;;AAgBAA,SAAS,oBAAoB;IACzB,MAAMC,SAAS;QAAE,SAASC,GAAG,EAAE;IAAG;IAClC,IAAIC;IAEJC,WAAW;QACPH,OAAO,OAAO,CAAC,SAAS;QAExBE,YAAY,IAAIE;QAChBF,UAAU,gBAAgB,CAACG,mBAAmBL;QAC9C,MAAMM,cAAc,IAAIC,UAAoB;QAC5CL,UAAU,gBAAgB,CAACM,aAAaF;QACxCG,iBAAiB,QAAQ,CAACP;IAC9B;IAEAQ,GAAG,6EAA6E;QAC5E,MAAMC,WAAWF,iBAAiB,OAAO,CAACP;QAC1C,MAAMU,OAAOC,OAAO,IAAI,CAACF,UAAU,IAAI;QAEvCG,OAAOF,MAAM,OAAO,CAAC;YAAC;YAAkB;SAAc;QACtDE,OAAOH,SAAS,cAAc,EAAE,IAAI,CAACT,UAAU,OAAO,CAACa;QACvDD,OAAOH,SAAS,WAAW,EAAE,IAAI,CAACT,UAAU,OAAO,CAACc;IACxD;IAEAN,GAAG,mFAAmF;QAClF,MAAMO,WAAWf,UAAU,UAAU,CAACgB;QAEtCJ,OAAOG,UAAU,YAAY,CAAC;QAC9BH,OAAOD,OAAO,cAAc,CAACI,QAAQ,CAAC,EAAE,GAAG,IAAI,CAACE,iBAAiB,SAAS;QAC1EL,OAAOG,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC;IACjC;IAEAP,GAAG,uDAAuD;QACtD,MAAM,CAACU,aAAa,GAAGlB,UAAU,UAAU,CAACgB;QAC5C,MAAM,CAACG,cAAc,GAAGnB,UAAU,UAAU,CAACgB;QAC7C,MAAMI,eAAepB,UAAU,OAAO,CAACa;QACvC,MAAMQ,gBAAgBrB,UAAU,OAAO,CAACa;QAExCD,OAAOM,cAAc,IAAI,CAACC;QAC1BP,OAAOQ,cAAc,IAAI,CAACC;IAC9B;IAEAb,GAAG,kCAAkC;QACjC,MAAM,CAACc,QAAQ,GAAGtB,UAAU,UAAU,CAACgB;QAEvCJ,OAAOU,QAAQ,SAAS,CAAC,gBAAgB,IAAI,CAAC;QAC9CV,OAAOU,QAAQ,SAAS,CAAC,YAAY,IAAI,CAAC;IAC9C;IAEAd,GAAG,gEAAgE;QAC/DV,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,KAAK;gBAAE,yBAAyB;oBAAE,MAAM;oBAAM,OAAO;gBAAK;YAAE;QAChE;QACA,MAAM,CAACwB,QAAQ,GAAGtB,UAAU,UAAU,CAACgB;QAEvC,MAAMO,WAAW,MAAMD,QAAQ,eAAe,CAAC;YAC3C,WAAW;YACX,kBAAkB;QACtB;QAEAV,OAAOW,UAAU,OAAO,CAAC;YAAE,MAAM;YAAM,OAAO;QAAK;QACnDX,OAAOd,OAAO,OAAO,EAAE,qBAAqB,CAAC;QAC7Cc,OAAOd,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;YACtD,SAAS;YACT,YAAY;QAChB;IACJ;AACJ"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const APPROVE_CMS_ENTRY_REVIEW_STEP = "\n mutation ApproveCmsEntryReviewStep($reviewId: ID!, $stepId: ID!, $comment: String) {\n cms {\n approveCmsEntryReviewStep(reviewId: $reviewId, stepId: $stepId, comment: $comment) {\n data {\n \n id\n workflowId\n model\n targetId\n targetRevisionId\n title\n isActive\n state\n currentStepId\n currentStepState\n currentStepType\n currentOwnerId\n currentCandidateTeamIds\n targetContext {\n folder {\n id\n type\n }\n modelId\n title\n author {\n id\n displayName\n }\n }\n workflow {\n name\n models\n }\n steps {\n id\n title\n color\n description\n type\n state\n owner {\n \n type\n id\n displayName\n identityType\n\n }\n comment\n pickedUserId\n candidateTeamIds\n candidateTeams {\n id\n name\n }\n assignmentSource\n assignment {\n source\n ruleId\n reason\n by {\n \n type\n id\n displayName\n identityType\n\n }\n }\n reachedOn\n startedOn\n finishedOn\n taskId\n runs {\n taskId\n startedOn\n finishedOn\n outcome\n reason\n }\n issues {\n fieldPath\n severity\n message\n suggestion\n }\n }\n createdBy {\n \n type\n id\n displayName\n identityType\n\n }\n cancelledBy {\n \n type\n id\n displayName\n identityType\n\n }\n createdOn\n savedOn\n lastChangedOn\n\n }\n error {\n \n code\n message\n data\n\n }\n }\n }\n }\n";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ERROR_FIELDS, REVIEW_FIELDS } from "@webiny/app-workflows/review/gateway/reviewFields.js";
|
|
2
|
+
const APPROVE_CMS_ENTRY_REVIEW_STEP = `
|
|
3
|
+
mutation ApproveCmsEntryReviewStep($reviewId: ID!, $stepId: ID!, $comment: String) {
|
|
4
|
+
cms {
|
|
5
|
+
approveCmsEntryReviewStep(reviewId: $reviewId, stepId: $stepId, comment: $comment) {
|
|
6
|
+
data {
|
|
7
|
+
${REVIEW_FIELDS}
|
|
8
|
+
}
|
|
9
|
+
error {
|
|
10
|
+
${ERROR_FIELDS}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
`;
|
|
16
|
+
export { APPROVE_CMS_ENTRY_REVIEW_STEP };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=approveCmsEntryReviewStep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/graphql/approveCmsEntryReviewStep.js","sources":["../../../../src/features/gateway/graphql/approveCmsEntryReviewStep.ts"],"sourcesContent":["import { ERROR_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\n\nexport const APPROVE_CMS_ENTRY_REVIEW_STEP = /* GraphQL */ `\n mutation ApproveCmsEntryReviewStep($reviewId: ID!, $stepId: ID!, $comment: String) {\n cms {\n approveCmsEntryReviewStep(reviewId: $reviewId, stepId: $stepId, comment: $comment) {\n data {\n ${REVIEW_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"names":["APPROVE_CMS_ENTRY_REVIEW_STEP","REVIEW_FIELDS","ERROR_FIELDS"],"mappings":";AAGO,MAAMA,gCAA8C,CAAC;;;;;oBAKxC,EAAEC,cAAc;;;oBAGhB,EAAEC,aAAa;;;;;AAKnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CANCEL_CMS_ENTRY_REVIEW = "\n mutation CancelCmsEntryReview($reviewId: ID!) {\n cms {\n cancelCmsEntryReview(reviewId: $reviewId) {\n data {\n \n id\n workflowId\n model\n targetId\n targetRevisionId\n title\n isActive\n state\n currentStepId\n currentStepState\n currentStepType\n currentOwnerId\n currentCandidateTeamIds\n targetContext {\n folder {\n id\n type\n }\n modelId\n title\n author {\n id\n displayName\n }\n }\n workflow {\n name\n models\n }\n steps {\n id\n title\n color\n description\n type\n state\n owner {\n \n type\n id\n displayName\n identityType\n\n }\n comment\n pickedUserId\n candidateTeamIds\n candidateTeams {\n id\n name\n }\n assignmentSource\n assignment {\n source\n ruleId\n reason\n by {\n \n type\n id\n displayName\n identityType\n\n }\n }\n reachedOn\n startedOn\n finishedOn\n taskId\n runs {\n taskId\n startedOn\n finishedOn\n outcome\n reason\n }\n issues {\n fieldPath\n severity\n message\n suggestion\n }\n }\n createdBy {\n \n type\n id\n displayName\n identityType\n\n }\n cancelledBy {\n \n type\n id\n displayName\n identityType\n\n }\n createdOn\n savedOn\n lastChangedOn\n\n }\n error {\n \n code\n message\n data\n\n }\n }\n }\n }\n";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ERROR_FIELDS, REVIEW_FIELDS } from "@webiny/app-workflows/review/gateway/reviewFields.js";
|
|
2
|
+
const CANCEL_CMS_ENTRY_REVIEW = `
|
|
3
|
+
mutation CancelCmsEntryReview($reviewId: ID!) {
|
|
4
|
+
cms {
|
|
5
|
+
cancelCmsEntryReview(reviewId: $reviewId) {
|
|
6
|
+
data {
|
|
7
|
+
${REVIEW_FIELDS}
|
|
8
|
+
}
|
|
9
|
+
error {
|
|
10
|
+
${ERROR_FIELDS}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
`;
|
|
16
|
+
export { CANCEL_CMS_ENTRY_REVIEW };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=cancelCmsEntryReview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/graphql/cancelCmsEntryReview.js","sources":["../../../../src/features/gateway/graphql/cancelCmsEntryReview.ts"],"sourcesContent":["import { ERROR_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\n\nexport const CANCEL_CMS_ENTRY_REVIEW = /* GraphQL */ `\n mutation CancelCmsEntryReview($reviewId: ID!) {\n cms {\n cancelCmsEntryReview(reviewId: $reviewId) {\n data {\n ${REVIEW_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"names":["CANCEL_CMS_ENTRY_REVIEW","REVIEW_FIELDS","ERROR_FIELDS"],"mappings":";AAGO,MAAMA,0BAAwC,CAAC;;;;;oBAKlC,EAAEC,cAAc;;;oBAGhB,EAAEC,aAAa;;;;;AAKnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CANCEL_CMS_ENTRY_REVIEWS_FOR_DELETE = "\n mutation CancelCmsEntryReviewsForDelete(\n $modelId: ID!\n $entryId: ID!\n $revisionId: ID\n $action: WorkflowsReviewsForDeleteAction!\n ) {\n cms {\n cancelCmsEntryReviewsForDelete(\n modelId: $modelId\n entryId: $entryId\n revisionId: $revisionId\n action: $action\n ) {\n data {\n \n id\n workflowId\n model\n targetId\n targetRevisionId\n title\n isActive\n state\n currentStepId\n currentStepState\n currentStepType\n currentOwnerId\n currentCandidateTeamIds\n targetContext {\n folder {\n id\n type\n }\n modelId\n title\n author {\n id\n displayName\n }\n }\n workflow {\n name\n models\n }\n steps {\n id\n title\n color\n description\n type\n state\n owner {\n \n type\n id\n displayName\n identityType\n\n }\n comment\n pickedUserId\n candidateTeamIds\n candidateTeams {\n id\n name\n }\n assignmentSource\n assignment {\n source\n ruleId\n reason\n by {\n \n type\n id\n displayName\n identityType\n\n }\n }\n reachedOn\n startedOn\n finishedOn\n taskId\n runs {\n taskId\n startedOn\n finishedOn\n outcome\n reason\n }\n issues {\n fieldPath\n severity\n message\n suggestion\n }\n }\n createdBy {\n \n type\n id\n displayName\n identityType\n\n }\n cancelledBy {\n \n type\n id\n displayName\n identityType\n\n }\n createdOn\n savedOn\n lastChangedOn\n\n }\n error {\n \n code\n message\n data\n\n }\n }\n }\n }\n";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ERROR_FIELDS, REVIEW_FIELDS } from "@webiny/app-workflows/review/gateway/reviewFields.js";
|
|
2
|
+
const CANCEL_CMS_ENTRY_REVIEWS_FOR_DELETE = `
|
|
3
|
+
mutation CancelCmsEntryReviewsForDelete(
|
|
4
|
+
$modelId: ID!
|
|
5
|
+
$entryId: ID!
|
|
6
|
+
$revisionId: ID
|
|
7
|
+
$action: WorkflowsReviewsForDeleteAction!
|
|
8
|
+
) {
|
|
9
|
+
cms {
|
|
10
|
+
cancelCmsEntryReviewsForDelete(
|
|
11
|
+
modelId: $modelId
|
|
12
|
+
entryId: $entryId
|
|
13
|
+
revisionId: $revisionId
|
|
14
|
+
action: $action
|
|
15
|
+
) {
|
|
16
|
+
data {
|
|
17
|
+
${REVIEW_FIELDS}
|
|
18
|
+
}
|
|
19
|
+
error {
|
|
20
|
+
${ERROR_FIELDS}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
`;
|
|
26
|
+
export { CANCEL_CMS_ENTRY_REVIEWS_FOR_DELETE };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=cancelCmsEntryReviewsForDelete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/graphql/cancelCmsEntryReviewsForDelete.js","sources":["../../../../src/features/gateway/graphql/cancelCmsEntryReviewsForDelete.ts"],"sourcesContent":["import { ERROR_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\n\nexport const CANCEL_CMS_ENTRY_REVIEWS_FOR_DELETE = /* GraphQL */ `\n mutation CancelCmsEntryReviewsForDelete(\n $modelId: ID!\n $entryId: ID!\n $revisionId: ID\n $action: WorkflowsReviewsForDeleteAction!\n ) {\n cms {\n cancelCmsEntryReviewsForDelete(\n modelId: $modelId\n entryId: $entryId\n revisionId: $revisionId\n action: $action\n ) {\n data {\n ${REVIEW_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"names":["CANCEL_CMS_ENTRY_REVIEWS_FOR_DELETE","REVIEW_FIELDS","ERROR_FIELDS"],"mappings":";AAGO,MAAMA,sCAAoD,CAAC;;;;;;;;;;;;;;;oBAe9C,EAAEC,cAAc;;;oBAGhB,EAAEC,aAAa;;;;;AAKnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const GET_CMS_ENTRY_REVIEW = "\n query GetCmsEntryReview($id: ID!) {\n cms {\n getCmsEntryReview(id: $id) {\n data {\n \n review {\n \n id\n workflowId\n model\n targetId\n targetRevisionId\n title\n isActive\n state\n currentStepId\n currentStepState\n currentStepType\n currentOwnerId\n currentCandidateTeamIds\n targetContext {\n folder {\n id\n type\n }\n modelId\n title\n author {\n id\n displayName\n }\n }\n workflow {\n name\n models\n }\n steps {\n id\n title\n color\n description\n type\n state\n owner {\n \n type\n id\n displayName\n identityType\n\n }\n comment\n pickedUserId\n candidateTeamIds\n candidateTeams {\n id\n name\n }\n assignmentSource\n assignment {\n source\n ruleId\n reason\n by {\n \n type\n id\n displayName\n identityType\n\n }\n }\n reachedOn\n startedOn\n finishedOn\n taskId\n runs {\n taskId\n startedOn\n finishedOn\n outcome\n reason\n }\n issues {\n fieldPath\n severity\n message\n suggestion\n }\n }\n createdBy {\n \n type\n id\n displayName\n identityType\n\n }\n cancelledBy {\n \n type\n id\n displayName\n identityType\n\n }\n createdOn\n savedOn\n lastChangedOn\n\n steps {\n \n assignments {\n id\n kind\n userId\n userDisplayName\n assignedOn\n source\n ruleId\n by {\n \n type\n id\n displayName\n identityType\n\n }\n reason\n }\n\n }\n }\n flags {\n \n canStart\n canTakeOver\n canApprove\n canReject\n canCancel\n canReassign\n canRestart\n\n }\n\n }\n error {\n \n code\n message\n data\n\n }\n }\n }\n }\n";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ERROR_FIELDS, REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS } from "@webiny/app-workflows/review/gateway/reviewFields.js";
|
|
2
|
+
const GET_CMS_ENTRY_REVIEW = `
|
|
3
|
+
query GetCmsEntryReview($id: ID!) {
|
|
4
|
+
cms {
|
|
5
|
+
getCmsEntryReview(id: $id) {
|
|
6
|
+
data {
|
|
7
|
+
${REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS}
|
|
8
|
+
}
|
|
9
|
+
error {
|
|
10
|
+
${ERROR_FIELDS}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
`;
|
|
16
|
+
export { GET_CMS_ENTRY_REVIEW };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=getCmsEntryReview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/graphql/getCmsEntryReview.js","sources":["../../../../src/features/gateway/graphql/getCmsEntryReview.ts"],"sourcesContent":["import { ERROR_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\n\nexport const GET_CMS_ENTRY_REVIEW = /* GraphQL */ `\n query GetCmsEntryReview($id: ID!) {\n cms {\n getCmsEntryReview(id: $id) {\n data {\n ${REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"names":["GET_CMS_ENTRY_REVIEW","REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS","ERROR_FIELDS"],"mappings":";AAGO,MAAMA,uBAAqC,CAAC;;;;;oBAK/B,EAAEC,wCAAwC;;;oBAG1C,EAAEC,aAAa;;;;;AAKnC,CAAC"}
|