@webiny/api-apw 0.0.0-unstable.5e7233243f
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/ContentApwSettingsPlugin.d.ts +10 -0
- package/ContentApwSettingsPlugin.js +17 -0
- package/ContentApwSettingsPlugin.js.map +1 -0
- package/LICENSE +21 -0
- package/README.md +34 -0
- package/crud/createChangeRequestMethods.d.ts +2 -0
- package/crud/createChangeRequestMethods.js +95 -0
- package/crud/createChangeRequestMethods.js.map +1 -0
- package/crud/createCommentMethods.d.ts +2 -0
- package/crud/createCommentMethods.js +96 -0
- package/crud/createCommentMethods.js.map +1 -0
- package/crud/createContentReviewMethods.d.ts +10 -0
- package/crud/createContentReviewMethods.js +552 -0
- package/crud/createContentReviewMethods.js.map +1 -0
- package/crud/createReviewerMethods.d.ts +2 -0
- package/crud/createReviewerMethods.js +96 -0
- package/crud/createReviewerMethods.js.map +1 -0
- package/crud/createWorkflowMethods.d.ts +2 -0
- package/crud/createWorkflowMethods.js +96 -0
- package/crud/createWorkflowMethods.js.map +1 -0
- package/crud/index.d.ts +2 -0
- package/crud/index.js +100 -0
- package/crud/index.js.map +1 -0
- package/crud/utils.d.ts +21 -0
- package/crud/utils.js +142 -0
- package/crud/utils.js.map +1 -0
- package/index.d.ts +4 -0
- package/index.js +34 -0
- package/index.js.map +1 -0
- package/package.json +75 -0
- package/plugins/cms/CmsEntryApwSettingsGetterPlugin.d.ts +10 -0
- package/plugins/cms/CmsEntryApwSettingsGetterPlugin.js +51 -0
- package/plugins/cms/CmsEntryApwSettingsGetterPlugin.js.map +1 -0
- package/plugins/cms/README.md +49 -0
- package/plugins/cms/apwEntryPlugins.d.ts +8 -0
- package/plugins/cms/apwEntryPlugins.js +50 -0
- package/plugins/cms/apwEntryPlugins.js.map +1 -0
- package/plugins/cms/index.d.ts +12 -0
- package/plugins/cms/index.js +37 -0
- package/plugins/cms/index.js.map +1 -0
- package/plugins/cms/linkContentReviewToEntry.d.ts +8 -0
- package/plugins/cms/linkContentReviewToEntry.js +108 -0
- package/plugins/cms/linkContentReviewToEntry.js.map +1 -0
- package/plugins/cms/linkWorkflowToEntry.d.ts +8 -0
- package/plugins/cms/linkWorkflowToEntry.js +166 -0
- package/plugins/cms/linkWorkflowToEntry.js.map +1 -0
- package/plugins/cms/triggerContentReview.d.ts +8 -0
- package/plugins/cms/triggerContentReview.js +59 -0
- package/plugins/cms/triggerContentReview.js.map +1 -0
- package/plugins/cms/updateContentReviewStatus.d.ts +10 -0
- package/plugins/cms/updateContentReviewStatus.js +101 -0
- package/plugins/cms/updateContentReviewStatus.js.map +1 -0
- package/plugins/cms/utils.d.ts +27 -0
- package/plugins/cms/utils.js +211 -0
- package/plugins/cms/utils.js.map +1 -0
- package/plugins/context.d.ts +5 -0
- package/plugins/context.js +146 -0
- package/plugins/context.js.map +1 -0
- package/plugins/graphql/changeRequest.gql.d.ts +4 -0
- package/plugins/graphql/changeRequest.gql.js +155 -0
- package/plugins/graphql/changeRequest.gql.js.map +1 -0
- package/plugins/graphql/comment.gql.d.ts +4 -0
- package/plugins/graphql/comment.gql.js +160 -0
- package/plugins/graphql/comment.gql.js.map +1 -0
- package/plugins/graphql/contentReview.gql.d.ts +4 -0
- package/plugins/graphql/contentReview.gql.js +382 -0
- package/plugins/graphql/contentReview.gql.js.map +1 -0
- package/plugins/graphql/reviewer.gql.d.ts +4 -0
- package/plugins/graphql/reviewer.gql.js +114 -0
- package/plugins/graphql/reviewer.gql.js.map +1 -0
- package/plugins/graphql/workflow.gql.d.ts +4 -0
- package/plugins/graphql/workflow.gql.js +205 -0
- package/plugins/graphql/workflow.gql.js.map +1 -0
- package/plugins/graphql.d.ts +4 -0
- package/plugins/graphql.js +95 -0
- package/plugins/graphql.js.map +1 -0
- package/plugins/hooks/createReviewerFromIdentity.d.ts +2 -0
- package/plugins/hooks/createReviewerFromIdentity.js +62 -0
- package/plugins/hooks/createReviewerFromIdentity.js.map +1 -0
- package/plugins/hooks/deleteChangeRequestsAfterContentReview.d.ts +2 -0
- package/plugins/hooks/deleteChangeRequestsAfterContentReview.js +67 -0
- package/plugins/hooks/deleteChangeRequestsAfterContentReview.js.map +1 -0
- package/plugins/hooks/deleteCommentsAfterChangeRequest.d.ts +2 -0
- package/plugins/hooks/deleteCommentsAfterChangeRequest.js +59 -0
- package/plugins/hooks/deleteCommentsAfterChangeRequest.js.map +1 -0
- package/plugins/hooks/index.d.ts +3 -0
- package/plugins/hooks/index.js +68 -0
- package/plugins/hooks/index.js.map +1 -0
- package/plugins/hooks/initializeContentReviewSteps.d.ts +2 -0
- package/plugins/hooks/initializeContentReviewSteps.js +89 -0
- package/plugins/hooks/initializeContentReviewSteps.js.map +1 -0
- package/plugins/hooks/updatePendingChangeRequests.d.ts +2 -0
- package/plugins/hooks/updatePendingChangeRequests.js +98 -0
- package/plugins/hooks/updatePendingChangeRequests.js.map +1 -0
- package/plugins/hooks/updateTotalComments.d.ts +3 -0
- package/plugins/hooks/updateTotalComments.js +157 -0
- package/plugins/hooks/updateTotalComments.js.map +1 -0
- package/plugins/hooks/validateChangeRequest.d.ts +2 -0
- package/plugins/hooks/validateChangeRequest.js +64 -0
- package/plugins/hooks/validateChangeRequest.js.map +1 -0
- package/plugins/hooks/validateComment.d.ts +2 -0
- package/plugins/hooks/validateComment.js +47 -0
- package/plugins/hooks/validateComment.js.map +1 -0
- package/plugins/hooks/validateContentReview.d.ts +2 -0
- package/plugins/hooks/validateContentReview.js +38 -0
- package/plugins/hooks/validateContentReview.js.map +1 -0
- package/plugins/pageBuilder/PageApwSettingsGetterPlugin.d.ts +9 -0
- package/plugins/pageBuilder/PageApwSettingsGetterPlugin.js +51 -0
- package/plugins/pageBuilder/PageApwSettingsGetterPlugin.js.map +1 -0
- package/plugins/pageBuilder/apwContentPagePlugins.d.ts +3 -0
- package/plugins/pageBuilder/apwContentPagePlugins.js +30 -0
- package/plugins/pageBuilder/apwContentPagePlugins.js.map +1 -0
- package/plugins/pageBuilder/extendPbPageSettingsSchema.d.ts +3 -0
- package/plugins/pageBuilder/extendPbPageSettingsSchema.js +25 -0
- package/plugins/pageBuilder/extendPbPageSettingsSchema.js.map +1 -0
- package/plugins/pageBuilder/index.d.ts +11 -0
- package/plugins/pageBuilder/index.js +45 -0
- package/plugins/pageBuilder/index.js.map +1 -0
- package/plugins/pageBuilder/linkContentReviewToPage.d.ts +8 -0
- package/plugins/pageBuilder/linkContentReviewToPage.js +93 -0
- package/plugins/pageBuilder/linkContentReviewToPage.js.map +1 -0
- package/plugins/pageBuilder/linkWorkflowToPage.d.ts +8 -0
- package/plugins/pageBuilder/linkWorkflowToPage.js +182 -0
- package/plugins/pageBuilder/linkWorkflowToPage.js.map +1 -0
- package/plugins/pageBuilder/triggerContentReview.d.ts +8 -0
- package/plugins/pageBuilder/triggerContentReview.js +50 -0
- package/plugins/pageBuilder/triggerContentReview.js.map +1 -0
- package/plugins/pageBuilder/updateContentReviewStatus.d.ts +10 -0
- package/plugins/pageBuilder/updateContentReviewStatus.js +83 -0
- package/plugins/pageBuilder/updateContentReviewStatus.js.map +1 -0
- package/plugins/pageBuilder/utils.d.ts +22 -0
- package/plugins/pageBuilder/utils.js +184 -0
- package/plugins/pageBuilder/utils.js.map +1 -0
- package/plugins/utils.d.ts +35 -0
- package/plugins/utils.js +197 -0
- package/plugins/utils.js.map +1 -0
- package/scheduler/createScheduleActionMethods.d.ts +2 -0
- package/scheduler/createScheduleActionMethods.js +146 -0
- package/scheduler/createScheduleActionMethods.js.map +1 -0
- package/scheduler/handlers/executeAction/index.d.ts +13 -0
- package/scheduler/handlers/executeAction/index.js +172 -0
- package/scheduler/handlers/executeAction/index.js.map +1 -0
- package/scheduler/handlers/executeAction/plugins/ApplicationGraphQL.d.ts +13 -0
- package/scheduler/handlers/executeAction/plugins/ApplicationGraphQL.js +17 -0
- package/scheduler/handlers/executeAction/plugins/ApplicationGraphQL.js.map +1 -0
- package/scheduler/handlers/executeAction/plugins/HeadlessCMSGraphQL.d.ts +11 -0
- package/scheduler/handlers/executeAction/plugins/HeadlessCMSGraphQL.js +126 -0
- package/scheduler/handlers/executeAction/plugins/HeadlessCMSGraphQL.js.map +1 -0
- package/scheduler/handlers/executeAction/plugins/PageBuilderGraphQL.d.ts +11 -0
- package/scheduler/handlers/executeAction/plugins/PageBuilderGraphQL.js +163 -0
- package/scheduler/handlers/executeAction/plugins/PageBuilderGraphQL.js.map +1 -0
- package/scheduler/handlers/executeAction/security.d.ts +4 -0
- package/scheduler/handlers/executeAction/security.js +68 -0
- package/scheduler/handlers/executeAction/security.js.map +1 -0
- package/scheduler/handlers/scheduleAction/index.d.ts +22 -0
- package/scheduler/handlers/scheduleAction/index.js +165 -0
- package/scheduler/handlers/scheduleAction/index.js.map +1 -0
- package/scheduler/handlers/scheduleAction/scheduleAction.utils.d.ts +24 -0
- package/scheduler/handlers/scheduleAction/scheduleAction.utils.js +176 -0
- package/scheduler/handlers/scheduleAction/scheduleAction.utils.js.map +1 -0
- package/scheduler/handlers/utils.d.ts +33 -0
- package/scheduler/handlers/utils.js +168 -0
- package/scheduler/handlers/utils.js.map +1 -0
- package/scheduler/index.d.ts +2 -0
- package/scheduler/index.js +27 -0
- package/scheduler/index.js.map +1 -0
- package/scheduler/types.d.ts +171 -0
- package/scheduler/types.js +34 -0
- package/scheduler/types.js.map +1 -0
- package/storageOperations/changeRequestStorageOperations.d.ts +3 -0
- package/storageOperations/changeRequestStorageOperations.js +126 -0
- package/storageOperations/changeRequestStorageOperations.js.map +1 -0
- package/storageOperations/commentStorageOperations.d.ts +3 -0
- package/storageOperations/commentStorageOperations.js +142 -0
- package/storageOperations/commentStorageOperations.js.map +1 -0
- package/storageOperations/contentReviewStorageOperations.d.ts +3 -0
- package/storageOperations/contentReviewStorageOperations.js +97 -0
- package/storageOperations/contentReviewStorageOperations.js.map +1 -0
- package/storageOperations/index.d.ts +15 -0
- package/storageOperations/index.js +52 -0
- package/storageOperations/index.js.map +1 -0
- package/storageOperations/models/changeRequest.model.d.ts +3 -0
- package/storageOperations/models/changeRequest.model.js +59 -0
- package/storageOperations/models/changeRequest.model.js.map +1 -0
- package/storageOperations/models/comment.model.d.ts +7 -0
- package/storageOperations/models/comment.model.js +60 -0
- package/storageOperations/models/comment.model.js.map +1 -0
- package/storageOperations/models/contentModelPluginFactory.d.ts +15 -0
- package/storageOperations/models/contentModelPluginFactory.js +32 -0
- package/storageOperations/models/contentModelPluginFactory.js.map +1 -0
- package/storageOperations/models/contentReview.model.d.ts +7 -0
- package/storageOperations/models/contentReview.model.js +257 -0
- package/storageOperations/models/contentReview.model.js.map +1 -0
- package/storageOperations/models/index.d.ts +2 -0
- package/storageOperations/models/index.js +115 -0
- package/storageOperations/models/index.js.map +1 -0
- package/storageOperations/models/reviewer.model.d.ts +3 -0
- package/storageOperations/models/reviewer.model.js +55 -0
- package/storageOperations/models/reviewer.model.js.map +1 -0
- package/storageOperations/models/utils.d.ts +3 -0
- package/storageOperations/models/utils.js +36 -0
- package/storageOperations/models/utils.js.map +1 -0
- package/storageOperations/models/workflow.model.d.ts +12 -0
- package/storageOperations/models/workflow.model.js +208 -0
- package/storageOperations/models/workflow.model.js.map +1 -0
- package/storageOperations/reviewerStorageOperations.d.ts +3 -0
- package/storageOperations/reviewerStorageOperations.js +93 -0
- package/storageOperations/reviewerStorageOperations.js.map +1 -0
- package/storageOperations/types.d.ts +34 -0
- package/storageOperations/types.js +5 -0
- package/storageOperations/types.js.map +1 -0
- package/storageOperations/workflowStorageOperations.d.ts +3 -0
- package/storageOperations/workflowStorageOperations.js +115 -0
- package/storageOperations/workflowStorageOperations.js.map +1 -0
- package/types.d.ts +737 -0
- package/types.js +69 -0
- package/types.js.map +1 -0
- package/utils/contentApwSettingsPlugin.d.ts +9 -0
- package/utils/contentApwSettingsPlugin.js +26 -0
- package/utils/contentApwSettingsPlugin.js.map +1 -0
- package/utils/errors.d.ts +16 -0
- package/utils/errors.js +75 -0
- package/utils/errors.js.map +1 -0
- package/utils/fieldResolver.d.ts +16 -0
- package/utils/fieldResolver.js +60 -0
- package/utils/fieldResolver.js.map +1 -0
- package/utils/resolve.d.ts +3 -0
- package/utils/resolve.js +18 -0
- package/utils/resolve.js.map +1 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports.CmsEntryApwSettingsGetterPlugin = void 0;
|
9
|
+
|
10
|
+
var _ContentApwSettingsPlugin = require("../../ContentApwSettingsPlugin");
|
11
|
+
|
12
|
+
var _types = require("../../types");
|
13
|
+
|
14
|
+
var _set = _interopRequireDefault(require("lodash/set"));
|
15
|
+
|
16
|
+
class CmsEntryApwSettingsGetterPlugin extends _ContentApwSettingsPlugin.ContentApwSettingsPlugin {
|
17
|
+
canUse(type) {
|
18
|
+
return type === _types.ApwContentTypes.CMS_ENTRY;
|
19
|
+
}
|
20
|
+
|
21
|
+
setWorkflowId(entry, id) {
|
22
|
+
entry.meta = (0, _set.default)(entry.meta || {}, "apw.workflowId", id);
|
23
|
+
}
|
24
|
+
|
25
|
+
getWorkflowId(entry) {
|
26
|
+
var _entry$meta$apw;
|
27
|
+
|
28
|
+
if (!entry.meta) {
|
29
|
+
return null;
|
30
|
+
}
|
31
|
+
|
32
|
+
return ((_entry$meta$apw = entry.meta.apw) === null || _entry$meta$apw === void 0 ? void 0 : _entry$meta$apw.workflowId) || null;
|
33
|
+
}
|
34
|
+
|
35
|
+
setContentReviewId(entry, id) {
|
36
|
+
entry.meta = (0, _set.default)(entry.meta || {}, "apw.contentReviewId", id);
|
37
|
+
}
|
38
|
+
|
39
|
+
getContentReviewId(entry) {
|
40
|
+
var _entry$meta$apw2;
|
41
|
+
|
42
|
+
if (!entry.meta) {
|
43
|
+
return null;
|
44
|
+
}
|
45
|
+
|
46
|
+
return ((_entry$meta$apw2 = entry.meta.apw) === null || _entry$meta$apw2 === void 0 ? void 0 : _entry$meta$apw2.contentReviewId) || null;
|
47
|
+
}
|
48
|
+
|
49
|
+
}
|
50
|
+
|
51
|
+
exports.CmsEntryApwSettingsGetterPlugin = CmsEntryApwSettingsGetterPlugin;
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["CmsEntryApwSettingsGetterPlugin","ContentApwSettingsPlugin","canUse","type","ApwContentTypes","CMS_ENTRY","setWorkflowId","entry","id","meta","set","getWorkflowId","apw","workflowId","setContentReviewId","getContentReviewId","contentReviewId"],"sources":["CmsEntryApwSettingsGetterPlugin.ts"],"sourcesContent":["import { ContentApwSettingsPlugin } from \"~/ContentApwSettingsPlugin\";\nimport { CmsEntry } from \"@webiny/api-headless-cms/types\";\nimport { ApwContentTypes } from \"~/types\";\nimport set from \"lodash/set\";\n\nexport class CmsEntryApwSettingsGetterPlugin extends ContentApwSettingsPlugin {\n public override canUse(type: ApwContentTypes): boolean {\n return type === ApwContentTypes.CMS_ENTRY;\n }\n\n public override setWorkflowId(entry: CmsEntry, id: string | null) {\n entry.meta = set(entry.meta || {}, \"apw.workflowId\", id);\n }\n\n public override getWorkflowId(entry: CmsEntry): string | null {\n if (!entry.meta) {\n return null;\n }\n return entry.meta.apw?.workflowId || null;\n }\n\n public override setContentReviewId(entry: CmsEntry, id: string | null) {\n entry.meta = set(entry.meta || {}, \"apw.contentReviewId\", id);\n }\n public override getContentReviewId(entry: CmsEntry): string | null {\n if (!entry.meta) {\n return null;\n }\n return entry.meta.apw?.contentReviewId || null;\n }\n}\n"],"mappings":";;;;;;;;;AAAA;;AAEA;;AACA;;AAEO,MAAMA,+BAAN,SAA8CC,kDAA9C,CAAuE;EAC1DC,MAAM,CAACC,IAAD,EAAiC;IACnD,OAAOA,IAAI,KAAKC,sBAAA,CAAgBC,SAAhC;EACH;;EAEeC,aAAa,CAACC,KAAD,EAAkBC,EAAlB,EAAqC;IAC9DD,KAAK,CAACE,IAAN,GAAa,IAAAC,YAAA,EAAIH,KAAK,CAACE,IAAN,IAAc,EAAlB,EAAsB,gBAAtB,EAAwCD,EAAxC,CAAb;EACH;;EAEeG,aAAa,CAACJ,KAAD,EAAiC;IAAA;;IAC1D,IAAI,CAACA,KAAK,CAACE,IAAX,EAAiB;MACb,OAAO,IAAP;IACH;;IACD,OAAO,oBAAAF,KAAK,CAACE,IAAN,CAAWG,GAAX,oEAAgBC,UAAhB,KAA8B,IAArC;EACH;;EAEeC,kBAAkB,CAACP,KAAD,EAAkBC,EAAlB,EAAqC;IACnED,KAAK,CAACE,IAAN,GAAa,IAAAC,YAAA,EAAIH,KAAK,CAACE,IAAN,IAAc,EAAlB,EAAsB,qBAAtB,EAA6CD,EAA7C,CAAb;EACH;;EACeO,kBAAkB,CAACR,KAAD,EAAiC;IAAA;;IAC/D,IAAI,CAACA,KAAK,CAACE,IAAX,EAAiB;MACb,OAAO,IAAP;IACH;;IACD,OAAO,qBAAAF,KAAK,CAACE,IAAN,CAAWG,GAAX,sEAAgBI,eAAhB,KAAmC,IAA1C;EACH;;AAxByE"}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# APW for CMS
|
2
|
+
|
3
|
+
## Overview
|
4
|
+
|
5
|
+
This file contains a high-level overview of the process of integrating CMS with Advanced Publishing Workflow (APW). We
|
6
|
+
will only discuss _API_ side of things here but if you are interested in _APP_ side please feel free to check
|
7
|
+
out [this file](/packages/app-apw/src/plugins/cms/README.md).
|
8
|
+
|
9
|
+
We have already integrated the Page Builder application. The [pageBuilder](../pageBuilder) folder contains all the
|
10
|
+
source code (plugins, methods) for integrating it with APW.
|
11
|
+
|
12
|
+
We will briefly discuss each of those files:
|
13
|
+
|
14
|
+
- [apwContentPagePlugins.ts](../pageBuilder/apwContentPagePlugins.ts) - It registers functions onto APW context which
|
15
|
+
helps to execute logic such as `getContent`, `publishContent` and `unpublishContent` during the whole workflow.
|
16
|
+
- [linkContentReviewToPage.ts](../pageBuilder/linkContentReviewToPage.ts) - It contains logic for hooking into apw
|
17
|
+
`contentReivew` and `page` lifecycle events to manipulate `apw.contentReviewId` property in page `settings`. Which is
|
18
|
+
essential for performing various business logic checks across the APW application.
|
19
|
+
- [linkWorkflowToPage.ts](../pageBuilder/linkWorkflowToPage.ts) - It contains logic for hooking into apw
|
20
|
+
`contentReivew` and `page` lifecycle events to manipulate `apw.workflowId` property in page `settings`. Which is
|
21
|
+
essential for performing various business logic checks across the APW application.
|
22
|
+
- [triggerContentReview.ts](../pageBuilder/triggerContentReview.ts) - It contains logic for hooking
|
23
|
+
into `onBeforePagePublish`
|
24
|
+
lifecycle event to execute various business logic checks which among other things prevent triggering more than one
|
25
|
+
__content review__ for a page.
|
26
|
+
- [updateContentReviewStatus.ts](../pageBuilder/updateContentReviewStatus.ts) - As the name suggest, this file contains
|
27
|
+
logic that hooks into `onAfterPagePublish` and `onAfterPageUnPublish` lifecycle events to update __content review__
|
28
|
+
status and metadata accordingly.
|
29
|
+
- [utils.ts](../pageBuilder/utils.ts) - It contains various helper functions that are used in the above-mentioned files.
|
30
|
+
I would like to highlight [`assignWorkflowToPage`](../pageBuilder/utils.ts#L70) function
|
31
|
+
which is responsible for assigning the most suitable workflow to a page. We need to implement a similar function that
|
32
|
+
will work with CMS.
|
33
|
+
|
34
|
+
As you may have already noticed we are heavily using lifecycle events
|
35
|
+
from [`AdvancedPublishingWorkflow`](/packages/api-apw/src/types.ts#L467)
|
36
|
+
and [`PageBuilderContextObject`](/packages/api-page-builder/src/graphql/types.ts#L505)
|
37
|
+
to executing various business logic which makes it modular and easy to understand.
|
38
|
+
|
39
|
+
One can follow a similar approach when building the APW integration for CMS. A good amount of code can be taken
|
40
|
+
from [pageBuilder](../pageBuilder) and make it work for CMS with slight adjustment to how CMS works.
|
41
|
+
|
42
|
+
## We should keep in mind the following points about CMS when building the integration:
|
43
|
+
|
44
|
+
- CMS entry does not offer a place to store any metadata at the moment. For instance, we need to store `apw` object
|
45
|
+
containing `contentReviewId` and `workflowId` for it to be integrated with APW.
|
46
|
+
- Unlike PB page, to load an entry we need to know `modelId` as well besides the `entryId`. So, make sure that we save
|
47
|
+
that information when assigning __entries__ to a workflow.
|
48
|
+
|
49
|
+
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { AdvancedPublishingWorkflow } from "../../types";
|
2
|
+
import { HeadlessCms } from "@webiny/api-headless-cms/types";
|
3
|
+
interface ApwEntryPlugins {
|
4
|
+
apw: AdvancedPublishingWorkflow;
|
5
|
+
cms: HeadlessCms;
|
6
|
+
}
|
7
|
+
export declare const apwEntryPlugins: (params: ApwEntryPlugins) => void;
|
8
|
+
export {};
|
@@ -0,0 +1,50 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports.apwEntryPlugins = void 0;
|
9
|
+
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
11
|
+
|
12
|
+
var _types = require("../../types");
|
13
|
+
|
14
|
+
var _utils = require("./utils");
|
15
|
+
|
16
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
17
|
+
|
18
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
19
|
+
|
20
|
+
const apwEntryPlugins = params => {
|
21
|
+
const {
|
22
|
+
cms,
|
23
|
+
apw
|
24
|
+
} = params;
|
25
|
+
apw.addContentGetter(_types.ApwContentTypes.CMS_ENTRY, async (id, settings) => {
|
26
|
+
const model = await (0, _utils.fetchModel)(cms, id, settings);
|
27
|
+
const item = await cms.getEntryById(model, id);
|
28
|
+
|
29
|
+
if (!item) {
|
30
|
+
return null;
|
31
|
+
}
|
32
|
+
|
33
|
+
return _objectSpread(_objectSpread({}, item), {}, {
|
34
|
+
meta: _objectSpread({}, item.meta || {}),
|
35
|
+
title: (0, _utils.getEntryTitle)(model, item)
|
36
|
+
});
|
37
|
+
});
|
38
|
+
apw.addContentPublisher(_types.ApwContentTypes.CMS_ENTRY, async (id, settings) => {
|
39
|
+
const model = await (0, _utils.fetchModel)(cms, id, settings);
|
40
|
+
await cms.publishEntry(model, id);
|
41
|
+
return true;
|
42
|
+
});
|
43
|
+
apw.addContentUnPublisher(_types.ApwContentTypes.CMS_ENTRY, async (id, settings) => {
|
44
|
+
const model = await (0, _utils.fetchModel)(cms, id, settings);
|
45
|
+
await cms.unpublishEntry(model, id);
|
46
|
+
return true;
|
47
|
+
});
|
48
|
+
};
|
49
|
+
|
50
|
+
exports.apwEntryPlugins = apwEntryPlugins;
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["apwEntryPlugins","params","cms","apw","addContentGetter","ApwContentTypes","CMS_ENTRY","id","settings","model","fetchModel","item","getEntryById","meta","title","getEntryTitle","addContentPublisher","publishEntry","addContentUnPublisher","unpublishEntry"],"sources":["apwEntryPlugins.ts"],"sourcesContent":["import { AdvancedPublishingWorkflow, ApwContentTypes } from \"~/types\";\nimport { fetchModel, getEntryTitle } from \"./utils\";\nimport { HeadlessCms } from \"@webiny/api-headless-cms/types\";\n\ninterface ApwEntryPlugins {\n apw: AdvancedPublishingWorkflow;\n cms: HeadlessCms;\n}\nexport const apwEntryPlugins = (params: ApwEntryPlugins) => {\n const { cms, apw } = params;\n\n apw.addContentGetter(ApwContentTypes.CMS_ENTRY, async (id, settings) => {\n const model = await fetchModel(cms, id, settings);\n\n const item = await cms.getEntryById(model, id);\n\n if (!item) {\n return null;\n }\n\n return {\n ...item,\n meta: {\n ...(item.meta || {})\n },\n title: getEntryTitle(model, item)\n };\n });\n\n apw.addContentPublisher(ApwContentTypes.CMS_ENTRY, async (id, settings) => {\n const model = await fetchModel(cms, id, settings);\n await cms.publishEntry(model, id);\n return true;\n });\n\n apw.addContentUnPublisher(ApwContentTypes.CMS_ENTRY, async (id, settings) => {\n const model = await fetchModel(cms, id, settings);\n await cms.unpublishEntry(model, id);\n return true;\n });\n};\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;;;;;AAOO,MAAMA,eAAe,GAAIC,MAAD,IAA6B;EACxD,MAAM;IAAEC,GAAF;IAAOC;EAAP,IAAeF,MAArB;EAEAE,GAAG,CAACC,gBAAJ,CAAqBC,sBAAA,CAAgBC,SAArC,EAAgD,OAAOC,EAAP,EAAWC,QAAX,KAAwB;IACpE,MAAMC,KAAK,GAAG,MAAM,IAAAC,iBAAA,EAAWR,GAAX,EAAgBK,EAAhB,EAAoBC,QAApB,CAApB;IAEA,MAAMG,IAAI,GAAG,MAAMT,GAAG,CAACU,YAAJ,CAAiBH,KAAjB,EAAwBF,EAAxB,CAAnB;;IAEA,IAAI,CAACI,IAAL,EAAW;MACP,OAAO,IAAP;IACH;;IAED,uCACOA,IADP;MAEIE,IAAI,oBACIF,IAAI,CAACE,IAAL,IAAa,EADjB,CAFR;MAKIC,KAAK,EAAE,IAAAC,oBAAA,EAAcN,KAAd,EAAqBE,IAArB;IALX;EAOH,CAhBD;EAkBAR,GAAG,CAACa,mBAAJ,CAAwBX,sBAAA,CAAgBC,SAAxC,EAAmD,OAAOC,EAAP,EAAWC,QAAX,KAAwB;IACvE,MAAMC,KAAK,GAAG,MAAM,IAAAC,iBAAA,EAAWR,GAAX,EAAgBK,EAAhB,EAAoBC,QAApB,CAApB;IACA,MAAMN,GAAG,CAACe,YAAJ,CAAiBR,KAAjB,EAAwBF,EAAxB,CAAN;IACA,OAAO,IAAP;EACH,CAJD;EAMAJ,GAAG,CAACe,qBAAJ,CAA0Bb,sBAAA,CAAgBC,SAA1C,EAAqD,OAAOC,EAAP,EAAWC,QAAX,KAAwB;IACzE,MAAMC,KAAK,GAAG,MAAM,IAAAC,iBAAA,EAAWR,GAAX,EAAgBK,EAAhB,EAAoBC,QAApB,CAApB;IACA,MAAMN,GAAG,CAACiB,cAAJ,CAAmBV,KAAnB,EAA0BF,EAA1B,CAAN;IACA,OAAO,IAAP;EACH,CAJD;AAKH,CAhCM"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { AdvancedPublishingWorkflow } from "../../types";
|
2
|
+
import { HeadlessCms } from "@webiny/api-headless-cms/types";
|
3
|
+
import { Security } from "@webiny/api-security/types";
|
4
|
+
import { PluginsContainer } from "@webiny/plugins";
|
5
|
+
interface ApwCmsHooksParams {
|
6
|
+
apw: AdvancedPublishingWorkflow;
|
7
|
+
cms: HeadlessCms;
|
8
|
+
plugins: PluginsContainer;
|
9
|
+
security: Security;
|
10
|
+
}
|
11
|
+
export declare const apwCmsHooks: (params: ApwCmsHooksParams) => void;
|
12
|
+
export {};
|
@@ -0,0 +1,37 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.apwCmsHooks = void 0;
|
7
|
+
|
8
|
+
var _apwEntryPlugins = require("./apwEntryPlugins");
|
9
|
+
|
10
|
+
var _linkContentReviewToEntry = require("./linkContentReviewToEntry");
|
11
|
+
|
12
|
+
var _linkWorkflowToEntry = require("./linkWorkflowToEntry");
|
13
|
+
|
14
|
+
var _triggerContentReview = require("./triggerContentReview");
|
15
|
+
|
16
|
+
var _updateContentReviewStatus = require("./updateContentReviewStatus");
|
17
|
+
|
18
|
+
var _CmsEntryApwSettingsGetterPlugin = require("./CmsEntryApwSettingsGetterPlugin");
|
19
|
+
|
20
|
+
const apwCmsHooks = params => {
|
21
|
+
/**
|
22
|
+
* We do not need to assign anything if no apw or cms in the context.
|
23
|
+
* This might happen on options request.
|
24
|
+
*/
|
25
|
+
if (!params.apw || !params.cms) {
|
26
|
+
return;
|
27
|
+
}
|
28
|
+
|
29
|
+
params.plugins.register(new _CmsEntryApwSettingsGetterPlugin.CmsEntryApwSettingsGetterPlugin());
|
30
|
+
(0, _apwEntryPlugins.apwEntryPlugins)(params);
|
31
|
+
(0, _linkContentReviewToEntry.linkContentReviewToEntry)(params);
|
32
|
+
(0, _linkWorkflowToEntry.linkWorkflowToEntry)(params);
|
33
|
+
(0, _triggerContentReview.triggerContentReview)(params);
|
34
|
+
(0, _updateContentReviewStatus.updateContentReviewStatus)(params);
|
35
|
+
};
|
36
|
+
|
37
|
+
exports.apwCmsHooks = apwCmsHooks;
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["apwCmsHooks","params","apw","cms","plugins","register","CmsEntryApwSettingsGetterPlugin","apwEntryPlugins","linkContentReviewToEntry","linkWorkflowToEntry","triggerContentReview","updateContentReviewStatus"],"sources":["index.ts"],"sourcesContent":["import { AdvancedPublishingWorkflow } from \"~/types\";\nimport { apwEntryPlugins } from \"~/plugins/cms/apwEntryPlugins\";\nimport { linkContentReviewToEntry } from \"~/plugins/cms/linkContentReviewToEntry\";\nimport { linkWorkflowToEntry } from \"~/plugins/cms/linkWorkflowToEntry\";\nimport { triggerContentReview } from \"~/plugins/cms/triggerContentReview\";\nimport { updateContentReviewStatus } from \"~/plugins/cms/updateContentReviewStatus\";\nimport { HeadlessCms } from \"@webiny/api-headless-cms/types\";\nimport { Security } from \"@webiny/api-security/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { CmsEntryApwSettingsGetterPlugin } from \"~/plugins/cms/CmsEntryApwSettingsGetterPlugin\";\n\ninterface ApwCmsHooksParams {\n apw: AdvancedPublishingWorkflow;\n cms: HeadlessCms;\n plugins: PluginsContainer;\n security: Security;\n}\nexport const apwCmsHooks = (params: ApwCmsHooksParams) => {\n /**\n * We do not need to assign anything if no apw or cms in the context.\n * This might happen on options request.\n */\n if (!params.apw || !params.cms) {\n return;\n }\n\n params.plugins.register(new CmsEntryApwSettingsGetterPlugin());\n\n apwEntryPlugins(params);\n\n linkContentReviewToEntry(params);\n\n linkWorkflowToEntry(params);\n\n triggerContentReview(params);\n\n updateContentReviewStatus(params);\n};\n"],"mappings":";;;;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AAIA;;AAQO,MAAMA,WAAW,GAAIC,MAAD,IAA+B;EACtD;AACJ;AACA;AACA;EACI,IAAI,CAACA,MAAM,CAACC,GAAR,IAAe,CAACD,MAAM,CAACE,GAA3B,EAAgC;IAC5B;EACH;;EAEDF,MAAM,CAACG,OAAP,CAAeC,QAAf,CAAwB,IAAIC,gEAAJ,EAAxB;EAEA,IAAAC,gCAAA,EAAgBN,MAAhB;EAEA,IAAAO,kDAAA,EAAyBP,MAAzB;EAEA,IAAAQ,wCAAA,EAAoBR,MAApB;EAEA,IAAAS,0CAAA,EAAqBT,MAArB;EAEA,IAAAU,oDAAA,EAA0BV,MAA1B;AACH,CApBM"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { AdvancedPublishingWorkflow } from "../../types";
|
2
|
+
import { HeadlessCms } from "@webiny/api-headless-cms/types";
|
3
|
+
interface LinkContentReviewToEntryParams {
|
4
|
+
apw: AdvancedPublishingWorkflow;
|
5
|
+
cms: HeadlessCms;
|
6
|
+
}
|
7
|
+
export declare const linkContentReviewToEntry: (params: LinkContentReviewToEntryParams) => void;
|
8
|
+
export {};
|
@@ -0,0 +1,108 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports.linkContentReviewToEntry = void 0;
|
9
|
+
|
10
|
+
var _types = require("../../types");
|
11
|
+
|
12
|
+
var _utils = require("./utils");
|
13
|
+
|
14
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
15
|
+
|
16
|
+
const linkContentReviewToEntry = params => {
|
17
|
+
const {
|
18
|
+
apw,
|
19
|
+
cms
|
20
|
+
} = params;
|
21
|
+
apw.contentReview.onAfterContentReviewCreate.subscribe(async ({
|
22
|
+
contentReview
|
23
|
+
}) => {
|
24
|
+
const {
|
25
|
+
content
|
26
|
+
} = contentReview;
|
27
|
+
|
28
|
+
if (content.type !== _types.ApwContentTypes.CMS_ENTRY) {
|
29
|
+
return;
|
30
|
+
}
|
31
|
+
|
32
|
+
const model = await (0, _utils.fetchModel)(cms, content.id, content.settings);
|
33
|
+
await (0, _utils.updateEntryMeta)({
|
34
|
+
cms,
|
35
|
+
model,
|
36
|
+
meta: {
|
37
|
+
apw: {
|
38
|
+
contentReviewId: contentReview.id
|
39
|
+
}
|
40
|
+
},
|
41
|
+
entryId: content.id
|
42
|
+
});
|
43
|
+
});
|
44
|
+
apw.contentReview.onAfterContentReviewDelete.subscribe(async ({
|
45
|
+
contentReview
|
46
|
+
}) => {
|
47
|
+
const {
|
48
|
+
content
|
49
|
+
} = contentReview;
|
50
|
+
|
51
|
+
if (content.type !== _types.ApwContentTypes.CMS_ENTRY) {
|
52
|
+
return;
|
53
|
+
}
|
54
|
+
|
55
|
+
const model = await (0, _utils.fetchModel)(cms, content.id, content.settings);
|
56
|
+
await (0, _utils.updateEntryMeta)({
|
57
|
+
cms,
|
58
|
+
model,
|
59
|
+
meta: {
|
60
|
+
apw: {
|
61
|
+
contentReviewId: null
|
62
|
+
}
|
63
|
+
},
|
64
|
+
entryId: content.id
|
65
|
+
});
|
66
|
+
});
|
67
|
+
cms.onBeforeEntryDelete.subscribe(async ({
|
68
|
+
entry,
|
69
|
+
model
|
70
|
+
}) => {
|
71
|
+
var _entry$meta, _entry$meta$apw;
|
72
|
+
|
73
|
+
if ((0, _utils.isAwpModel)(model)) {
|
74
|
+
return;
|
75
|
+
}
|
76
|
+
|
77
|
+
const contentReviewId = (_entry$meta = entry.meta) === null || _entry$meta === void 0 ? void 0 : (_entry$meta$apw = _entry$meta.apw) === null || _entry$meta$apw === void 0 ? void 0 : _entry$meta$apw.contentReviewId;
|
78
|
+
|
79
|
+
if (!contentReviewId) {
|
80
|
+
return;
|
81
|
+
}
|
82
|
+
|
83
|
+
let contentReview;
|
84
|
+
|
85
|
+
try {
|
86
|
+
contentReview = await apw.contentReview.get(contentReviewId);
|
87
|
+
} catch (ex) {
|
88
|
+
/**
|
89
|
+
* We're handling the case whereby "contentReviewId" is still linked to page;
|
90
|
+
* even when the contentReview entry has been deleted. In that case, we'll allow page deletion.
|
91
|
+
*/
|
92
|
+
if (ex.code !== "NOT_FOUND") {
|
93
|
+
throw ex;
|
94
|
+
}
|
95
|
+
}
|
96
|
+
|
97
|
+
if (!contentReview) {
|
98
|
+
return;
|
99
|
+
}
|
100
|
+
|
101
|
+
throw new _error.default(`Cannot delete the entry because a peer review has been requested. Please delete the review first.`, "CANNOT_DELETE_REVIEW_EXIST", {
|
102
|
+
contentReviewId,
|
103
|
+
entry
|
104
|
+
});
|
105
|
+
});
|
106
|
+
};
|
107
|
+
|
108
|
+
exports.linkContentReviewToEntry = linkContentReviewToEntry;
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["linkContentReviewToEntry","params","apw","cms","contentReview","onAfterContentReviewCreate","subscribe","content","type","ApwContentTypes","CMS_ENTRY","model","fetchModel","id","settings","updateEntryMeta","meta","contentReviewId","entryId","onAfterContentReviewDelete","onBeforeEntryDelete","entry","isAwpModel","get","ex","code","Error"],"sources":["linkContentReviewToEntry.ts"],"sourcesContent":["import { AdvancedPublishingWorkflow, ApwContentTypes } from \"~/types\";\nimport { fetchModel, isAwpModel, updateEntryMeta } from \"~/plugins/cms/utils\";\nimport Error from \"@webiny/error\";\nimport { HeadlessCms } from \"@webiny/api-headless-cms/types\";\n\ninterface LinkContentReviewToEntryParams {\n apw: AdvancedPublishingWorkflow;\n cms: HeadlessCms;\n}\nexport const linkContentReviewToEntry = (params: LinkContentReviewToEntryParams) => {\n const { apw, cms } = params;\n\n apw.contentReview.onAfterContentReviewCreate.subscribe(async ({ contentReview }) => {\n const { content } = contentReview;\n\n if (content.type !== ApwContentTypes.CMS_ENTRY) {\n return;\n }\n\n const model = await fetchModel(cms, content.id, content.settings);\n\n await updateEntryMeta({\n cms,\n model,\n meta: {\n apw: {\n contentReviewId: contentReview.id\n }\n },\n entryId: content.id\n });\n });\n\n apw.contentReview.onAfterContentReviewDelete.subscribe(async ({ contentReview }) => {\n const { content } = contentReview;\n if (content.type !== ApwContentTypes.CMS_ENTRY) {\n return;\n }\n\n const model = await fetchModel(cms, content.id, content.settings);\n\n await updateEntryMeta({\n cms,\n model,\n meta: {\n apw: {\n contentReviewId: null\n }\n },\n entryId: content.id\n });\n });\n\n cms.onBeforeEntryDelete.subscribe(async ({ entry, model }) => {\n if (isAwpModel(model)) {\n return;\n }\n const contentReviewId = entry.meta?.apw?.contentReviewId;\n\n if (!contentReviewId) {\n return;\n }\n let contentReview;\n try {\n contentReview = await apw.contentReview.get(contentReviewId);\n } catch (ex) {\n /**\n * We're handling the case whereby \"contentReviewId\" is still linked to page;\n * even when the contentReview entry has been deleted. In that case, we'll allow page deletion.\n */\n if (ex.code !== \"NOT_FOUND\") {\n throw ex;\n }\n }\n\n if (!contentReview) {\n return;\n }\n throw new Error(\n `Cannot delete the entry because a peer review has been requested. Please delete the review first.`,\n \"CANNOT_DELETE_REVIEW_EXIST\",\n {\n contentReviewId,\n entry\n }\n );\n });\n};\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAOO,MAAMA,wBAAwB,GAAIC,MAAD,IAA4C;EAChF,MAAM;IAAEC,GAAF;IAAOC;EAAP,IAAeF,MAArB;EAEAC,GAAG,CAACE,aAAJ,CAAkBC,0BAAlB,CAA6CC,SAA7C,CAAuD,OAAO;IAAEF;EAAF,CAAP,KAA6B;IAChF,MAAM;MAAEG;IAAF,IAAcH,aAApB;;IAEA,IAAIG,OAAO,CAACC,IAAR,KAAiBC,sBAAA,CAAgBC,SAArC,EAAgD;MAC5C;IACH;;IAED,MAAMC,KAAK,GAAG,MAAM,IAAAC,iBAAA,EAAWT,GAAX,EAAgBI,OAAO,CAACM,EAAxB,EAA4BN,OAAO,CAACO,QAApC,CAApB;IAEA,MAAM,IAAAC,sBAAA,EAAgB;MAClBZ,GADkB;MAElBQ,KAFkB;MAGlBK,IAAI,EAAE;QACFd,GAAG,EAAE;UACDe,eAAe,EAAEb,aAAa,CAACS;QAD9B;MADH,CAHY;MAQlBK,OAAO,EAAEX,OAAO,CAACM;IARC,CAAhB,CAAN;EAUH,CAnBD;EAqBAX,GAAG,CAACE,aAAJ,CAAkBe,0BAAlB,CAA6Cb,SAA7C,CAAuD,OAAO;IAAEF;EAAF,CAAP,KAA6B;IAChF,MAAM;MAAEG;IAAF,IAAcH,aAApB;;IACA,IAAIG,OAAO,CAACC,IAAR,KAAiBC,sBAAA,CAAgBC,SAArC,EAAgD;MAC5C;IACH;;IAED,MAAMC,KAAK,GAAG,MAAM,IAAAC,iBAAA,EAAWT,GAAX,EAAgBI,OAAO,CAACM,EAAxB,EAA4BN,OAAO,CAACO,QAApC,CAApB;IAEA,MAAM,IAAAC,sBAAA,EAAgB;MAClBZ,GADkB;MAElBQ,KAFkB;MAGlBK,IAAI,EAAE;QACFd,GAAG,EAAE;UACDe,eAAe,EAAE;QADhB;MADH,CAHY;MAQlBC,OAAO,EAAEX,OAAO,CAACM;IARC,CAAhB,CAAN;EAUH,CAlBD;EAoBAV,GAAG,CAACiB,mBAAJ,CAAwBd,SAAxB,CAAkC,OAAO;IAAEe,KAAF;IAASV;EAAT,CAAP,KAA4B;IAAA;;IAC1D,IAAI,IAAAW,iBAAA,EAAWX,KAAX,CAAJ,EAAuB;MACnB;IACH;;IACD,MAAMM,eAAe,kBAAGI,KAAK,CAACL,IAAT,mEAAG,YAAYd,GAAf,oDAAG,gBAAiBe,eAAzC;;IAEA,IAAI,CAACA,eAAL,EAAsB;MAClB;IACH;;IACD,IAAIb,aAAJ;;IACA,IAAI;MACAA,aAAa,GAAG,MAAMF,GAAG,CAACE,aAAJ,CAAkBmB,GAAlB,CAAsBN,eAAtB,CAAtB;IACH,CAFD,CAEE,OAAOO,EAAP,EAAW;MACT;AACZ;AACA;AACA;MACY,IAAIA,EAAE,CAACC,IAAH,KAAY,WAAhB,EAA6B;QACzB,MAAMD,EAAN;MACH;IACJ;;IAED,IAAI,CAACpB,aAAL,EAAoB;MAChB;IACH;;IACD,MAAM,IAAIsB,cAAJ,CACD,mGADC,EAEF,4BAFE,EAGF;MACIT,eADJ;MAEII;IAFJ,CAHE,CAAN;EAQH,CAjCD;AAkCH,CA9EM"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { AdvancedPublishingWorkflow } from "../../types";
|
2
|
+
import { HeadlessCms } from "@webiny/api-headless-cms/types";
|
3
|
+
interface LinkWorkflowToEntryParams {
|
4
|
+
apw: AdvancedPublishingWorkflow;
|
5
|
+
cms: HeadlessCms;
|
6
|
+
}
|
7
|
+
export declare const linkWorkflowToEntry: (params: LinkWorkflowToEntryParams) => void;
|
8
|
+
export {};
|
@@ -0,0 +1,166 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports.linkWorkflowToEntry = void 0;
|
9
|
+
|
10
|
+
var _set = _interopRequireDefault(require("lodash/set"));
|
11
|
+
|
12
|
+
var _utils = require("./utils");
|
13
|
+
|
14
|
+
const linkWorkflowToEntry = params => {
|
15
|
+
const {
|
16
|
+
apw,
|
17
|
+
cms
|
18
|
+
} = params;
|
19
|
+
cms.onBeforeEntryCreate.subscribe(async ({
|
20
|
+
entry,
|
21
|
+
model
|
22
|
+
}) => {
|
23
|
+
if ((0, _utils.isAwpModel)(model)) {
|
24
|
+
return;
|
25
|
+
}
|
26
|
+
|
27
|
+
await (0, _utils.assignWorkflowToEntry)({
|
28
|
+
apw,
|
29
|
+
entry
|
30
|
+
});
|
31
|
+
});
|
32
|
+
cms.onBeforeEntryCreateRevision.subscribe(async ({
|
33
|
+
entry,
|
34
|
+
original,
|
35
|
+
model
|
36
|
+
}) => {
|
37
|
+
var _original$meta, _original$meta$apw, _original$meta2, _original$meta2$apw;
|
38
|
+
|
39
|
+
if ((0, _utils.isAwpModel)(model)) {
|
40
|
+
return;
|
41
|
+
}
|
42
|
+
/**
|
43
|
+
* If the previous revision(original) already had the "contentReviewId",
|
44
|
+
* we need to unlink it so that new "contentReview" can be request for the new revision.
|
45
|
+
*/
|
46
|
+
|
47
|
+
|
48
|
+
const previousContentReviewId = (_original$meta = original.meta) === null || _original$meta === void 0 ? void 0 : (_original$meta$apw = _original$meta.apw) === null || _original$meta$apw === void 0 ? void 0 : _original$meta$apw.contentReviewId;
|
49
|
+
|
50
|
+
if (previousContentReviewId) {
|
51
|
+
entry.meta = (0, _set.default)(entry.meta || {}, "apw.contentReviewId", null);
|
52
|
+
}
|
53
|
+
/**
|
54
|
+
* If the previous revision(original) already had the "workflowId",
|
55
|
+
* we don't need to do anything we'll just let it be copied over.
|
56
|
+
*/
|
57
|
+
|
58
|
+
|
59
|
+
const previousWorkflowId = (_original$meta2 = original.meta) === null || _original$meta2 === void 0 ? void 0 : (_original$meta2$apw = _original$meta2.apw) === null || _original$meta2$apw === void 0 ? void 0 : _original$meta2$apw.workflowId;
|
60
|
+
|
61
|
+
if (previousWorkflowId) {
|
62
|
+
return;
|
63
|
+
}
|
64
|
+
/**
|
65
|
+
* Lookup and assign "workflowId".
|
66
|
+
*/
|
67
|
+
|
68
|
+
|
69
|
+
await (0, _utils.assignWorkflowToEntry)({
|
70
|
+
apw,
|
71
|
+
entry
|
72
|
+
});
|
73
|
+
});
|
74
|
+
cms.onBeforeEntryUpdate.subscribe(async ({
|
75
|
+
entry,
|
76
|
+
original,
|
77
|
+
model
|
78
|
+
}) => {
|
79
|
+
var _original$meta3, _original$meta3$apw, _entry$meta, _entry$meta$apw, _entry$meta2, _entry$meta2$apw;
|
80
|
+
|
81
|
+
if ((0, _utils.isAwpModel)(model)) {
|
82
|
+
return;
|
83
|
+
}
|
84
|
+
|
85
|
+
const prevApwWorkflowId = (_original$meta3 = original.meta) === null || _original$meta3 === void 0 ? void 0 : (_original$meta3$apw = _original$meta3.apw) === null || _original$meta3$apw === void 0 ? void 0 : _original$meta3$apw.workflowId;
|
86
|
+
const currentApwWorkflowId = (_entry$meta = entry.meta) === null || _entry$meta === void 0 ? void 0 : (_entry$meta$apw = _entry$meta.apw) === null || _entry$meta$apw === void 0 ? void 0 : _entry$meta$apw.workflowId;
|
87
|
+
/**
|
88
|
+
* Make sure the apw property doesn't get lost between updates.
|
89
|
+
* It can happen because we run modal validation in "onBeforePageUpdate" event,
|
90
|
+
* which doesn't have the "apw" property.
|
91
|
+
*/
|
92
|
+
|
93
|
+
if (prevApwWorkflowId && !currentApwWorkflowId) {
|
94
|
+
entry.meta = (0, _set.default)(entry.meta || {}, "apw", (original.meta || {}).apw || {});
|
95
|
+
}
|
96
|
+
/*
|
97
|
+
* If there is a linked "contentReview" for this page and the page "title" has changed.
|
98
|
+
* Let's update the "title" field in "contentReview".
|
99
|
+
*/
|
100
|
+
|
101
|
+
|
102
|
+
const linkedContentReviewId = (_entry$meta2 = entry.meta) === null || _entry$meta2 === void 0 ? void 0 : (_entry$meta2$apw = _entry$meta2.apw) === null || _entry$meta2$apw === void 0 ? void 0 : _entry$meta2$apw.contentReviewId;
|
103
|
+
const prevTitle = (0, _utils.getEntryTitle)(model, original);
|
104
|
+
const newTitle = (0, _utils.getEntryTitle)(model, entry);
|
105
|
+
|
106
|
+
if (!linkedContentReviewId || prevTitle === newTitle) {
|
107
|
+
return;
|
108
|
+
}
|
109
|
+
|
110
|
+
await apw.contentReview.update(linkedContentReviewId, {
|
111
|
+
title: newTitle
|
112
|
+
});
|
113
|
+
});
|
114
|
+
/**
|
115
|
+
* Link created workflow to associated entries.
|
116
|
+
*/
|
117
|
+
|
118
|
+
apw.workflow.onAfterWorkflowCreate.subscribe(async ({
|
119
|
+
workflow
|
120
|
+
}) => {
|
121
|
+
var _scope$data;
|
122
|
+
|
123
|
+
const {
|
124
|
+
scope
|
125
|
+
} = workflow;
|
126
|
+
/**
|
127
|
+
* If the workflow has entries in it's scope, we'll link that workflow for each of those entries.
|
128
|
+
*/
|
129
|
+
|
130
|
+
if ((0, _utils.hasEntries)(workflow) === false) {
|
131
|
+
return;
|
132
|
+
}
|
133
|
+
|
134
|
+
const models = await cms.listModels();
|
135
|
+
const values = (_scope$data = scope.data) === null || _scope$data === void 0 ? void 0 : _scope$data.entries;
|
136
|
+
|
137
|
+
if (!values || Array.isArray(values) === false || values.length === 0) {
|
138
|
+
return;
|
139
|
+
}
|
140
|
+
|
141
|
+
for (const value of values) {
|
142
|
+
if (!value || !value.modelId || !value.id) {
|
143
|
+
continue;
|
144
|
+
}
|
145
|
+
|
146
|
+
const model = models.find(m => m.modelId === value.modelId);
|
147
|
+
|
148
|
+
if (!model) {
|
149
|
+
continue;
|
150
|
+
}
|
151
|
+
|
152
|
+
await (0, _utils.updateEntryMeta)({
|
153
|
+
cms,
|
154
|
+
model,
|
155
|
+
entryId: value.id,
|
156
|
+
meta: {
|
157
|
+
apw: {
|
158
|
+
workflowId: workflow.id
|
159
|
+
}
|
160
|
+
}
|
161
|
+
});
|
162
|
+
}
|
163
|
+
});
|
164
|
+
};
|
165
|
+
|
166
|
+
exports.linkWorkflowToEntry = linkWorkflowToEntry;
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["linkWorkflowToEntry","params","apw","cms","onBeforeEntryCreate","subscribe","entry","model","isAwpModel","assignWorkflowToEntry","onBeforeEntryCreateRevision","original","previousContentReviewId","meta","contentReviewId","set","previousWorkflowId","workflowId","onBeforeEntryUpdate","prevApwWorkflowId","currentApwWorkflowId","linkedContentReviewId","prevTitle","getEntryTitle","newTitle","contentReview","update","title","workflow","onAfterWorkflowCreate","scope","hasEntries","models","listModels","values","data","entries","Array","isArray","length","value","modelId","id","find","m","updateEntryMeta","entryId"],"sources":["linkWorkflowToEntry.ts"],"sourcesContent":["import set from \"lodash/set\";\nimport { AdvancedPublishingWorkflow } from \"~/types\";\nimport {\n assignWorkflowToEntry,\n getEntryTitle,\n hasEntries,\n isAwpModel,\n updateEntryMeta\n} from \"~/plugins/cms/utils\";\nimport { HeadlessCms } from \"@webiny/api-headless-cms/types\";\n\ninterface Value {\n id: string;\n modelId: string;\n}\n\ninterface LinkWorkflowToEntryParams {\n apw: AdvancedPublishingWorkflow;\n cms: HeadlessCms;\n}\nexport const linkWorkflowToEntry = (params: LinkWorkflowToEntryParams) => {\n const { apw, cms } = params;\n\n cms.onBeforeEntryCreate.subscribe(async ({ entry, model }) => {\n if (isAwpModel(model)) {\n return;\n }\n await assignWorkflowToEntry({\n apw,\n entry\n });\n });\n\n cms.onBeforeEntryCreateRevision.subscribe(async ({ entry, original, model }) => {\n if (isAwpModel(model)) {\n return;\n }\n /**\n * If the previous revision(original) already had the \"contentReviewId\",\n * we need to unlink it so that new \"contentReview\" can be request for the new revision.\n */\n const previousContentReviewId = original.meta?.apw?.contentReviewId;\n if (previousContentReviewId) {\n entry.meta = set(entry.meta || {}, \"apw.contentReviewId\", null);\n }\n\n /**\n * If the previous revision(original) already had the \"workflowId\",\n * we don't need to do anything we'll just let it be copied over.\n */\n const previousWorkflowId = original.meta?.apw?.workflowId;\n if (previousWorkflowId) {\n return;\n }\n /**\n * Lookup and assign \"workflowId\".\n */\n await assignWorkflowToEntry({\n apw,\n entry\n });\n });\n\n cms.onBeforeEntryUpdate.subscribe(async ({ entry, original, model }) => {\n if (isAwpModel(model)) {\n return;\n }\n const prevApwWorkflowId = original.meta?.apw?.workflowId;\n const currentApwWorkflowId = entry.meta?.apw?.workflowId;\n /**\n * Make sure the apw property doesn't get lost between updates.\n * It can happen because we run modal validation in \"onBeforePageUpdate\" event,\n * which doesn't have the \"apw\" property.\n */\n if (prevApwWorkflowId && !currentApwWorkflowId) {\n entry.meta = set(entry.meta || {}, \"apw\", (original.meta || {}).apw || {});\n }\n /*\n * If there is a linked \"contentReview\" for this page and the page \"title\" has changed.\n * Let's update the \"title\" field in \"contentReview\".\n */\n const linkedContentReviewId = entry.meta?.apw?.contentReviewId;\n const prevTitle = getEntryTitle(model, original);\n const newTitle = getEntryTitle(model, entry);\n\n if (!linkedContentReviewId || prevTitle === newTitle) {\n return;\n }\n await apw.contentReview.update(linkedContentReviewId, {\n title: newTitle\n });\n });\n\n /**\n * Link created workflow to associated entries.\n */\n apw.workflow.onAfterWorkflowCreate.subscribe(async ({ workflow }) => {\n const { scope } = workflow;\n /**\n * If the workflow has entries in it's scope, we'll link that workflow for each of those entries.\n */\n if (hasEntries(workflow) === false) {\n return;\n }\n\n const models = await cms.listModels();\n\n const values: Value[] | undefined = scope.data?.entries;\n if (!values || Array.isArray(values) === false || values.length === 0) {\n return;\n }\n\n for (const value of values) {\n if (!value || !value.modelId || !value.id) {\n continue;\n }\n const model = models.find(m => m.modelId === value.modelId);\n if (!model) {\n continue;\n }\n await updateEntryMeta({\n cms,\n model,\n entryId: value.id,\n meta: {\n apw: {\n workflowId: workflow.id\n }\n }\n });\n }\n });\n};\n"],"mappings":"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"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { AdvancedPublishingWorkflow } from "../../types";
|
2
|
+
import { HeadlessCms } from "@webiny/api-headless-cms/types";
|
3
|
+
interface TriggerContentReviewParams {
|
4
|
+
apw: AdvancedPublishingWorkflow;
|
5
|
+
cms: HeadlessCms;
|
6
|
+
}
|
7
|
+
export declare const triggerContentReview: (params: TriggerContentReviewParams) => void;
|
8
|
+
export {};
|
@@ -0,0 +1,59 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports.triggerContentReview = void 0;
|
9
|
+
|
10
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
11
|
+
|
12
|
+
var _types = require("../../types");
|
13
|
+
|
14
|
+
var _utils = require("./utils");
|
15
|
+
|
16
|
+
const triggerContentReview = params => {
|
17
|
+
const {
|
18
|
+
cms,
|
19
|
+
apw
|
20
|
+
} = params;
|
21
|
+
cms.onBeforeEntryPublish.subscribe(async ({
|
22
|
+
entry,
|
23
|
+
model
|
24
|
+
}) => {
|
25
|
+
var _entry$meta, _entry$meta$apw, _entry$meta2, _entry$meta2$apw;
|
26
|
+
|
27
|
+
if ((0, _utils.isAwpModel)(model)) {
|
28
|
+
return;
|
29
|
+
}
|
30
|
+
|
31
|
+
const contentReviewId = (_entry$meta = entry.meta) === null || _entry$meta === void 0 ? void 0 : (_entry$meta$apw = _entry$meta.apw) === null || _entry$meta$apw === void 0 ? void 0 : _entry$meta$apw.contentReviewId;
|
32
|
+
|
33
|
+
if (contentReviewId) {
|
34
|
+
const contentReview = await apw.contentReview.get(contentReviewId);
|
35
|
+
|
36
|
+
if (contentReview.status !== _types.ApwContentReviewStatus.UNDER_REVIEW) {
|
37
|
+
return;
|
38
|
+
}
|
39
|
+
|
40
|
+
throw new _error.default(`A peer review for this content has been already requested.`, "REVIEW_ALREADY_EXIST", {
|
41
|
+
contentReviewId,
|
42
|
+
entry
|
43
|
+
});
|
44
|
+
}
|
45
|
+
|
46
|
+
const workflowId = (_entry$meta2 = entry.meta) === null || _entry$meta2 === void 0 ? void 0 : (_entry$meta2$apw = _entry$meta2.apw) === null || _entry$meta2$apw === void 0 ? void 0 : _entry$meta2$apw.workflowId;
|
47
|
+
|
48
|
+
if (!workflowId) {
|
49
|
+
return;
|
50
|
+
}
|
51
|
+
|
52
|
+
throw new _error.default("This content requires peer review approval before it can be published.", "REVIEW_REQUIRED", {
|
53
|
+
workflowId,
|
54
|
+
entry
|
55
|
+
});
|
56
|
+
});
|
57
|
+
};
|
58
|
+
|
59
|
+
exports.triggerContentReview = triggerContentReview;
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["triggerContentReview","params","cms","apw","onBeforeEntryPublish","subscribe","entry","model","isAwpModel","contentReviewId","meta","contentReview","get","status","ApwContentReviewStatus","UNDER_REVIEW","Error","workflowId"],"sources":["triggerContentReview.ts"],"sourcesContent":["import Error from \"@webiny/error\";\nimport {\n AdvancedPublishingWorkflow,\n ApwContentReviewStatus,\n OnBeforeCmsEntryPublishTopicParams\n} from \"~/types\";\nimport { HeadlessCms } from \"@webiny/api-headless-cms/types\";\nimport { isAwpModel } from \"~/plugins/cms/utils\";\n\ninterface TriggerContentReviewParams {\n apw: AdvancedPublishingWorkflow;\n cms: HeadlessCms;\n}\nexport const triggerContentReview = (params: TriggerContentReviewParams) => {\n const { cms, apw } = params;\n\n cms.onBeforeEntryPublish.subscribe<OnBeforeCmsEntryPublishTopicParams>(\n async ({ entry, model }) => {\n if (isAwpModel(model)) {\n return;\n }\n const contentReviewId = entry.meta?.apw?.contentReviewId;\n if (contentReviewId) {\n const contentReview = await apw.contentReview.get(contentReviewId);\n\n if (contentReview.status !== ApwContentReviewStatus.UNDER_REVIEW) {\n return;\n }\n throw new Error(\n `A peer review for this content has been already requested.`,\n \"REVIEW_ALREADY_EXIST\",\n {\n contentReviewId,\n entry\n }\n );\n }\n\n const workflowId = entry.meta?.apw?.workflowId;\n\n if (!workflowId) {\n return;\n }\n throw new Error(\n \"This content requires peer review approval before it can be published.\",\n \"REVIEW_REQUIRED\",\n {\n workflowId,\n entry\n }\n );\n }\n );\n};\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AAMA;;AAMO,MAAMA,oBAAoB,GAAIC,MAAD,IAAwC;EACxE,MAAM;IAAEC,GAAF;IAAOC;EAAP,IAAeF,MAArB;EAEAC,GAAG,CAACE,oBAAJ,CAAyBC,SAAzB,CACI,OAAO;IAAEC,KAAF;IAASC;EAAT,CAAP,KAA4B;IAAA;;IACxB,IAAI,IAAAC,iBAAA,EAAWD,KAAX,CAAJ,EAAuB;MACnB;IACH;;IACD,MAAME,eAAe,kBAAGH,KAAK,CAACI,IAAT,mEAAG,YAAYP,GAAf,oDAAG,gBAAiBM,eAAzC;;IACA,IAAIA,eAAJ,EAAqB;MACjB,MAAME,aAAa,GAAG,MAAMR,GAAG,CAACQ,aAAJ,CAAkBC,GAAlB,CAAsBH,eAAtB,CAA5B;;MAEA,IAAIE,aAAa,CAACE,MAAd,KAAyBC,6BAAA,CAAuBC,YAApD,EAAkE;QAC9D;MACH;;MACD,MAAM,IAAIC,cAAJ,CACD,4DADC,EAEF,sBAFE,EAGF;QACIP,eADJ;QAEIH;MAFJ,CAHE,CAAN;IAQH;;IAED,MAAMW,UAAU,mBAAGX,KAAK,CAACI,IAAT,qEAAG,aAAYP,GAAf,qDAAG,iBAAiBc,UAApC;;IAEA,IAAI,CAACA,UAAL,EAAiB;MACb;IACH;;IACD,MAAM,IAAID,cAAJ,CACF,wEADE,EAEF,iBAFE,EAGF;MACIC,UADJ;MAEIX;IAFJ,CAHE,CAAN;EAQH,CAnCL;AAqCH,CAxCM"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { AdvancedPublishingWorkflow } from "../../types";
|
2
|
+
import { HeadlessCms } from "@webiny/api-headless-cms/types";
|
3
|
+
import { Security } from "@webiny/api-security/types";
|
4
|
+
interface UpdateContentReviewStatusParams {
|
5
|
+
apw: AdvancedPublishingWorkflow;
|
6
|
+
cms: HeadlessCms;
|
7
|
+
security: Security;
|
8
|
+
}
|
9
|
+
export declare const updateContentReviewStatus: (params: UpdateContentReviewStatusParams) => void;
|
10
|
+
export {};
|