@strapi/content-releases 0.0.0-next.37dd1e3ff22e1635b69683abadd444912ae0dbff → 0.0.0-next.3c5bc3f35387771b185349533729e99e6e59c525

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