@strapi/content-releases 0.0.0-next.aa7c7ec6724534e157d8a23fe85ee8318dabbf37 → 0.0.0-next.aa9c4618783d5e736a3c470cb132b4b7ac807584

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