@strapi/content-releases 5.12.1 → 5.12.2

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