@webiny/app-headless-cms-workflows 0.0.0-unstable.a4f3e4ea8b → 0.0.0-unstable.a85ef555b2
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/{CmsEntryFormCreateNewRevisionButton.js → CmsEntryReviewNewRevision.js} +20 -11
- 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 -4
- package/Components/ContentEntryForm/index.js +5 -4
- 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/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 -1
- package/Routes/index.js +1 -1
- 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.js +6 -2
- package/features/feature.js.map +1 -1
- 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 +1 -1
- 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 +31 -10
- package/index.js.map +1 -1
- 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 +20 -16
- 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/{WorkflowStateGetEntryFieldSelection.d.ts → CmsReviewGetEntryFieldSelection.d.ts} +2 -2
- package/presentation/CmsReviewGetEntryFieldSelection.js +16 -0
- package/presentation/CmsReviewGetEntryFieldSelection.js.map +1 -0
- package/presentation/{WorkflowStateListEntriesFieldSelection.d.ts → CmsReviewListEntriesFieldSelection.d.ts} +2 -2
- package/presentation/CmsReviewListEntriesFieldSelection.js +16 -0
- package/presentation/CmsReviewListEntriesFieldSelection.js.map +1 -0
- package/presentation/{TableRowMapperWorkflowDecorator.d.ts → CmsReviewTableRowMapperDecorator.d.ts} +3 -3
- 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.js +10 -12
- package/presentation/feature.js.map +1 -1
- 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 +4 -4
- package/routes.js +5 -5
- package/routes.js.map +1 -1
- 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 +8 -8
- 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
- package/Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.d.ts +0 -2
- package/Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.js +0 -34
- package/Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.js.map +0 -1
- package/Components/CmsEntriesWorkflowStateList/index.d.ts +0 -1
- package/Components/CmsEntriesWorkflowStateList/index.js +0 -1
- package/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.d.ts +0 -2
- package/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.js.map +0 -1
- package/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.d.ts +0 -5
- package/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.js +0 -22
- package/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.js.map +0 -1
- package/Components/ContentEntryForm/CmsEntryFormTooltipButton.d.ts +0 -2
- package/Components/ContentEntryForm/CmsEntryFormTooltipButton.js +0 -13
- package/Components/ContentEntryForm/CmsEntryFormTooltipButton.js.map +0 -1
- package/Components/ContentEntryForm/ContentEntryFormWorkflow.d.ts +0 -2
- package/Components/ContentEntryForm/ContentEntryFormWorkflow.js +0 -24
- package/Components/ContentEntryForm/ContentEntryFormWorkflow.js.map +0 -1
- package/Components/OptionItem/OpenInNewWindow.d.ts +0 -2
- package/Components/OptionItem/OpenInNewWindow.js +0 -36
- package/Components/OptionItem/OpenInNewWindow.js.map +0 -1
- package/Routes/CmsWorkflowsEditor.d.ts +0 -2
- package/Routes/CmsWorkflowsEditor.js +0 -26
- package/Routes/CmsWorkflowsEditor.js.map +0 -1
- package/features/WorkflowStateCacheHandler.d.ts +0 -11
- package/features/WorkflowStateCacheHandler.js +0 -50
- package/features/WorkflowStateCacheHandler.js.map +0 -1
- package/presentation/CmsWorkflowsEditorView.d.ts +0 -5
- package/presentation/CmsWorkflowsEditorView.js +0 -90
- package/presentation/CmsWorkflowsEditorView.js.map +0 -1
- package/presentation/ContentEntryFormPresenterWorkflowDecorator.d.ts +0 -25
- package/presentation/ContentEntryFormPresenterWorkflowDecorator.js +0 -70
- package/presentation/ContentEntryFormPresenterWorkflowDecorator.js.map +0 -1
- package/presentation/TableRowMapperWorkflowDecorator.js +0 -25
- package/presentation/TableRowMapperWorkflowDecorator.js.map +0 -1
- package/presentation/WorkflowStateGetEntryFieldSelection.js +0 -24
- package/presentation/WorkflowStateGetEntryFieldSelection.js.map +0 -1
- package/presentation/WorkflowStateListEntriesFieldSelection.js +0 -24
- package/presentation/WorkflowStateListEntriesFieldSelection.js.map +0 -1
- package/presentation/cmsWorkflowsEditor/CmsWorkflowsEditorPresenter.d.ts +0 -15
- package/presentation/cmsWorkflowsEditor/CmsWorkflowsEditorPresenter.js +0 -50
- package/presentation/cmsWorkflowsEditor/CmsWorkflowsEditorPresenter.js.map +0 -1
- package/presentation/cmsWorkflowsEditor/abstractions.d.ts +0 -19
- package/presentation/cmsWorkflowsEditor/abstractions.js +0 -5
- package/presentation/cmsWorkflowsEditor/abstractions.js.map +0 -1
- package/presentation/cmsWorkflowsEditor/feature.d.ts +0 -3
- package/presentation/cmsWorkflowsEditor/feature.js +0 -17
- package/presentation/cmsWorkflowsEditor/feature.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing/renderEditorTree.js","sources":["../../src/testing/renderEditorTree.tsx"],"sourcesContent":["import React from \"react\";\nimport { vi } from \"vitest\";\nimport { render } from \"@testing-library/react\";\nimport { Container } from \"@webiny/di\";\nimport { CompositionProvider } from \"@webiny/react-composition\";\nimport { DiContainerProvider } from \"@webiny/app\";\nimport { Buttons } from \"@webiny/app-admin\";\nimport { AdminUiProvider } from \"@webiny/admin-ui\";\nimport { ModelContext } from \"@webiny/app-headless-cms/admin/components/ModelProvider/index.js\";\nimport { ContentEntryEditorConfig } from \"@webiny/app-headless-cms/admin/config/contentEntries/index.js\";\nimport { ContentEntryEditorWithConfig } from \"@webiny/app-headless-cms/admin/config/contentEntries/index.js\";\nimport { useContentEntryEditorConfig } from \"@webiny/app-headless-cms/admin/config/contentEntries/index.js\";\nimport { ContentEntryFormPresenter } from \"@webiny/app-headless-cms/presentation/contentEntries/form/abstractions.js\";\nimport { RevisionsListPresenter } from \"@webiny/app-headless-cms/presentation/contentEntries/revisionsList/abstractions.js\";\nimport type { TargetReviewPresenter } from \"@webiny/app-workflows/review/presentation/targetReview/abstractions.js\";\nimport { CmsEntryReview } from \"~/features/editorReview/abstractions.js\";\nimport { createEntrySession } from \"./createEntrySession.js\";\nimport type { EntrySession } from \"./createEntrySession.js\";\nimport { createFormVm } from \"./createFormVm.js\";\n\nfunction createFakeFormPresenter(\n vm: ContentEntryFormPresenter.ViewModel\n): ContentEntryFormPresenter.Interface {\n return {\n vm,\n loadRevision: vi.fn(),\n saveRevision: vi.fn(),\n publishRevision: vi.fn(),\n unpublishRevision: vi.fn(),\n deleteEntry: vi.fn(),\n setFolderId: vi.fn(),\n newEntry: vi.fn(),\n patchEntryMeta: vi.fn(),\n reset: vi.fn()\n };\n}\n\nfunction createFakeRevisionsPresenter(): RevisionsListPresenter.Interface {\n return {\n vm: { loading: false, revisions: [], items: [], visible: false },\n init: vi.fn(),\n show: vi.fn(),\n hide: vi.fn(),\n createRevision: vi.fn(),\n publishRevision: vi.fn(),\n unpublishRevision: vi.fn(),\n updateRevisionNote: vi.fn(),\n deleteRevision: vi.fn(),\n dispose: vi.fn()\n };\n}\n\n/*\n * The config components (and the form decorators) are rendered next to the editor config, as the\n * app does it: `ContentEntryEditorWithConfig` renders its children only once the registered\n * properties are collected, so config components cannot live inside it. One width property is\n * always registered, so the gate opens even when a component under test registers nothing.\n *\n * Renders what the editor renders: the header buttons through `Buttons` (so `useButtons()` works),\n * and every registered action's element for the options menu. The names list shows what is\n * registered, whatever it renders.\n */\nconst ActionsProbe = () => {\n const { buttonActions, menuItemActions } = useContentEntryEditorConfig();\n const buttonNames = buttonActions.map(action => action.name).join(\",\");\n const menuNames = menuItemActions.map(action => action.name).join(\",\");\n\n return (\n <>\n <div data-testid=\"button-action-names\">{buttonNames}</div>\n <div data-testid=\"menu-action-names\">{menuNames}</div>\n <div data-testid=\"button-actions\">\n <Buttons actions={buttonActions} />\n </div>\n <div data-testid=\"menu-actions\">\n {menuItemActions.map(action => (\n <span key={action.name} data-action={action.name}>\n {action.element}\n </span>\n ))}\n </div>\n </>\n );\n};\n\nexport interface RenderEditorTreeParams {\n children?: React.ReactNode;\n formVm?: Partial<ContentEntryFormPresenter.ViewModel>;\n reviewVm?: Partial<TargetReviewPresenter.ViewModel>;\n}\n\nexport interface RenderedEditorTree extends EntrySession {\n container: Container;\n formPresenter: ContentEntryFormPresenter.Interface;\n revisions: RevisionsListPresenter.Interface;\n}\n\nexport function renderEditorTree(params: RenderEditorTreeParams): RenderedEditorTree {\n const container = new Container();\n const entrySession = createEntrySession(params.reviewVm);\n const formVm = createFormVm(params.formVm);\n const formPresenter = createFakeFormPresenter(formVm);\n const revisions = createFakeRevisionsPresenter();\n\n container.registerInstance(CmsEntryReview, entrySession.session);\n container.registerInstance(ContentEntryFormPresenter, formPresenter);\n container.registerInstance(RevisionsListPresenter, revisions);\n\n render(\n <AdminUiProvider>\n <CompositionProvider>\n <DiContainerProvider container={container}>\n <ModelContext.Provider value={formVm.model}>\n {params.children}\n <ContentEntryEditorConfig>\n <ContentEntryEditorConfig.Width value={\"1020px\"} />\n </ContentEntryEditorConfig>\n <ContentEntryEditorWithConfig>\n <ActionsProbe />\n </ContentEntryEditorWithConfig>\n </ModelContext.Provider>\n </DiContainerProvider>\n </CompositionProvider>\n </AdminUiProvider>\n );\n\n return { ...entrySession, container, formPresenter, revisions };\n}\n"],"names":["createFakeFormPresenter","vm","vi","createFakeRevisionsPresenter","ActionsProbe","buttonActions","menuItemActions","useContentEntryEditorConfig","buttonNames","action","menuNames","Buttons","renderEditorTree","params","container","Container","entrySession","createEntrySession","formVm","createFormVm","formPresenter","revisions","CmsEntryReview","ContentEntryFormPresenter","RevisionsListPresenter","render","AdminUiProvider","CompositionProvider","DiContainerProvider","ModelContext","ContentEntryEditorConfig","ContentEntryEditorWithConfig"],"mappings":";;;;;;;;;;;;;;;AAoBA,SAASA,wBACLC,EAAuC;IAEvC,OAAO;QACHA;QACA,cAAcC,GAAG,EAAE;QACnB,cAAcA,GAAG,EAAE;QACnB,iBAAiBA,GAAG,EAAE;QACtB,mBAAmBA,GAAG,EAAE;QACxB,aAAaA,GAAG,EAAE;QAClB,aAAaA,GAAG,EAAE;QAClB,UAAUA,GAAG,EAAE;QACf,gBAAgBA,GAAG,EAAE;QACrB,OAAOA,GAAG,EAAE;IAChB;AACJ;AAEA,SAASC;IACL,OAAO;QACH,IAAI;YAAE,SAAS;YAAO,WAAW,EAAE;YAAE,OAAO,EAAE;YAAE,SAAS;QAAM;QAC/D,MAAMD,GAAG,EAAE;QACX,MAAMA,GAAG,EAAE;QACX,MAAMA,GAAG,EAAE;QACX,gBAAgBA,GAAG,EAAE;QACrB,iBAAiBA,GAAG,EAAE;QACtB,mBAAmBA,GAAG,EAAE;QACxB,oBAAoBA,GAAG,EAAE;QACzB,gBAAgBA,GAAG,EAAE;QACrB,SAASA,GAAG,EAAE;IAClB;AACJ;AAYA,MAAME,eAAe;IACjB,MAAM,EAAEC,aAAa,EAAEC,eAAe,EAAE,GAAGC;IAC3C,MAAMC,cAAcH,cAAc,GAAG,CAACI,CAAAA,SAAUA,OAAO,IAAI,EAAE,IAAI,CAAC;IAClE,MAAMC,YAAYJ,gBAAgB,GAAG,CAACG,CAAAA,SAAUA,OAAO,IAAI,EAAE,IAAI,CAAC;IAElE,OAAO,WAAP,GACI,wDACI,oBAAC;QAAI,eAAY;OAAuBD,cAAAA,WAAAA,GACxC,oBAAC;QAAI,eAAY;OAAqBE,YAAAA,WAAAA,GACtC,oBAAC;QAAI,eAAY;qBACb,oBAACC,SAAOA;QAAC,SAASN;uBAEtB,oBAAC;QAAI,eAAY;OACZC,gBAAgB,GAAG,CAACG,CAAAA,SAAAA,WAAAA,GACjB,oBAAC;YAAK,KAAKA,OAAO,IAAI;YAAE,eAAaA,OAAO,IAAI;WAC3CA,OAAO,OAAO;AAMvC;AAcO,SAASG,iBAAiBC,MAA8B;IAC3D,MAAMC,YAAY,IAAIC;IACtB,MAAMC,eAAeC,mBAAmBJ,OAAO,QAAQ;IACvD,MAAMK,SAASC,aAAaN,OAAO,MAAM;IACzC,MAAMO,gBAAgBpB,wBAAwBkB;IAC9C,MAAMG,YAAYlB;IAElBW,UAAU,gBAAgB,CAACQ,gBAAgBN,aAAa,OAAO;IAC/DF,UAAU,gBAAgB,CAACS,2BAA2BH;IACtDN,UAAU,gBAAgB,CAACU,wBAAwBH;IAEnDI,OAAO,WAADA,GACF,oBAACC,iBAAeA,MAAAA,WAAAA,GACZ,oBAACC,qBAAmBA,MAAAA,WAAAA,GAChB,oBAACC,qBAAmBA;QAAC,WAAWd;qBAC5B,oBAACe,aAAa,QAAQ;QAAC,OAAOX,OAAO,KAAK;OACrCL,OAAO,QAAQ,gBAChB,oBAACiB,0BAAwBA,MAAAA,WAAAA,GACrB,oBAACA,yBAAyB,KAAK;QAAC,OAAO;uBAE3C,oBAACC,8BAA4BA,MAAAA,WAAAA,GACzB,oBAAC3B,cAAYA;IAQrC,OAAO;QAAE,GAAGY,YAAY;QAAEF;QAAWM;QAAeC;IAAU;AAClE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TargetReviewPresenter } from "@webiny/app-workflows/review/presentation/targetReview/abstractions.js";
|
|
2
|
+
export declare const CHECKING = "Checking review status\u2026";
|
|
3
|
+
export declare const FAILED_REASON = "The review status could not be loaded. Try again from the review bar.";
|
|
4
|
+
export declare const NEEDS_REVIEW = "Publishing needs an approved review. Request a review first.";
|
|
5
|
+
export declare const REJECTED_REASON = "This revision was rejected. Create a new revision, then request a new review.";
|
|
6
|
+
export declare const IN_REVIEW_REASON = "This revision is in review. Publishing is allowed once every step approves.";
|
|
7
|
+
export declare const NO_MOVE = "Can\u2019t move while this revision is in review.";
|
|
8
|
+
type Rules = Partial<TargetReviewPresenter.ViewModel>;
|
|
9
|
+
export declare const NO_WORKFLOW: Rules;
|
|
10
|
+
export declare const BOUND_NO_REVIEW: Rules;
|
|
11
|
+
export declare const BOUND_UNPUBLISHED: Rules;
|
|
12
|
+
export declare const LOADING: Rules;
|
|
13
|
+
export declare const FAILED: Rules;
|
|
14
|
+
export declare const IN_REVIEW: Rules;
|
|
15
|
+
export declare const REJECTED: Rules;
|
|
16
|
+
export declare const APPROVED: Rules;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
const CHECKING = "Checking review status…";
|
|
2
|
+
const FAILED_REASON = "The review status could not be loaded. Try again from the review bar.";
|
|
3
|
+
const NEEDS_REVIEW = "Publishing needs an approved review. Request a review first.";
|
|
4
|
+
const REJECTED_REASON = "This revision was rejected. Create a new revision, then request a new review.";
|
|
5
|
+
const IN_REVIEW_REASON = "This revision is in review. Publishing is allowed once every step approves.";
|
|
6
|
+
const NO_MOVE = "Can’t move while this revision is in review.";
|
|
7
|
+
const NO_WORKFLOW = {
|
|
8
|
+
status: "noWorkflow",
|
|
9
|
+
allowsEditing: true,
|
|
10
|
+
allowsPublishing: true,
|
|
11
|
+
publishDisabledReason: null,
|
|
12
|
+
moveDisabledReason: null
|
|
13
|
+
};
|
|
14
|
+
const BOUND_NO_REVIEW = {
|
|
15
|
+
status: "none",
|
|
16
|
+
allowsEditing: true,
|
|
17
|
+
allowsPublishing: false,
|
|
18
|
+
publishDisabledReason: NEEDS_REVIEW,
|
|
19
|
+
moveDisabledReason: null
|
|
20
|
+
};
|
|
21
|
+
const BOUND_UNPUBLISHED = {
|
|
22
|
+
status: "none",
|
|
23
|
+
allowsEditing: true,
|
|
24
|
+
allowsPublishing: true,
|
|
25
|
+
publishDisabledReason: null,
|
|
26
|
+
moveDisabledReason: null
|
|
27
|
+
};
|
|
28
|
+
const LOADING = {
|
|
29
|
+
status: "loading",
|
|
30
|
+
allowsEditing: false,
|
|
31
|
+
allowsPublishing: false,
|
|
32
|
+
publishDisabledReason: CHECKING,
|
|
33
|
+
moveDisabledReason: CHECKING
|
|
34
|
+
};
|
|
35
|
+
const FAILED = {
|
|
36
|
+
status: "failed",
|
|
37
|
+
allowsEditing: false,
|
|
38
|
+
allowsPublishing: false,
|
|
39
|
+
publishDisabledReason: FAILED_REASON,
|
|
40
|
+
moveDisabledReason: FAILED_REASON
|
|
41
|
+
};
|
|
42
|
+
const IN_REVIEW = {
|
|
43
|
+
status: "active",
|
|
44
|
+
allowsEditing: false,
|
|
45
|
+
allowsPublishing: false,
|
|
46
|
+
publishDisabledReason: IN_REVIEW_REASON,
|
|
47
|
+
moveDisabledReason: NO_MOVE
|
|
48
|
+
};
|
|
49
|
+
const REJECTED = {
|
|
50
|
+
status: "active",
|
|
51
|
+
allowsEditing: false,
|
|
52
|
+
allowsPublishing: false,
|
|
53
|
+
publishDisabledReason: REJECTED_REASON,
|
|
54
|
+
moveDisabledReason: null
|
|
55
|
+
};
|
|
56
|
+
const APPROVED = {
|
|
57
|
+
status: "active",
|
|
58
|
+
allowsEditing: false,
|
|
59
|
+
allowsPublishing: true,
|
|
60
|
+
publishDisabledReason: null,
|
|
61
|
+
moveDisabledReason: null
|
|
62
|
+
};
|
|
63
|
+
export { APPROVED, BOUND_NO_REVIEW, BOUND_UNPUBLISHED, CHECKING, FAILED, FAILED_REASON, IN_REVIEW, IN_REVIEW_REASON, LOADING, NEEDS_REVIEW, NO_MOVE, NO_WORKFLOW, REJECTED, REJECTED_REASON };
|
|
64
|
+
|
|
65
|
+
//# sourceMappingURL=reviewStates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing/reviewStates.js","sources":["../../src/testing/reviewStates.ts"],"sourcesContent":["import type { TargetReviewPresenter } from \"@webiny/app-workflows/review/presentation/targetReview/abstractions.js\";\n\nexport const CHECKING = \"Checking review status…\";\nexport const FAILED_REASON =\n \"The review status could not be loaded. Try again from the review bar.\";\nexport const NEEDS_REVIEW = \"Publishing needs an approved review. Request a review first.\";\nexport const REJECTED_REASON =\n \"This revision was rejected. Create a new revision, then request a new review.\";\nexport const IN_REVIEW_REASON =\n \"This revision is in review. Publishing is allowed once every step approves.\";\nexport const NO_MOVE = \"Can’t move while this revision is in review.\";\n\ntype Rules = Partial<TargetReviewPresenter.ViewModel>;\n\n// A model without a workflow: nothing is shown and nothing is gated.\nexport const NO_WORKFLOW: Rules = {\n status: \"noWorkflow\",\n allowsEditing: true,\n allowsPublishing: true,\n publishDisabledReason: null,\n moveDisabledReason: null\n};\n\n// A workflow is bound but there is no active review: editing is free, publishing needs a review.\nexport const BOUND_NO_REVIEW: Rules = {\n status: \"none\",\n allowsEditing: true,\n allowsPublishing: false,\n publishDisabledReason: NEEDS_REVIEW,\n moveDisabledReason: null\n};\n\n/*\n * An unpublished revision with no review: it was reviewed before it was published, so it can be\n * published again (R226, Q19).\n */\nexport const BOUND_UNPUBLISHED: Rules = {\n status: \"none\",\n allowsEditing: true,\n allowsPublishing: true,\n publishDisabledReason: null,\n moveDisabledReason: null\n};\n\nexport const LOADING: Rules = {\n status: \"loading\",\n allowsEditing: false,\n allowsPublishing: false,\n publishDisabledReason: CHECKING,\n moveDisabledReason: CHECKING\n};\n\nexport const FAILED: Rules = {\n status: \"failed\",\n allowsEditing: false,\n allowsPublishing: false,\n publishDisabledReason: FAILED_REASON,\n moveDisabledReason: FAILED_REASON\n};\n\nexport const IN_REVIEW: Rules = {\n status: \"active\",\n allowsEditing: false,\n allowsPublishing: false,\n publishDisabledReason: IN_REVIEW_REASON,\n moveDisabledReason: NO_MOVE\n};\n\nexport const REJECTED: Rules = {\n status: \"active\",\n allowsEditing: false,\n allowsPublishing: false,\n publishDisabledReason: REJECTED_REASON,\n moveDisabledReason: null\n};\n\nexport const APPROVED: Rules = {\n status: \"active\",\n allowsEditing: false,\n allowsPublishing: true,\n publishDisabledReason: null,\n moveDisabledReason: null\n};\n"],"names":["CHECKING","FAILED_REASON","NEEDS_REVIEW","REJECTED_REASON","IN_REVIEW_REASON","NO_MOVE","NO_WORKFLOW","BOUND_NO_REVIEW","BOUND_UNPUBLISHED","LOADING","FAILED","IN_REVIEW","REJECTED","APPROVED"],"mappings":"AAEO,MAAMA,WAAW;AACjB,MAAMC,gBACT;AACG,MAAMC,eAAe;AACrB,MAAMC,kBACT;AACG,MAAMC,mBACT;AACG,MAAMC,UAAU;AAKhB,MAAMC,cAAqB;IAC9B,QAAQ;IACR,eAAe;IACf,kBAAkB;IAClB,uBAAuB;IACvB,oBAAoB;AACxB;AAGO,MAAMC,kBAAyB;IAClC,QAAQ;IACR,eAAe;IACf,kBAAkB;IAClB,uBAAuBL;IACvB,oBAAoB;AACxB;AAMO,MAAMM,oBAA2B;IACpC,QAAQ;IACR,eAAe;IACf,kBAAkB;IAClB,uBAAuB;IACvB,oBAAoB;AACxB;AAEO,MAAMC,UAAiB;IAC1B,QAAQ;IACR,eAAe;IACf,kBAAkB;IAClB,uBAAuBT;IACvB,oBAAoBA;AACxB;AAEO,MAAMU,SAAgB;IACzB,QAAQ;IACR,eAAe;IACf,kBAAkB;IAClB,uBAAuBT;IACvB,oBAAoBA;AACxB;AAEO,MAAMU,YAAmB;IAC5B,QAAQ;IACR,eAAe;IACf,kBAAkB;IAClB,uBAAuBP;IACvB,oBAAoBC;AACxB;AAEO,MAAMO,WAAkB;IAC3B,QAAQ;IACR,eAAe;IACf,kBAAkB;IAClB,uBAAuBT;IACvB,oBAAoB;AACxB;AAEO,MAAMU,WAAkB;IAC3B,QAAQ;IACR,eAAe;IACf,kBAAkB;IAClB,uBAAuB;IACvB,oBAAoB;AACxB"}
|
package/types.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
stepName: string;
|
|
6
|
-
state: WorkflowStateValue;
|
|
1
|
+
import type { CmsContentEntry } from "@webiny/app-headless-cms-common/types/index.js";
|
|
2
|
+
import type { SystemWorkflowValue } from "@webiny/app-workflows/review/domain/types.js";
|
|
3
|
+
export interface ICmsEntrySystemWithReview {
|
|
4
|
+
workflow?: SystemWorkflowValue | null;
|
|
7
5
|
}
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
type CmsEntryMeta = CmsContentEntry["meta"];
|
|
7
|
+
export interface ICmsEntryMetaWithReview extends CmsEntryMeta {
|
|
8
|
+
system?: ICmsEntrySystemWithReview | null;
|
|
10
9
|
}
|
|
10
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils/isReviewableModel.js","sources":["../../src/utils/isReviewableModel.ts"],"sourcesContent":["import { CMS_MODEL_SINGLETON_TAG } from \"@webiny/app-headless-cms-common\";\nimport type { CmsModel } from \"@webiny/app-headless-cms-common/types/index.js\";\n\n/*\n * Singleton models have one entry that is edited in place and are never bound to a workflow (the\n * old editor skipped them the same way).\n */\nexport function isReviewableModel(model: Pick<CmsModel, \"tags\">): boolean {\n return !model.tags.includes(CMS_MODEL_SINGLETON_TAG);\n}\n"],"names":["isReviewableModel","model","CMS_MODEL_SINGLETON_TAG"],"mappings":";AAOO,SAASA,kBAAkBC,KAA6B;IAC3D,OAAO,CAACA,MAAM,IAAI,CAAC,QAAQ,CAACC;AAChC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
3
|
+
import { Icon } from "@webiny/admin-ui";
|
|
4
|
+
import { normalizeIcon } from "@webiny/app-headless-cms/utils/normalizeIcon.js";
|
|
5
|
+
const renderModelIcon = (model)=>{
|
|
6
|
+
const icon = normalizeIcon(model.icon);
|
|
7
|
+
if (!icon) return null;
|
|
8
|
+
return /*#__PURE__*/ react.createElement(Icon, {
|
|
9
|
+
icon: /*#__PURE__*/ react.createElement(FontAwesomeIcon, {
|
|
10
|
+
icon: icon
|
|
11
|
+
}),
|
|
12
|
+
label: model.name,
|
|
13
|
+
size: "sm",
|
|
14
|
+
color: "neutral-light"
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
export { renderModelIcon };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=renderModelIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils/renderModelIcon.js","sources":["../../src/utils/renderModelIcon.tsx"],"sourcesContent":["import React from \"react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { Icon } from \"@webiny/admin-ui\";\nimport type { CmsModel } from \"@webiny/app-headless-cms/types.js\";\nimport { normalizeIcon } from \"@webiny/app-headless-cms/utils/normalizeIcon.js\";\n\n/*\n * The icon of a content model, drawn from `CmsModel.icon`. A model without a usable icon gets\n * `null`, so each caller picks its own fallback.\n */\nexport const renderModelIcon = (model: Pick<CmsModel, \"name\" | \"icon\">): React.ReactNode => {\n const icon = normalizeIcon(model.icon);\n if (!icon) {\n return null;\n }\n\n return (\n <Icon\n icon={<FontAwesomeIcon icon={icon} />}\n label={model.name}\n size=\"sm\"\n color=\"neutral-light\"\n />\n );\n};\n"],"names":["renderModelIcon","model","icon","normalizeIcon","Icon","FontAwesomeIcon"],"mappings":";;;;AAUO,MAAMA,kBAAkB,CAACC;IAC5B,MAAMC,OAAOC,cAAcF,MAAM,IAAI;IACrC,IAAI,CAACC,MACD,OAAO;IAGX,OAAO,WAAP,GACI,oBAACE,MAAIA;QACD,oBAAM,oBAACC,iBAAeA;YAAC,MAAMH;;QAC7B,OAAOD,MAAM,IAAI;QACjB,MAAK;QACL,OAAM;;AAGlB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { Icon } from "@webiny/admin-ui";
|
|
3
|
+
import { ReactComponent } from "@webiny/icons/devices_other.svg";
|
|
4
|
+
import { renderModelIcon } from "./renderModelIcon.js";
|
|
5
|
+
const renderModelIconOrFallback = (model, fallbackLabel)=>{
|
|
6
|
+
const icon = model ? renderModelIcon(model) : null;
|
|
7
|
+
if (icon) return icon;
|
|
8
|
+
return /*#__PURE__*/ react.createElement(Icon, {
|
|
9
|
+
icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
10
|
+
label: model?.name ?? fallbackLabel,
|
|
11
|
+
size: "sm",
|
|
12
|
+
color: "neutral-light"
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
export { renderModelIconOrFallback };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=renderModelIconOrFallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils/renderModelIconOrFallback.js","sources":["../../src/utils/renderModelIconOrFallback.tsx"],"sourcesContent":["import React from \"react\";\nimport { Icon } from \"@webiny/admin-ui\";\nimport type { CmsModel } from \"@webiny/app-headless-cms/types.js\";\nimport { ReactComponent as DevicesOtherIcon } from \"@webiny/icons/devices_other.svg\";\nimport { renderModelIcon } from \"./renderModelIcon.js\";\n\n/*\n * The icon of a content model, or the generic `devices_other` icon for a model without a usable\n * icon (or no model at all, labelled with `fallbackLabel`).\n */\nexport const renderModelIconOrFallback = (\n model: Pick<CmsModel, \"name\" | \"icon\"> | undefined,\n fallbackLabel: string\n): React.ReactNode => {\n const icon = model ? renderModelIcon(model) : null;\n if (icon) {\n return icon;\n }\n\n return (\n <Icon\n icon={<DevicesOtherIcon />}\n label={model?.name ?? fallbackLabel}\n size=\"sm\"\n color=\"neutral-light\"\n />\n );\n};\n"],"names":["renderModelIconOrFallback","model","fallbackLabel","icon","renderModelIcon","Icon","DevicesOtherIcon"],"mappings":";;;;AAUO,MAAMA,4BAA4B,CACrCC,OACAC;IAEA,MAAMC,OAAOF,QAAQG,gBAAgBH,SAAS;IAC9C,IAAIE,MACA,OAAOA;IAGX,OAAO,WAAP,GACI,oBAACE,MAAIA;QACD,oBAAM,oBAACC,gBAAgBA;QACvB,OAAOL,OAAO,QAAQC;QACtB,MAAK;QACL,OAAM;;AAGlB"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import react from "react";
|
|
2
|
-
import { Sidebar } from "@webiny/admin-ui";
|
|
3
|
-
import { ReactComponent } from "@webiny/icons/flowchart.svg";
|
|
4
|
-
import { Components } from "@webiny/app-workflows";
|
|
5
|
-
import { ContentEntryListConfig } from "@webiny/app-headless-cms/admin/config/contentEntries/index.js";
|
|
6
|
-
import { IsModelPublishable } from "@webiny/app-headless-cms/exports/admin/cms.js";
|
|
7
|
-
import { useContentEntriesPresenter } from "@webiny/app-headless-cms/exports/admin/cms/entry/list.js";
|
|
8
|
-
import { createAppName } from "../../utils/appName.js";
|
|
9
|
-
const { Overlay: { WorkflowStateListAppOverlay: WorkflowStateListAppOverlay } } = Components;
|
|
10
|
-
const { Browser: Browser } = ContentEntryListConfig;
|
|
11
|
-
const ContentReviewsMenuItem = ()=>{
|
|
12
|
-
const presenter = useContentEntriesPresenter();
|
|
13
|
-
const model = presenter.vm.model;
|
|
14
|
-
const app = createAppName(model);
|
|
15
|
-
return /*#__PURE__*/ react.createElement(IsModelPublishable, null, /*#__PURE__*/ react.createElement(WorkflowStateListAppOverlay, {
|
|
16
|
-
app: app
|
|
17
|
-
}, ({ showOverlay })=>/*#__PURE__*/ react.createElement("div", {
|
|
18
|
-
className: "list-none"
|
|
19
|
-
}, /*#__PURE__*/ react.createElement(Sidebar.Item, {
|
|
20
|
-
onClick: showOverlay,
|
|
21
|
-
text: "Content Reviews",
|
|
22
|
-
icon: /*#__PURE__*/ react.createElement(Sidebar.Item.Icon, {
|
|
23
|
-
element: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
24
|
-
label: "Content Reviews"
|
|
25
|
-
})
|
|
26
|
-
}))));
|
|
27
|
-
};
|
|
28
|
-
const CmsEntriesWorkflowStateListFooterMenu = ()=>/*#__PURE__*/ react.createElement(ContentEntryListConfig, null, /*#__PURE__*/ react.createElement(Browser.Sidebar.Footer, {
|
|
29
|
-
name: "content-reviews",
|
|
30
|
-
element: /*#__PURE__*/ react.createElement(ContentReviewsMenuItem, null)
|
|
31
|
-
}));
|
|
32
|
-
export { CmsEntriesWorkflowStateListFooterMenu };
|
|
33
|
-
|
|
34
|
-
//# sourceMappingURL=CmsEntriesWorkflowStateListFooterMenu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.js","sources":["../../../src/Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.tsx"],"sourcesContent":["import React from \"react\";\nimport { Sidebar } from \"@webiny/admin-ui\";\nimport { ReactComponent as WorkflowStateListIcon } from \"@webiny/icons/flowchart.svg\";\nimport { Components as WorkflowsComponents } from \"@webiny/app-workflows\";\nimport { ContentEntryListConfig } from \"@webiny/app-headless-cms/admin/config/contentEntries/index.js\";\nimport { IsModelPublishable } from \"@webiny/app-headless-cms/exports/admin/cms.js\";\nimport { useContentEntriesPresenter } from \"@webiny/app-headless-cms/exports/admin/cms/entry/list.js\";\nimport { createAppName } from \"~/utils/appName.js\";\n\nconst {\n Overlay: { WorkflowStateListAppOverlay }\n} = WorkflowsComponents;\n\nconst { Browser } = ContentEntryListConfig;\n\nconst ContentReviewsMenuItem = () => {\n const presenter = useContentEntriesPresenter();\n\n const model = presenter.vm.model;\n const app = createAppName(model);\n\n return (\n <IsModelPublishable>\n <WorkflowStateListAppOverlay app={app}>\n {({ showOverlay }) => {\n return (\n <div className={\"list-none\"}>\n <Sidebar.Item\n onClick={showOverlay}\n text={\"Content Reviews\"}\n icon={\n <Sidebar.Item.Icon\n element={<WorkflowStateListIcon />}\n label={\"Content Reviews\"}\n />\n }\n />\n </div>\n );\n }}\n </WorkflowStateListAppOverlay>\n </IsModelPublishable>\n );\n};\n\nexport const CmsEntriesWorkflowStateListFooterMenu = () => {\n return (\n <ContentEntryListConfig>\n <Browser.Sidebar.Footer name={\"content-reviews\"} element={<ContentReviewsMenuItem />} />\n </ContentEntryListConfig>\n );\n};\n"],"names":["WorkflowStateListAppOverlay","WorkflowsComponents","Browser","ContentEntryListConfig","ContentReviewsMenuItem","presenter","useContentEntriesPresenter","model","app","createAppName","IsModelPublishable","showOverlay","Sidebar","WorkflowStateListIcon","CmsEntriesWorkflowStateListFooterMenu"],"mappings":";;;;;;;;AASA,MAAM,EACF,SAAS,EAAEA,6BAAAA,2BAA2B,EAAE,EAC3C,GAAGC;AAEJ,MAAM,EAAEC,SAAAA,OAAO,EAAE,GAAGC;AAEpB,MAAMC,yBAAyB;IAC3B,MAAMC,YAAYC;IAElB,MAAMC,QAAQF,UAAU,EAAE,CAAC,KAAK;IAChC,MAAMG,MAAMC,cAAcF;IAE1B,OAAO,WAAP,GACI,oBAACG,oBAAkBA,MAAAA,WAAAA,GACf,oBAACV,6BAA2BA;QAAC,KAAKQ;OAC7B,CAAC,EAAEG,WAAW,EAAE,GACN,WAAP,GACI,oBAAC;YAAI,WAAW;yBACZ,oBAACC,QAAQ,IAAI;YACT,SAASD;YACT,MAAM;YACN,oBACI,oBAACC,QAAQ,IAAI,CAAC,IAAI;gBACd,uBAAS,oBAACC,gBAAqBA;gBAC/B,OAAO;;;AAU/C;AAEO,MAAMC,wCAAwC,IAC1C,WAAP,GACI,oBAACX,wBAAsBA,MAAAA,WAAAA,GACnB,oBAACD,QAAQ,OAAO,CAAC,MAAM;QAAC,MAAM;QAAmB,uBAAS,oBAACE,wBAAsBA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { CmsEntriesWorkflowStateListFooterMenu } from "./CmsEntriesWorkflowStateListFooterMenu.js";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { CmsEntriesWorkflowStateListFooterMenu } from "./CmsEntriesWorkflowStateListFooterMenu.js";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.js","sources":["../../../src/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useFeature } from \"@webiny/app\";\nimport { useRoute } from \"@webiny/app\";\nimport { useToast } from \"@webiny/admin-ui\";\nimport { InternalContentEntryEditorConfig, usePermission } from \"@webiny/app-headless-cms\";\nimport { useContentEntryFormPresenter } from \"@webiny/app-headless-cms/presentation/contentEntries/form/useContentEntryFormPresenter.js\";\nimport { RevisionsListFeature } from \"@webiny/app-headless-cms/presentation/contentEntries/revisionsList/feature.js\";\nimport { ReactComponent as NewReleaseIcon } from \"@webiny/icons/new_releases.svg\";\nimport { IsModelPublishable } from \"@webiny/app-headless-cms/exports/admin/cms.js\";\nimport { OptionsMenuItem } from \"@webiny/app-admin\";\n\nconst { Actions } = InternalContentEntryEditorConfig;\n\nconst CreateNewRevisionMenuItem = () => {\n const toast = useToast();\n const { setRouteParams } = useRoute();\n const { canEdit } = usePermission();\n const formPresenter = useContentEntryFormPresenter();\n const { presenter: revisionsPresenter } = useFeature(RevisionsListFeature);\n\n const entry = formPresenter.vm.entry;\n\n const onClick = useCallback(async () => {\n if (!entry) {\n return;\n }\n\n const newEntry = await revisionsPresenter.createRevision(entry.id);\n\n if (!newEntry) {\n toast.showWarningToast({\n title: \"Could not create a new revision.\"\n });\n return;\n }\n\n setRouteParams(params => {\n return { ...params, id: newEntry.id };\n });\n }, [entry, revisionsPresenter]);\n\n if (!entry || !canEdit(entry, \"cms.contentEntry\")) {\n return null;\n }\n\n return (\n <OptionsMenuItem\n icon={<NewReleaseIcon />}\n disabled={!entry.id}\n label={`Create New Revision`}\n onAction={onClick}\n data-testid={\"cms.content-form.header.createNewRevision\"}\n />\n );\n};\n\nexport const CmsEntryFormCreateNewRevisionButton = () => {\n return (\n <InternalContentEntryEditorConfig>\n <IsModelPublishable>\n <Actions.MenuItemAction\n name={\"createNewRevision\"}\n element={<CreateNewRevisionMenuItem />}\n />\n </IsModelPublishable>\n </InternalContentEntryEditorConfig>\n );\n};\n"],"names":["Actions","InternalContentEntryEditorConfig","CreateNewRevisionMenuItem","toast","useToast","setRouteParams","useRoute","canEdit","usePermission","formPresenter","useContentEntryFormPresenter","revisionsPresenter","useFeature","RevisionsListFeature","entry","onClick","useCallback","newEntry","params","OptionsMenuItem","NewReleaseIcon","CmsEntryFormCreateNewRevisionButton","IsModelPublishable"],"mappings":";;;;;;;;;AAWA,MAAM,EAAEA,SAAAA,OAAO,EAAE,GAAGC;AAEpB,MAAMC,4BAA4B;IAC9B,MAAMC,QAAQC;IACd,MAAM,EAAEC,cAAc,EAAE,GAAGC;IAC3B,MAAM,EAAEC,OAAO,EAAE,GAAGC;IACpB,MAAMC,gBAAgBC;IACtB,MAAM,EAAE,WAAWC,kBAAkB,EAAE,GAAGC,WAAWC;IAErD,MAAMC,QAAQL,cAAc,EAAE,CAAC,KAAK;IAEpC,MAAMM,UAAUC,YAAY;QACxB,IAAI,CAACF,OACD;QAGJ,MAAMG,WAAW,MAAMN,mBAAmB,cAAc,CAACG,MAAM,EAAE;QAEjE,IAAI,CAACG,UAAU,YACXd,MAAM,gBAAgB,CAAC;YACnB,OAAO;QACX;QAIJE,eAAea,CAAAA,SACJ;gBAAE,GAAGA,MAAM;gBAAE,IAAID,SAAS,EAAE;YAAC;IAE5C,GAAG;QAACH;QAAOH;KAAmB;IAE9B,IAAI,CAACG,SAAS,CAACP,QAAQO,OAAO,qBAC1B,OAAO;IAGX,OAAO,WAAP,GACI,oBAACK,iBAAeA;QACZ,oBAAM,oBAACC,gBAAcA;QACrB,UAAU,CAACN,MAAM,EAAE;QACnB,OAAO;QACP,UAAUC;QACV,eAAa;;AAGzB;AAEO,MAAMM,sCAAsC,IACxC,WAAP,GACI,oBAACpB,kCAAgCA,MAAAA,WAAAA,GAC7B,oBAACqB,oBAAkBA,MAAAA,WAAAA,GACf,oBAACtB,QAAQ,cAAc;QACnB,MAAM;QACN,uBAAS,oBAACE,2BAAyBA"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import react from "react";
|
|
2
|
-
import { ContentEntryEditorConfig } from "@webiny/app-headless-cms";
|
|
3
|
-
import { useWorkflowState } from "@webiny/app-workflows";
|
|
4
|
-
const { Actions: Actions } = ContentEntryEditorConfig;
|
|
5
|
-
const { MenuItemAction: MenuItemAction } = Actions;
|
|
6
|
-
const OverrideScheduleMenuItemAction = (props)=>{
|
|
7
|
-
const { presenter } = useWorkflowState();
|
|
8
|
-
if (!presenter.vm.hasWorkflow || presenter.vm.isApproved) ;
|
|
9
|
-
else if ("schedule" === props.name) return null;
|
|
10
|
-
return props.children;
|
|
11
|
-
};
|
|
12
|
-
const CmsEntryFormScheduleMenuItemAction = MenuItemAction.createDecorator((Original)=>function(props) {
|
|
13
|
-
return /*#__PURE__*/ react.createElement(Original, {
|
|
14
|
-
...props,
|
|
15
|
-
element: /*#__PURE__*/ react.createElement(OverrideScheduleMenuItemAction, {
|
|
16
|
-
name: props.name
|
|
17
|
-
}, props.element)
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
export { CmsEntryFormScheduleMenuItemAction };
|
|
21
|
-
|
|
22
|
-
//# sourceMappingURL=CmsEntryFormScheduleMenuItemAction.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.js","sources":["../../../src/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryEditorConfig } from \"@webiny/app-headless-cms\";\nimport { useWorkflowState } from \"@webiny/app-workflows\";\n\nconst { Actions } = ContentEntryEditorConfig;\nconst { MenuItemAction } = Actions;\n\ninterface IOverrideScheduleMenuItemActionProps {\n name: string;\n children: React.ReactElement;\n}\n\nconst OverrideScheduleMenuItemAction = (props: IOverrideScheduleMenuItemActionProps) => {\n const { presenter } = useWorkflowState();\n /**\n * If there is no workflow state or state is approved, we simply render the original element.\n * This is to ensure that no button will be shown if workflow state is active.\n */\n if (!presenter.vm.hasWorkflow || presenter.vm.isApproved) {\n return props.children;\n } else if (props.name === \"schedule\") {\n return null;\n }\n return props.children;\n};\n/**\n * There is a possibility that this decorator will not do anything, because scheduler is not turned on.\n */\nexport const CmsEntryFormScheduleMenuItemAction = MenuItemAction.createDecorator(Original => {\n return function WorkflowCmsEntryScheduleMenuItemAction(props) {\n return (\n <Original\n {...props}\n element={\n <OverrideScheduleMenuItemAction name={props.name}>\n {props.element}\n </OverrideScheduleMenuItemAction>\n }\n />\n );\n };\n});\n"],"names":["Actions","ContentEntryEditorConfig","MenuItemAction","OverrideScheduleMenuItemAction","props","presenter","useWorkflowState","CmsEntryFormScheduleMenuItemAction","Original"],"mappings":";;;AAIA,MAAM,EAAEA,SAAAA,OAAO,EAAE,GAAGC;AACpB,MAAM,EAAEC,gBAAAA,cAAc,EAAE,GAAGF;AAO3B,MAAMG,iCAAiC,CAACC;IACpC,MAAM,EAAEC,SAAS,EAAE,GAAGC;IAKtB,IAAI,CAACD,UAAU,EAAE,CAAC,WAAW,IAAIA,UAAU,EAAE,CAAC,UAAU;SAEjD,IAAID,AAAe,eAAfA,MAAM,IAAI,EACjB,OAAO;IAEX,OAAOA,MAAM,QAAQ;AACzB;AAIO,MAAMG,qCAAqCL,eAAe,eAAe,CAACM,CAAAA,WACtE,SAAgDJ,KAAK;QACxD,OAAO,WAAP,GACI,oBAACI,UAAAA;YACI,GAAGJ,KAAK;YACT,uBACI,oBAACD,gCAA8BA;gBAAC,MAAMC,MAAM,IAAI;eAC3CA,MAAM,OAAO;;IAKlC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import react from "react";
|
|
2
|
-
import { Components } from "@webiny/app-workflows";
|
|
3
|
-
import { InternalContentEntryEditorConfig } from "@webiny/app-headless-cms";
|
|
4
|
-
const { ContentReview: { WorkflowStateTooltip: WorkflowStateTooltip } } = Components;
|
|
5
|
-
const { Actions: Actions } = InternalContentEntryEditorConfig;
|
|
6
|
-
const CmsEntryFormTooltipButton = ()=>/*#__PURE__*/ react.createElement(InternalContentEntryEditorConfig, null, /*#__PURE__*/ react.createElement(Actions.ButtonAction, {
|
|
7
|
-
before: "save",
|
|
8
|
-
name: "workflowStateTooltip",
|
|
9
|
-
element: /*#__PURE__*/ react.createElement(WorkflowStateTooltip, null)
|
|
10
|
-
}));
|
|
11
|
-
export { CmsEntryFormTooltipButton };
|
|
12
|
-
|
|
13
|
-
//# sourceMappingURL=CmsEntryFormTooltipButton.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Components/ContentEntryForm/CmsEntryFormTooltipButton.js","sources":["../../../src/Components/ContentEntryForm/CmsEntryFormTooltipButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { InternalContentEntryEditorConfig } from \"@webiny/app-headless-cms\";\n\nconst {\n ContentReview: { WorkflowStateTooltip }\n} = Components;\n\nconst { Actions } = InternalContentEntryEditorConfig;\n\nexport const CmsEntryFormTooltipButton = () => {\n return (\n <InternalContentEntryEditorConfig>\n <Actions.ButtonAction\n before={\"save\"}\n name={\"workflowStateTooltip\"}\n element={<WorkflowStateTooltip />}\n />\n </InternalContentEntryEditorConfig>\n );\n};\n"],"names":["WorkflowStateTooltip","Components","Actions","InternalContentEntryEditorConfig","CmsEntryFormTooltipButton"],"mappings":";;;AAIA,MAAM,EACF,eAAe,EAAEA,sBAAAA,oBAAoB,EAAE,EAC1C,GAAGC;AAEJ,MAAM,EAAEC,SAAAA,OAAO,EAAE,GAAGC;AAEb,MAAMC,4BAA4B,IAC9B,WAAP,GACI,oBAACD,kCAAgCA,MAAAA,WAAAA,GAC7B,oBAACD,QAAQ,YAAY;QACjB,QAAQ;QACR,MAAM;QACN,uBAAS,oBAACF,sBAAoBA"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import react from "react";
|
|
2
|
-
import { observer } from "mobx-react-lite";
|
|
3
|
-
import { Alert } from "@webiny/admin-ui";
|
|
4
|
-
import { ContentEntryFormContent } from "@webiny/app-headless-cms/presentation/contentEntries/views/layout/index.js";
|
|
5
|
-
import { useContentEntryFormPresenter } from "@webiny/app-headless-cms/presentation/contentEntries/form/useContentEntryFormPresenter.js";
|
|
6
|
-
import { Components, useWorkflowState } from "@webiny/app-workflows";
|
|
7
|
-
import { CMS_MODEL_SINGLETON_TAG } from "@webiny/app-headless-cms-common";
|
|
8
|
-
const { ContentReview: { WorkflowStateBar: WorkflowStateBar } } = Components;
|
|
9
|
-
const ContentEntryFormWorkflow = ContentEntryFormContent.createDecorator((Original)=>observer(function(props) {
|
|
10
|
-
const formPresenter = useContentEntryFormPresenter();
|
|
11
|
-
const { presenter } = useWorkflowState();
|
|
12
|
-
const model = formPresenter.vm.model;
|
|
13
|
-
const isSingleton = model.tags.includes(CMS_MODEL_SINGLETON_TAG);
|
|
14
|
-
if (isSingleton || formPresenter.vm.isNewEntry || !presenter.vm.hasWorkflow) return /*#__PURE__*/ react.createElement(Original, props);
|
|
15
|
-
return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement("div", {
|
|
16
|
-
className: "max-w-screen bg-white p-sm border-solid border-b-sm border-neutral-dimmed"
|
|
17
|
-
}, /*#__PURE__*/ react.createElement(WorkflowStateBar, null), presenter.vm.hasState ? /*#__PURE__*/ react.createElement(Alert, {
|
|
18
|
-
type: "danger",
|
|
19
|
-
className: "mt-sm"
|
|
20
|
-
}, "Any changes you do on the entry will not be stored!") : null), /*#__PURE__*/ react.createElement(Original, props));
|
|
21
|
-
}));
|
|
22
|
-
export { ContentEntryFormWorkflow };
|
|
23
|
-
|
|
24
|
-
//# sourceMappingURL=ContentEntryFormWorkflow.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Components/ContentEntryForm/ContentEntryFormWorkflow.js","sources":["../../../src/Components/ContentEntryForm/ContentEntryFormWorkflow.tsx"],"sourcesContent":["import React from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { Alert } from \"@webiny/admin-ui\";\nimport { ContentEntryFormContent } from \"@webiny/app-headless-cms/presentation/contentEntries/views/layout/index.js\";\nimport { useContentEntryFormPresenter } from \"@webiny/app-headless-cms/presentation/contentEntries/form/useContentEntryFormPresenter.js\";\nimport { useWorkflowState } from \"@webiny/app-workflows\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { CMS_MODEL_SINGLETON_TAG } from \"@webiny/app-headless-cms-common\";\n\nconst {\n ContentReview: { WorkflowStateBar }\n} = Components;\n\nexport const ContentEntryFormWorkflow = ContentEntryFormContent.createDecorator(Original => {\n return observer(function ContentEntryFormWorkflowDecorator(props) {\n const formPresenter = useContentEntryFormPresenter();\n const { presenter } = useWorkflowState();\n const model = formPresenter.vm.model;\n\n const isSingleton = model.tags.includes(CMS_MODEL_SINGLETON_TAG);\n\n if (isSingleton || formPresenter.vm.isNewEntry || !presenter.vm.hasWorkflow) {\n return <Original {...props} />;\n }\n\n return (\n <>\n <div\n className={\n \"max-w-screen bg-white p-sm border-solid border-b-sm border-neutral-dimmed\"\n }\n >\n <WorkflowStateBar />\n {presenter.vm.hasState ? (\n <Alert type=\"danger\" className={\"mt-sm\"}>\n Any changes you do on the entry will not be stored!\n </Alert>\n ) : null}\n </div>\n <Original {...props} />\n </>\n );\n });\n});\n"],"names":["WorkflowStateBar","Components","ContentEntryFormWorkflow","ContentEntryFormContent","Original","observer","props","formPresenter","useContentEntryFormPresenter","presenter","useWorkflowState","model","isSingleton","CMS_MODEL_SINGLETON_TAG","Alert"],"mappings":";;;;;;;AASA,MAAM,EACF,eAAe,EAAEA,kBAAAA,gBAAgB,EAAE,EACtC,GAAGC;AAEG,MAAMC,2BAA2BC,wBAAwB,eAAe,CAACC,CAAAA,WACrEC,SAAS,SAA2CC,KAAK;QAC5D,MAAMC,gBAAgBC;QACtB,MAAM,EAAEC,SAAS,EAAE,GAAGC;QACtB,MAAMC,QAAQJ,cAAc,EAAE,CAAC,KAAK;QAEpC,MAAMK,cAAcD,MAAM,IAAI,CAAC,QAAQ,CAACE;QAExC,IAAID,eAAeL,cAAc,EAAE,CAAC,UAAU,IAAI,CAACE,UAAU,EAAE,CAAC,WAAW,EACvE,OAAO,WAAP,GAAO,oBAACL,UAAaE;QAGzB,OAAO,WAAP,GACI,wDACI,oBAAC;YACG,WACI;yBAGJ,oBAACN,kBAAgBA,OAChBS,UAAU,EAAE,CAAC,QAAQ,GAAG,WAAH,GAClB,oBAACK,OAAKA;YAAC,MAAK;YAAS,WAAW;WAAS,yDAGzC,qBAER,oBAACV,UAAaE;IAG1B"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import react, { useCallback } from "react";
|
|
2
|
-
import { DropdownMenu, Icon } from "@webiny/admin-ui";
|
|
3
|
-
import { Components } from "@webiny/app-workflows";
|
|
4
|
-
import { ReactComponent } from "@webiny/icons/open_in_new.svg";
|
|
5
|
-
import { useRouter } from "@webiny/app";
|
|
6
|
-
import { Routes } from "@webiny/app-headless-cms/routes.js";
|
|
7
|
-
import { isCmsAppName, parseAppName } from "../../utils/appName.js";
|
|
8
|
-
const { OpenInNewWindow: OpenInNewWindow } = Components.List.Options;
|
|
9
|
-
const OpenInNewWindow_ListOpenInNewWindow = OpenInNewWindow.createDecorator((Original)=>function(props) {
|
|
10
|
-
const { state } = props;
|
|
11
|
-
const { getLink } = useRouter();
|
|
12
|
-
const onClick = useCallback(()=>{
|
|
13
|
-
const modelId = parseAppName(state.app);
|
|
14
|
-
const url = getLink(Routes.ContentEntries.List, {
|
|
15
|
-
modelId,
|
|
16
|
-
id: state.targetRevisionId,
|
|
17
|
-
folderId: "root"
|
|
18
|
-
});
|
|
19
|
-
const goTo = `${window.location.origin}${url}`;
|
|
20
|
-
window.open(goTo, "_blank");
|
|
21
|
-
}, [
|
|
22
|
-
state.id
|
|
23
|
-
]);
|
|
24
|
-
if (false === isCmsAppName(state.app)) return /*#__PURE__*/ react.createElement(Original, props);
|
|
25
|
-
return /*#__PURE__*/ react.createElement(DropdownMenu.Item, {
|
|
26
|
-
icon: /*#__PURE__*/ react.createElement(Icon, {
|
|
27
|
-
icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
28
|
-
label: "Open In New Window"
|
|
29
|
-
}),
|
|
30
|
-
text: "Open in New Window",
|
|
31
|
-
onClick: onClick
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
export { OpenInNewWindow_ListOpenInNewWindow as ListOpenInNewWindow };
|
|
35
|
-
|
|
36
|
-
//# sourceMappingURL=OpenInNewWindow.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Components/OptionItem/OpenInNewWindow.js","sources":["../../../src/Components/OptionItem/OpenInNewWindow.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { DropdownMenu, Icon } from \"@webiny/admin-ui\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { ReactComponent as OpenInNewIcon } from \"@webiny/icons/open_in_new.svg\";\nimport { useRouter } from \"@webiny/app\";\nimport { Routes } from \"@webiny/app-headless-cms/routes.js\";\nimport { isCmsAppName, parseAppName } from \"~/utils/appName.js\";\n\nconst { OpenInNewWindow } = Components.List.Options;\n\nexport const ListOpenInNewWindow = OpenInNewWindow.createDecorator(Original => {\n return function ListOpenInNewWindow(props) {\n const { state } = props;\n\n const { getLink } = useRouter();\n const onClick = useCallback(() => {\n const modelId = parseAppName(state.app);\n const url = getLink(Routes.ContentEntries.List, {\n modelId,\n id: state.targetRevisionId,\n // TODO figure out how to load folderId\n folderId: \"root\"\n });\n\n const goTo = `${window.location.origin}${url}`;\n\n window.open(goTo, \"_blank\");\n }, [state.id]);\n\n if (isCmsAppName(state.app) === false) {\n return <Original {...props} />;\n }\n\n return (\n <DropdownMenu.Item\n icon={<Icon icon={<OpenInNewIcon />} label={\"Open In New Window\"} />}\n text={\"Open in New Window\"}\n onClick={onClick}\n />\n );\n };\n});\n"],"names":["OpenInNewWindow","Components","ListOpenInNewWindow","Original","props","state","getLink","useRouter","onClick","useCallback","modelId","parseAppName","url","Routes","goTo","window","isCmsAppName","DropdownMenu","Icon","OpenInNewIcon"],"mappings":";;;;;;;AAQA,MAAM,EAAEA,iBAAAA,eAAe,EAAE,GAAGC,WAAW,IAAI,CAAC,OAAO;AAE5C,MAAMC,sCAAsBF,gBAAgB,eAAe,CAACG,CAAAA,WACxD,SAA6BC,KAAK;QACrC,MAAM,EAAEC,KAAK,EAAE,GAAGD;QAElB,MAAM,EAAEE,OAAO,EAAE,GAAGC;QACpB,MAAMC,UAAUC,YAAY;YACxB,MAAMC,UAAUC,aAAaN,MAAM,GAAG;YACtC,MAAMO,MAAMN,QAAQO,OAAO,cAAc,CAAC,IAAI,EAAE;gBAC5CH;gBACA,IAAIL,MAAM,gBAAgB;gBAE1B,UAAU;YACd;YAEA,MAAMS,OAAO,GAAGC,OAAO,QAAQ,CAAC,MAAM,GAAGH,KAAK;YAE9CG,OAAO,IAAI,CAACD,MAAM;QACtB,GAAG;YAACT,MAAM,EAAE;SAAC;QAEb,IAAIW,AAA4B,UAA5BA,aAAaX,MAAM,GAAG,GACtB,OAAO,WAAP,GAAO,oBAACF,UAAaC;QAGzB,OAAO,WAAP,GACI,oBAACa,aAAa,IAAI;YACd,oBAAM,oBAACC,MAAIA;gBAAC,oBAAM,oBAACC,gBAAaA;gBAAK,OAAO;;YAC5C,MAAM;YACN,SAASX;;IAGrB"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import react, { Suspense } from "react";
|
|
2
|
-
import { Routes } from "../routes.js";
|
|
3
|
-
import react_helmet from "react-helmet";
|
|
4
|
-
import { i18n } from "@webiny/app/i18n/index.js";
|
|
5
|
-
import { AdminConfig, AdminLayout, SecureRoute } from "@webiny/app-admin";
|
|
6
|
-
import { OverlayLoader } from "@webiny/admin-ui";
|
|
7
|
-
import { useCanUseWorkflows } from "@webiny/app-workflows";
|
|
8
|
-
import { CmsWorkflowsEditorMenu, CmsWorkflowsEditorView } from "../presentation/CmsWorkflowsEditorView.js";
|
|
9
|
-
const t = i18n.namespace("HeadlessCms.Workflows.Editor");
|
|
10
|
-
const Loader = ({ children, ...props })=>/*#__PURE__*/ react.createElement(Suspense, {
|
|
11
|
-
fallback: /*#__PURE__*/ react.createElement(OverlayLoader, null)
|
|
12
|
-
}, /*#__PURE__*/ react.cloneElement(children, props));
|
|
13
|
-
const { Route: Route } = AdminConfig;
|
|
14
|
-
const CmsWorkflowsEditor = ()=>{
|
|
15
|
-
const { canUseWorkflows } = useCanUseWorkflows();
|
|
16
|
-
if (!canUseWorkflows) return null;
|
|
17
|
-
return /*#__PURE__*/ react.createElement(AdminConfig, null, /*#__PURE__*/ react.createElement(Route, {
|
|
18
|
-
route: Routes.ContentModels.Workflows,
|
|
19
|
-
element: /*#__PURE__*/ react.createElement(SecureRoute, {
|
|
20
|
-
permission: "cms.contentModel"
|
|
21
|
-
}, /*#__PURE__*/ react.createElement(AdminLayout, null, /*#__PURE__*/ react.createElement(react_helmet, null, /*#__PURE__*/ react.createElement("title", null, t`Workflows`)), /*#__PURE__*/ react.createElement(Loader, null, /*#__PURE__*/ react.createElement(CmsWorkflowsEditorView, null))))
|
|
22
|
-
}), /*#__PURE__*/ react.createElement(CmsWorkflowsEditorMenu, null));
|
|
23
|
-
};
|
|
24
|
-
export { CmsWorkflowsEditor };
|
|
25
|
-
|
|
26
|
-
//# sourceMappingURL=CmsWorkflowsEditor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Routes/CmsWorkflowsEditor.js","sources":["../../src/Routes/CmsWorkflowsEditor.tsx"],"sourcesContent":["import React, { Suspense } from \"react\";\nimport { Routes } from \"~/routes.js\";\nimport Helmet from \"react-helmet\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { SecureRoute } from \"@webiny/app-admin\";\nimport { OverlayLoader } from \"@webiny/admin-ui\";\nimport { AdminConfig, AdminLayout } from \"@webiny/app-admin\";\nimport { useCanUseWorkflows } from \"@webiny/app-workflows\";\nimport { CmsWorkflowsEditorView } from \"~/presentation/CmsWorkflowsEditorView.js\";\nimport { CmsWorkflowsEditorMenu } from \"~/presentation/CmsWorkflowsEditorView.js\";\n\nconst t = i18n.namespace(\"HeadlessCms.Workflows.Editor\");\n\ninterface LoaderProps {\n children: React.ReactNode;\n}\n\nconst Loader = ({ children, ...props }: LoaderProps) => (\n <Suspense fallback={<OverlayLoader />}>\n {React.cloneElement(children as unknown as React.ReactElement, props)}\n </Suspense>\n);\n\nconst { Route } = AdminConfig;\n\nexport const CmsWorkflowsEditor = () => {\n const { canUseWorkflows } = useCanUseWorkflows();\n if (!canUseWorkflows) {\n return null;\n }\n return (\n <AdminConfig>\n <Route\n route={Routes.ContentModels.Workflows}\n element={\n <SecureRoute permission={\"cms.contentModel\"}>\n <AdminLayout>\n <Helmet>\n <title>{t`Workflows`}</title>\n </Helmet>\n <Loader>\n <CmsWorkflowsEditorView />\n </Loader>\n </AdminLayout>\n </SecureRoute>\n }\n />\n <CmsWorkflowsEditorMenu />\n </AdminConfig>\n );\n};\n"],"names":["t","i18n","Loader","children","props","Suspense","OverlayLoader","React","Route","AdminConfig","CmsWorkflowsEditor","canUseWorkflows","useCanUseWorkflows","Routes","SecureRoute","AdminLayout","Helmet","CmsWorkflowsEditorView","CmsWorkflowsEditorMenu"],"mappings":";;;;;;;;AAWA,MAAMA,IAAIC,KAAK,SAAS,CAAC;AAMzB,MAAMC,SAAS,CAAC,EAAEC,QAAQ,EAAE,GAAGC,OAAoB,iBAC/C,oBAACC,UAAQA;QAAC,wBAAU,oBAACC,eAAaA;qBAC7BC,MAAAA,YAAkB,CAACJ,UAA2CC;AAIvE,MAAM,EAAEI,OAAAA,KAAK,EAAE,GAAGC;AAEX,MAAMC,qBAAqB;IAC9B,MAAM,EAAEC,eAAe,EAAE,GAAGC;IAC5B,IAAI,CAACD,iBACD,OAAO;IAEX,OAAO,WAAP,GACI,oBAACF,aAAWA,MAAAA,WAAAA,GACR,oBAACD,OAAKA;QACF,OAAOK,OAAO,aAAa,CAAC,SAAS;QACrC,uBACI,oBAACC,aAAWA;YAAC,YAAY;yBACrB,oBAACC,aAAWA,MAAAA,WAAAA,GACR,oBAACC,cAAMA,MAAAA,WAAAA,GACH,oBAAC,eAAOhB,CAAC,CAAC,SAAS,CAAC,kBAExB,oBAACE,QAAMA,MAAAA,WAAAA,GACH,oBAACe,wBAAsBA;sBAM3C,oBAACC,wBAAsBA;AAGnC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { ContentEntriesCacheProvider } from "@webiny/app-headless-cms/features/contentEntry/abstractions.js";
|
|
2
|
-
import { WorkflowStateChangedHandler, type WorkflowStateChangedEvent } from "@webiny/app-workflows/domain/events.js";
|
|
3
|
-
declare class WorkflowStateCacheHandlerImpl implements WorkflowStateChangedHandler.Interface {
|
|
4
|
-
private cacheProvider;
|
|
5
|
-
constructor(cacheProvider: ContentEntriesCacheProvider.Interface);
|
|
6
|
-
handle(event: WorkflowStateChangedEvent): Promise<void>;
|
|
7
|
-
}
|
|
8
|
-
export declare const WorkflowStateCacheHandler: typeof WorkflowStateCacheHandlerImpl & {
|
|
9
|
-
__abstraction: import("@webiny/di").Abstraction<import("@webiny/app/features/eventPublisher").IEventHandler<WorkflowStateChangedEvent>>;
|
|
10
|
-
};
|
|
11
|
-
export {};
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { parseIdentifier } from "@webiny/utils/parseIdentifier.js";
|
|
2
|
-
import { ContentEntriesCacheProvider } from "@webiny/app-headless-cms/features/contentEntry/abstractions.js";
|
|
3
|
-
import { WorkflowStateChangedHandler } from "@webiny/app-workflows/domain/events.js";
|
|
4
|
-
function getModelIdFromAppName(app) {
|
|
5
|
-
const matched = app.match(/^cms\.([a-zA-Z0-9_-]+)$/);
|
|
6
|
-
return matched ? matched[1] : null;
|
|
7
|
-
}
|
|
8
|
-
function toWorkflowStateValues(state) {
|
|
9
|
-
if (!state) return null;
|
|
10
|
-
return {
|
|
11
|
-
workflowId: state.id,
|
|
12
|
-
stepId: state.currentStep.id,
|
|
13
|
-
stepName: state.currentStep.title,
|
|
14
|
-
state: state.state
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
class WorkflowStateCacheHandlerImpl {
|
|
18
|
-
constructor(cacheProvider){
|
|
19
|
-
this.cacheProvider = cacheProvider;
|
|
20
|
-
}
|
|
21
|
-
async handle(event) {
|
|
22
|
-
const { app, targetRevisionId, state } = event.payload;
|
|
23
|
-
const modelId = getModelIdFromAppName(app);
|
|
24
|
-
if (!modelId) return;
|
|
25
|
-
const { id: entryId } = parseIdentifier(targetRevisionId);
|
|
26
|
-
const cache = this.cacheProvider.get(modelId);
|
|
27
|
-
const workflowValues = toWorkflowStateValues(state);
|
|
28
|
-
cache.updateItems((entry)=>{
|
|
29
|
-
if (entry.entryId !== entryId) return entry;
|
|
30
|
-
return {
|
|
31
|
-
...entry,
|
|
32
|
-
meta: {
|
|
33
|
-
...entry.meta,
|
|
34
|
-
system: {
|
|
35
|
-
workflow: workflowValues
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
const WorkflowStateCacheHandler = WorkflowStateChangedHandler.createImplementation({
|
|
43
|
-
implementation: WorkflowStateCacheHandlerImpl,
|
|
44
|
-
dependencies: [
|
|
45
|
-
ContentEntriesCacheProvider
|
|
46
|
-
]
|
|
47
|
-
});
|
|
48
|
-
export { WorkflowStateCacheHandler };
|
|
49
|
-
|
|
50
|
-
//# sourceMappingURL=WorkflowStateCacheHandler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"features/WorkflowStateCacheHandler.js","sources":["../../src/features/WorkflowStateCacheHandler.ts"],"sourcesContent":["import { parseIdentifier } from \"@webiny/utils/parseIdentifier.js\";\nimport { ContentEntriesCacheProvider } from \"@webiny/app-headless-cms/features/contentEntry/abstractions.js\";\nimport {\n WorkflowStateChangedHandler,\n type WorkflowStateChangedEvent\n} from \"@webiny/app-workflows/domain/events.js\";\nimport type { CmsContentEntry } from \"@webiny/app-headless-cms-common/types/index.js\";\nimport type { ICmsEntryWorkflowState } from \"~/types.js\";\n\nfunction getModelIdFromAppName(app: string): string | null {\n const matched = app.match(/^cms\\.([a-zA-Z0-9_-]+)$/);\n return matched ? matched[1] : null;\n}\n\nfunction toWorkflowStateValues(\n state: WorkflowStateChangedEvent[\"payload\"][\"state\"]\n): ICmsEntryWorkflowState | null {\n if (!state) {\n return null;\n }\n\n return {\n workflowId: state.id,\n stepId: state.currentStep.id,\n stepName: state.currentStep.title,\n state: state.state\n };\n}\n\nclass WorkflowStateCacheHandlerImpl implements WorkflowStateChangedHandler.Interface {\n constructor(private cacheProvider: ContentEntriesCacheProvider.Interface) {}\n\n async handle(event: WorkflowStateChangedEvent): Promise<void> {\n const { app, targetRevisionId, state } = event.payload;\n\n const modelId = getModelIdFromAppName(app);\n if (!modelId) {\n return;\n }\n\n const { id: entryId } = parseIdentifier(targetRevisionId);\n const cache = this.cacheProvider.get(modelId);\n const workflowValues = toWorkflowStateValues(state);\n\n cache.updateItems((entry: CmsContentEntry) => {\n if (entry.entryId !== entryId) {\n return entry;\n }\n\n return {\n ...entry,\n meta: {\n ...entry.meta,\n system: {\n workflow: workflowValues\n }\n }\n };\n });\n }\n}\n\nexport const WorkflowStateCacheHandler = WorkflowStateChangedHandler.createImplementation({\n implementation: WorkflowStateCacheHandlerImpl,\n dependencies: [ContentEntriesCacheProvider]\n});\n"],"names":["getModelIdFromAppName","app","matched","toWorkflowStateValues","state","WorkflowStateCacheHandlerImpl","cacheProvider","event","targetRevisionId","modelId","entryId","parseIdentifier","cache","workflowValues","entry","WorkflowStateCacheHandler","WorkflowStateChangedHandler","ContentEntriesCacheProvider"],"mappings":";;;AASA,SAASA,sBAAsBC,GAAW;IACtC,MAAMC,UAAUD,IAAI,KAAK,CAAC;IAC1B,OAAOC,UAAUA,OAAO,CAAC,EAAE,GAAG;AAClC;AAEA,SAASC,sBACLC,KAAoD;IAEpD,IAAI,CAACA,OACD,OAAO;IAGX,OAAO;QACH,YAAYA,MAAM,EAAE;QACpB,QAAQA,MAAM,WAAW,CAAC,EAAE;QAC5B,UAAUA,MAAM,WAAW,CAAC,KAAK;QACjC,OAAOA,MAAM,KAAK;IACtB;AACJ;AAEA,MAAMC;IACF,YAAoBC,aAAoD,CAAE;aAAtDA,aAAa,GAAbA;IAAuD;IAE3E,MAAM,OAAOC,KAAgC,EAAiB;QAC1D,MAAM,EAAEN,GAAG,EAAEO,gBAAgB,EAAEJ,KAAK,EAAE,GAAGG,MAAM,OAAO;QAEtD,MAAME,UAAUT,sBAAsBC;QACtC,IAAI,CAACQ,SACD;QAGJ,MAAM,EAAE,IAAIC,OAAO,EAAE,GAAGC,gBAAgBH;QACxC,MAAMI,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAACH;QACrC,MAAMI,iBAAiBV,sBAAsBC;QAE7CQ,MAAM,WAAW,CAAC,CAACE;YACf,IAAIA,MAAM,OAAO,KAAKJ,SAClB,OAAOI;YAGX,OAAO;gBACH,GAAGA,KAAK;gBACR,MAAM;oBACF,GAAGA,MAAM,IAAI;oBACb,QAAQ;wBACJ,UAAUD;oBACd;gBACJ;YACJ;QACJ;IACJ;AACJ;AAEO,MAAME,4BAA4BC,4BAA4B,oBAAoB,CAAC;IACtF,gBAAgBX;IAChB,cAAc;QAACY;KAA4B;AAC/C"}
|