@strapi/content-releases 0.0.0-next.fe88c7878fe2948cfdc68f4867329c1032a618b2 → 0.0.0-next.ffc36acb308febe288f1a31b62cbbb75b286585c

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 (350) hide show
  1. package/dist/admin/assets/purchase-page-illustration-dark.svg.js +6 -0
  2. package/dist/admin/assets/purchase-page-illustration-dark.svg.js.map +1 -0
  3. package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs +4 -0
  4. package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs.map +1 -0
  5. package/dist/admin/assets/purchase-page-illustration-light.svg.js +6 -0
  6. package/dist/admin/assets/purchase-page-illustration-light.svg.js.map +1 -0
  7. package/dist/admin/assets/purchase-page-illustration-light.svg.mjs +4 -0
  8. package/dist/admin/assets/purchase-page-illustration-light.svg.mjs.map +1 -0
  9. package/dist/admin/components/EntryValidationPopover.js +344 -0
  10. package/dist/admin/components/EntryValidationPopover.js.map +1 -0
  11. package/dist/admin/components/EntryValidationPopover.mjs +342 -0
  12. package/dist/admin/components/EntryValidationPopover.mjs.map +1 -0
  13. package/dist/admin/components/RelativeTime.js +76 -0
  14. package/dist/admin/components/RelativeTime.js.map +1 -0
  15. package/dist/admin/components/RelativeTime.mjs +55 -0
  16. package/dist/admin/components/RelativeTime.mjs.map +1 -0
  17. package/dist/admin/components/ReleaseAction.js +203 -0
  18. package/dist/admin/components/ReleaseAction.js.map +1 -0
  19. package/dist/admin/components/ReleaseAction.mjs +201 -0
  20. package/dist/admin/components/ReleaseAction.mjs.map +1 -0
  21. package/dist/admin/components/ReleaseActionMenu.js +194 -0
  22. package/dist/admin/components/ReleaseActionMenu.js.map +1 -0
  23. package/dist/admin/components/ReleaseActionMenu.mjs +173 -0
  24. package/dist/admin/components/ReleaseActionMenu.mjs.map +1 -0
  25. package/dist/admin/components/ReleaseActionModal.js +268 -0
  26. package/dist/admin/components/ReleaseActionModal.js.map +1 -0
  27. package/dist/admin/components/ReleaseActionModal.mjs +244 -0
  28. package/dist/admin/components/ReleaseActionModal.mjs.map +1 -0
  29. package/dist/admin/components/ReleaseActionOptions.js +104 -0
  30. package/dist/admin/components/ReleaseActionOptions.js.map +1 -0
  31. package/dist/admin/components/ReleaseActionOptions.mjs +102 -0
  32. package/dist/admin/components/ReleaseActionOptions.mjs.map +1 -0
  33. package/dist/admin/components/ReleaseListCell.js +103 -0
  34. package/dist/admin/components/ReleaseListCell.js.map +1 -0
  35. package/dist/admin/components/ReleaseListCell.mjs +100 -0
  36. package/dist/admin/components/ReleaseListCell.mjs.map +1 -0
  37. package/dist/admin/components/ReleaseModal.js +323 -0
  38. package/dist/admin/components/ReleaseModal.js.map +1 -0
  39. package/dist/admin/components/ReleaseModal.mjs +302 -0
  40. package/dist/admin/components/ReleaseModal.mjs.map +1 -0
  41. package/dist/admin/components/ReleasesPanel.js +138 -0
  42. package/dist/admin/components/ReleasesPanel.js.map +1 -0
  43. package/dist/admin/components/ReleasesPanel.mjs +136 -0
  44. package/dist/admin/components/ReleasesPanel.mjs.map +1 -0
  45. package/dist/admin/constants.js +77 -0
  46. package/dist/admin/constants.js.map +1 -0
  47. package/dist/admin/constants.mjs +75 -0
  48. package/dist/admin/constants.mjs.map +1 -0
  49. package/dist/admin/index.js +126 -18
  50. package/dist/admin/index.js.map +1 -1
  51. package/dist/admin/index.mjs +121 -18
  52. package/dist/admin/index.mjs.map +1 -1
  53. package/dist/admin/modules/hooks.js +8 -0
  54. package/dist/admin/modules/hooks.js.map +1 -0
  55. package/dist/admin/modules/hooks.mjs +6 -0
  56. package/dist/admin/modules/hooks.mjs.map +1 -0
  57. package/dist/admin/pages/App.js +29 -0
  58. package/dist/admin/pages/App.js.map +1 -0
  59. package/dist/admin/pages/App.mjs +27 -0
  60. package/dist/admin/pages/App.mjs.map +1 -0
  61. package/dist/admin/pages/PurchaseContentReleases.js +192 -0
  62. package/dist/admin/pages/PurchaseContentReleases.js.map +1 -0
  63. package/dist/admin/pages/PurchaseContentReleases.mjs +190 -0
  64. package/dist/admin/pages/PurchaseContentReleases.mjs.map +1 -0
  65. package/dist/admin/pages/ReleaseDetailsPage.js +772 -0
  66. package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -0
  67. package/dist/admin/pages/ReleaseDetailsPage.mjs +751 -0
  68. package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -0
  69. package/dist/admin/pages/ReleasesPage.js +403 -0
  70. package/dist/admin/pages/ReleasesPage.js.map +1 -0
  71. package/dist/admin/pages/ReleasesPage.mjs +381 -0
  72. package/dist/admin/pages/ReleasesPage.mjs.map +1 -0
  73. package/dist/admin/pages/ReleasesSettingsPage.js +225 -0
  74. package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -0
  75. package/dist/admin/pages/ReleasesSettingsPage.mjs +223 -0
  76. package/dist/admin/pages/ReleasesSettingsPage.mjs.map +1 -0
  77. package/dist/admin/pluginId.js +6 -0
  78. package/dist/admin/pluginId.js.map +1 -0
  79. package/dist/admin/pluginId.mjs +4 -0
  80. package/dist/admin/pluginId.mjs.map +1 -0
  81. package/dist/admin/services/release.js +464 -0
  82. package/dist/admin/services/release.js.map +1 -0
  83. package/dist/admin/services/release.mjs +447 -0
  84. package/dist/admin/services/release.mjs.map +1 -0
  85. package/dist/admin/src/components/EntryValidationPopover.d.ts +13 -0
  86. package/dist/admin/src/components/RelativeTime.d.ts +28 -0
  87. package/dist/admin/src/components/ReleaseAction.d.ts +3 -0
  88. package/dist/admin/src/components/ReleaseActionMenu.d.ts +26 -0
  89. package/dist/admin/src/components/ReleaseActionModal.d.ts +24 -0
  90. package/dist/admin/src/components/ReleaseActionOptions.d.ts +9 -0
  91. package/dist/admin/src/components/ReleaseListCell.d.ts +28 -0
  92. package/dist/admin/src/components/ReleaseModal.d.ts +17 -0
  93. package/dist/admin/src/components/ReleasesPanel.d.ts +3 -0
  94. package/dist/admin/src/constants.d.ts +76 -0
  95. package/dist/admin/src/index.d.ts +3 -0
  96. package/dist/admin/src/modules/hooks.d.ts +7 -0
  97. package/dist/admin/src/pages/App.d.ts +1 -0
  98. package/dist/admin/src/pages/PurchaseContentReleases.d.ts +2 -0
  99. package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +2 -0
  100. package/dist/admin/src/pages/ReleasesPage.d.ts +8 -0
  101. package/dist/admin/src/pages/ReleasesSettingsPage.d.ts +1 -0
  102. package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +181 -0
  103. package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +39 -0
  104. package/dist/admin/src/pluginId.d.ts +1 -0
  105. package/dist/admin/src/services/release.d.ts +112 -0
  106. package/dist/admin/src/store/hooks.d.ts +7 -0
  107. package/dist/admin/src/utils/api.d.ts +6 -0
  108. package/dist/admin/src/utils/prefixPluginTranslations.d.ts +3 -0
  109. package/dist/admin/src/utils/time.d.ts +10 -0
  110. package/dist/admin/src/validation/schemas.d.ts +6 -0
  111. package/dist/admin/store/hooks.js +8 -0
  112. package/dist/admin/store/hooks.js.map +1 -0
  113. package/dist/admin/store/hooks.mjs +6 -0
  114. package/dist/admin/store/hooks.mjs.map +1 -0
  115. package/dist/admin/translations/en.json.js +108 -0
  116. package/dist/admin/translations/en.json.js.map +1 -0
  117. package/dist/admin/translations/en.json.mjs +106 -0
  118. package/dist/admin/translations/en.json.mjs.map +1 -0
  119. package/dist/admin/translations/uk.json.js +103 -0
  120. package/dist/admin/translations/uk.json.js.map +1 -0
  121. package/dist/admin/translations/uk.json.mjs +101 -0
  122. package/dist/admin/translations/uk.json.mjs.map +1 -0
  123. package/dist/admin/utils/api.js +8 -0
  124. package/dist/admin/utils/api.js.map +1 -0
  125. package/dist/admin/utils/api.mjs +6 -0
  126. package/dist/admin/utils/api.mjs.map +1 -0
  127. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  128. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  129. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  130. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  131. package/dist/admin/utils/time.js +42 -0
  132. package/dist/admin/utils/time.js.map +1 -0
  133. package/dist/admin/utils/time.mjs +39 -0
  134. package/dist/admin/utils/time.mjs.map +1 -0
  135. package/dist/admin/validation/schemas.js +65 -0
  136. package/dist/admin/validation/schemas.js.map +1 -0
  137. package/dist/admin/validation/schemas.mjs +43 -0
  138. package/dist/admin/validation/schemas.mjs.map +1 -0
  139. package/dist/server/bootstrap.js +68 -0
  140. package/dist/server/bootstrap.js.map +1 -0
  141. package/dist/server/bootstrap.mjs +66 -0
  142. package/dist/server/bootstrap.mjs.map +1 -0
  143. package/dist/server/constants.js +74 -0
  144. package/dist/server/constants.js.map +1 -0
  145. package/dist/server/constants.mjs +69 -0
  146. package/dist/server/constants.mjs.map +1 -0
  147. package/dist/server/content-types/index.js +12 -0
  148. package/dist/server/content-types/index.js.map +1 -0
  149. package/dist/server/content-types/index.mjs +10 -0
  150. package/dist/server/content-types/index.mjs.map +1 -0
  151. package/dist/server/content-types/release/index.js +10 -0
  152. package/dist/server/content-types/release/index.js.map +1 -0
  153. package/dist/server/content-types/release/index.mjs +8 -0
  154. package/dist/server/content-types/release/index.mjs.map +1 -0
  155. package/dist/server/content-types/release/schema.js +58 -0
  156. package/dist/server/content-types/release/schema.js.map +1 -0
  157. package/dist/server/content-types/release/schema.mjs +56 -0
  158. package/dist/server/content-types/release/schema.mjs.map +1 -0
  159. package/dist/server/content-types/release-action/index.js +10 -0
  160. package/dist/server/content-types/release-action/index.js.map +1 -0
  161. package/dist/server/content-types/release-action/index.mjs +8 -0
  162. package/dist/server/content-types/release-action/index.mjs.map +1 -0
  163. package/dist/server/content-types/release-action/schema.js +55 -0
  164. package/dist/server/content-types/release-action/schema.js.map +1 -0
  165. package/dist/server/content-types/release-action/schema.mjs +53 -0
  166. package/dist/server/content-types/release-action/schema.mjs.map +1 -0
  167. package/dist/server/controllers/index.js +14 -0
  168. package/dist/server/controllers/index.js.map +1 -0
  169. package/dist/server/controllers/index.mjs +12 -0
  170. package/dist/server/controllers/index.mjs.map +1 -0
  171. package/dist/server/controllers/release-action.js +150 -0
  172. package/dist/server/controllers/release-action.js.map +1 -0
  173. package/dist/server/controllers/release-action.mjs +148 -0
  174. package/dist/server/controllers/release-action.mjs.map +1 -0
  175. package/dist/server/controllers/release.js +302 -0
  176. package/dist/server/controllers/release.js.map +1 -0
  177. package/dist/server/controllers/release.mjs +300 -0
  178. package/dist/server/controllers/release.mjs.map +1 -0
  179. package/dist/server/controllers/settings.js +37 -0
  180. package/dist/server/controllers/settings.js.map +1 -0
  181. package/dist/server/controllers/settings.mjs +35 -0
  182. package/dist/server/controllers/settings.mjs.map +1 -0
  183. package/dist/server/controllers/validation/release-action.js +34 -0
  184. package/dist/server/controllers/validation/release-action.js.map +1 -0
  185. package/dist/server/controllers/validation/release-action.mjs +30 -0
  186. package/dist/server/controllers/validation/release-action.mjs.map +1 -0
  187. package/dist/server/controllers/validation/release.js +26 -0
  188. package/dist/server/controllers/validation/release.js.map +1 -0
  189. package/dist/server/controllers/validation/release.mjs +22 -0
  190. package/dist/server/controllers/validation/release.mjs.map +1 -0
  191. package/dist/server/controllers/validation/settings.js +32 -0
  192. package/dist/server/controllers/validation/settings.js.map +1 -0
  193. package/dist/server/controllers/validation/settings.mjs +10 -0
  194. package/dist/server/controllers/validation/settings.mjs.map +1 -0
  195. package/dist/server/destroy.js +15 -0
  196. package/dist/server/destroy.js.map +1 -0
  197. package/dist/server/destroy.mjs +13 -0
  198. package/dist/server/destroy.mjs.map +1 -0
  199. package/dist/server/index.js +25 -1777
  200. package/dist/server/index.js.map +1 -1
  201. package/dist/server/index.mjs +24 -1756
  202. package/dist/server/index.mjs.map +1 -1
  203. package/dist/server/middlewares/documents.js +104 -0
  204. package/dist/server/middlewares/documents.js.map +1 -0
  205. package/dist/server/middlewares/documents.mjs +101 -0
  206. package/dist/server/middlewares/documents.mjs.map +1 -0
  207. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js +51 -0
  208. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js.map +1 -0
  209. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs +49 -0
  210. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs.map +1 -0
  211. package/dist/server/migrations/index.js +205 -0
  212. package/dist/server/migrations/index.js.map +1 -0
  213. package/dist/server/migrations/index.mjs +198 -0
  214. package/dist/server/migrations/index.mjs.map +1 -0
  215. package/dist/server/register.js +23 -0
  216. package/dist/server/register.js.map +1 -0
  217. package/dist/server/register.mjs +21 -0
  218. package/dist/server/register.mjs.map +1 -0
  219. package/dist/server/routes/index.js +14 -0
  220. package/dist/server/routes/index.js.map +1 -0
  221. package/dist/server/routes/index.mjs +12 -0
  222. package/dist/server/routes/index.mjs.map +1 -0
  223. package/dist/server/routes/release-action.js +100 -0
  224. package/dist/server/routes/release-action.js.map +1 -0
  225. package/dist/server/routes/release-action.mjs +98 -0
  226. package/dist/server/routes/release-action.mjs.map +1 -0
  227. package/dist/server/routes/release.js +154 -0
  228. package/dist/server/routes/release.js.map +1 -0
  229. package/dist/server/routes/release.mjs +152 -0
  230. package/dist/server/routes/release.mjs.map +1 -0
  231. package/dist/server/routes/settings.js +46 -0
  232. package/dist/server/routes/settings.js.map +1 -0
  233. package/dist/server/routes/settings.mjs +44 -0
  234. package/dist/server/routes/settings.mjs.map +1 -0
  235. package/dist/server/services/index.js +18 -0
  236. package/dist/server/services/index.js.map +1 -0
  237. package/dist/server/services/index.mjs +16 -0
  238. package/dist/server/services/index.mjs.map +1 -0
  239. package/dist/server/services/release-action.js +324 -0
  240. package/dist/server/services/release-action.js.map +1 -0
  241. package/dist/server/services/release-action.mjs +322 -0
  242. package/dist/server/services/release-action.mjs.map +1 -0
  243. package/dist/server/services/release.js +324 -0
  244. package/dist/server/services/release.js.map +1 -0
  245. package/dist/server/services/release.mjs +322 -0
  246. package/dist/server/services/release.mjs.map +1 -0
  247. package/dist/server/services/scheduling.js +74 -0
  248. package/dist/server/services/scheduling.js.map +1 -0
  249. package/dist/server/services/scheduling.mjs +72 -0
  250. package/dist/server/services/scheduling.mjs.map +1 -0
  251. package/dist/server/services/settings.js +34 -0
  252. package/dist/server/services/settings.js.map +1 -0
  253. package/dist/server/services/settings.mjs +32 -0
  254. package/dist/server/services/settings.mjs.map +1 -0
  255. package/dist/server/services/validation.js +91 -0
  256. package/dist/server/services/validation.js.map +1 -0
  257. package/dist/server/services/validation.mjs +86 -0
  258. package/dist/server/services/validation.mjs.map +1 -0
  259. package/dist/server/src/bootstrap.d.ts +5 -0
  260. package/dist/server/src/bootstrap.d.ts.map +1 -0
  261. package/dist/server/src/constants.d.ts +21 -0
  262. package/dist/server/src/constants.d.ts.map +1 -0
  263. package/dist/server/src/content-types/index.d.ts +97 -0
  264. package/dist/server/src/content-types/index.d.ts.map +1 -0
  265. package/dist/server/src/content-types/release/index.d.ts +48 -0
  266. package/dist/server/src/content-types/release/index.d.ts.map +1 -0
  267. package/dist/server/src/content-types/release/schema.d.ts +47 -0
  268. package/dist/server/src/content-types/release/schema.d.ts.map +1 -0
  269. package/dist/server/src/content-types/release-action/index.d.ts +48 -0
  270. package/dist/server/src/content-types/release-action/index.d.ts.map +1 -0
  271. package/dist/server/src/content-types/release-action/schema.d.ts +47 -0
  272. package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -0
  273. package/dist/server/src/controllers/index.d.ts +25 -0
  274. package/dist/server/src/controllers/index.d.ts.map +1 -0
  275. package/dist/server/src/controllers/release-action.d.ts +10 -0
  276. package/dist/server/src/controllers/release-action.d.ts.map +1 -0
  277. package/dist/server/src/controllers/release.d.ts +18 -0
  278. package/dist/server/src/controllers/release.d.ts.map +1 -0
  279. package/dist/server/src/controllers/settings.d.ts +11 -0
  280. package/dist/server/src/controllers/settings.d.ts.map +1 -0
  281. package/dist/server/src/controllers/validation/release-action.d.ts +14 -0
  282. package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -0
  283. package/dist/server/src/controllers/validation/release.d.ts +4 -0
  284. package/dist/server/src/controllers/validation/release.d.ts.map +1 -0
  285. package/dist/server/src/controllers/validation/settings.d.ts +3 -0
  286. package/dist/server/src/controllers/validation/settings.d.ts.map +1 -0
  287. package/dist/server/src/destroy.d.ts +5 -0
  288. package/dist/server/src/destroy.d.ts.map +1 -0
  289. package/dist/server/src/index.d.ts +2111 -0
  290. package/dist/server/src/index.d.ts.map +1 -0
  291. package/dist/server/src/middlewares/documents.d.ts +6 -0
  292. package/dist/server/src/middlewares/documents.d.ts.map +1 -0
  293. package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts +9 -0
  294. package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts.map +1 -0
  295. package/dist/server/src/migrations/index.d.ts +13 -0
  296. package/dist/server/src/migrations/index.d.ts.map +1 -0
  297. package/dist/server/src/register.d.ts +5 -0
  298. package/dist/server/src/register.d.ts.map +1 -0
  299. package/dist/server/src/routes/index.d.ts +51 -0
  300. package/dist/server/src/routes/index.d.ts.map +1 -0
  301. package/dist/server/src/routes/release-action.d.ts +18 -0
  302. package/dist/server/src/routes/release-action.d.ts.map +1 -0
  303. package/dist/server/src/routes/release.d.ts +18 -0
  304. package/dist/server/src/routes/release.d.ts.map +1 -0
  305. package/dist/server/src/routes/settings.d.ts +18 -0
  306. package/dist/server/src/routes/settings.d.ts.map +1 -0
  307. package/dist/server/src/services/index.d.ts +1824 -0
  308. package/dist/server/src/services/index.d.ts.map +1 -0
  309. package/dist/server/src/services/release-action.d.ts +34 -0
  310. package/dist/server/src/services/release-action.d.ts.map +1 -0
  311. package/dist/server/src/services/release.d.ts +31 -0
  312. package/dist/server/src/services/release.d.ts.map +1 -0
  313. package/dist/server/src/services/scheduling.d.ts +17 -0
  314. package/dist/server/src/services/scheduling.d.ts.map +1 -0
  315. package/dist/server/src/services/settings.d.ts +13 -0
  316. package/dist/server/src/services/settings.d.ts.map +1 -0
  317. package/dist/server/src/services/validation.d.ts +18 -0
  318. package/dist/server/src/services/validation.d.ts.map +1 -0
  319. package/dist/server/src/utils/index.d.ts +35 -0
  320. package/dist/server/src/utils/index.d.ts.map +1 -0
  321. package/dist/server/utils/index.js +94 -0
  322. package/dist/server/utils/index.js.map +1 -0
  323. package/dist/server/utils/index.mjs +88 -0
  324. package/dist/server/utils/index.mjs.map +1 -0
  325. package/dist/shared/contracts/release-actions.d.ts +136 -0
  326. package/dist/shared/contracts/release-actions.d.ts.map +1 -0
  327. package/dist/shared/contracts/releases.d.ts +183 -0
  328. package/dist/shared/contracts/releases.d.ts.map +1 -0
  329. package/dist/shared/contracts/settings.d.ts +38 -0
  330. package/dist/shared/contracts/settings.d.ts.map +1 -0
  331. package/dist/shared/types.d.ts +23 -0
  332. package/dist/shared/types.d.ts.map +1 -0
  333. package/package.json +39 -42
  334. package/dist/_chunks/App-dLXY5ei3.js +0 -1353
  335. package/dist/_chunks/App-dLXY5ei3.js.map +0 -1
  336. package/dist/_chunks/App-jrh58sXY.mjs +0 -1330
  337. package/dist/_chunks/App-jrh58sXY.mjs.map +0 -1
  338. package/dist/_chunks/PurchaseContentReleases-3tRbmbY3.mjs +0 -51
  339. package/dist/_chunks/PurchaseContentReleases-3tRbmbY3.mjs.map +0 -1
  340. package/dist/_chunks/PurchaseContentReleases-bpIYXOfu.js +0 -51
  341. package/dist/_chunks/PurchaseContentReleases-bpIYXOfu.js.map +0 -1
  342. package/dist/_chunks/en-HrREghh3.js +0 -86
  343. package/dist/_chunks/en-HrREghh3.js.map +0 -1
  344. package/dist/_chunks/en-ltT1TlKQ.mjs +0 -86
  345. package/dist/_chunks/en-ltT1TlKQ.mjs.map +0 -1
  346. package/dist/_chunks/index-CVO0Rqdm.js +0 -1336
  347. package/dist/_chunks/index-CVO0Rqdm.js.map +0 -1
  348. package/dist/_chunks/index-PiOGBETy.mjs +0 -1315
  349. package/dist/_chunks/index-PiOGBETy.mjs.map +0 -1
  350. package/strapi-server.js +0 -3
@@ -0,0 +1,751 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { useNotification, useAPIErrorHandler, Page, ConfirmDialog, useRBAC, useTracking, Layouts, BackButton, useQueryParams, useStrapiApp, Table, Pagination, isFetchError } from '@strapi/admin/strapi-admin';
4
+ import { Flex, SimpleMenu, Dialog, Main, Typography, Badge, Menu, Button, EmptyStateLayout, LinkButton, SingleSelect, SingleSelectOption, Tr, Td } from '@strapi/design-system';
5
+ import { More, Pencil, Trash } from '@strapi/icons';
6
+ import { EmptyDocuments } from '@strapi/icons/symbols';
7
+ import format from 'date-fns/format';
8
+ import { utcToZonedTime } from 'date-fns-tz';
9
+ import { useIntl } from 'react-intl';
10
+ import { useParams, useNavigate, Navigate, Link } from 'react-router-dom';
11
+ import { styled } from 'styled-components';
12
+ import { EntryValidationPopover } from '../components/EntryValidationPopover.mjs';
13
+ import { RelativeTime } from '../components/RelativeTime.mjs';
14
+ import { ReleaseActionMenu } from '../components/ReleaseActionMenu.mjs';
15
+ import { ReleaseActionOptions } from '../components/ReleaseActionOptions.mjs';
16
+ import { ReleaseModal } from '../components/ReleaseModal.mjs';
17
+ import { PERMISSIONS } from '../constants.mjs';
18
+ import { useGetReleaseQuery, useGetReleaseSettingsQuery, useUpdateReleaseMutation, useDeleteReleaseMutation, usePublishReleaseMutation, useGetReleaseActionsQuery, useUpdateReleaseActionMutation, releaseApi } from '../services/release.mjs';
19
+ import { useTypedDispatch } from '../store/hooks.mjs';
20
+ import { isBaseQueryError } from '../utils/api.mjs';
21
+ import { getTimezoneOffset } from '../utils/time.mjs';
22
+ import { getBadgeProps } from './ReleasesPage.mjs';
23
+
24
+ /* -------------------------------------------------------------------------------------------------
25
+ * ReleaseDetailsLayout
26
+ * -----------------------------------------------------------------------------------------------*/ const ReleaseInfoWrapper = styled(Flex)`
27
+ align-self: stretch;
28
+ border-bottom-right-radius: ${({ theme })=>theme.borderRadius};
29
+ border-bottom-left-radius: ${({ theme })=>theme.borderRadius};
30
+ border-top: 1px solid ${({ theme })=>theme.colors.neutral150};
31
+ `;
32
+ const ReleaseDetailsLayout = ({ toggleEditReleaseModal, toggleWarningSubmit, children })=>{
33
+ const { formatMessage, formatDate, formatTime } = useIntl();
34
+ const { releaseId } = useParams();
35
+ const { data, isLoading: isLoadingDetails, error } = useGetReleaseQuery({
36
+ id: releaseId
37
+ }, {
38
+ skip: !releaseId
39
+ });
40
+ const [publishRelease, { isLoading: isPublishing }] = usePublishReleaseMutation();
41
+ const { toggleNotification } = useNotification();
42
+ const { formatAPIError } = useAPIErrorHandler();
43
+ const { allowedActions } = useRBAC(PERMISSIONS);
44
+ const { canUpdate, canDelete, canPublish } = allowedActions;
45
+ const dispatch = useTypedDispatch();
46
+ const { trackUsage } = useTracking();
47
+ const release = data?.data;
48
+ const handlePublishRelease = (id)=>async ()=>{
49
+ const response = await publishRelease({
50
+ id
51
+ });
52
+ if ('data' in response) {
53
+ // When the response returns an object with 'data', handle success
54
+ toggleNotification({
55
+ type: 'success',
56
+ message: formatMessage({
57
+ id: 'content-releases.pages.ReleaseDetails.publish-notification-success',
58
+ defaultMessage: 'Release was published successfully.'
59
+ })
60
+ });
61
+ const { totalEntries, totalPublishedEntries, totalUnpublishedEntries } = response.data.meta;
62
+ trackUsage('didPublishRelease', {
63
+ totalEntries,
64
+ totalPublishedEntries,
65
+ totalUnpublishedEntries
66
+ });
67
+ } else if (isFetchError(response.error)) {
68
+ // When the response returns an object with 'error', handle fetch error
69
+ toggleNotification({
70
+ type: 'danger',
71
+ message: formatAPIError(response.error)
72
+ });
73
+ } else {
74
+ // Otherwise, the response returns an object with 'error', handle a generic error
75
+ toggleNotification({
76
+ type: 'danger',
77
+ message: formatMessage({
78
+ id: 'notification.error',
79
+ defaultMessage: 'An error occurred'
80
+ })
81
+ });
82
+ }
83
+ };
84
+ const handleRefresh = ()=>{
85
+ dispatch(releaseApi.util.invalidateTags([
86
+ {
87
+ type: 'ReleaseAction',
88
+ id: 'LIST'
89
+ },
90
+ {
91
+ type: 'Release',
92
+ id: releaseId
93
+ }
94
+ ]));
95
+ };
96
+ const getCreatedByUser = ()=>{
97
+ if (!release?.createdBy) {
98
+ return null;
99
+ }
100
+ // Favor the username
101
+ if (release.createdBy.username) {
102
+ return release.createdBy.username;
103
+ }
104
+ // Firstname may not exist if created with SSO
105
+ if (release.createdBy.firstname) {
106
+ return `${release.createdBy.firstname} ${release.createdBy.lastname || ''}`.trim();
107
+ }
108
+ // All users must have at least an email
109
+ return release.createdBy.email;
110
+ };
111
+ if (isLoadingDetails) {
112
+ return /*#__PURE__*/ jsx(Page.Loading, {});
113
+ }
114
+ if (isBaseQueryError(error) && 'code' in error || !release) {
115
+ return /*#__PURE__*/ jsx(Navigate, {
116
+ to: "..",
117
+ state: {
118
+ errors: [
119
+ {
120
+ // @ts-expect-error – TODO: fix this weird error flow
121
+ code: error?.code
122
+ }
123
+ ]
124
+ }
125
+ });
126
+ }
127
+ const totalEntries = release.actions.meta.count || 0;
128
+ const hasCreatedByUser = Boolean(getCreatedByUser());
129
+ const isScheduled = release.scheduledAt && release.timezone;
130
+ const numberOfEntriesText = formatMessage({
131
+ id: 'content-releases.pages.Details.header-subtitle',
132
+ defaultMessage: '{number, plural, =0 {No entries} one {# entry} other {# entries}}'
133
+ }, {
134
+ number: totalEntries
135
+ });
136
+ const scheduledText = isScheduled ? formatMessage({
137
+ id: 'content-releases.pages.ReleaseDetails.header-subtitle.scheduled',
138
+ defaultMessage: 'Scheduled for {date} at {time} ({offset})'
139
+ }, {
140
+ date: formatDate(new Date(release.scheduledAt), {
141
+ weekday: 'long',
142
+ day: 'numeric',
143
+ month: 'long',
144
+ year: 'numeric',
145
+ timeZone: release.timezone
146
+ }),
147
+ time: formatTime(new Date(release.scheduledAt), {
148
+ timeZone: release.timezone,
149
+ hourCycle: 'h23'
150
+ }),
151
+ offset: getTimezoneOffset(release.timezone, new Date(release.scheduledAt))
152
+ }) : '';
153
+ return /*#__PURE__*/ jsxs(Main, {
154
+ "aria-busy": isLoadingDetails,
155
+ children: [
156
+ /*#__PURE__*/ jsx(Layouts.Header, {
157
+ title: release.name,
158
+ subtitle: /*#__PURE__*/ jsxs(Flex, {
159
+ gap: 2,
160
+ lineHeight: 6,
161
+ children: [
162
+ /*#__PURE__*/ jsx(Typography, {
163
+ textColor: "neutral600",
164
+ variant: "epsilon",
165
+ children: numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : '')
166
+ }),
167
+ /*#__PURE__*/ jsx(Badge, {
168
+ ...getBadgeProps(release.status),
169
+ children: release.status
170
+ })
171
+ ]
172
+ }),
173
+ navigationAction: /*#__PURE__*/ jsx(BackButton, {
174
+ fallback: ".."
175
+ }),
176
+ primaryAction: !release.releasedAt && /*#__PURE__*/ jsxs(Flex, {
177
+ gap: 2,
178
+ children: [
179
+ /*#__PURE__*/ jsxs(SimpleMenuButton, {
180
+ label: /*#__PURE__*/ jsx(More, {}),
181
+ variant: "tertiary",
182
+ endIcon: null,
183
+ paddingLeft: "7px",
184
+ paddingRight: "7px",
185
+ "aria-label": formatMessage({
186
+ id: 'content-releases.header.actions.open-release-actions',
187
+ defaultMessage: 'Release edit and delete menu'
188
+ }),
189
+ popoverPlacement: "bottom-end",
190
+ children: [
191
+ /*#__PURE__*/ jsx(Menu.Item, {
192
+ disabled: !canUpdate,
193
+ onSelect: toggleEditReleaseModal,
194
+ startIcon: /*#__PURE__*/ jsx(Pencil, {}),
195
+ children: formatMessage({
196
+ id: 'content-releases.header.actions.edit',
197
+ defaultMessage: 'Edit'
198
+ })
199
+ }),
200
+ /*#__PURE__*/ jsx(Menu.Item, {
201
+ disabled: !canDelete,
202
+ onSelect: toggleWarningSubmit,
203
+ variant: "danger",
204
+ startIcon: /*#__PURE__*/ jsx(Trash, {}),
205
+ children: formatMessage({
206
+ id: 'content-releases.header.actions.delete',
207
+ defaultMessage: 'Delete'
208
+ })
209
+ }),
210
+ /*#__PURE__*/ jsxs(ReleaseInfoWrapper, {
211
+ direction: "column",
212
+ justifyContent: "center",
213
+ alignItems: "flex-start",
214
+ gap: 1,
215
+ padding: 4,
216
+ children: [
217
+ /*#__PURE__*/ jsx(Typography, {
218
+ variant: "pi",
219
+ fontWeight: "bold",
220
+ children: formatMessage({
221
+ id: 'content-releases.header.actions.created',
222
+ defaultMessage: 'Created'
223
+ })
224
+ }),
225
+ /*#__PURE__*/ jsxs(Typography, {
226
+ variant: "pi",
227
+ color: "neutral300",
228
+ children: [
229
+ /*#__PURE__*/ jsx(RelativeTime, {
230
+ timestamp: new Date(release.createdAt)
231
+ }),
232
+ formatMessage({
233
+ id: 'content-releases.header.actions.created.description',
234
+ defaultMessage: '{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}'
235
+ }, {
236
+ createdBy: getCreatedByUser(),
237
+ hasCreatedByUser
238
+ })
239
+ ]
240
+ })
241
+ ]
242
+ })
243
+ ]
244
+ }),
245
+ /*#__PURE__*/ jsx(Button, {
246
+ size: "S",
247
+ variant: "tertiary",
248
+ onClick: handleRefresh,
249
+ children: formatMessage({
250
+ id: 'content-releases.header.actions.refresh',
251
+ defaultMessage: 'Refresh'
252
+ })
253
+ }),
254
+ canPublish ? /*#__PURE__*/ jsx(Button, {
255
+ size: "S",
256
+ variant: "default",
257
+ onClick: handlePublishRelease(release.id.toString()),
258
+ loading: isPublishing,
259
+ disabled: release.actions.meta.count === 0,
260
+ children: formatMessage({
261
+ id: 'content-releases.header.actions.publish',
262
+ defaultMessage: 'Publish'
263
+ })
264
+ }) : null
265
+ ]
266
+ })
267
+ }),
268
+ children
269
+ ]
270
+ });
271
+ };
272
+ const SimpleMenuButton = styled(SimpleMenu)`
273
+ & > span {
274
+ display: flex;
275
+ }
276
+ `;
277
+ /* -------------------------------------------------------------------------------------------------
278
+ * ReleaseDetailsBody
279
+ * -----------------------------------------------------------------------------------------------*/ const GROUP_BY_OPTIONS = [
280
+ 'contentType',
281
+ 'locale',
282
+ 'action'
283
+ ];
284
+ const GROUP_BY_OPTIONS_NO_LOCALE = [
285
+ 'contentType',
286
+ 'action'
287
+ ];
288
+ const getGroupByOptionLabel = (value)=>{
289
+ if (value === 'locale') {
290
+ return {
291
+ id: 'content-releases.pages.ReleaseDetails.groupBy.option.locales',
292
+ defaultMessage: 'Locales'
293
+ };
294
+ }
295
+ if (value === 'action') {
296
+ return {
297
+ id: 'content-releases.pages.ReleaseDetails.groupBy.option.actions',
298
+ defaultMessage: 'Actions'
299
+ };
300
+ }
301
+ return {
302
+ id: 'content-releases.pages.ReleaseDetails.groupBy.option.content-type',
303
+ defaultMessage: 'Content-Types'
304
+ };
305
+ };
306
+ const ReleaseDetailsBody = ({ releaseId })=>{
307
+ const { formatMessage } = useIntl();
308
+ const [{ query }, setQuery] = useQueryParams();
309
+ const { toggleNotification } = useNotification();
310
+ const { formatAPIError } = useAPIErrorHandler();
311
+ const { data: releaseData, isLoading: isReleaseLoading, error: releaseError } = useGetReleaseQuery({
312
+ id: releaseId
313
+ });
314
+ const { allowedActions: { canUpdate } } = useRBAC(PERMISSIONS);
315
+ const runHookWaterfall = useStrapiApp('ReleaseDetailsPage', (state)=>state.runHookWaterfall);
316
+ // TODO: Migrated displayedHeader to v5
317
+ const { displayedHeaders, hasI18nEnabled } = runHookWaterfall('ContentReleases/pages/ReleaseDetails/add-locale-in-releases', {
318
+ displayedHeaders: [
319
+ {
320
+ label: {
321
+ id: 'content-releases.page.ReleaseDetails.table.header.label.name',
322
+ defaultMessage: 'name'
323
+ },
324
+ name: 'name'
325
+ }
326
+ ],
327
+ hasI18nEnabled: false
328
+ });
329
+ const release = releaseData?.data;
330
+ const selectedGroupBy = query?.groupBy || 'contentType';
331
+ const { isLoading, isFetching, isError, data, error: releaseActionsError } = useGetReleaseActionsQuery({
332
+ ...query,
333
+ releaseId
334
+ });
335
+ const [updateReleaseAction] = useUpdateReleaseActionMutation();
336
+ const handleChangeType = async (e, actionId, actionPath)=>{
337
+ const response = await updateReleaseAction({
338
+ params: {
339
+ releaseId,
340
+ actionId
341
+ },
342
+ body: {
343
+ type: e.target.value
344
+ },
345
+ query,
346
+ actionPath
347
+ });
348
+ if ('error' in response) {
349
+ if (isFetchError(response.error)) {
350
+ // When the response returns an object with 'error', handle fetch error
351
+ toggleNotification({
352
+ type: 'danger',
353
+ message: formatAPIError(response.error)
354
+ });
355
+ } else {
356
+ // Otherwise, the response returns an object with 'error', handle a generic error
357
+ toggleNotification({
358
+ type: 'danger',
359
+ message: formatMessage({
360
+ id: 'notification.error',
361
+ defaultMessage: 'An error occurred'
362
+ })
363
+ });
364
+ }
365
+ }
366
+ };
367
+ if (isLoading || isReleaseLoading) {
368
+ return /*#__PURE__*/ jsx(Page.Loading, {});
369
+ }
370
+ const releaseActions = data?.data;
371
+ const releaseMeta = data?.meta;
372
+ const contentTypes = releaseMeta?.contentTypes || {};
373
+ releaseMeta?.components || {};
374
+ if (isBaseQueryError(releaseError) || !release) {
375
+ const errorsArray = [];
376
+ if (releaseError && 'code' in releaseError) {
377
+ errorsArray.push({
378
+ code: releaseError.code
379
+ });
380
+ }
381
+ if (releaseActionsError && 'code' in releaseActionsError) {
382
+ errorsArray.push({
383
+ code: releaseActionsError.code
384
+ });
385
+ }
386
+ return /*#__PURE__*/ jsx(Navigate, {
387
+ to: "..",
388
+ state: {
389
+ errors: errorsArray
390
+ }
391
+ });
392
+ }
393
+ if (isError || !releaseActions) {
394
+ return /*#__PURE__*/ jsx(Page.Error, {});
395
+ }
396
+ if (Object.keys(releaseActions).length === 0) {
397
+ return /*#__PURE__*/ jsx(Layouts.Content, {
398
+ children: /*#__PURE__*/ jsx(EmptyStateLayout, {
399
+ action: /*#__PURE__*/ jsx(LinkButton, {
400
+ tag: Link,
401
+ to: {
402
+ pathname: '/content-manager'
403
+ },
404
+ style: {
405
+ textDecoration: 'none'
406
+ },
407
+ variant: "secondary",
408
+ children: formatMessage({
409
+ id: 'content-releases.page.Details.button.openContentManager',
410
+ defaultMessage: 'Open the Content Manager'
411
+ })
412
+ }),
413
+ icon: /*#__PURE__*/ jsx(EmptyDocuments, {
414
+ width: "16rem"
415
+ }),
416
+ content: formatMessage({
417
+ id: 'content-releases.pages.Details.tab.emptyEntries',
418
+ defaultMessage: 'This release is empty. Open the Content Manager, select an entry and add it to the release.'
419
+ })
420
+ })
421
+ });
422
+ }
423
+ const groupByLabel = formatMessage({
424
+ id: 'content-releases.pages.ReleaseDetails.groupBy.aria-label',
425
+ defaultMessage: 'Group by'
426
+ });
427
+ const headers = [
428
+ ...displayedHeaders,
429
+ {
430
+ label: {
431
+ id: 'content-releases.page.ReleaseDetails.table.header.label.content-type',
432
+ defaultMessage: 'content-type'
433
+ },
434
+ name: 'content-type'
435
+ },
436
+ {
437
+ label: {
438
+ id: 'content-releases.page.ReleaseDetails.table.header.label.action',
439
+ defaultMessage: 'action'
440
+ },
441
+ name: 'action'
442
+ },
443
+ ...!release.releasedAt ? [
444
+ {
445
+ label: {
446
+ id: 'content-releases.page.ReleaseDetails.table.header.label.status',
447
+ defaultMessage: 'status'
448
+ },
449
+ name: 'status'
450
+ }
451
+ ] : []
452
+ ];
453
+ const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;
454
+ return /*#__PURE__*/ jsx(Layouts.Content, {
455
+ children: /*#__PURE__*/ jsxs(Flex, {
456
+ gap: 8,
457
+ direction: "column",
458
+ alignItems: "stretch",
459
+ children: [
460
+ /*#__PURE__*/ jsx(Flex, {
461
+ children: /*#__PURE__*/ jsx(SingleSelect, {
462
+ placeholder: groupByLabel,
463
+ "aria-label": groupByLabel,
464
+ customizeContent: (value)=>formatMessage({
465
+ id: `content-releases.pages.ReleaseDetails.groupBy.label`,
466
+ defaultMessage: `Group by {groupBy}`
467
+ }, {
468
+ groupBy: value
469
+ }),
470
+ value: formatMessage(getGroupByOptionLabel(selectedGroupBy)),
471
+ onChange: (value)=>setQuery({
472
+ groupBy: value
473
+ }),
474
+ children: options.map((option)=>/*#__PURE__*/ jsx(SingleSelectOption, {
475
+ value: option,
476
+ children: formatMessage(getGroupByOptionLabel(option))
477
+ }, option))
478
+ })
479
+ }),
480
+ Object.keys(releaseActions).map((key)=>/*#__PURE__*/ jsxs(Flex, {
481
+ gap: 4,
482
+ direction: "column",
483
+ alignItems: "stretch",
484
+ children: [
485
+ /*#__PURE__*/ jsx(Flex, {
486
+ role: "separator",
487
+ "aria-label": key,
488
+ children: /*#__PURE__*/ jsx(Badge, {
489
+ children: key
490
+ })
491
+ }),
492
+ /*#__PURE__*/ jsx(Table.Root, {
493
+ rows: releaseActions[key].map((item)=>({
494
+ ...item,
495
+ id: Number(item.entry.id)
496
+ })),
497
+ headers: headers,
498
+ isLoading: isLoading || isFetching,
499
+ children: /*#__PURE__*/ jsxs(Table.Content, {
500
+ children: [
501
+ /*#__PURE__*/ jsx(Table.Head, {
502
+ children: headers.map(({ label, name })=>/*#__PURE__*/ jsx(Table.HeaderCell, {
503
+ label: formatMessage(label),
504
+ name: name
505
+ }, name))
506
+ }),
507
+ /*#__PURE__*/ jsx(Table.Loading, {}),
508
+ /*#__PURE__*/ jsx(Table.Body, {
509
+ children: releaseActions[key].map(({ id, contentType, locale, type, entry, status }, actionIndex)=>/*#__PURE__*/ jsxs(Tr, {
510
+ children: [
511
+ /*#__PURE__*/ jsx(Td, {
512
+ width: "25%",
513
+ maxWidth: "200px",
514
+ children: /*#__PURE__*/ jsx(Typography, {
515
+ ellipsis: true,
516
+ children: `${contentType.mainFieldValue || entry.id}`
517
+ })
518
+ }),
519
+ hasI18nEnabled && /*#__PURE__*/ jsx(Td, {
520
+ width: "10%",
521
+ children: /*#__PURE__*/ jsx(Typography, {
522
+ children: `${locale?.name ? locale.name : '-'}`
523
+ })
524
+ }),
525
+ /*#__PURE__*/ jsx(Td, {
526
+ width: "10%",
527
+ children: /*#__PURE__*/ jsx(Typography, {
528
+ children: contentType.displayName || ''
529
+ })
530
+ }),
531
+ /*#__PURE__*/ jsx(Td, {
532
+ width: "20%",
533
+ children: release.releasedAt ? /*#__PURE__*/ jsx(Typography, {
534
+ children: formatMessage({
535
+ id: 'content-releases.page.ReleaseDetails.table.action-published',
536
+ defaultMessage: 'This entry was <b>{isPublish, select, true {published} other {unpublished}}</b>.'
537
+ }, {
538
+ isPublish: type === 'publish',
539
+ b: (children)=>/*#__PURE__*/ jsx(Typography, {
540
+ fontWeight: "bold",
541
+ children: children
542
+ })
543
+ })
544
+ }) : /*#__PURE__*/ jsx(ReleaseActionOptions, {
545
+ selected: type,
546
+ handleChange: (e)=>handleChangeType(e, id, [
547
+ key,
548
+ actionIndex
549
+ ]),
550
+ name: `release-action-${id}-type`,
551
+ disabled: !canUpdate
552
+ })
553
+ }),
554
+ !release.releasedAt && /*#__PURE__*/ jsxs(Fragment, {
555
+ children: [
556
+ /*#__PURE__*/ jsx(Td, {
557
+ width: "20%",
558
+ minWidth: "200px",
559
+ children: /*#__PURE__*/ jsx(EntryValidationPopover, {
560
+ action: type,
561
+ schema: contentTypes?.[contentType.uid],
562
+ entry: entry,
563
+ status: status
564
+ })
565
+ }),
566
+ /*#__PURE__*/ jsx(Td, {
567
+ children: /*#__PURE__*/ jsx(Flex, {
568
+ justifyContent: "flex-end",
569
+ children: /*#__PURE__*/ jsxs(ReleaseActionMenu.Root, {
570
+ children: [
571
+ /*#__PURE__*/ jsx(ReleaseActionMenu.ReleaseActionEntryLinkItem, {
572
+ contentTypeUid: contentType.uid,
573
+ documentId: entry.documentId,
574
+ locale: locale?.code
575
+ }),
576
+ /*#__PURE__*/ jsx(ReleaseActionMenu.DeleteReleaseActionItem, {
577
+ releaseId: release.id,
578
+ actionId: id
579
+ })
580
+ ]
581
+ })
582
+ })
583
+ })
584
+ ]
585
+ })
586
+ ]
587
+ }, id))
588
+ })
589
+ ]
590
+ })
591
+ })
592
+ ]
593
+ }, `releases-group-${key}`)),
594
+ /*#__PURE__*/ jsxs(Pagination.Root, {
595
+ ...releaseMeta?.pagination,
596
+ defaultPageSize: releaseMeta?.pagination?.pageSize,
597
+ children: [
598
+ /*#__PURE__*/ jsx(Pagination.PageSize, {}),
599
+ /*#__PURE__*/ jsx(Pagination.Links, {})
600
+ ]
601
+ })
602
+ ]
603
+ })
604
+ });
605
+ };
606
+ /* -------------------------------------------------------------------------------------------------
607
+ * ReleaseDetailsPage
608
+ * -----------------------------------------------------------------------------------------------*/ const ReleaseDetailsPage = ()=>{
609
+ const { formatMessage } = useIntl();
610
+ const { releaseId } = useParams();
611
+ const { toggleNotification } = useNotification();
612
+ const { formatAPIError } = useAPIErrorHandler();
613
+ const navigate = useNavigate();
614
+ const [releaseModalShown, setReleaseModalShown] = React.useState(false);
615
+ const [showWarningSubmit, setWarningSubmit] = React.useState(false);
616
+ const { isLoading: isLoadingDetails, data, isSuccess: isSuccessDetails } = useGetReleaseQuery({
617
+ id: releaseId
618
+ }, {
619
+ skip: !releaseId
620
+ });
621
+ const { data: dataTimezone, isLoading: isLoadingTimezone } = useGetReleaseSettingsQuery();
622
+ const [updateRelease, { isLoading: isSubmittingForm }] = useUpdateReleaseMutation();
623
+ const [deleteRelease] = useDeleteReleaseMutation();
624
+ const toggleEditReleaseModal = ()=>{
625
+ setReleaseModalShown((prev)=>!prev);
626
+ };
627
+ const getTimezoneValue = ()=>{
628
+ if (releaseData?.timezone) {
629
+ return releaseData.timezone;
630
+ } else {
631
+ if (dataTimezone?.data.defaultTimezone) {
632
+ return dataTimezone.data.defaultTimezone;
633
+ }
634
+ return null;
635
+ }
636
+ };
637
+ const toggleWarningSubmit = ()=>setWarningSubmit((prevState)=>!prevState);
638
+ if (isLoadingDetails || isLoadingTimezone) {
639
+ return /*#__PURE__*/ jsx(ReleaseDetailsLayout, {
640
+ toggleEditReleaseModal: toggleEditReleaseModal,
641
+ toggleWarningSubmit: toggleWarningSubmit,
642
+ children: /*#__PURE__*/ jsx(Page.Loading, {})
643
+ });
644
+ }
645
+ if (!releaseId) {
646
+ return /*#__PURE__*/ jsx(Navigate, {
647
+ to: ".."
648
+ });
649
+ }
650
+ const releaseData = isSuccessDetails && data?.data || null;
651
+ const title = releaseData?.name || '';
652
+ const timezone = getTimezoneValue();
653
+ const scheduledAt = releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;
654
+ // Just get the date and time to display without considering updated timezone time
655
+ const date = scheduledAt ? format(scheduledAt, 'yyyy-MM-dd') : undefined;
656
+ const time = scheduledAt ? format(scheduledAt, 'HH:mm') : '';
657
+ const handleEditRelease = async (values)=>{
658
+ const response = await updateRelease({
659
+ id: releaseId,
660
+ name: values.name,
661
+ scheduledAt: values.scheduledAt,
662
+ timezone: values.timezone
663
+ });
664
+ if ('data' in response) {
665
+ // When the response returns an object with 'data', handle success
666
+ toggleNotification({
667
+ type: 'success',
668
+ message: formatMessage({
669
+ id: 'content-releases.modal.release-updated-notification-success',
670
+ defaultMessage: 'Release updated.'
671
+ })
672
+ });
673
+ toggleEditReleaseModal();
674
+ } else if (isFetchError(response.error)) {
675
+ // When the response returns an object with 'error', handle fetch error
676
+ toggleNotification({
677
+ type: 'danger',
678
+ message: formatAPIError(response.error)
679
+ });
680
+ } else {
681
+ // Otherwise, the response returns an object with 'error', handle a generic error
682
+ toggleNotification({
683
+ type: 'danger',
684
+ message: formatMessage({
685
+ id: 'notification.error',
686
+ defaultMessage: 'An error occurred'
687
+ })
688
+ });
689
+ }
690
+ };
691
+ const handleDeleteRelease = async ()=>{
692
+ const response = await deleteRelease({
693
+ id: releaseId
694
+ });
695
+ if ('data' in response) {
696
+ navigate('..');
697
+ } else if (isFetchError(response.error)) {
698
+ // When the response returns an object with 'error', handle fetch error
699
+ toggleNotification({
700
+ type: 'danger',
701
+ message: formatAPIError(response.error)
702
+ });
703
+ } else {
704
+ // Otherwise, the response returns an object with 'error', handle a generic error
705
+ toggleNotification({
706
+ type: 'danger',
707
+ message: formatMessage({
708
+ id: 'notification.error',
709
+ defaultMessage: 'An error occurred'
710
+ })
711
+ });
712
+ }
713
+ };
714
+ return /*#__PURE__*/ jsxs(ReleaseDetailsLayout, {
715
+ toggleEditReleaseModal: toggleEditReleaseModal,
716
+ toggleWarningSubmit: toggleWarningSubmit,
717
+ children: [
718
+ /*#__PURE__*/ jsx(ReleaseDetailsBody, {
719
+ releaseId: releaseId
720
+ }),
721
+ /*#__PURE__*/ jsx(ReleaseModal, {
722
+ open: releaseModalShown,
723
+ handleClose: toggleEditReleaseModal,
724
+ handleSubmit: handleEditRelease,
725
+ isLoading: isLoadingDetails || isSubmittingForm,
726
+ initialValues: {
727
+ name: title || '',
728
+ scheduledAt,
729
+ date,
730
+ time,
731
+ isScheduled: Boolean(scheduledAt),
732
+ timezone
733
+ }
734
+ }),
735
+ /*#__PURE__*/ jsx(Dialog.Root, {
736
+ open: showWarningSubmit,
737
+ onOpenChange: toggleWarningSubmit,
738
+ children: /*#__PURE__*/ jsx(ConfirmDialog, {
739
+ onConfirm: handleDeleteRelease,
740
+ children: formatMessage({
741
+ id: 'content-releases.dialog.confirmation-message',
742
+ defaultMessage: 'Are you sure you want to delete this release?'
743
+ })
744
+ })
745
+ })
746
+ ]
747
+ });
748
+ };
749
+
750
+ export { ReleaseDetailsPage };
751
+ //# sourceMappingURL=ReleaseDetailsPage.mjs.map