@strapi/review-workflows 0.0.0-next.f5312617ca16b870c2bf1adcea2c69b676979e29 → 0.0.0-next.f5d21551ed005f524bfc4760b274f1be154e26a8

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 (432) hide show
  1. package/dist/admin/assets/balloon.png.js +6 -0
  2. package/dist/admin/assets/balloon.png.js.map +1 -0
  3. package/dist/admin/assets/balloon.png.mjs +4 -0
  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/assets/purchase-page-illustration-light.svg.js +6 -0
  10. package/dist/admin/assets/purchase-page-illustration-light.svg.js.map +1 -0
  11. package/dist/admin/assets/purchase-page-illustration-light.svg.mjs +4 -0
  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/components/Widgets.js +137 -0
  18. package/dist/admin/components/Widgets.js.map +1 -0
  19. package/dist/admin/components/Widgets.mjs +135 -0
  20. package/dist/admin/components/Widgets.mjs.map +1 -0
  21. package/dist/admin/constants.js +18 -0
  22. package/dist/admin/constants.js.map +1 -0
  23. package/dist/admin/constants.mjs +12 -0
  24. package/dist/admin/constants.mjs.map +1 -0
  25. package/dist/admin/index.js +116 -3
  26. package/dist/admin/index.js.map +1 -1
  27. package/dist/admin/index.mjs +111 -3
  28. package/dist/admin/index.mjs.map +1 -1
  29. package/dist/admin/modules/hooks.js +8 -0
  30. package/dist/admin/modules/hooks.js.map +1 -0
  31. package/dist/admin/modules/hooks.mjs +6 -0
  32. package/dist/admin/modules/hooks.mjs.map +1 -0
  33. package/dist/admin/router.js +30 -0
  34. package/dist/admin/router.js.map +1 -0
  35. package/dist/admin/router.mjs +28 -0
  36. package/dist/admin/router.mjs.map +1 -0
  37. package/dist/admin/routes/content-manager/model/components/TableColumns.js +44 -0
  38. package/dist/admin/routes/content-manager/model/components/TableColumns.js.map +1 -0
  39. package/dist/admin/routes/content-manager/model/components/TableColumns.mjs +41 -0
  40. package/dist/admin/routes/content-manager/model/components/TableColumns.mjs.map +1 -0
  41. package/dist/admin/routes/content-manager/model/constants.js +60 -0
  42. package/dist/admin/routes/content-manager/model/constants.js.map +1 -0
  43. package/dist/admin/routes/content-manager/model/constants.mjs +58 -0
  44. package/dist/admin/routes/content-manager/model/constants.mjs.map +1 -0
  45. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.js +169 -0
  46. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.js.map +1 -0
  47. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.mjs +148 -0
  48. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.mjs.map +1 -0
  49. package/dist/admin/routes/content-manager/model/id/components/Header.js +31 -0
  50. package/dist/admin/routes/content-manager/model/id/components/Header.js.map +1 -0
  51. package/dist/admin/routes/content-manager/model/id/components/Header.mjs +29 -0
  52. package/dist/admin/routes/content-manager/model/id/components/Header.mjs.map +1 -0
  53. package/dist/admin/routes/content-manager/model/id/components/Panel.js +39 -0
  54. package/dist/admin/routes/content-manager/model/id/components/Panel.js.map +1 -0
  55. package/dist/admin/routes/content-manager/model/id/components/Panel.mjs +37 -0
  56. package/dist/admin/routes/content-manager/model/id/components/Panel.mjs.map +1 -0
  57. package/dist/admin/routes/content-manager/model/id/components/StageSelect.js +329 -0
  58. package/dist/admin/routes/content-manager/model/id/components/StageSelect.js.map +1 -0
  59. package/dist/admin/routes/content-manager/model/id/components/StageSelect.mjs +308 -0
  60. package/dist/admin/routes/content-manager/model/id/components/StageSelect.mjs.map +1 -0
  61. package/dist/admin/routes/content-manager/model/id/components/constants.js +8 -0
  62. package/dist/admin/routes/content-manager/model/id/components/constants.js.map +1 -0
  63. package/dist/admin/routes/content-manager/model/id/components/constants.mjs +5 -0
  64. package/dist/admin/routes/content-manager/model/id/components/constants.mjs.map +1 -0
  65. package/dist/admin/routes/purchase-review-workflows.js +194 -0
  66. package/dist/admin/routes/purchase-review-workflows.js.map +1 -0
  67. package/dist/admin/routes/purchase-review-workflows.mjs +192 -0
  68. package/dist/admin/routes/purchase-review-workflows.mjs.map +1 -0
  69. package/dist/admin/routes/settings/components/AddStage.js +51 -0
  70. package/dist/admin/routes/settings/components/AddStage.js.map +1 -0
  71. package/dist/admin/routes/settings/components/AddStage.mjs +49 -0
  72. package/dist/admin/routes/settings/components/AddStage.mjs.map +1 -0
  73. package/dist/admin/routes/settings/components/Layout.js +86 -0
  74. package/dist/admin/routes/settings/components/Layout.js.map +1 -0
  75. package/dist/admin/routes/settings/components/Layout.mjs +82 -0
  76. package/dist/admin/routes/settings/components/Layout.mjs.map +1 -0
  77. package/dist/admin/routes/settings/components/StageDragPreview.js +40 -0
  78. package/dist/admin/routes/settings/components/StageDragPreview.js.map +1 -0
  79. package/dist/admin/routes/settings/components/StageDragPreview.mjs +38 -0
  80. package/dist/admin/routes/settings/components/StageDragPreview.mjs.map +1 -0
  81. package/dist/admin/routes/settings/components/Stages.js +591 -0
  82. package/dist/admin/routes/settings/components/Stages.js.map +1 -0
  83. package/dist/admin/routes/settings/components/Stages.mjs +570 -0
  84. package/dist/admin/routes/settings/components/Stages.mjs.map +1 -0
  85. package/dist/admin/routes/settings/components/WorkflowAttributes.js +203 -0
  86. package/dist/admin/routes/settings/components/WorkflowAttributes.js.map +1 -0
  87. package/dist/admin/routes/settings/components/WorkflowAttributes.mjs +201 -0
  88. package/dist/admin/routes/settings/components/WorkflowAttributes.mjs.map +1 -0
  89. package/dist/admin/routes/settings/constants.js +8 -0
  90. package/dist/admin/routes/settings/constants.js.map +1 -0
  91. package/dist/admin/routes/settings/constants.mjs +6 -0
  92. package/dist/admin/routes/settings/constants.mjs.map +1 -0
  93. package/dist/admin/routes/settings/hooks/useDragAndDrop.js +193 -0
  94. package/dist/admin/routes/settings/hooks/useDragAndDrop.js.map +1 -0
  95. package/dist/admin/routes/settings/hooks/useDragAndDrop.mjs +170 -0
  96. package/dist/admin/routes/settings/hooks/useDragAndDrop.mjs.map +1 -0
  97. package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.js +94 -0
  98. package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.js.map +1 -0
  99. package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.mjs +73 -0
  100. package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.mjs.map +1 -0
  101. package/dist/admin/routes/settings/hooks/useReviewWorkflows.js +171 -0
  102. package/dist/admin/routes/settings/hooks/useReviewWorkflows.js.map +1 -0
  103. package/dist/admin/routes/settings/hooks/useReviewWorkflows.mjs +150 -0
  104. package/dist/admin/routes/settings/hooks/useReviewWorkflows.mjs.map +1 -0
  105. package/dist/admin/routes/settings/id.js +404 -0
  106. package/dist/admin/routes/settings/id.js.map +1 -0
  107. package/dist/admin/routes/settings/id.mjs +382 -0
  108. package/dist/admin/routes/settings/id.mjs.map +1 -0
  109. package/dist/admin/routes/settings/index.js +293 -0
  110. package/dist/admin/routes/settings/index.js.map +1 -0
  111. package/dist/admin/routes/settings/index.mjs +271 -0
  112. package/dist/admin/routes/settings/index.mjs.map +1 -0
  113. package/dist/admin/services/admin.js +23 -0
  114. package/dist/admin/services/admin.js.map +1 -0
  115. package/dist/admin/services/admin.mjs +21 -0
  116. package/dist/admin/services/admin.mjs.map +1 -0
  117. package/dist/admin/services/api.js +15 -0
  118. package/dist/admin/services/api.js.map +1 -0
  119. package/dist/admin/services/api.mjs +13 -0
  120. package/dist/admin/services/api.mjs.map +1 -0
  121. package/dist/admin/services/content-manager.js +116 -0
  122. package/dist/admin/services/content-manager.js.map +1 -0
  123. package/dist/admin/services/content-manager.mjs +110 -0
  124. package/dist/admin/services/content-manager.mjs.map +1 -0
  125. package/dist/admin/services/settings.js +123 -0
  126. package/dist/admin/services/settings.js.map +1 -0
  127. package/dist/admin/services/settings.mjs +118 -0
  128. package/dist/admin/services/settings.mjs.map +1 -0
  129. package/dist/admin/src/components/Widgets.d.ts +2 -0
  130. package/dist/admin/src/routes/content-manager/model/id/components/AssigneeSelect.d.ts +4 -0
  131. package/dist/admin/src/routes/content-manager/model/id/components/Header.d.ts +5 -0
  132. package/dist/admin/src/routes/content-manager/model/id/components/StageSelect.d.ts +3 -0
  133. package/dist/admin/src/services/admin.d.ts +1 -1
  134. package/dist/admin/src/services/api.d.ts +1 -1
  135. package/dist/admin/src/services/content-manager.d.ts +6 -5
  136. package/dist/admin/src/services/settings.d.ts +10 -6
  137. package/dist/admin/translations/en.json.js +22 -0
  138. package/dist/admin/translations/en.json.js.map +1 -0
  139. package/dist/admin/translations/en.json.mjs +20 -0
  140. package/dist/admin/translations/en.json.mjs.map +1 -0
  141. package/dist/admin/translations/uk.json.js +16 -0
  142. package/dist/admin/translations/uk.json.js.map +1 -0
  143. package/dist/admin/translations/uk.json.mjs +14 -0
  144. package/dist/admin/translations/uk.json.mjs.map +1 -0
  145. package/dist/admin/utils/api.js +22 -0
  146. package/dist/admin/utils/api.js.map +1 -0
  147. package/dist/admin/utils/api.mjs +19 -0
  148. package/dist/admin/utils/api.mjs.map +1 -0
  149. package/dist/admin/utils/cm-hooks.js +23 -0
  150. package/dist/admin/utils/cm-hooks.js.map +1 -0
  151. package/dist/admin/utils/cm-hooks.mjs +21 -0
  152. package/dist/admin/utils/cm-hooks.mjs.map +1 -0
  153. package/dist/admin/utils/colors.js +50 -0
  154. package/dist/admin/utils/colors.js.map +1 -0
  155. package/dist/admin/utils/colors.mjs +47 -0
  156. package/dist/admin/utils/colors.mjs.map +1 -0
  157. package/dist/admin/utils/translations.js +11 -0
  158. package/dist/admin/utils/translations.js.map +1 -0
  159. package/dist/admin/utils/translations.mjs +9 -0
  160. package/dist/admin/utils/translations.mjs.map +1 -0
  161. package/dist/admin/utils/users.js +17 -0
  162. package/dist/admin/utils/users.js.map +1 -0
  163. package/dist/admin/utils/users.mjs +15 -0
  164. package/dist/admin/utils/users.mjs.map +1 -0
  165. package/dist/server/bootstrap.js +54 -0
  166. package/dist/server/bootstrap.js.map +1 -0
  167. package/dist/server/bootstrap.mjs +52 -0
  168. package/dist/server/bootstrap.mjs.map +1 -0
  169. package/dist/server/config/actions.js +47 -0
  170. package/dist/server/config/actions.js.map +1 -0
  171. package/dist/server/config/actions.mjs +45 -0
  172. package/dist/server/config/actions.mjs.map +1 -0
  173. package/dist/server/constants/default-stages.json.js +23 -0
  174. package/dist/server/constants/default-stages.json.js.map +1 -0
  175. package/dist/server/constants/default-stages.json.mjs +21 -0
  176. package/dist/server/constants/default-stages.json.mjs.map +1 -0
  177. package/dist/server/constants/default-workflow.json.js +12 -0
  178. package/dist/server/constants/default-workflow.json.js.map +1 -0
  179. package/dist/server/constants/default-workflow.json.mjs +7 -0
  180. package/dist/server/constants/default-workflow.json.mjs.map +1 -0
  181. package/dist/server/constants/webhook-events.js +12 -0
  182. package/dist/server/constants/webhook-events.js.map +1 -0
  183. package/dist/server/constants/webhook-events.mjs +7 -0
  184. package/dist/server/constants/webhook-events.mjs.map +1 -0
  185. package/dist/server/constants/workflows.js +53 -0
  186. package/dist/server/constants/workflows.js.map +1 -0
  187. package/dist/server/constants/workflows.mjs +42 -0
  188. package/dist/server/constants/workflows.mjs.map +1 -0
  189. package/dist/server/content-types/index.js +12 -0
  190. package/dist/server/content-types/index.js.map +1 -0
  191. package/dist/server/content-types/index.mjs +10 -0
  192. package/dist/server/content-types/index.mjs.map +1 -0
  193. package/dist/server/content-types/workflow/index.js +50 -0
  194. package/dist/server/content-types/workflow/index.js.map +1 -0
  195. package/dist/server/content-types/workflow/index.mjs +48 -0
  196. package/dist/server/content-types/workflow/index.mjs.map +1 -0
  197. package/dist/server/content-types/workflow-stage/index.js +54 -0
  198. package/dist/server/content-types/workflow-stage/index.js.map +1 -0
  199. package/dist/server/content-types/workflow-stage/index.mjs +52 -0
  200. package/dist/server/content-types/workflow-stage/index.mjs.map +1 -0
  201. package/dist/server/controllers/assignees.js +57 -0
  202. package/dist/server/controllers/assignees.js.map +1 -0
  203. package/dist/server/controllers/assignees.mjs +55 -0
  204. package/dist/server/controllers/assignees.mjs.map +1 -0
  205. package/dist/server/controllers/index.js +16 -0
  206. package/dist/server/controllers/index.js.map +1 -0
  207. package/dist/server/controllers/index.mjs +14 -0
  208. package/dist/server/controllers/index.mjs.map +1 -0
  209. package/dist/server/controllers/stages.js +167 -0
  210. package/dist/server/controllers/stages.js.map +1 -0
  211. package/dist/server/controllers/stages.mjs +165 -0
  212. package/dist/server/controllers/stages.mjs.map +1 -0
  213. package/dist/server/controllers/workflows.js +136 -0
  214. package/dist/server/controllers/workflows.js.map +1 -0
  215. package/dist/server/controllers/workflows.mjs +134 -0
  216. package/dist/server/controllers/workflows.mjs.map +1 -0
  217. package/dist/server/destroy.js +6 -0
  218. package/dist/server/destroy.js.map +1 -0
  219. package/dist/server/destroy.mjs +4 -0
  220. package/dist/server/destroy.mjs.map +1 -0
  221. package/dist/server/homepage/controllers/homepage.js +15 -0
  222. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  223. package/dist/server/homepage/controllers/homepage.mjs +13 -0
  224. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  225. package/dist/server/homepage/controllers/index.js +10 -0
  226. package/dist/server/homepage/controllers/index.js.map +1 -0
  227. package/dist/server/homepage/controllers/index.mjs +8 -0
  228. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  229. package/dist/server/homepage/index.js +14 -0
  230. package/dist/server/homepage/index.js.map +1 -0
  231. package/dist/server/homepage/index.mjs +12 -0
  232. package/dist/server/homepage/index.mjs.map +1 -0
  233. package/dist/server/homepage/routes/homepage.js +25 -0
  234. package/dist/server/homepage/routes/homepage.js.map +1 -0
  235. package/dist/server/homepage/routes/homepage.mjs +23 -0
  236. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  237. package/dist/server/homepage/routes/index.js +10 -0
  238. package/dist/server/homepage/routes/index.js.map +1 -0
  239. package/dist/server/homepage/routes/index.mjs +8 -0
  240. package/dist/server/homepage/routes/index.mjs.map +1 -0
  241. package/dist/server/homepage/services/homepage.js +24 -0
  242. package/dist/server/homepage/services/homepage.js.map +1 -0
  243. package/dist/server/homepage/services/homepage.mjs +22 -0
  244. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  245. package/dist/server/homepage/services/index.js +10 -0
  246. package/dist/server/homepage/services/index.js.map +1 -0
  247. package/dist/server/homepage/services/index.mjs +8 -0
  248. package/dist/server/homepage/services/index.mjs.map +1 -0
  249. package/dist/server/index.js +25 -8230
  250. package/dist/server/index.js.map +1 -1
  251. package/dist/server/index.mjs +24 -8232
  252. package/dist/server/index.mjs.map +1 -1
  253. package/dist/server/middlewares/review-workflows.js +42 -0
  254. package/dist/server/middlewares/review-workflows.js.map +1 -0
  255. package/dist/server/middlewares/review-workflows.mjs +37 -0
  256. package/dist/server/middlewares/review-workflows.mjs.map +1 -0
  257. package/dist/server/migrations/handle-deleted-ct-in-workflows.js +40 -0
  258. package/dist/server/migrations/handle-deleted-ct-in-workflows.js.map +1 -0
  259. package/dist/server/migrations/handle-deleted-ct-in-workflows.mjs +38 -0
  260. package/dist/server/migrations/handle-deleted-ct-in-workflows.mjs.map +1 -0
  261. package/dist/server/migrations/multiple-workflows.js +41 -0
  262. package/dist/server/migrations/multiple-workflows.js.map +1 -0
  263. package/dist/server/migrations/multiple-workflows.mjs +39 -0
  264. package/dist/server/migrations/multiple-workflows.mjs.map +1 -0
  265. package/dist/server/migrations/set-stages-default-color.js +22 -0
  266. package/dist/server/migrations/set-stages-default-color.js.map +1 -0
  267. package/dist/server/migrations/set-stages-default-color.mjs +20 -0
  268. package/dist/server/migrations/set-stages-default-color.mjs.map +1 -0
  269. package/dist/server/migrations/set-stages-roles.js +56 -0
  270. package/dist/server/migrations/set-stages-roles.js.map +1 -0
  271. package/dist/server/migrations/set-stages-roles.mjs +54 -0
  272. package/dist/server/migrations/set-stages-roles.mjs.map +1 -0
  273. package/dist/server/migrations/set-workflow-default-name.js +29 -0
  274. package/dist/server/migrations/set-workflow-default-name.js.map +1 -0
  275. package/dist/server/migrations/set-workflow-default-name.mjs +27 -0
  276. package/dist/server/migrations/set-workflow-default-name.mjs.map +1 -0
  277. package/dist/server/migrations/shorten-stage-attribute.js +45 -0
  278. package/dist/server/migrations/shorten-stage-attribute.js.map +1 -0
  279. package/dist/server/migrations/shorten-stage-attribute.mjs +43 -0
  280. package/dist/server/migrations/shorten-stage-attribute.mjs.map +1 -0
  281. package/dist/server/register.js +116 -0
  282. package/dist/server/register.js.map +1 -0
  283. package/dist/server/register.mjs +114 -0
  284. package/dist/server/register.mjs.map +1 -0
  285. package/dist/server/routes/index.js +12 -0
  286. package/dist/server/routes/index.js.map +1 -0
  287. package/dist/server/routes/index.mjs +10 -0
  288. package/dist/server/routes/index.mjs.map +1 -0
  289. package/dist/server/routes/review-workflows.js +186 -0
  290. package/dist/server/routes/review-workflows.js.map +1 -0
  291. package/dist/server/routes/review-workflows.mjs +184 -0
  292. package/dist/server/routes/review-workflows.mjs.map +1 -0
  293. package/dist/server/routes/utils.js +11 -0
  294. package/dist/server/routes/utils.js.map +1 -0
  295. package/dist/server/routes/utils.mjs +9 -0
  296. package/dist/server/routes/utils.mjs.map +1 -0
  297. package/dist/server/services/assignees.js +68 -0
  298. package/dist/server/services/assignees.js.map +1 -0
  299. package/dist/server/services/assignees.mjs +66 -0
  300. package/dist/server/services/assignees.mjs.map +1 -0
  301. package/dist/server/services/document-service-middleware.js +130 -0
  302. package/dist/server/services/document-service-middleware.js.map +1 -0
  303. package/dist/server/services/document-service-middleware.mjs +128 -0
  304. package/dist/server/services/document-service-middleware.mjs.map +1 -0
  305. package/dist/server/services/index.js +26 -0
  306. package/dist/server/services/index.js.map +1 -0
  307. package/dist/server/services/index.mjs +24 -0
  308. package/dist/server/services/index.mjs.map +1 -0
  309. package/dist/server/services/metrics/index.js +67 -0
  310. package/dist/server/services/metrics/index.js.map +1 -0
  311. package/dist/server/services/metrics/index.mjs +55 -0
  312. package/dist/server/services/metrics/index.mjs.map +1 -0
  313. package/dist/server/services/metrics/weekly-metrics.js +84 -0
  314. package/dist/server/services/metrics/weekly-metrics.js.map +1 -0
  315. package/dist/server/services/metrics/weekly-metrics.mjs +82 -0
  316. package/dist/server/services/metrics/weekly-metrics.mjs.map +1 -0
  317. package/dist/server/services/stage-permissions.js +59 -0
  318. package/dist/server/services/stage-permissions.js.map +1 -0
  319. package/dist/server/services/stage-permissions.mjs +57 -0
  320. package/dist/server/services/stage-permissions.mjs.map +1 -0
  321. package/dist/server/services/stages.js +353 -0
  322. package/dist/server/services/stages.js.map +1 -0
  323. package/dist/server/services/stages.mjs +351 -0
  324. package/dist/server/services/stages.mjs.map +1 -0
  325. package/dist/server/services/validation.js +69 -0
  326. package/dist/server/services/validation.js.map +1 -0
  327. package/dist/server/services/validation.mjs +67 -0
  328. package/dist/server/services/validation.mjs.map +1 -0
  329. package/dist/server/services/workflow-content-types.js +90 -0
  330. package/dist/server/services/workflow-content-types.js.map +1 -0
  331. package/dist/server/services/workflow-content-types.mjs +88 -0
  332. package/dist/server/services/workflow-content-types.mjs.map +1 -0
  333. package/dist/server/services/workflows.js +279 -0
  334. package/dist/server/services/workflows.js.map +1 -0
  335. package/dist/server/services/workflows.mjs +277 -0
  336. package/dist/server/services/workflows.mjs.map +1 -0
  337. package/dist/server/src/bootstrap.d.ts.map +1 -1
  338. package/dist/server/src/constants/workflows.d.ts +1 -0
  339. package/dist/server/src/constants/workflows.d.ts.map +1 -1
  340. package/dist/server/src/content-types/index.d.ts +6 -0
  341. package/dist/server/src/content-types/index.d.ts.map +1 -1
  342. package/dist/server/src/content-types/workflow/index.d.ts +6 -0
  343. package/dist/server/src/content-types/workflow/index.d.ts.map +1 -1
  344. package/dist/server/src/controllers/assignees.d.ts.map +1 -1
  345. package/dist/server/src/controllers/index.d.ts.map +1 -1
  346. package/dist/server/src/controllers/stages.d.ts.map +1 -1
  347. package/dist/server/src/homepage/controllers/homepage.d.ts +6 -0
  348. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  349. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  350. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  351. package/dist/server/src/homepage/index.d.ts +15 -0
  352. package/dist/server/src/homepage/index.d.ts.map +1 -0
  353. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  354. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  355. package/dist/server/src/homepage/routes/index.d.ts +4 -0
  356. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  357. package/dist/server/src/homepage/services/homepage.d.ts +9 -0
  358. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  359. package/dist/server/src/homepage/services/index.d.ts +8 -0
  360. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  361. package/dist/server/src/index.d.ts +34 -6
  362. package/dist/server/src/index.d.ts.map +1 -1
  363. package/dist/server/src/register.d.ts.map +1 -1
  364. package/dist/server/src/routes/index.d.ts +1 -0
  365. package/dist/server/src/routes/index.d.ts.map +1 -1
  366. package/dist/server/src/services/assignees.d.ts +8 -4
  367. package/dist/server/src/services/assignees.d.ts.map +1 -1
  368. package/dist/server/src/services/document-service-middleware.d.ts +2 -1
  369. package/dist/server/src/services/document-service-middleware.d.ts.map +1 -1
  370. package/dist/server/src/services/index.d.ts +21 -6
  371. package/dist/server/src/services/index.d.ts.map +1 -1
  372. package/dist/server/src/services/metrics/index.d.ts +4 -4
  373. package/dist/server/src/services/metrics/index.d.ts.map +1 -1
  374. package/dist/server/src/services/stages.d.ts +6 -1
  375. package/dist/server/src/services/stages.d.ts.map +1 -1
  376. package/dist/server/src/services/workflows.d.ts.map +1 -1
  377. package/dist/server/src/validation/review-workflows.d.ts +4 -0
  378. package/dist/server/src/validation/review-workflows.d.ts.map +1 -1
  379. package/dist/server/utils/index.js +16 -0
  380. package/dist/server/utils/index.js.map +1 -0
  381. package/dist/server/utils/index.mjs +13 -0
  382. package/dist/server/utils/index.mjs.map +1 -0
  383. package/dist/server/utils/review-workflows.js +36 -0
  384. package/dist/server/utils/review-workflows.js.map +1 -0
  385. package/dist/server/utils/review-workflows.mjs +30 -0
  386. package/dist/server/utils/review-workflows.mjs.map +1 -0
  387. package/dist/server/validation/review-workflows.js +71 -0
  388. package/dist/server/validation/review-workflows.js.map +1 -0
  389. package/dist/server/validation/review-workflows.mjs +65 -0
  390. package/dist/server/validation/review-workflows.mjs.map +1 -0
  391. package/dist/shared/contracts/homepage.d.ts +26 -0
  392. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  393. package/dist/shared/contracts/review-workflows.d.ts +8 -4
  394. package/dist/shared/contracts/review-workflows.d.ts.map +1 -1
  395. package/package.json +16 -15
  396. package/dist/_chunks/Layout-8i0EXRRs.js +0 -251
  397. package/dist/_chunks/Layout-8i0EXRRs.js.map +0 -1
  398. package/dist/_chunks/Layout-C9m07iTY.mjs +0 -233
  399. package/dist/_chunks/Layout-C9m07iTY.mjs.map +0 -1
  400. package/dist/_chunks/en-D9ZrQAV6.mjs +0 -12
  401. package/dist/_chunks/en-D9ZrQAV6.mjs.map +0 -1
  402. package/dist/_chunks/en-xcewH2pC.js +0 -12
  403. package/dist/_chunks/en-xcewH2pC.js.map +0 -1
  404. package/dist/_chunks/id-CmtaTf1x.js +0 -1237
  405. package/dist/_chunks/id-CmtaTf1x.js.map +0 -1
  406. package/dist/_chunks/id-DV0Ndeav.mjs +0 -1217
  407. package/dist/_chunks/id-DV0Ndeav.mjs.map +0 -1
  408. package/dist/_chunks/index-B8WmHbCU.js +0 -233
  409. package/dist/_chunks/index-B8WmHbCU.js.map +0 -1
  410. package/dist/_chunks/index-BCUO98DV.js +0 -830
  411. package/dist/_chunks/index-BCUO98DV.js.map +0 -1
  412. package/dist/_chunks/index-CA5Axcoc.mjs +0 -214
  413. package/dist/_chunks/index-CA5Axcoc.mjs.map +0 -1
  414. package/dist/_chunks/index-CqYVkW3E.mjs +0 -812
  415. package/dist/_chunks/index-CqYVkW3E.mjs.map +0 -1
  416. package/dist/_chunks/purchase-review-workflows-BN-5Ube7.mjs +0 -52
  417. package/dist/_chunks/purchase-review-workflows-BN-5Ube7.mjs.map +0 -1
  418. package/dist/_chunks/purchase-review-workflows-DlCDg0fD.js +0 -52
  419. package/dist/_chunks/purchase-review-workflows-DlCDg0fD.js.map +0 -1
  420. package/dist/_chunks/router-BOXlNnrU.js +0 -24
  421. package/dist/_chunks/router-BOXlNnrU.js.map +0 -1
  422. package/dist/_chunks/router-Jdt6SbIA.mjs +0 -24
  423. package/dist/_chunks/router-Jdt6SbIA.mjs.map +0 -1
  424. package/dist/admin/src/routes/content-manager/[model]/[id]/components/AssigneeSelect.d.ts +0 -2
  425. package/dist/admin/src/routes/content-manager/[model]/[id]/components/StageSelect.d.ts +0 -1
  426. /package/dist/admin/src/routes/content-manager/{[model] → model}/components/AssigneeFilter.d.ts +0 -0
  427. /package/dist/admin/src/routes/content-manager/{[model] → model}/components/StageFilter.d.ts +0 -0
  428. /package/dist/admin/src/routes/content-manager/{[model] → model}/components/TableColumns.d.ts +0 -0
  429. /package/dist/admin/src/routes/content-manager/{[model] → model}/configure/constants.d.ts +0 -0
  430. /package/dist/admin/src/routes/content-manager/{[model] → model}/constants.d.ts +0 -0
  431. /package/dist/admin/src/routes/content-manager/{[model]/[id] → model/id}/components/Panel.d.ts +0 -0
  432. /package/dist/admin/src/routes/content-manager/{[model]/[id] → model/id}/components/constants.d.ts +0 -0
@@ -0,0 +1,293 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var strapiAdmin = require('@strapi/admin/strapi-admin');
6
+ var ee = require('@strapi/admin/strapi-admin/ee');
7
+ var designSystem = require('@strapi/design-system');
8
+ var icons = require('@strapi/icons');
9
+ var reactIntl = require('react-intl');
10
+ var reactRouterDom = require('react-router-dom');
11
+ var LimitsModal = require('../../components/LimitsModal.js');
12
+ var constants = require('../../constants.js');
13
+ var hooks = require('../../modules/hooks.js');
14
+ var contentManager = require('../../services/content-manager.js');
15
+ var Layout = require('./components/Layout.js');
16
+ var useReviewWorkflows = require('./hooks/useReviewWorkflows.js');
17
+
18
+ function _interopNamespaceDefault(e) {
19
+ var n = Object.create(null);
20
+ if (e) {
21
+ Object.keys(e).forEach(function (k) {
22
+ if (k !== 'default') {
23
+ var d = Object.getOwnPropertyDescriptor(e, k);
24
+ Object.defineProperty(n, k, d.get ? d : {
25
+ enumerable: true,
26
+ get: function () { return e[k]; }
27
+ });
28
+ }
29
+ });
30
+ }
31
+ n.default = e;
32
+ return Object.freeze(n);
33
+ }
34
+
35
+ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
36
+
37
+ const ReviewWorkflowsListView = ()=>{
38
+ const { formatMessage } = reactIntl.useIntl();
39
+ const navigate = reactRouterDom.useNavigate();
40
+ const { trackUsage } = strapiAdmin.useTracking();
41
+ const [workflowToDelete, setWorkflowToDelete] = React__namespace.useState(null);
42
+ const [showLimitModal, setShowLimitModal] = React__namespace.useState(false);
43
+ const { data, isLoading: isLoadingModels } = contentManager.useGetContentTypesQuery();
44
+ const { meta, workflows, isLoading, delete: deleteAction } = useReviewWorkflows.useReviewWorkflows();
45
+ const { getFeature, isLoading: isLicenseLoading } = ee.useLicenseLimits();
46
+ const permissions = hooks.useTypedSelector((state)=>state.admin_app.permissions.settings?.['review-workflows']);
47
+ const { allowedActions: { canCreate, canRead, canUpdate, canDelete } } = strapiAdmin.useRBAC(permissions);
48
+ const limits = getFeature('review-workflows');
49
+ const numberOfWorkflows = limits?.[constants.CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];
50
+ const handleDeleteWorkflow = (workflowId)=>{
51
+ setWorkflowToDelete(workflowId);
52
+ };
53
+ const toggleConfirmDeleteDialog = ()=>{
54
+ setWorkflowToDelete(null);
55
+ };
56
+ const handleConfirmDeleteDialog = async ()=>{
57
+ if (!workflowToDelete) return;
58
+ await deleteAction(workflowToDelete);
59
+ setWorkflowToDelete(null);
60
+ };
61
+ const handleCreateClick = (event)=>{
62
+ event.preventDefault();
63
+ /**
64
+ * If the current license has a workflow limit:
65
+ * check if the total count of workflows exceeds that limit. If so,
66
+ * prevent the navigation and show the limits overlay.
67
+ *
68
+ * If the current license does not have a limit (e.g. offline license):
69
+ * allow the user to navigate to the create-view. In case they exceed the
70
+ * current hard-limit of 200 they will see an error thrown by the API.
71
+ */ if (numberOfWorkflows && meta && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {
72
+ event.preventDefault();
73
+ setShowLimitModal(true);
74
+ } else {
75
+ navigate('create');
76
+ trackUsage('willCreateWorkflow');
77
+ }
78
+ };
79
+ /**
80
+ * If the current license has a limit:
81
+ * check if the total count of workflows or stages exceeds that limit and display
82
+ * the limits modal on page load. It can be closed by the user, but the
83
+ * API will throw an error in case they try to create a new workflow or update the
84
+ * stages.
85
+ *
86
+ * If the current license does not have a limit (e.g. offline license):
87
+ * do nothing (for now). In case they are trying to create the 201st workflow/ stage
88
+ * the API will throw an error.
89
+ *
90
+ */ React__namespace.useEffect(()=>{
91
+ if (!isLoading && !isLicenseLoading) {
92
+ if (numberOfWorkflows && meta && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {
93
+ setShowLimitModal(true);
94
+ }
95
+ }
96
+ }, [
97
+ isLicenseLoading,
98
+ isLoading,
99
+ meta,
100
+ meta?.workflowCount,
101
+ numberOfWorkflows
102
+ ]);
103
+ const headers = [
104
+ {
105
+ label: formatMessage({
106
+ id: 'Settings.review-workflows.list.page.list.column.name.title',
107
+ defaultMessage: 'Name'
108
+ }),
109
+ name: 'name'
110
+ },
111
+ {
112
+ label: formatMessage({
113
+ id: 'Settings.review-workflows.list.page.list.column.stages.title',
114
+ defaultMessage: 'Stages'
115
+ }),
116
+ name: 'stages'
117
+ },
118
+ {
119
+ label: formatMessage({
120
+ id: 'Settings.review-workflows.list.page.list.column.contentTypes.title',
121
+ defaultMessage: 'Content Types'
122
+ }),
123
+ name: 'content-types'
124
+ }
125
+ ];
126
+ if (isLoading || isLoadingModels) {
127
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
128
+ }
129
+ const contentTypes = Object.values(data ?? {}).reduce((acc, curr)=>{
130
+ acc.push(...curr);
131
+ return acc;
132
+ }, []);
133
+ return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
134
+ children: [
135
+ /*#__PURE__*/ jsxRuntime.jsx(Layout.Header, {
136
+ primaryAction: canCreate ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.LinkButton, {
137
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {}),
138
+ size: "S",
139
+ tag: reactRouterDom.NavLink,
140
+ to: "create",
141
+ onClick: handleCreateClick,
142
+ children: formatMessage({
143
+ id: 'Settings.review-workflows.list.page.create',
144
+ defaultMessage: 'Create new workflow'
145
+ })
146
+ }) : null,
147
+ subtitle: formatMessage({
148
+ id: 'Settings.review-workflows.list.page.subtitle',
149
+ defaultMessage: 'Manage your content review process'
150
+ }),
151
+ title: formatMessage({
152
+ id: 'Settings.review-workflows.list.page.title',
153
+ defaultMessage: 'Review Workflows'
154
+ })
155
+ }),
156
+ /*#__PURE__*/ jsxRuntime.jsxs(Layout.Root, {
157
+ children: [
158
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Root, {
159
+ isLoading: isLoading,
160
+ rows: workflows,
161
+ footer: canCreate ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.TFooter, {
162
+ cursor: "pointer",
163
+ icon: /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {}),
164
+ onClick: handleCreateClick,
165
+ children: formatMessage({
166
+ id: 'Settings.review-workflows.list.page.create',
167
+ defaultMessage: 'Create new workflow'
168
+ })
169
+ }) : null,
170
+ headers: headers,
171
+ children: /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Table.Content, {
172
+ children: [
173
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Head, {
174
+ children: headers.map((head)=>/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.HeaderCell, {
175
+ ...head
176
+ }, head.name))
177
+ }),
178
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Body, {
179
+ children: workflows.map((workflow)=>/*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Table.Row, {
180
+ onClick: ()=>{
181
+ navigate(`${workflow.id}`);
182
+ },
183
+ children: [
184
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
185
+ width: "25rem",
186
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
187
+ textColor: "neutral800",
188
+ fontWeight: "bold",
189
+ ellipsis: true,
190
+ children: workflow.name
191
+ })
192
+ }),
193
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
194
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
195
+ textColor: "neutral800",
196
+ children: workflow.stages.length
197
+ })
198
+ }),
199
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
200
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
201
+ textColor: "neutral800",
202
+ children: workflow.contentTypes.map((uid)=>{
203
+ const contentType = contentTypes.find((contentType)=>contentType.uid === uid);
204
+ return contentType?.info.displayName ?? '';
205
+ }).join(', ')
206
+ })
207
+ }),
208
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
209
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
210
+ alignItems: "center",
211
+ justifyContent: "end",
212
+ children: [
213
+ canRead || canUpdate ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
214
+ tag: reactRouterDom.Link,
215
+ to: workflow.id.toString(),
216
+ label: formatMessage({
217
+ id: 'Settings.review-workflows.list.page.list.column.actions.edit.label',
218
+ defaultMessage: 'Edit {name}'
219
+ }, {
220
+ name: workflow.name
221
+ }),
222
+ variant: "ghost",
223
+ children: /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {})
224
+ }) : null,
225
+ workflows.length > 1 && canDelete ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
226
+ withTooltip: false,
227
+ label: formatMessage({
228
+ id: 'Settings.review-workflows.list.page.list.column.actions.delete.label',
229
+ defaultMessage: 'Delete {name}'
230
+ }, {
231
+ name: 'Default workflow'
232
+ }),
233
+ variant: "ghost",
234
+ onClick: (e)=>{
235
+ e.stopPropagation();
236
+ handleDeleteWorkflow(String(workflow.id));
237
+ },
238
+ children: /*#__PURE__*/ jsxRuntime.jsx(icons.Trash, {})
239
+ }) : null
240
+ ]
241
+ })
242
+ })
243
+ ]
244
+ }, workflow.id))
245
+ })
246
+ ]
247
+ })
248
+ }),
249
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Root, {
250
+ open: !!workflowToDelete,
251
+ onOpenChange: toggleConfirmDeleteDialog,
252
+ children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, {
253
+ onConfirm: handleConfirmDeleteDialog,
254
+ children: formatMessage({
255
+ id: 'Settings.review-workflows.list.page.delete.confirm.body',
256
+ defaultMessage: 'If you remove this worfklow, all stage-related information will be removed for this content-type. Are you sure you want to remove it?'
257
+ })
258
+ })
259
+ }),
260
+ /*#__PURE__*/ jsxRuntime.jsxs(LimitsModal.LimitsModal.Root, {
261
+ open: showLimitModal,
262
+ onOpenChange: ()=>setShowLimitModal(false),
263
+ children: [
264
+ /*#__PURE__*/ jsxRuntime.jsx(LimitsModal.LimitsModal.Title, {
265
+ children: formatMessage({
266
+ id: 'Settings.review-workflows.list.page.workflows.limit.title',
267
+ defaultMessage: 'You’ve reached the limit of workflows in your plan'
268
+ })
269
+ }),
270
+ /*#__PURE__*/ jsxRuntime.jsx(LimitsModal.LimitsModal.Body, {
271
+ children: formatMessage({
272
+ id: 'Settings.review-workflows.list.page.workflows.limit.body',
273
+ defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.'
274
+ })
275
+ })
276
+ ]
277
+ })
278
+ ]
279
+ })
280
+ ]
281
+ });
282
+ };
283
+ const ProtectedListPage = ()=>{
284
+ const permissions = hooks.useTypedSelector((state)=>state.admin_app.permissions.settings?.['review-workflows']?.main);
285
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Protect, {
286
+ permissions: permissions,
287
+ children: /*#__PURE__*/ jsxRuntime.jsx(ReviewWorkflowsListView, {})
288
+ });
289
+ };
290
+
291
+ exports.ProtectedListPage = ProtectedListPage;
292
+ exports.ReviewWorkflowsListView = ReviewWorkflowsListView;
293
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../admin/src/routes/settings/index.tsx"],"sourcesContent":["/* eslint-disable check-file/no-index */\n/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, useTracking, ConfirmDialog, useRBAC, Table } from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport { Flex, IconButton, TFooter, Typography, LinkButton, Dialog } from '@strapi/design-system';\nimport { Pencil, Plus, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, Link, useNavigate } from 'react-router-dom';\n\nimport { LimitsModal } from '../../components/LimitsModal';\nimport { CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME } from '../../constants';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { ContentType, useGetContentTypesQuery } from '../../services/content-manager';\n\nimport * as Layout from './components/Layout';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\n\nexport const ReviewWorkflowsListView = () => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const [workflowToDelete, setWorkflowToDelete] = React.useState<string | null>(null);\n const [showLimitModal, setShowLimitModal] = React.useState<boolean>(false);\n const { data, isLoading: isLoadingModels } = useGetContentTypesQuery();\n const { meta, workflows, isLoading, delete: deleteAction } = useReviewWorkflows();\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['review-workflows']\n );\n const {\n allowedActions: { canCreate, canRead, canUpdate, canDelete },\n } = useRBAC(permissions);\n\n const limits = getFeature('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] as string;\n\n const handleDeleteWorkflow = (workflowId: string) => {\n setWorkflowToDelete(workflowId);\n };\n\n const toggleConfirmDeleteDialog = () => {\n setWorkflowToDelete(null);\n };\n\n const handleConfirmDeleteDialog = async () => {\n if (!workflowToDelete) return;\n\n await deleteAction(workflowToDelete);\n\n setWorkflowToDelete(null);\n };\n\n const handleCreateClick: React.MouseEventHandler<HTMLAnchorElement> &\n ((event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void) = (event) => {\n event.preventDefault();\n /**\n * If the current license has a workflow limit:\n * check if the total count of workflows exceeds that limit. If so,\n * prevent the navigation and show the limits overlay.\n *\n * If the current license does not have a limit (e.g. offline license):\n * allow the user to navigate to the create-view. In case they exceed the\n * current hard-limit of 200 they will see an error thrown by the API.\n */\n\n if (numberOfWorkflows && meta && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {\n event.preventDefault();\n setShowLimitModal(true);\n } else {\n navigate('create');\n trackUsage('willCreateWorkflow');\n }\n };\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoading && !isLicenseLoading) {\n if (numberOfWorkflows && meta && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal(true);\n }\n }\n }, [isLicenseLoading, isLoading, meta, meta?.workflowCount, numberOfWorkflows]);\n\n const headers = [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.name.title',\n defaultMessage: 'Name',\n }),\n name: 'name',\n },\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.stages.title',\n defaultMessage: 'Stages',\n }),\n name: 'stages',\n },\n {\n label: formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.contentTypes.title',\n defaultMessage: 'Content Types',\n }),\n name: 'content-types',\n },\n ];\n\n if (isLoading || isLoadingModels) {\n return <Page.Loading />;\n }\n\n const contentTypes = Object.values(data ?? {}).reduce<ContentType[]>((acc, curr) => {\n acc.push(...curr);\n return acc;\n }, []);\n\n return (\n <>\n <Layout.Header\n primaryAction={\n canCreate ? (\n <LinkButton\n startIcon={<Plus />}\n size=\"S\"\n tag={NavLink}\n to=\"create\"\n onClick={handleCreateClick}\n >\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </LinkButton>\n ) : null\n }\n subtitle={formatMessage({\n id: 'Settings.review-workflows.list.page.subtitle',\n defaultMessage: 'Manage your content review process',\n })}\n title={formatMessage({\n id: 'Settings.review-workflows.list.page.title',\n defaultMessage: 'Review Workflows',\n })}\n />\n\n <Layout.Root>\n <Table.Root\n isLoading={isLoading}\n rows={workflows}\n footer={\n canCreate ? (\n <TFooter cursor=\"pointer\" icon={<Plus />} onClick={handleCreateClick}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </TFooter>\n ) : null\n }\n headers={headers}\n >\n <Table.Content>\n <Table.Head>\n {headers.map((head) => (\n <Table.HeaderCell key={head.name} {...head} />\n ))}\n </Table.Head>\n\n <Table.Body>\n {workflows.map((workflow) => (\n <Table.Row\n onClick={() => {\n navigate(`${workflow.id}`);\n }}\n key={workflow.id}\n >\n <Table.Cell width=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {workflow.name}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">{workflow.stages.length}</Typography>\n </Table.Cell>\n <Table.Cell>\n <Typography textColor=\"neutral800\">\n {workflow.contentTypes\n .map((uid: string) => {\n const contentType = contentTypes.find(\n (contentType) => contentType.uid === uid\n );\n\n return contentType?.info.displayName ?? '';\n })\n .join(', ')}\n </Typography>\n </Table.Cell>\n <Table.Cell>\n <Flex alignItems=\"center\" justifyContent=\"end\">\n {canRead || canUpdate ? (\n <IconButton\n tag={Link}\n to={workflow.id.toString()}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.edit.label',\n defaultMessage: 'Edit {name}',\n },\n { name: workflow.name }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {workflows.length > 1 && canDelete ? (\n <IconButton\n withTooltip={false}\n label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.delete.label',\n defaultMessage: 'Delete {name}',\n },\n { name: 'Default workflow' }\n )}\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteWorkflow(String(workflow.id));\n }}\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Dialog.Root open={!!workflowToDelete} onOpenChange={toggleConfirmDeleteDialog}>\n <ConfirmDialog onConfirm={handleConfirmDeleteDialog}>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.delete.confirm.body',\n defaultMessage:\n 'If you remove this worfklow, all stage-related information will be removed for this content-type. Are you sure you want to remove it?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n\n <LimitsModal.Root open={showLimitModal} onOpenChange={() => setShowLimitModal(false)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </Layout.Root>\n </>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['review-workflows']?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ReviewWorkflowsListView />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage };\n"],"names":["ReviewWorkflowsListView","formatMessage","useIntl","navigate","useNavigate","trackUsage","useTracking","workflowToDelete","setWorkflowToDelete","React","useState","showLimitModal","setShowLimitModal","data","isLoading","isLoadingModels","useGetContentTypesQuery","meta","workflows","delete","deleteAction","useReviewWorkflows","getFeature","isLicenseLoading","useLicenseLimits","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canCreate","canRead","canUpdate","canDelete","useRBAC","limits","numberOfWorkflows","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","handleDeleteWorkflow","workflowId","toggleConfirmDeleteDialog","handleConfirmDeleteDialog","handleCreateClick","event","preventDefault","workflowCount","parseInt","useEffect","headers","label","id","defaultMessage","name","_jsx","Page","Loading","contentTypes","Object","values","reduce","acc","curr","push","_jsxs","_Fragment","Layout","primaryAction","LinkButton","startIcon","Plus","size","tag","NavLink","to","onClick","subtitle","title","Table","Root","rows","footer","TFooter","cursor","icon","Content","Head","map","head","HeaderCell","Body","workflow","Row","Cell","width","Typography","textColor","fontWeight","ellipsis","stages","length","uid","contentType","find","info","displayName","join","Flex","alignItems","justifyContent","IconButton","Link","toString","variant","Pencil","withTooltip","e","stopPropagation","String","Trash","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","LimitsModal","Title","ProtectedListPage","main","Protect"],"mappings":"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"}
@@ -0,0 +1,271 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { useTracking, useRBAC, Page, Table, ConfirmDialog } from '@strapi/admin/strapi-admin';
4
+ import { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';
5
+ import { LinkButton, TFooter, Typography, Flex, IconButton, Dialog } from '@strapi/design-system';
6
+ import { Plus, Pencil, Trash } from '@strapi/icons';
7
+ import { useIntl } from 'react-intl';
8
+ import { useNavigate, NavLink, Link } from 'react-router-dom';
9
+ import { LimitsModal } from '../../components/LimitsModal.mjs';
10
+ import { CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME } from '../../constants.mjs';
11
+ import { useTypedSelector } from '../../modules/hooks.mjs';
12
+ import { useGetContentTypesQuery } from '../../services/content-manager.mjs';
13
+ import { Header, Root } from './components/Layout.mjs';
14
+ import { useReviewWorkflows } from './hooks/useReviewWorkflows.mjs';
15
+
16
+ const ReviewWorkflowsListView = ()=>{
17
+ const { formatMessage } = useIntl();
18
+ const navigate = useNavigate();
19
+ const { trackUsage } = useTracking();
20
+ const [workflowToDelete, setWorkflowToDelete] = React.useState(null);
21
+ const [showLimitModal, setShowLimitModal] = React.useState(false);
22
+ const { data, isLoading: isLoadingModels } = useGetContentTypesQuery();
23
+ const { meta, workflows, isLoading, delete: deleteAction } = useReviewWorkflows();
24
+ const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();
25
+ const permissions = useTypedSelector((state)=>state.admin_app.permissions.settings?.['review-workflows']);
26
+ const { allowedActions: { canCreate, canRead, canUpdate, canDelete } } = useRBAC(permissions);
27
+ const limits = getFeature('review-workflows');
28
+ const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];
29
+ const handleDeleteWorkflow = (workflowId)=>{
30
+ setWorkflowToDelete(workflowId);
31
+ };
32
+ const toggleConfirmDeleteDialog = ()=>{
33
+ setWorkflowToDelete(null);
34
+ };
35
+ const handleConfirmDeleteDialog = async ()=>{
36
+ if (!workflowToDelete) return;
37
+ await deleteAction(workflowToDelete);
38
+ setWorkflowToDelete(null);
39
+ };
40
+ const handleCreateClick = (event)=>{
41
+ event.preventDefault();
42
+ /**
43
+ * If the current license has a workflow limit:
44
+ * check if the total count of workflows exceeds that limit. If so,
45
+ * prevent the navigation and show the limits overlay.
46
+ *
47
+ * If the current license does not have a limit (e.g. offline license):
48
+ * allow the user to navigate to the create-view. In case they exceed the
49
+ * current hard-limit of 200 they will see an error thrown by the API.
50
+ */ if (numberOfWorkflows && meta && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {
51
+ event.preventDefault();
52
+ setShowLimitModal(true);
53
+ } else {
54
+ navigate('create');
55
+ trackUsage('willCreateWorkflow');
56
+ }
57
+ };
58
+ /**
59
+ * If the current license has a limit:
60
+ * check if the total count of workflows or stages exceeds that limit and display
61
+ * the limits modal on page load. It can be closed by the user, but the
62
+ * API will throw an error in case they try to create a new workflow or update the
63
+ * stages.
64
+ *
65
+ * If the current license does not have a limit (e.g. offline license):
66
+ * do nothing (for now). In case they are trying to create the 201st workflow/ stage
67
+ * the API will throw an error.
68
+ *
69
+ */ React.useEffect(()=>{
70
+ if (!isLoading && !isLicenseLoading) {
71
+ if (numberOfWorkflows && meta && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {
72
+ setShowLimitModal(true);
73
+ }
74
+ }
75
+ }, [
76
+ isLicenseLoading,
77
+ isLoading,
78
+ meta,
79
+ meta?.workflowCount,
80
+ numberOfWorkflows
81
+ ]);
82
+ const headers = [
83
+ {
84
+ label: formatMessage({
85
+ id: 'Settings.review-workflows.list.page.list.column.name.title',
86
+ defaultMessage: 'Name'
87
+ }),
88
+ name: 'name'
89
+ },
90
+ {
91
+ label: formatMessage({
92
+ id: 'Settings.review-workflows.list.page.list.column.stages.title',
93
+ defaultMessage: 'Stages'
94
+ }),
95
+ name: 'stages'
96
+ },
97
+ {
98
+ label: formatMessage({
99
+ id: 'Settings.review-workflows.list.page.list.column.contentTypes.title',
100
+ defaultMessage: 'Content Types'
101
+ }),
102
+ name: 'content-types'
103
+ }
104
+ ];
105
+ if (isLoading || isLoadingModels) {
106
+ return /*#__PURE__*/ jsx(Page.Loading, {});
107
+ }
108
+ const contentTypes = Object.values(data ?? {}).reduce((acc, curr)=>{
109
+ acc.push(...curr);
110
+ return acc;
111
+ }, []);
112
+ return /*#__PURE__*/ jsxs(Fragment, {
113
+ children: [
114
+ /*#__PURE__*/ jsx(Header, {
115
+ primaryAction: canCreate ? /*#__PURE__*/ jsx(LinkButton, {
116
+ startIcon: /*#__PURE__*/ jsx(Plus, {}),
117
+ size: "S",
118
+ tag: NavLink,
119
+ to: "create",
120
+ onClick: handleCreateClick,
121
+ children: formatMessage({
122
+ id: 'Settings.review-workflows.list.page.create',
123
+ defaultMessage: 'Create new workflow'
124
+ })
125
+ }) : null,
126
+ subtitle: formatMessage({
127
+ id: 'Settings.review-workflows.list.page.subtitle',
128
+ defaultMessage: 'Manage your content review process'
129
+ }),
130
+ title: formatMessage({
131
+ id: 'Settings.review-workflows.list.page.title',
132
+ defaultMessage: 'Review Workflows'
133
+ })
134
+ }),
135
+ /*#__PURE__*/ jsxs(Root, {
136
+ children: [
137
+ /*#__PURE__*/ jsx(Table.Root, {
138
+ isLoading: isLoading,
139
+ rows: workflows,
140
+ footer: canCreate ? /*#__PURE__*/ jsx(TFooter, {
141
+ cursor: "pointer",
142
+ icon: /*#__PURE__*/ jsx(Plus, {}),
143
+ onClick: handleCreateClick,
144
+ children: formatMessage({
145
+ id: 'Settings.review-workflows.list.page.create',
146
+ defaultMessage: 'Create new workflow'
147
+ })
148
+ }) : null,
149
+ headers: headers,
150
+ children: /*#__PURE__*/ jsxs(Table.Content, {
151
+ children: [
152
+ /*#__PURE__*/ jsx(Table.Head, {
153
+ children: headers.map((head)=>/*#__PURE__*/ jsx(Table.HeaderCell, {
154
+ ...head
155
+ }, head.name))
156
+ }),
157
+ /*#__PURE__*/ jsx(Table.Body, {
158
+ children: workflows.map((workflow)=>/*#__PURE__*/ jsxs(Table.Row, {
159
+ onClick: ()=>{
160
+ navigate(`${workflow.id}`);
161
+ },
162
+ children: [
163
+ /*#__PURE__*/ jsx(Table.Cell, {
164
+ width: "25rem",
165
+ children: /*#__PURE__*/ jsx(Typography, {
166
+ textColor: "neutral800",
167
+ fontWeight: "bold",
168
+ ellipsis: true,
169
+ children: workflow.name
170
+ })
171
+ }),
172
+ /*#__PURE__*/ jsx(Table.Cell, {
173
+ children: /*#__PURE__*/ jsx(Typography, {
174
+ textColor: "neutral800",
175
+ children: workflow.stages.length
176
+ })
177
+ }),
178
+ /*#__PURE__*/ jsx(Table.Cell, {
179
+ children: /*#__PURE__*/ jsx(Typography, {
180
+ textColor: "neutral800",
181
+ children: workflow.contentTypes.map((uid)=>{
182
+ const contentType = contentTypes.find((contentType)=>contentType.uid === uid);
183
+ return contentType?.info.displayName ?? '';
184
+ }).join(', ')
185
+ })
186
+ }),
187
+ /*#__PURE__*/ jsx(Table.Cell, {
188
+ children: /*#__PURE__*/ jsxs(Flex, {
189
+ alignItems: "center",
190
+ justifyContent: "end",
191
+ children: [
192
+ canRead || canUpdate ? /*#__PURE__*/ jsx(IconButton, {
193
+ tag: Link,
194
+ to: workflow.id.toString(),
195
+ label: formatMessage({
196
+ id: 'Settings.review-workflows.list.page.list.column.actions.edit.label',
197
+ defaultMessage: 'Edit {name}'
198
+ }, {
199
+ name: workflow.name
200
+ }),
201
+ variant: "ghost",
202
+ children: /*#__PURE__*/ jsx(Pencil, {})
203
+ }) : null,
204
+ workflows.length > 1 && canDelete ? /*#__PURE__*/ jsx(IconButton, {
205
+ withTooltip: false,
206
+ label: formatMessage({
207
+ id: 'Settings.review-workflows.list.page.list.column.actions.delete.label',
208
+ defaultMessage: 'Delete {name}'
209
+ }, {
210
+ name: 'Default workflow'
211
+ }),
212
+ variant: "ghost",
213
+ onClick: (e)=>{
214
+ e.stopPropagation();
215
+ handleDeleteWorkflow(String(workflow.id));
216
+ },
217
+ children: /*#__PURE__*/ jsx(Trash, {})
218
+ }) : null
219
+ ]
220
+ })
221
+ })
222
+ ]
223
+ }, workflow.id))
224
+ })
225
+ ]
226
+ })
227
+ }),
228
+ /*#__PURE__*/ jsx(Dialog.Root, {
229
+ open: !!workflowToDelete,
230
+ onOpenChange: toggleConfirmDeleteDialog,
231
+ children: /*#__PURE__*/ jsx(ConfirmDialog, {
232
+ onConfirm: handleConfirmDeleteDialog,
233
+ children: formatMessage({
234
+ id: 'Settings.review-workflows.list.page.delete.confirm.body',
235
+ defaultMessage: 'If you remove this worfklow, all stage-related information will be removed for this content-type. Are you sure you want to remove it?'
236
+ })
237
+ })
238
+ }),
239
+ /*#__PURE__*/ jsxs(LimitsModal.Root, {
240
+ open: showLimitModal,
241
+ onOpenChange: ()=>setShowLimitModal(false),
242
+ children: [
243
+ /*#__PURE__*/ jsx(LimitsModal.Title, {
244
+ children: formatMessage({
245
+ id: 'Settings.review-workflows.list.page.workflows.limit.title',
246
+ defaultMessage: 'You’ve reached the limit of workflows in your plan'
247
+ })
248
+ }),
249
+ /*#__PURE__*/ jsx(LimitsModal.Body, {
250
+ children: formatMessage({
251
+ id: 'Settings.review-workflows.list.page.workflows.limit.body',
252
+ defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.'
253
+ })
254
+ })
255
+ ]
256
+ })
257
+ ]
258
+ })
259
+ ]
260
+ });
261
+ };
262
+ const ProtectedListPage = ()=>{
263
+ const permissions = useTypedSelector((state)=>state.admin_app.permissions.settings?.['review-workflows']?.main);
264
+ return /*#__PURE__*/ jsx(Page.Protect, {
265
+ permissions: permissions,
266
+ children: /*#__PURE__*/ jsx(ReviewWorkflowsListView, {})
267
+ });
268
+ };
269
+
270
+ export { ProtectedListPage, ReviewWorkflowsListView };
271
+ //# sourceMappingURL=index.mjs.map