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