@webiny/api-apw 5.23.0-beta.0

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.
Files changed (89) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +33 -0
  3. package/createApw/createChangeRequestMethods.d.ts +2 -0
  4. package/createApw/createChangeRequestMethods.js +95 -0
  5. package/createApw/createCommentMethods.d.ts +2 -0
  6. package/createApw/createCommentMethods.js +96 -0
  7. package/createApw/createContentReviewMethods.d.ts +6 -0
  8. package/createApw/createContentReviewMethods.js +301 -0
  9. package/createApw/createReviewerMethods.d.ts +2 -0
  10. package/createApw/createReviewerMethods.js +96 -0
  11. package/createApw/createWorkflowMethods.d.ts +2 -0
  12. package/createApw/createWorkflowMethods.js +96 -0
  13. package/createApw/index.d.ts +2 -0
  14. package/createApw/index.js +54 -0
  15. package/index.d.ts +2 -0
  16. package/index.js +28 -0
  17. package/package.json +67 -0
  18. package/plugins/context.d.ts +4 -0
  19. package/plugins/context.js +89 -0
  20. package/plugins/createManageCMSPlugin.d.ts +2 -0
  21. package/plugins/createManageCMSPlugin.js +31 -0
  22. package/plugins/graphql/changeRequest.gql.d.ts +4 -0
  23. package/plugins/graphql/changeRequest.gql.js +152 -0
  24. package/plugins/graphql/comment.gql.d.ts +4 -0
  25. package/plugins/graphql/comment.gql.js +166 -0
  26. package/plugins/graphql/contentReview.gql.d.ts +4 -0
  27. package/plugins/graphql/contentReview.gql.js +224 -0
  28. package/plugins/graphql/reviewer.gql.d.ts +4 -0
  29. package/plugins/graphql/reviewer.gql.js +111 -0
  30. package/plugins/graphql/workflow.gql.d.ts +4 -0
  31. package/plugins/graphql/workflow.gql.js +199 -0
  32. package/plugins/graphql.d.ts +3 -0
  33. package/plugins/graphql.js +84 -0
  34. package/plugins/hooks/createReviewerFromIdentity.d.ts +2 -0
  35. package/plugins/hooks/createReviewerFromIdentity.js +44 -0
  36. package/plugins/hooks/deleteChangeRequestsAfterContentReview.d.ts +2 -0
  37. package/plugins/hooks/deleteChangeRequestsAfterContentReview.js +66 -0
  38. package/plugins/hooks/deleteCommentsAfterChangeRequest.d.ts +2 -0
  39. package/plugins/hooks/deleteCommentsAfterChangeRequest.js +58 -0
  40. package/plugins/hooks/extendPbPageSchema.d.ts +4 -0
  41. package/plugins/hooks/extendPbPageSchema.js +24 -0
  42. package/plugins/hooks/index.d.ts +4 -0
  43. package/plugins/hooks/index.js +68 -0
  44. package/plugins/hooks/initializeContentReviewSteps.d.ts +7 -0
  45. package/plugins/hooks/initializeContentReviewSteps.js +70 -0
  46. package/plugins/hooks/linkWorkflowToPage.d.ts +9 -0
  47. package/plugins/hooks/linkWorkflowToPage.js +154 -0
  48. package/plugins/hooks/updatePendingChangeRequests.d.ts +2 -0
  49. package/plugins/hooks/updatePendingChangeRequests.js +107 -0
  50. package/plugins/utils.d.ts +15 -0
  51. package/plugins/utils.js +69 -0
  52. package/storageOperations/changeRequestStorageOperations.d.ts +3 -0
  53. package/storageOperations/changeRequestStorageOperations.js +96 -0
  54. package/storageOperations/commentStorageOperations.d.ts +3 -0
  55. package/storageOperations/commentStorageOperations.js +101 -0
  56. package/storageOperations/contentReviewStorageOperations.d.ts +3 -0
  57. package/storageOperations/contentReviewStorageOperations.js +72 -0
  58. package/storageOperations/index.d.ts +9 -0
  59. package/storageOperations/index.js +63 -0
  60. package/storageOperations/models/changeRequest.model.d.ts +7 -0
  61. package/storageOperations/models/changeRequest.model.js +52 -0
  62. package/storageOperations/models/comment.model.d.ts +9 -0
  63. package/storageOperations/models/comment.model.js +37 -0
  64. package/storageOperations/models/contentModelPluginFactory.d.ts +17 -0
  65. package/storageOperations/models/contentModelPluginFactory.js +33 -0
  66. package/storageOperations/models/contentReview.model.d.ts +25 -0
  67. package/storageOperations/models/contentReview.model.js +181 -0
  68. package/storageOperations/models/index.d.ts +1 -0
  69. package/storageOperations/models/index.js +87 -0
  70. package/storageOperations/models/reviewer.model.d.ts +7 -0
  71. package/storageOperations/models/reviewer.model.js +48 -0
  72. package/storageOperations/models/utils.d.ts +3 -0
  73. package/storageOperations/models/utils.js +35 -0
  74. package/storageOperations/models/workflow.model.d.ts +17 -0
  75. package/storageOperations/models/workflow.model.js +204 -0
  76. package/storageOperations/reviewerStorageOperations.d.ts +3 -0
  77. package/storageOperations/reviewerStorageOperations.js +72 -0
  78. package/storageOperations/types.d.ts +34 -0
  79. package/storageOperations/types.js +5 -0
  80. package/storageOperations/workflowStorageOperations.d.ts +3 -0
  81. package/storageOperations/workflowStorageOperations.js +72 -0
  82. package/types.d.ts +646 -0
  83. package/types.js +63 -0
  84. package/utils/errors.d.ts +16 -0
  85. package/utils/errors.js +75 -0
  86. package/utils/fieldResolver.d.ts +15 -0
  87. package/utils/fieldResolver.js +58 -0
  88. package/utils/resolve.d.ts +3 -0
  89. package/utils/resolve.js +18 -0
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _CmsModelPlugin = require("@webiny/api-headless-cms/content/plugins/CmsModelPlugin");
13
+
14
+ 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; }
15
+
16
+ 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; }
17
+
18
+ const contentModelPluginFactory = params => {
19
+ const {
20
+ group,
21
+ locale,
22
+ tenant,
23
+ modelDefinition
24
+ } = params;
25
+ return new _CmsModelPlugin.CmsModelPlugin(_objectSpread({
26
+ group,
27
+ locale,
28
+ tenant
29
+ }, modelDefinition));
30
+ };
31
+
32
+ var _default = contentModelPluginFactory;
33
+ exports.default = _default;
@@ -0,0 +1,25 @@
1
+ export declare const createContentReviewModelDefinition: ({ reviewerModelId }: {
2
+ reviewerModelId: any;
3
+ }) => {
4
+ name: string;
5
+ modelId: string;
6
+ titleFieldId: string;
7
+ layout: string[][];
8
+ fields: (import("@webiny/api-headless-cms/types").CmsModelField | {
9
+ id: string;
10
+ label: string;
11
+ type: string;
12
+ settings: {
13
+ fields: any;
14
+ layout: any;
15
+ };
16
+ listValidation: any[];
17
+ validation: any[];
18
+ fieldId: string;
19
+ multipleValues: boolean;
20
+ predefinedValues: {
21
+ values: any[];
22
+ enabled: boolean;
23
+ };
24
+ })[];
25
+ };
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createContentReviewModelDefinition = void 0;
7
+
8
+ var _utils = require("./utils");
9
+
10
+ var _workflow = require("./workflow.model");
11
+
12
+ const contentField = fields => (0, _utils.createModelField)({
13
+ label: "Content",
14
+ parent: "contentReview",
15
+ type: "object",
16
+ multipleValues: false,
17
+ settings: {
18
+ fields
19
+ },
20
+ validation: [{
21
+ name: "required",
22
+ message: "Value is required."
23
+ }]
24
+ });
25
+
26
+ const contentStatus = () => (0, _utils.createModelField)({
27
+ label: "Status",
28
+ parent: "contentReview",
29
+ type: "text",
30
+ predefinedValues: {
31
+ enabled: true,
32
+ values: [{
33
+ label: "Under review",
34
+ value: "underReview"
35
+ }, {
36
+ label: "Ready to be published",
37
+ value: "readyToBePublished"
38
+ }, {
39
+ label: "Published",
40
+ value: "published"
41
+ }]
42
+ },
43
+ validation: [{
44
+ name: "required",
45
+ message: "Value is required."
46
+ }]
47
+ });
48
+
49
+ const contentIdField = () => (0, _utils.createModelField)({
50
+ label: "Id",
51
+ type: "text",
52
+ parent: "contentReview Content",
53
+ validation: [{
54
+ name: "required",
55
+ message: "Value is required."
56
+ }]
57
+ });
58
+
59
+ const contentTypeField = () => (0, _utils.createModelField)({
60
+ label: "Type",
61
+ type: "text",
62
+ parent: "contentReview Type",
63
+ predefinedValues: {
64
+ enabled: true,
65
+ values: [{
66
+ label: "Page",
67
+ value: "page"
68
+ }, {
69
+ value: "cms-entry",
70
+ label: "CMS Entry"
71
+ }]
72
+ },
73
+ validation: [{
74
+ name: "required",
75
+ message: "Value is required."
76
+ }]
77
+ }); // TODO: Find a way to store JSON value without "object" field.
78
+
79
+
80
+ const contentSettingsField = () => (0, _utils.createModelField)({
81
+ label: "Settings",
82
+ type: "text",
83
+ parent: "contentReview Settings"
84
+ });
85
+
86
+ const stepStatusField = () => ({
87
+ multipleValues: false,
88
+ listValidation: [],
89
+ renderer: {
90
+ name: "radio-buttons"
91
+ },
92
+ predefinedValues: {
93
+ enabled: true,
94
+ values: [{
95
+ value: "done",
96
+ label: "Steps done"
97
+ }, {
98
+ value: "active",
99
+ label: "Step active"
100
+ }, {
101
+ value: "inactive",
102
+ label: "Step inactive"
103
+ }]
104
+ },
105
+ label: "Status",
106
+ id: "contentReview_steps_status",
107
+ type: "text",
108
+ validation: [{
109
+ name: "required",
110
+ message: "Value is required."
111
+ }],
112
+ fieldId: "status"
113
+ });
114
+
115
+ const stepPendingChangeRequests = () => (0, _utils.createModelField)({
116
+ label: "Pending change requests",
117
+ type: "number",
118
+ parent: "contentReview Step",
119
+ validation: [{
120
+ name: "required",
121
+ message: "Value is required."
122
+ }]
123
+ });
124
+
125
+ const stepSignOffProvidedOn = () => (0, _utils.createModelField)({
126
+ label: "Sign off provided on",
127
+ type: "datetime",
128
+ parent: "contentReview Step"
129
+ });
130
+
131
+ const stepSignOffProvidedBy = fields => (0, _utils.createModelField)({
132
+ label: "Sign off provided By",
133
+ type: "object",
134
+ parent: "contentReview Step",
135
+ multipleValues: false,
136
+ settings: {
137
+ fields
138
+ }
139
+ });
140
+
141
+ const stepSignOffProvidedById = () => (0, _utils.createModelField)({
142
+ label: "Id",
143
+ type: "text",
144
+ parent: "contentReview Step"
145
+ });
146
+
147
+ const stepSignOffProvidedByDisplayName = () => (0, _utils.createModelField)({
148
+ label: "DisplayName",
149
+ type: "text",
150
+ parent: "contentReview Step"
151
+ });
152
+
153
+ const stepsField = fields => ({
154
+ id: "contentReview_steps",
155
+ label: "Steps",
156
+ type: "object",
157
+ settings: {
158
+ fields,
159
+ layout: fields.map(field => [field.fieldId])
160
+ },
161
+ listValidation: [],
162
+ validation: [],
163
+ fieldId: "steps",
164
+ multipleValues: true,
165
+ predefinedValues: {
166
+ values: [],
167
+ enabled: false
168
+ }
169
+ });
170
+
171
+ const createContentReviewModelDefinition = ({
172
+ reviewerModelId
173
+ }) => ({
174
+ name: "APW - Content Review",
175
+ modelId: "apwContentReviewModelDefinition",
176
+ titleFieldId: "content",
177
+ layout: [["contentReview_content"], ["contentReview_reviewRequestedBy"], ["contentReview_steps"], ["contentReview_changeRequested"]],
178
+ fields: [contentField([contentIdField(), contentTypeField(), contentSettingsField()]), contentStatus(), stepsField([(0, _workflow.stepTitleField)(), (0, _workflow.stepTypeField)(), (0, _workflow.stepSlugField)(), (0, _workflow.stepReviewersField)(reviewerModelId), stepStatusField(), stepPendingChangeRequests(), stepSignOffProvidedOn(), stepSignOffProvidedBy([stepSignOffProvidedById(), stepSignOffProvidedByDisplayName()])])]
179
+ });
180
+
181
+ exports.createContentReviewModelDefinition = createContentReviewModelDefinition;
@@ -0,0 +1 @@
1
+ export declare const createApwModels: (context: any) => void;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createApwModels = void 0;
9
+
10
+ var _CmsGroupPlugin = require("@webiny/api-headless-cms/content/plugins/CmsGroupPlugin");
11
+
12
+ var _contentModelPluginFactory = _interopRequireDefault(require("./contentModelPluginFactory"));
13
+
14
+ var _workflow = require("./workflow.model");
15
+
16
+ var _contentReview = require("./contentReview.model");
17
+
18
+ var _reviewer = require("./reviewer.model");
19
+
20
+ var _comment = require("./comment.model");
21
+
22
+ var _changeRequest = require("./changeRequest.model");
23
+
24
+ const createApwModels = context => {
25
+ /**
26
+ * This should never happen in the actual project.
27
+ * It is to make sure that we load setup context before the CRUD init in our internal code.
28
+ */
29
+ if (!context.cms) {
30
+ console.warn("Creating model before cms init.");
31
+ return;
32
+ }
33
+
34
+ context.security.disableAuthorization();
35
+ /**
36
+ * TODO:@ashutosh
37
+ * We need to move these plugin in an installation plugin
38
+ */
39
+
40
+ const groupId = "contentModelGroup_apw";
41
+ /**
42
+ * Create a CmsGroup.
43
+ */
44
+
45
+ const cmsGroupPlugin = new _CmsGroupPlugin.CmsGroupPlugin({
46
+ id: groupId,
47
+ slug: "apw",
48
+ name: "APW",
49
+ description: "Group for Advanced Publishing Workflow"
50
+ });
51
+ /**
52
+ * Create CmsModel plugins.
53
+ */
54
+
55
+ const changeRequestModelDefinition = (0, _changeRequest.createChangeRequestModelDefinition)();
56
+ const reviewerModelDefinition = (0, _reviewer.createReviewerModelDefinition)();
57
+ const workflowModelDefinition = (0, _workflow.createWorkflowModelDefinition)({
58
+ reviewerModelId: reviewerModelDefinition.modelId
59
+ });
60
+ const commentModelDefinition = (0, _comment.createCommentModelDefinition)({
61
+ modelId: changeRequestModelDefinition.modelId
62
+ });
63
+ const contentReviewModelDefinition = (0, _contentReview.createContentReviewModelDefinition)({
64
+ reviewerModelId: reviewerModelDefinition.modelId
65
+ });
66
+ const modelDefinitions = [workflowModelDefinition, contentReviewModelDefinition, reviewerModelDefinition, changeRequestModelDefinition, commentModelDefinition];
67
+ const cmsModelPlugins = [];
68
+
69
+ for (const modelDefinition of modelDefinitions) {
70
+ const cmsModelPlugin = (0, _contentModelPluginFactory.default)({
71
+ group: cmsGroupPlugin.contentModelGroup,
72
+ tenant: context.tenancy.getCurrentTenant().id,
73
+ locale: context.i18nContent.locale.code,
74
+ modelDefinition
75
+ });
76
+ cmsModelPlugins.push(cmsModelPlugin);
77
+ }
78
+ /**
79
+ * Register them so that they are accessible in cms context
80
+ */
81
+
82
+
83
+ context.plugins.register([cmsGroupPlugin, cmsModelPlugins]);
84
+ context.security.enableAuthorization();
85
+ };
86
+
87
+ exports.createApwModels = createApwModels;
@@ -0,0 +1,7 @@
1
+ export declare const createReviewerModelDefinition: () => {
2
+ name: string;
3
+ modelId: string;
4
+ titleFieldId: string;
5
+ layout: string[][];
6
+ fields: import("@webiny/api-headless-cms/types").CmsModelField[];
7
+ };
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createReviewerModelDefinition = void 0;
7
+
8
+ var _utils = require("./utils");
9
+
10
+ const idField = () => (0, _utils.createModelField)({
11
+ label: "Identity Id",
12
+ type: "text",
13
+ parent: "reviewer",
14
+ validation: [{
15
+ message: "Value is required.",
16
+ name: "required"
17
+ }]
18
+ });
19
+
20
+ const displayNameField = () => (0, _utils.createModelField)({
21
+ label: "Display Name",
22
+ type: "text",
23
+ parent: "reviewer",
24
+ validation: [{
25
+ message: "Value is required.",
26
+ name: "required"
27
+ }]
28
+ });
29
+
30
+ const typeField = () => (0, _utils.createModelField)({
31
+ label: "Type",
32
+ type: "text",
33
+ parent: "reviewer",
34
+ validation: [{
35
+ message: "Value is required.",
36
+ name: "required"
37
+ }]
38
+ });
39
+
40
+ const createReviewerModelDefinition = () => ({
41
+ name: "APW - Reviewer",
42
+ modelId: "apwReviewerModelDefinition",
43
+ titleFieldId: "displayName",
44
+ layout: [["reviewer_id"], ["reviewer_displayName"]],
45
+ fields: [idField(), displayNameField(), typeField()]
46
+ });
47
+
48
+ exports.createReviewerModelDefinition = createReviewerModelDefinition;
@@ -0,0 +1,3 @@
1
+ import { CmsModelField } from "@webiny/api-headless-cms/types";
2
+ import { CreateModelFieldParams } from "../../plugins/utils";
3
+ export declare const createModelField: (params: CreateModelFieldParams) => CmsModelField;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createModelField = void 0;
9
+
10
+ var _camelCase = _interopRequireDefault(require("lodash/camelCase"));
11
+
12
+ const createModelField = params => {
13
+ const {
14
+ label,
15
+ type,
16
+ parent
17
+ } = params;
18
+ const fieldId = (0, _camelCase.default)(label);
19
+ return {
20
+ id: `${(0, _camelCase.default)(parent)}_${fieldId}`,
21
+ fieldId,
22
+ label,
23
+ type,
24
+ settings: params.settings || {},
25
+ listValidation: params.listValidation || [],
26
+ validation: params.validation || [],
27
+ multipleValues: params.multipleValues || false,
28
+ predefinedValues: params.predefinedValues || {
29
+ values: [],
30
+ enabled: false
31
+ }
32
+ };
33
+ };
34
+
35
+ exports.createModelField = createModelField;
@@ -0,0 +1,17 @@
1
+ export declare const stepTitleField: () => import("@webiny/api-headless-cms/types").CmsModelField;
2
+ export declare const stepTypeField: () => import("@webiny/api-headless-cms/types").CmsModelField;
3
+ export declare const stepSlugField: () => import("@webiny/api-headless-cms/types").CmsModelField;
4
+ export declare const stepReviewersField: (reviewerModelId: any) => import("@webiny/api-headless-cms/types").CmsModelField;
5
+ export declare const createWorkflowModelDefinition: ({ reviewerModelId }: {
6
+ reviewerModelId: any;
7
+ }) => {
8
+ name: string;
9
+ /**
10
+ * Id of the model cannot be appWorkflow because it clashes with the GraphQL types for APW.
11
+ */
12
+ modelId: string;
13
+ layout: string[][];
14
+ titleFieldId: string;
15
+ description: any;
16
+ fields: import("@webiny/api-headless-cms/types").CmsModelField[];
17
+ };
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.stepTypeField = exports.stepTitleField = exports.stepSlugField = exports.stepReviewersField = exports.createWorkflowModelDefinition = void 0;
7
+
8
+ var _utils = require("./utils");
9
+
10
+ const titleField = () => (0, _utils.createModelField)({
11
+ label: "Title",
12
+ type: "text",
13
+ parent: "workflow",
14
+ validation: [{
15
+ message: "Value is required.",
16
+ name: "required"
17
+ }]
18
+ });
19
+
20
+ const stepsField = fields => (0, _utils.createModelField)({
21
+ label: "Steps",
22
+ type: "object",
23
+ parent: "workflow",
24
+ settings: {
25
+ fields
26
+ },
27
+ multipleValues: true
28
+ });
29
+
30
+ const stepTitleField = () => (0, _utils.createModelField)({
31
+ label: "Title",
32
+ type: "text",
33
+ parent: "workflow steps",
34
+ validation: [{
35
+ name: "required",
36
+ message: "Value is required."
37
+ }]
38
+ });
39
+
40
+ exports.stepTitleField = stepTitleField;
41
+
42
+ const stepTypeField = () => (0, _utils.createModelField)({
43
+ label: "Type",
44
+ type: "text",
45
+ parent: "workflow steps",
46
+ predefinedValues: {
47
+ enabled: true,
48
+ values: [{
49
+ value: "mandatoryBlocking",
50
+ label: "Mandatory, blocking - An approval from a reviewer is required before being able to move to the next step and publish the content. "
51
+ }, {
52
+ value: "mandatoryNonBlocking",
53
+ label: "Mandatory, non-blocking - An approval from a reviewer is to publish the content, but the next step in the review workflow is not blocked. "
54
+ }, {
55
+ value: "notMandatory",
56
+ label: "Not mandatory - This is an optional review step. The content can be published regardless if an approval is provided or not."
57
+ }]
58
+ },
59
+ validation: [{
60
+ name: "required",
61
+ message: "Value is required."
62
+ }]
63
+ });
64
+
65
+ exports.stepTypeField = stepTypeField;
66
+
67
+ const stepSlugField = () => (0, _utils.createModelField)({
68
+ label: "Slug",
69
+ type: "text",
70
+ parent: "workflow steps",
71
+ validation: [{
72
+ name: "required",
73
+ message: "Value is required."
74
+ }]
75
+ });
76
+
77
+ exports.stepSlugField = stepSlugField;
78
+
79
+ const stepReviewersField = reviewerModelId => (0, _utils.createModelField)({
80
+ label: "Reviewers",
81
+ type: "ref",
82
+ parent: "workflow steps",
83
+ multipleValues: true,
84
+ settings: {
85
+ models: [{
86
+ modelId: reviewerModelId
87
+ }]
88
+ },
89
+ listValidation: [{
90
+ name: "minLength",
91
+ message: "Value is too short.",
92
+ settings: {
93
+ value: "1"
94
+ }
95
+ }]
96
+ });
97
+
98
+ exports.stepReviewersField = stepReviewersField;
99
+
100
+ const scopeField = fields => (0, _utils.createModelField)({
101
+ type: "object",
102
+ label: "Scope",
103
+ parent: "workflow",
104
+ settings: {
105
+ fields
106
+ }
107
+ });
108
+
109
+ const scopeTypeField = () => (0, _utils.createModelField)({
110
+ label: "Type",
111
+ parent: "workflow scope",
112
+ type: "text",
113
+ validation: [{
114
+ name: "required",
115
+ message: "Value is required."
116
+ }],
117
+ predefinedValues: {
118
+ enabled: true,
119
+ values: [{
120
+ value: "default",
121
+ label: "Default - Catch all scope that applies to all content that's being published."
122
+ }, {
123
+ value: "pb",
124
+ label: "Page category (Page Builder only) - The workflow will apply to all pages inside specific categories."
125
+ }, {
126
+ value: "cms",
127
+ label: "Content model (Headless CMS only) - The workflow will apply to all the content inside the specific content models. "
128
+ }]
129
+ }
130
+ });
131
+
132
+ const scopeDataField = fields => (0, _utils.createModelField)({
133
+ label: "Data",
134
+ parent: "workflow scope",
135
+ type: "object",
136
+ settings: {
137
+ fields
138
+ }
139
+ });
140
+
141
+ const scopeDataPbCategories = () => (0, _utils.createModelField)({
142
+ label: "Categories",
143
+ parent: "workflow scope data",
144
+ type: "text",
145
+ multipleValues: true
146
+ });
147
+
148
+ const scopeDataPbPages = () => (0, _utils.createModelField)({
149
+ label: "Pages",
150
+ parent: "workflow scope data",
151
+ type: "text",
152
+ multipleValues: true
153
+ });
154
+
155
+ const scopeDataCmsModels = () => (0, _utils.createModelField)({
156
+ label: "Models",
157
+ parent: "workflow scope data",
158
+ type: "text",
159
+ multipleValues: true
160
+ });
161
+
162
+ const scopeDataCmsEntries = () => (0, _utils.createModelField)({
163
+ label: "Category",
164
+ parent: "workflow scope data",
165
+ type: "text",
166
+ multipleValues: true
167
+ });
168
+
169
+ const applicationField = () => (0, _utils.createModelField)({
170
+ parent: "workflow",
171
+ type: "text",
172
+ label: "App",
173
+ validation: [{
174
+ name: "required",
175
+ message: "Value is required."
176
+ }],
177
+ predefinedValues: {
178
+ enabled: true,
179
+ values: [{
180
+ label: "Page Builder",
181
+ value: "pageBuilder"
182
+ }, {
183
+ label: "Headless CMS",
184
+ value: "cms"
185
+ }]
186
+ }
187
+ });
188
+
189
+ const createWorkflowModelDefinition = ({
190
+ reviewerModelId
191
+ }) => ({
192
+ name: "APW - Workflow",
193
+
194
+ /**
195
+ * Id of the model cannot be appWorkflow because it clashes with the GraphQL types for APW.
196
+ */
197
+ modelId: "apwWorkflowModelDefinition",
198
+ layout: [["workflow_title"], ["workflow_steps"], ["workflow_scope"], ["workflow_app"]],
199
+ titleFieldId: "title",
200
+ description: null,
201
+ fields: [titleField(), stepsField([stepTitleField(), stepTypeField(), stepSlugField(), stepReviewersField(reviewerModelId)]), scopeField([scopeTypeField(), scopeDataField([scopeDataPbCategories(), scopeDataPbPages(), scopeDataCmsModels(), scopeDataCmsEntries()])]), applicationField()]
202
+ });
203
+
204
+ exports.createWorkflowModelDefinition = createWorkflowModelDefinition;
@@ -0,0 +1,3 @@
1
+ import { ApwReviewerStorageOperations } from "./types";
2
+ import { CreateApwStorageOperationsParams } from "./index";
3
+ export declare const createReviewerStorageOperations: ({ cms }: Pick<CreateApwStorageOperationsParams, "cms">) => ApwReviewerStorageOperations;