@strapi/content-releases 0.0.0-next.334c95408abdd9ecc0ece0e8c0fd5eb0024ad027 → 0.0.0-next.33da70177d156ccbea5cfcbeed769bf25f8a7adc

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