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