@strapi/content-releases 0.0.0-next.c5f067b5650921187770124e9b6c8186e805e242 → 0.0.0-next.c72b48da735f44a3ccafb7a6dc9ba5213f3844db

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