@strapi/content-releases 0.0.0-next.6d384ed205b7f0792d9bea79195f01b30463cfa0 → 0.0.0-next.6e916d54c383bac6dfc70465a86b5436a698d516

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 (347) hide show
  1. package/LICENSE +17 -1
  2. package/dist/admin/assets/purchase-page-illustration-dark.svg.js +6 -0
  3. package/dist/admin/assets/purchase-page-illustration-dark.svg.js.map +1 -0
  4. package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs +4 -0
  5. package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs.map +1 -0
  6. package/dist/admin/assets/purchase-page-illustration-light.svg.js +6 -0
  7. package/dist/admin/assets/purchase-page-illustration-light.svg.js.map +1 -0
  8. package/dist/admin/assets/purchase-page-illustration-light.svg.mjs +4 -0
  9. package/dist/admin/assets/purchase-page-illustration-light.svg.mjs.map +1 -0
  10. package/dist/admin/components/EntryValidationPopover.js +344 -0
  11. package/dist/admin/components/EntryValidationPopover.js.map +1 -0
  12. package/dist/admin/components/EntryValidationPopover.mjs +342 -0
  13. package/dist/admin/components/EntryValidationPopover.mjs.map +1 -0
  14. package/dist/admin/components/RelativeTime.js +76 -0
  15. package/dist/admin/components/RelativeTime.js.map +1 -0
  16. package/dist/admin/components/RelativeTime.mjs +55 -0
  17. package/dist/admin/components/RelativeTime.mjs.map +1 -0
  18. package/dist/admin/components/ReleaseAction.js +203 -0
  19. package/dist/admin/components/ReleaseAction.js.map +1 -0
  20. package/dist/admin/components/ReleaseAction.mjs +201 -0
  21. package/dist/admin/components/ReleaseAction.mjs.map +1 -0
  22. package/dist/admin/components/ReleaseActionMenu.js +243 -0
  23. package/dist/admin/components/ReleaseActionMenu.js.map +1 -0
  24. package/dist/admin/components/ReleaseActionMenu.mjs +222 -0
  25. package/dist/admin/components/ReleaseActionMenu.mjs.map +1 -0
  26. package/dist/admin/components/ReleaseActionModal.js +268 -0
  27. package/dist/admin/components/ReleaseActionModal.js.map +1 -0
  28. package/dist/admin/components/ReleaseActionModal.mjs +244 -0
  29. package/dist/admin/components/ReleaseActionModal.mjs.map +1 -0
  30. package/dist/admin/components/ReleaseActionOptions.js +104 -0
  31. package/dist/admin/components/ReleaseActionOptions.js.map +1 -0
  32. package/dist/admin/components/ReleaseActionOptions.mjs +102 -0
  33. package/dist/admin/components/ReleaseActionOptions.mjs.map +1 -0
  34. package/dist/admin/components/ReleaseListCell.js +103 -0
  35. package/dist/admin/components/ReleaseListCell.js.map +1 -0
  36. package/dist/admin/components/ReleaseListCell.mjs +100 -0
  37. package/dist/admin/components/ReleaseListCell.mjs.map +1 -0
  38. package/dist/admin/components/ReleaseModal.js +323 -0
  39. package/dist/admin/components/ReleaseModal.js.map +1 -0
  40. package/dist/admin/components/ReleaseModal.mjs +302 -0
  41. package/dist/admin/components/ReleaseModal.mjs.map +1 -0
  42. package/dist/admin/components/ReleasesPanel.js +138 -0
  43. package/dist/admin/components/ReleasesPanel.js.map +1 -0
  44. package/dist/admin/components/ReleasesPanel.mjs +136 -0
  45. package/dist/admin/components/ReleasesPanel.mjs.map +1 -0
  46. package/dist/admin/constants.js +77 -0
  47. package/dist/admin/constants.js.map +1 -0
  48. package/dist/admin/constants.mjs +75 -0
  49. package/dist/admin/constants.mjs.map +1 -0
  50. package/dist/admin/index.js +125 -18
  51. package/dist/admin/index.js.map +1 -1
  52. package/dist/admin/index.mjs +120 -18
  53. package/dist/admin/index.mjs.map +1 -1
  54. package/dist/admin/modules/hooks.js +8 -0
  55. package/dist/admin/modules/hooks.js.map +1 -0
  56. package/dist/admin/modules/hooks.mjs +6 -0
  57. package/dist/admin/modules/hooks.mjs.map +1 -0
  58. package/dist/admin/pages/App.js +29 -0
  59. package/dist/admin/pages/App.js.map +1 -0
  60. package/dist/admin/pages/App.mjs +27 -0
  61. package/dist/admin/pages/App.mjs.map +1 -0
  62. package/dist/admin/pages/PurchaseContentReleases.js +192 -0
  63. package/dist/admin/pages/PurchaseContentReleases.js.map +1 -0
  64. package/dist/admin/pages/PurchaseContentReleases.mjs +190 -0
  65. package/dist/admin/pages/PurchaseContentReleases.mjs.map +1 -0
  66. package/dist/admin/pages/ReleaseDetailsPage.js +821 -0
  67. package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -0
  68. package/dist/admin/pages/ReleaseDetailsPage.mjs +800 -0
  69. package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -0
  70. package/dist/admin/pages/ReleasesPage.js +403 -0
  71. package/dist/admin/pages/ReleasesPage.js.map +1 -0
  72. package/dist/admin/pages/ReleasesPage.mjs +381 -0
  73. package/dist/admin/pages/ReleasesPage.mjs.map +1 -0
  74. package/dist/admin/pages/ReleasesSettingsPage.js +225 -0
  75. package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -0
  76. package/dist/admin/pages/ReleasesSettingsPage.mjs +223 -0
  77. package/dist/admin/pages/ReleasesSettingsPage.mjs.map +1 -0
  78. package/dist/admin/pluginId.js +6 -0
  79. package/dist/admin/pluginId.js.map +1 -0
  80. package/dist/admin/pluginId.mjs +4 -0
  81. package/dist/admin/pluginId.mjs.map +1 -0
  82. package/dist/admin/services/release.js +464 -0
  83. package/dist/admin/services/release.js.map +1 -0
  84. package/dist/admin/services/release.mjs +447 -0
  85. package/dist/admin/services/release.mjs.map +1 -0
  86. package/dist/admin/src/components/EntryValidationPopover.d.ts +13 -0
  87. package/dist/admin/src/components/RelativeTime.d.ts +28 -0
  88. package/dist/admin/src/components/ReleaseAction.d.ts +3 -0
  89. package/dist/admin/src/components/ReleaseActionMenu.d.ts +26 -0
  90. package/dist/admin/src/components/ReleaseActionModal.d.ts +24 -0
  91. package/dist/admin/src/components/ReleaseActionOptions.d.ts +9 -0
  92. package/dist/admin/src/components/ReleaseListCell.d.ts +28 -0
  93. package/dist/admin/src/components/ReleaseModal.d.ts +17 -0
  94. package/dist/admin/src/components/ReleasesPanel.d.ts +3 -0
  95. package/dist/admin/src/constants.d.ts +76 -0
  96. package/dist/admin/src/index.d.ts +3 -0
  97. package/dist/admin/src/modules/hooks.d.ts +7 -0
  98. package/dist/admin/src/pages/App.d.ts +1 -0
  99. package/dist/admin/src/pages/PurchaseContentReleases.d.ts +2 -0
  100. package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +2 -0
  101. package/dist/admin/src/pages/ReleasesPage.d.ts +8 -0
  102. package/dist/admin/src/pages/ReleasesSettingsPage.d.ts +1 -0
  103. package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +181 -0
  104. package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +39 -0
  105. package/dist/admin/src/pluginId.d.ts +1 -0
  106. package/dist/admin/src/services/release.d.ts +112 -0
  107. package/dist/admin/src/store/hooks.d.ts +7 -0
  108. package/dist/admin/src/utils/api.d.ts +6 -0
  109. package/dist/admin/src/utils/prefixPluginTranslations.d.ts +3 -0
  110. package/dist/admin/src/utils/time.d.ts +10 -0
  111. package/dist/admin/src/validation/schemas.d.ts +6 -0
  112. package/dist/admin/store/hooks.js +8 -0
  113. package/dist/admin/store/hooks.js.map +1 -0
  114. package/dist/admin/store/hooks.mjs +6 -0
  115. package/dist/admin/store/hooks.mjs.map +1 -0
  116. package/dist/admin/translations/en.json.js +108 -0
  117. package/dist/admin/translations/en.json.js.map +1 -0
  118. package/dist/admin/translations/en.json.mjs +106 -0
  119. package/dist/admin/translations/en.json.mjs.map +1 -0
  120. package/dist/admin/translations/uk.json.js +103 -0
  121. package/dist/admin/translations/uk.json.js.map +1 -0
  122. package/dist/admin/translations/uk.json.mjs +101 -0
  123. package/dist/admin/translations/uk.json.mjs.map +1 -0
  124. package/dist/admin/utils/api.js +8 -0
  125. package/dist/admin/utils/api.js.map +1 -0
  126. package/dist/admin/utils/api.mjs +6 -0
  127. package/dist/admin/utils/api.mjs.map +1 -0
  128. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  129. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  130. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  131. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  132. package/dist/admin/utils/time.js +42 -0
  133. package/dist/admin/utils/time.js.map +1 -0
  134. package/dist/admin/utils/time.mjs +39 -0
  135. package/dist/admin/utils/time.mjs.map +1 -0
  136. package/dist/admin/validation/schemas.js +65 -0
  137. package/dist/admin/validation/schemas.js.map +1 -0
  138. package/dist/admin/validation/schemas.mjs +43 -0
  139. package/dist/admin/validation/schemas.mjs.map +1 -0
  140. package/dist/server/bootstrap.js +68 -0
  141. package/dist/server/bootstrap.js.map +1 -0
  142. package/dist/server/bootstrap.mjs +66 -0
  143. package/dist/server/bootstrap.mjs.map +1 -0
  144. package/dist/server/constants.js +74 -0
  145. package/dist/server/constants.js.map +1 -0
  146. package/dist/server/constants.mjs +69 -0
  147. package/dist/server/constants.mjs.map +1 -0
  148. package/dist/server/content-types/index.js +12 -0
  149. package/dist/server/content-types/index.js.map +1 -0
  150. package/dist/server/content-types/index.mjs +10 -0
  151. package/dist/server/content-types/index.mjs.map +1 -0
  152. package/dist/server/content-types/release/index.js +10 -0
  153. package/dist/server/content-types/release/index.js.map +1 -0
  154. package/dist/server/content-types/release/index.mjs +8 -0
  155. package/dist/server/content-types/release/index.mjs.map +1 -0
  156. package/dist/server/content-types/release/schema.js +58 -0
  157. package/dist/server/content-types/release/schema.js.map +1 -0
  158. package/dist/server/content-types/release/schema.mjs +56 -0
  159. package/dist/server/content-types/release/schema.mjs.map +1 -0
  160. package/dist/server/content-types/release-action/index.js +10 -0
  161. package/dist/server/content-types/release-action/index.js.map +1 -0
  162. package/dist/server/content-types/release-action/index.mjs +8 -0
  163. package/dist/server/content-types/release-action/index.mjs.map +1 -0
  164. package/dist/server/content-types/release-action/schema.js +55 -0
  165. package/dist/server/content-types/release-action/schema.js.map +1 -0
  166. package/dist/server/content-types/release-action/schema.mjs +53 -0
  167. package/dist/server/content-types/release-action/schema.mjs.map +1 -0
  168. package/dist/server/controllers/index.js +14 -0
  169. package/dist/server/controllers/index.js.map +1 -0
  170. package/dist/server/controllers/index.mjs +12 -0
  171. package/dist/server/controllers/index.mjs.map +1 -0
  172. package/dist/server/controllers/release-action.js +150 -0
  173. package/dist/server/controllers/release-action.js.map +1 -0
  174. package/dist/server/controllers/release-action.mjs +148 -0
  175. package/dist/server/controllers/release-action.mjs.map +1 -0
  176. package/dist/server/controllers/release.js +302 -0
  177. package/dist/server/controllers/release.js.map +1 -0
  178. package/dist/server/controllers/release.mjs +300 -0
  179. package/dist/server/controllers/release.mjs.map +1 -0
  180. package/dist/server/controllers/settings.js +37 -0
  181. package/dist/server/controllers/settings.js.map +1 -0
  182. package/dist/server/controllers/settings.mjs +35 -0
  183. package/dist/server/controllers/settings.mjs.map +1 -0
  184. package/dist/server/controllers/validation/release-action.js +34 -0
  185. package/dist/server/controllers/validation/release-action.js.map +1 -0
  186. package/dist/server/controllers/validation/release-action.mjs +30 -0
  187. package/dist/server/controllers/validation/release-action.mjs.map +1 -0
  188. package/dist/server/controllers/validation/release.js +26 -0
  189. package/dist/server/controllers/validation/release.js.map +1 -0
  190. package/dist/server/controllers/validation/release.mjs +22 -0
  191. package/dist/server/controllers/validation/release.mjs.map +1 -0
  192. package/dist/server/controllers/validation/settings.js +32 -0
  193. package/dist/server/controllers/validation/settings.js.map +1 -0
  194. package/dist/server/controllers/validation/settings.mjs +10 -0
  195. package/dist/server/controllers/validation/settings.mjs.map +1 -0
  196. package/dist/server/destroy.js +15 -0
  197. package/dist/server/destroy.js.map +1 -0
  198. package/dist/server/destroy.mjs +13 -0
  199. package/dist/server/destroy.mjs.map +1 -0
  200. package/dist/server/index.js +25 -1209
  201. package/dist/server/index.js.map +1 -1
  202. package/dist/server/index.mjs +24 -1189
  203. package/dist/server/index.mjs.map +1 -1
  204. package/dist/server/middlewares/documents.js +104 -0
  205. package/dist/server/middlewares/documents.js.map +1 -0
  206. package/dist/server/middlewares/documents.mjs +101 -0
  207. package/dist/server/middlewares/documents.mjs.map +1 -0
  208. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js +51 -0
  209. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js.map +1 -0
  210. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs +49 -0
  211. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs.map +1 -0
  212. package/dist/server/migrations/index.js +205 -0
  213. package/dist/server/migrations/index.js.map +1 -0
  214. package/dist/server/migrations/index.mjs +198 -0
  215. package/dist/server/migrations/index.mjs.map +1 -0
  216. package/dist/server/register.js +23 -0
  217. package/dist/server/register.js.map +1 -0
  218. package/dist/server/register.mjs +21 -0
  219. package/dist/server/register.mjs.map +1 -0
  220. package/dist/server/routes/index.js +14 -0
  221. package/dist/server/routes/index.js.map +1 -0
  222. package/dist/server/routes/index.mjs +12 -0
  223. package/dist/server/routes/index.mjs.map +1 -0
  224. package/dist/server/routes/release-action.js +100 -0
  225. package/dist/server/routes/release-action.js.map +1 -0
  226. package/dist/server/routes/release-action.mjs +98 -0
  227. package/dist/server/routes/release-action.mjs.map +1 -0
  228. package/dist/server/routes/release.js +154 -0
  229. package/dist/server/routes/release.js.map +1 -0
  230. package/dist/server/routes/release.mjs +152 -0
  231. package/dist/server/routes/release.mjs.map +1 -0
  232. package/dist/server/routes/settings.js +46 -0
  233. package/dist/server/routes/settings.js.map +1 -0
  234. package/dist/server/routes/settings.mjs +44 -0
  235. package/dist/server/routes/settings.mjs.map +1 -0
  236. package/dist/server/services/index.js +18 -0
  237. package/dist/server/services/index.js.map +1 -0
  238. package/dist/server/services/index.mjs +16 -0
  239. package/dist/server/services/index.mjs.map +1 -0
  240. package/dist/server/services/release-action.js +324 -0
  241. package/dist/server/services/release-action.js.map +1 -0
  242. package/dist/server/services/release-action.mjs +322 -0
  243. package/dist/server/services/release-action.mjs.map +1 -0
  244. package/dist/server/services/release.js +324 -0
  245. package/dist/server/services/release.js.map +1 -0
  246. package/dist/server/services/release.mjs +322 -0
  247. package/dist/server/services/release.mjs.map +1 -0
  248. package/dist/server/services/scheduling.js +70 -0
  249. package/dist/server/services/scheduling.js.map +1 -0
  250. package/dist/server/services/scheduling.mjs +68 -0
  251. package/dist/server/services/scheduling.mjs.map +1 -0
  252. package/dist/server/services/settings.js +34 -0
  253. package/dist/server/services/settings.js.map +1 -0
  254. package/dist/server/services/settings.mjs +32 -0
  255. package/dist/server/services/settings.mjs.map +1 -0
  256. package/dist/server/services/validation.js +91 -0
  257. package/dist/server/services/validation.js.map +1 -0
  258. package/dist/server/services/validation.mjs +86 -0
  259. package/dist/server/services/validation.mjs.map +1 -0
  260. package/dist/server/src/bootstrap.d.ts +5 -0
  261. package/dist/server/src/bootstrap.d.ts.map +1 -0
  262. package/dist/server/src/constants.d.ts +21 -0
  263. package/dist/server/src/constants.d.ts.map +1 -0
  264. package/dist/server/src/content-types/index.d.ts +97 -0
  265. package/dist/server/src/content-types/index.d.ts.map +1 -0
  266. package/dist/server/src/content-types/release/index.d.ts +48 -0
  267. package/dist/server/src/content-types/release/index.d.ts.map +1 -0
  268. package/dist/server/src/content-types/release/schema.d.ts +47 -0
  269. package/dist/server/src/content-types/release/schema.d.ts.map +1 -0
  270. package/dist/server/src/content-types/release-action/index.d.ts +48 -0
  271. package/dist/server/src/content-types/release-action/index.d.ts.map +1 -0
  272. package/dist/server/src/content-types/release-action/schema.d.ts +47 -0
  273. package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -0
  274. package/dist/server/src/controllers/index.d.ts +25 -0
  275. package/dist/server/src/controllers/index.d.ts.map +1 -0
  276. package/dist/server/src/controllers/release-action.d.ts +10 -0
  277. package/dist/server/src/controllers/release-action.d.ts.map +1 -0
  278. package/dist/server/src/controllers/release.d.ts +18 -0
  279. package/dist/server/src/controllers/release.d.ts.map +1 -0
  280. package/dist/server/src/controllers/settings.d.ts +11 -0
  281. package/dist/server/src/controllers/settings.d.ts.map +1 -0
  282. package/dist/server/src/controllers/validation/release-action.d.ts +14 -0
  283. package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -0
  284. package/dist/server/src/controllers/validation/release.d.ts +4 -0
  285. package/dist/server/src/controllers/validation/release.d.ts.map +1 -0
  286. package/dist/server/src/controllers/validation/settings.d.ts +3 -0
  287. package/dist/server/src/controllers/validation/settings.d.ts.map +1 -0
  288. package/dist/server/src/destroy.d.ts +5 -0
  289. package/dist/server/src/destroy.d.ts.map +1 -0
  290. package/dist/server/src/index.d.ts +2111 -0
  291. package/dist/server/src/index.d.ts.map +1 -0
  292. package/dist/server/src/middlewares/documents.d.ts +6 -0
  293. package/dist/server/src/middlewares/documents.d.ts.map +1 -0
  294. package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts +9 -0
  295. package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts.map +1 -0
  296. package/dist/server/src/migrations/index.d.ts +13 -0
  297. package/dist/server/src/migrations/index.d.ts.map +1 -0
  298. package/dist/server/src/register.d.ts +5 -0
  299. package/dist/server/src/register.d.ts.map +1 -0
  300. package/dist/server/src/routes/index.d.ts +51 -0
  301. package/dist/server/src/routes/index.d.ts.map +1 -0
  302. package/dist/server/src/routes/release-action.d.ts +18 -0
  303. package/dist/server/src/routes/release-action.d.ts.map +1 -0
  304. package/dist/server/src/routes/release.d.ts +18 -0
  305. package/dist/server/src/routes/release.d.ts.map +1 -0
  306. package/dist/server/src/routes/settings.d.ts +18 -0
  307. package/dist/server/src/routes/settings.d.ts.map +1 -0
  308. package/dist/server/src/services/index.d.ts +1824 -0
  309. package/dist/server/src/services/index.d.ts.map +1 -0
  310. package/dist/server/src/services/release-action.d.ts +34 -0
  311. package/dist/server/src/services/release-action.d.ts.map +1 -0
  312. package/dist/server/src/services/release.d.ts +31 -0
  313. package/dist/server/src/services/release.d.ts.map +1 -0
  314. package/dist/server/src/services/scheduling.d.ts +18 -0
  315. package/dist/server/src/services/scheduling.d.ts.map +1 -0
  316. package/dist/server/src/services/settings.d.ts +13 -0
  317. package/dist/server/src/services/settings.d.ts.map +1 -0
  318. package/dist/server/src/services/validation.d.ts +18 -0
  319. package/dist/server/src/services/validation.d.ts.map +1 -0
  320. package/dist/server/src/utils/index.d.ts +35 -0
  321. package/dist/server/src/utils/index.d.ts.map +1 -0
  322. package/dist/server/utils/index.js +94 -0
  323. package/dist/server/utils/index.js.map +1 -0
  324. package/dist/server/utils/index.mjs +88 -0
  325. package/dist/server/utils/index.mjs.map +1 -0
  326. package/dist/shared/contracts/release-actions.d.ts +136 -0
  327. package/dist/shared/contracts/release-actions.d.ts.map +1 -0
  328. package/dist/shared/contracts/releases.d.ts +183 -0
  329. package/dist/shared/contracts/releases.d.ts.map +1 -0
  330. package/dist/shared/contracts/settings.d.ts +38 -0
  331. package/dist/shared/contracts/settings.d.ts.map +1 -0
  332. package/dist/shared/types.d.ts +23 -0
  333. package/dist/shared/types.d.ts.map +1 -0
  334. package/package.json +41 -41
  335. package/dist/_chunks/App-IQIHCiSO.js +0 -1098
  336. package/dist/_chunks/App-IQIHCiSO.js.map +0 -1
  337. package/dist/_chunks/App-WkwjSaDY.mjs +0 -1076
  338. package/dist/_chunks/App-WkwjSaDY.mjs.map +0 -1
  339. package/dist/_chunks/en-m9eTk4UF.mjs +0 -67
  340. package/dist/_chunks/en-m9eTk4UF.mjs.map +0 -1
  341. package/dist/_chunks/en-r9YocBH0.js +0 -67
  342. package/dist/_chunks/en-r9YocBH0.js.map +0 -1
  343. package/dist/_chunks/index-CyVlvX8h.mjs +0 -910
  344. package/dist/_chunks/index-CyVlvX8h.mjs.map +0 -1
  345. package/dist/_chunks/index-u_da7WHb.js +0 -931
  346. package/dist/_chunks/index-u_da7WHb.js.map +0 -1
  347. package/strapi-server.js +0 -3
@@ -1,1098 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const jsxRuntime = require("react/jsx-runtime");
4
- const helperPlugin = require("@strapi/helper-plugin");
5
- const reactRouterDom = require("react-router-dom");
6
- const index = require("./index-u_da7WHb.js");
7
- const React = require("react");
8
- const strapiAdmin = require("@strapi/admin/strapi-admin");
9
- const designSystem = require("@strapi/design-system");
10
- const v2 = require("@strapi/design-system/v2");
11
- const icons = require("@strapi/icons");
12
- const reactIntl = require("react-intl");
13
- const styled = require("styled-components");
14
- const formik = require("formik");
15
- const yup = require("yup");
16
- require("@reduxjs/toolkit/query");
17
- require("axios");
18
- require("@reduxjs/toolkit/query/react");
19
- require("react-redux");
20
- const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
21
- function _interopNamespace(e) {
22
- if (e && e.__esModule)
23
- return e;
24
- const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
25
- if (e) {
26
- for (const k in e) {
27
- if (k !== "default") {
28
- const d = Object.getOwnPropertyDescriptor(e, k);
29
- Object.defineProperty(n, k, d.get ? d : {
30
- enumerable: true,
31
- get: () => e[k]
32
- });
33
- }
34
- }
35
- }
36
- n.default = e;
37
- return Object.freeze(n);
38
- }
39
- const React__namespace = /* @__PURE__ */ _interopNamespace(React);
40
- const styled__default = /* @__PURE__ */ _interopDefault(styled);
41
- const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
42
- const RELEASE_SCHEMA = yup__namespace.object().shape({
43
- name: yup__namespace.string().trim().required(),
44
- // scheduledAt is a date, but we always receive strings from the client
45
- scheduledAt: yup__namespace.string()
46
- }).required().noUnknown();
47
- const ReleaseModal = ({
48
- handleClose,
49
- handleSubmit,
50
- initialValues,
51
- isLoading = false
52
- }) => {
53
- const { formatMessage } = reactIntl.useIntl();
54
- const { pathname } = reactRouterDom.useLocation();
55
- const isCreatingRelease = pathname === `/plugins/${index.pluginId}`;
56
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.ModalLayout, { onClose: handleClose, labelledBy: "title", children: [
57
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.ModalHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { id: "title", fontWeight: "bold", textColor: "neutral800", children: formatMessage(
58
- {
59
- id: "content-releases.modal.title",
60
- defaultMessage: "{isCreatingRelease, select, true {New release} other {Edit release}}"
61
- },
62
- { isCreatingRelease }
63
- ) }) }),
64
- /* @__PURE__ */ jsxRuntime.jsx(
65
- formik.Formik,
66
- {
67
- validateOnChange: false,
68
- onSubmit: handleSubmit,
69
- initialValues,
70
- validationSchema: RELEASE_SCHEMA,
71
- children: ({ values, errors, handleChange }) => /* @__PURE__ */ jsxRuntime.jsxs(formik.Form, { children: [
72
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.ModalBody, { children: /* @__PURE__ */ jsxRuntime.jsx(
73
- designSystem.TextInput,
74
- {
75
- label: formatMessage({
76
- id: "content-releases.modal.form.input.label.release-name",
77
- defaultMessage: "Name"
78
- }),
79
- name: "name",
80
- value: values.name,
81
- error: errors.name,
82
- onChange: handleChange,
83
- required: true
84
- }
85
- ) }),
86
- /* @__PURE__ */ jsxRuntime.jsx(
87
- designSystem.ModalFooter,
88
- {
89
- startActions: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { onClick: handleClose, variant: "tertiary", name: "cancel", children: formatMessage({ id: "cancel", defaultMessage: "Cancel" }) }),
90
- endActions: /* @__PURE__ */ jsxRuntime.jsx(
91
- designSystem.Button,
92
- {
93
- name: "submit",
94
- loading: isLoading,
95
- disabled: !values.name || values.name === initialValues.name,
96
- type: "submit",
97
- children: formatMessage(
98
- {
99
- id: "content-releases.modal.form.button.submit",
100
- defaultMessage: "{isCreatingRelease, select, true {Continue} other {Save}}"
101
- },
102
- { isCreatingRelease }
103
- )
104
- }
105
- )
106
- }
107
- )
108
- ] })
109
- }
110
- )
111
- ] });
112
- };
113
- const ReleaseInfoWrapper = styled__default.default(designSystem.Flex)`
114
- align-self: stretch;
115
- border-bottom-right-radius: ${({ theme }) => theme.borderRadius};
116
- border-bottom-left-radius: ${({ theme }) => theme.borderRadius};
117
- border-top: 1px solid ${({ theme }) => theme.colors.neutral150};
118
- `;
119
- const StyledFlex = styled__default.default(designSystem.Flex)`
120
- align-self: stretch;
121
- cursor: ${({ disabled }) => disabled ? "not-allowed" : "pointer"};
122
-
123
- svg path {
124
- fill: ${({ theme, disabled }) => disabled && theme.colors.neutral500};
125
- }
126
- span {
127
- color: ${({ theme, disabled }) => disabled && theme.colors.neutral500};
128
- }
129
- `;
130
- const PencilIcon = styled__default.default(icons.Pencil)`
131
- width: ${({ theme }) => theme.spaces[3]};
132
- height: ${({ theme }) => theme.spaces[3]};
133
- path {
134
- fill: ${({ theme }) => theme.colors.neutral600};
135
- }
136
- `;
137
- const TrashIcon = styled__default.default(icons.Trash)`
138
- width: ${({ theme }) => theme.spaces[3]};
139
- height: ${({ theme }) => theme.spaces[3]};
140
- path {
141
- fill: ${({ theme }) => theme.colors.danger600};
142
- }
143
- `;
144
- const TypographyMaxWidth = styled__default.default(designSystem.Typography)`
145
- max-width: 300px;
146
- `;
147
- const PopoverButton = ({ onClick, disabled, children }) => {
148
- return /* @__PURE__ */ jsxRuntime.jsx(
149
- StyledFlex,
150
- {
151
- paddingTop: 2,
152
- paddingBottom: 2,
153
- paddingLeft: 4,
154
- paddingRight: 4,
155
- alignItems: "center",
156
- gap: 2,
157
- as: "button",
158
- hasRadius: true,
159
- onClick,
160
- disabled,
161
- children
162
- }
163
- );
164
- };
165
- const EntryValidationText = ({ action, schema, components, entry }) => {
166
- const { formatMessage } = reactIntl.useIntl();
167
- const { validate } = strapiAdmin.unstable_useDocument();
168
- const { errors } = validate(entry, {
169
- contentType: schema,
170
- components,
171
- isCreatingEntry: false
172
- });
173
- if (Object.keys(errors).length > 0) {
174
- const validationErrorsMessages = Object.entries(errors).map(
175
- ([key, value]) => formatMessage(
176
- { id: `${value.id}.withField`, defaultMessage: value.defaultMessage },
177
- { field: key }
178
- )
179
- ).join(" ");
180
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
181
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { color: "danger600", as: icons.CrossCircle }),
182
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsxRuntime.jsx(TypographyMaxWidth, { textColor: "danger600", variant: "omega", fontWeight: "semiBold", ellipsis: true, children: validationErrorsMessages }) })
183
- ] });
184
- }
185
- if (action == "publish") {
186
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
187
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { color: "success600", as: icons.CheckCircle }),
188
- entry.publishedAt ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
189
- id: "content-releases.pages.ReleaseDetails.entry-validation.already-published",
190
- defaultMessage: "Already published"
191
- }) }) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: formatMessage({
192
- id: "content-releases.pages.ReleaseDetails.entry-validation.ready-to-publish",
193
- defaultMessage: "Ready to publish"
194
- }) })
195
- ] });
196
- }
197
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
198
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { color: "success600", as: icons.CheckCircle }),
199
- !entry.publishedAt ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
200
- id: "content-releases.pages.ReleaseDetails.entry-validation.already-unpublished",
201
- defaultMessage: "Already unpublished"
202
- }) }) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: formatMessage({
203
- id: "content-releases.pages.ReleaseDetails.entry-validation.ready-to-unpublish",
204
- defaultMessage: "Ready to unpublish"
205
- }) })
206
- ] });
207
- };
208
- const ReleaseDetailsLayout = ({
209
- toggleEditReleaseModal,
210
- toggleWarningSubmit,
211
- children
212
- }) => {
213
- const { formatMessage } = reactIntl.useIntl();
214
- const { releaseId } = reactRouterDom.useParams();
215
- const [isPopoverVisible, setIsPopoverVisible] = React__namespace.useState(false);
216
- const moreButtonRef = React__namespace.useRef(null);
217
- const {
218
- data,
219
- isLoading: isLoadingDetails,
220
- isError,
221
- error
222
- } = index.useGetReleaseQuery({ id: releaseId });
223
- const [publishRelease, { isLoading: isPublishing }] = index.usePublishReleaseMutation();
224
- const toggleNotification = helperPlugin.useNotification();
225
- const { formatAPIError } = helperPlugin.useAPIErrorHandler();
226
- const {
227
- allowedActions: { canUpdate, canDelete }
228
- } = helperPlugin.useRBAC(index.PERMISSIONS);
229
- const dispatch = index.useTypedDispatch();
230
- const { trackUsage } = helperPlugin.useTracking();
231
- const release = data?.data;
232
- const handleTogglePopover = () => {
233
- setIsPopoverVisible((prev) => !prev);
234
- };
235
- const openReleaseModal = () => {
236
- toggleEditReleaseModal();
237
- handleTogglePopover();
238
- };
239
- const handlePublishRelease = async () => {
240
- const response = await publishRelease({ id: releaseId });
241
- if ("data" in response) {
242
- toggleNotification({
243
- type: "success",
244
- message: formatMessage({
245
- id: "content-releases.pages.ReleaseDetails.publish-notification-success",
246
- defaultMessage: "Release was published successfully."
247
- })
248
- });
249
- const { totalEntries: totalEntries2, totalPublishedEntries, totalUnpublishedEntries } = response.data.meta;
250
- trackUsage("didPublishRelease", {
251
- totalEntries: totalEntries2,
252
- totalPublishedEntries,
253
- totalUnpublishedEntries
254
- });
255
- } else if (index.isAxiosError(response.error)) {
256
- toggleNotification({
257
- type: "warning",
258
- message: formatAPIError(response.error)
259
- });
260
- } else {
261
- toggleNotification({
262
- type: "warning",
263
- message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
264
- });
265
- }
266
- };
267
- const openWarningConfirmDialog = () => {
268
- toggleWarningSubmit();
269
- handleTogglePopover();
270
- };
271
- const handleRefresh = () => {
272
- dispatch(index.releaseApi.util.invalidateTags([{ type: "ReleaseAction", id: "LIST" }]));
273
- };
274
- const getCreatedByUser = () => {
275
- if (!release?.createdBy) {
276
- return null;
277
- }
278
- if (release.createdBy.username) {
279
- return release.createdBy.username;
280
- }
281
- if (release.createdBy.firstname) {
282
- return `${release.createdBy.firstname} ${release.createdBy.lastname || ""}`.trim();
283
- }
284
- return release.createdBy.email;
285
- };
286
- if (isLoadingDetails) {
287
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Main, { "aria-busy": isLoadingDetails, children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
288
- }
289
- if (isError || !release) {
290
- return /* @__PURE__ */ jsxRuntime.jsx(
291
- reactRouterDom.Redirect,
292
- {
293
- to: {
294
- pathname: "/plugins/content-releases",
295
- state: {
296
- errors: [
297
- {
298
- code: error?.code
299
- }
300
- ]
301
- }
302
- }
303
- }
304
- );
305
- }
306
- const totalEntries = release.actions.meta.count || 0;
307
- const hasCreatedByUser = Boolean(getCreatedByUser());
308
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Main, { "aria-busy": isLoadingDetails, children: [
309
- /* @__PURE__ */ jsxRuntime.jsx(
310
- designSystem.HeaderLayout,
311
- {
312
- title: release.name,
313
- subtitle: formatMessage(
314
- {
315
- id: "content-releases.pages.Details.header-subtitle",
316
- defaultMessage: "{number, plural, =0 {No entries} one {# entry} other {# entries}}"
317
- },
318
- { number: totalEntries }
319
- ),
320
- navigationAction: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Link, { startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.ArrowLeft, {}), to: "/plugins/content-releases", children: formatMessage({
321
- id: "global.back",
322
- defaultMessage: "Back"
323
- }) }),
324
- primaryAction: !release.releasedAt && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
325
- /* @__PURE__ */ jsxRuntime.jsx(
326
- designSystem.IconButton,
327
- {
328
- label: formatMessage({
329
- id: "content-releases.header.actions.open-release-actions",
330
- defaultMessage: "Release edit and delete menu"
331
- }),
332
- ref: moreButtonRef,
333
- onClick: handleTogglePopover,
334
- children: /* @__PURE__ */ jsxRuntime.jsx(icons.More, {})
335
- }
336
- ),
337
- isPopoverVisible && /* @__PURE__ */ jsxRuntime.jsxs(
338
- designSystem.Popover,
339
- {
340
- source: moreButtonRef,
341
- placement: "bottom-end",
342
- onDismiss: handleTogglePopover,
343
- spacing: 4,
344
- minWidth: "242px",
345
- children: [
346
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { alignItems: "center", justifyContent: "center", direction: "column", padding: 1, children: [
347
- /* @__PURE__ */ jsxRuntime.jsxs(PopoverButton, { disabled: !canUpdate, onClick: openReleaseModal, children: [
348
- /* @__PURE__ */ jsxRuntime.jsx(PencilIcon, {}),
349
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { ellipsis: true, children: formatMessage({
350
- id: "content-releases.header.actions.edit",
351
- defaultMessage: "Edit"
352
- }) })
353
- ] }),
354
- /* @__PURE__ */ jsxRuntime.jsxs(PopoverButton, { disabled: !canDelete, onClick: openWarningConfirmDialog, children: [
355
- /* @__PURE__ */ jsxRuntime.jsx(TrashIcon, {}),
356
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { ellipsis: true, textColor: "danger600", children: formatMessage({
357
- id: "content-releases.header.actions.delete",
358
- defaultMessage: "Delete"
359
- }) })
360
- ] })
361
- ] }),
362
- /* @__PURE__ */ jsxRuntime.jsxs(
363
- ReleaseInfoWrapper,
364
- {
365
- direction: "column",
366
- justifyContent: "center",
367
- alignItems: "flex-start",
368
- gap: 1,
369
- padding: 5,
370
- children: [
371
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", fontWeight: "bold", children: formatMessage({
372
- id: "content-releases.header.actions.created",
373
- defaultMessage: "Created"
374
- }) }),
375
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", color: "neutral300", children: [
376
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.RelativeTime, { timestamp: new Date(release.createdAt) }),
377
- formatMessage(
378
- {
379
- id: "content-releases.header.actions.created.description",
380
- defaultMessage: "{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}"
381
- },
382
- { createdBy: getCreatedByUser(), hasCreatedByUser }
383
- )
384
- ] })
385
- ]
386
- }
387
- )
388
- ]
389
- }
390
- ),
391
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { size: "S", variant: "tertiary", onClick: handleRefresh, children: formatMessage({
392
- id: "content-releases.header.actions.refresh",
393
- defaultMessage: "Refresh"
394
- }) }),
395
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: index.PERMISSIONS.publish, children: /* @__PURE__ */ jsxRuntime.jsx(
396
- designSystem.Button,
397
- {
398
- size: "S",
399
- variant: "default",
400
- onClick: handlePublishRelease,
401
- loading: isPublishing,
402
- disabled: release.actions.meta.count === 0,
403
- children: formatMessage({
404
- id: "content-releases.header.actions.publish",
405
- defaultMessage: "Publish"
406
- })
407
- }
408
- ) })
409
- ] })
410
- }
411
- ),
412
- children
413
- ] });
414
- };
415
- const GROUP_BY_OPTIONS = ["contentType", "locale", "action"];
416
- const getGroupByOptionLabel = (value) => {
417
- if (value === "locale") {
418
- return {
419
- id: "content-releases.pages.ReleaseDetails.groupBy.option.locales",
420
- defaultMessage: "Locales"
421
- };
422
- }
423
- if (value === "action") {
424
- return {
425
- id: "content-releases.pages.ReleaseDetails.groupBy.option.actions",
426
- defaultMessage: "Actions"
427
- };
428
- }
429
- return {
430
- id: "content-releases.pages.ReleaseDetails.groupBy.option.content-type",
431
- defaultMessage: "Content-Types"
432
- };
433
- };
434
- const ReleaseDetailsBody = () => {
435
- const { formatMessage } = reactIntl.useIntl();
436
- const { releaseId } = reactRouterDom.useParams();
437
- const [{ query }, setQuery] = helperPlugin.useQueryParams();
438
- const toggleNotification = helperPlugin.useNotification();
439
- const { formatAPIError } = helperPlugin.useAPIErrorHandler();
440
- const {
441
- data: releaseData,
442
- isLoading: isReleaseLoading,
443
- isError: isReleaseError,
444
- error: releaseError
445
- } = index.useGetReleaseQuery({ id: releaseId });
446
- const release = releaseData?.data;
447
- const selectedGroupBy = query?.groupBy || "contentType";
448
- const {
449
- isLoading,
450
- isFetching,
451
- isError,
452
- data,
453
- error: releaseActionsError
454
- } = index.useGetReleaseActionsQuery({
455
- ...query,
456
- releaseId
457
- });
458
- const [updateReleaseAction] = index.useUpdateReleaseActionMutation();
459
- const handleChangeType = async (e, actionId, actionPath) => {
460
- const response = await updateReleaseAction({
461
- params: {
462
- releaseId,
463
- actionId
464
- },
465
- body: {
466
- type: e.target.value
467
- },
468
- query,
469
- // We are passing the query params to make optimistic updates
470
- actionPath
471
- // We are passing the action path to found the position in the cache of the action for optimistic updates
472
- });
473
- if ("error" in response) {
474
- if (index.isAxiosError(response.error)) {
475
- toggleNotification({
476
- type: "warning",
477
- message: formatAPIError(response.error)
478
- });
479
- } else {
480
- toggleNotification({
481
- type: "warning",
482
- message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
483
- });
484
- }
485
- }
486
- };
487
- if (isLoading || isReleaseLoading) {
488
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
489
- }
490
- const releaseActions = data?.data;
491
- const releaseMeta = data?.meta;
492
- const contentTypes = releaseMeta?.contentTypes || {};
493
- const components = releaseMeta?.components || {};
494
- if (isReleaseError || !release) {
495
- const errorsArray = [];
496
- if (releaseError) {
497
- errorsArray.push({
498
- code: releaseError.code
499
- });
500
- }
501
- if (releaseActionsError) {
502
- errorsArray.push({
503
- code: releaseActionsError.code
504
- });
505
- }
506
- return /* @__PURE__ */ jsxRuntime.jsx(
507
- reactRouterDom.Redirect,
508
- {
509
- to: {
510
- pathname: "/plugins/content-releases",
511
- state: {
512
- errors: errorsArray
513
- }
514
- }
515
- }
516
- );
517
- }
518
- if (isError || !releaseActions) {
519
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.AnErrorOccurred, {}) });
520
- }
521
- if (Object.keys(releaseActions).length === 0) {
522
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(
523
- helperPlugin.NoContent,
524
- {
525
- content: {
526
- id: "content-releases.pages.Details.tab.emptyEntries",
527
- defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
528
- },
529
- action: /* @__PURE__ */ jsxRuntime.jsx(
530
- v2.LinkButton,
531
- {
532
- as: reactRouterDom.Link,
533
- to: {
534
- pathname: "/content-manager"
535
- },
536
- style: { textDecoration: "none" },
537
- variant: "secondary",
538
- children: formatMessage({
539
- id: "content-releases.page.Details.button.openContentManager",
540
- defaultMessage: "Open the Content Manager"
541
- })
542
- }
543
- )
544
- }
545
- ) });
546
- }
547
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
548
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { children: /* @__PURE__ */ jsxRuntime.jsx(
549
- designSystem.SingleSelect,
550
- {
551
- "aria-label": formatMessage({
552
- id: "content-releases.pages.ReleaseDetails.groupBy.aria-label",
553
- defaultMessage: "Group by"
554
- }),
555
- customizeContent: (value) => formatMessage(
556
- {
557
- id: `content-releases.pages.ReleaseDetails.groupBy.label`,
558
- defaultMessage: `Group by {groupBy}`
559
- },
560
- {
561
- groupBy: value
562
- }
563
- ),
564
- value: formatMessage(getGroupByOptionLabel(selectedGroupBy)),
565
- onChange: (value) => setQuery({ groupBy: value }),
566
- children: GROUP_BY_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: option, children: formatMessage(getGroupByOptionLabel(option)) }, option))
567
- }
568
- ) }),
569
- Object.keys(releaseActions).map((key) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 4, direction: "column", alignItems: "stretch", children: [
570
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { role: "separator", "aria-label": key, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { children: key }) }),
571
- /* @__PURE__ */ jsxRuntime.jsx(
572
- helperPlugin.Table.Root,
573
- {
574
- rows: releaseActions[key].map((item) => ({
575
- ...item,
576
- id: Number(item.entry.id)
577
- })),
578
- colCount: releaseActions[key].length,
579
- isLoading,
580
- isFetching,
581
- children: /* @__PURE__ */ jsxRuntime.jsxs(helperPlugin.Table.Content, { children: [
582
- /* @__PURE__ */ jsxRuntime.jsxs(helperPlugin.Table.Head, { children: [
583
- /* @__PURE__ */ jsxRuntime.jsx(
584
- helperPlugin.Table.HeaderCell,
585
- {
586
- fieldSchemaType: "string",
587
- label: formatMessage({
588
- id: "content-releases.page.ReleaseDetails.table.header.label.name",
589
- defaultMessage: "name"
590
- }),
591
- name: "name"
592
- }
593
- ),
594
- /* @__PURE__ */ jsxRuntime.jsx(
595
- helperPlugin.Table.HeaderCell,
596
- {
597
- fieldSchemaType: "string",
598
- label: formatMessage({
599
- id: "content-releases.page.ReleaseDetails.table.header.label.locale",
600
- defaultMessage: "locale"
601
- }),
602
- name: "locale"
603
- }
604
- ),
605
- /* @__PURE__ */ jsxRuntime.jsx(
606
- helperPlugin.Table.HeaderCell,
607
- {
608
- fieldSchemaType: "string",
609
- label: formatMessage({
610
- id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
611
- defaultMessage: "content-type"
612
- }),
613
- name: "content-type"
614
- }
615
- ),
616
- /* @__PURE__ */ jsxRuntime.jsx(
617
- helperPlugin.Table.HeaderCell,
618
- {
619
- fieldSchemaType: "string",
620
- label: formatMessage({
621
- id: "content-releases.page.ReleaseDetails.table.header.label.action",
622
- defaultMessage: "action"
623
- }),
624
- name: "action"
625
- }
626
- ),
627
- !release.releasedAt && /* @__PURE__ */ jsxRuntime.jsx(
628
- helperPlugin.Table.HeaderCell,
629
- {
630
- fieldSchemaType: "string",
631
- label: formatMessage({
632
- id: "content-releases.page.ReleaseDetails.table.header.label.status",
633
- defaultMessage: "status"
634
- }),
635
- name: "status"
636
- }
637
- )
638
- ] }),
639
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.Table.LoadingBody, {}),
640
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.Table.Body, { children: releaseActions[key].map(
641
- ({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
642
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
643
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "10%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
644
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "10%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: contentType.displayName || "" }) }),
645
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "20%", children: release.releasedAt ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: formatMessage(
646
- {
647
- id: "content-releases.page.ReleaseDetails.table.action-published",
648
- defaultMessage: "This entry was <b>{isPublish, select, true {published} other {unpublished}}</b>."
649
- },
650
- {
651
- isPublish: type === "publish",
652
- b: (children) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "bold", children })
653
- }
654
- ) }) : /* @__PURE__ */ jsxRuntime.jsx(
655
- index.ReleaseActionOptions,
656
- {
657
- selected: type,
658
- handleChange: (e) => handleChangeType(e, id, [key, actionIndex]),
659
- name: `release-action-${id}-type`
660
- }
661
- ) }),
662
- !release.releasedAt && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
663
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "20%", minWidth: "200px", children: /* @__PURE__ */ jsxRuntime.jsx(
664
- EntryValidationText,
665
- {
666
- action: type,
667
- schema: contentTypes?.[contentType.uid],
668
- components,
669
- entry
670
- }
671
- ) }),
672
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "flex-end", children: /* @__PURE__ */ jsxRuntime.jsxs(index.ReleaseActionMenu.Root, { children: [
673
- /* @__PURE__ */ jsxRuntime.jsx(
674
- index.ReleaseActionMenu.ReleaseActionEntryLinkItem,
675
- {
676
- contentTypeUid: contentType.uid,
677
- entryId: entry.id,
678
- locale: locale?.code
679
- }
680
- ),
681
- /* @__PURE__ */ jsxRuntime.jsx(
682
- index.ReleaseActionMenu.DeleteReleaseActionItem,
683
- {
684
- releaseId: release.id,
685
- actionId: id
686
- }
687
- )
688
- ] }) }) })
689
- ] })
690
- ] }, id)
691
- ) })
692
- ] })
693
- }
694
- )
695
- ] }, `releases-group-${key}`)),
696
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
697
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.PageSizeURLQuery, { defaultValue: releaseMeta?.pagination?.pageSize.toString() }),
698
- /* @__PURE__ */ jsxRuntime.jsx(
699
- helperPlugin.PaginationURLQuery,
700
- {
701
- pagination: {
702
- pageCount: releaseMeta?.pagination?.pageCount || 0
703
- }
704
- }
705
- )
706
- ] })
707
- ] }) });
708
- };
709
- const ReleaseDetailsPage = () => {
710
- const { formatMessage } = reactIntl.useIntl();
711
- const { releaseId } = reactRouterDom.useParams();
712
- const toggleNotification = helperPlugin.useNotification();
713
- const { formatAPIError } = helperPlugin.useAPIErrorHandler();
714
- const { push } = reactRouterDom.useHistory();
715
- const [releaseModalShown, setReleaseModalShown] = React__namespace.useState(false);
716
- const [showWarningSubmit, setWarningSubmit] = React__namespace.useState(false);
717
- const {
718
- isLoading: isLoadingDetails,
719
- data,
720
- isSuccess: isSuccessDetails
721
- } = index.useGetReleaseQuery({ id: releaseId });
722
- const [updateRelease, { isLoading: isSubmittingForm }] = index.useUpdateReleaseMutation();
723
- const [deleteRelease, { isLoading: isDeletingRelease }] = index.useDeleteReleaseMutation();
724
- const toggleEditReleaseModal = () => {
725
- setReleaseModalShown((prev) => !prev);
726
- };
727
- const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);
728
- if (isLoadingDetails) {
729
- return /* @__PURE__ */ jsxRuntime.jsx(
730
- ReleaseDetailsLayout,
731
- {
732
- toggleEditReleaseModal,
733
- toggleWarningSubmit,
734
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) })
735
- }
736
- );
737
- }
738
- const title = isSuccessDetails && data?.data?.name || "";
739
- const handleEditRelease = async (values) => {
740
- const response = await updateRelease({
741
- id: releaseId,
742
- name: values.name
743
- });
744
- if ("data" in response) {
745
- toggleNotification({
746
- type: "success",
747
- message: formatMessage({
748
- id: "content-releases.modal.release-updated-notification-success",
749
- defaultMessage: "Release updated."
750
- })
751
- });
752
- } else if (index.isAxiosError(response.error)) {
753
- toggleNotification({
754
- type: "warning",
755
- message: formatAPIError(response.error)
756
- });
757
- } else {
758
- toggleNotification({
759
- type: "warning",
760
- message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
761
- });
762
- }
763
- toggleEditReleaseModal();
764
- };
765
- const handleDeleteRelease = async () => {
766
- const response = await deleteRelease({
767
- id: releaseId
768
- });
769
- if ("data" in response) {
770
- push("/plugins/content-releases");
771
- } else if (index.isAxiosError(response.error)) {
772
- toggleNotification({
773
- type: "warning",
774
- message: formatAPIError(response.error)
775
- });
776
- } else {
777
- toggleNotification({
778
- type: "warning",
779
- message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
780
- });
781
- }
782
- };
783
- return /* @__PURE__ */ jsxRuntime.jsxs(
784
- ReleaseDetailsLayout,
785
- {
786
- toggleEditReleaseModal,
787
- toggleWarningSubmit,
788
- children: [
789
- /* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsBody, {}),
790
- releaseModalShown && /* @__PURE__ */ jsxRuntime.jsx(
791
- ReleaseModal,
792
- {
793
- handleClose: toggleEditReleaseModal,
794
- handleSubmit: handleEditRelease,
795
- isLoading: isLoadingDetails || isSubmittingForm,
796
- initialValues: { name: title || "" }
797
- }
798
- ),
799
- /* @__PURE__ */ jsxRuntime.jsx(
800
- helperPlugin.ConfirmDialog,
801
- {
802
- bodyText: {
803
- id: "content-releases.dialog.confirmation-message",
804
- defaultMessage: "Are you sure you want to delete this release?"
805
- },
806
- isOpen: showWarningSubmit,
807
- isConfirmButtonLoading: isDeletingRelease,
808
- onToggleDialog: toggleWarningSubmit,
809
- onConfirm: handleDeleteRelease
810
- }
811
- )
812
- ]
813
- }
814
- );
815
- };
816
- const LinkCard = styled__default.default(v2.Link)`
817
- display: block;
818
- `;
819
- const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
820
- const { formatMessage } = reactIntl.useIntl();
821
- if (isError) {
822
- return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.AnErrorOccurred, {});
823
- }
824
- if (releases?.length === 0) {
825
- return /* @__PURE__ */ jsxRuntime.jsx(
826
- designSystem.EmptyStateLayout,
827
- {
828
- content: formatMessage(
829
- {
830
- id: "content-releases.page.Releases.tab.emptyEntries",
831
- defaultMessage: "No releases"
832
- },
833
- {
834
- target: sectionTitle
835
- }
836
- ),
837
- icon: /* @__PURE__ */ jsxRuntime.jsx(icons.EmptyDocuments, { width: "10rem" })
838
- }
839
- );
840
- }
841
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid, { gap: 4, children: releases.map(({ id, name, actions }) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.GridItem, { col: 3, s: 6, xs: 12, children: /* @__PURE__ */ jsxRuntime.jsx(LinkCard, { href: `content-releases/${id}`, isExternal: false, children: /* @__PURE__ */ jsxRuntime.jsxs(
842
- designSystem.Flex,
843
- {
844
- direction: "column",
845
- justifyContent: "space-between",
846
- padding: 4,
847
- hasRadius: true,
848
- background: "neutral0",
849
- shadow: "tableShadow",
850
- height: "100%",
851
- width: "100%",
852
- alignItems: "start",
853
- gap: 2,
854
- children: [
855
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { as: "h3", variant: "delta", fontWeight: "bold", children: name }),
856
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", children: formatMessage(
857
- {
858
- id: "content-releases.page.Releases.release-item.entries",
859
- defaultMessage: "{number, plural, =0 {No entries} one {# entry} other {# entries}}"
860
- },
861
- { number: actions.meta.count }
862
- ) })
863
- ]
864
- }
865
- ) }) }, id)) });
866
- };
867
- const StyledAlert = styled__default.default(designSystem.Alert)`
868
- button {
869
- display: none;
870
- }
871
- p + div {
872
- margin-left: auto;
873
- }
874
- `;
875
- const INITIAL_FORM_VALUES = {
876
- name: ""
877
- };
878
- const ReleasesPage = () => {
879
- const tabRef = React__namespace.useRef(null);
880
- const location = reactRouterDom.useLocation();
881
- const [releaseModalShown, setReleaseModalShown] = React__namespace.useState(false);
882
- const toggleNotification = helperPlugin.useNotification();
883
- const { formatMessage } = reactIntl.useIntl();
884
- const { push, replace } = reactRouterDom.useHistory();
885
- const { formatAPIError } = helperPlugin.useAPIErrorHandler();
886
- const [{ query }, setQuery] = helperPlugin.useQueryParams();
887
- const response = index.useGetReleasesQuery(query);
888
- const [createRelease, { isLoading: isSubmittingForm }] = index.useCreateReleaseMutation();
889
- const { getFeature } = strapiAdmin.useLicenseLimits();
890
- const { maximumReleases = 3 } = getFeature("cms-content-releases");
891
- const { trackUsage } = helperPlugin.useTracking();
892
- const { isLoading, isSuccess, isError } = response;
893
- const activeTab = response?.currentData?.meta?.activeTab || "pending";
894
- const activeTabIndex = ["pending", "done"].indexOf(activeTab);
895
- React__namespace.useEffect(() => {
896
- if (location?.state?.errors) {
897
- toggleNotification({
898
- type: "warning",
899
- title: formatMessage({
900
- id: "content-releases.pages.Releases.notification.error.title",
901
- defaultMessage: "Your request could not be processed."
902
- }),
903
- message: formatMessage({
904
- id: "content-releases.pages.Releases.notification.error.message",
905
- defaultMessage: "Please try again or open another release."
906
- })
907
- });
908
- replace({ state: null });
909
- }
910
- }, [formatMessage, location?.state?.errors, replace, toggleNotification]);
911
- React__namespace.useEffect(() => {
912
- if (tabRef.current) {
913
- tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
914
- }
915
- }, [activeTabIndex]);
916
- const toggleAddReleaseModal = () => {
917
- setReleaseModalShown((prev) => !prev);
918
- };
919
- if (isLoading) {
920
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Main, { "aria-busy": isLoading, children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
921
- }
922
- const totalReleases = isSuccess && response.currentData?.meta?.pagination?.total || 0;
923
- const hasReachedMaximumPendingReleases = totalReleases >= maximumReleases;
924
- const handleTabChange = (index2) => {
925
- setQuery({
926
- ...query,
927
- page: 1,
928
- pageSize: response?.currentData?.meta?.pagination?.pageSize || 16,
929
- filters: {
930
- releasedAt: {
931
- $notNull: index2 === 0 ? false : true
932
- }
933
- }
934
- });
935
- };
936
- const handleAddRelease = async (values) => {
937
- const response2 = await createRelease({
938
- name: values.name
939
- });
940
- if ("data" in response2) {
941
- toggleNotification({
942
- type: "success",
943
- message: formatMessage({
944
- id: "content-releases.modal.release-created-notification-success",
945
- defaultMessage: "Release created."
946
- })
947
- });
948
- trackUsage("didCreateRelease");
949
- push(`/plugins/content-releases/${response2.data.data.id}`);
950
- } else if (index.isAxiosError(response2.error)) {
951
- toggleNotification({
952
- type: "warning",
953
- message: formatAPIError(response2.error)
954
- });
955
- } else {
956
- toggleNotification({
957
- type: "warning",
958
- message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
959
- });
960
- }
961
- };
962
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Main, { "aria-busy": isLoading, children: [
963
- /* @__PURE__ */ jsxRuntime.jsx(
964
- designSystem.HeaderLayout,
965
- {
966
- title: formatMessage({
967
- id: "content-releases.pages.Releases.title",
968
- defaultMessage: "Releases"
969
- }),
970
- subtitle: formatMessage(
971
- {
972
- id: "content-releases.pages.Releases.header-subtitle",
973
- defaultMessage: "{number, plural, =0 {No releases} one {# release} other {# releases}}"
974
- },
975
- { number: totalReleases }
976
- ),
977
- primaryAction: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: index.PERMISSIONS.create, children: /* @__PURE__ */ jsxRuntime.jsx(
978
- designSystem.Button,
979
- {
980
- startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}),
981
- onClick: toggleAddReleaseModal,
982
- disabled: hasReachedMaximumPendingReleases,
983
- children: formatMessage({
984
- id: "content-releases.header.actions.add-release",
985
- defaultMessage: "New release"
986
- })
987
- }
988
- ) })
989
- }
990
- ),
991
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
992
- activeTab === "pending" && hasReachedMaximumPendingReleases && /* @__PURE__ */ jsxRuntime.jsx(
993
- StyledAlert,
994
- {
995
- marginBottom: 6,
996
- action: /* @__PURE__ */ jsxRuntime.jsx(v2.Link, { href: "https://strapi.io/pricing-cloud", isExternal: true, children: formatMessage({
997
- id: "content-releases.pages.Releases.max-limit-reached.action",
998
- defaultMessage: "Explore plans"
999
- }) }),
1000
- title: formatMessage(
1001
- {
1002
- id: "content-releases.pages.Releases.max-limit-reached.title",
1003
- defaultMessage: "You have reached the {number} pending {number, plural, one {release} other {releases}} limit."
1004
- },
1005
- { number: maximumReleases }
1006
- ),
1007
- onClose: () => {
1008
- },
1009
- closeLabel: "",
1010
- children: formatMessage({
1011
- id: "content-releases.pages.Releases.max-limit-reached.message",
1012
- defaultMessage: "Upgrade to manage an unlimited number of releases."
1013
- })
1014
- }
1015
- ),
1016
- /* @__PURE__ */ jsxRuntime.jsxs(
1017
- designSystem.TabGroup,
1018
- {
1019
- label: formatMessage({
1020
- id: "content-releases.pages.Releases.tab-group.label",
1021
- defaultMessage: "Releases list"
1022
- }),
1023
- variant: "simple",
1024
- initialSelectedTabIndex: activeTabIndex,
1025
- onTabChange: handleTabChange,
1026
- ref: tabRef,
1027
- children: [
1028
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { paddingBottom: 8, children: [
1029
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tabs, { children: [
1030
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tab, { children: formatMessage({
1031
- id: "content-releases.pages.Releases.tab.pending",
1032
- defaultMessage: "Pending"
1033
- }) }),
1034
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tab, { children: formatMessage({
1035
- id: "content-releases.pages.Releases.tab.done",
1036
- defaultMessage: "Done"
1037
- }) })
1038
- ] }),
1039
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Divider, {})
1040
- ] }),
1041
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.TabPanels, { children: [
1042
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.TabPanel, { children: /* @__PURE__ */ jsxRuntime.jsx(
1043
- ReleasesGrid,
1044
- {
1045
- sectionTitle: "pending",
1046
- releases: response?.currentData?.data,
1047
- isError
1048
- }
1049
- ) }),
1050
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.TabPanel, { children: /* @__PURE__ */ jsxRuntime.jsx(
1051
- ReleasesGrid,
1052
- {
1053
- sectionTitle: "done",
1054
- releases: response?.currentData?.data,
1055
- isError
1056
- }
1057
- ) })
1058
- ] })
1059
- ]
1060
- }
1061
- ),
1062
- totalReleases > 0 && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
1063
- /* @__PURE__ */ jsxRuntime.jsx(
1064
- helperPlugin.PageSizeURLQuery,
1065
- {
1066
- options: ["8", "16", "32", "64"],
1067
- defaultValue: response?.currentData?.meta?.pagination?.pageSize.toString()
1068
- }
1069
- ),
1070
- /* @__PURE__ */ jsxRuntime.jsx(
1071
- helperPlugin.PaginationURLQuery,
1072
- {
1073
- pagination: {
1074
- pageCount: response?.currentData?.meta?.pagination?.pageCount || 0
1075
- }
1076
- }
1077
- )
1078
- ] })
1079
- ] }) }),
1080
- releaseModalShown && /* @__PURE__ */ jsxRuntime.jsx(
1081
- ReleaseModal,
1082
- {
1083
- handleClose: toggleAddReleaseModal,
1084
- handleSubmit: handleAddRelease,
1085
- isLoading: isSubmittingForm,
1086
- initialValues: INITIAL_FORM_VALUES
1087
- }
1088
- )
1089
- ] });
1090
- };
1091
- const App = () => {
1092
- return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPagePermissions, { permissions: index.PERMISSIONS.main, children: /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.Switch, { children: [
1093
- /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { exact: true, path: `/plugins/${index.pluginId}`, component: ReleasesPage }),
1094
- /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { exact: true, path: `/plugins/${index.pluginId}/:releaseId`, component: ReleaseDetailsPage })
1095
- ] }) });
1096
- };
1097
- exports.App = App;
1098
- //# sourceMappingURL=App-IQIHCiSO.js.map