@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,174 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { Container } from "@webiny/di";
|
|
3
|
+
import { CmsModelContext } from "@webiny/app-headless-cms/features/contentEntry/abstractions.js";
|
|
4
|
+
import { RevisionsListPresenter } from "@webiny/app-headless-cms/presentation/contentEntries/revisionsList/abstractions.js";
|
|
5
|
+
import { CmsEntryReview } from "../features/editorReview/abstractions.js";
|
|
6
|
+
import { createEntrySession } from "../testing/createEntrySession.js";
|
|
7
|
+
import { MODEL, SINGLETON_MODEL } from "../testing/models.js";
|
|
8
|
+
import { BOUND_NO_REVIEW, FAILED, IN_REVIEW, LOADING, NO_WORKFLOW } from "../testing/reviewStates.js";
|
|
9
|
+
import { CmsWorkflowsFeature } from "./feature.js";
|
|
10
|
+
import { CmsRevisionsListPresenterDecorator } from "./CmsRevisionsListPresenterDecorator.js";
|
|
11
|
+
const DRAFT = {
|
|
12
|
+
id: "entry-1#0002",
|
|
13
|
+
meta: {
|
|
14
|
+
status: "draft"
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const PUBLISHED = {
|
|
18
|
+
id: "entry-1#0001",
|
|
19
|
+
meta: {
|
|
20
|
+
status: "published"
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const init = vi.fn(async ()=>void 0);
|
|
24
|
+
class BaseRevisionsListPresenter {
|
|
25
|
+
get vm() {
|
|
26
|
+
return {
|
|
27
|
+
loading: false,
|
|
28
|
+
revisions: [
|
|
29
|
+
DRAFT,
|
|
30
|
+
PUBLISHED
|
|
31
|
+
],
|
|
32
|
+
items: [
|
|
33
|
+
{
|
|
34
|
+
revision: DRAFT,
|
|
35
|
+
canPublish: true,
|
|
36
|
+
canUnpublish: false
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
revision: PUBLISHED,
|
|
40
|
+
canPublish: false,
|
|
41
|
+
canUnpublish: true
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
visible: true
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
constructor(){
|
|
48
|
+
this.init = init;
|
|
49
|
+
this.show = vi.fn();
|
|
50
|
+
this.hide = vi.fn();
|
|
51
|
+
this.createRevision = vi.fn(async ()=>null);
|
|
52
|
+
this.publishRevision = vi.fn(async ()=>true);
|
|
53
|
+
this.unpublishRevision = vi.fn(async ()=>true);
|
|
54
|
+
this.updateRevisionNote = vi.fn(async ()=>true);
|
|
55
|
+
this.deleteRevision = vi.fn(async ()=>true);
|
|
56
|
+
this.dispose = vi.fn();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const BasePresenter = RevisionsListPresenter.createImplementation({
|
|
60
|
+
implementation: BaseRevisionsListPresenter,
|
|
61
|
+
dependencies: []
|
|
62
|
+
});
|
|
63
|
+
const registerDecorator = (container)=>{
|
|
64
|
+
container.registerDecorator(CmsRevisionsListPresenterDecorator);
|
|
65
|
+
};
|
|
66
|
+
const resolvePresenter = (model, review, register = registerDecorator)=>{
|
|
67
|
+
const fake = createEntrySession(review);
|
|
68
|
+
const container = new Container();
|
|
69
|
+
container.registerInstance(CmsEntryReview, fake.session);
|
|
70
|
+
container.registerInstance(CmsModelContext, {
|
|
71
|
+
getModel: ()=>model,
|
|
72
|
+
setModel: vi.fn()
|
|
73
|
+
});
|
|
74
|
+
container.register(BasePresenter).inSingletonScope();
|
|
75
|
+
register(container);
|
|
76
|
+
return {
|
|
77
|
+
...fake,
|
|
78
|
+
presenter: container.resolve(RevisionsListPresenter)
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
const flags = (presenter)=>presenter.vm.items.map((item)=>[
|
|
82
|
+
item.canPublish,
|
|
83
|
+
item.canUnpublish
|
|
84
|
+
]);
|
|
85
|
+
describe("CmsRevisionsListPresenterDecorator", ()=>{
|
|
86
|
+
it("keeps Publish and Unpublish on a model without a workflow", ()=>{
|
|
87
|
+
const { presenter } = resolvePresenter(MODEL, NO_WORKFLOW);
|
|
88
|
+
expect(flags(presenter)).toEqual([
|
|
89
|
+
[
|
|
90
|
+
true,
|
|
91
|
+
false
|
|
92
|
+
],
|
|
93
|
+
[
|
|
94
|
+
false,
|
|
95
|
+
true
|
|
96
|
+
]
|
|
97
|
+
]);
|
|
98
|
+
});
|
|
99
|
+
it.each([
|
|
100
|
+
[
|
|
101
|
+
"bound without a review",
|
|
102
|
+
BOUND_NO_REVIEW
|
|
103
|
+
],
|
|
104
|
+
[
|
|
105
|
+
"in review",
|
|
106
|
+
IN_REVIEW
|
|
107
|
+
],
|
|
108
|
+
[
|
|
109
|
+
"loading",
|
|
110
|
+
LOADING
|
|
111
|
+
],
|
|
112
|
+
[
|
|
113
|
+
"failed",
|
|
114
|
+
FAILED
|
|
115
|
+
]
|
|
116
|
+
])("hides Publish but keeps Unpublish on a workflow model (%s)", (_name, review)=>{
|
|
117
|
+
const { presenter } = resolvePresenter(MODEL, review);
|
|
118
|
+
expect(flags(presenter)).toEqual([
|
|
119
|
+
[
|
|
120
|
+
false,
|
|
121
|
+
false
|
|
122
|
+
],
|
|
123
|
+
[
|
|
124
|
+
false,
|
|
125
|
+
true
|
|
126
|
+
]
|
|
127
|
+
]);
|
|
128
|
+
expect(presenter.vm.revisions).toEqual([
|
|
129
|
+
DRAFT,
|
|
130
|
+
PUBLISHED
|
|
131
|
+
]);
|
|
132
|
+
});
|
|
133
|
+
it("leaves a singleton model alone, it is never bound to a workflow", ()=>{
|
|
134
|
+
const { presenter } = resolvePresenter(SINGLETON_MODEL, LOADING);
|
|
135
|
+
expect(flags(presenter)).toEqual([
|
|
136
|
+
[
|
|
137
|
+
true,
|
|
138
|
+
false
|
|
139
|
+
],
|
|
140
|
+
[
|
|
141
|
+
false,
|
|
142
|
+
true
|
|
143
|
+
]
|
|
144
|
+
]);
|
|
145
|
+
});
|
|
146
|
+
it("is registered by the CMS workflows feature", ()=>{
|
|
147
|
+
const { presenter } = resolvePresenter(MODEL, BOUND_NO_REVIEW, (container)=>{
|
|
148
|
+
CmsWorkflowsFeature.register(container);
|
|
149
|
+
});
|
|
150
|
+
expect(flags(presenter)).toEqual([
|
|
151
|
+
[
|
|
152
|
+
false,
|
|
153
|
+
false
|
|
154
|
+
],
|
|
155
|
+
[
|
|
156
|
+
false,
|
|
157
|
+
true
|
|
158
|
+
]
|
|
159
|
+
]);
|
|
160
|
+
});
|
|
161
|
+
it("follows the review state as it loads", ()=>{
|
|
162
|
+
const { presenter, setVm } = resolvePresenter(MODEL, LOADING);
|
|
163
|
+
expect(presenter.vm.items[0].canPublish).toBe(false);
|
|
164
|
+
setVm(NO_WORKFLOW);
|
|
165
|
+
expect(presenter.vm.items[0].canPublish).toBe(true);
|
|
166
|
+
});
|
|
167
|
+
it("passes the actions to the base presenter", async ()=>{
|
|
168
|
+
const { presenter } = resolvePresenter(MODEL, NO_WORKFLOW);
|
|
169
|
+
await presenter.init("entry-1");
|
|
170
|
+
expect(init).toHaveBeenCalledWith("entry-1");
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
//# sourceMappingURL=CmsRevisionsListPresenterDecorator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/CmsRevisionsListPresenterDecorator.test.js","sources":["../../src/presentation/CmsRevisionsListPresenterDecorator.test.ts"],"sourcesContent":["import { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport type { CmsContentEntryRevision } from \"@webiny/app-headless-cms/types.js\";\nimport type { CmsModel } from \"@webiny/app-headless-cms-common/types/index.js\";\nimport { CmsModelContext } from \"@webiny/app-headless-cms/features/contentEntry/abstractions.js\";\nimport { RevisionsListPresenter } from \"@webiny/app-headless-cms/presentation/contentEntries/revisionsList/abstractions.js\";\nimport { CmsEntryReview } from \"~/features/editorReview/abstractions.js\";\nimport { createEntrySession } from \"~/testing/createEntrySession.js\";\nimport { MODEL } from \"~/testing/models.js\";\nimport { SINGLETON_MODEL } from \"~/testing/models.js\";\nimport { BOUND_NO_REVIEW } from \"~/testing/reviewStates.js\";\nimport { FAILED } from \"~/testing/reviewStates.js\";\nimport { IN_REVIEW } from \"~/testing/reviewStates.js\";\nimport { LOADING } from \"~/testing/reviewStates.js\";\nimport { NO_WORKFLOW } from \"~/testing/reviewStates.js\";\nimport { CmsWorkflowsFeature } from \"~/presentation/feature.js\";\nimport { CmsRevisionsListPresenterDecorator } from \"./CmsRevisionsListPresenterDecorator.js\";\n\nconst DRAFT = { id: \"entry-1#0002\", meta: { status: \"draft\" } } as CmsContentEntryRevision;\nconst PUBLISHED = { id: \"entry-1#0001\", meta: { status: \"published\" } } as CmsContentEntryRevision;\n\nconst init = vi.fn(async () => undefined);\n\nclass BaseRevisionsListPresenter implements RevisionsListPresenter.Interface {\n public get vm(): RevisionsListPresenter.ViewModel {\n return {\n loading: false,\n revisions: [DRAFT, PUBLISHED],\n items: [\n { revision: DRAFT, canPublish: true, canUnpublish: false },\n { revision: PUBLISHED, canPublish: false, canUnpublish: true }\n ],\n visible: true\n };\n }\n\n public init = init;\n public show = vi.fn();\n public hide = vi.fn();\n public createRevision = vi.fn(async () => null);\n public publishRevision = vi.fn(async () => true);\n public unpublishRevision = vi.fn(async () => true);\n public updateRevisionNote = vi.fn(async () => true);\n public deleteRevision = vi.fn(async () => true);\n public dispose = vi.fn();\n}\n\nconst BasePresenter = RevisionsListPresenter.createImplementation({\n implementation: BaseRevisionsListPresenter,\n dependencies: []\n});\n\nconst registerDecorator = (container: Container): void => {\n container.registerDecorator(CmsRevisionsListPresenterDecorator);\n};\n\nconst resolvePresenter = (\n model: CmsModel,\n review: Parameters<typeof createEntrySession>[0],\n register: (container: Container) => void = registerDecorator\n) => {\n const fake = createEntrySession(review);\n const container = new Container();\n container.registerInstance(CmsEntryReview, fake.session);\n container.registerInstance(CmsModelContext, { getModel: () => model, setModel: vi.fn() });\n container.register(BasePresenter).inSingletonScope();\n register(container);\n return { ...fake, presenter: container.resolve(RevisionsListPresenter) };\n};\n\nconst flags = (presenter: RevisionsListPresenter.Interface) => {\n return presenter.vm.items.map(item => [item.canPublish, item.canUnpublish]);\n};\n\ndescribe(\"CmsRevisionsListPresenterDecorator\", () => {\n it(\"keeps Publish and Unpublish on a model without a workflow\", () => {\n const { presenter } = resolvePresenter(MODEL, NO_WORKFLOW);\n\n expect(flags(presenter)).toEqual([\n [true, false],\n [false, true]\n ]);\n });\n\n it.each([\n [\"bound without a review\", BOUND_NO_REVIEW],\n [\"in review\", IN_REVIEW],\n [\"loading\", LOADING],\n [\"failed\", FAILED]\n ])(\"hides Publish but keeps Unpublish on a workflow model (%s)\", (_name, review) => {\n const { presenter } = resolvePresenter(MODEL, review);\n\n expect(flags(presenter)).toEqual([\n [false, false],\n [false, true]\n ]);\n expect(presenter.vm.revisions).toEqual([DRAFT, PUBLISHED]);\n });\n\n it(\"leaves a singleton model alone, it is never bound to a workflow\", () => {\n const { presenter } = resolvePresenter(SINGLETON_MODEL, LOADING);\n\n expect(flags(presenter)).toEqual([\n [true, false],\n [false, true]\n ]);\n });\n\n it(\"is registered by the CMS workflows feature\", () => {\n const { presenter } = resolvePresenter(MODEL, BOUND_NO_REVIEW, container => {\n CmsWorkflowsFeature.register(container);\n });\n\n expect(flags(presenter)).toEqual([\n [false, false],\n [false, true]\n ]);\n });\n\n it(\"follows the review state as it loads\", () => {\n const { presenter, setVm } = resolvePresenter(MODEL, LOADING);\n expect(presenter.vm.items[0].canPublish).toBe(false);\n\n setVm(NO_WORKFLOW);\n\n expect(presenter.vm.items[0].canPublish).toBe(true);\n });\n\n it(\"passes the actions to the base presenter\", async () => {\n const { presenter } = resolvePresenter(MODEL, NO_WORKFLOW);\n\n await presenter.init(\"entry-1\");\n\n expect(init).toHaveBeenCalledWith(\"entry-1\");\n });\n});\n"],"names":["DRAFT","PUBLISHED","init","vi","undefined","BaseRevisionsListPresenter","BasePresenter","RevisionsListPresenter","registerDecorator","container","CmsRevisionsListPresenterDecorator","resolvePresenter","model","review","register","fake","createEntrySession","Container","CmsEntryReview","CmsModelContext","flags","presenter","item","describe","it","MODEL","NO_WORKFLOW","expect","BOUND_NO_REVIEW","IN_REVIEW","LOADING","FAILED","_name","SINGLETON_MODEL","CmsWorkflowsFeature","setVm"],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ListModelsUseCase } from "@webiny/app-headless-cms/features/model/listModels/abstractions.js";
|
|
2
|
+
import { Notifications } from "@webiny/app-admin/features/notifications/abstractions.js";
|
|
3
|
+
import { IdentityContext } from "@webiny/app-admin/features/security/IdentityContext/abstractions.js";
|
|
4
|
+
import { CmsContentReviewsPresenter as Abstraction } from "./abstractions.js";
|
|
5
|
+
declare class CmsContentReviewsPresenterImpl implements Abstraction.Interface {
|
|
6
|
+
private listModels;
|
|
7
|
+
private notifications;
|
|
8
|
+
private identityContext;
|
|
9
|
+
private _loading;
|
|
10
|
+
private _contentTypes;
|
|
11
|
+
private loadedFor;
|
|
12
|
+
private pendingFor;
|
|
13
|
+
private pending;
|
|
14
|
+
private stopWatching;
|
|
15
|
+
constructor(listModels: ListModelsUseCase.Interface, notifications: Notifications.Interface, identityContext: IdentityContext.Interface);
|
|
16
|
+
get vm(): Abstraction.ViewModel;
|
|
17
|
+
init(): Promise<void>;
|
|
18
|
+
dispose(): void;
|
|
19
|
+
private signedInUserId;
|
|
20
|
+
private loadFor;
|
|
21
|
+
private load;
|
|
22
|
+
private applyModels;
|
|
23
|
+
private applyFailure;
|
|
24
|
+
}
|
|
25
|
+
export declare const CmsContentReviewsPresenter: typeof CmsContentReviewsPresenterImpl & {
|
|
26
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ICmsContentReviewsPresenter>;
|
|
27
|
+
};
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { makeAutoObservable, reaction } from "mobx";
|
|
2
|
+
import { ListModelsUseCase } from "@webiny/app-headless-cms/features/model/listModels/abstractions.js";
|
|
3
|
+
import { Notifications } from "@webiny/app-admin/features/notifications/abstractions.js";
|
|
4
|
+
import { IdentityContext } from "@webiny/app-admin/features/security/IdentityContext/abstractions.js";
|
|
5
|
+
import { createAppName } from "../../utils/appName.js";
|
|
6
|
+
import { CmsContentReviewsPresenter } from "./abstractions.js";
|
|
7
|
+
import { toContentTypes } from "./toContentTypes.js";
|
|
8
|
+
class CmsContentReviewsPresenterImpl {
|
|
9
|
+
constructor(listModels, notifications, identityContext){
|
|
10
|
+
this.listModels = listModels;
|
|
11
|
+
this.notifications = notifications;
|
|
12
|
+
this.identityContext = identityContext;
|
|
13
|
+
this._loading = true;
|
|
14
|
+
this._contentTypes = [];
|
|
15
|
+
this.loadedFor = null;
|
|
16
|
+
this.pendingFor = null;
|
|
17
|
+
this.pending = null;
|
|
18
|
+
this.stopWatching = null;
|
|
19
|
+
makeAutoObservable(this, {
|
|
20
|
+
listModels: false,
|
|
21
|
+
notifications: false,
|
|
22
|
+
identityContext: false,
|
|
23
|
+
pending: false,
|
|
24
|
+
stopWatching: false
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
get vm() {
|
|
28
|
+
const namespaces = this._contentTypes.map((contentType)=>createAppName(contentType));
|
|
29
|
+
const options = this._contentTypes.map((contentType)=>({
|
|
30
|
+
label: contentType.name,
|
|
31
|
+
value: contentType.modelId,
|
|
32
|
+
app: "cms",
|
|
33
|
+
icon: "devices_other"
|
|
34
|
+
}));
|
|
35
|
+
return {
|
|
36
|
+
loading: this._loading,
|
|
37
|
+
namespaces,
|
|
38
|
+
options
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
init() {
|
|
42
|
+
if (!this.stopWatching) this.stopWatching = reaction(()=>this.signedInUserId(), (userId)=>{
|
|
43
|
+
this.loadFor(userId);
|
|
44
|
+
});
|
|
45
|
+
return this.loadFor(this.signedInUserId());
|
|
46
|
+
}
|
|
47
|
+
dispose() {
|
|
48
|
+
if (this.stopWatching) this.stopWatching();
|
|
49
|
+
this.stopWatching = null;
|
|
50
|
+
}
|
|
51
|
+
signedInUserId() {
|
|
52
|
+
const identity = this.identityContext.getIdentity();
|
|
53
|
+
if (!identity.isAuthenticated) return null;
|
|
54
|
+
return identity.id;
|
|
55
|
+
}
|
|
56
|
+
loadFor(userId) {
|
|
57
|
+
if (null === userId) return Promise.resolve();
|
|
58
|
+
if (this.loadedFor === userId) return Promise.resolve();
|
|
59
|
+
if (this.pending && this.pendingFor === userId) return this.pending;
|
|
60
|
+
this.pendingFor = userId;
|
|
61
|
+
this.pending = this.load(userId);
|
|
62
|
+
return this.pending;
|
|
63
|
+
}
|
|
64
|
+
async load(userId) {
|
|
65
|
+
try {
|
|
66
|
+
const models = await this.listModels.execute();
|
|
67
|
+
this.applyModels(userId, models);
|
|
68
|
+
} catch (error) {
|
|
69
|
+
this.applyFailure(userId, error);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
applyModels(userId, models) {
|
|
73
|
+
if (this.pendingFor !== userId) return;
|
|
74
|
+
this.pending = null;
|
|
75
|
+
this.pendingFor = null;
|
|
76
|
+
this.loadedFor = userId;
|
|
77
|
+
this._contentTypes = toContentTypes(models);
|
|
78
|
+
this._loading = false;
|
|
79
|
+
}
|
|
80
|
+
applyFailure(userId, error) {
|
|
81
|
+
if (this.pendingFor !== userId) return;
|
|
82
|
+
this.pending = null;
|
|
83
|
+
this.pendingFor = null;
|
|
84
|
+
this._contentTypes = [];
|
|
85
|
+
this._loading = false;
|
|
86
|
+
console.error("[CmsContentReviewsPresenter] Could not load the content types.", error);
|
|
87
|
+
this.notifications.error({
|
|
88
|
+
title: "Could not load the content types",
|
|
89
|
+
description: "Content Reviews will not update live. Reload the page to try again."
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const CmsContentReviewsPresenter_CmsContentReviewsPresenter = CmsContentReviewsPresenter.createImplementation({
|
|
94
|
+
implementation: CmsContentReviewsPresenterImpl,
|
|
95
|
+
dependencies: [
|
|
96
|
+
ListModelsUseCase,
|
|
97
|
+
Notifications,
|
|
98
|
+
IdentityContext
|
|
99
|
+
]
|
|
100
|
+
});
|
|
101
|
+
export { CmsContentReviewsPresenter_CmsContentReviewsPresenter as CmsContentReviewsPresenter };
|
|
102
|
+
|
|
103
|
+
//# sourceMappingURL=CmsContentReviewsPresenter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/contentReviews/CmsContentReviewsPresenter.js","sources":["../../../src/presentation/contentReviews/CmsContentReviewsPresenter.ts"],"sourcesContent":["import { makeAutoObservable } from \"mobx\";\nimport { reaction } from \"mobx\";\nimport { ListModelsUseCase } from \"@webiny/app-headless-cms/features/model/listModels/abstractions.js\";\nimport { Notifications } from \"@webiny/app-admin/features/notifications/abstractions.js\";\nimport { IdentityContext } from \"@webiny/app-admin/features/security/IdentityContext/abstractions.js\";\nimport { createAppName } from \"~/utils/appName.js\";\nimport { CmsContentReviewsPresenter as Abstraction } from \"./abstractions.js\";\nimport type { CmsContentTypeOption } from \"./abstractions.js\";\nimport type { ContentType } from \"./abstractions.js\";\nimport type { ListedModel } from \"./abstractions.js\";\nimport { toContentTypes } from \"./toContentTypes.js\";\n\ntype PrivateMembers =\n | \"listModels\"\n | \"notifications\"\n | \"identityContext\"\n | \"pending\"\n | \"stopWatching\";\n\nclass CmsContentReviewsPresenterImpl implements Abstraction.Interface {\n private _loading = true;\n private _contentTypes: ContentType[] = [];\n // The signed-in user the model list was loaded for; a failed list leaves it empty to retry.\n private loadedFor: string | null = null;\n private pendingFor: string | null = null;\n private pending: Promise<void> | null = null;\n private stopWatching: (() => void) | null = null;\n\n constructor(\n private listModels: ListModelsUseCase.Interface,\n private notifications: Notifications.Interface,\n private identityContext: IdentityContext.Interface\n ) {\n makeAutoObservable<CmsContentReviewsPresenterImpl, PrivateMembers>(this, {\n listModels: false,\n notifications: false,\n identityContext: false,\n pending: false,\n stopWatching: false\n });\n }\n\n get vm(): Abstraction.ViewModel {\n const namespaces = this._contentTypes.map(contentType => {\n return createAppName(contentType);\n });\n const options: CmsContentTypeOption[] = this._contentTypes.map(contentType => {\n return {\n label: contentType.name,\n value: contentType.modelId,\n app: \"cms\",\n icon: \"devices_other\"\n };\n });\n\n return { loading: this._loading, namespaces, options };\n }\n\n /*\n * The model list needs a signed-in user: the presenter is mounted at the app root, before\n * sign-in completes. It loads once there is one and again when a user signs in after a failure.\n */\n init(): Promise<void> {\n if (!this.stopWatching) {\n this.stopWatching = reaction(\n () => this.signedInUserId(),\n userId => {\n void this.loadFor(userId);\n }\n );\n }\n return this.loadFor(this.signedInUserId());\n }\n\n dispose(): void {\n if (this.stopWatching) {\n this.stopWatching();\n }\n this.stopWatching = null;\n }\n\n private signedInUserId(): string | null {\n const identity = this.identityContext.getIdentity();\n if (!identity.isAuthenticated) {\n return null;\n }\n return identity.id;\n }\n\n private loadFor(userId: string | null): Promise<void> {\n // No one is signed in yet: the API would refuse the list.\n if (userId === null) {\n return Promise.resolve();\n }\n if (this.loadedFor === userId) {\n return Promise.resolve();\n }\n // StrictMode runs effects twice; one list is in flight per user.\n if (this.pending && this.pendingFor === userId) {\n return this.pending;\n }\n this.pendingFor = userId;\n this.pending = this.load(userId);\n return this.pending;\n }\n\n private async load(userId: string): Promise<void> {\n try {\n const models = await this.listModels.execute();\n this.applyModels(userId, models);\n } catch (error) {\n this.applyFailure(userId, error);\n }\n }\n\n private applyModels(userId: string, models: ListedModel[]): void {\n // A newer user's list owns the state now.\n if (this.pendingFor !== userId) {\n return;\n }\n this.pending = null;\n this.pendingFor = null;\n this.loadedFor = userId;\n this._contentTypes = toContentTypes(models);\n this._loading = false;\n }\n\n private applyFailure(userId: string, error: unknown): void {\n if (this.pendingFor !== userId) {\n return;\n }\n this.pending = null;\n this.pendingFor = null;\n this._contentTypes = [];\n this._loading = false;\n console.error(\"[CmsContentReviewsPresenter] Could not load the content types.\", error);\n // Without the model list the list has no namespaces to follow: say so once per attempt.\n this.notifications.error({\n title: \"Could not load the content types\",\n description: \"Content Reviews will not update live. Reload the page to try again.\"\n });\n }\n}\n\nexport const CmsContentReviewsPresenter = Abstraction.createImplementation({\n implementation: CmsContentReviewsPresenterImpl,\n dependencies: [ListModelsUseCase, Notifications, IdentityContext]\n});\n"],"names":["CmsContentReviewsPresenterImpl","listModels","notifications","identityContext","makeAutoObservable","namespaces","contentType","createAppName","options","reaction","userId","identity","Promise","models","error","toContentTypes","console","CmsContentReviewsPresenter","Abstraction","ListModelsUseCase","Notifications","IdentityContext"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { Container } from "@webiny/di";
|
|
3
|
+
import { ListModelsUseCase } from "@webiny/app-headless-cms/features/model/listModels/abstractions.js";
|
|
4
|
+
import { Notifications } from "@webiny/app-admin/features/notifications/abstractions.js";
|
|
5
|
+
import { IdentityContextFeature } from "@webiny/app-admin/features/security/IdentityContext/feature.js";
|
|
6
|
+
import { IdentityContext } from "@webiny/app-admin/features/security/IdentityContext/abstractions.js";
|
|
7
|
+
import { Identity } from "@webiny/app-admin/domain/Identity.js";
|
|
8
|
+
import { CmsContentReviewsPresenter } from "./abstractions.js";
|
|
9
|
+
import { CmsContentReviewsPresenterFeature } from "./feature.js";
|
|
10
|
+
const FAILURE = {
|
|
11
|
+
title: "Could not load the content types",
|
|
12
|
+
description: "Content Reviews will not update live. Reload the page to try again."
|
|
13
|
+
};
|
|
14
|
+
const model = (modelId, name, overrides = {})=>({
|
|
15
|
+
modelId,
|
|
16
|
+
name,
|
|
17
|
+
tags: [],
|
|
18
|
+
...overrides
|
|
19
|
+
});
|
|
20
|
+
const user = (id)=>Identity.createAuthenticated({
|
|
21
|
+
id,
|
|
22
|
+
type: "admin",
|
|
23
|
+
displayName: "Maja Kos",
|
|
24
|
+
roles: [],
|
|
25
|
+
teams: [],
|
|
26
|
+
permissions: [],
|
|
27
|
+
profile: {
|
|
28
|
+
external: false
|
|
29
|
+
},
|
|
30
|
+
currentTenant: {
|
|
31
|
+
id: "root",
|
|
32
|
+
name: "Root"
|
|
33
|
+
},
|
|
34
|
+
defaultTenant: {
|
|
35
|
+
id: "root",
|
|
36
|
+
name: "Root"
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
const flush = async ()=>{
|
|
40
|
+
await new Promise((resolve)=>{
|
|
41
|
+
setTimeout(resolve, 0);
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
const setup = (execute, params = {})=>{
|
|
45
|
+
const notifications = {
|
|
46
|
+
notify: vi.fn(),
|
|
47
|
+
success: vi.fn(),
|
|
48
|
+
warning: vi.fn(),
|
|
49
|
+
error: vi.fn()
|
|
50
|
+
};
|
|
51
|
+
const container = new Container();
|
|
52
|
+
container.registerInstance(ListModelsUseCase, {
|
|
53
|
+
execute
|
|
54
|
+
});
|
|
55
|
+
container.registerInstance(Notifications, notifications);
|
|
56
|
+
IdentityContextFeature.register(container);
|
|
57
|
+
const identityContext = container.resolve(IdentityContext);
|
|
58
|
+
if (false !== params.signedIn) identityContext.setIdentity(user("user-1"));
|
|
59
|
+
CmsContentReviewsPresenterFeature.register(container);
|
|
60
|
+
return {
|
|
61
|
+
presenter: container.resolve(CmsContentReviewsPresenter),
|
|
62
|
+
notifications,
|
|
63
|
+
identityContext
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
describe("CmsContentReviewsPresenter", ()=>{
|
|
67
|
+
afterEach(()=>{
|
|
68
|
+
vi.restoreAllMocks();
|
|
69
|
+
});
|
|
70
|
+
it("starts loading with nothing", ()=>{
|
|
71
|
+
const { presenter } = setup(()=>new Promise(()=>void 0));
|
|
72
|
+
expect(presenter.vm).toEqual({
|
|
73
|
+
loading: true,
|
|
74
|
+
namespaces: [],
|
|
75
|
+
options: []
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
it("exposes the namespaces and filter options of the models a workflow can bind, sorted by name", async ()=>{
|
|
79
|
+
const { presenter, notifications } = setup(async ()=>[
|
|
80
|
+
model("press", "Press release"),
|
|
81
|
+
model("article", "Article"),
|
|
82
|
+
model("hidden", "Hidden", {
|
|
83
|
+
tags: [
|
|
84
|
+
"$publishing:false"
|
|
85
|
+
]
|
|
86
|
+
}),
|
|
87
|
+
model("gone", "Gone", {
|
|
88
|
+
isBeingDeleted: true
|
|
89
|
+
})
|
|
90
|
+
]);
|
|
91
|
+
await presenter.init();
|
|
92
|
+
expect(presenter.vm).toEqual({
|
|
93
|
+
loading: false,
|
|
94
|
+
namespaces: [
|
|
95
|
+
"cms.article",
|
|
96
|
+
"cms.press"
|
|
97
|
+
],
|
|
98
|
+
options: [
|
|
99
|
+
{
|
|
100
|
+
label: "Article",
|
|
101
|
+
value: "article",
|
|
102
|
+
app: "cms",
|
|
103
|
+
icon: "devices_other"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
label: "Press release",
|
|
107
|
+
value: "press",
|
|
108
|
+
app: "cms",
|
|
109
|
+
icon: "devices_other"
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
});
|
|
113
|
+
expect(notifications.error).not.toHaveBeenCalled();
|
|
114
|
+
});
|
|
115
|
+
it("ends loading with nothing, logs the error and tells the viewer once when the list fails", async ()=>{
|
|
116
|
+
const consoleError = vi.spyOn(console, "error").mockImplementation(()=>void 0);
|
|
117
|
+
const error = new Error("network");
|
|
118
|
+
const { presenter, notifications } = setup(()=>Promise.reject(error));
|
|
119
|
+
await presenter.init();
|
|
120
|
+
expect(presenter.vm).toEqual({
|
|
121
|
+
loading: false,
|
|
122
|
+
namespaces: [],
|
|
123
|
+
options: []
|
|
124
|
+
});
|
|
125
|
+
expect(notifications.error).toHaveBeenCalledTimes(1);
|
|
126
|
+
expect(notifications.error).toHaveBeenCalledWith(FAILURE);
|
|
127
|
+
expect(consoleError).toHaveBeenCalledWith("[CmsContentReviewsPresenter] Could not load the content types.", error);
|
|
128
|
+
});
|
|
129
|
+
it("lists the models once when init is called twice", async ()=>{
|
|
130
|
+
const execute = vi.fn(async ()=>[
|
|
131
|
+
model("article", "Article")
|
|
132
|
+
]);
|
|
133
|
+
const { presenter } = setup(execute);
|
|
134
|
+
await Promise.all([
|
|
135
|
+
presenter.init(),
|
|
136
|
+
presenter.init()
|
|
137
|
+
]);
|
|
138
|
+
expect(execute).toHaveBeenCalledTimes(1);
|
|
139
|
+
});
|
|
140
|
+
it("lists the models once across a StrictMode init, dispose and init", async ()=>{
|
|
141
|
+
const execute = vi.fn(async ()=>[
|
|
142
|
+
model("article", "Article")
|
|
143
|
+
]);
|
|
144
|
+
const { presenter } = setup(execute);
|
|
145
|
+
await presenter.init();
|
|
146
|
+
presenter.dispose();
|
|
147
|
+
await presenter.init();
|
|
148
|
+
expect(execute).toHaveBeenCalledTimes(1);
|
|
149
|
+
});
|
|
150
|
+
it("tells the viewer once when init is called twice and the list fails", async ()=>{
|
|
151
|
+
vi.spyOn(console, "error").mockImplementation(()=>void 0);
|
|
152
|
+
const execute = vi.fn(()=>Promise.reject(new Error("network")));
|
|
153
|
+
const { presenter, notifications } = setup(execute);
|
|
154
|
+
await Promise.all([
|
|
155
|
+
presenter.init(),
|
|
156
|
+
presenter.init()
|
|
157
|
+
]);
|
|
158
|
+
expect(execute).toHaveBeenCalledTimes(1);
|
|
159
|
+
expect(notifications.error).toHaveBeenCalledTimes(1);
|
|
160
|
+
});
|
|
161
|
+
it("lists nothing and says nothing while no one is signed in", async ()=>{
|
|
162
|
+
const execute = vi.fn(async ()=>[
|
|
163
|
+
model("article", "Article")
|
|
164
|
+
]);
|
|
165
|
+
const { presenter, notifications } = setup(execute, {
|
|
166
|
+
signedIn: false
|
|
167
|
+
});
|
|
168
|
+
await presenter.init();
|
|
169
|
+
await flush();
|
|
170
|
+
expect(execute).not.toHaveBeenCalled();
|
|
171
|
+
expect(notifications.error).not.toHaveBeenCalled();
|
|
172
|
+
expect(presenter.vm).toEqual({
|
|
173
|
+
loading: true,
|
|
174
|
+
namespaces: [],
|
|
175
|
+
options: []
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
it("lists the models once when someone signs in", async ()=>{
|
|
179
|
+
const execute = vi.fn(async ()=>[
|
|
180
|
+
model("article", "Article")
|
|
181
|
+
]);
|
|
182
|
+
const { presenter, identityContext } = setup(execute, {
|
|
183
|
+
signedIn: false
|
|
184
|
+
});
|
|
185
|
+
await presenter.init();
|
|
186
|
+
identityContext.setIdentity(user("user-1"));
|
|
187
|
+
await flush();
|
|
188
|
+
identityContext.setIdentity(user("user-1"));
|
|
189
|
+
await flush();
|
|
190
|
+
expect(execute).toHaveBeenCalledTimes(1);
|
|
191
|
+
expect(presenter.vm).toEqual({
|
|
192
|
+
loading: false,
|
|
193
|
+
namespaces: [
|
|
194
|
+
"cms.article"
|
|
195
|
+
],
|
|
196
|
+
options: [
|
|
197
|
+
{
|
|
198
|
+
label: "Article",
|
|
199
|
+
value: "article",
|
|
200
|
+
app: "cms",
|
|
201
|
+
icon: "devices_other"
|
|
202
|
+
}
|
|
203
|
+
]
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
it("retries a failed list when the identity changes", async ()=>{
|
|
207
|
+
vi.spyOn(console, "error").mockImplementation(()=>void 0);
|
|
208
|
+
const execute = vi.fn().mockRejectedValueOnce(new Error("network")).mockResolvedValueOnce([
|
|
209
|
+
model("article", "Article")
|
|
210
|
+
]);
|
|
211
|
+
const { presenter, notifications, identityContext } = setup(execute);
|
|
212
|
+
await presenter.init();
|
|
213
|
+
identityContext.clear();
|
|
214
|
+
identityContext.setIdentity(user("user-1"));
|
|
215
|
+
await flush();
|
|
216
|
+
expect(execute).toHaveBeenCalledTimes(2);
|
|
217
|
+
expect(notifications.error).toHaveBeenCalledTimes(1);
|
|
218
|
+
expect(presenter.vm.namespaces).toEqual([
|
|
219
|
+
"cms.article"
|
|
220
|
+
]);
|
|
221
|
+
});
|
|
222
|
+
it("retries a failed list on a later init", async ()=>{
|
|
223
|
+
vi.spyOn(console, "error").mockImplementation(()=>void 0);
|
|
224
|
+
const execute = vi.fn().mockRejectedValueOnce(new Error("network")).mockResolvedValueOnce([
|
|
225
|
+
model("article", "Article")
|
|
226
|
+
]);
|
|
227
|
+
const { presenter } = setup(execute);
|
|
228
|
+
await presenter.init();
|
|
229
|
+
presenter.dispose();
|
|
230
|
+
await presenter.init();
|
|
231
|
+
expect(execute).toHaveBeenCalledTimes(2);
|
|
232
|
+
expect(presenter.vm.namespaces).toEqual([
|
|
233
|
+
"cms.article"
|
|
234
|
+
]);
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
//# sourceMappingURL=CmsContentReviewsPresenter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/contentReviews/CmsContentReviewsPresenter.test.js","sources":["../../../src/presentation/contentReviews/CmsContentReviewsPresenter.test.ts"],"sourcesContent":["import { afterEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { ListModelsUseCase } from \"@webiny/app-headless-cms/features/model/listModels/abstractions.js\";\nimport { Notifications } from \"@webiny/app-admin/features/notifications/abstractions.js\";\nimport { IdentityContextFeature } from \"@webiny/app-admin/features/security/IdentityContext/feature.js\";\nimport { IdentityContext } from \"@webiny/app-admin/features/security/IdentityContext/abstractions.js\";\nimport { Identity } from \"@webiny/app-admin/domain/Identity.js\";\nimport { CmsContentReviewsPresenter } from \"./abstractions.js\";\nimport type { ListedModel } from \"./abstractions.js\";\nimport { CmsContentReviewsPresenterFeature } from \"./feature.js\";\n\nconst FAILURE = {\n title: \"Could not load the content types\",\n description: \"Content Reviews will not update live. Reload the page to try again.\"\n};\n\nconst model = (\n modelId: string,\n name: string,\n overrides: Partial<ListedModel> = {}\n): ListedModel => {\n return { modelId, name, tags: [], ...overrides };\n};\n\nconst user = (id: string): Identity => {\n return Identity.createAuthenticated({\n id,\n type: \"admin\",\n displayName: \"Maja Kos\",\n roles: [],\n teams: [],\n permissions: [],\n profile: { external: false },\n currentTenant: { id: \"root\", name: \"Root\" },\n defaultTenant: { id: \"root\", name: \"Root\" }\n });\n};\n\nconst flush = async (): Promise<void> => {\n await new Promise(resolve => {\n setTimeout(resolve, 0);\n });\n};\n\ninterface SetupParams {\n signedIn?: boolean;\n}\n\nconst setup = (execute: () => Promise<ListedModel[]>, params: SetupParams = {}) => {\n const notifications = { notify: vi.fn(), success: vi.fn(), warning: vi.fn(), error: vi.fn() };\n const container = new Container();\n container.registerInstance(ListModelsUseCase, {\n execute\n } as unknown as ListModelsUseCase.Interface);\n container.registerInstance(Notifications, notifications as unknown as Notifications.Interface);\n IdentityContextFeature.register(container);\n const identityContext = container.resolve(IdentityContext);\n if (params.signedIn !== false) {\n identityContext.setIdentity(user(\"user-1\"));\n }\n CmsContentReviewsPresenterFeature.register(container);\n return {\n presenter: container.resolve(CmsContentReviewsPresenter),\n notifications,\n identityContext\n };\n};\n\ndescribe(\"CmsContentReviewsPresenter\", () => {\n afterEach(() => {\n vi.restoreAllMocks();\n });\n\n it(\"starts loading with nothing\", () => {\n const { presenter } = setup(() => new Promise(() => undefined));\n\n expect(presenter.vm).toEqual({ loading: true, namespaces: [], options: [] });\n });\n\n it(\"exposes the namespaces and filter options of the models a workflow can bind, sorted by name\", async () => {\n const { presenter, notifications } = setup(async () => [\n model(\"press\", \"Press release\"),\n model(\"article\", \"Article\"),\n model(\"hidden\", \"Hidden\", { tags: [\"$publishing:false\"] }),\n model(\"gone\", \"Gone\", { isBeingDeleted: true })\n ]);\n\n await presenter.init();\n\n expect(presenter.vm).toEqual({\n loading: false,\n namespaces: [\"cms.article\", \"cms.press\"],\n options: [\n { label: \"Article\", value: \"article\", app: \"cms\", icon: \"devices_other\" },\n { label: \"Press release\", value: \"press\", app: \"cms\", icon: \"devices_other\" }\n ]\n });\n expect(notifications.error).not.toHaveBeenCalled();\n });\n\n it(\"ends loading with nothing, logs the error and tells the viewer once when the list fails\", async () => {\n const consoleError = vi.spyOn(console, \"error\").mockImplementation(() => undefined);\n const error = new Error(\"network\");\n const { presenter, notifications } = setup(() => Promise.reject(error));\n\n await presenter.init();\n\n expect(presenter.vm).toEqual({ loading: false, namespaces: [], options: [] });\n expect(notifications.error).toHaveBeenCalledTimes(1);\n expect(notifications.error).toHaveBeenCalledWith(FAILURE);\n expect(consoleError).toHaveBeenCalledWith(\n \"[CmsContentReviewsPresenter] Could not load the content types.\",\n error\n );\n });\n\n it(\"lists the models once when init is called twice\", async () => {\n const execute = vi.fn(async () => [model(\"article\", \"Article\")]);\n const { presenter } = setup(execute);\n\n await Promise.all([presenter.init(), presenter.init()]);\n\n expect(execute).toHaveBeenCalledTimes(1);\n });\n\n it(\"lists the models once across a StrictMode init, dispose and init\", async () => {\n const execute = vi.fn(async () => [model(\"article\", \"Article\")]);\n const { presenter } = setup(execute);\n\n await presenter.init();\n presenter.dispose();\n await presenter.init();\n\n expect(execute).toHaveBeenCalledTimes(1);\n });\n\n it(\"tells the viewer once when init is called twice and the list fails\", async () => {\n vi.spyOn(console, \"error\").mockImplementation(() => undefined);\n const execute = vi.fn(() => Promise.reject(new Error(\"network\")));\n const { presenter, notifications } = setup(execute);\n\n await Promise.all([presenter.init(), presenter.init()]);\n\n expect(execute).toHaveBeenCalledTimes(1);\n expect(notifications.error).toHaveBeenCalledTimes(1);\n });\n\n it(\"lists nothing and says nothing while no one is signed in\", async () => {\n const execute = vi.fn(async () => [model(\"article\", \"Article\")]);\n const { presenter, notifications } = setup(execute, { signedIn: false });\n\n await presenter.init();\n await flush();\n\n expect(execute).not.toHaveBeenCalled();\n expect(notifications.error).not.toHaveBeenCalled();\n expect(presenter.vm).toEqual({ loading: true, namespaces: [], options: [] });\n });\n\n it(\"lists the models once when someone signs in\", async () => {\n const execute = vi.fn(async () => [model(\"article\", \"Article\")]);\n const { presenter, identityContext } = setup(execute, { signedIn: false });\n\n await presenter.init();\n identityContext.setIdentity(user(\"user-1\"));\n await flush();\n identityContext.setIdentity(user(\"user-1\"));\n await flush();\n\n expect(execute).toHaveBeenCalledTimes(1);\n expect(presenter.vm).toEqual({\n loading: false,\n namespaces: [\"cms.article\"],\n options: [{ label: \"Article\", value: \"article\", app: \"cms\", icon: \"devices_other\" }]\n });\n });\n\n it(\"retries a failed list when the identity changes\", async () => {\n vi.spyOn(console, \"error\").mockImplementation(() => undefined);\n const execute = vi\n .fn<() => Promise<ListedModel[]>>()\n .mockRejectedValueOnce(new Error(\"network\"))\n .mockResolvedValueOnce([model(\"article\", \"Article\")]);\n const { presenter, notifications, identityContext } = setup(execute);\n\n await presenter.init();\n identityContext.clear();\n identityContext.setIdentity(user(\"user-1\"));\n await flush();\n\n expect(execute).toHaveBeenCalledTimes(2);\n expect(notifications.error).toHaveBeenCalledTimes(1);\n expect(presenter.vm.namespaces).toEqual([\"cms.article\"]);\n });\n\n it(\"retries a failed list on a later init\", async () => {\n vi.spyOn(console, \"error\").mockImplementation(() => undefined);\n const execute = vi\n .fn<() => Promise<ListedModel[]>>()\n .mockRejectedValueOnce(new Error(\"network\"))\n .mockResolvedValueOnce([model(\"article\", \"Article\")]);\n const { presenter } = setup(execute);\n\n await presenter.init();\n presenter.dispose();\n await presenter.init();\n\n expect(execute).toHaveBeenCalledTimes(2);\n expect(presenter.vm.namespaces).toEqual([\"cms.article\"]);\n });\n});\n"],"names":["FAILURE","model","modelId","name","overrides","user","id","Identity","flush","Promise","resolve","setTimeout","setup","execute","params","notifications","vi","container","Container","ListModelsUseCase","Notifications","IdentityContextFeature","identityContext","IdentityContext","CmsContentReviewsPresenterFeature","CmsContentReviewsPresenter","describe","afterEach","it","presenter","undefined","expect","consoleError","console","error","Error"],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface ListedModel {
|
|
2
|
+
modelId: string;
|
|
3
|
+
name: string;
|
|
4
|
+
tags?: string[];
|
|
5
|
+
isBeingDeleted?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface ContentType {
|
|
8
|
+
modelId: string;
|
|
9
|
+
name: string;
|
|
10
|
+
}
|
|
11
|
+
export interface CmsContentTypeOption {
|
|
12
|
+
label: string;
|
|
13
|
+
value: string;
|
|
14
|
+
app: "cms";
|
|
15
|
+
icon: "devices_other";
|
|
16
|
+
}
|
|
17
|
+
export interface ICmsContentReviewsViewModel {
|
|
18
|
+
loading: boolean;
|
|
19
|
+
namespaces: string[];
|
|
20
|
+
options: CmsContentTypeOption[];
|
|
21
|
+
}
|
|
22
|
+
export interface ICmsContentReviewsPresenter {
|
|
23
|
+
readonly vm: ICmsContentReviewsViewModel;
|
|
24
|
+
init(): Promise<void>;
|
|
25
|
+
dispose(): void;
|
|
26
|
+
}
|
|
27
|
+
export declare const CmsContentReviewsPresenter: import("@webiny/di").Abstraction<ICmsContentReviewsPresenter>;
|
|
28
|
+
export declare namespace CmsContentReviewsPresenter {
|
|
29
|
+
type Interface = ICmsContentReviewsPresenter;
|
|
30
|
+
type ViewModel = ICmsContentReviewsViewModel;
|
|
31
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/contentReviews/abstractions.js","sources":["../../../src/presentation/contentReviews/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\n\n// The part of an admin model the content type list needs.\nexport interface ListedModel {\n modelId: string;\n name: string;\n tags?: string[];\n isBeingDeleted?: boolean;\n}\n\nexport interface ContentType {\n modelId: string;\n name: string;\n}\n\nexport interface CmsContentTypeOption {\n label: string;\n value: string;\n app: \"cms\";\n icon: \"devices_other\";\n}\n\nexport interface ICmsContentReviewsViewModel {\n loading: boolean;\n namespaces: string[];\n options: CmsContentTypeOption[];\n}\n\nexport interface ICmsContentReviewsPresenter {\n readonly vm: ICmsContentReviewsViewModel;\n init(): Promise<void>;\n dispose(): void;\n}\n\nexport const CmsContentReviewsPresenter = createAbstraction<ICmsContentReviewsPresenter>(\n \"Cms/Workflows/ContentReviewsPresenter\"\n);\n\nexport namespace CmsContentReviewsPresenter {\n export type Interface = ICmsContentReviewsPresenter;\n export type ViewModel = ICmsContentReviewsViewModel;\n}\n"],"names":["CmsContentReviewsPresenter","createAbstraction"],"mappings":";AAkCO,MAAMA,6BAA6BC,kBACtC"}
|