@webiny/api-apw 0.0.0-unstable.97a151f74d → 0.0.0-unstable.98511f29f1

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 (219) hide show
  1. package/ApwChangeRequestNotification.js +0 -10
  2. package/ApwChangeRequestNotification.js.map +1 -1
  3. package/ApwCommentNotification.js +0 -10
  4. package/ApwCommentNotification.js.map +1 -1
  5. package/ApwContentReviewNotification.js +0 -10
  6. package/ApwContentReviewNotification.js.map +1 -1
  7. package/ApwContentUrlPlugin.js +0 -10
  8. package/ApwContentUrlPlugin.js.map +1 -1
  9. package/ContentApwSettingsPlugin.js +0 -5
  10. package/ContentApwSettingsPlugin.js.map +1 -1
  11. package/crud/createChangeRequestMethods.js +4 -11
  12. package/crud/createChangeRequestMethods.js.map +1 -1
  13. package/crud/createCommentMethods.js +4 -12
  14. package/crud/createCommentMethods.js.map +1 -1
  15. package/crud/createContentReviewMethods.js +39 -88
  16. package/crud/createContentReviewMethods.js.map +1 -1
  17. package/crud/createReviewerMethods.js +4 -12
  18. package/crud/createReviewerMethods.js.map +1 -1
  19. package/crud/createWorkflowMethods.js +4 -17
  20. package/crud/createWorkflowMethods.js.map +1 -1
  21. package/crud/index.js +0 -25
  22. package/crud/index.js.map +1 -1
  23. package/crud/utils.js +0 -28
  24. package/crud/utils.js.map +1 -1
  25. package/index.d.ts +1 -2
  26. package/index.js +1 -15
  27. package/index.js.map +1 -1
  28. package/package.json +40 -47
  29. package/plugins/cms/CmsEntryApwSettingsGetterPlugin.js +0 -15
  30. package/plugins/cms/CmsEntryApwSettingsGetterPlugin.js.map +1 -1
  31. package/plugins/cms/apwEntryPlugins.js +0 -8
  32. package/plugins/cms/apwEntryPlugins.js.map +1 -1
  33. package/plugins/cms/index.js +0 -13
  34. package/plugins/cms/index.js.map +1 -1
  35. package/plugins/cms/linkContentReviewToEntry.js +2 -19
  36. package/plugins/cms/linkContentReviewToEntry.js.map +1 -1
  37. package/plugins/cms/linkWorkflowToEntry.js +9 -38
  38. package/plugins/cms/linkWorkflowToEntry.js.map +1 -1
  39. package/plugins/cms/notifications/changeRequestNotification.js +0 -4
  40. package/plugins/cms/notifications/changeRequestNotification.js.map +1 -1
  41. package/plugins/cms/notifications/commentNotification.js +0 -4
  42. package/plugins/cms/notifications/commentNotification.js.map +1 -1
  43. package/plugins/cms/notifications/contentReviewNotification.js +0 -4
  44. package/plugins/cms/notifications/contentReviewNotification.js.map +1 -1
  45. package/plugins/cms/notifications/contentUrl.js +1 -8
  46. package/plugins/cms/notifications/contentUrl.js.map +1 -1
  47. package/plugins/cms/triggerContentReview.js +3 -17
  48. package/plugins/cms/triggerContentReview.js.map +1 -1
  49. package/plugins/cms/updateContentReviewStatus.js +4 -22
  50. package/plugins/cms/updateContentReviewStatus.js.map +1 -1
  51. package/plugins/cms/utils.js +2 -47
  52. package/plugins/cms/utils.js.map +1 -1
  53. package/plugins/context.d.ts +0 -1
  54. package/plugins/context.js +2 -47
  55. package/plugins/context.js.map +1 -1
  56. package/plugins/graphql/changeRequest.gql.js +3 -10
  57. package/plugins/graphql/changeRequest.gql.js.map +1 -1
  58. package/plugins/graphql/comment.gql.js +3 -10
  59. package/plugins/graphql/comment.gql.js.map +1 -1
  60. package/plugins/graphql/contentReview.gql.js +6 -25
  61. package/plugins/graphql/contentReview.gql.js.map +1 -1
  62. package/plugins/graphql/reviewer.gql.js +3 -10
  63. package/plugins/graphql/reviewer.gql.js.map +1 -1
  64. package/plugins/graphql/workflow.gql.js +3 -10
  65. package/plugins/graphql/workflow.gql.js.map +1 -1
  66. package/plugins/graphql.js +3 -18
  67. package/plugins/graphql.js.map +1 -1
  68. package/plugins/hooks/createReviewerFromIdentity.js +2 -11
  69. package/plugins/hooks/createReviewerFromIdentity.js.map +1 -1
  70. package/plugins/hooks/deleteChangeRequestsAfterContentReview.js +1 -9
  71. package/plugins/hooks/deleteChangeRequestsAfterContentReview.js.map +1 -1
  72. package/plugins/hooks/deleteCommentsAfterChangeRequest.js +1 -8
  73. package/plugins/hooks/deleteCommentsAfterChangeRequest.js.map +1 -1
  74. package/plugins/hooks/index.js +0 -14
  75. package/plugins/hooks/index.js.map +1 -1
  76. package/plugins/hooks/initializeContentReviewSteps.js +10 -17
  77. package/plugins/hooks/initializeContentReviewSteps.js.map +1 -1
  78. package/plugins/hooks/initializeNotifications.js +0 -5
  79. package/plugins/hooks/initializeNotifications.js.map +1 -1
  80. package/plugins/hooks/listContentReviews.js +0 -12
  81. package/plugins/hooks/listContentReviews.js.map +1 -1
  82. package/plugins/hooks/notifications/appUrl.js +0 -4
  83. package/plugins/hooks/notifications/appUrl.js.map +1 -1
  84. package/plugins/hooks/notifications/changeRequestAfterCreate.js +3 -36
  85. package/plugins/hooks/notifications/changeRequestAfterCreate.js.map +1 -1
  86. package/plugins/hooks/notifications/changeRequestUrl.js +0 -4
  87. package/plugins/hooks/notifications/changeRequestUrl.js.map +1 -1
  88. package/plugins/hooks/notifications/commentAfterCreate.js +3 -38
  89. package/plugins/hooks/notifications/commentAfterCreate.js.map +1 -1
  90. package/plugins/hooks/notifications/commentUrl.js +0 -4
  91. package/plugins/hooks/notifications/commentUrl.js.map +1 -1
  92. package/plugins/hooks/notifications/contentReviewAfterCreate.js +4 -32
  93. package/plugins/hooks/notifications/contentReviewAfterCreate.js.map +1 -1
  94. package/plugins/hooks/notifications/contentReviewUrl.js +0 -4
  95. package/plugins/hooks/notifications/contentReviewUrl.js.map +1 -1
  96. package/plugins/hooks/notifications/contentUrl.js +0 -5
  97. package/plugins/hooks/notifications/contentUrl.js.map +1 -1
  98. package/plugins/hooks/notifications/lastChangeRequestNotificationPlugin.js +0 -4
  99. package/plugins/hooks/notifications/lastChangeRequestNotificationPlugin.js.map +1 -1
  100. package/plugins/hooks/notifications/lastCommentNotificationPlugin.js +0 -4
  101. package/plugins/hooks/notifications/lastCommentNotificationPlugin.js.map +1 -1
  102. package/plugins/hooks/notifications/lastContentReviewNotificationPlugin.js +0 -4
  103. package/plugins/hooks/notifications/lastContentReviewNotificationPlugin.js.map +1 -1
  104. package/plugins/hooks/notifications/reviewers.js +15 -21
  105. package/plugins/hooks/notifications/reviewers.js.map +1 -1
  106. package/plugins/hooks/notifications/sendChangeRequestNotification.js +0 -11
  107. package/plugins/hooks/notifications/sendChangeRequestNotification.js.map +1 -1
  108. package/plugins/hooks/notifications/sendCommentNotification.js +0 -11
  109. package/plugins/hooks/notifications/sendCommentNotification.js.map +1 -1
  110. package/plugins/hooks/notifications/sendContentReviewNotification.js +0 -11
  111. package/plugins/hooks/notifications/sendContentReviewNotification.js.map +1 -1
  112. package/plugins/hooks/updatePendingChangeRequests.js +0 -8
  113. package/plugins/hooks/updatePendingChangeRequests.js.map +1 -1
  114. package/plugins/hooks/updateTotalComments.js +0 -9
  115. package/plugins/hooks/updateTotalComments.js.map +1 -1
  116. package/plugins/hooks/validateChangeRequest.js +0 -16
  117. package/plugins/hooks/validateChangeRequest.js.map +1 -1
  118. package/plugins/hooks/validateComment.js +1 -12
  119. package/plugins/hooks/validateComment.js.map +1 -1
  120. package/plugins/hooks/validateContentReview.js +0 -6
  121. package/plugins/hooks/validateContentReview.js.map +1 -1
  122. package/plugins/pageBuilder/PageApwSettingsGetterPlugin.js +0 -15
  123. package/plugins/pageBuilder/PageApwSettingsGetterPlugin.js.map +1 -1
  124. package/plugins/pageBuilder/apwContentPagePlugins.js +0 -4
  125. package/plugins/pageBuilder/apwContentPagePlugins.js.map +1 -1
  126. package/plugins/pageBuilder/extendPbPageSettingsSchema.js +1 -6
  127. package/plugins/pageBuilder/extendPbPageSettingsSchema.js.map +1 -1
  128. package/plugins/pageBuilder/index.js +0 -11
  129. package/plugins/pageBuilder/index.js.map +1 -1
  130. package/plugins/pageBuilder/linkContentReviewToPage.js +2 -18
  131. package/plugins/pageBuilder/linkContentReviewToPage.js.map +1 -1
  132. package/plugins/pageBuilder/linkWorkflowToPage.js +1 -31
  133. package/plugins/pageBuilder/linkWorkflowToPage.js.map +1 -1
  134. package/plugins/pageBuilder/notifications/changeRequestNotification.js +0 -4
  135. package/plugins/pageBuilder/notifications/changeRequestNotification.js.map +1 -1
  136. package/plugins/pageBuilder/notifications/commentNotification.js +0 -4
  137. package/plugins/pageBuilder/notifications/commentNotification.js.map +1 -1
  138. package/plugins/pageBuilder/notifications/contentReviewNotification.js +0 -4
  139. package/plugins/pageBuilder/notifications/contentReviewNotification.js.map +1 -1
  140. package/plugins/pageBuilder/notifications/contentUrl.js +1 -7
  141. package/plugins/pageBuilder/notifications/contentUrl.js.map +1 -1
  142. package/plugins/pageBuilder/triggerContentReview.js +0 -11
  143. package/plugins/pageBuilder/triggerContentReview.js.map +1 -1
  144. package/plugins/pageBuilder/updateContentReviewStatus.js +0 -12
  145. package/plugins/pageBuilder/updateContentReviewStatus.js.map +1 -1
  146. package/plugins/pageBuilder/utils.js +1 -35
  147. package/plugins/pageBuilder/utils.js.map +1 -1
  148. package/plugins/utils.js +0 -43
  149. package/plugins/utils.js.map +1 -1
  150. package/scheduler/createScheduleActionMethods.js +3 -27
  151. package/scheduler/createScheduleActionMethods.js.map +1 -1
  152. package/scheduler/handlers/executeAction/index.d.ts +1 -1
  153. package/scheduler/handlers/executeAction/index.js +45 -39
  154. package/scheduler/handlers/executeAction/index.js.map +1 -1
  155. package/scheduler/handlers/executeAction/plugins/ApplicationGraphQL.d.ts +6 -0
  156. package/scheduler/handlers/executeAction/plugins/ApplicationGraphQL.js +14 -5
  157. package/scheduler/handlers/executeAction/plugins/ApplicationGraphQL.js.map +1 -1
  158. package/scheduler/handlers/executeAction/plugins/HeadlessCMSGraphQL.d.ts +2 -3
  159. package/scheduler/handlers/executeAction/plugins/HeadlessCMSGraphQL.js +7 -23
  160. package/scheduler/handlers/executeAction/plugins/HeadlessCMSGraphQL.js.map +1 -1
  161. package/scheduler/handlers/executeAction/plugins/PageBuilderGraphQL.d.ts +2 -2
  162. package/scheduler/handlers/executeAction/plugins/PageBuilderGraphQL.js +7 -86
  163. package/scheduler/handlers/executeAction/plugins/PageBuilderGraphQL.js.map +1 -1
  164. package/scheduler/handlers/executeAction/security.js +0 -11
  165. package/scheduler/handlers/executeAction/security.js.map +1 -1
  166. package/scheduler/handlers/scheduleAction/index.d.ts +1 -1
  167. package/scheduler/handlers/scheduleAction/index.js +13 -29
  168. package/scheduler/handlers/scheduleAction/index.js.map +1 -1
  169. package/scheduler/handlers/scheduleAction/scheduleAction.utils.js +4 -23
  170. package/scheduler/handlers/scheduleAction/scheduleAction.utils.js.map +1 -1
  171. package/scheduler/handlers/utils.d.ts +1 -2
  172. package/scheduler/handlers/utils.js +3 -41
  173. package/scheduler/handlers/utils.js.map +1 -1
  174. package/scheduler/index.js +0 -3
  175. package/scheduler/index.js.map +1 -1
  176. package/scheduler/types.d.ts +2 -20
  177. package/scheduler/types.js +12 -23
  178. package/scheduler/types.js.map +1 -1
  179. package/storageOperations/changeRequestStorageOperations.js +20 -39
  180. package/storageOperations/changeRequestStorageOperations.js.map +1 -1
  181. package/storageOperations/commentStorageOperations.js +23 -44
  182. package/storageOperations/commentStorageOperations.js.map +1 -1
  183. package/storageOperations/contentReviewStorageOperations.js +20 -37
  184. package/storageOperations/contentReviewStorageOperations.js.map +1 -1
  185. package/storageOperations/index.js +0 -14
  186. package/storageOperations/index.js.map +1 -1
  187. package/storageOperations/models/changeRequest.model.js +0 -9
  188. package/storageOperations/models/changeRequest.model.js.map +1 -1
  189. package/storageOperations/models/comment.model.js +0 -8
  190. package/storageOperations/models/comment.model.js.map +1 -1
  191. package/storageOperations/models/contentModelPluginFactory.d.ts +3 -10
  192. package/storageOperations/models/contentModelPluginFactory.js +3 -11
  193. package/storageOperations/models/contentModelPluginFactory.js.map +1 -1
  194. package/storageOperations/models/contentReview.model.js +0 -26
  195. package/storageOperations/models/contentReview.model.js.map +1 -1
  196. package/storageOperations/models/index.js +2 -28
  197. package/storageOperations/models/index.js.map +1 -1
  198. package/storageOperations/models/reviewer.model.js +0 -8
  199. package/storageOperations/models/reviewer.model.js.map +1 -1
  200. package/storageOperations/models/utils.js +0 -4
  201. package/storageOperations/models/utils.js.map +1 -1
  202. package/storageOperations/models/workflow.model.js +0 -23
  203. package/storageOperations/models/workflow.model.js.map +1 -1
  204. package/storageOperations/reviewerStorageOperations.js +23 -45
  205. package/storageOperations/reviewerStorageOperations.js.map +1 -1
  206. package/storageOperations/workflowStorageOperations.js +20 -39
  207. package/storageOperations/workflowStorageOperations.js.map +1 -1
  208. package/types.d.ts +6 -5
  209. package/types.js +124 -42
  210. package/types.js.map +1 -1
  211. package/utils/contentApwSettingsPlugin.js +0 -6
  212. package/utils/contentApwSettingsPlugin.js.map +1 -1
  213. package/utils/errors.js +0 -17
  214. package/utils/errors.js.map +1 -1
  215. package/utils/fieldResolver.js +2 -12
  216. package/utils/fieldResolver.js.map +1 -1
  217. package/utils/resolve.d.ts +1 -1
  218. package/utils/resolve.js +0 -3
  219. package/utils/resolve.js.map +1 -1
@@ -1,32 +1,20 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.createContentReviewMethods = createContentReviewMethods;
9
-
10
8
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
-
12
9
  var _get = _interopRequireDefault(require("lodash/get"));
13
-
14
10
  var _pubsub = require("@webiny/pubsub");
15
-
16
11
  var _error = _interopRequireDefault(require("@webiny/error"));
17
-
18
12
  var _types = require("../types");
19
-
20
13
  var _utils = require("../plugins/utils");
21
-
22
14
  var _errors = require("../utils/errors");
23
-
24
15
  var _types2 = require("../scheduler/types");
25
-
26
16
  var _utils2 = require("./utils");
27
-
28
17
  var _contentApwSettingsPlugin = require("../utils/contentApwSettingsPlugin");
29
-
30
18
  function createContentReviewMethods(params) {
31
19
  const {
32
20
  getIdentity,
@@ -40,17 +28,18 @@ function createContentReviewMethods(params) {
40
28
  getTenant,
41
29
  getLocale,
42
30
  plugins
43
- } = params; // create
31
+ } = params;
44
32
 
33
+ // create
45
34
  const onContentReviewBeforeCreate = (0, _pubsub.createTopic)("apw.onContentReviewBeforeCreate");
46
- const onContentReviewAfterCreate = (0, _pubsub.createTopic)("apw.onContentReviewAfterCreate"); // update
47
-
35
+ const onContentReviewAfterCreate = (0, _pubsub.createTopic)("apw.onContentReviewAfterCreate");
36
+ // update
48
37
  const onContentReviewBeforeUpdate = (0, _pubsub.createTopic)("apw.onContentReviewBeforeUpdate");
49
- const onContentReviewAfterUpdate = (0, _pubsub.createTopic)("apw.onContentReviewAfterUpdate"); // delete
50
-
38
+ const onContentReviewAfterUpdate = (0, _pubsub.createTopic)("apw.onContentReviewAfterUpdate");
39
+ // delete
51
40
  const onContentReviewBeforeDelete = (0, _pubsub.createTopic)("apw.onContentReviewBeforeDelete");
52
- const onContentReviewAfterDelete = (0, _pubsub.createTopic)("apw.onContentReviewAfterDelete"); // list
53
-
41
+ const onContentReviewAfterDelete = (0, _pubsub.createTopic)("apw.onContentReviewAfterDelete");
42
+ // list
54
43
  const onContentReviewBeforeList = (0, _pubsub.createTopic)("apw.onContentReviewBeforeList");
55
44
  return {
56
45
  /**
@@ -63,19 +52,16 @@ function createContentReviewMethods(params) {
63
52
  onContentReviewBeforeDelete,
64
53
  onContentReviewAfterDelete,
65
54
  onContentReviewBeforeList,
66
-
67
55
  async get(id) {
68
56
  return storageOperations.getContentReview({
69
57
  id
70
58
  });
71
59
  },
72
-
73
60
  async list(params) {
74
61
  const where = params.where || {};
75
62
  await onContentReviewBeforeList.publish({
76
63
  where
77
64
  });
78
-
79
65
  if (where.reviewStatus === "requiresMyAttention") {
80
66
  return (0, _utils2.filterContentReviewsByRequiresMyAttention)({
81
67
  listParams: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
@@ -86,12 +72,10 @@ function createContentReviewMethods(params) {
86
72
  getIdentity
87
73
  });
88
74
  }
89
-
90
75
  return storageOperations.listContentReviews((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
91
76
  where
92
77
  }));
93
78
  },
94
-
95
79
  async create(data) {
96
80
  const input = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, data), {}, {
97
81
  reviewStatus: _types.ApwContentReviewStatus.UNDER_REVIEW
@@ -107,7 +91,6 @@ function createContentReviewMethods(params) {
107
91
  });
108
92
  return contentReview;
109
93
  },
110
-
111
94
  async update(id, data) {
112
95
  const original = await storageOperations.getContentReview({
113
96
  id
@@ -133,7 +116,6 @@ function createContentReviewMethods(params) {
133
116
  });
134
117
  return contentReview;
135
118
  },
136
-
137
119
  async delete(id) {
138
120
  const contentReview = await storageOperations.getContentReview({
139
121
  id
@@ -149,7 +131,6 @@ function createContentReviewMethods(params) {
149
131
  });
150
132
  return true;
151
133
  },
152
-
153
134
  async provideSignOff(id, stepId) {
154
135
  const entry = await this.get(id);
155
136
  const {
@@ -165,10 +146,10 @@ function createContentReviewMethods(params) {
165
146
  identity,
166
147
  step: currentStep
167
148
  });
149
+
168
150
  /**
169
151
  * Check whether the sign-off is requested by a reviewer.
170
152
  */
171
-
172
153
  if (!hasPermission) {
173
154
  throw new _errors.NotAuthorizedError({
174
155
  entry,
@@ -181,8 +162,6 @@ function createContentReviewMethods(params) {
181
162
  /**
182
163
  * Don't allow sign off, if previous step is of "mandatory_blocking" type and undone.
183
164
  */
184
-
185
-
186
165
  if (previousStep && previousStep.status !== _types.ApwContentReviewStepStatus.DONE && previousStep.type === _types.ApwWorkflowStepTypes.MANDATORY_BLOCKING) {
187
166
  throw new _errors.StepMissingError({
188
167
  entry,
@@ -195,8 +174,6 @@ function createContentReviewMethods(params) {
195
174
  /**
196
175
  * Don't allow sign off, if there are pending change requests.
197
176
  */
198
-
199
-
200
177
  if (currentStep.pendingChangeRequests > 0) {
201
178
  throw new _errors.PendingChangeRequestsError({
202
179
  entry,
@@ -209,8 +186,6 @@ function createContentReviewMethods(params) {
209
186
  /**
210
187
  * Don't allow sign off, if current step is not in "active" state.
211
188
  */
212
-
213
-
214
189
  if (currentStep.status !== _types.ApwContentReviewStepStatus.ACTIVE) {
215
190
  throw new _errors.StepInActiveError({
216
191
  entry,
@@ -220,12 +195,10 @@ function createContentReviewMethods(params) {
220
195
  }
221
196
  });
222
197
  }
223
-
224
198
  let previousStepStatus;
225
199
  /*
226
200
  * Provide sign-off for give step.
227
201
  */
228
-
229
202
  const updatedSteps = steps.map((step, index) => {
230
203
  if (index === stepIndex) {
231
204
  previousStepStatus = _types.ApwContentReviewStepStatus.DONE;
@@ -238,8 +211,6 @@ function createContentReviewMethods(params) {
238
211
  /**
239
212
  * Update next steps status based on type.
240
213
  */
241
-
242
-
243
214
  if (index > stepIndex) {
244
215
  const previousStep = steps[index - 1];
245
216
  previousStepStatus = (0, _utils.getNextStepStatus)(previousStep.type, previousStepStatus);
@@ -247,40 +218,38 @@ function createContentReviewMethods(params) {
247
218
  status: previousStepStatus
248
219
  });
249
220
  }
250
-
251
221
  return step;
252
222
  });
253
223
  /**
254
224
  * Check for pending steps
255
225
  */
256
-
257
226
  let newStatus = reviewStatus;
258
227
  const pendingRequiredSteps = (0, _utils2.getPendingRequiredSteps)(updatedSteps, step => typeof step.signOffProvidedOn !== "string");
228
+
259
229
  /**
260
230
  * If there are no required steps that are pending, set the status to "READY_TO_BE_PUBLISHED".
261
231
  */
262
-
263
232
  if (pendingRequiredSteps.length === 0) {
264
233
  newStatus = _types.ApwContentReviewStatus.READY_TO_BE_PUBLISHED;
265
234
  }
235
+
266
236
  /**
267
237
  * Save updated steps.
268
238
  */
269
-
270
-
271
239
  await this.update(id, {
272
240
  steps: updatedSteps,
273
241
  reviewStatus: newStatus
274
242
  });
275
243
  return true;
276
244
  },
277
-
278
245
  async retractSignOff(id, stepId) {
279
- const entry = await this.get(id);
246
+ var _contentReview$conten;
247
+ const contentReview = await this.get(id);
280
248
  const {
281
249
  steps,
282
- reviewStatus
283
- } = entry;
250
+ reviewStatus,
251
+ content
252
+ } = contentReview;
284
253
  const stepIndex = steps.findIndex(step => step.id === stepId);
285
254
  const currentStep = steps[stepIndex];
286
255
  const identity = getIdentity();
@@ -289,13 +258,13 @@ function createContentReviewMethods(params) {
289
258
  identity,
290
259
  step: currentStep
291
260
  });
261
+
292
262
  /**
293
263
  * Check whether the retract sign-off is requested by a reviewer.
294
264
  */
295
-
296
265
  if (!hasPermission) {
297
266
  throw new _errors.NotAuthorizedError({
298
- entry,
267
+ entry: contentReview,
299
268
  input: {
300
269
  id,
301
270
  step: stepId
@@ -305,23 +274,20 @@ function createContentReviewMethods(params) {
305
274
  /**
306
275
  * Don't allow, if step in not "done" i.e. no sign-off was provided for it.
307
276
  */
308
-
309
-
310
277
  if (currentStep.status !== _types.ApwContentReviewStepStatus.DONE) {
311
278
  throw new _errors.NoSignOffProvidedError({
312
- entry,
279
+ entry: contentReview,
313
280
  input: {
314
281
  id,
315
282
  step: stepId
316
283
  }
317
284
  });
318
285
  }
319
-
320
286
  let previousStepStatus;
287
+
321
288
  /*
322
289
  * Retract sign-off for give step.
323
290
  */
324
-
325
291
  const updatedSteps = steps.map((step, index) => {
326
292
  if (index === stepIndex) {
327
293
  previousStepStatus = _types.ApwContentReviewStepStatus.ACTIVE;
@@ -334,8 +300,6 @@ function createContentReviewMethods(params) {
334
300
  /**
335
301
  * Set next step status as "inactive".
336
302
  */
337
-
338
-
339
303
  if (index > stepIndex) {
340
304
  const previousStep = steps[index - 1];
341
305
  previousStepStatus = (0, _utils.getNextStepStatus)(previousStep.type, previousStepStatus);
@@ -343,30 +307,39 @@ function createContentReviewMethods(params) {
343
307
  status: previousStepStatus
344
308
  });
345
309
  }
346
-
347
310
  return step;
348
311
  });
312
+
349
313
  /**
350
314
  * Check for pending steps
351
315
  */
352
-
353
316
  let newStatus = reviewStatus;
354
317
  const pendingRequiredSteps = (0, _utils2.getPendingRequiredSteps)(updatedSteps, step => step.signOffProvidedOn === null);
355
318
  /**
356
319
  * If there are required steps that are pending, set the status to "UNDER_REVIEW".
357
320
  */
358
-
359
321
  if (pendingRequiredSteps.length !== 0) {
360
322
  newStatus = _types.ApwContentReviewStatus.UNDER_REVIEW;
361
323
  }
362
324
 
325
+ /**
326
+ * We need to delete the scheduled action if one was created.
327
+ */
328
+ const scheduledActionId = (_contentReview$conten = contentReview.content) === null || _contentReview$conten === void 0 ? void 0 : _contentReview$conten.scheduledActionId;
329
+ if (!!scheduledActionId) {
330
+ await scheduler.delete(scheduledActionId);
331
+ }
363
332
  await this.update(id, {
333
+ content: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, content), {}, {
334
+ scheduledOn: null,
335
+ scheduledBy: null,
336
+ scheduledActionId: null
337
+ }),
364
338
  steps: updatedSteps,
365
339
  reviewStatus: newStatus
366
340
  });
367
341
  return true;
368
342
  },
369
-
370
343
  async isReviewRequired(data) {
371
344
  const contentGetter = getContentGetter(data.type);
372
345
  const content = await contentGetter(data.id, data.settings);
@@ -376,31 +349,25 @@ function createContentReviewMethods(params) {
376
349
  plugins,
377
350
  type: data.type
378
351
  });
379
-
380
352
  if (contentApwSettingsPlugin) {
381
353
  contentReviewId = contentApwSettingsPlugin.getContentReviewId(content);
382
354
  const workflowId = contentApwSettingsPlugin.getWorkflowId(content);
383
-
384
355
  if (workflowId) {
385
356
  isReviewRequired = true;
386
357
  }
387
358
  }
388
-
389
359
  return {
390
360
  isReviewRequired,
391
361
  contentReviewId
392
362
  };
393
363
  },
394
-
395
364
  async publishContent(id, datetime) {
396
365
  var _content$settings;
397
-
398
366
  const {
399
367
  content,
400
368
  reviewStatus
401
369
  } = await this.get(id);
402
370
  const identity = getIdentity();
403
-
404
371
  if (reviewStatus !== _types.ApwContentReviewStatus.READY_TO_BE_PUBLISHED) {
405
372
  throw new _error.default({
406
373
  message: `Cannot publish content because it is not yet ready to be published.`,
@@ -412,19 +379,17 @@ function createContentReviewMethods(params) {
412
379
  }
413
380
  });
414
381
  }
415
-
416
382
  (0, _utils2.checkValidDateTime)(datetime);
383
+
417
384
  /**
418
385
  * If datetime is present it means we're scheduling this action.
419
386
  * And if not, we are publishing immediately.
420
387
  */
421
-
422
388
  if (!datetime) {
423
389
  const contentPublisher = getContentPublisher(content.type);
424
390
  await contentPublisher(content.id, content.settings);
425
391
  return true;
426
392
  }
427
-
428
393
  const data = {
429
394
  action: _types2.ApwScheduleActionTypes.PUBLISH,
430
395
  type: content.type,
@@ -436,7 +401,6 @@ function createContentReviewMethods(params) {
436
401
  /**
437
402
  * Update scheduled related meta data.
438
403
  */
439
-
440
404
  await this.update(id, {
441
405
  content: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, content), {}, {
442
406
  scheduledOn: datetime,
@@ -446,16 +410,13 @@ function createContentReviewMethods(params) {
446
410
  });
447
411
  return true;
448
412
  },
449
-
450
413
  async unpublishContent(id, datetime) {
451
414
  var _content$settings2;
452
-
453
415
  const {
454
416
  content,
455
417
  reviewStatus
456
418
  } = await this.get(id);
457
419
  const identity = getIdentity();
458
-
459
420
  if (reviewStatus !== _types.ApwContentReviewStatus.PUBLISHED) {
460
421
  throw new _error.default({
461
422
  message: `Cannot unpublish content because it is not yet published.`,
@@ -467,19 +428,17 @@ function createContentReviewMethods(params) {
467
428
  }
468
429
  });
469
430
  }
470
-
471
431
  (0, _utils2.checkValidDateTime)(datetime);
432
+
472
433
  /**
473
434
  * If datetime is present it means we're scheduling this action.
474
435
  * If not, we are unpublishing immediately.
475
436
  */
476
-
477
437
  if (!datetime) {
478
438
  const contentUnPublisher = getContentUnPublisher(content.type);
479
439
  await contentUnPublisher(content.id, content.settings);
480
440
  return true;
481
441
  }
482
-
483
442
  const scheduledActionId = await this.scheduleAction({
484
443
  action: _types2.ApwScheduleActionTypes.UNPUBLISH,
485
444
  type: content.type,
@@ -490,7 +449,6 @@ function createContentReviewMethods(params) {
490
449
  /**
491
450
  * Update scheduled related meta data.
492
451
  */
493
-
494
452
  await this.update(id, {
495
453
  content: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, content), {}, {
496
454
  scheduledOn: datetime,
@@ -500,7 +458,6 @@ function createContentReviewMethods(params) {
500
458
  });
501
459
  return true;
502
460
  },
503
-
504
461
  async scheduleAction(data) {
505
462
  // Save input in DB
506
463
  const scheduledAction = await scheduler.create(data);
@@ -508,12 +465,10 @@ function createContentReviewMethods(params) {
508
465
  * This function contains logic of lambda invocation.
509
466
  * Current we're not mocking it, therefore, we're just returning true.
510
467
  */
511
-
512
468
  if (process.env.NODE_ENV === "test") {
513
469
  return scheduledAction.id;
514
- } // Invoke handler
515
-
516
-
470
+ }
471
+ // Invoke handler
517
472
  await handlerClient.invoke({
518
473
  name: String(process.env.APW_SCHEDULER_SCHEDULE_ACTION_HANDLER),
519
474
  payload: {
@@ -525,14 +480,13 @@ function createContentReviewMethods(params) {
525
480
  });
526
481
  return scheduledAction.id;
527
482
  },
528
-
529
483
  async deleteScheduledAction(id) {
530
484
  const contentReview = await this.get(id);
531
485
  const scheduledActionId = (0, _get.default)(contentReview, "content.scheduledActionId");
486
+
532
487
  /**
533
488
  * Check if there is any action scheduled for this "content review".
534
489
  */
535
-
536
490
  if (!scheduledActionId) {
537
491
  throw new _error.default({
538
492
  message: `There is no action scheduled for content review.`,
@@ -545,18 +499,15 @@ function createContentReviewMethods(params) {
545
499
  /**
546
500
  * Delete scheduled action.
547
501
  */
548
-
549
-
550
502
  await scheduler.delete(scheduledActionId);
503
+
551
504
  /**
552
505
  * Reset scheduled related meta data.
553
506
  */
554
-
555
507
  await this.update(id, {
556
508
  content: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, contentReview.content), _utils2.INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META)
557
509
  });
558
510
  return true;
559
511
  }
560
-
561
512
  };
562
513
  }
@@ -1 +1 @@
1
- {"version":3,"names":["createContentReviewMethods","params","getIdentity","storageOperations","getReviewer","getContentGetter","getContentPublisher","getContentUnPublisher","scheduler","handlerClient","getTenant","getLocale","plugins","onContentReviewBeforeCreate","createTopic","onContentReviewAfterCreate","onContentReviewBeforeUpdate","onContentReviewAfterUpdate","onContentReviewBeforeDelete","onContentReviewAfterDelete","onContentReviewBeforeList","get","id","getContentReview","list","where","publish","reviewStatus","filterContentReviewsByRequiresMyAttention","listParams","listContentReviews","create","data","input","ApwContentReviewStatus","UNDER_REVIEW","contentReview","createContentReview","update","original","updateContentReview","delete","deleteContentReview","provideSignOff","stepId","entry","steps","stepIndex","findIndex","step","currentStep","previousStep","identity","hasPermission","hasReviewer","NotAuthorizedError","status","ApwContentReviewStepStatus","DONE","type","ApwWorkflowStepTypes","MANDATORY_BLOCKING","StepMissingError","pendingChangeRequests","PendingChangeRequestsError","ACTIVE","StepInActiveError","previousStepStatus","updatedSteps","map","index","signOffProvidedOn","Date","toISOString","signOffProvidedBy","getNextStepStatus","newStatus","pendingRequiredSteps","getPendingRequiredSteps","length","READY_TO_BE_PUBLISHED","retractSignOff","NoSignOffProvidedError","isReviewRequired","contentGetter","content","settings","contentReviewId","contentApwSettingsPlugin","getContentApwSettingsPlugin","getContentReviewId","workflowId","getWorkflowId","publishContent","datetime","Error","message","code","checkValidDateTime","contentPublisher","action","ApwScheduleActionTypes","PUBLISH","entryId","modelId","scheduledActionId","scheduleAction","scheduledOn","scheduledBy","unpublishContent","PUBLISHED","contentUnPublisher","UNPUBLISH","scheduledAction","process","env","NODE_ENV","invoke","name","String","APW_SCHEDULER_SCHEDULE_ACTION_HANDLER","payload","tenant","locale","await","description","deleteScheduledAction","INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META"],"sources":["createContentReviewMethods.ts"],"sourcesContent":["import get from \"lodash/get\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport Error from \"@webiny/error\";\nimport {\n AdvancedPublishingWorkflow,\n ApwContentReview,\n ApwContentReviewCrud,\n ApwContentReviewStatus,\n ApwContentReviewStepStatus,\n ApwReviewerCrud,\n ApwScheduleActionData,\n ApwWorkflowStepTypes,\n CreateApwContentReviewParams,\n CreateApwParams,\n OnContentReviewAfterCreateTopicParams,\n OnContentReviewAfterDeleteTopicParams,\n OnContentReviewAfterUpdateTopicParams,\n OnContentReviewBeforeCreateTopicParams,\n OnContentReviewBeforeDeleteTopicParams,\n OnContentReviewBeforeListTopicParams,\n OnContentReviewBeforeUpdateTopicParams,\n UpdateApwContentReviewParams\n} from \"~/types\";\nimport { getNextStepStatus, hasReviewer } from \"~/plugins/utils\";\nimport {\n NoSignOffProvidedError,\n NotAuthorizedError,\n PendingChangeRequestsError,\n StepInActiveError,\n StepMissingError\n} from \"~/utils/errors\";\nimport { ApwScheduleActionTypes } from \"~/scheduler/types\";\nimport {\n checkValidDateTime,\n filterContentReviewsByRequiresMyAttention,\n getPendingRequiredSteps,\n INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META\n} from \"./utils\";\nimport { getContentApwSettingsPlugin } from \"~/utils/contentApwSettingsPlugin\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\nexport interface CreateContentReviewMethodsParams extends CreateApwParams {\n getReviewer: ApwReviewerCrud[\"get\"];\n getContentGetter: AdvancedPublishingWorkflow[\"getContentGetter\"];\n getContentPublisher: AdvancedPublishingWorkflow[\"getContentPublisher\"];\n getContentUnPublisher: AdvancedPublishingWorkflow[\"getContentUnPublisher\"];\n plugins: PluginsContainer;\n}\n\nexport function createContentReviewMethods(\n params: CreateContentReviewMethodsParams\n): ApwContentReviewCrud {\n const {\n getIdentity,\n storageOperations,\n getReviewer,\n getContentGetter,\n getContentPublisher,\n getContentUnPublisher,\n scheduler,\n handlerClient,\n getTenant,\n getLocale,\n plugins\n } = params;\n\n // create\n const onContentReviewBeforeCreate = createTopic<OnContentReviewBeforeCreateTopicParams>(\n \"apw.onContentReviewBeforeCreate\"\n );\n const onContentReviewAfterCreate = createTopic<OnContentReviewAfterCreateTopicParams>(\n \"apw.onContentReviewAfterCreate\"\n );\n // update\n const onContentReviewBeforeUpdate = createTopic<OnContentReviewBeforeUpdateTopicParams>(\n \"apw.onContentReviewBeforeUpdate\"\n );\n const onContentReviewAfterUpdate = createTopic<OnContentReviewAfterUpdateTopicParams>(\n \"apw.onContentReviewAfterUpdate\"\n );\n // delete\n const onContentReviewBeforeDelete = createTopic<OnContentReviewBeforeDeleteTopicParams>(\n \"apw.onContentReviewBeforeDelete\"\n );\n const onContentReviewAfterDelete = createTopic<OnContentReviewAfterDeleteTopicParams>(\n \"apw.onContentReviewAfterDelete\"\n );\n // list\n const onContentReviewBeforeList = createTopic<OnContentReviewBeforeListTopicParams>(\n \"apw.onContentReviewBeforeList\"\n );\n return {\n /**\n * Lifecycle events\n */\n onContentReviewBeforeCreate,\n onContentReviewAfterCreate,\n onContentReviewBeforeUpdate,\n onContentReviewAfterUpdate,\n onContentReviewBeforeDelete,\n onContentReviewAfterDelete,\n onContentReviewBeforeList,\n async get(id) {\n return storageOperations.getContentReview({ id });\n },\n async list(params) {\n const where = params.where || {};\n\n await onContentReviewBeforeList.publish({\n where\n });\n\n if (where.reviewStatus === \"requiresMyAttention\") {\n return filterContentReviewsByRequiresMyAttention({\n listParams: {\n ...params,\n where\n },\n listContentReviews: storageOperations.listContentReviews,\n getReviewer,\n getIdentity\n });\n }\n\n return storageOperations.listContentReviews({\n ...params,\n where\n });\n },\n async create(data: Omit<CreateApwContentReviewParams, \"reviewStatus\">) {\n const input: CreateApwContentReviewParams = {\n ...data,\n reviewStatus: ApwContentReviewStatus.UNDER_REVIEW\n };\n await onContentReviewBeforeCreate.publish({ input });\n\n const contentReview = await storageOperations.createContentReview({\n data: input\n });\n\n await onContentReviewAfterCreate.publish({ contentReview });\n\n return contentReview;\n },\n async update(id, data: UpdateApwContentReviewParams) {\n const original = await storageOperations.getContentReview({ id });\n\n await onContentReviewBeforeUpdate.publish({ original, input: { id, data } });\n\n const contentReview = await storageOperations.updateContentReview({\n id,\n data\n });\n\n await onContentReviewAfterUpdate.publish({\n original,\n input: { id, data },\n contentReview\n });\n\n return contentReview;\n },\n async delete(id) {\n const contentReview = await storageOperations.getContentReview({ id });\n\n await onContentReviewBeforeDelete.publish({ contentReview });\n\n await storageOperations.deleteContentReview({ id });\n\n await onContentReviewAfterDelete.publish({ contentReview });\n\n return true;\n },\n async provideSignOff(this: ApwContentReviewCrud, id, stepId) {\n const entry: ApwContentReview = await this.get(id);\n const { steps, reviewStatus } = entry;\n const stepIndex = steps.findIndex(step => step.id === stepId);\n const currentStep = steps[stepIndex];\n const previousStep = steps[stepIndex - 1];\n\n const identity = getIdentity();\n const hasPermission = await hasReviewer({\n getReviewer,\n identity,\n step: currentStep\n });\n\n /**\n * Check whether the sign-off is requested by a reviewer.\n */\n if (!hasPermission) {\n throw new NotAuthorizedError({ entry, input: { id, step: stepId } });\n }\n /**\n * Don't allow sign off, if previous step is of \"mandatory_blocking\" type and undone.\n */\n if (\n previousStep &&\n previousStep.status !== ApwContentReviewStepStatus.DONE &&\n previousStep.type === ApwWorkflowStepTypes.MANDATORY_BLOCKING\n ) {\n throw new StepMissingError({ entry, input: { id, step: stepId } });\n }\n /**\n * Don't allow sign off, if there are pending change requests.\n */\n if (currentStep.pendingChangeRequests > 0) {\n throw new PendingChangeRequestsError({ entry, input: { id, step: stepId } });\n }\n /**\n * Don't allow sign off, if current step is not in \"active\" state.\n */\n if (currentStep.status !== ApwContentReviewStepStatus.ACTIVE) {\n throw new StepInActiveError({ entry, input: { id, step: stepId } });\n }\n let previousStepStatus: ApwContentReviewStepStatus;\n /*\n * Provide sign-off for give step.\n */\n const updatedSteps = steps.map((step, index) => {\n if (index === stepIndex) {\n previousStepStatus = ApwContentReviewStepStatus.DONE;\n return {\n ...step,\n status: ApwContentReviewStepStatus.DONE,\n signOffProvidedOn: new Date().toISOString(),\n signOffProvidedBy: identity\n };\n }\n /**\n * Update next steps status based on type.\n */\n if (index > stepIndex) {\n const previousStep = steps[index - 1];\n\n previousStepStatus = getNextStepStatus(previousStep.type, previousStepStatus);\n return {\n ...step,\n status: previousStepStatus\n };\n }\n\n return step;\n });\n /**\n * Check for pending steps\n */\n let newStatus = reviewStatus;\n const pendingRequiredSteps = getPendingRequiredSteps(\n updatedSteps,\n step => typeof step.signOffProvidedOn !== \"string\"\n );\n\n /**\n * If there are no required steps that are pending, set the status to \"READY_TO_BE_PUBLISHED\".\n */\n if (pendingRequiredSteps.length === 0) {\n newStatus = ApwContentReviewStatus.READY_TO_BE_PUBLISHED;\n }\n\n /**\n * Save updated steps.\n */\n await this.update(id, {\n steps: updatedSteps,\n reviewStatus: newStatus\n });\n return true;\n },\n async retractSignOff(this: ApwContentReviewCrud, id, stepId) {\n const entry: ApwContentReview = await this.get(id);\n const { steps, reviewStatus } = entry;\n const stepIndex = steps.findIndex(step => step.id === stepId);\n const currentStep = steps[stepIndex];\n\n const identity = getIdentity();\n\n const hasPermission = await hasReviewer({\n getReviewer,\n identity,\n step: currentStep\n });\n\n /**\n * Check whether the retract sign-off is requested by a reviewer.\n */\n if (!hasPermission) {\n throw new NotAuthorizedError({ entry, input: { id, step: stepId } });\n }\n /**\n * Don't allow, if step in not \"done\" i.e. no sign-off was provided for it.\n */\n if (currentStep.status !== ApwContentReviewStepStatus.DONE) {\n throw new NoSignOffProvidedError({ entry, input: { id, step: stepId } });\n }\n let previousStepStatus: ApwContentReviewStepStatus;\n\n /*\n * Retract sign-off for give step.\n */\n const updatedSteps = steps.map((step, index) => {\n if (index === stepIndex) {\n previousStepStatus = ApwContentReviewStepStatus.ACTIVE;\n return {\n ...step,\n status: previousStepStatus,\n signOffProvidedOn: null,\n signOffProvidedBy: null\n };\n }\n /**\n * Set next step status as \"inactive\".\n */\n if (index > stepIndex) {\n const previousStep = steps[index - 1];\n\n previousStepStatus = getNextStepStatus(previousStep.type, previousStepStatus);\n\n return {\n ...step,\n status: previousStepStatus\n };\n }\n\n return step;\n });\n\n /**\n * Check for pending steps\n */\n let newStatus = reviewStatus;\n const pendingRequiredSteps = getPendingRequiredSteps(\n updatedSteps,\n step => step.signOffProvidedOn === null\n );\n /**\n * If there are required steps that are pending, set the status to \"UNDER_REVIEW\".\n */\n if (pendingRequiredSteps.length !== 0) {\n newStatus = ApwContentReviewStatus.UNDER_REVIEW;\n }\n\n await this.update(id, {\n steps: updatedSteps,\n reviewStatus: newStatus\n });\n return true;\n },\n async isReviewRequired(data) {\n const contentGetter = getContentGetter(data.type);\n const content = await contentGetter(data.id, data.settings);\n\n let isReviewRequired = false;\n let contentReviewId: string | null = null;\n\n const contentApwSettingsPlugin = getContentApwSettingsPlugin({\n plugins,\n type: data.type\n });\n\n if (contentApwSettingsPlugin) {\n contentReviewId = contentApwSettingsPlugin.getContentReviewId(content);\n const workflowId = contentApwSettingsPlugin.getWorkflowId(content);\n if (workflowId) {\n isReviewRequired = true;\n }\n }\n\n return {\n isReviewRequired,\n contentReviewId\n };\n },\n async publishContent(this: ApwContentReviewCrud, id: string, datetime) {\n const { content, reviewStatus } = await this.get(id);\n const identity = getIdentity();\n\n if (reviewStatus !== ApwContentReviewStatus.READY_TO_BE_PUBLISHED) {\n throw new Error({\n message: `Cannot publish content because it is not yet ready to be published.`,\n code: \"NOT_READY_TO_BE_PUBLISHED\",\n data: {\n id,\n status: reviewStatus,\n content\n }\n });\n }\n\n checkValidDateTime(datetime);\n\n /**\n * If datetime is present it means we're scheduling this action.\n * And if not, we are publishing immediately.\n */\n if (!datetime) {\n const contentPublisher = getContentPublisher(content.type);\n\n await contentPublisher(content.id, content.settings);\n\n return true;\n }\n\n const data: ApwScheduleActionData = {\n action: ApwScheduleActionTypes.PUBLISH,\n type: content.type,\n entryId: content.id,\n modelId: content.settings?.modelId,\n datetime\n };\n const scheduledActionId = await this.scheduleAction(data);\n /**\n * Update scheduled related meta data.\n */\n await this.update(id, {\n content: {\n ...content,\n scheduledOn: datetime,\n scheduledBy: identity.id,\n scheduledActionId\n }\n });\n\n return true;\n },\n async unpublishContent(this: ApwContentReviewCrud, id: string, datetime) {\n const { content, reviewStatus } = await this.get(id);\n const identity = getIdentity();\n\n if (reviewStatus !== ApwContentReviewStatus.PUBLISHED) {\n throw new Error({\n message: `Cannot unpublish content because it is not yet published.`,\n code: \"NOT_YET_PUBLISHED\",\n data: {\n id,\n status: reviewStatus,\n content\n }\n });\n }\n checkValidDateTime(datetime);\n\n /**\n * If datetime is present it means we're scheduling this action.\n * If not, we are unpublishing immediately.\n */\n if (!datetime) {\n const contentUnPublisher = getContentUnPublisher(content.type);\n\n await contentUnPublisher(content.id, content.settings);\n\n return true;\n }\n\n const scheduledActionId = await this.scheduleAction({\n action: ApwScheduleActionTypes.UNPUBLISH,\n type: content.type,\n entryId: content.id,\n modelId: content.settings?.modelId,\n datetime\n });\n /**\n * Update scheduled related meta data.\n */\n await this.update(id, {\n content: {\n ...content,\n scheduledOn: datetime,\n scheduledBy: identity.id,\n scheduledActionId\n }\n });\n\n return true;\n },\n async scheduleAction(data) {\n // Save input in DB\n const scheduledAction = await scheduler.create(data);\n /**\n * This function contains logic of lambda invocation.\n * Current we're not mocking it, therefore, we're just returning true.\n */\n if (process.env.NODE_ENV === \"test\") {\n return scheduledAction.id;\n }\n // Invoke handler\n await handlerClient.invoke({\n name: String(process.env.APW_SCHEDULER_SCHEDULE_ACTION_HANDLER),\n payload: {\n tenant: getTenant().id,\n locale: getLocale().code\n },\n await: false,\n description: \"APW scheduler handler\"\n });\n return scheduledAction.id;\n },\n async deleteScheduledAction(id) {\n const contentReview = await this.get(id);\n const scheduledActionId = get(contentReview, \"content.scheduledActionId\");\n\n /**\n * Check if there is any action scheduled for this \"content review\".\n */\n if (!scheduledActionId) {\n throw new Error({\n message: `There is no action scheduled for content review.`,\n code: \"NO_ACTION_SCHEDULED\",\n data: {\n id\n }\n });\n }\n /**\n * Delete scheduled action.\n */\n await scheduler.delete(scheduledActionId);\n\n /**\n * Reset scheduled related meta data.\n */\n await this.update(id, {\n content: {\n ...contentReview.content,\n ...INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META\n }\n });\n\n return true;\n }\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_get","_interopRequireDefault","require","_pubsub","_error","_types","_utils","_errors","_types2","_utils2","_contentApwSettingsPlugin","createContentReviewMethods","params","getIdentity","storageOperations","getReviewer","getContentGetter","getContentPublisher","getContentUnPublisher","scheduler","handlerClient","getTenant","getLocale","plugins","onContentReviewBeforeCreate","createTopic","onContentReviewAfterCreate","onContentReviewBeforeUpdate","onContentReviewAfterUpdate","onContentReviewBeforeDelete","onContentReviewAfterDelete","onContentReviewBeforeList","get","id","getContentReview","list","where","publish","reviewStatus","filterContentReviewsByRequiresMyAttention","listParams","_objectSpread2","default","listContentReviews","create","data","input","ApwContentReviewStatus","UNDER_REVIEW","contentReview","createContentReview","update","original","updateContentReview","delete","deleteContentReview","provideSignOff","stepId","entry","steps","stepIndex","findIndex","step","currentStep","previousStep","identity","hasPermission","hasReviewer","NotAuthorizedError","status","ApwContentReviewStepStatus","DONE","type","ApwWorkflowStepTypes","MANDATORY_BLOCKING","StepMissingError","pendingChangeRequests","PendingChangeRequestsError","ACTIVE","StepInActiveError","previousStepStatus","updatedSteps","map","index","signOffProvidedOn","Date","toISOString","signOffProvidedBy","getNextStepStatus","newStatus","pendingRequiredSteps","getPendingRequiredSteps","length","READY_TO_BE_PUBLISHED","retractSignOff","_contentReview$conten","content","NoSignOffProvidedError","scheduledActionId","scheduledOn","scheduledBy","isReviewRequired","contentGetter","settings","contentReviewId","contentApwSettingsPlugin","getContentApwSettingsPlugin","getContentReviewId","workflowId","getWorkflowId","publishContent","datetime","_content$settings","Error","message","code","checkValidDateTime","contentPublisher","action","ApwScheduleActionTypes","PUBLISH","entryId","modelId","scheduleAction","unpublishContent","_content$settings2","PUBLISHED","contentUnPublisher","UNPUBLISH","scheduledAction","process","env","NODE_ENV","invoke","name","String","APW_SCHEDULER_SCHEDULE_ACTION_HANDLER","payload","tenant","locale","await","description","deleteScheduledAction","INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META"],"sources":["createContentReviewMethods.ts"],"sourcesContent":["import get from \"lodash/get\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport Error from \"@webiny/error\";\nimport {\n AdvancedPublishingWorkflow,\n ApwContentReview,\n ApwContentReviewCrud,\n ApwContentReviewStatus,\n ApwContentReviewStepStatus,\n ApwReviewerCrud,\n ApwScheduleActionData,\n ApwWorkflowStepTypes,\n CreateApwContentReviewParams,\n CreateApwParams,\n OnContentReviewAfterCreateTopicParams,\n OnContentReviewAfterDeleteTopicParams,\n OnContentReviewAfterUpdateTopicParams,\n OnContentReviewBeforeCreateTopicParams,\n OnContentReviewBeforeDeleteTopicParams,\n OnContentReviewBeforeListTopicParams,\n OnContentReviewBeforeUpdateTopicParams,\n UpdateApwContentReviewParams\n} from \"~/types\";\nimport { getNextStepStatus, hasReviewer } from \"~/plugins/utils\";\nimport {\n NoSignOffProvidedError,\n NotAuthorizedError,\n PendingChangeRequestsError,\n StepInActiveError,\n StepMissingError\n} from \"~/utils/errors\";\nimport { ApwScheduleActionTypes } from \"~/scheduler/types\";\nimport {\n checkValidDateTime,\n filterContentReviewsByRequiresMyAttention,\n getPendingRequiredSteps,\n INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META\n} from \"./utils\";\nimport { getContentApwSettingsPlugin } from \"~/utils/contentApwSettingsPlugin\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\nexport interface CreateContentReviewMethodsParams extends CreateApwParams {\n getReviewer: ApwReviewerCrud[\"get\"];\n getContentGetter: AdvancedPublishingWorkflow[\"getContentGetter\"];\n getContentPublisher: AdvancedPublishingWorkflow[\"getContentPublisher\"];\n getContentUnPublisher: AdvancedPublishingWorkflow[\"getContentUnPublisher\"];\n plugins: PluginsContainer;\n}\n\nexport function createContentReviewMethods(\n params: CreateContentReviewMethodsParams\n): ApwContentReviewCrud {\n const {\n getIdentity,\n storageOperations,\n getReviewer,\n getContentGetter,\n getContentPublisher,\n getContentUnPublisher,\n scheduler,\n handlerClient,\n getTenant,\n getLocale,\n plugins\n } = params;\n\n // create\n const onContentReviewBeforeCreate = createTopic<OnContentReviewBeforeCreateTopicParams>(\n \"apw.onContentReviewBeforeCreate\"\n );\n const onContentReviewAfterCreate = createTopic<OnContentReviewAfterCreateTopicParams>(\n \"apw.onContentReviewAfterCreate\"\n );\n // update\n const onContentReviewBeforeUpdate = createTopic<OnContentReviewBeforeUpdateTopicParams>(\n \"apw.onContentReviewBeforeUpdate\"\n );\n const onContentReviewAfterUpdate = createTopic<OnContentReviewAfterUpdateTopicParams>(\n \"apw.onContentReviewAfterUpdate\"\n );\n // delete\n const onContentReviewBeforeDelete = createTopic<OnContentReviewBeforeDeleteTopicParams>(\n \"apw.onContentReviewBeforeDelete\"\n );\n const onContentReviewAfterDelete = createTopic<OnContentReviewAfterDeleteTopicParams>(\n \"apw.onContentReviewAfterDelete\"\n );\n // list\n const onContentReviewBeforeList = createTopic<OnContentReviewBeforeListTopicParams>(\n \"apw.onContentReviewBeforeList\"\n );\n return {\n /**\n * Lifecycle events\n */\n onContentReviewBeforeCreate,\n onContentReviewAfterCreate,\n onContentReviewBeforeUpdate,\n onContentReviewAfterUpdate,\n onContentReviewBeforeDelete,\n onContentReviewAfterDelete,\n onContentReviewBeforeList,\n async get(id) {\n return storageOperations.getContentReview({ id });\n },\n async list(params) {\n const where = params.where || {};\n\n await onContentReviewBeforeList.publish({\n where\n });\n\n if (where.reviewStatus === \"requiresMyAttention\") {\n return filterContentReviewsByRequiresMyAttention({\n listParams: {\n ...params,\n where\n },\n listContentReviews: storageOperations.listContentReviews,\n getReviewer,\n getIdentity\n });\n }\n\n return storageOperations.listContentReviews({\n ...params,\n where\n });\n },\n async create(data: Omit<CreateApwContentReviewParams, \"reviewStatus\">) {\n const input: CreateApwContentReviewParams = {\n ...data,\n reviewStatus: ApwContentReviewStatus.UNDER_REVIEW\n };\n await onContentReviewBeforeCreate.publish({ input });\n\n const contentReview = await storageOperations.createContentReview({\n data: input\n });\n\n await onContentReviewAfterCreate.publish({ contentReview });\n\n return contentReview;\n },\n async update(id, data: UpdateApwContentReviewParams) {\n const original = await storageOperations.getContentReview({ id });\n\n await onContentReviewBeforeUpdate.publish({ original, input: { id, data } });\n\n const contentReview = await storageOperations.updateContentReview({\n id,\n data\n });\n\n await onContentReviewAfterUpdate.publish({\n original,\n input: { id, data },\n contentReview\n });\n\n return contentReview;\n },\n async delete(id) {\n const contentReview = await storageOperations.getContentReview({ id });\n\n await onContentReviewBeforeDelete.publish({ contentReview });\n\n await storageOperations.deleteContentReview({ id });\n\n await onContentReviewAfterDelete.publish({ contentReview });\n\n return true;\n },\n async provideSignOff(this: ApwContentReviewCrud, id, stepId) {\n const entry: ApwContentReview = await this.get(id);\n const { steps, reviewStatus } = entry;\n const stepIndex = steps.findIndex(step => step.id === stepId);\n const currentStep = steps[stepIndex];\n const previousStep = steps[stepIndex - 1];\n\n const identity = getIdentity();\n const hasPermission = await hasReviewer({\n getReviewer,\n identity,\n step: currentStep\n });\n\n /**\n * Check whether the sign-off is requested by a reviewer.\n */\n if (!hasPermission) {\n throw new NotAuthorizedError({ entry, input: { id, step: stepId } });\n }\n /**\n * Don't allow sign off, if previous step is of \"mandatory_blocking\" type and undone.\n */\n if (\n previousStep &&\n previousStep.status !== ApwContentReviewStepStatus.DONE &&\n previousStep.type === ApwWorkflowStepTypes.MANDATORY_BLOCKING\n ) {\n throw new StepMissingError({ entry, input: { id, step: stepId } });\n }\n /**\n * Don't allow sign off, if there are pending change requests.\n */\n if (currentStep.pendingChangeRequests > 0) {\n throw new PendingChangeRequestsError({ entry, input: { id, step: stepId } });\n }\n /**\n * Don't allow sign off, if current step is not in \"active\" state.\n */\n if (currentStep.status !== ApwContentReviewStepStatus.ACTIVE) {\n throw new StepInActiveError({ entry, input: { id, step: stepId } });\n }\n let previousStepStatus: ApwContentReviewStepStatus;\n /*\n * Provide sign-off for give step.\n */\n const updatedSteps = steps.map((step, index) => {\n if (index === stepIndex) {\n previousStepStatus = ApwContentReviewStepStatus.DONE;\n return {\n ...step,\n status: ApwContentReviewStepStatus.DONE,\n signOffProvidedOn: new Date().toISOString(),\n signOffProvidedBy: identity\n };\n }\n /**\n * Update next steps status based on type.\n */\n if (index > stepIndex) {\n const previousStep = steps[index - 1];\n\n previousStepStatus = getNextStepStatus(previousStep.type, previousStepStatus);\n return {\n ...step,\n status: previousStepStatus\n };\n }\n\n return step;\n });\n /**\n * Check for pending steps\n */\n let newStatus = reviewStatus;\n const pendingRequiredSteps = getPendingRequiredSteps(\n updatedSteps,\n step => typeof step.signOffProvidedOn !== \"string\"\n );\n\n /**\n * If there are no required steps that are pending, set the status to \"READY_TO_BE_PUBLISHED\".\n */\n if (pendingRequiredSteps.length === 0) {\n newStatus = ApwContentReviewStatus.READY_TO_BE_PUBLISHED;\n }\n\n /**\n * Save updated steps.\n */\n await this.update(id, {\n steps: updatedSteps,\n reviewStatus: newStatus\n });\n return true;\n },\n async retractSignOff(this: ApwContentReviewCrud, id, stepId) {\n const contentReview = await this.get(id);\n const { steps, reviewStatus, content } = contentReview;\n\n const stepIndex = steps.findIndex(step => step.id === stepId);\n const currentStep = steps[stepIndex];\n\n const identity = getIdentity();\n\n const hasPermission = await hasReviewer({\n getReviewer,\n identity,\n step: currentStep\n });\n\n /**\n * Check whether the retract sign-off is requested by a reviewer.\n */\n if (!hasPermission) {\n throw new NotAuthorizedError({\n entry: contentReview,\n input: {\n id,\n step: stepId\n }\n });\n }\n /**\n * Don't allow, if step in not \"done\" i.e. no sign-off was provided for it.\n */\n if (currentStep.status !== ApwContentReviewStepStatus.DONE) {\n throw new NoSignOffProvidedError({\n entry: contentReview,\n input: {\n id,\n step: stepId\n }\n });\n }\n let previousStepStatus: ApwContentReviewStepStatus;\n\n /*\n * Retract sign-off for give step.\n */\n const updatedSteps = steps.map((step, index) => {\n if (index === stepIndex) {\n previousStepStatus = ApwContentReviewStepStatus.ACTIVE;\n return {\n ...step,\n status: previousStepStatus,\n signOffProvidedOn: null,\n signOffProvidedBy: null\n };\n }\n /**\n * Set next step status as \"inactive\".\n */\n if (index > stepIndex) {\n const previousStep = steps[index - 1];\n\n previousStepStatus = getNextStepStatus(previousStep.type, previousStepStatus);\n\n return {\n ...step,\n status: previousStepStatus\n };\n }\n\n return step;\n });\n\n /**\n * Check for pending steps\n */\n let newStatus = reviewStatus;\n const pendingRequiredSteps = getPendingRequiredSteps(\n updatedSteps,\n step => step.signOffProvidedOn === null\n );\n /**\n * If there are required steps that are pending, set the status to \"UNDER_REVIEW\".\n */\n if (pendingRequiredSteps.length !== 0) {\n newStatus = ApwContentReviewStatus.UNDER_REVIEW;\n }\n\n /**\n * We need to delete the scheduled action if one was created.\n */\n const scheduledActionId = contentReview.content?.scheduledActionId;\n if (!!scheduledActionId) {\n await scheduler.delete(scheduledActionId);\n }\n\n await this.update(id, {\n content: {\n ...content,\n scheduledOn: null,\n scheduledBy: null,\n scheduledActionId: null\n },\n steps: updatedSteps,\n reviewStatus: newStatus\n });\n return true;\n },\n async isReviewRequired(data) {\n const contentGetter = getContentGetter(data.type);\n const content = await contentGetter(data.id, data.settings);\n\n let isReviewRequired = false;\n let contentReviewId: string | null = null;\n\n const contentApwSettingsPlugin = getContentApwSettingsPlugin({\n plugins,\n type: data.type\n });\n\n if (contentApwSettingsPlugin) {\n contentReviewId = contentApwSettingsPlugin.getContentReviewId(content);\n const workflowId = contentApwSettingsPlugin.getWorkflowId(content);\n if (workflowId) {\n isReviewRequired = true;\n }\n }\n\n return {\n isReviewRequired,\n contentReviewId\n };\n },\n async publishContent(this: ApwContentReviewCrud, id: string, datetime) {\n const { content, reviewStatus } = await this.get(id);\n const identity = getIdentity();\n\n if (reviewStatus !== ApwContentReviewStatus.READY_TO_BE_PUBLISHED) {\n throw new Error({\n message: `Cannot publish content because it is not yet ready to be published.`,\n code: \"NOT_READY_TO_BE_PUBLISHED\",\n data: {\n id,\n status: reviewStatus,\n content\n }\n });\n }\n\n checkValidDateTime(datetime);\n\n /**\n * If datetime is present it means we're scheduling this action.\n * And if not, we are publishing immediately.\n */\n if (!datetime) {\n const contentPublisher = getContentPublisher(content.type);\n\n await contentPublisher(content.id, content.settings);\n\n return true;\n }\n\n const data: ApwScheduleActionData = {\n action: ApwScheduleActionTypes.PUBLISH,\n type: content.type,\n entryId: content.id,\n modelId: content.settings?.modelId,\n datetime\n };\n const scheduledActionId = await this.scheduleAction(data);\n /**\n * Update scheduled related meta data.\n */\n await this.update(id, {\n content: {\n ...content,\n scheduledOn: datetime,\n scheduledBy: identity.id,\n scheduledActionId\n }\n });\n\n return true;\n },\n async unpublishContent(this: ApwContentReviewCrud, id: string, datetime) {\n const { content, reviewStatus } = await this.get(id);\n const identity = getIdentity();\n\n if (reviewStatus !== ApwContentReviewStatus.PUBLISHED) {\n throw new Error({\n message: `Cannot unpublish content because it is not yet published.`,\n code: \"NOT_YET_PUBLISHED\",\n data: {\n id,\n status: reviewStatus,\n content\n }\n });\n }\n checkValidDateTime(datetime);\n\n /**\n * If datetime is present it means we're scheduling this action.\n * If not, we are unpublishing immediately.\n */\n if (!datetime) {\n const contentUnPublisher = getContentUnPublisher(content.type);\n\n await contentUnPublisher(content.id, content.settings);\n\n return true;\n }\n\n const scheduledActionId = await this.scheduleAction({\n action: ApwScheduleActionTypes.UNPUBLISH,\n type: content.type,\n entryId: content.id,\n modelId: content.settings?.modelId,\n datetime\n });\n /**\n * Update scheduled related meta data.\n */\n await this.update(id, {\n content: {\n ...content,\n scheduledOn: datetime,\n scheduledBy: identity.id,\n scheduledActionId\n }\n });\n\n return true;\n },\n async scheduleAction(data) {\n // Save input in DB\n const scheduledAction = await scheduler.create(data);\n /**\n * This function contains logic of lambda invocation.\n * Current we're not mocking it, therefore, we're just returning true.\n */\n if (process.env.NODE_ENV === \"test\") {\n return scheduledAction.id;\n }\n // Invoke handler\n await handlerClient.invoke({\n name: String(process.env.APW_SCHEDULER_SCHEDULE_ACTION_HANDLER),\n payload: {\n tenant: getTenant().id,\n locale: getLocale().code\n },\n await: false,\n description: \"APW scheduler handler\"\n });\n return scheduledAction.id;\n },\n async deleteScheduledAction(id) {\n const contentReview = await this.get(id);\n const scheduledActionId = get(contentReview, \"content.scheduledActionId\");\n\n /**\n * Check if there is any action scheduled for this \"content review\".\n */\n if (!scheduledActionId) {\n throw new Error({\n message: `There is no action scheduled for content review.`,\n code: \"NO_ACTION_SCHEDULED\",\n data: {\n id\n }\n });\n }\n /**\n * Delete scheduled action.\n */\n await scheduler.delete(scheduledActionId);\n\n /**\n * Reset scheduled related meta data.\n */\n await this.update(id, {\n content: {\n ...contentReview.content,\n ...INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META\n }\n });\n\n return true;\n }\n };\n}\n"],"mappings":"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"}