@webiny/api-apw 5.25.0 → 5.30.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 (216) hide show
  1. package/ContentApwSettingsPlugin.d.ts +10 -0
  2. package/ContentApwSettingsPlugin.js +17 -0
  3. package/ContentApwSettingsPlugin.js.map +1 -0
  4. package/README.md +7 -6
  5. package/{createApw → crud}/createChangeRequestMethods.d.ts +0 -0
  6. package/{createApw → crud}/createChangeRequestMethods.js +0 -0
  7. package/crud/createChangeRequestMethods.js.map +1 -0
  8. package/{createApw → crud}/createCommentMethods.d.ts +0 -0
  9. package/{createApw → crud}/createCommentMethods.js +0 -0
  10. package/crud/createCommentMethods.js.map +1 -0
  11. package/crud/createContentReviewMethods.d.ts +10 -0
  12. package/{createApw → crud}/createContentReviewMethods.js +269 -19
  13. package/crud/createContentReviewMethods.js.map +1 -0
  14. package/{createApw → crud}/createReviewerMethods.d.ts +0 -0
  15. package/{createApw → crud}/createReviewerMethods.js +0 -0
  16. package/crud/createReviewerMethods.js.map +1 -0
  17. package/{createApw → crud}/createWorkflowMethods.d.ts +0 -0
  18. package/{createApw → crud}/createWorkflowMethods.js +0 -0
  19. package/crud/createWorkflowMethods.js.map +1 -0
  20. package/{createApw → crud}/index.d.ts +0 -0
  21. package/{createApw → crud}/index.js +55 -11
  22. package/crud/index.js.map +1 -0
  23. package/crud/utils.d.ts +21 -0
  24. package/crud/utils.js +142 -0
  25. package/crud/utils.js.map +1 -0
  26. package/index.d.ts +4 -2
  27. package/index.js +11 -5
  28. package/index.js.map +1 -1
  29. package/package.json +37 -30
  30. package/plugins/cms/CmsEntryApwSettingsGetterPlugin.d.ts +10 -0
  31. package/plugins/cms/CmsEntryApwSettingsGetterPlugin.js +51 -0
  32. package/plugins/cms/CmsEntryApwSettingsGetterPlugin.js.map +1 -0
  33. package/plugins/cms/README.md +49 -0
  34. package/plugins/cms/apwEntryPlugins.d.ts +8 -0
  35. package/plugins/cms/apwEntryPlugins.js +50 -0
  36. package/plugins/cms/apwEntryPlugins.js.map +1 -0
  37. package/plugins/cms/index.d.ts +12 -0
  38. package/plugins/cms/index.js +37 -0
  39. package/plugins/cms/index.js.map +1 -0
  40. package/plugins/cms/linkContentReviewToEntry.d.ts +8 -0
  41. package/plugins/cms/linkContentReviewToEntry.js +108 -0
  42. package/plugins/cms/linkContentReviewToEntry.js.map +1 -0
  43. package/plugins/cms/linkWorkflowToEntry.d.ts +8 -0
  44. package/plugins/cms/linkWorkflowToEntry.js +166 -0
  45. package/plugins/cms/linkWorkflowToEntry.js.map +1 -0
  46. package/plugins/cms/triggerContentReview.d.ts +8 -0
  47. package/plugins/cms/triggerContentReview.js +59 -0
  48. package/plugins/cms/triggerContentReview.js.map +1 -0
  49. package/plugins/cms/updateContentReviewStatus.d.ts +10 -0
  50. package/plugins/cms/updateContentReviewStatus.js +101 -0
  51. package/plugins/cms/updateContentReviewStatus.js.map +1 -0
  52. package/plugins/cms/utils.d.ts +27 -0
  53. package/plugins/cms/utils.js +211 -0
  54. package/plugins/cms/utils.js.map +1 -0
  55. package/plugins/context.d.ts +3 -2
  56. package/plugins/context.js +82 -49
  57. package/plugins/context.js.map +1 -1
  58. package/plugins/graphql/changeRequest.gql.js +1 -1
  59. package/plugins/graphql/changeRequest.gql.js.map +1 -1
  60. package/plugins/graphql/comment.gql.js +8 -17
  61. package/plugins/graphql/comment.gql.js.map +1 -1
  62. package/plugins/graphql/contentReview.gql.js +168 -13
  63. package/plugins/graphql/contentReview.gql.js.map +1 -1
  64. package/plugins/graphql/reviewer.gql.js +1 -1
  65. package/plugins/graphql/reviewer.gql.js.map +1 -1
  66. package/plugins/graphql/workflow.gql.js +18 -15
  67. package/plugins/graphql/workflow.gql.js.map +1 -1
  68. package/plugins/graphql.d.ts +3 -2
  69. package/plugins/graphql.js +11 -1
  70. package/plugins/graphql.js.map +1 -1
  71. package/plugins/hooks/createReviewerFromIdentity.js +18 -0
  72. package/plugins/hooks/createReviewerFromIdentity.js.map +1 -1
  73. package/plugins/hooks/deleteChangeRequestsAfterContentReview.js +8 -8
  74. package/plugins/hooks/deleteChangeRequestsAfterContentReview.js.map +1 -1
  75. package/plugins/hooks/deleteCommentsAfterChangeRequest.js +6 -6
  76. package/plugins/hooks/deleteCommentsAfterChangeRequest.js.map +1 -1
  77. package/plugins/hooks/index.d.ts +1 -2
  78. package/plugins/hooks/index.js +25 -25
  79. package/plugins/hooks/index.js.map +1 -1
  80. package/plugins/hooks/initializeContentReviewSteps.d.ts +2 -7
  81. package/plugins/hooks/initializeContentReviewSteps.js +42 -24
  82. package/plugins/hooks/initializeContentReviewSteps.js.map +1 -1
  83. package/plugins/hooks/updatePendingChangeRequests.js +27 -39
  84. package/plugins/hooks/updatePendingChangeRequests.js.map +1 -1
  85. package/plugins/hooks/updateTotalComments.d.ts +3 -0
  86. package/plugins/hooks/updateTotalComments.js +157 -0
  87. package/plugins/hooks/updateTotalComments.js.map +1 -0
  88. package/plugins/hooks/validateChangeRequest.d.ts +2 -0
  89. package/plugins/hooks/validateChangeRequest.js +64 -0
  90. package/plugins/hooks/validateChangeRequest.js.map +1 -0
  91. package/plugins/hooks/validateComment.d.ts +2 -0
  92. package/plugins/hooks/validateComment.js +45 -0
  93. package/plugins/hooks/validateComment.js.map +1 -0
  94. package/plugins/hooks/validateContentReview.d.ts +2 -0
  95. package/plugins/hooks/validateContentReview.js +38 -0
  96. package/plugins/hooks/validateContentReview.js.map +1 -0
  97. package/plugins/pageBuilder/PageApwSettingsGetterPlugin.d.ts +9 -0
  98. package/plugins/pageBuilder/PageApwSettingsGetterPlugin.js +51 -0
  99. package/plugins/pageBuilder/PageApwSettingsGetterPlugin.js.map +1 -0
  100. package/plugins/pageBuilder/apwContentPagePlugins.d.ts +3 -0
  101. package/plugins/pageBuilder/apwContentPagePlugins.js +30 -0
  102. package/plugins/pageBuilder/apwContentPagePlugins.js.map +1 -0
  103. package/plugins/{hooks/extendPbPageSchema.d.ts → pageBuilder/extendPbPageSettingsSchema.d.ts} +1 -2
  104. package/plugins/{hooks/extendPbPageSchema.js → pageBuilder/extendPbPageSettingsSchema.js} +4 -3
  105. package/plugins/pageBuilder/extendPbPageSettingsSchema.js.map +1 -0
  106. package/plugins/pageBuilder/index.d.ts +11 -0
  107. package/plugins/pageBuilder/index.js +45 -0
  108. package/plugins/pageBuilder/index.js.map +1 -0
  109. package/plugins/pageBuilder/linkContentReviewToPage.d.ts +8 -0
  110. package/plugins/pageBuilder/linkContentReviewToPage.js +93 -0
  111. package/plugins/pageBuilder/linkContentReviewToPage.js.map +1 -0
  112. package/plugins/pageBuilder/linkWorkflowToPage.d.ts +8 -0
  113. package/plugins/pageBuilder/linkWorkflowToPage.js +182 -0
  114. package/plugins/pageBuilder/linkWorkflowToPage.js.map +1 -0
  115. package/plugins/pageBuilder/triggerContentReview.d.ts +8 -0
  116. package/plugins/pageBuilder/triggerContentReview.js +50 -0
  117. package/plugins/pageBuilder/triggerContentReview.js.map +1 -0
  118. package/plugins/pageBuilder/updateContentReviewStatus.d.ts +10 -0
  119. package/plugins/pageBuilder/updateContentReviewStatus.js +83 -0
  120. package/plugins/pageBuilder/updateContentReviewStatus.js.map +1 -0
  121. package/plugins/pageBuilder/utils.d.ts +22 -0
  122. package/plugins/pageBuilder/utils.js +184 -0
  123. package/plugins/pageBuilder/utils.js.map +1 -0
  124. package/plugins/utils.d.ts +22 -2
  125. package/plugins/utils.js +128 -2
  126. package/plugins/utils.js.map +1 -1
  127. package/scheduler/createScheduleActionMethods.d.ts +2 -0
  128. package/scheduler/createScheduleActionMethods.js +146 -0
  129. package/scheduler/createScheduleActionMethods.js.map +1 -0
  130. package/scheduler/handlers/executeAction/index.d.ts +16 -0
  131. package/scheduler/handlers/executeAction/index.js +148 -0
  132. package/scheduler/handlers/executeAction/index.js.map +1 -0
  133. package/scheduler/handlers/executeAction/plugins/ApplicationGraphQL.d.ts +13 -0
  134. package/scheduler/handlers/executeAction/plugins/ApplicationGraphQL.js +17 -0
  135. package/scheduler/handlers/executeAction/plugins/ApplicationGraphQL.js.map +1 -0
  136. package/scheduler/handlers/executeAction/plugins/HeadlessCMSGraphQL.d.ts +11 -0
  137. package/scheduler/handlers/executeAction/plugins/HeadlessCMSGraphQL.js +126 -0
  138. package/scheduler/handlers/executeAction/plugins/HeadlessCMSGraphQL.js.map +1 -0
  139. package/scheduler/handlers/executeAction/plugins/PageBuilderGraphQL.d.ts +11 -0
  140. package/scheduler/handlers/executeAction/plugins/PageBuilderGraphQL.js +163 -0
  141. package/scheduler/handlers/executeAction/plugins/PageBuilderGraphQL.js.map +1 -0
  142. package/scheduler/handlers/executeAction/security.d.ts +4 -0
  143. package/scheduler/handlers/executeAction/security.js +68 -0
  144. package/scheduler/handlers/executeAction/security.js.map +1 -0
  145. package/scheduler/handlers/scheduleAction/index.d.ts +22 -0
  146. package/scheduler/handlers/scheduleAction/index.js +162 -0
  147. package/scheduler/handlers/scheduleAction/index.js.map +1 -0
  148. package/scheduler/handlers/scheduleAction/scheduleAction.utils.d.ts +24 -0
  149. package/scheduler/handlers/scheduleAction/scheduleAction.utils.js +176 -0
  150. package/scheduler/handlers/scheduleAction/scheduleAction.utils.js.map +1 -0
  151. package/scheduler/handlers/utils.d.ts +33 -0
  152. package/scheduler/handlers/utils.js +168 -0
  153. package/scheduler/handlers/utils.js.map +1 -0
  154. package/scheduler/index.d.ts +2 -0
  155. package/scheduler/index.js +27 -0
  156. package/scheduler/index.js.map +1 -0
  157. package/scheduler/types.d.ts +171 -0
  158. package/scheduler/types.js +34 -0
  159. package/scheduler/types.js.map +1 -0
  160. package/storageOperations/changeRequestStorageOperations.js +1 -3
  161. package/storageOperations/changeRequestStorageOperations.js.map +1 -1
  162. package/storageOperations/commentStorageOperations.js +25 -11
  163. package/storageOperations/commentStorageOperations.js.map +1 -1
  164. package/storageOperations/contentReviewStorageOperations.js +1 -3
  165. package/storageOperations/contentReviewStorageOperations.js.map +1 -1
  166. package/storageOperations/index.js.map +1 -1
  167. package/storageOperations/models/changeRequest.model.d.ts +1 -0
  168. package/storageOperations/models/changeRequest.model.js +10 -5
  169. package/storageOperations/models/changeRequest.model.js.map +1 -1
  170. package/storageOperations/models/comment.model.d.ts +1 -0
  171. package/storageOperations/models/comment.model.js +24 -3
  172. package/storageOperations/models/comment.model.js.map +1 -1
  173. package/storageOperations/models/contentModelPluginFactory.d.ts +2 -2
  174. package/storageOperations/models/contentModelPluginFactory.js +2 -2
  175. package/storageOperations/models/contentModelPluginFactory.js.map +1 -1
  176. package/storageOperations/models/contentReview.model.d.ts +1 -0
  177. package/storageOperations/models/contentReview.model.js +98 -26
  178. package/storageOperations/models/contentReview.model.js.map +1 -1
  179. package/storageOperations/models/index.js +25 -5
  180. package/storageOperations/models/index.js.map +1 -1
  181. package/storageOperations/models/reviewer.model.d.ts +1 -0
  182. package/storageOperations/models/reviewer.model.js +11 -6
  183. package/storageOperations/models/reviewer.model.js.map +1 -1
  184. package/storageOperations/models/utils.js.map +1 -1
  185. package/storageOperations/models/workflow.model.d.ts +2 -1
  186. package/storageOperations/models/workflow.model.js +32 -30
  187. package/storageOperations/models/workflow.model.js.map +1 -1
  188. package/storageOperations/reviewerStorageOperations.js +1 -3
  189. package/storageOperations/reviewerStorageOperations.js.map +1 -1
  190. package/storageOperations/types.js.map +1 -1
  191. package/storageOperations/workflowStorageOperations.js +21 -7
  192. package/storageOperations/workflowStorageOperations.js.map +1 -1
  193. package/types.d.ts +138 -49
  194. package/types.js +9 -3
  195. package/types.js.map +1 -1
  196. package/utils/contentApwSettingsPlugin.d.ts +9 -0
  197. package/utils/contentApwSettingsPlugin.js +26 -0
  198. package/utils/contentApwSettingsPlugin.js.map +1 -0
  199. package/utils/errors.js.map +1 -1
  200. package/utils/fieldResolver.js +2 -2
  201. package/utils/fieldResolver.js.map +1 -1
  202. package/utils/resolve.js.map +1 -1
  203. package/createApw/createChangeRequestMethods.js.map +0 -1
  204. package/createApw/createCommentMethods.js.map +0 -1
  205. package/createApw/createContentReviewMethods.d.ts +0 -6
  206. package/createApw/createContentReviewMethods.js.map +0 -1
  207. package/createApw/createReviewerMethods.js.map +0 -1
  208. package/createApw/createWorkflowMethods.js.map +0 -1
  209. package/createApw/index.js.map +0 -1
  210. package/plugins/createManageCMSPlugin.d.ts +0 -2
  211. package/plugins/createManageCMSPlugin.js +0 -31
  212. package/plugins/createManageCMSPlugin.js.map +0 -1
  213. package/plugins/hooks/extendPbPageSchema.js.map +0 -1
  214. package/plugins/hooks/linkWorkflowToPage.d.ts +0 -9
  215. package/plugins/hooks/linkWorkflowToPage.js +0 -155
  216. package/plugins/hooks/linkWorkflowToPage.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["deleteChangeRequestsAfterContentReview.ts"],"names":["deleteChangeRequestsWithContentReview","apw","contentReview","onAfterContentReviewDelete","subscribe","steps","i","length","slug","meta","hasMoreItems","cursor","changeRequests","changeRequest","list","where","step","id","after","e","message","delete"],"mappings":";;;;;;;AAEO,MAAMA,qCAAqC,GAAG,CAAC;AAClDC,EAAAA;AADkD,CAAD,KAEL;AAC5CA,EAAAA,GAAG,CAACC,aAAJ,CAAkBC,0BAAlB,CAA6CC,SAA7C,CAAuD,OAAO;AAAEF,IAAAA;AAAF,GAAP,KAA6B;AAChF;AACR;AACA;AACQ,UAAMG,KAAK,GAAGH,aAAa,CAACG,KAA5B;AACA;AACR;AACA;;AACQ,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,KAAK,CAACE,MAA1B,EAAkCD,CAAC,EAAnC,EAAuC;AACnC,YAAM;AAAEE,QAAAA;AAAF,UAAWH,KAAK,CAACC,CAAD,CAAtB;AAEA,UAAIG,IAAkC,GAAG;AACrCC,QAAAA,YAAY,EAAE,IADuB;AAErCC,QAAAA,MAAM,EAAE;AAF6B,OAAzC;AAIA;AACZ;AACA;;AACY,aAAOF,IAAI,CAACC,YAAZ,EAA0B;AACtB,YAAIE,cAAkC,GAAG,EAAzC;AACA;AAChB;AACA;;AACgB,YAAI;AACA,WAACA,cAAD,EAAiBH,IAAjB,IAAyB,MAAMR,GAAG,CAACY,aAAJ,CAAkBC,IAAlB,CAAuB;AAClDC,YAAAA,KAAK,EAAE;AACHC,cAAAA,IAAI,EAAG,GAAEd,aAAa,CAACe,EAAG,IAAGT,IAAK;AAD/B,aAD2C;AAIlDU,YAAAA,KAAK,EAAET,IAAI,CAACE;AAJsC,WAAvB,CAA/B;AAMH,SAPD,CAOE,OAAOQ,CAAP,EAAU;AACRV,UAAAA,IAAI,CAACC,YAAL,GAAoB,KAApB;;AACA,cAAIS,CAAC,CAACC,OAAF,KAAc,2BAAlB,EAA+C;AAC3C,kBAAMD,CAAN;AACH;AACJ;AAED;AAChB;AACA;;;AACgB,aAAK,MAAMN,aAAX,IAA4BD,cAA5B,EAA4C;AACxC,gBAAMX,GAAG,CAACY,aAAJ,CAAkBQ,MAAlB,CAAyBR,aAAa,CAACI,EAAvC,CAAN;AACH;AACJ;AACJ;AACJ,GA7CD;AA8CH,CAjDM","sourcesContent":["import { ApwChangeRequest, LifeCycleHookCallbackParams, ListMeta } from \"~/types\";\n\nexport const deleteChangeRequestsWithContentReview = ({\n apw\n}: Pick<LifeCycleHookCallbackParams, \"apw\">) => {\n apw.contentReview.onAfterContentReviewDelete.subscribe(async ({ contentReview }) => {\n /**\n * Also delete all associated \"changeRequest\" when a \"contentReview\" is deleted.\n */\n const steps = contentReview.steps;\n /**\n * For each step get associated change requests and delete them.\n */\n for (let i = 0; i < steps.length; i++) {\n const { slug } = steps[i];\n\n let meta: Omit<ListMeta, \"totalCount\"> = {\n hasMoreItems: true,\n cursor: null\n };\n /**\n * Paginate through change requests.\n */\n while (meta.hasMoreItems) {\n let changeRequests: ApwChangeRequest[] = [];\n /**\n * Get all change requests.\n */\n try {\n [changeRequests, meta] = await apw.changeRequest.list({\n where: {\n step: `${contentReview.id}#${slug}`\n },\n after: meta.cursor\n });\n } catch (e) {\n meta.hasMoreItems = false;\n if (e.message !== \"index_not_found_exception\") {\n throw e;\n }\n }\n\n /**\n * Delete change requests one by one.\n */\n for (const changeRequest of changeRequests) {\n await apw.changeRequest.delete(changeRequest.id);\n }\n }\n }\n });\n};\n"]}
1
+ {"version":3,"names":["deleteChangeRequestsWithContentReview","apw","contentReview","onAfterContentReviewDelete","subscribe","steps","i","length","id","stepId","meta","totalCount","changeRequests","changeRequest","list","where","step","e","message","console","log","delete"],"sources":["deleteChangeRequestsAfterContentReview.ts"],"sourcesContent":["import { ApwChangeRequest, LifeCycleHookCallbackParams, ListMeta } from \"~/types\";\n\nexport const deleteChangeRequestsWithContentReview = ({\n apw\n}: Pick<LifeCycleHookCallbackParams, \"apw\">) => {\n apw.contentReview.onAfterContentReviewDelete.subscribe(async ({ contentReview }) => {\n /**\n * Also delete all associated \"changeRequest\" when a \"contentReview\" is deleted.\n */\n const steps = contentReview.steps;\n /**\n * For each step get associated change requests and delete them.\n */\n for (let i = 0; i < steps.length; i++) {\n const { id: stepId } = steps[i];\n\n let meta: Pick<ListMeta, \"totalCount\"> = {\n totalCount: 1\n };\n /**\n * Paginate through change requests.\n */\n while (meta.totalCount > 0) {\n let changeRequests: ApwChangeRequest[] = [];\n /**\n * Get all change requests.\n */\n try {\n [changeRequests, meta] = await apw.changeRequest.list({\n where: {\n step: `${contentReview.id}#${stepId}`\n }\n });\n } catch (e) {\n meta.totalCount = 0;\n if (e.message !== \"index_not_found_exception\") {\n throw e;\n }\n console.log(e);\n }\n\n /**\n * Delete change requests one by one.\n */\n for (const changeRequest of changeRequests) {\n await apw.changeRequest.delete(changeRequest.id);\n }\n }\n }\n });\n};\n"],"mappings":";;;;;;;AAEO,MAAMA,qCAAqC,GAAG,CAAC;EAClDC;AADkD,CAAD,KAEL;EAC5CA,GAAG,CAACC,aAAJ,CAAkBC,0BAAlB,CAA6CC,SAA7C,CAAuD,OAAO;IAAEF;EAAF,CAAP,KAA6B;IAChF;AACR;AACA;IACQ,MAAMG,KAAK,GAAGH,aAAa,CAACG,KAA5B;IACA;AACR;AACA;;IACQ,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,KAAK,CAACE,MAA1B,EAAkCD,CAAC,EAAnC,EAAuC;MACnC,MAAM;QAAEE,EAAE,EAAEC;MAAN,IAAiBJ,KAAK,CAACC,CAAD,CAA5B;MAEA,IAAII,IAAkC,GAAG;QACrCC,UAAU,EAAE;MADyB,CAAzC;MAGA;AACZ;AACA;;MACY,OAAOD,IAAI,CAACC,UAAL,GAAkB,CAAzB,EAA4B;QACxB,IAAIC,cAAkC,GAAG,EAAzC;QACA;AAChB;AACA;;QACgB,IAAI;UACA,CAACA,cAAD,EAAiBF,IAAjB,IAAyB,MAAMT,GAAG,CAACY,aAAJ,CAAkBC,IAAlB,CAAuB;YAClDC,KAAK,EAAE;cACHC,IAAI,EAAG,GAAEd,aAAa,CAACM,EAAG,IAAGC,MAAO;YADjC;UAD2C,CAAvB,CAA/B;QAKH,CAND,CAME,OAAOQ,CAAP,EAAU;UACRP,IAAI,CAACC,UAAL,GAAkB,CAAlB;;UACA,IAAIM,CAAC,CAACC,OAAF,KAAc,2BAAlB,EAA+C;YAC3C,MAAMD,CAAN;UACH;;UACDE,OAAO,CAACC,GAAR,CAAYH,CAAZ;QACH;QAED;AAChB;AACA;;;QACgB,KAAK,MAAMJ,aAAX,IAA4BD,cAA5B,EAA4C;UACxC,MAAMX,GAAG,CAACY,aAAJ,CAAkBQ,MAAlB,CAAyBR,aAAa,CAACL,EAAvC,CAAN;QACH;MACJ;IACJ;EACJ,CA5CD;AA6CH,CAhDM"}
@@ -15,14 +15,13 @@ const deleteCommentsAfterChangeRequest = ({
15
15
  * Also delete all associated comments with "changeRequest".
16
16
  */
17
17
  let meta = {
18
- hasMoreItems: true,
19
- cursor: null
18
+ totalCount: 1
20
19
  };
21
20
  /**
22
21
  * Paginate through comments.
23
22
  */
24
23
 
25
- while (meta.hasMoreItems) {
24
+ while (meta.totalCount > 0) {
26
25
  let comments = [];
27
26
  /**
28
27
  * Get all comments.
@@ -34,15 +33,16 @@ const deleteCommentsAfterChangeRequest = ({
34
33
  changeRequest: {
35
34
  id: changeRequest.id
36
35
  }
37
- },
38
- after: meta.cursor || null
36
+ }
39
37
  });
40
38
  } catch (e) {
41
- meta.hasMoreItems = false;
39
+ meta.totalCount = 0;
42
40
 
43
41
  if (e.message !== "index_not_found_exception") {
44
42
  throw e;
45
43
  }
44
+
45
+ console.log(e);
46
46
  }
47
47
  /**
48
48
  * Delete comments one by one.
@@ -1 +1 @@
1
- {"version":3,"sources":["deleteCommentsAfterChangeRequest.ts"],"names":["deleteCommentsAfterChangeRequest","apw","changeRequest","onAfterChangeRequestDelete","subscribe","meta","hasMoreItems","cursor","comments","comment","list","where","id","after","e","message","delete"],"mappings":";;;;;;;AAEO,MAAMA,gCAAgC,GAAG,CAAC;AAC7CC,EAAAA;AAD6C,CAAD,KAEA;AAC5CA,EAAAA,GAAG,CAACC,aAAJ,CAAkBC,0BAAlB,CAA6CC,SAA7C,CAAuD,OAAO;AAAEF,IAAAA;AAAF,GAAP,KAA6B;AAChF;AACR;AACA;AACQ,QAAIG,IAAkC,GAAG;AACrCC,MAAAA,YAAY,EAAE,IADuB;AAErCC,MAAAA,MAAM,EAAE;AAF6B,KAAzC;AAIA;AACR;AACA;;AACQ,WAAOF,IAAI,CAACC,YAAZ,EAA0B;AACtB,UAAIE,QAAsB,GAAG,EAA7B;AACA;AACZ;AACA;;AACY,UAAI;AACA,SAACA,QAAD,EAAWH,IAAX,IAAmB,MAAMJ,GAAG,CAACQ,OAAJ,CAAYC,IAAZ,CAAiB;AACtCC,UAAAA,KAAK,EAAE;AACHT,YAAAA,aAAa,EAAE;AACXU,cAAAA,EAAE,EAAEV,aAAa,CAACU;AADP;AADZ,WAD+B;AAMtCC,UAAAA,KAAK,EAAER,IAAI,CAACE,MAAL,IAAe;AANgB,SAAjB,CAAzB;AAQH,OATD,CASE,OAAOO,CAAP,EAAU;AACRT,QAAAA,IAAI,CAACC,YAAL,GAAoB,KAApB;;AACA,YAAIQ,CAAC,CAACC,OAAF,KAAc,2BAAlB,EAA+C;AAC3C,gBAAMD,CAAN;AACH;AACJ;AAED;AACZ;AACA;;;AACY,WAAK,MAAML,OAAX,IAAsBD,QAAtB,EAAgC;AAC5B,cAAMP,GAAG,CAACQ,OAAJ,CAAYO,MAAZ,CAAmBP,OAAO,CAACG,EAA3B,CAAN;AACH;AACJ;AACJ,GAvCD;AAwCH,CA3CM","sourcesContent":["import { ApwComment, LifeCycleHookCallbackParams, ListMeta } from \"~/types\";\n\nexport const deleteCommentsAfterChangeRequest = ({\n apw\n}: Pick<LifeCycleHookCallbackParams, \"apw\">) => {\n apw.changeRequest.onAfterChangeRequestDelete.subscribe(async ({ changeRequest }) => {\n /**\n * Also delete all associated comments with \"changeRequest\".\n */\n let meta: Omit<ListMeta, \"totalCount\"> = {\n hasMoreItems: true,\n cursor: null\n };\n /**\n * Paginate through comments.\n */\n while (meta.hasMoreItems) {\n let comments: ApwComment[] = [];\n /**\n * Get all comments.\n */\n try {\n [comments, meta] = await apw.comment.list({\n where: {\n changeRequest: {\n id: changeRequest.id\n }\n },\n after: meta.cursor || null\n });\n } catch (e) {\n meta.hasMoreItems = false;\n if (e.message !== \"index_not_found_exception\") {\n throw e;\n }\n }\n\n /**\n * Delete comments one by one.\n */\n for (const comment of comments) {\n await apw.comment.delete(comment.id);\n }\n }\n });\n};\n"]}
1
+ {"version":3,"names":["deleteCommentsAfterChangeRequest","apw","changeRequest","onAfterChangeRequestDelete","subscribe","meta","totalCount","comments","comment","list","where","id","e","message","console","log","delete"],"sources":["deleteCommentsAfterChangeRequest.ts"],"sourcesContent":["import { ApwComment, LifeCycleHookCallbackParams, ListMeta } from \"~/types\";\n\nexport const deleteCommentsAfterChangeRequest = ({\n apw\n}: Pick<LifeCycleHookCallbackParams, \"apw\">) => {\n apw.changeRequest.onAfterChangeRequestDelete.subscribe(async ({ changeRequest }) => {\n /**\n * Also delete all associated comments with \"changeRequest\".\n */\n let meta: Pick<ListMeta, \"totalCount\"> = {\n totalCount: 1\n };\n /**\n * Paginate through comments.\n */\n while (meta.totalCount > 0) {\n let comments: ApwComment[] = [];\n /**\n * Get all comments.\n */\n try {\n [comments, meta] = await apw.comment.list({\n where: {\n changeRequest: {\n id: changeRequest.id\n }\n }\n });\n } catch (e) {\n meta.totalCount = 0;\n if (e.message !== \"index_not_found_exception\") {\n throw e;\n }\n console.log(e);\n }\n\n /**\n * Delete comments one by one.\n */\n for (const comment of comments) {\n await apw.comment.delete(comment.id);\n }\n }\n });\n};\n"],"mappings":";;;;;;;AAEO,MAAMA,gCAAgC,GAAG,CAAC;EAC7CC;AAD6C,CAAD,KAEA;EAC5CA,GAAG,CAACC,aAAJ,CAAkBC,0BAAlB,CAA6CC,SAA7C,CAAuD,OAAO;IAAEF;EAAF,CAAP,KAA6B;IAChF;AACR;AACA;IACQ,IAAIG,IAAkC,GAAG;MACrCC,UAAU,EAAE;IADyB,CAAzC;IAGA;AACR;AACA;;IACQ,OAAOD,IAAI,CAACC,UAAL,GAAkB,CAAzB,EAA4B;MACxB,IAAIC,QAAsB,GAAG,EAA7B;MACA;AACZ;AACA;;MACY,IAAI;QACA,CAACA,QAAD,EAAWF,IAAX,IAAmB,MAAMJ,GAAG,CAACO,OAAJ,CAAYC,IAAZ,CAAiB;UACtCC,KAAK,EAAE;YACHR,aAAa,EAAE;cACXS,EAAE,EAAET,aAAa,CAACS;YADP;UADZ;QAD+B,CAAjB,CAAzB;MAOH,CARD,CAQE,OAAOC,CAAP,EAAU;QACRP,IAAI,CAACC,UAAL,GAAkB,CAAlB;;QACA,IAAIM,CAAC,CAACC,OAAF,KAAc,2BAAlB,EAA+C;UAC3C,MAAMD,CAAN;QACH;;QACDE,OAAO,CAACC,GAAR,CAAYH,CAAZ;MACH;MAED;AACZ;AACA;;;MACY,KAAK,MAAMJ,OAAX,IAAsBD,QAAtB,EAAgC;QAC5B,MAAMN,GAAG,CAACO,OAAJ,CAAYQ,MAAZ,CAAmBR,OAAO,CAACG,EAA3B,CAAN;MACH;IACJ;EACJ,CAtCD;AAuCH,CA1CM"}
@@ -1,4 +1,3 @@
1
1
  import { ContextPlugin } from "@webiny/handler/plugins/ContextPlugin";
2
2
  import { ApwContext } from "../../types";
3
- declare const _default: () => (import("@webiny/handler-graphql/plugins").GraphQLSchemaPlugin<ApwContext> | ContextPlugin<ApwContext>)[];
4
- export default _default;
3
+ export declare const attachApwHooks: () => ContextPlugin<ApwContext>;
@@ -1,20 +1,12 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
- exports.default = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
+ exports.attachApwHooks = void 0;
11
7
 
12
8
  var _ContextPlugin = require("@webiny/handler/plugins/ContextPlugin");
13
9
 
14
- var _extendPbPageSchema = _interopRequireDefault(require("./extendPbPageSchema"));
15
-
16
- var _linkWorkflowToPage = require("./linkWorkflowToPage");
17
-
18
10
  var _deleteCommentsAfterChangeRequest = require("./deleteCommentsAfterChangeRequest");
19
11
 
20
12
  var _deleteChangeRequestsAfterContentReview = require("./deleteChangeRequestsAfterContentReview");
@@ -25,36 +17,44 @@ var _initializeContentReviewSteps = require("./initializeContentReviewSteps");
25
17
 
26
18
  var _updatePendingChangeRequests = require("./updatePendingChangeRequests");
27
19
 
28
- 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; }
20
+ var _updateTotalComments = require("./updateTotalComments");
21
+
22
+ var _validateChangeRequest = require("./validateChangeRequest");
29
23
 
30
- 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; }
24
+ var _validateContentReview = require("./validateContentReview");
31
25
 
32
- var _default = () => [(0, _extendPbPageSchema.default)(),
26
+ var _validateComment = require("./validateComment");
27
+
28
+ const attachApwHooks = () =>
33
29
  /**
34
30
  * Hook into CMS events and execute business logic.
35
31
  */
36
32
  new _ContextPlugin.ContextPlugin(async context => {
37
33
  const {
38
34
  security,
39
- apw,
40
- pageBuilder
35
+ apw
41
36
  } = context;
42
- const pageMethods = {
43
- onBeforePageCreate: pageBuilder.onBeforePageCreate,
44
- getPage: pageBuilder.getPage,
45
- updatePage: pageBuilder.updatePage
46
- };
37
+ (0, _validateContentReview.validateContentReview)({
38
+ apw
39
+ });
40
+ (0, _validateChangeRequest.validateChangeRequest)({
41
+ apw
42
+ });
43
+ (0, _validateComment.validateComment)({
44
+ apw
45
+ });
47
46
  (0, _createReviewerFromIdentity.createReviewerFromIdentity)({
48
47
  security,
49
48
  apw
50
49
  });
51
- (0, _linkWorkflowToPage.linkWorkflowToPage)(_objectSpread({
50
+ (0, _initializeContentReviewSteps.initializeContentReviewSteps)(context);
51
+ (0, _updatePendingChangeRequests.updatePendingChangeRequestsCount)({
52
52
  apw
53
- }, pageMethods));
54
- (0, _initializeContentReviewSteps.initializeContentReviewSteps)({
53
+ });
54
+ (0, _updateTotalComments.updateTotalCommentsCount)({
55
55
  apw
56
56
  });
57
- (0, _updatePendingChangeRequests.updatePendingChangeRequestsCount)({
57
+ (0, _updateTotalComments.updateLatestCommentId)({
58
58
  apw
59
59
  });
60
60
  (0, _deleteCommentsAfterChangeRequest.deleteCommentsAfterChangeRequest)({
@@ -63,6 +63,6 @@ new _ContextPlugin.ContextPlugin(async context => {
63
63
  (0, _deleteChangeRequestsAfterContentReview.deleteChangeRequestsWithContentReview)({
64
64
  apw
65
65
  });
66
- })];
66
+ });
67
67
 
68
- exports.default = _default;
68
+ exports.attachApwHooks = attachApwHooks;
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["ContextPlugin","context","security","apw","pageBuilder","pageMethods","onBeforePageCreate","getPage","updatePage"],"mappings":";;;;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;eAEe,MAAM,CACjB,kCADiB;AAEjB;AACJ;AACA;AACI,IAAIA,4BAAJ,CAA8B,MAAMC,OAAN,IAAiB;AAC3C,QAAM;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,GAAZ;AAAiBC,IAAAA;AAAjB,MAAiCH,OAAvC;AACA,QAAMI,WAAW,GAAG;AAChBC,IAAAA,kBAAkB,EAAEF,WAAW,CAACE,kBADhB;AAEhBC,IAAAA,OAAO,EAAEH,WAAW,CAACG,OAFL;AAGhBC,IAAAA,UAAU,EAAEJ,WAAW,CAACI;AAHR,GAApB;AAMA,8DAA2B;AAAEN,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,GAA3B;AAEA;AAAqBA,IAAAA;AAArB,KAA6BE,WAA7B;AAEA,kEAA6B;AAAEF,IAAAA;AAAF,GAA7B;AAEA,qEAAiC;AAAEA,IAAAA;AAAF,GAAjC;AAEA,0EAAiC;AAAEA,IAAAA;AAAF,GAAjC;AAEA,qFAAsC;AAAEA,IAAAA;AAAF,GAAtC;AACH,CAnBD,CALiB,C","sourcesContent":["import { ContextPlugin } from \"@webiny/handler/plugins/ContextPlugin\";\nimport { ApwContext } from \"~/types\";\nimport extendPbPageSchema from \"./extendPbPageSchema\";\nimport { linkWorkflowToPage } from \"./linkWorkflowToPage\";\nimport { deleteCommentsAfterChangeRequest } from \"./deleteCommentsAfterChangeRequest\";\nimport { deleteChangeRequestsWithContentReview } from \"./deleteChangeRequestsAfterContentReview\";\nimport { createReviewerFromIdentity } from \"./createReviewerFromIdentity\";\nimport { initializeContentReviewSteps } from \"./initializeContentReviewSteps\";\nimport { updatePendingChangeRequestsCount } from \"./updatePendingChangeRequests\";\n\nexport default () => [\n extendPbPageSchema(),\n /**\n * Hook into CMS events and execute business logic.\n */\n new ContextPlugin<ApwContext>(async context => {\n const { security, apw, pageBuilder } = context;\n const pageMethods = {\n onBeforePageCreate: pageBuilder.onBeforePageCreate,\n getPage: pageBuilder.getPage,\n updatePage: pageBuilder.updatePage\n };\n\n createReviewerFromIdentity({ security, apw });\n\n linkWorkflowToPage({ apw, ...pageMethods });\n\n initializeContentReviewSteps({ apw });\n\n updatePendingChangeRequestsCount({ apw });\n\n deleteCommentsAfterChangeRequest({ apw });\n\n deleteChangeRequestsWithContentReview({ apw });\n })\n];\n"]}
1
+ {"version":3,"names":["attachApwHooks","ContextPlugin","context","security","apw","validateContentReview","validateChangeRequest","validateComment","createReviewerFromIdentity","initializeContentReviewSteps","updatePendingChangeRequestsCount","updateTotalCommentsCount","updateLatestCommentId","deleteCommentsAfterChangeRequest","deleteChangeRequestsWithContentReview"],"sources":["index.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/handler/plugins/ContextPlugin\";\nimport { ApwContext } from \"~/types\";\nimport { deleteCommentsAfterChangeRequest } from \"./deleteCommentsAfterChangeRequest\";\nimport { deleteChangeRequestsWithContentReview } from \"./deleteChangeRequestsAfterContentReview\";\nimport { createReviewerFromIdentity } from \"./createReviewerFromIdentity\";\nimport { initializeContentReviewSteps } from \"./initializeContentReviewSteps\";\nimport { updatePendingChangeRequestsCount } from \"./updatePendingChangeRequests\";\nimport { updateTotalCommentsCount, updateLatestCommentId } from \"./updateTotalComments\";\nimport { validateChangeRequest } from \"./validateChangeRequest\";\nimport { validateContentReview } from \"./validateContentReview\";\nimport { validateComment } from \"./validateComment\";\n\nexport const attachApwHooks = () =>\n /**\n * Hook into CMS events and execute business logic.\n */\n new ContextPlugin<ApwContext>(async context => {\n const { security, apw } = context;\n\n validateContentReview({ apw });\n\n validateChangeRequest({ apw });\n\n validateComment({ apw });\n\n createReviewerFromIdentity({ security, apw });\n\n initializeContentReviewSteps(context);\n\n updatePendingChangeRequestsCount({ apw });\n\n updateTotalCommentsCount({ apw });\n\n updateLatestCommentId({ apw });\n\n deleteCommentsAfterChangeRequest({ apw });\n\n deleteChangeRequestsWithContentReview({ apw });\n });\n"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEO,MAAMA,cAAc,GAAG;AAC1B;AACJ;AACA;AACI,IAAIC,4BAAJ,CAA8B,MAAMC,OAAN,IAAiB;EAC3C,MAAM;IAAEC,QAAF;IAAYC;EAAZ,IAAoBF,OAA1B;EAEA,IAAAG,4CAAA,EAAsB;IAAED;EAAF,CAAtB;EAEA,IAAAE,4CAAA,EAAsB;IAAEF;EAAF,CAAtB;EAEA,IAAAG,gCAAA,EAAgB;IAAEH;EAAF,CAAhB;EAEA,IAAAI,sDAAA,EAA2B;IAAEL,QAAF;IAAYC;EAAZ,CAA3B;EAEA,IAAAK,0DAAA,EAA6BP,OAA7B;EAEA,IAAAQ,6DAAA,EAAiC;IAAEN;EAAF,CAAjC;EAEA,IAAAO,6CAAA,EAAyB;IAAEP;EAAF,CAAzB;EAEA,IAAAQ,0CAAA,EAAsB;IAAER;EAAF,CAAtB;EAEA,IAAAS,kEAAA,EAAiC;IAAET;EAAF,CAAjC;EAEA,IAAAU,6EAAA,EAAsC;IAAEV;EAAF,CAAtC;AACH,CAtBD,CAJG"}
@@ -1,7 +1,2 @@
1
- import { AdvancedPublishingWorkflow, ApwContentTypes, LifeCycleHookCallbackParams } from "../../types";
2
- export declare const getWorkflowIdFromContent: (apw: AdvancedPublishingWorkflow, params: {
3
- type: ApwContentTypes;
4
- id: string;
5
- settings: Record<string, any>;
6
- }) => Promise<string | null>;
7
- export declare const initializeContentReviewSteps: ({ apw }: Pick<LifeCycleHookCallbackParams, "apw">) => void;
1
+ import { ApwContext } from "../../types";
2
+ export declare const initializeContentReviewSteps: ({ apw, plugins }: ApwContext) => void;
@@ -5,49 +5,61 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.initializeContentReviewSteps = exports.getWorkflowIdFromContent = void 0;
8
+ exports.initializeContentReviewSteps = void 0;
9
9
 
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
 
12
12
  var _set = _interopRequireDefault(require("lodash/set"));
13
13
 
14
- var _types = require("../../types");
15
-
16
14
  var _utils = require("../utils");
17
15
 
18
16
  var _handlerGraphql = require("@webiny/handler-graphql");
19
17
 
18
+ var _contentApwSettingsPlugin = require("../../utils/contentApwSettingsPlugin");
19
+
20
20
  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; }
21
21
 
22
22
  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; }
23
23
 
24
- const getWorkflowIdFromContent = async (apw, params) => {
25
- switch (params.type) {
26
- case _types.ApwContentTypes.PAGE:
27
- const getWorkflowFromPage = apw.getWorkflowGetter(_types.ApwContentTypes.PAGE);
28
- return getWorkflowFromPage(params.id, {});
29
-
30
- case _types.ApwContentTypes.CMS_ENTRY:
31
- const getWorkflowFromCmsEntry = apw.getWorkflowGetter(_types.ApwContentTypes.CMS_ENTRY);
32
- return getWorkflowFromCmsEntry(params.id, params.settings);
33
-
34
- default:
35
- return null;
36
- }
37
- };
38
-
39
- exports.getWorkflowIdFromContent = getWorkflowIdFromContent;
40
-
41
24
  const initializeContentReviewSteps = ({
42
- apw
25
+ apw,
26
+ plugins
43
27
  }) => {
44
28
  apw.contentReview.onBeforeContentReviewCreate.subscribe(async ({
45
29
  input
46
30
  }) => {
31
+ const {
32
+ type,
33
+ id,
34
+ settings
35
+ } = input.content;
36
+ /*
37
+ * Let's set "title" field value.
38
+ */
39
+
40
+ const getContent = apw.getContentGetter(type);
41
+ const content = await getContent(id, settings);
42
+
43
+ if (!content) {
44
+ throw new _handlerGraphql.NotFoundError(`Content "${type}" with id ${id} not found.`);
45
+ }
46
+
47
+ const {
48
+ title
49
+ } = content;
50
+ input = (0, _set.default)(input, "title", title);
51
+ /**
52
+ * We need to find a plugin which can get a workflow ID for the given type of content.
53
+ */
54
+
55
+ const contentApwSettingsPlugin = (0, _contentApwSettingsPlugin.getContentApwSettingsPlugin)({
56
+ plugins,
57
+ type
58
+ });
59
+ const workflowId = contentApwSettingsPlugin.getWorkflowId(content);
47
60
  /**
48
61
  * Let's initialize the "ContentReview" steps.
49
62
  */
50
- const workflowId = await getWorkflowIdFromContent(apw, input.content);
51
63
 
52
64
  if (!workflowId) {
53
65
  throw new _handlerGraphql.NotFoundError(`Unable to initiate a "Content review". No workflow found!`);
@@ -55,15 +67,21 @@ const initializeContentReviewSteps = ({
55
67
 
56
68
  const workflow = await apw.workflow.get(workflowId);
57
69
  const workflowSteps = workflow.steps;
58
- let previousStepStatus;
70
+ let previousStepStatus = undefined;
59
71
  const updatedSteps = workflow.steps.map((step, index) => {
60
72
  const status = (0, _utils.getContentReviewStepInitialStatus)(workflowSteps, index, previousStepStatus);
61
73
  previousStepStatus = status;
62
74
  return _objectSpread(_objectSpread({}, step), {}, {
63
75
  status,
64
- pendingChangeRequests: 0
76
+ pendingChangeRequests: 0,
77
+ totalComments: 0
65
78
  });
66
79
  });
80
+ /**
81
+ * TODO Figure our what does this actually do?
82
+ * There is no steps property on CreateApwContentReviewParams
83
+ */
84
+
67
85
  input = (0, _set.default)(input, "steps", updatedSteps);
68
86
  });
69
87
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["initializeContentReviewSteps.ts"],"names":["getWorkflowIdFromContent","apw","params","type","ApwContentTypes","PAGE","getWorkflowFromPage","getWorkflowGetter","id","CMS_ENTRY","getWorkflowFromCmsEntry","settings","initializeContentReviewSteps","contentReview","onBeforeContentReviewCreate","subscribe","input","workflowId","content","NotFoundError","workflow","get","workflowSteps","steps","previousStepStatus","updatedSteps","map","step","index","status","pendingChangeRequests"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAMA;;AACA;;;;;;AAEO,MAAMA,wBAAwB,GAAG,OACpCC,GADoC,EAEpCC,MAFoC,KAGX;AACzB,UAAQA,MAAM,CAACC,IAAf;AACI,SAAKC,uBAAgBC,IAArB;AACI,YAAMC,mBAAmB,GAAGL,GAAG,CAACM,iBAAJ,CAAsBH,uBAAgBC,IAAtC,CAA5B;AACA,aAAOC,mBAAmB,CAACJ,MAAM,CAACM,EAAR,EAAY,EAAZ,CAA1B;;AAEJ,SAAKJ,uBAAgBK,SAArB;AACI,YAAMC,uBAAuB,GAAGT,GAAG,CAACM,iBAAJ,CAAsBH,uBAAgBK,SAAtC,CAAhC;AACA,aAAOC,uBAAuB,CAACR,MAAM,CAACM,EAAR,EAAYN,MAAM,CAACS,QAAnB,CAA9B;;AACJ;AACI,aAAO,IAAP;AATR;AAWH,CAfM;;;;AAiBA,MAAMC,4BAA4B,GAAG,CAAC;AAAEX,EAAAA;AAAF,CAAD,KAAuD;AAC/FA,EAAAA,GAAG,CAACY,aAAJ,CAAkBC,2BAAlB,CAA8CC,SAA9C,CAAwD,OAAO;AAAEC,IAAAA;AAAF,GAAP,KAAqB;AACzE;AACR;AACA;AACQ,UAAMC,UAAU,GAAG,MAAMjB,wBAAwB,CAACC,GAAD,EAAMe,KAAK,CAACE,OAAZ,CAAjD;;AAEA,QAAI,CAACD,UAAL,EAAiB;AACb,YAAM,IAAIE,6BAAJ,CAAmB,2DAAnB,CAAN;AACH;;AAED,UAAMC,QAAQ,GAAG,MAAMnB,GAAG,CAACmB,QAAJ,CAAaC,GAAb,CAAiBJ,UAAjB,CAAvB;AACA,UAAMK,aAAa,GAAGF,QAAQ,CAACG,KAA/B;AAEA,QAAIC,kBAAJ;AACA,UAAMC,YAAY,GAAGL,QAAQ,CAACG,KAAT,CAAeG,GAAf,CAAmB,CAACC,IAAD,EAAOC,KAAP,KAAiB;AACrD,YAAMC,MAAM,GAAG,8CACXP,aADW,EAEXM,KAFW,EAGXJ,kBAHW,CAAf;AAKAA,MAAAA,kBAAkB,GAAGK,MAArB;AACA,6CACOF,IADP;AAEIE,QAAAA,MAFJ;AAGIC,QAAAA,qBAAqB,EAAE;AAH3B;AAKH,KAZoB,CAArB;AAcAd,IAAAA,KAAK,GAAG,kBAAUA,KAAV,EAAiB,OAAjB,EAA0BS,YAA1B,CAAR;AACH,GA7BD;AA8BH,CA/BM","sourcesContent":["import lodashSet from \"lodash/set\";\nimport {\n AdvancedPublishingWorkflow,\n ApwContentReviewStepStatus,\n ApwContentTypes,\n LifeCycleHookCallbackParams\n} from \"~/types\";\nimport { getContentReviewStepInitialStatus } from \"~/plugins/utils\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\n\nexport const getWorkflowIdFromContent = async (\n apw: AdvancedPublishingWorkflow,\n params: { type: ApwContentTypes; id: string; settings: Record<string, any> }\n): Promise<string | null> => {\n switch (params.type) {\n case ApwContentTypes.PAGE:\n const getWorkflowFromPage = apw.getWorkflowGetter(ApwContentTypes.PAGE);\n return getWorkflowFromPage(params.id, {});\n\n case ApwContentTypes.CMS_ENTRY:\n const getWorkflowFromCmsEntry = apw.getWorkflowGetter(ApwContentTypes.CMS_ENTRY);\n return getWorkflowFromCmsEntry(params.id, params.settings);\n default:\n return null;\n }\n};\n\nexport const initializeContentReviewSteps = ({ apw }: Pick<LifeCycleHookCallbackParams, \"apw\">) => {\n apw.contentReview.onBeforeContentReviewCreate.subscribe(async ({ input }) => {\n /**\n * Let's initialize the \"ContentReview\" steps.\n */\n const workflowId = await getWorkflowIdFromContent(apw, input.content);\n\n if (!workflowId) {\n throw new NotFoundError(`Unable to initiate a \"Content review\". No workflow found!`);\n }\n\n const workflow = await apw.workflow.get(workflowId);\n const workflowSteps = workflow.steps;\n\n let previousStepStatus: ApwContentReviewStepStatus;\n const updatedSteps = workflow.steps.map((step, index) => {\n const status = getContentReviewStepInitialStatus(\n workflowSteps,\n index,\n previousStepStatus\n );\n previousStepStatus = status;\n return {\n ...step,\n status,\n pendingChangeRequests: 0\n };\n });\n\n input = lodashSet(input, \"steps\", updatedSteps);\n });\n};\n"]}
1
+ {"version":3,"names":["initializeContentReviewSteps","apw","plugins","contentReview","onBeforeContentReviewCreate","subscribe","input","type","id","settings","content","getContent","getContentGetter","NotFoundError","title","lodashSet","contentApwSettingsPlugin","getContentApwSettingsPlugin","workflowId","getWorkflowId","workflow","get","workflowSteps","steps","previousStepStatus","undefined","updatedSteps","map","step","index","status","getContentReviewStepInitialStatus","pendingChangeRequests","totalComments"],"sources":["initializeContentReviewSteps.ts"],"sourcesContent":["import lodashSet from \"lodash/set\";\nimport { ApwContentReviewStepStatus, ApwContext } from \"~/types\";\nimport { getContentReviewStepInitialStatus } from \"~/plugins/utils\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { getContentApwSettingsPlugin } from \"~/utils/contentApwSettingsPlugin\";\n\nexport const initializeContentReviewSteps = ({ apw, plugins }: ApwContext) => {\n apw.contentReview.onBeforeContentReviewCreate.subscribe(async ({ input }) => {\n const { type, id, settings } = input.content;\n /*\n * Let's set \"title\" field value.\n */\n const getContent = apw.getContentGetter(type);\n const content = await getContent(id, settings);\n if (!content) {\n throw new NotFoundError(`Content \"${type}\" with id ${id} not found.`);\n }\n\n const { title } = content;\n input = lodashSet(input, \"title\", title);\n\n /**\n * We need to find a plugin which can get a workflow ID for the given type of content.\n */\n const contentApwSettingsPlugin = getContentApwSettingsPlugin({\n plugins,\n type\n });\n\n const workflowId = contentApwSettingsPlugin.getWorkflowId(content);\n\n /**\n * Let's initialize the \"ContentReview\" steps.\n */\n if (!workflowId) {\n throw new NotFoundError(`Unable to initiate a \"Content review\". No workflow found!`);\n }\n\n const workflow = await apw.workflow.get(workflowId);\n const workflowSteps = workflow.steps;\n\n let previousStepStatus: ApwContentReviewStepStatus | undefined = undefined;\n const updatedSteps = workflow.steps.map((step, index) => {\n const status = getContentReviewStepInitialStatus(\n workflowSteps,\n index,\n previousStepStatus\n );\n previousStepStatus = status;\n return {\n ...step,\n status,\n pendingChangeRequests: 0,\n totalComments: 0\n };\n });\n /**\n * TODO Figure our what does this actually do?\n * There is no steps property on CreateApwContentReviewParams\n */\n input = lodashSet(input, \"steps\", updatedSteps);\n });\n};\n"],"mappings":";;;;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;;;;;AAEO,MAAMA,4BAA4B,GAAG,CAAC;EAAEC,GAAF;EAAOC;AAAP,CAAD,KAAkC;EAC1ED,GAAG,CAACE,aAAJ,CAAkBC,2BAAlB,CAA8CC,SAA9C,CAAwD,OAAO;IAAEC;EAAF,CAAP,KAAqB;IACzE,MAAM;MAAEC,IAAF;MAAQC,EAAR;MAAYC;IAAZ,IAAyBH,KAAK,CAACI,OAArC;IACA;AACR;AACA;;IACQ,MAAMC,UAAU,GAAGV,GAAG,CAACW,gBAAJ,CAAqBL,IAArB,CAAnB;IACA,MAAMG,OAAO,GAAG,MAAMC,UAAU,CAACH,EAAD,EAAKC,QAAL,CAAhC;;IACA,IAAI,CAACC,OAAL,EAAc;MACV,MAAM,IAAIG,6BAAJ,CAAmB,YAAWN,IAAK,aAAYC,EAAG,aAAlD,CAAN;IACH;;IAED,MAAM;MAAEM;IAAF,IAAYJ,OAAlB;IACAJ,KAAK,GAAG,IAAAS,YAAA,EAAUT,KAAV,EAAiB,OAAjB,EAA0BQ,KAA1B,CAAR;IAEA;AACR;AACA;;IACQ,MAAME,wBAAwB,GAAG,IAAAC,qDAAA,EAA4B;MACzDf,OADyD;MAEzDK;IAFyD,CAA5B,CAAjC;IAKA,MAAMW,UAAU,GAAGF,wBAAwB,CAACG,aAAzB,CAAuCT,OAAvC,CAAnB;IAEA;AACR;AACA;;IACQ,IAAI,CAACQ,UAAL,EAAiB;MACb,MAAM,IAAIL,6BAAJ,CAAmB,2DAAnB,CAAN;IACH;;IAED,MAAMO,QAAQ,GAAG,MAAMnB,GAAG,CAACmB,QAAJ,CAAaC,GAAb,CAAiBH,UAAjB,CAAvB;IACA,MAAMI,aAAa,GAAGF,QAAQ,CAACG,KAA/B;IAEA,IAAIC,kBAA0D,GAAGC,SAAjE;IACA,MAAMC,YAAY,GAAGN,QAAQ,CAACG,KAAT,CAAeI,GAAf,CAAmB,CAACC,IAAD,EAAOC,KAAP,KAAiB;MACrD,MAAMC,MAAM,GAAG,IAAAC,wCAAA,EACXT,aADW,EAEXO,KAFW,EAGXL,kBAHW,CAAf;MAKAA,kBAAkB,GAAGM,MAArB;MACA,uCACOF,IADP;QAEIE,MAFJ;QAGIE,qBAAqB,EAAE,CAH3B;QAIIC,aAAa,EAAE;MAJnB;IAMH,CAboB,CAArB;IAcA;AACR;AACA;AACA;;IACQ3B,KAAK,GAAG,IAAAS,YAAA,EAAUT,KAAV,EAAiB,OAAjB,EAA0BoB,YAA1B,CAAR;EACH,CAtDD;AAuDH,CAxDM"}
@@ -9,52 +9,31 @@ exports.updatePendingChangeRequestsCount = void 0;
9
9
 
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
 
12
+ var _utils = require("../utils");
13
+
12
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; }
13
15
 
14
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; }
15
17
 
16
18
  const updatePendingChangeRequests = async ({
17
19
  contentReviewMethods,
18
- changeRequest,
20
+ step,
19
21
  delta
20
22
  }) => {
21
23
  const {
22
- step: stepSlug
23
- } = changeRequest;
24
- /*
25
- * Get associated content review entry.
26
- */
27
-
28
- const [entryId, version, slug] = stepSlug.split("#");
29
- const revisionId = `${entryId}#${version}`;
30
- let contentReviewEntry = null;
31
-
32
- try {
33
- contentReviewEntry = await contentReviewMethods.get(revisionId);
34
- } catch (e) {
35
- if (e.message !== "index_not_found_exception" && e.code !== "NOT_FOUND") {
36
- throw e;
37
- }
38
- }
39
-
40
- if (!contentReviewEntry) {
41
- return;
42
- }
43
- /**
44
- * Update "pendingChangeRequests" count of corresponding step in content review entry.
45
- */
46
-
47
-
48
- await contentReviewMethods.update(contentReviewEntry.id, {
49
- steps: contentReviewEntry.steps.map(step => {
50
- if (step.slug === slug) {
51
- return _objectSpread(_objectSpread({}, step), {}, {
24
+ id,
25
+ stepId
26
+ } = (0, _utils.extractContentReviewIdAndStep)(step);
27
+ await (0, _utils.updateContentReview)({
28
+ contentReviewMethods,
29
+ id,
30
+ getNewContentReviewData: data => {
31
+ return _objectSpread(_objectSpread({}, data), {}, {
32
+ steps: (0, _utils.updateContentReviewStep)(data.steps, stepId, step => _objectSpread(_objectSpread({}, step), {}, {
52
33
  pendingChangeRequests: step.pendingChangeRequests + delta
53
- });
54
- }
55
-
56
- return step;
57
- })
34
+ }))
35
+ });
36
+ }
58
37
  });
59
38
  };
60
39
 
@@ -64,13 +43,22 @@ const updatePendingChangeRequestsCount = ({
64
43
  apw.changeRequest.onAfterChangeRequestDelete.subscribe(async ({
65
44
  changeRequest
66
45
  }) => {
46
+ /**
47
+ * If the deleted changeRequest was marked as resolved. We don't need to do anything here,
48
+ * because "pendingChangeRequests has been already updated in "onAfterChangeRequestUpdate" hook.
49
+ */
50
+ if (changeRequest.resolved === true) {
51
+ return;
52
+ }
67
53
  /**
68
54
  * After a "changeRequest" is deleted, decrement the "pendingChangeRequests" count
69
55
  * in the corresponding step of the content review entry.
70
56
  */
57
+
58
+
71
59
  await updatePendingChangeRequests({
72
60
  contentReviewMethods: apw.contentReview,
73
- changeRequest: changeRequest,
61
+ step: changeRequest.step,
74
62
  delta: -1
75
63
  });
76
64
  });
@@ -83,7 +71,7 @@ const updatePendingChangeRequestsCount = ({
83
71
  */
84
72
  await updatePendingChangeRequests({
85
73
  contentReviewMethods: apw.contentReview,
86
- changeRequest,
74
+ step: changeRequest.step,
87
75
  delta: 1
88
76
  });
89
77
  });
@@ -100,7 +88,7 @@ const updatePendingChangeRequestsCount = ({
100
88
  const delta = resolved === true ? -1 : 1;
101
89
  await updatePendingChangeRequests({
102
90
  contentReviewMethods: apw.contentReview,
103
- changeRequest,
91
+ step: changeRequest.step,
104
92
  delta
105
93
  });
106
94
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["updatePendingChangeRequests.ts"],"names":["updatePendingChangeRequests","contentReviewMethods","changeRequest","delta","step","stepSlug","entryId","version","slug","split","revisionId","contentReviewEntry","get","e","message","code","update","id","steps","map","pendingChangeRequests","updatePendingChangeRequestsCount","apw","onAfterChangeRequestDelete","subscribe","contentReview","onAfterChangeRequestCreate","onAfterChangeRequestUpdate","original","resolved"],"mappings":";;;;;;;;;;;;;;;AAaA,MAAMA,2BAA2B,GAAG,OAAO;AACvCC,EAAAA,oBADuC;AAEvCC,EAAAA,aAFuC;AAGvCC,EAAAA;AAHuC,CAAP,KAIoB;AACpD,QAAM;AAAEC,IAAAA,IAAI,EAAEC;AAAR,MAAqBH,aAA3B;AACA;AACJ;AACA;;AACI,QAAM,CAACI,OAAD,EAAUC,OAAV,EAAmBC,IAAnB,IAA2BH,QAAQ,CAACI,KAAT,CAAe,GAAf,CAAjC;AACA,QAAMC,UAAU,GAAI,GAAEJ,OAAQ,IAAGC,OAAQ,EAAzC;AAEA,MAAII,kBAA2C,GAAG,IAAlD;;AACA,MAAI;AACAA,IAAAA,kBAAkB,GAAG,MAAMV,oBAAoB,CAACW,GAArB,CAAyBF,UAAzB,CAA3B;AACH,GAFD,CAEE,OAAOG,CAAP,EAAU;AACR,QAAIA,CAAC,CAACC,OAAF,KAAc,2BAAd,IAA6CD,CAAC,CAACE,IAAF,KAAW,WAA5D,EAAyE;AACrE,YAAMF,CAAN;AACH;AACJ;;AACD,MAAI,CAACF,kBAAL,EAAyB;AACrB;AACH;AACD;AACJ;AACA;;;AACI,QAAMV,oBAAoB,CAACe,MAArB,CAA4BL,kBAAkB,CAACM,EAA/C,EAAmD;AACrDC,IAAAA,KAAK,EAAEP,kBAAkB,CAACO,KAAnB,CAAyBC,GAAzB,CAA6Bf,IAAI,IAAI;AACxC,UAAIA,IAAI,CAACI,IAAL,KAAcA,IAAlB,EAAwB;AACpB,+CACOJ,IADP;AAEIgB,UAAAA,qBAAqB,EAAEhB,IAAI,CAACgB,qBAAL,GAA6BjB;AAFxD;AAIH;;AACD,aAAOC,IAAP;AACH,KARM;AAD8C,GAAnD,CAAN;AAWH,CArCD;;AAuCO,MAAMiB,gCAAgC,GAAG,CAAC;AAC7CC,EAAAA;AAD6C,CAAD,KAEA;AAC5CA,EAAAA,GAAG,CAACpB,aAAJ,CAAkBqB,0BAAlB,CAA6CC,SAA7C,CAAuD,OAAO;AAAEtB,IAAAA;AAAF,GAAP,KAA6B;AAChF;AACR;AACA;AACA;AACQ,UAAMF,2BAA2B,CAAC;AAC9BC,MAAAA,oBAAoB,EAAEqB,GAAG,CAACG,aADI;AAE9BvB,MAAAA,aAAa,EAAEA,aAFe;AAG9BC,MAAAA,KAAK,EAAE,CAAC;AAHsB,KAAD,CAAjC;AAKH,GAVD;AAYAmB,EAAAA,GAAG,CAACpB,aAAJ,CAAkBwB,0BAAlB,CAA6CF,SAA7C,CAAuD,OAAO;AAAEtB,IAAAA;AAAF,GAAP,KAA6B;AAChF;AACR;AACA;AACA;AACQ,UAAMF,2BAA2B,CAAC;AAC9BC,MAAAA,oBAAoB,EAAEqB,GAAG,CAACG,aADI;AAE9BvB,MAAAA,aAF8B;AAG9BC,MAAAA,KAAK,EAAE;AAHuB,KAAD,CAAjC;AAKH,GAVD;AAYAmB,EAAAA,GAAG,CAACpB,aAAJ,CAAkByB,0BAAlB,CAA6CH,SAA7C,CAAuD,OAAO;AAAEtB,IAAAA,aAAF;AAAiB0B,IAAAA;AAAjB,GAAP,KAAuC;AAC1F;AACR;AACA;AACA;AACQ,QAAIA,QAAQ,CAACC,QAAT,KAAsB3B,aAAa,CAAC2B,QAAxC,EAAkD;AAC9C,YAAMA,QAAQ,GAAG3B,aAAa,CAAC2B,QAA/B;AACA,YAAM1B,KAAK,GAAG0B,QAAQ,KAAK,IAAb,GAAoB,CAAC,CAArB,GAAyB,CAAvC;AAEA,YAAM7B,2BAA2B,CAAC;AAC9BC,QAAAA,oBAAoB,EAAEqB,GAAG,CAACG,aADI;AAE9BvB,QAAAA,aAF8B;AAG9BC,QAAAA;AAH8B,OAAD,CAAjC;AAKH;AACJ,GAfD;AAgBH,CA3CM","sourcesContent":["import {\n ApwChangeRequest,\n ApwContentReview,\n ApwContentReviewCrud,\n LifeCycleHookCallbackParams\n} from \"~/types\";\n\ninterface UpdatePendingChangeRequestsParams {\n contentReviewMethods: ApwContentReviewCrud;\n changeRequest: ApwChangeRequest;\n delta: number;\n}\n\nconst updatePendingChangeRequests = async ({\n contentReviewMethods,\n changeRequest,\n delta\n}: UpdatePendingChangeRequestsParams): Promise<void> => {\n const { step: stepSlug } = changeRequest;\n /*\n * Get associated content review entry.\n */\n const [entryId, version, slug] = stepSlug.split(\"#\");\n const revisionId = `${entryId}#${version}`;\n\n let contentReviewEntry: ApwContentReview | null = null;\n try {\n contentReviewEntry = await contentReviewMethods.get(revisionId);\n } catch (e) {\n if (e.message !== \"index_not_found_exception\" && e.code !== \"NOT_FOUND\") {\n throw e;\n }\n }\n if (!contentReviewEntry) {\n return;\n }\n /**\n * Update \"pendingChangeRequests\" count of corresponding step in content review entry.\n */\n await contentReviewMethods.update(contentReviewEntry.id, {\n steps: contentReviewEntry.steps.map(step => {\n if (step.slug === slug) {\n return {\n ...step,\n pendingChangeRequests: step.pendingChangeRequests + delta\n };\n }\n return step;\n })\n });\n};\n\nexport const updatePendingChangeRequestsCount = ({\n apw\n}: Pick<LifeCycleHookCallbackParams, \"apw\">) => {\n apw.changeRequest.onAfterChangeRequestDelete.subscribe(async ({ changeRequest }) => {\n /**\n * After a \"changeRequest\" is deleted, decrement the \"pendingChangeRequests\" count\n * in the corresponding step of the content review entry.\n */\n await updatePendingChangeRequests({\n contentReviewMethods: apw.contentReview,\n changeRequest: changeRequest,\n delta: -1\n });\n });\n\n apw.changeRequest.onAfterChangeRequestCreate.subscribe(async ({ changeRequest }) => {\n /**\n * After a \"changeRequest\" is created, increment the \"pendingChangeRequests\" count\n * of the corresponding step in the content review entry.\n */\n await updatePendingChangeRequests({\n contentReviewMethods: apw.contentReview,\n changeRequest,\n delta: 1\n });\n });\n\n apw.changeRequest.onAfterChangeRequestUpdate.subscribe(async ({ changeRequest, original }) => {\n /**\n * After a \"changeRequest\" is created, and the value of \"resolved\" field has changed;\n * then we also need to update the \"pendingChangeRequests\" count of the corresponding step in the content review entry.\n */\n if (original.resolved !== changeRequest.resolved) {\n const resolved = changeRequest.resolved;\n const delta = resolved === true ? -1 : 1;\n\n await updatePendingChangeRequests({\n contentReviewMethods: apw.contentReview,\n changeRequest,\n delta\n });\n }\n });\n};\n"]}
1
+ {"version":3,"names":["updatePendingChangeRequests","contentReviewMethods","step","delta","id","stepId","extractContentReviewIdAndStep","updateContentReview","getNewContentReviewData","data","steps","updateContentReviewStep","pendingChangeRequests","updatePendingChangeRequestsCount","apw","changeRequest","onAfterChangeRequestDelete","subscribe","resolved","contentReview","onAfterChangeRequestCreate","onAfterChangeRequestUpdate","original"],"sources":["updatePendingChangeRequests.ts"],"sourcesContent":["import { ApwChangeRequest, ApwContentReviewCrud, LifeCycleHookCallbackParams } from \"~/types\";\nimport {\n extractContentReviewIdAndStep,\n updateContentReview,\n updateContentReviewStep\n} from \"../utils\";\n\ninterface UpdatePendingChangeRequestsParams {\n contentReviewMethods: ApwContentReviewCrud;\n delta: number;\n step: ApwChangeRequest[\"step\"];\n}\n\nconst updatePendingChangeRequests = async ({\n contentReviewMethods,\n step,\n delta\n}: UpdatePendingChangeRequestsParams): Promise<void> => {\n const { id, stepId } = extractContentReviewIdAndStep(step);\n\n await updateContentReview({\n contentReviewMethods,\n id,\n getNewContentReviewData: data => {\n return {\n ...data,\n steps: updateContentReviewStep(data.steps, stepId, step => ({\n ...step,\n pendingChangeRequests: step.pendingChangeRequests + delta\n }))\n };\n }\n });\n};\n\nexport const updatePendingChangeRequestsCount = ({\n apw\n}: Pick<LifeCycleHookCallbackParams, \"apw\">) => {\n apw.changeRequest.onAfterChangeRequestDelete.subscribe(async ({ changeRequest }) => {\n /**\n * If the deleted changeRequest was marked as resolved. We don't need to do anything here,\n * because \"pendingChangeRequests has been already updated in \"onAfterChangeRequestUpdate\" hook.\n */\n if (changeRequest.resolved === true) {\n return;\n }\n /**\n * After a \"changeRequest\" is deleted, decrement the \"pendingChangeRequests\" count\n * in the corresponding step of the content review entry.\n */\n await updatePendingChangeRequests({\n contentReviewMethods: apw.contentReview,\n step: changeRequest.step,\n delta: -1\n });\n });\n\n apw.changeRequest.onAfterChangeRequestCreate.subscribe(async ({ changeRequest }) => {\n /**\n * After a \"changeRequest\" is created, increment the \"pendingChangeRequests\" count\n * of the corresponding step in the content review entry.\n */\n await updatePendingChangeRequests({\n contentReviewMethods: apw.contentReview,\n step: changeRequest.step,\n delta: 1\n });\n });\n\n apw.changeRequest.onAfterChangeRequestUpdate.subscribe(async ({ changeRequest, original }) => {\n /**\n * After a \"changeRequest\" is created, and the value of \"resolved\" field has changed;\n * then we also need to update the \"pendingChangeRequests\" count of the corresponding step in the content review entry.\n */\n if (original.resolved !== changeRequest.resolved) {\n const resolved = changeRequest.resolved;\n const delta = resolved === true ? -1 : 1;\n\n await updatePendingChangeRequests({\n contentReviewMethods: apw.contentReview,\n step: changeRequest.step,\n delta\n });\n }\n });\n};\n"],"mappings":";;;;;;;;;;;AACA;;;;;;AAYA,MAAMA,2BAA2B,GAAG,OAAO;EACvCC,oBADuC;EAEvCC,IAFuC;EAGvCC;AAHuC,CAAP,KAIoB;EACpD,MAAM;IAAEC,EAAF;IAAMC;EAAN,IAAiB,IAAAC,oCAAA,EAA8BJ,IAA9B,CAAvB;EAEA,MAAM,IAAAK,0BAAA,EAAoB;IACtBN,oBADsB;IAEtBG,EAFsB;IAGtBI,uBAAuB,EAAEC,IAAI,IAAI;MAC7B,uCACOA,IADP;QAEIC,KAAK,EAAE,IAAAC,8BAAA,EAAwBF,IAAI,CAACC,KAA7B,EAAoCL,MAApC,EAA4CH,IAAI,oCAChDA,IADgD;UAEnDU,qBAAqB,EAAEV,IAAI,CAACU,qBAAL,GAA6BT;QAFD,EAAhD;MAFX;IAOH;EAXqB,CAApB,CAAN;AAaH,CApBD;;AAsBO,MAAMU,gCAAgC,GAAG,CAAC;EAC7CC;AAD6C,CAAD,KAEA;EAC5CA,GAAG,CAACC,aAAJ,CAAkBC,0BAAlB,CAA6CC,SAA7C,CAAuD,OAAO;IAAEF;EAAF,CAAP,KAA6B;IAChF;AACR;AACA;AACA;IACQ,IAAIA,aAAa,CAACG,QAAd,KAA2B,IAA/B,EAAqC;MACjC;IACH;IACD;AACR;AACA;AACA;;;IACQ,MAAMlB,2BAA2B,CAAC;MAC9BC,oBAAoB,EAAEa,GAAG,CAACK,aADI;MAE9BjB,IAAI,EAAEa,aAAa,CAACb,IAFU;MAG9BC,KAAK,EAAE,CAAC;IAHsB,CAAD,CAAjC;EAKH,CAjBD;EAmBAW,GAAG,CAACC,aAAJ,CAAkBK,0BAAlB,CAA6CH,SAA7C,CAAuD,OAAO;IAAEF;EAAF,CAAP,KAA6B;IAChF;AACR;AACA;AACA;IACQ,MAAMf,2BAA2B,CAAC;MAC9BC,oBAAoB,EAAEa,GAAG,CAACK,aADI;MAE9BjB,IAAI,EAAEa,aAAa,CAACb,IAFU;MAG9BC,KAAK,EAAE;IAHuB,CAAD,CAAjC;EAKH,CAVD;EAYAW,GAAG,CAACC,aAAJ,CAAkBM,0BAAlB,CAA6CJ,SAA7C,CAAuD,OAAO;IAAEF,aAAF;IAAiBO;EAAjB,CAAP,KAAuC;IAC1F;AACR;AACA;AACA;IACQ,IAAIA,QAAQ,CAACJ,QAAT,KAAsBH,aAAa,CAACG,QAAxC,EAAkD;MAC9C,MAAMA,QAAQ,GAAGH,aAAa,CAACG,QAA/B;MACA,MAAMf,KAAK,GAAGe,QAAQ,KAAK,IAAb,GAAoB,CAAC,CAArB,GAAyB,CAAvC;MAEA,MAAMlB,2BAA2B,CAAC;QAC9BC,oBAAoB,EAAEa,GAAG,CAACK,aADI;QAE9BjB,IAAI,EAAEa,aAAa,CAACb,IAFU;QAG9BC;MAH8B,CAAD,CAAjC;IAKH;EACJ,CAfD;AAgBH,CAlDM"}
@@ -0,0 +1,3 @@
1
+ import { LifeCycleHookCallbackParams } from "../../types";
2
+ export declare const updateTotalCommentsCount: ({ apw }: Pick<LifeCycleHookCallbackParams, "apw">) => void;
3
+ export declare const updateLatestCommentId: ({ apw }: Pick<LifeCycleHookCallbackParams, "apw">) => void;
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.updateTotalCommentsCount = exports.updateLatestCommentId = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _utils = require("../utils");
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 updateTotalCommentsCount = ({
19
+ apw
20
+ }) => {
21
+ apw.comment.onAfterCommentDelete.subscribe(async ({
22
+ comment
23
+ }) => {
24
+ const {
25
+ step
26
+ } = comment;
27
+ /**
28
+ * After a "comment" is deleted, decrement the "totalComments" count
29
+ * in the corresponding step of the content review entry.
30
+ */
31
+
32
+ if (step) {
33
+ const {
34
+ id,
35
+ stepId
36
+ } = (0, _utils.extractContentReviewIdAndStep)(step);
37
+ await (0, _utils.updateContentReview)({
38
+ contentReviewMethods: apw.contentReview,
39
+ id,
40
+ getNewContentReviewData: data => {
41
+ return _objectSpread(_objectSpread({}, data), {}, {
42
+ steps: (0, _utils.updateContentReviewStep)(data.steps, stepId, step => _objectSpread(_objectSpread({}, step), {}, {
43
+ totalComments: step.totalComments - 1
44
+ }))
45
+ });
46
+ }
47
+ });
48
+ }
49
+ });
50
+ apw.comment.onAfterCommentCreate.subscribe(async ({
51
+ comment
52
+ }) => {
53
+ /**
54
+ * After a "comment" is created, increment the "totalComments" count
55
+ * of the corresponding step in the content review entry.
56
+ */
57
+ const {
58
+ id,
59
+ stepId
60
+ } = (0, _utils.extractContentReviewIdAndStep)(comment.step);
61
+ await (0, _utils.updateContentReview)({
62
+ contentReviewMethods: apw.contentReview,
63
+ id,
64
+ getNewContentReviewData: data => {
65
+ return _objectSpread(_objectSpread({}, data), {}, {
66
+ steps: (0, _utils.updateContentReviewStep)(data.steps, stepId, step => _objectSpread(_objectSpread({}, step), {}, {
67
+ totalComments: step.totalComments + 1
68
+ }))
69
+ });
70
+ }
71
+ });
72
+ });
73
+ };
74
+
75
+ exports.updateTotalCommentsCount = updateTotalCommentsCount;
76
+
77
+ const updateLatestCommentId = ({
78
+ apw
79
+ }) => {
80
+ apw.comment.onAfterCommentCreate.subscribe(async ({
81
+ comment
82
+ }) => {
83
+ /**
84
+ * After a "comment" is created, update the "latestCommentId" in
85
+ * the corresponding content review entry.
86
+ */
87
+ const {
88
+ id
89
+ } = (0, _utils.extractContentReviewIdAndStep)(comment.step);
90
+ await (0, _utils.updateContentReview)({
91
+ contentReviewMethods: apw.contentReview,
92
+ id,
93
+ getNewContentReviewData: contentReview => {
94
+ return _objectSpread(_objectSpread({}, contentReview), {}, {
95
+ latestCommentId: comment.id
96
+ });
97
+ }
98
+ });
99
+ });
100
+ apw.comment.onAfterCommentUpdate.subscribe(async ({
101
+ comment
102
+ }) => {
103
+ /**
104
+ * After a "comment" is updated, update the "latestCommentId" in
105
+ * the corresponding content review entry.
106
+ */
107
+ const {
108
+ id
109
+ } = (0, _utils.extractContentReviewIdAndStep)(comment.step);
110
+ await (0, _utils.updateContentReview)({
111
+ contentReviewMethods: apw.contentReview,
112
+ id,
113
+ getNewContentReviewData: contentReview => {
114
+ return _objectSpread(_objectSpread({}, contentReview), {}, {
115
+ latestCommentId: comment.id
116
+ });
117
+ }
118
+ });
119
+ });
120
+ apw.comment.onAfterCommentDelete.subscribe(async ({
121
+ comment
122
+ }) => {
123
+ /**
124
+ * After a "comment" is updated, update the "latestCommentId" in
125
+ * the corresponding content review entry.
126
+ */
127
+ const {
128
+ id
129
+ } = (0, _utils.extractContentReviewIdAndStep)(comment.step);
130
+ const contentReview = await (0, _utils.safelyGetContentReview)({
131
+ id,
132
+ contentReviewMethods: apw.contentReview
133
+ });
134
+
135
+ if (contentReview && contentReview.latestCommentId === comment.id) {
136
+ const [[latestComment]] = await apw.comment.list({
137
+ where: {
138
+ changeRequest: {
139
+ id: comment.changeRequest
140
+ }
141
+ },
142
+ sort: ["createdOn_DESC"]
143
+ });
144
+ await (0, _utils.updateContentReview)({
145
+ contentReviewMethods: apw.contentReview,
146
+ id,
147
+ getNewContentReviewData: contentReview => {
148
+ return _objectSpread(_objectSpread({}, contentReview), {}, {
149
+ latestCommentId: latestComment ? latestComment.id : null
150
+ });
151
+ }
152
+ });
153
+ }
154
+ });
155
+ };
156
+
157
+ exports.updateLatestCommentId = updateLatestCommentId;