@strapi/review-workflows 5.12.1 → 5.12.2

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 (327) hide show
  1. package/dist/admin/{chunks/index-DcEF47R4.mjs → assets/balloon.png.js} +3 -1078
  2. package/dist/admin/assets/balloon.png.js.map +1 -0
  3. package/dist/admin/{chunks/index-CzdEqFOm.js → assets/balloon.png.mjs} +2 -1113
  4. package/dist/admin/assets/balloon.png.mjs.map +1 -0
  5. package/dist/admin/assets/purchase-page-illustration-dark.svg.js +6 -0
  6. package/dist/admin/assets/purchase-page-illustration-dark.svg.js.map +1 -0
  7. package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs +4 -0
  8. package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs.map +1 -0
  9. package/dist/admin/{chunks/purchase-review-workflows-4n0KXAeo.mjs → assets/purchase-page-illustration-light.svg.js} +3 -197
  10. package/dist/admin/assets/purchase-page-illustration-light.svg.js.map +1 -0
  11. package/dist/admin/{chunks/purchase-review-workflows-BDLncDcz.js → assets/purchase-page-illustration-light.svg.mjs} +2 -200
  12. package/dist/admin/assets/purchase-page-illustration-light.svg.mjs.map +1 -0
  13. package/dist/admin/components/LimitsModal.js +122 -0
  14. package/dist/admin/components/LimitsModal.js.map +1 -0
  15. package/dist/admin/components/LimitsModal.mjs +120 -0
  16. package/dist/admin/components/LimitsModal.mjs.map +1 -0
  17. package/dist/admin/constants.js +18 -0
  18. package/dist/admin/constants.js.map +1 -0
  19. package/dist/admin/constants.mjs +12 -0
  20. package/dist/admin/constants.mjs.map +1 -0
  21. package/dist/admin/index.js +87 -13
  22. package/dist/admin/index.js.map +1 -1
  23. package/dist/admin/index.mjs +88 -12
  24. package/dist/admin/index.mjs.map +1 -1
  25. package/dist/admin/modules/hooks.js +8 -0
  26. package/dist/admin/modules/hooks.js.map +1 -0
  27. package/dist/admin/modules/hooks.mjs +6 -0
  28. package/dist/admin/modules/hooks.mjs.map +1 -0
  29. package/dist/admin/{chunks/router-ChVwf8TN.js → router.js} +3 -3
  30. package/dist/admin/router.js.map +1 -0
  31. package/dist/admin/{chunks/router-D-YCUzYy.mjs → router.mjs} +3 -3
  32. package/dist/admin/router.mjs.map +1 -0
  33. package/dist/admin/routes/content-manager/model/components/TableColumns.js +44 -0
  34. package/dist/admin/routes/content-manager/model/components/TableColumns.js.map +1 -0
  35. package/dist/admin/routes/content-manager/model/components/TableColumns.mjs +41 -0
  36. package/dist/admin/routes/content-manager/model/components/TableColumns.mjs.map +1 -0
  37. package/dist/admin/routes/content-manager/model/constants.js +60 -0
  38. package/dist/admin/routes/content-manager/model/constants.js.map +1 -0
  39. package/dist/admin/routes/content-manager/model/constants.mjs +58 -0
  40. package/dist/admin/routes/content-manager/model/constants.mjs.map +1 -0
  41. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.js +169 -0
  42. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.js.map +1 -0
  43. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.mjs +148 -0
  44. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.mjs.map +1 -0
  45. package/dist/admin/routes/content-manager/model/id/components/Header.js +31 -0
  46. package/dist/admin/routes/content-manager/model/id/components/Header.js.map +1 -0
  47. package/dist/admin/routes/content-manager/model/id/components/Header.mjs +29 -0
  48. package/dist/admin/routes/content-manager/model/id/components/Header.mjs.map +1 -0
  49. package/dist/admin/routes/content-manager/model/id/components/Panel.js +39 -0
  50. package/dist/admin/routes/content-manager/model/id/components/Panel.js.map +1 -0
  51. package/dist/admin/routes/content-manager/model/id/components/Panel.mjs +37 -0
  52. package/dist/admin/routes/content-manager/model/id/components/Panel.mjs.map +1 -0
  53. package/dist/admin/routes/content-manager/model/id/components/StageSelect.js +329 -0
  54. package/dist/admin/routes/content-manager/model/id/components/StageSelect.js.map +1 -0
  55. package/dist/admin/routes/content-manager/model/id/components/StageSelect.mjs +308 -0
  56. package/dist/admin/routes/content-manager/model/id/components/StageSelect.mjs.map +1 -0
  57. package/dist/admin/routes/content-manager/model/id/components/constants.js +8 -0
  58. package/dist/admin/routes/content-manager/model/id/components/constants.js.map +1 -0
  59. package/dist/admin/routes/content-manager/model/id/components/constants.mjs +5 -0
  60. package/dist/admin/routes/content-manager/model/id/components/constants.mjs.map +1 -0
  61. package/dist/admin/routes/purchase-review-workflows.js +194 -0
  62. package/dist/admin/routes/purchase-review-workflows.js.map +1 -0
  63. package/dist/admin/routes/purchase-review-workflows.mjs +192 -0
  64. package/dist/admin/routes/purchase-review-workflows.mjs.map +1 -0
  65. package/dist/admin/routes/settings/components/AddStage.js +51 -0
  66. package/dist/admin/routes/settings/components/AddStage.js.map +1 -0
  67. package/dist/admin/routes/settings/components/AddStage.mjs +49 -0
  68. package/dist/admin/routes/settings/components/AddStage.mjs.map +1 -0
  69. package/dist/admin/routes/settings/components/Layout.js +86 -0
  70. package/dist/admin/routes/settings/components/Layout.js.map +1 -0
  71. package/dist/admin/routes/settings/components/Layout.mjs +82 -0
  72. package/dist/admin/routes/settings/components/Layout.mjs.map +1 -0
  73. package/dist/admin/routes/settings/components/StageDragPreview.js +40 -0
  74. package/dist/admin/routes/settings/components/StageDragPreview.js.map +1 -0
  75. package/dist/admin/routes/settings/components/StageDragPreview.mjs +38 -0
  76. package/dist/admin/routes/settings/components/StageDragPreview.mjs.map +1 -0
  77. package/dist/admin/routes/settings/components/Stages.js +593 -0
  78. package/dist/admin/routes/settings/components/Stages.js.map +1 -0
  79. package/dist/admin/routes/settings/components/Stages.mjs +572 -0
  80. package/dist/admin/routes/settings/components/Stages.mjs.map +1 -0
  81. package/dist/admin/routes/settings/components/WorkflowAttributes.js +203 -0
  82. package/dist/admin/routes/settings/components/WorkflowAttributes.js.map +1 -0
  83. package/dist/admin/routes/settings/components/WorkflowAttributes.mjs +201 -0
  84. package/dist/admin/routes/settings/components/WorkflowAttributes.mjs.map +1 -0
  85. package/dist/admin/routes/settings/constants.js +8 -0
  86. package/dist/admin/routes/settings/constants.js.map +1 -0
  87. package/dist/admin/routes/settings/constants.mjs +6 -0
  88. package/dist/admin/routes/settings/constants.mjs.map +1 -0
  89. package/dist/admin/routes/settings/hooks/useDragAndDrop.js +193 -0
  90. package/dist/admin/routes/settings/hooks/useDragAndDrop.js.map +1 -0
  91. package/dist/admin/routes/settings/hooks/useDragAndDrop.mjs +170 -0
  92. package/dist/admin/routes/settings/hooks/useDragAndDrop.mjs.map +1 -0
  93. package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.js +94 -0
  94. package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.js.map +1 -0
  95. package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.mjs +73 -0
  96. package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.mjs.map +1 -0
  97. package/dist/admin/{chunks/Layout-C4ri_ldC.js → routes/settings/hooks/useReviewWorkflows.js} +6 -121
  98. package/dist/admin/routes/settings/hooks/useReviewWorkflows.js.map +1 -0
  99. package/dist/admin/{chunks/Layout-CF497D6H.mjs → routes/settings/hooks/useReviewWorkflows.mjs} +4 -115
  100. package/dist/admin/routes/settings/hooks/useReviewWorkflows.mjs.map +1 -0
  101. package/dist/admin/routes/settings/id.js +404 -0
  102. package/dist/admin/routes/settings/id.js.map +1 -0
  103. package/dist/admin/routes/settings/id.mjs +382 -0
  104. package/dist/admin/routes/settings/id.mjs.map +1 -0
  105. package/dist/admin/{chunks/index-CCx4kT-t.js → routes/settings/index.js} +15 -15
  106. package/dist/admin/routes/settings/index.js.map +1 -0
  107. package/dist/admin/{chunks/index-iChY7MsG.mjs → routes/settings/index.mjs} +7 -7
  108. package/dist/admin/routes/settings/index.mjs.map +1 -0
  109. package/dist/admin/services/admin.js +23 -0
  110. package/dist/admin/services/admin.js.map +1 -0
  111. package/dist/admin/services/admin.mjs +21 -0
  112. package/dist/admin/services/admin.mjs.map +1 -0
  113. package/dist/admin/services/api.js +15 -0
  114. package/dist/admin/services/api.js.map +1 -0
  115. package/dist/admin/services/api.mjs +13 -0
  116. package/dist/admin/services/api.mjs.map +1 -0
  117. package/dist/admin/services/content-manager.js +101 -0
  118. package/dist/admin/services/content-manager.js.map +1 -0
  119. package/dist/admin/services/content-manager.mjs +96 -0
  120. package/dist/admin/services/content-manager.mjs.map +1 -0
  121. package/dist/admin/services/settings.js +123 -0
  122. package/dist/admin/services/settings.js.map +1 -0
  123. package/dist/admin/services/settings.mjs +118 -0
  124. package/dist/admin/services/settings.mjs.map +1 -0
  125. package/dist/admin/{chunks/en-BNGiWajd.js → translations/en.json.js} +2 -2
  126. package/dist/admin/translations/en.json.js.map +1 -0
  127. package/dist/admin/{chunks/en-BrZXFtVv.mjs → translations/en.json.mjs} +1 -1
  128. package/dist/admin/translations/en.json.mjs.map +1 -0
  129. package/dist/admin/{chunks/uk-CbRUr1I7.js → translations/uk.json.js} +2 -2
  130. package/dist/admin/translations/uk.json.js.map +1 -0
  131. package/dist/admin/{chunks/uk-DLlzEBUF.mjs → translations/uk.json.mjs} +1 -1
  132. package/dist/admin/translations/uk.json.mjs.map +1 -0
  133. package/dist/admin/utils/api.js +22 -0
  134. package/dist/admin/utils/api.js.map +1 -0
  135. package/dist/admin/utils/api.mjs +19 -0
  136. package/dist/admin/utils/api.mjs.map +1 -0
  137. package/dist/admin/utils/cm-hooks.js +23 -0
  138. package/dist/admin/utils/cm-hooks.js.map +1 -0
  139. package/dist/admin/utils/cm-hooks.mjs +21 -0
  140. package/dist/admin/utils/cm-hooks.mjs.map +1 -0
  141. package/dist/admin/utils/colors.js +50 -0
  142. package/dist/admin/utils/colors.js.map +1 -0
  143. package/dist/admin/utils/colors.mjs +47 -0
  144. package/dist/admin/utils/colors.mjs.map +1 -0
  145. package/dist/admin/utils/translations.js +11 -0
  146. package/dist/admin/utils/translations.js.map +1 -0
  147. package/dist/admin/utils/translations.mjs +9 -0
  148. package/dist/admin/utils/translations.mjs.map +1 -0
  149. package/dist/admin/utils/users.js +17 -0
  150. package/dist/admin/utils/users.js.map +1 -0
  151. package/dist/admin/utils/users.mjs +15 -0
  152. package/dist/admin/utils/users.mjs.map +1 -0
  153. package/dist/server/bootstrap.js +54 -0
  154. package/dist/server/bootstrap.js.map +1 -0
  155. package/dist/server/bootstrap.mjs +52 -0
  156. package/dist/server/bootstrap.mjs.map +1 -0
  157. package/dist/server/config/actions.js +47 -0
  158. package/dist/server/config/actions.js.map +1 -0
  159. package/dist/server/config/actions.mjs +45 -0
  160. package/dist/server/config/actions.mjs.map +1 -0
  161. package/dist/server/constants/default-stages.json.js +23 -0
  162. package/dist/server/constants/default-stages.json.js.map +1 -0
  163. package/dist/server/constants/default-stages.json.mjs +21 -0
  164. package/dist/server/constants/default-stages.json.mjs.map +1 -0
  165. package/dist/server/constants/default-workflow.json.js +12 -0
  166. package/dist/server/constants/default-workflow.json.js.map +1 -0
  167. package/dist/server/constants/default-workflow.json.mjs +7 -0
  168. package/dist/server/constants/default-workflow.json.mjs.map +1 -0
  169. package/dist/server/constants/webhook-events.js +12 -0
  170. package/dist/server/constants/webhook-events.js.map +1 -0
  171. package/dist/server/constants/webhook-events.mjs +7 -0
  172. package/dist/server/constants/webhook-events.mjs.map +1 -0
  173. package/dist/server/constants/workflows.js +53 -0
  174. package/dist/server/constants/workflows.js.map +1 -0
  175. package/dist/server/constants/workflows.mjs +42 -0
  176. package/dist/server/constants/workflows.mjs.map +1 -0
  177. package/dist/server/content-types/index.js +12 -0
  178. package/dist/server/content-types/index.js.map +1 -0
  179. package/dist/server/content-types/index.mjs +10 -0
  180. package/dist/server/content-types/index.mjs.map +1 -0
  181. package/dist/server/content-types/workflow/index.js +50 -0
  182. package/dist/server/content-types/workflow/index.js.map +1 -0
  183. package/dist/server/content-types/workflow/index.mjs +48 -0
  184. package/dist/server/content-types/workflow/index.mjs.map +1 -0
  185. package/dist/server/content-types/workflow-stage/index.js +54 -0
  186. package/dist/server/content-types/workflow-stage/index.js.map +1 -0
  187. package/dist/server/content-types/workflow-stage/index.mjs +52 -0
  188. package/dist/server/content-types/workflow-stage/index.mjs.map +1 -0
  189. package/dist/server/controllers/assignees.js +57 -0
  190. package/dist/server/controllers/assignees.js.map +1 -0
  191. package/dist/server/controllers/assignees.mjs +55 -0
  192. package/dist/server/controllers/assignees.mjs.map +1 -0
  193. package/dist/server/controllers/index.js +14 -0
  194. package/dist/server/controllers/index.js.map +1 -0
  195. package/dist/server/controllers/index.mjs +12 -0
  196. package/dist/server/controllers/index.mjs.map +1 -0
  197. package/dist/server/controllers/stages.js +167 -0
  198. package/dist/server/controllers/stages.js.map +1 -0
  199. package/dist/server/controllers/stages.mjs +165 -0
  200. package/dist/server/controllers/stages.mjs.map +1 -0
  201. package/dist/server/controllers/workflows.js +136 -0
  202. package/dist/server/controllers/workflows.js.map +1 -0
  203. package/dist/server/controllers/workflows.mjs +134 -0
  204. package/dist/server/controllers/workflows.mjs.map +1 -0
  205. package/dist/server/destroy.js +6 -0
  206. package/dist/server/destroy.js.map +1 -0
  207. package/dist/server/destroy.mjs +4 -0
  208. package/dist/server/destroy.mjs.map +1 -0
  209. package/dist/server/index.js +12 -2333
  210. package/dist/server/index.js.map +1 -1
  211. package/dist/server/index.mjs +7 -2328
  212. package/dist/server/index.mjs.map +1 -1
  213. package/dist/server/middlewares/review-workflows.js +42 -0
  214. package/dist/server/middlewares/review-workflows.js.map +1 -0
  215. package/dist/server/middlewares/review-workflows.mjs +37 -0
  216. package/dist/server/middlewares/review-workflows.mjs.map +1 -0
  217. package/dist/server/migrations/handle-deleted-ct-in-workflows.js +40 -0
  218. package/dist/server/migrations/handle-deleted-ct-in-workflows.js.map +1 -0
  219. package/dist/server/migrations/handle-deleted-ct-in-workflows.mjs +38 -0
  220. package/dist/server/migrations/handle-deleted-ct-in-workflows.mjs.map +1 -0
  221. package/dist/server/migrations/multiple-workflows.js +41 -0
  222. package/dist/server/migrations/multiple-workflows.js.map +1 -0
  223. package/dist/server/migrations/multiple-workflows.mjs +39 -0
  224. package/dist/server/migrations/multiple-workflows.mjs.map +1 -0
  225. package/dist/server/migrations/set-stages-default-color.js +22 -0
  226. package/dist/server/migrations/set-stages-default-color.js.map +1 -0
  227. package/dist/server/migrations/set-stages-default-color.mjs +20 -0
  228. package/dist/server/migrations/set-stages-default-color.mjs.map +1 -0
  229. package/dist/server/migrations/set-stages-roles.js +56 -0
  230. package/dist/server/migrations/set-stages-roles.js.map +1 -0
  231. package/dist/server/migrations/set-stages-roles.mjs +54 -0
  232. package/dist/server/migrations/set-stages-roles.mjs.map +1 -0
  233. package/dist/server/migrations/set-workflow-default-name.js +29 -0
  234. package/dist/server/migrations/set-workflow-default-name.js.map +1 -0
  235. package/dist/server/migrations/set-workflow-default-name.mjs +27 -0
  236. package/dist/server/migrations/set-workflow-default-name.mjs.map +1 -0
  237. package/dist/server/migrations/shorten-stage-attribute.js +45 -0
  238. package/dist/server/migrations/shorten-stage-attribute.js.map +1 -0
  239. package/dist/server/migrations/shorten-stage-attribute.mjs +43 -0
  240. package/dist/server/migrations/shorten-stage-attribute.mjs.map +1 -0
  241. package/dist/server/register.js +116 -0
  242. package/dist/server/register.js.map +1 -0
  243. package/dist/server/register.mjs +114 -0
  244. package/dist/server/register.mjs.map +1 -0
  245. package/dist/server/routes/index.js +10 -0
  246. package/dist/server/routes/index.js.map +1 -0
  247. package/dist/server/routes/index.mjs +8 -0
  248. package/dist/server/routes/index.mjs.map +1 -0
  249. package/dist/server/routes/review-workflows.js +186 -0
  250. package/dist/server/routes/review-workflows.js.map +1 -0
  251. package/dist/server/routes/review-workflows.mjs +184 -0
  252. package/dist/server/routes/review-workflows.mjs.map +1 -0
  253. package/dist/server/routes/utils.js +11 -0
  254. package/dist/server/routes/utils.js.map +1 -0
  255. package/dist/server/routes/utils.mjs +9 -0
  256. package/dist/server/routes/utils.mjs.map +1 -0
  257. package/dist/server/services/assignees.js +68 -0
  258. package/dist/server/services/assignees.js.map +1 -0
  259. package/dist/server/services/assignees.mjs +66 -0
  260. package/dist/server/services/assignees.mjs.map +1 -0
  261. package/dist/server/services/document-service-middleware.js +130 -0
  262. package/dist/server/services/document-service-middleware.js.map +1 -0
  263. package/dist/server/services/document-service-middleware.mjs +128 -0
  264. package/dist/server/services/document-service-middleware.mjs.map +1 -0
  265. package/dist/server/services/index.js +24 -0
  266. package/dist/server/services/index.js.map +1 -0
  267. package/dist/server/services/index.mjs +22 -0
  268. package/dist/server/services/index.mjs.map +1 -0
  269. package/dist/server/services/metrics/index.js +67 -0
  270. package/dist/server/services/metrics/index.js.map +1 -0
  271. package/dist/server/services/metrics/index.mjs +55 -0
  272. package/dist/server/services/metrics/index.mjs.map +1 -0
  273. package/dist/server/services/metrics/weekly-metrics.js +84 -0
  274. package/dist/server/services/metrics/weekly-metrics.js.map +1 -0
  275. package/dist/server/services/metrics/weekly-metrics.mjs +82 -0
  276. package/dist/server/services/metrics/weekly-metrics.mjs.map +1 -0
  277. package/dist/server/services/stage-permissions.js +59 -0
  278. package/dist/server/services/stage-permissions.js.map +1 -0
  279. package/dist/server/services/stage-permissions.mjs +57 -0
  280. package/dist/server/services/stage-permissions.mjs.map +1 -0
  281. package/dist/server/services/stages.js +353 -0
  282. package/dist/server/services/stages.js.map +1 -0
  283. package/dist/server/services/stages.mjs +351 -0
  284. package/dist/server/services/stages.mjs.map +1 -0
  285. package/dist/server/services/validation.js +69 -0
  286. package/dist/server/services/validation.js.map +1 -0
  287. package/dist/server/services/validation.mjs +67 -0
  288. package/dist/server/services/validation.mjs.map +1 -0
  289. package/dist/server/services/workflow-content-types.js +90 -0
  290. package/dist/server/services/workflow-content-types.js.map +1 -0
  291. package/dist/server/services/workflow-content-types.mjs +88 -0
  292. package/dist/server/services/workflow-content-types.mjs.map +1 -0
  293. package/dist/server/services/workflows.js +279 -0
  294. package/dist/server/services/workflows.js.map +1 -0
  295. package/dist/server/services/workflows.mjs +277 -0
  296. package/dist/server/services/workflows.mjs.map +1 -0
  297. package/dist/server/utils/index.js +16 -0
  298. package/dist/server/utils/index.js.map +1 -0
  299. package/dist/server/utils/index.mjs +13 -0
  300. package/dist/server/utils/index.mjs.map +1 -0
  301. package/dist/server/utils/review-workflows.js +36 -0
  302. package/dist/server/utils/review-workflows.js.map +1 -0
  303. package/dist/server/utils/review-workflows.mjs +30 -0
  304. package/dist/server/utils/review-workflows.mjs.map +1 -0
  305. package/dist/server/validation/review-workflows.js +71 -0
  306. package/dist/server/validation/review-workflows.js.map +1 -0
  307. package/dist/server/validation/review-workflows.mjs +65 -0
  308. package/dist/server/validation/review-workflows.mjs.map +1 -0
  309. package/package.json +5 -5
  310. package/dist/admin/chunks/Layout-C4ri_ldC.js.map +0 -1
  311. package/dist/admin/chunks/Layout-CF497D6H.mjs.map +0 -1
  312. package/dist/admin/chunks/en-BNGiWajd.js.map +0 -1
  313. package/dist/admin/chunks/en-BrZXFtVv.mjs.map +0 -1
  314. package/dist/admin/chunks/id-DVOtqJqn.js +0 -1442
  315. package/dist/admin/chunks/id-DVOtqJqn.js.map +0 -1
  316. package/dist/admin/chunks/id-QD0V9dME.mjs +0 -1420
  317. package/dist/admin/chunks/id-QD0V9dME.mjs.map +0 -1
  318. package/dist/admin/chunks/index-CCx4kT-t.js.map +0 -1
  319. package/dist/admin/chunks/index-CzdEqFOm.js.map +0 -1
  320. package/dist/admin/chunks/index-DcEF47R4.mjs.map +0 -1
  321. package/dist/admin/chunks/index-iChY7MsG.mjs.map +0 -1
  322. package/dist/admin/chunks/purchase-review-workflows-4n0KXAeo.mjs.map +0 -1
  323. package/dist/admin/chunks/purchase-review-workflows-BDLncDcz.js.map +0 -1
  324. package/dist/admin/chunks/router-ChVwf8TN.js.map +0 -1
  325. package/dist/admin/chunks/router-D-YCUzYy.mjs.map +0 -1
  326. package/dist/admin/chunks/uk-CbRUr1I7.js.map +0 -1
  327. package/dist/admin/chunks/uk-DLlzEBUF.mjs.map +0 -1
@@ -0,0 +1,90 @@
1
+ 'use strict';
2
+
3
+ var utils = require('@strapi/utils');
4
+ var fp = require('lodash/fp');
5
+ var index = require('../utils/index.js');
6
+ var workflows = require('../constants/workflows.js');
7
+
8
+ var workflowsContentTypesFactory = (({ strapi })=>{
9
+ const contentManagerContentTypeService = strapi.plugin('content-manager').service('content-types');
10
+ const stagesService = index.getService('stages', {
11
+ strapi
12
+ });
13
+ const updateContentTypeConfig = async (uid, reviewWorkflowOption)=>{
14
+ // Merge options in the configuration as the configuration service use a destructuration merge which doesn't include nested objects
15
+ const modelConfig = await contentManagerContentTypeService.findConfiguration(uid);
16
+ await contentManagerContentTypeService.updateConfiguration({
17
+ uid
18
+ }, {
19
+ options: fp.merge(modelConfig.options, {
20
+ reviewWorkflows: reviewWorkflowOption
21
+ })
22
+ });
23
+ };
24
+ return {
25
+ /**
26
+ * Migrates entities stages. Used when a content type is assigned to a workflow.
27
+ * @param {*} options
28
+ * @param {Array<string>} options.srcContentTypes - The content types assigned to the previous workflow
29
+ * @param {Array<string>} options.destContentTypes - The content types assigned to the new workflow
30
+ * @param {Workflow.Stage} options.stageId - The new stage to assign the entities to
31
+ */ async migrate ({ srcContentTypes = [], destContentTypes, stageId }) {
32
+ const workflowsService = index.getService('workflows', {
33
+ strapi
34
+ });
35
+ const { created, deleted } = diffContentTypes(srcContentTypes, destContentTypes);
36
+ await utils.async.map(created, async (uid)=>{
37
+ // Content Types should only be assigned to one workflow
38
+ // However, edge cases can happen, and this handles them
39
+ const srcWorkflows = await workflowsService._getAssignedWorkflows(uid, {});
40
+ if (srcWorkflows.length) {
41
+ // Updates all existing entities stages links to the new stage
42
+ await stagesService.updateEntitiesStage(uid, {
43
+ toStageId: stageId
44
+ });
45
+ // Transfer content types from the previous workflow(s)
46
+ await utils.async.map(srcWorkflows, (srcWorkflow)=>this.transferContentTypes(srcWorkflow, uid));
47
+ }
48
+ await updateContentTypeConfig(uid, true);
49
+ // Create new stages links to the new stage
50
+ return stagesService.updateEntitiesStage(uid, {
51
+ fromStageId: null,
52
+ toStageId: stageId
53
+ });
54
+ }, // transferContentTypes can cause race conditions if called in parallel when updating the same workflow
55
+ {
56
+ concurrency: 1
57
+ });
58
+ await utils.async.map(deleted, async (uid)=>{
59
+ await updateContentTypeConfig(uid, false);
60
+ await stagesService.deleteAllEntitiesStage(uid, {});
61
+ });
62
+ },
63
+ /**
64
+ * Filters the content types assigned to a workflow
65
+ * @param {Workflow} srcWorkflow - The workflow to transfer from
66
+ * @param {string} uid - The content type uid
67
+ */ async transferContentTypes (srcWorkflow, uid) {
68
+ // Update assignedContentTypes of the previous workflow
69
+ await strapi.db.query(workflows.WORKFLOW_MODEL_UID).update({
70
+ where: {
71
+ id: srcWorkflow.id
72
+ },
73
+ data: {
74
+ contentTypes: srcWorkflow.contentTypes.filter((contentType)=>contentType !== uid)
75
+ }
76
+ });
77
+ }
78
+ };
79
+ });
80
+ const diffContentTypes = (srcContentTypes, destContentTypes)=>{
81
+ const created = fp.difference(destContentTypes, srcContentTypes);
82
+ const deleted = fp.difference(srcContentTypes, destContentTypes);
83
+ return {
84
+ created,
85
+ deleted
86
+ };
87
+ };
88
+
89
+ module.exports = workflowsContentTypesFactory;
90
+ //# sourceMappingURL=workflow-content-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-content-types.js","sources":["../../../server/src/services/workflow-content-types.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { async } from '@strapi/utils';\nimport { difference, merge } from 'lodash/fp';\nimport { getService } from '../utils';\nimport { WORKFLOW_MODEL_UID } from '../constants/workflows';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const contentManagerContentTypeService = strapi\n .plugin('content-manager')\n .service('content-types');\n const stagesService = getService('stages', { strapi });\n\n const updateContentTypeConfig = async (uid: any, reviewWorkflowOption: any) => {\n // Merge options in the configuration as the configuration service use a destructuration merge which doesn't include nested objects\n const modelConfig = await contentManagerContentTypeService.findConfiguration(uid);\n\n await contentManagerContentTypeService.updateConfiguration(\n { uid },\n { options: merge(modelConfig.options, { reviewWorkflows: reviewWorkflowOption }) }\n );\n };\n\n return {\n /**\n * Migrates entities stages. Used when a content type is assigned to a workflow.\n * @param {*} options\n * @param {Array<string>} options.srcContentTypes - The content types assigned to the previous workflow\n * @param {Array<string>} options.destContentTypes - The content types assigned to the new workflow\n * @param {Workflow.Stage} options.stageId - The new stage to assign the entities to\n */\n async migrate({ srcContentTypes = [], destContentTypes, stageId }: any) {\n const workflowsService = getService('workflows', { strapi });\n const { created, deleted } = diffContentTypes(srcContentTypes, destContentTypes);\n\n await async.map(\n created,\n async (uid: any) => {\n // Content Types should only be assigned to one workflow\n // However, edge cases can happen, and this handles them\n const srcWorkflows = await workflowsService._getAssignedWorkflows(uid, {});\n\n if (srcWorkflows.length) {\n // Updates all existing entities stages links to the new stage\n await stagesService.updateEntitiesStage(uid, { toStageId: stageId });\n // Transfer content types from the previous workflow(s)\n await async.map(srcWorkflows, (srcWorkflow: any) =>\n this.transferContentTypes(srcWorkflow, uid)\n );\n }\n await updateContentTypeConfig(uid, true);\n\n // Create new stages links to the new stage\n return stagesService.updateEntitiesStage(uid, {\n fromStageId: null,\n toStageId: stageId,\n });\n },\n // transferContentTypes can cause race conditions if called in parallel when updating the same workflow\n { concurrency: 1 }\n );\n\n await async.map(deleted, async (uid: any) => {\n await updateContentTypeConfig(uid, false);\n await stagesService.deleteAllEntitiesStage(uid, {});\n });\n },\n\n /**\n * Filters the content types assigned to a workflow\n * @param {Workflow} srcWorkflow - The workflow to transfer from\n * @param {string} uid - The content type uid\n */\n async transferContentTypes(srcWorkflow: any, uid: any) {\n // Update assignedContentTypes of the previous workflow\n await strapi.db.query(WORKFLOW_MODEL_UID).update({\n where: {\n id: srcWorkflow.id,\n },\n data: {\n contentTypes: srcWorkflow.contentTypes.filter((contentType: any) => contentType !== uid),\n },\n });\n },\n };\n};\n\nconst diffContentTypes = (srcContentTypes: any, destContentTypes: any) => {\n const created = difference(destContentTypes, srcContentTypes);\n const deleted = difference(srcContentTypes, destContentTypes);\n return { created, deleted };\n};\n"],"names":["strapi","contentManagerContentTypeService","plugin","service","stagesService","getService","updateContentTypeConfig","uid","reviewWorkflowOption","modelConfig","findConfiguration","updateConfiguration","options","merge","reviewWorkflows","migrate","srcContentTypes","destContentTypes","stageId","workflowsService","created","deleted","diffContentTypes","async","map","srcWorkflows","_getAssignedWorkflows","length","updateEntitiesStage","toStageId","srcWorkflow","transferContentTypes","fromStageId","concurrency","deleteAllEntitiesStage","db","query","WORKFLOW_MODEL_UID","update","where","id","data","contentTypes","filter","contentType","difference"],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import { async } from '@strapi/utils';
2
+ import { merge, difference } from 'lodash/fp';
3
+ import { getService } from '../utils/index.mjs';
4
+ import { WORKFLOW_MODEL_UID } from '../constants/workflows.mjs';
5
+
6
+ var workflowsContentTypesFactory = (({ strapi })=>{
7
+ const contentManagerContentTypeService = strapi.plugin('content-manager').service('content-types');
8
+ const stagesService = getService('stages', {
9
+ strapi
10
+ });
11
+ const updateContentTypeConfig = async (uid, reviewWorkflowOption)=>{
12
+ // Merge options in the configuration as the configuration service use a destructuration merge which doesn't include nested objects
13
+ const modelConfig = await contentManagerContentTypeService.findConfiguration(uid);
14
+ await contentManagerContentTypeService.updateConfiguration({
15
+ uid
16
+ }, {
17
+ options: merge(modelConfig.options, {
18
+ reviewWorkflows: reviewWorkflowOption
19
+ })
20
+ });
21
+ };
22
+ return {
23
+ /**
24
+ * Migrates entities stages. Used when a content type is assigned to a workflow.
25
+ * @param {*} options
26
+ * @param {Array<string>} options.srcContentTypes - The content types assigned to the previous workflow
27
+ * @param {Array<string>} options.destContentTypes - The content types assigned to the new workflow
28
+ * @param {Workflow.Stage} options.stageId - The new stage to assign the entities to
29
+ */ async migrate ({ srcContentTypes = [], destContentTypes, stageId }) {
30
+ const workflowsService = getService('workflows', {
31
+ strapi
32
+ });
33
+ const { created, deleted } = diffContentTypes(srcContentTypes, destContentTypes);
34
+ await async.map(created, async (uid)=>{
35
+ // Content Types should only be assigned to one workflow
36
+ // However, edge cases can happen, and this handles them
37
+ const srcWorkflows = await workflowsService._getAssignedWorkflows(uid, {});
38
+ if (srcWorkflows.length) {
39
+ // Updates all existing entities stages links to the new stage
40
+ await stagesService.updateEntitiesStage(uid, {
41
+ toStageId: stageId
42
+ });
43
+ // Transfer content types from the previous workflow(s)
44
+ await async.map(srcWorkflows, (srcWorkflow)=>this.transferContentTypes(srcWorkflow, uid));
45
+ }
46
+ await updateContentTypeConfig(uid, true);
47
+ // Create new stages links to the new stage
48
+ return stagesService.updateEntitiesStage(uid, {
49
+ fromStageId: null,
50
+ toStageId: stageId
51
+ });
52
+ }, // transferContentTypes can cause race conditions if called in parallel when updating the same workflow
53
+ {
54
+ concurrency: 1
55
+ });
56
+ await async.map(deleted, async (uid)=>{
57
+ await updateContentTypeConfig(uid, false);
58
+ await stagesService.deleteAllEntitiesStage(uid, {});
59
+ });
60
+ },
61
+ /**
62
+ * Filters the content types assigned to a workflow
63
+ * @param {Workflow} srcWorkflow - The workflow to transfer from
64
+ * @param {string} uid - The content type uid
65
+ */ async transferContentTypes (srcWorkflow, uid) {
66
+ // Update assignedContentTypes of the previous workflow
67
+ await strapi.db.query(WORKFLOW_MODEL_UID).update({
68
+ where: {
69
+ id: srcWorkflow.id
70
+ },
71
+ data: {
72
+ contentTypes: srcWorkflow.contentTypes.filter((contentType)=>contentType !== uid)
73
+ }
74
+ });
75
+ }
76
+ };
77
+ });
78
+ const diffContentTypes = (srcContentTypes, destContentTypes)=>{
79
+ const created = difference(destContentTypes, srcContentTypes);
80
+ const deleted = difference(srcContentTypes, destContentTypes);
81
+ return {
82
+ created,
83
+ deleted
84
+ };
85
+ };
86
+
87
+ export { workflowsContentTypesFactory as default };
88
+ //# sourceMappingURL=workflow-content-types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-content-types.mjs","sources":["../../../server/src/services/workflow-content-types.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { async } from '@strapi/utils';\nimport { difference, merge } from 'lodash/fp';\nimport { getService } from '../utils';\nimport { WORKFLOW_MODEL_UID } from '../constants/workflows';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const contentManagerContentTypeService = strapi\n .plugin('content-manager')\n .service('content-types');\n const stagesService = getService('stages', { strapi });\n\n const updateContentTypeConfig = async (uid: any, reviewWorkflowOption: any) => {\n // Merge options in the configuration as the configuration service use a destructuration merge which doesn't include nested objects\n const modelConfig = await contentManagerContentTypeService.findConfiguration(uid);\n\n await contentManagerContentTypeService.updateConfiguration(\n { uid },\n { options: merge(modelConfig.options, { reviewWorkflows: reviewWorkflowOption }) }\n );\n };\n\n return {\n /**\n * Migrates entities stages. Used when a content type is assigned to a workflow.\n * @param {*} options\n * @param {Array<string>} options.srcContentTypes - The content types assigned to the previous workflow\n * @param {Array<string>} options.destContentTypes - The content types assigned to the new workflow\n * @param {Workflow.Stage} options.stageId - The new stage to assign the entities to\n */\n async migrate({ srcContentTypes = [], destContentTypes, stageId }: any) {\n const workflowsService = getService('workflows', { strapi });\n const { created, deleted } = diffContentTypes(srcContentTypes, destContentTypes);\n\n await async.map(\n created,\n async (uid: any) => {\n // Content Types should only be assigned to one workflow\n // However, edge cases can happen, and this handles them\n const srcWorkflows = await workflowsService._getAssignedWorkflows(uid, {});\n\n if (srcWorkflows.length) {\n // Updates all existing entities stages links to the new stage\n await stagesService.updateEntitiesStage(uid, { toStageId: stageId });\n // Transfer content types from the previous workflow(s)\n await async.map(srcWorkflows, (srcWorkflow: any) =>\n this.transferContentTypes(srcWorkflow, uid)\n );\n }\n await updateContentTypeConfig(uid, true);\n\n // Create new stages links to the new stage\n return stagesService.updateEntitiesStage(uid, {\n fromStageId: null,\n toStageId: stageId,\n });\n },\n // transferContentTypes can cause race conditions if called in parallel when updating the same workflow\n { concurrency: 1 }\n );\n\n await async.map(deleted, async (uid: any) => {\n await updateContentTypeConfig(uid, false);\n await stagesService.deleteAllEntitiesStage(uid, {});\n });\n },\n\n /**\n * Filters the content types assigned to a workflow\n * @param {Workflow} srcWorkflow - The workflow to transfer from\n * @param {string} uid - The content type uid\n */\n async transferContentTypes(srcWorkflow: any, uid: any) {\n // Update assignedContentTypes of the previous workflow\n await strapi.db.query(WORKFLOW_MODEL_UID).update({\n where: {\n id: srcWorkflow.id,\n },\n data: {\n contentTypes: srcWorkflow.contentTypes.filter((contentType: any) => contentType !== uid),\n },\n });\n },\n };\n};\n\nconst diffContentTypes = (srcContentTypes: any, destContentTypes: any) => {\n const created = difference(destContentTypes, srcContentTypes);\n const deleted = difference(srcContentTypes, destContentTypes);\n return { created, deleted };\n};\n"],"names":["strapi","contentManagerContentTypeService","plugin","service","stagesService","getService","updateContentTypeConfig","uid","reviewWorkflowOption","modelConfig","findConfiguration","updateConfiguration","options","merge","reviewWorkflows","migrate","srcContentTypes","destContentTypes","stageId","workflowsService","created","deleted","diffContentTypes","async","map","srcWorkflows","_getAssignedWorkflows","length","updateEntitiesStage","toStageId","srcWorkflow","transferContentTypes","fromStageId","concurrency","deleteAllEntitiesStage","db","query","WORKFLOW_MODEL_UID","update","where","id","data","contentTypes","filter","contentType","difference"],"mappings":"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"}
@@ -0,0 +1,279 @@
1
+ 'use strict';
2
+
3
+ var fp = require('lodash/fp');
4
+ var utils = require('@strapi/utils');
5
+ var workflows$1 = require('../constants/workflows.js');
6
+ var index = require('../utils/index.js');
7
+ var reviewWorkflows = require('../utils/review-workflows.js');
8
+ var workflowContentTypes = require('./workflow-content-types.js');
9
+
10
+ const processFilters = ({ strapi }, filters = {})=>{
11
+ const processedFilters = {
12
+ ...filters
13
+ };
14
+ if (fp.isString(filters.contentTypes)) {
15
+ processedFilters.contentTypes = reviewWorkflows.getWorkflowContentTypeFilter({
16
+ strapi
17
+ }, filters.contentTypes);
18
+ }
19
+ return processedFilters;
20
+ };
21
+ // TODO: How can we improve this? Maybe using traversePopulate?
22
+ const processPopulate = (populate)=>{
23
+ // If it does not exist or it's not an object (like an array) return the default populate
24
+ if (!populate) {
25
+ return workflows$1.WORKFLOW_POPULATE;
26
+ }
27
+ return populate;
28
+ };
29
+ var workflows = (({ strapi })=>{
30
+ const workflowsContentTypes = workflowContentTypes({
31
+ strapi
32
+ });
33
+ const workflowValidator = index.getService('validation', {
34
+ strapi
35
+ });
36
+ const metrics = index.getService('workflow-metrics', {
37
+ strapi
38
+ });
39
+ return {
40
+ /**
41
+ * Returns all the workflows matching the user-defined filters.
42
+ * @param {object} opts - Options for the query.
43
+ * @param {object} opts.filters - Filters object.
44
+ * @returns {Promise<object[]>} - List of workflows that match the user's filters.
45
+ */ async find (opts = {}) {
46
+ const filters = processFilters({
47
+ strapi
48
+ }, opts.filters);
49
+ const populate = processPopulate(opts.populate);
50
+ const query = strapi.get('query-params').transform(workflows$1.WORKFLOW_MODEL_UID, {
51
+ ...opts,
52
+ filters,
53
+ populate
54
+ });
55
+ return strapi.db.query(workflows$1.WORKFLOW_MODEL_UID).findMany(query);
56
+ },
57
+ /**
58
+ * Returns the workflow with the specified ID.
59
+ * @param {string} id - ID of the requested workflow.
60
+ * @param {object} opts - Options for the query.
61
+ * @returns {Promise<object>} - Workflow object matching the requested ID.
62
+ */ findById (id, opts = {}) {
63
+ const populate = processPopulate(opts.populate);
64
+ const query = strapi.get('query-params').transform(workflows$1.WORKFLOW_MODEL_UID, {
65
+ populate
66
+ });
67
+ return strapi.db.query(workflows$1.WORKFLOW_MODEL_UID).findOne({
68
+ ...query,
69
+ where: {
70
+ id
71
+ }
72
+ });
73
+ },
74
+ /**
75
+ * Creates a new workflow.
76
+ * @param {object} opts - Options for creating the new workflow.
77
+ * @returns {Promise<object>} - Workflow object that was just created.
78
+ * @throws {ValidationError} - If the workflow has no stages.
79
+ */ async create (opts) {
80
+ let createOpts = {
81
+ ...opts,
82
+ populate: workflows$1.WORKFLOW_POPULATE
83
+ };
84
+ workflowValidator.validateWorkflowStages(opts.data.stages);
85
+ await workflowValidator.validateWorkflowCount(1);
86
+ return strapi.db.transaction(async ()=>{
87
+ // Create stages
88
+ const stages = await index.getService('stages', {
89
+ strapi
90
+ }).createMany(opts.data.stages);
91
+ const mapIds = fp.map(fp.get('id'));
92
+ createOpts = fp.set('data.stages', mapIds(stages), createOpts);
93
+ if (opts.data.stageRequiredToPublishName) {
94
+ const stageRequiredToPublish = stages.find((stage)=>stage.name === opts.data.stageRequiredToPublishName);
95
+ if (!stageRequiredToPublish) {
96
+ throw new utils.errors.ApplicationError('Stage required to publish does not exist');
97
+ }
98
+ createOpts = fp.set('data.stageRequiredToPublish', stageRequiredToPublish.id, createOpts);
99
+ }
100
+ // Update (un)assigned Content Types
101
+ if (opts.data.contentTypes) {
102
+ await workflowsContentTypes.migrate({
103
+ destContentTypes: opts.data.contentTypes,
104
+ stageId: stages[0].id
105
+ });
106
+ }
107
+ // Create Workflow
108
+ const createdWorkflow = await strapi.db.query(workflows$1.WORKFLOW_MODEL_UID).create(strapi.get('query-params').transform(workflows$1.WORKFLOW_MODEL_UID, createOpts));
109
+ metrics.sendDidCreateWorkflow(createdWorkflow.id, !!opts.data.stageRequiredToPublishName);
110
+ if (opts.data.stageRequiredToPublishName) {
111
+ await strapi.plugin('content-releases').service('release-action').validateActionsByContentTypes(opts.data.contentTypes);
112
+ }
113
+ return createdWorkflow;
114
+ });
115
+ },
116
+ /**
117
+ * Updates an existing workflow.
118
+ * @param {object} workflow - The existing workflow to update.
119
+ * @param {object} opts - Options for updating the workflow.
120
+ * @returns {Promise<object>} - Workflow object that was just updated.
121
+ * @throws {ApplicationError} - If the supplied stage ID does not belong to the workflow.
122
+ */ async update (workflow, opts) {
123
+ const stageService = index.getService('stages', {
124
+ strapi
125
+ });
126
+ let updateOpts = {
127
+ ...opts,
128
+ populate: {
129
+ ...workflows$1.WORKFLOW_POPULATE
130
+ }
131
+ };
132
+ let updatedStages = [];
133
+ let updatedStageIds;
134
+ await workflowValidator.validateWorkflowCount();
135
+ return strapi.db.transaction(async ()=>{
136
+ // Update stages
137
+ if (opts.data.stages) {
138
+ workflowValidator.validateWorkflowStages(opts.data.stages);
139
+ opts.data.stages.forEach((stage)=>this.assertStageBelongsToWorkflow(stage.id, workflow));
140
+ updatedStages = await stageService.replaceStages(workflow.stages, opts.data.stages, workflow.contentTypes);
141
+ updatedStageIds = updatedStages.map((stage)=>stage.id);
142
+ updateOpts = fp.set('data.stages', updatedStageIds, updateOpts);
143
+ }
144
+ if (opts.data.stageRequiredToPublishName !== undefined) {
145
+ const stages = updatedStages ?? workflow.stages;
146
+ if (opts.data.stageRequiredToPublishName === null) {
147
+ updateOpts = fp.set('data.stageRequiredToPublish', null, updateOpts);
148
+ } else {
149
+ const stageRequiredToPublish = stages.find((stage)=>stage.name === opts.data.stageRequiredToPublishName);
150
+ if (!stageRequiredToPublish) {
151
+ throw new utils.errors.ApplicationError('Stage required to publish does not exist');
152
+ }
153
+ updateOpts = fp.set('data.stageRequiredToPublish', stageRequiredToPublish.id, updateOpts);
154
+ }
155
+ }
156
+ // Update (un)assigned Content Types
157
+ if (opts.data.contentTypes) {
158
+ await workflowsContentTypes.migrate({
159
+ srcContentTypes: workflow.contentTypes,
160
+ destContentTypes: opts.data.contentTypes,
161
+ stageId: updatedStageIds ? updatedStageIds[0] : workflow.stages[0].id
162
+ });
163
+ }
164
+ metrics.sendDidEditWorkflow(workflow.id, !!opts.data.stageRequiredToPublishName);
165
+ const query = strapi.get('query-params').transform(workflows$1.WORKFLOW_MODEL_UID, updateOpts);
166
+ // Update Workflow
167
+ const updatedWorkflow = await strapi.db.query(workflows$1.WORKFLOW_MODEL_UID).update({
168
+ ...query,
169
+ where: {
170
+ id: workflow.id
171
+ }
172
+ });
173
+ await strapi.plugin('content-releases').service('release-action').validateActionsByContentTypes([
174
+ ...workflow.contentTypes,
175
+ ...opts.data.contentTypes || []
176
+ ]);
177
+ return updatedWorkflow;
178
+ });
179
+ },
180
+ /**
181
+ * Deletes an existing workflow.
182
+ * Also deletes all the workflow stages and migrate all assigned the content types.
183
+ * @param {*} workflow
184
+ * @param {*} opts
185
+ * @returns
186
+ */ async delete (workflow, opts) {
187
+ const stageService = index.getService('stages', {
188
+ strapi
189
+ });
190
+ const workflowCount = await this.count();
191
+ if (workflowCount <= 1) {
192
+ throw new utils.errors.ApplicationError('Can not delete the last workflow');
193
+ }
194
+ return strapi.db.transaction(async ()=>{
195
+ // Delete stages
196
+ await stageService.deleteMany(workflow.stages);
197
+ // Unassign all content types, this will migrate the content types to null
198
+ await workflowsContentTypes.migrate({
199
+ srcContentTypes: workflow.contentTypes,
200
+ destContentTypes: []
201
+ });
202
+ const query = strapi.get('query-params').transform(workflows$1.WORKFLOW_MODEL_UID, opts);
203
+ // Delete Workflow
204
+ const deletedWorkflow = await strapi.db.query(workflows$1.WORKFLOW_MODEL_UID).delete({
205
+ ...query,
206
+ where: {
207
+ id: workflow.id
208
+ }
209
+ });
210
+ await strapi.plugin('content-releases').service('release-action').validateActionsByContentTypes(workflow.contentTypes);
211
+ return deletedWorkflow;
212
+ });
213
+ },
214
+ /**
215
+ * Returns the total count of workflows.
216
+ * @returns {Promise<number>} - Total count of workflows.
217
+ */ count () {
218
+ return strapi.db.query(workflows$1.WORKFLOW_MODEL_UID).count();
219
+ },
220
+ /**
221
+ * Finds the assigned workflow for a given content type ID.
222
+ * @param {string} uid - Content type ID to find the assigned workflow for.
223
+ * @param {object} opts - Options for the query.
224
+ * @returns {Promise<object|null>} - Assigned workflow object if found, or null.
225
+ */ async getAssignedWorkflow (uid, opts = {}) {
226
+ const workflows = await this._getAssignedWorkflows(uid, opts);
227
+ return workflows.length > 0 ? workflows[0] : null;
228
+ },
229
+ /**
230
+ * Finds all the assigned workflows for a given content type ID.
231
+ * Normally, there should only be one workflow assigned to a content type.
232
+ * However, edge cases can occur where a content type is assigned to multiple workflows.
233
+ * @param {string} uid - Content type ID to find the assigned workflows for.
234
+ * @param {object} opts - Options for the query.
235
+ * @returns {Promise<object[]>} - List of assigned workflow objects.
236
+ */ async _getAssignedWorkflows (uid, opts = {}) {
237
+ return this.find({
238
+ ...opts,
239
+ filters: {
240
+ contentTypes: reviewWorkflows.getWorkflowContentTypeFilter({
241
+ strapi
242
+ }, uid)
243
+ }
244
+ });
245
+ },
246
+ /**
247
+ * Asserts that a content type has an assigned workflow.
248
+ * @param {string} uid - Content type ID to verify the assignment of.
249
+ * @returns {Promise<object>} - Workflow object associated with the content type ID.
250
+ * @throws {ApplicationError} - If no assigned workflow is found for the content type ID.
251
+ */ async assertContentTypeBelongsToWorkflow (uid) {
252
+ const workflow = await this.getAssignedWorkflow(uid, {
253
+ populate: 'stages'
254
+ });
255
+ if (!workflow) {
256
+ throw new utils.errors.ApplicationError(`Review workflows is not activated on Content Type ${uid}.`);
257
+ }
258
+ return workflow;
259
+ },
260
+ /**
261
+ * Asserts that a stage belongs to a given workflow.
262
+ * @param {string} stageId - ID of stage to check.
263
+ * @param {object} workflow - Workflow object to check against.
264
+ * @returns
265
+ * @throws {ApplicationError} - If the stage does not belong to the specified workflow.
266
+ */ assertStageBelongsToWorkflow (stageId, workflow) {
267
+ if (!stageId) {
268
+ return;
269
+ }
270
+ const belongs = workflow.stages.some((stage)=>stage.id === stageId);
271
+ if (!belongs) {
272
+ throw new utils.errors.ApplicationError(`Stage does not belong to workflow "${workflow.name}"`);
273
+ }
274
+ }
275
+ };
276
+ });
277
+
278
+ module.exports = workflows;
279
+ //# sourceMappingURL=workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.js","sources":["../../../server/src/services/workflows.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { set, isString, map, get } from 'lodash/fp';\nimport { errors } from '@strapi/utils';\nimport { WORKFLOW_MODEL_UID, WORKFLOW_POPULATE } from '../constants/workflows';\nimport { getService } from '../utils';\nimport { getWorkflowContentTypeFilter } from '../utils/review-workflows';\nimport workflowsContentTypesFactory from './workflow-content-types';\n\nconst processFilters = ({ strapi }: { strapi: Core.Strapi }, filters: any = {}) => {\n const processedFilters = { ...filters };\n\n if (isString(filters.contentTypes)) {\n processedFilters.contentTypes = getWorkflowContentTypeFilter({ strapi }, filters.contentTypes);\n }\n\n return processedFilters;\n};\n\n// TODO: How can we improve this? Maybe using traversePopulate?\nconst processPopulate = (populate: any) => {\n // If it does not exist or it's not an object (like an array) return the default populate\n if (!populate) {\n return WORKFLOW_POPULATE;\n }\n\n return populate;\n};\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const workflowsContentTypes = workflowsContentTypesFactory({ strapi });\n const workflowValidator = getService('validation', { strapi });\n const metrics = getService('workflow-metrics', { strapi });\n\n return {\n /**\n * Returns all the workflows matching the user-defined filters.\n * @param {object} opts - Options for the query.\n * @param {object} opts.filters - Filters object.\n * @returns {Promise<object[]>} - List of workflows that match the user's filters.\n */\n async find(opts: any = {}) {\n const filters = processFilters({ strapi }, opts.filters);\n const populate = processPopulate(opts.populate);\n\n const query = strapi.get('query-params').transform(WORKFLOW_MODEL_UID, {\n ...opts,\n filters,\n populate,\n });\n\n return strapi.db.query(WORKFLOW_MODEL_UID).findMany(query);\n },\n\n /**\n * Returns the workflow with the specified ID.\n * @param {string} id - ID of the requested workflow.\n * @param {object} opts - Options for the query.\n * @returns {Promise<object>} - Workflow object matching the requested ID.\n */\n findById(id: any, opts: { populate?: any } = {}) {\n const populate = processPopulate(opts.populate);\n\n const query = strapi.get('query-params').transform(WORKFLOW_MODEL_UID, { populate });\n\n return strapi.db.query(WORKFLOW_MODEL_UID).findOne({\n ...query,\n where: { id },\n });\n },\n\n /**\n * Creates a new workflow.\n * @param {object} opts - Options for creating the new workflow.\n * @returns {Promise<object>} - Workflow object that was just created.\n * @throws {ValidationError} - If the workflow has no stages.\n */\n async create(opts: { data: any }) {\n let createOpts = { ...opts, populate: WORKFLOW_POPULATE };\n\n workflowValidator.validateWorkflowStages(opts.data.stages);\n await workflowValidator.validateWorkflowCount(1);\n\n return strapi.db.transaction(async () => {\n // Create stages\n const stages = await getService('stages', { strapi }).createMany(opts.data.stages);\n const mapIds = map(get('id'));\n\n createOpts = set('data.stages', mapIds(stages), createOpts);\n\n if (opts.data.stageRequiredToPublishName) {\n const stageRequiredToPublish = stages.find(\n (stage: any) => stage.name === opts.data.stageRequiredToPublishName\n );\n if (!stageRequiredToPublish) {\n throw new errors.ApplicationError('Stage required to publish does not exist');\n }\n\n createOpts = set('data.stageRequiredToPublish', stageRequiredToPublish.id, createOpts);\n }\n\n // Update (un)assigned Content Types\n if (opts.data.contentTypes) {\n await workflowsContentTypes.migrate({\n destContentTypes: opts.data.contentTypes,\n stageId: stages[0].id,\n });\n }\n\n // Create Workflow\n const createdWorkflow = await strapi.db\n .query(WORKFLOW_MODEL_UID)\n .create(strapi.get('query-params').transform(WORKFLOW_MODEL_UID, createOpts));\n\n metrics.sendDidCreateWorkflow(createdWorkflow.id, !!opts.data.stageRequiredToPublishName);\n\n if (opts.data.stageRequiredToPublishName) {\n await strapi\n .plugin('content-releases')\n .service('release-action')\n .validateActionsByContentTypes(opts.data.contentTypes);\n }\n\n return createdWorkflow;\n });\n },\n\n /**\n * Updates an existing workflow.\n * @param {object} workflow - The existing workflow to update.\n * @param {object} opts - Options for updating the workflow.\n * @returns {Promise<object>} - Workflow object that was just updated.\n * @throws {ApplicationError} - If the supplied stage ID does not belong to the workflow.\n */\n async update(workflow: any, opts: any) {\n const stageService = getService('stages', { strapi });\n let updateOpts = { ...opts, populate: { ...WORKFLOW_POPULATE } };\n let updatedStages: any = [];\n let updatedStageIds: any;\n\n await workflowValidator.validateWorkflowCount();\n\n return strapi.db.transaction(async () => {\n // Update stages\n if (opts.data.stages) {\n workflowValidator.validateWorkflowStages(opts.data.stages);\n opts.data.stages.forEach((stage: any) =>\n this.assertStageBelongsToWorkflow(stage.id, workflow)\n );\n\n updatedStages = await stageService.replaceStages(\n workflow.stages,\n opts.data.stages,\n workflow.contentTypes\n );\n updatedStageIds = updatedStages.map((stage: any) => stage.id);\n\n updateOpts = set('data.stages', updatedStageIds, updateOpts);\n }\n\n if (opts.data.stageRequiredToPublishName !== undefined) {\n const stages = updatedStages ?? workflow.stages;\n\n if (opts.data.stageRequiredToPublishName === null) {\n updateOpts = set('data.stageRequiredToPublish', null, updateOpts);\n } else {\n const stageRequiredToPublish = stages.find(\n (stage: any) => stage.name === opts.data.stageRequiredToPublishName\n );\n\n if (!stageRequiredToPublish) {\n throw new errors.ApplicationError('Stage required to publish does not exist');\n }\n\n updateOpts = set('data.stageRequiredToPublish', stageRequiredToPublish.id, updateOpts);\n }\n }\n\n // Update (un)assigned Content Types\n if (opts.data.contentTypes) {\n await workflowsContentTypes.migrate({\n srcContentTypes: workflow.contentTypes,\n destContentTypes: opts.data.contentTypes,\n stageId: updatedStageIds ? updatedStageIds[0] : workflow.stages[0].id,\n });\n }\n\n metrics.sendDidEditWorkflow(workflow.id, !!opts.data.stageRequiredToPublishName);\n\n const query = strapi.get('query-params').transform(WORKFLOW_MODEL_UID, updateOpts);\n\n // Update Workflow\n const updatedWorkflow = await strapi.db.query(WORKFLOW_MODEL_UID).update({\n ...query,\n where: { id: workflow.id },\n });\n\n await strapi\n .plugin('content-releases')\n .service('release-action')\n .validateActionsByContentTypes([\n ...workflow.contentTypes,\n ...(opts.data.contentTypes || []),\n ]);\n\n return updatedWorkflow;\n });\n },\n\n /**\n * Deletes an existing workflow.\n * Also deletes all the workflow stages and migrate all assigned the content types.\n * @param {*} workflow\n * @param {*} opts\n * @returns\n */\n async delete(workflow: any, opts: any) {\n const stageService = getService('stages', { strapi });\n\n const workflowCount = await this.count();\n\n if (workflowCount <= 1) {\n throw new errors.ApplicationError('Can not delete the last workflow');\n }\n\n return strapi.db.transaction(async () => {\n // Delete stages\n await stageService.deleteMany(workflow.stages);\n\n // Unassign all content types, this will migrate the content types to null\n await workflowsContentTypes.migrate({\n srcContentTypes: workflow.contentTypes,\n destContentTypes: [],\n });\n\n const query = strapi.get('query-params').transform(WORKFLOW_MODEL_UID, opts);\n\n // Delete Workflow\n const deletedWorkflow = await strapi.db.query(WORKFLOW_MODEL_UID).delete({\n ...query,\n where: { id: workflow.id },\n });\n\n await strapi\n .plugin('content-releases')\n .service('release-action')\n .validateActionsByContentTypes(workflow.contentTypes);\n\n return deletedWorkflow;\n });\n },\n /**\n * Returns the total count of workflows.\n * @returns {Promise<number>} - Total count of workflows.\n */\n count() {\n return strapi.db.query(WORKFLOW_MODEL_UID).count();\n },\n\n /**\n * Finds the assigned workflow for a given content type ID.\n * @param {string} uid - Content type ID to find the assigned workflow for.\n * @param {object} opts - Options for the query.\n * @returns {Promise<object|null>} - Assigned workflow object if found, or null.\n */\n async getAssignedWorkflow(uid: any, opts: any = {}) {\n const workflows = await this._getAssignedWorkflows(uid, opts);\n\n return workflows.length > 0 ? workflows[0] : null;\n },\n\n /**\n * Finds all the assigned workflows for a given content type ID.\n * Normally, there should only be one workflow assigned to a content type.\n * However, edge cases can occur where a content type is assigned to multiple workflows.\n * @param {string} uid - Content type ID to find the assigned workflows for.\n * @param {object} opts - Options for the query.\n * @returns {Promise<object[]>} - List of assigned workflow objects.\n */\n async _getAssignedWorkflows(uid: any, opts = {}) {\n return this.find({\n ...opts,\n filters: { contentTypes: getWorkflowContentTypeFilter({ strapi }, uid) },\n });\n },\n\n /**\n * Asserts that a content type has an assigned workflow.\n * @param {string} uid - Content type ID to verify the assignment of.\n * @returns {Promise<object>} - Workflow object associated with the content type ID.\n * @throws {ApplicationError} - If no assigned workflow is found for the content type ID.\n */\n async assertContentTypeBelongsToWorkflow(uid: any) {\n const workflow = await this.getAssignedWorkflow(uid, {\n populate: 'stages',\n });\n\n if (!workflow) {\n throw new errors.ApplicationError(\n `Review workflows is not activated on Content Type ${uid}.`\n );\n }\n\n return workflow;\n },\n\n /**\n * Asserts that a stage belongs to a given workflow.\n * @param {string} stageId - ID of stage to check.\n * @param {object} workflow - Workflow object to check against.\n * @returns\n * @throws {ApplicationError} - If the stage does not belong to the specified workflow.\n */\n assertStageBelongsToWorkflow(stageId: any, workflow: any) {\n if (!stageId) {\n return;\n }\n\n const belongs = workflow.stages.some((stage: any) => stage.id === stageId);\n if (!belongs) {\n throw new errors.ApplicationError(`Stage does not belong to workflow \"${workflow.name}\"`);\n }\n },\n };\n};\n"],"names":["processFilters","strapi","filters","processedFilters","isString","contentTypes","getWorkflowContentTypeFilter","processPopulate","populate","WORKFLOW_POPULATE","workflowsContentTypes","workflowsContentTypesFactory","workflowValidator","getService","metrics","find","opts","query","get","transform","WORKFLOW_MODEL_UID","db","findMany","findById","id","findOne","where","create","createOpts","validateWorkflowStages","data","stages","validateWorkflowCount","transaction","createMany","mapIds","map","set","stageRequiredToPublishName","stageRequiredToPublish","stage","name","errors","ApplicationError","migrate","destContentTypes","stageId","createdWorkflow","sendDidCreateWorkflow","plugin","service","validateActionsByContentTypes","update","workflow","stageService","updateOpts","updatedStages","updatedStageIds","forEach","assertStageBelongsToWorkflow","replaceStages","undefined","srcContentTypes","sendDidEditWorkflow","updatedWorkflow","delete","workflowCount","count","deleteMany","deletedWorkflow","getAssignedWorkflow","uid","workflows","_getAssignedWorkflows","length","assertContentTypeBelongsToWorkflow","belongs","some"],"mappings":"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"}