@strapi/content-releases 0.0.0-experimental.e3e48deb89bd0a1b6cc69b698696566fa7854a95 → 0.0.0-experimental.e5740babedd53cf5b6af99d74920b6b9ef1e4c11

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 (99) hide show
  1. package/dist/_chunks/{App-PQlYzNfb.mjs → App-HVXzE3i3.mjs} +256 -280
  2. package/dist/_chunks/App-HVXzE3i3.mjs.map +1 -0
  3. package/dist/_chunks/{App-lzeJz92X.js → App-l62gIUTX.js} +254 -278
  4. package/dist/_chunks/App-l62gIUTX.js.map +1 -0
  5. package/dist/_chunks/{en-WuuhP6Bn.mjs → en-RdapH-9X.mjs} +1 -2
  6. package/dist/_chunks/en-RdapH-9X.mjs.map +1 -0
  7. package/dist/_chunks/{en-gcJJ5htG.js → en-faJDuv3q.js} +1 -2
  8. package/dist/_chunks/en-faJDuv3q.js.map +1 -0
  9. package/dist/_chunks/{index-Nf1JfI-m.js → index-ML_b3php.js} +28 -22
  10. package/dist/_chunks/index-ML_b3php.js.map +1 -0
  11. package/dist/_chunks/{index--4AgLDzb.mjs → index-Ys87ROOe.mjs} +32 -26
  12. package/dist/_chunks/index-Ys87ROOe.mjs.map +1 -0
  13. package/dist/admin/index.js +1 -1
  14. package/dist/admin/index.mjs +1 -1
  15. package/dist/server/index.js +344 -203
  16. package/dist/server/index.js.map +1 -1
  17. package/dist/server/index.mjs +344 -204
  18. package/dist/server/index.mjs.map +1 -1
  19. package/package.json +21 -14
  20. package/dist/_chunks/App-PQlYzNfb.mjs.map +0 -1
  21. package/dist/_chunks/App-lzeJz92X.js.map +0 -1
  22. package/dist/_chunks/en-WuuhP6Bn.mjs.map +0 -1
  23. package/dist/_chunks/en-gcJJ5htG.js.map +0 -1
  24. package/dist/_chunks/index--4AgLDzb.mjs.map +0 -1
  25. package/dist/_chunks/index-Nf1JfI-m.js.map +0 -1
  26. package/dist/admin/src/components/CMReleasesContainer.d.ts +0 -1
  27. package/dist/admin/src/components/RelativeTime.d.ts +0 -28
  28. package/dist/admin/src/components/ReleaseActionMenu.d.ts +0 -26
  29. package/dist/admin/src/components/ReleaseActionOptions.d.ts +0 -9
  30. package/dist/admin/src/components/ReleaseModal.d.ts +0 -16
  31. package/dist/admin/src/constants.d.ts +0 -58
  32. package/dist/admin/src/index.d.ts +0 -3
  33. package/dist/admin/src/pages/App.d.ts +0 -1
  34. package/dist/admin/src/pages/PurchaseContentReleases.d.ts +0 -2
  35. package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +0 -2
  36. package/dist/admin/src/pages/ReleasesPage.d.ts +0 -8
  37. package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +0 -181
  38. package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +0 -39
  39. package/dist/admin/src/pluginId.d.ts +0 -1
  40. package/dist/admin/src/services/axios.d.ts +0 -29
  41. package/dist/admin/src/services/release.d.ts +0 -369
  42. package/dist/admin/src/store/hooks.d.ts +0 -7
  43. package/dist/admin/src/utils/time.d.ts +0 -1
  44. package/dist/server/src/bootstrap.d.ts +0 -5
  45. package/dist/server/src/bootstrap.d.ts.map +0 -1
  46. package/dist/server/src/constants.d.ts +0 -12
  47. package/dist/server/src/constants.d.ts.map +0 -1
  48. package/dist/server/src/content-types/index.d.ts +0 -99
  49. package/dist/server/src/content-types/index.d.ts.map +0 -1
  50. package/dist/server/src/content-types/release/index.d.ts +0 -48
  51. package/dist/server/src/content-types/release/index.d.ts.map +0 -1
  52. package/dist/server/src/content-types/release/schema.d.ts +0 -47
  53. package/dist/server/src/content-types/release/schema.d.ts.map +0 -1
  54. package/dist/server/src/content-types/release-action/index.d.ts +0 -50
  55. package/dist/server/src/content-types/release-action/index.d.ts.map +0 -1
  56. package/dist/server/src/content-types/release-action/schema.d.ts +0 -49
  57. package/dist/server/src/content-types/release-action/schema.d.ts.map +0 -1
  58. package/dist/server/src/controllers/index.d.ts +0 -18
  59. package/dist/server/src/controllers/index.d.ts.map +0 -1
  60. package/dist/server/src/controllers/release-action.d.ts +0 -9
  61. package/dist/server/src/controllers/release-action.d.ts.map +0 -1
  62. package/dist/server/src/controllers/release.d.ts +0 -11
  63. package/dist/server/src/controllers/release.d.ts.map +0 -1
  64. package/dist/server/src/controllers/validation/release-action.d.ts +0 -3
  65. package/dist/server/src/controllers/validation/release-action.d.ts.map +0 -1
  66. package/dist/server/src/controllers/validation/release.d.ts +0 -2
  67. package/dist/server/src/controllers/validation/release.d.ts.map +0 -1
  68. package/dist/server/src/destroy.d.ts +0 -5
  69. package/dist/server/src/destroy.d.ts.map +0 -1
  70. package/dist/server/src/index.d.ts +0 -2092
  71. package/dist/server/src/index.d.ts.map +0 -1
  72. package/dist/server/src/migrations/index.d.ts +0 -10
  73. package/dist/server/src/migrations/index.d.ts.map +0 -1
  74. package/dist/server/src/register.d.ts +0 -5
  75. package/dist/server/src/register.d.ts.map +0 -1
  76. package/dist/server/src/routes/index.d.ts +0 -35
  77. package/dist/server/src/routes/index.d.ts.map +0 -1
  78. package/dist/server/src/routes/release-action.d.ts +0 -18
  79. package/dist/server/src/routes/release-action.d.ts.map +0 -1
  80. package/dist/server/src/routes/release.d.ts +0 -18
  81. package/dist/server/src/routes/release.d.ts.map +0 -1
  82. package/dist/server/src/services/index.d.ts +0 -1826
  83. package/dist/server/src/services/index.d.ts.map +0 -1
  84. package/dist/server/src/services/release.d.ts +0 -66
  85. package/dist/server/src/services/release.d.ts.map +0 -1
  86. package/dist/server/src/services/scheduling.d.ts +0 -18
  87. package/dist/server/src/services/scheduling.d.ts.map +0 -1
  88. package/dist/server/src/services/validation.d.ts +0 -14
  89. package/dist/server/src/services/validation.d.ts.map +0 -1
  90. package/dist/server/src/utils/index.d.ts +0 -14
  91. package/dist/server/src/utils/index.d.ts.map +0 -1
  92. package/dist/shared/contracts/release-actions.d.ts +0 -105
  93. package/dist/shared/contracts/release-actions.d.ts.map +0 -1
  94. package/dist/shared/contracts/releases.d.ts +0 -166
  95. package/dist/shared/contracts/releases.d.ts.map +0 -1
  96. package/dist/shared/types.d.ts +0 -24
  97. package/dist/shared/types.d.ts.map +0 -1
  98. package/dist/shared/validation-schemas.d.ts +0 -2
  99. package/dist/shared/validation-schemas.d.ts.map +0 -1
@@ -1,53 +1,23 @@
1
- import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
- import { useLicenseLimits, Page, Pagination, BackButton, Table, unstable_useDocument } from "@strapi/admin/strapi-admin";
3
- import { useLocation, useNavigate, useParams, Navigate, Link as Link$1, Routes, Route } from "react-router-dom";
4
- import { g as getTimezoneOffset, p as pluginId, u as useGetReleasesQuery, a as useCreateReleaseMutation, P as PERMISSIONS, i as isAxiosError, b as useGetReleaseQuery, c as useUpdateReleaseMutation, d as useDeleteReleaseMutation, e as usePublishReleaseMutation, f as useTypedDispatch, h as useGetReleaseActionsQuery, j as useUpdateReleaseActionMutation, R as ReleaseActionOptions, k as ReleaseActionMenu, r as releaseApi } from "./index--4AgLDzb.mjs";
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import { RelativeTime, useNotification, useAPIErrorHandler, useQueryParams, useTracking, LoadingIndicatorPage, CheckPermissions, PageSizeURLQuery, PaginationURLQuery, AnErrorOccurred, ConfirmDialog, useRBAC, NoContent, Table, CheckPagePermissions } from "@strapi/helper-plugin";
3
+ import { useLocation, useHistory, useParams, Redirect, Link as Link$2, Switch, Route } from "react-router-dom";
4
+ import { g as getTimezoneOffset, p as pluginId, u as useGetReleasesQuery, a as useCreateReleaseMutation, P as PERMISSIONS, i as isAxiosError, b as useGetReleaseQuery, c as useUpdateReleaseMutation, d as useDeleteReleaseMutation, e as usePublishReleaseMutation, f as useTypedDispatch, h as useGetReleaseActionsQuery, j as useUpdateReleaseActionMutation, R as ReleaseActionOptions, k as ReleaseActionMenu, r as releaseApi } from "./index-Ys87ROOe.mjs";
5
5
  import * as React from "react";
6
- import { ModalLayout, ModalHeader, Typography, ModalBody, Flex, TextInput, Box, Checkbox, DatePicker, TimePicker, ModalFooter, Button, Combobox, ComboboxOption, Alert, Main, HeaderLayout, ContentLayout, TabGroup, Tabs, Tab, Divider, TabPanels, TabPanel, EmptyStateLayout, Grid, GridItem, Badge, IconButton, SingleSelect, SingleSelectOption, Tr, Td, Icon, Tooltip } from "@strapi/design-system";
6
+ import { useLicenseLimits, unstable_useDocument } from "@strapi/admin/strapi-admin";
7
+ import { ModalLayout, ModalHeader, Typography, ModalBody, Flex, TextInput, Box, Checkbox, DatePicker, TimePicker, ModalFooter, Button, Combobox, ComboboxOption, Alert, Main, HeaderLayout, ContentLayout, TabGroup, Tabs, Tab, Divider, TabPanels, TabPanel, EmptyStateLayout, Grid, GridItem, Badge, Link as Link$1, IconButton, SingleSelect, SingleSelectOption, Tr, Td, Icon, Tooltip } from "@strapi/design-system";
7
8
  import { Link, Menu, LinkButton } from "@strapi/design-system/v2";
8
- import { useNotification, useAPIErrorHandler, useQueryParams, useTracking, CheckPermissions, ConfirmDialog, useRBAC } from "@strapi/helper-plugin";
9
- import { Plus, EmptyDocuments, Pencil, Trash, More, CrossCircle, CheckCircle } from "@strapi/icons";
9
+ import { Plus, EmptyDocuments, Pencil, Trash, ArrowLeft, More, CrossCircle, CheckCircle } from "@strapi/icons";
10
10
  import format from "date-fns/format";
11
- import { zonedTimeToUtc, utcToZonedTime } from "date-fns-tz";
11
+ import { utcToZonedTime, zonedTimeToUtc } from "date-fns-tz";
12
12
  import { useIntl } from "react-intl";
13
13
  import styled from "styled-components";
14
- import { intervalToDuration, isPast, formatISO, parse } from "date-fns";
14
+ import { formatISO, parse } from "date-fns";
15
15
  import { Formik, Form, useFormikContext } from "formik";
16
16
  import * as yup from "yup";
17
17
  import "@reduxjs/toolkit/query";
18
18
  import "axios";
19
19
  import "@reduxjs/toolkit/query/react";
20
20
  import "react-redux";
21
- const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
22
- const RelativeTime = React.forwardRef(
23
- ({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {
24
- const { formatRelativeTime, formatDate, formatTime } = useIntl();
25
- const interval = intervalToDuration({
26
- start: timestamp,
27
- end: Date.now()
28
- // see https://github.com/date-fns/date-fns/issues/2891 – No idea why it's all partial it returns it every time.
29
- });
30
- const unit = intervals.find((intervalUnit) => {
31
- return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
32
- });
33
- const relativeTime = isPast(timestamp) ? -interval[unit] : interval[unit];
34
- const customInterval = customIntervals.find(
35
- (custom) => interval[custom.unit] < custom.threshold
36
- );
37
- const displayText = customInterval ? customInterval.text : formatRelativeTime(relativeTime, unit, { numeric: "auto" });
38
- return /* @__PURE__ */ jsx(
39
- "time",
40
- {
41
- ref: forwardedRef,
42
- dateTime: timestamp.toISOString(),
43
- role: "time",
44
- title: `${formatDate(timestamp)} ${formatTime(timestamp)}`,
45
- ...restProps,
46
- children: displayText
47
- }
48
- );
49
- }
50
- );
51
21
  const RELEASE_SCHEMA = yup.object().shape({
52
22
  name: yup.string().trim().required(),
53
23
  scheduledAt: yup.string().nullable(),
@@ -77,7 +47,6 @@ const ReleaseModal = ({
77
47
  const { formatMessage } = useIntl();
78
48
  const { pathname } = useLocation();
79
49
  const isCreatingRelease = pathname === `/plugins/${pluginId}`;
80
- const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
81
50
  const { timezoneList, systemTimezone = { value: "UTC+00:00-Africa/Abidjan " } } = getTimezones(
82
51
  initialValues.scheduledAt ? new Date(initialValues.scheduledAt) : /* @__PURE__ */ new Date()
83
52
  );
@@ -86,12 +55,12 @@ const ReleaseModal = ({
86
55
  if (!date || !time || !timezone)
87
56
  return null;
88
57
  const formattedDate = parse(time, "HH:mm", new Date(date));
89
- const timezoneWithoutOffset = timezone.split("_")[1];
58
+ const timezoneWithoutOffset = timezone.split("&")[1];
90
59
  return zonedTimeToUtc(formattedDate, timezoneWithoutOffset);
91
60
  };
92
61
  const getTimezoneWithOffset = () => {
93
62
  const currentTimezone = timezoneList.find(
94
- (timezone) => timezone.value.split("_")[1] === initialValues.timezone
63
+ (timezone) => timezone.value.split("&")[1] === initialValues.timezone
95
64
  );
96
65
  return currentTimezone?.value || systemTimezone.value;
97
66
  };
@@ -109,7 +78,7 @@ const ReleaseModal = ({
109
78
  onSubmit: (values) => {
110
79
  handleSubmit({
111
80
  ...values,
112
- timezone: values.timezone ? values.timezone.split("_")[1] : null,
81
+ timezone: values.timezone ? values.timezone.split("&")[1] : null,
113
82
  scheduledAt: values.isScheduled ? getScheduledTimestamp(values) : null
114
83
  });
115
84
  },
@@ -135,92 +104,88 @@ const ReleaseModal = ({
135
104
  required: true
136
105
  }
137
106
  ),
138
- IsSchedulingEnabled && /* @__PURE__ */ jsxs(Fragment, { children: [
139
- /* @__PURE__ */ jsx(Box, { width: "max-content", children: /* @__PURE__ */ jsx(
140
- Checkbox,
141
- {
142
- name: "isScheduled",
143
- value: values.isScheduled,
144
- onChange: (event) => {
145
- setFieldValue("isScheduled", event.target.checked);
146
- if (!event.target.checked) {
107
+ /* @__PURE__ */ jsx(Box, { width: "max-content", children: /* @__PURE__ */ jsx(
108
+ Checkbox,
109
+ {
110
+ name: "isScheduled",
111
+ value: values.isScheduled,
112
+ onChange: (event) => {
113
+ setFieldValue("isScheduled", event.target.checked);
114
+ if (!event.target.checked) {
115
+ setFieldValue("date", null);
116
+ setFieldValue("time", "");
117
+ setFieldValue("timezone", null);
118
+ } else {
119
+ setFieldValue("date", initialValues.date);
120
+ setFieldValue("time", initialValues.time);
121
+ setFieldValue("timezone", initialValues.timezone ?? systemTimezone?.value);
122
+ }
123
+ },
124
+ children: /* @__PURE__ */ jsx(
125
+ Typography,
126
+ {
127
+ textColor: values.isScheduled ? "primary600" : "neutral800",
128
+ fontWeight: values.isScheduled ? "semiBold" : "regular",
129
+ children: formatMessage({
130
+ id: "modal.form.input.label.schedule-release",
131
+ defaultMessage: "Schedule release"
132
+ })
133
+ }
134
+ )
135
+ }
136
+ ) }),
137
+ values.isScheduled && /* @__PURE__ */ jsxs(Fragment, { children: [
138
+ /* @__PURE__ */ jsxs(Flex, { gap: 4, alignItems: "start", children: [
139
+ /* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
140
+ DatePicker,
141
+ {
142
+ label: formatMessage({
143
+ id: "content-releases.modal.form.input.label.date",
144
+ defaultMessage: "Date"
145
+ }),
146
+ name: "date",
147
+ error: errors.date,
148
+ onChange: (date) => {
149
+ const isoFormatDate = date ? formatISO(date, { representation: "date" }) : null;
150
+ setFieldValue("date", isoFormatDate);
151
+ },
152
+ clearLabel: formatMessage({
153
+ id: "content-releases.modal.form.input.clearLabel",
154
+ defaultMessage: "Clear"
155
+ }),
156
+ onClear: () => {
147
157
  setFieldValue("date", null);
158
+ },
159
+ selectedDate: values.date || void 0,
160
+ required: true,
161
+ minDate: utcToZonedTime(/* @__PURE__ */ new Date(), values.timezone.split("&")[1])
162
+ }
163
+ ) }),
164
+ /* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
165
+ TimePicker,
166
+ {
167
+ label: formatMessage({
168
+ id: "content-releases.modal.form.input.label.time",
169
+ defaultMessage: "Time"
170
+ }),
171
+ name: "time",
172
+ error: errors.time,
173
+ onChange: (time) => {
174
+ setFieldValue("time", time);
175
+ },
176
+ clearLabel: formatMessage({
177
+ id: "content-releases.modal.form.input.clearLabel",
178
+ defaultMessage: "Clear"
179
+ }),
180
+ onClear: () => {
148
181
  setFieldValue("time", "");
149
- setFieldValue("timezone", null);
150
- } else {
151
- setFieldValue("date", initialValues.date);
152
- setFieldValue("time", initialValues.time);
153
- setFieldValue(
154
- "timezone",
155
- initialValues.timezone ?? systemTimezone?.value
156
- );
157
- }
158
- },
159
- children: /* @__PURE__ */ jsx(
160
- Typography,
161
- {
162
- textColor: values.isScheduled ? "primary600" : "neutral800",
163
- fontWeight: values.isScheduled ? "semiBold" : "regular",
164
- children: formatMessage({
165
- id: "modal.form.input.label.schedule-release",
166
- defaultMessage: "Schedule release"
167
- })
168
- }
169
- )
170
- }
171
- ) }),
172
- values.isScheduled && /* @__PURE__ */ jsxs(Fragment, { children: [
173
- /* @__PURE__ */ jsxs(Flex, { gap: 4, alignItems: "start", children: [
174
- /* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
175
- DatePicker,
176
- {
177
- label: formatMessage({
178
- id: "content-releases.modal.form.input.label.date",
179
- defaultMessage: "Date"
180
- }),
181
- name: "date",
182
- error: errors.date,
183
- onChange: (date) => {
184
- const isoFormatDate = date ? formatISO(date, { representation: "date" }) : null;
185
- setFieldValue("date", isoFormatDate);
186
- },
187
- clearLabel: formatMessage({
188
- id: "content-releases.modal.form.input.clearLabel",
189
- defaultMessage: "Clear"
190
- }),
191
- onClear: () => {
192
- setFieldValue("date", null);
193
- },
194
- selectedDate: values.date || void 0,
195
- required: true
196
- }
197
- ) }),
198
- /* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
199
- TimePicker,
200
- {
201
- label: formatMessage({
202
- id: "content-releases.modal.form.input.label.time",
203
- defaultMessage: "Time"
204
- }),
205
- name: "time",
206
- error: errors.time,
207
- onChange: (time) => {
208
- setFieldValue("time", time);
209
- },
210
- clearLabel: formatMessage({
211
- id: "content-releases.modal.form.input.clearLabel",
212
- defaultMessage: "Clear"
213
- }),
214
- onClear: () => {
215
- setFieldValue("time", "");
216
- },
217
- value: values.time || void 0,
218
- required: true
219
- }
220
- ) })
221
- ] }),
222
- /* @__PURE__ */ jsx(TimezoneComponent, { timezoneOptions: timezoneList })
223
- ] })
182
+ },
183
+ value: values.time || void 0,
184
+ required: true
185
+ }
186
+ ) })
187
+ ] }),
188
+ /* @__PURE__ */ jsx(TimezoneComponent, { timezoneOptions: timezoneList })
224
189
  ] })
225
190
  ] }) }),
226
191
  /* @__PURE__ */ jsx(
@@ -244,10 +209,10 @@ const ReleaseModal = ({
244
209
  const getTimezones = (selectedDate) => {
245
210
  const timezoneList = Intl.supportedValuesOf("timeZone").map((timezone) => {
246
211
  const utcOffset = getTimezoneOffset(timezone, selectedDate);
247
- return { offset: utcOffset, value: `${utcOffset}_${timezone}` };
212
+ return { offset: utcOffset, value: `${utcOffset}&${timezone}` };
248
213
  });
249
214
  const systemTimezone = timezoneList.find(
250
- (timezone) => timezone.value.split("_")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
215
+ (timezone) => timezone.value.split("&")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
251
216
  );
252
217
  return { timezoneList, systemTimezone };
253
218
  };
@@ -259,7 +224,7 @@ const TimezoneComponent = ({ timezoneOptions }) => {
259
224
  if (values.date) {
260
225
  const { timezoneList: timezoneList2 } = getTimezones(new Date(values.date));
261
226
  setTimezoneList(timezoneList2);
262
- const updatedTimezone = values.timezone && timezoneList2.find((tz) => tz.value.split("_")[1] === values.timezone.split("_")[1]);
227
+ const updatedTimezone = values.timezone && timezoneList2.find((tz) => tz.value.split("&")[1] === values.timezone.split("&")[1]);
263
228
  if (updatedTimezone) {
264
229
  setFieldValue("timezone", updatedTimezone.value);
265
230
  }
@@ -272,9 +237,10 @@ const TimezoneComponent = ({ timezoneOptions }) => {
272
237
  id: "content-releases.modal.form.input.label.timezone",
273
238
  defaultMessage: "Timezone"
274
239
  }),
240
+ autocomplete: { type: "list", filter: "contains" },
275
241
  name: "timezone",
276
242
  value: values.timezone || void 0,
277
- textValue: values.timezone ? values.timezone.replace("_", " ") : void 0,
243
+ textValue: values.timezone ? values.timezone.replace(/&/, " ") : void 0,
278
244
  onChange: (timezone) => {
279
245
  setFieldValue("timezone", timezone);
280
246
  },
@@ -286,7 +252,7 @@ const TimezoneComponent = ({ timezoneOptions }) => {
286
252
  },
287
253
  error: errors.timezone,
288
254
  required: true,
289
- children: timezoneList.map((timezone) => /* @__PURE__ */ jsx(ComboboxOption, { value: timezone.value, children: timezone.value.replace("_", " ") }, timezone.value))
255
+ children: timezoneList.map((timezone) => /* @__PURE__ */ jsx(ComboboxOption, { value: timezone.value, children: timezone.value.replace(/&/, " ") }, timezone.value))
290
256
  }
291
257
  );
292
258
  };
@@ -323,9 +289,8 @@ const getBadgeProps = (status) => {
323
289
  };
324
290
  const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
325
291
  const { formatMessage } = useIntl();
326
- const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
327
292
  if (isError) {
328
- return /* @__PURE__ */ jsx(Page.Error, {});
293
+ return /* @__PURE__ */ jsx(AnErrorOccurred, {});
329
294
  }
330
295
  if (releases?.length === 0) {
331
296
  return /* @__PURE__ */ jsx(
@@ -344,7 +309,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
344
309
  }
345
310
  );
346
311
  }
347
- return /* @__PURE__ */ jsx(Grid, { gap: 4, children: releases.map(({ id, name, actions, scheduledAt, status }) => /* @__PURE__ */ jsx(GridItem, { col: 3, s: 6, xs: 12, children: /* @__PURE__ */ jsx(LinkCard, { href: `content-releases/${id}`, isExternal: false, children: /* @__PURE__ */ jsxs(
312
+ return /* @__PURE__ */ jsx(Grid, { gap: 4, children: releases.map(({ id, name, scheduledAt, status }) => /* @__PURE__ */ jsx(GridItem, { col: 3, s: 6, xs: 12, children: /* @__PURE__ */ jsx(LinkCard, { href: `content-releases/${id}`, isExternal: false, children: /* @__PURE__ */ jsxs(
348
313
  Flex,
349
314
  {
350
315
  direction: "column",
@@ -360,16 +325,10 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
360
325
  children: [
361
326
  /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "start", gap: 1, children: [
362
327
  /* @__PURE__ */ jsx(Typography, { as: "h3", variant: "delta", fontWeight: "bold", children: name }),
363
- /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: IsSchedulingEnabled ? scheduledAt ? /* @__PURE__ */ jsx(CapitalizeRelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
328
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: scheduledAt ? /* @__PURE__ */ jsx(CapitalizeRelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
364
329
  id: "content-releases.pages.Releases.not-scheduled",
365
330
  defaultMessage: "Not scheduled"
366
- }) : formatMessage(
367
- {
368
- id: "content-releases.page.Releases.release-item.entries",
369
- defaultMessage: "{number, plural, =0 {No entries} one {# entry} other {# entries}}"
370
- },
371
- { number: actions.meta.count }
372
- ) })
331
+ }) })
373
332
  ] }),
374
333
  /* @__PURE__ */ jsx(Badge, { ...getBadgeProps(status), children: status })
375
334
  ]
@@ -388,8 +347,7 @@ const INITIAL_FORM_VALUES = {
388
347
  name: "",
389
348
  date: null,
390
349
  time: "",
391
- // Remove future flag check after Scheduling Beta release and replace with true as creating new release should include scheduling by default
392
- isScheduled: window.strapi.future.isEnabled("contentReleasesScheduling"),
350
+ isScheduled: true,
393
351
  scheduledAt: null,
394
352
  timezone: null
395
353
  };
@@ -399,7 +357,7 @@ const ReleasesPage = () => {
399
357
  const [releaseModalShown, setReleaseModalShown] = React.useState(false);
400
358
  const toggleNotification = useNotification();
401
359
  const { formatMessage } = useIntl();
402
- const navigate = useNavigate();
360
+ const { push, replace } = useHistory();
403
361
  const { formatAPIError } = useAPIErrorHandler();
404
362
  const [{ query }, setQuery] = useQueryParams();
405
363
  const response = useGetReleasesQuery(query);
@@ -423,9 +381,9 @@ const ReleasesPage = () => {
423
381
  defaultMessage: "Please try again or open another release."
424
382
  })
425
383
  });
426
- navigate("", { replace: true, state: null });
384
+ replace({ state: null });
427
385
  }
428
- }, [formatMessage, location?.state?.errors, navigate, toggleNotification]);
386
+ }, [formatMessage, location?.state?.errors, replace, toggleNotification]);
429
387
  React.useEffect(() => {
430
388
  if (tabRef.current) {
431
389
  tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
@@ -435,7 +393,7 @@ const ReleasesPage = () => {
435
393
  setReleaseModalShown((prev) => !prev);
436
394
  };
437
395
  if (isLoading) {
438
- return /* @__PURE__ */ jsx(Page.Loading, {});
396
+ return /* @__PURE__ */ jsx(Main, { "aria-busy": isLoading, children: /* @__PURE__ */ jsx(LoadingIndicatorPage, {}) });
439
397
  }
440
398
  const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
441
399
  const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
@@ -466,7 +424,7 @@ const ReleasesPage = () => {
466
424
  })
467
425
  });
468
426
  trackUsage("didCreateRelease");
469
- navigate(response2.data.data.id.toString());
427
+ push(`/plugins/content-releases/${response2.data.data.id}`);
470
428
  } else if (isAxiosError(response2.error)) {
471
429
  toggleNotification({
472
430
  type: "warning",
@@ -581,17 +539,23 @@ const ReleasesPage = () => {
581
539
  ]
582
540
  }
583
541
  ),
584
- /* @__PURE__ */ jsxs(
585
- Pagination.Root,
586
- {
587
- ...response?.currentData?.meta?.pagination,
588
- defaultPageSize: response?.currentData?.meta?.pagination?.pageSize,
589
- children: [
590
- /* @__PURE__ */ jsx(Pagination.PageSize, { options: ["8", "16", "32", "64"] }),
591
- /* @__PURE__ */ jsx(Pagination.Links, {})
592
- ]
593
- }
594
- )
542
+ response.currentData?.meta?.pagination?.total ? /* @__PURE__ */ jsxs(Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
543
+ /* @__PURE__ */ jsx(
544
+ PageSizeURLQuery,
545
+ {
546
+ options: ["8", "16", "32", "64"],
547
+ defaultValue: response?.currentData?.meta?.pagination?.pageSize.toString()
548
+ }
549
+ ),
550
+ /* @__PURE__ */ jsx(
551
+ PaginationURLQuery,
552
+ {
553
+ pagination: {
554
+ pageCount: response?.currentData?.meta?.pagination?.pageCount || 0
555
+ }
556
+ }
557
+ )
558
+ ] }) : null
595
559
  ] }) }),
596
560
  releaseModalShown && /* @__PURE__ */ jsx(
597
561
  ReleaseModal,
@@ -639,18 +603,14 @@ const TrashIcon = styled(Trash)`
639
603
  const TypographyMaxWidth = styled(Typography)`
640
604
  max-width: 300px;
641
605
  `;
642
- const EntryValidationText = ({ action, schema, entry }) => {
606
+ const EntryValidationText = ({ action, schema, components, entry }) => {
643
607
  const { formatMessage } = useIntl();
644
- const { validate } = unstable_useDocument(
645
- {
646
- collectionType: schema?.kind ?? "",
647
- model: schema?.uid ?? ""
648
- },
649
- {
650
- skip: !schema
651
- }
652
- );
653
- const errors = validate(entry) ?? {};
608
+ const { validate } = unstable_useDocument();
609
+ const { errors } = validate(entry, {
610
+ contentType: schema,
611
+ components,
612
+ isCreatingEntry: false
613
+ });
654
614
  if (Object.keys(errors).length > 0) {
655
615
  const validationErrorsMessages = Object.entries(errors).map(
656
616
  ([key, value]) => formatMessage(
@@ -698,12 +658,7 @@ const ReleaseDetailsLayout = ({
698
658
  isLoading: isLoadingDetails,
699
659
  isError,
700
660
  error
701
- } = useGetReleaseQuery(
702
- { id: releaseId },
703
- {
704
- skip: !releaseId
705
- }
706
- );
661
+ } = useGetReleaseQuery({ id: releaseId });
707
662
  const [publishRelease, { isLoading: isPublishing }] = usePublishReleaseMutation();
708
663
  const toggleNotification = useNotification();
709
664
  const { formatAPIError } = useAPIErrorHandler();
@@ -713,8 +668,8 @@ const ReleaseDetailsLayout = ({
713
668
  const dispatch = useTypedDispatch();
714
669
  const { trackUsage } = useTracking();
715
670
  const release = data?.data;
716
- const handlePublishRelease = (id) => async () => {
717
- const response = await publishRelease({ id });
671
+ const handlePublishRelease = async () => {
672
+ const response = await publishRelease({ id: releaseId });
718
673
  if ("data" in response) {
719
674
  toggleNotification({
720
675
  type: "success",
@@ -742,7 +697,12 @@ const ReleaseDetailsLayout = ({
742
697
  }
743
698
  };
744
699
  const handleRefresh = () => {
745
- dispatch(releaseApi.util.invalidateTags([{ type: "ReleaseAction", id: "LIST" }]));
700
+ dispatch(
701
+ releaseApi.util.invalidateTags([
702
+ { type: "ReleaseAction", id: "LIST" },
703
+ { type: "Release", id: releaseId }
704
+ ])
705
+ );
746
706
  };
747
707
  const getCreatedByUser = () => {
748
708
  if (!release?.createdBy) {
@@ -757,26 +717,27 @@ const ReleaseDetailsLayout = ({
757
717
  return release.createdBy.email;
758
718
  };
759
719
  if (isLoadingDetails) {
760
- return /* @__PURE__ */ jsx(Page.Loading, {});
720
+ return /* @__PURE__ */ jsx(Main, { "aria-busy": isLoadingDetails, children: /* @__PURE__ */ jsx(LoadingIndicatorPage, {}) });
761
721
  }
762
722
  if (isError || !release) {
763
723
  return /* @__PURE__ */ jsx(
764
- Navigate,
724
+ Redirect,
765
725
  {
766
- to: "..",
767
- state: {
768
- errors: [
769
- {
770
- code: error?.code
771
- }
772
- ]
726
+ to: {
727
+ pathname: "/plugins/content-releases",
728
+ state: {
729
+ errors: [
730
+ {
731
+ code: error?.code
732
+ }
733
+ ]
734
+ }
773
735
  }
774
736
  }
775
737
  );
776
738
  }
777
739
  const totalEntries = release.actions.meta.count || 0;
778
740
  const hasCreatedByUser = Boolean(getCreatedByUser());
779
- const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
780
741
  const isScheduled = release.scheduledAt && release.timezone;
781
742
  const numberOfEntriesText = formatMessage(
782
743
  {
@@ -811,10 +772,13 @@ const ReleaseDetailsLayout = ({
811
772
  {
812
773
  title: release.name,
813
774
  subtitle: /* @__PURE__ */ jsxs(Flex, { gap: 2, lineHeight: 6, children: [
814
- /* @__PURE__ */ jsx(Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (IsSchedulingEnabled && isScheduled ? ` - ${scheduledText}` : "") }),
775
+ /* @__PURE__ */ jsx(Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : "") }),
815
776
  /* @__PURE__ */ jsx(Badge, { ...getBadgeProps(release.status), children: release.status })
816
777
  ] }),
817
- navigationAction: /* @__PURE__ */ jsx(BackButton, {}),
778
+ navigationAction: /* @__PURE__ */ jsx(Link$1, { startIcon: /* @__PURE__ */ jsx(ArrowLeft, {}), to: "/plugins/content-releases", children: formatMessage({
779
+ id: "global.back",
780
+ defaultMessage: "Back"
781
+ }) }),
818
782
  primaryAction: !release.releasedAt && /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
819
783
  /* @__PURE__ */ jsxs(Menu.Root, { children: [
820
784
  /* @__PURE__ */ jsx(
@@ -903,7 +867,7 @@ const ReleaseDetailsLayout = ({
903
867
  {
904
868
  size: "S",
905
869
  variant: "default",
906
- onClick: handlePublishRelease(release.id.toString()),
870
+ onClick: handlePublishRelease,
907
871
  loading: isPublishing,
908
872
  disabled: release.actions.meta.count === 0,
909
873
  children: formatMessage({
@@ -937,8 +901,9 @@ const getGroupByOptionLabel = (value) => {
937
901
  defaultMessage: "Content-Types"
938
902
  };
939
903
  };
940
- const ReleaseDetailsBody = ({ releaseId }) => {
904
+ const ReleaseDetailsBody = () => {
941
905
  const { formatMessage } = useIntl();
906
+ const { releaseId } = useParams();
942
907
  const [{ query }, setQuery] = useQueryParams();
943
908
  const toggleNotification = useNotification();
944
909
  const { formatAPIError } = useAPIErrorHandler();
@@ -993,7 +958,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
993
958
  }
994
959
  };
995
960
  if (isLoading || isReleaseLoading) {
996
- return /* @__PURE__ */ jsx(Page.Loading, {});
961
+ return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsx(LoadingIndicatorPage, {}) });
997
962
  }
998
963
  const releaseActions = data?.data;
999
964
  const releaseMeta = data?.meta;
@@ -1012,26 +977,32 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1012
977
  });
1013
978
  }
1014
979
  return /* @__PURE__ */ jsx(
1015
- Navigate,
980
+ Redirect,
1016
981
  {
1017
- to: "..",
1018
- state: {
1019
- errors: errorsArray
982
+ to: {
983
+ pathname: "/plugins/content-releases",
984
+ state: {
985
+ errors: errorsArray
986
+ }
1020
987
  }
1021
988
  }
1022
989
  );
1023
990
  }
1024
991
  if (isError || !releaseActions) {
1025
- return /* @__PURE__ */ jsx(Page.Error, {});
992
+ return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsx(AnErrorOccurred, {}) });
1026
993
  }
1027
994
  if (Object.keys(releaseActions).length === 0) {
1028
995
  return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsx(
1029
- EmptyStateLayout,
996
+ NoContent,
1030
997
  {
998
+ content: {
999
+ id: "content-releases.pages.Details.tab.emptyEntries",
1000
+ defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
1001
+ },
1031
1002
  action: /* @__PURE__ */ jsx(
1032
1003
  LinkButton,
1033
1004
  {
1034
- as: Link$1,
1005
+ as: Link$2,
1035
1006
  to: {
1036
1007
  pathname: "/content-manager"
1037
1008
  },
@@ -1042,54 +1013,10 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1042
1013
  defaultMessage: "Open the Content Manager"
1043
1014
  })
1044
1015
  }
1045
- ),
1046
- icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "10rem" }),
1047
- content: formatMessage({
1048
- id: "content-releases.pages.Details.tab.emptyEntries",
1049
- defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
1050
- })
1016
+ )
1051
1017
  }
1052
1018
  ) });
1053
1019
  }
1054
- const headers = [
1055
- {
1056
- label: formatMessage({
1057
- id: "content-releases.page.ReleaseDetails.table.header.label.name",
1058
- defaultMessage: "name"
1059
- }),
1060
- name: "name"
1061
- },
1062
- {
1063
- label: formatMessage({
1064
- id: "content-releases.page.ReleaseDetails.table.header.label.locale",
1065
- defaultMessage: "locale"
1066
- }),
1067
- name: "locale"
1068
- },
1069
- {
1070
- label: formatMessage({
1071
- id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
1072
- defaultMessage: "content-type"
1073
- }),
1074
- name: "content-type"
1075
- },
1076
- {
1077
- label: formatMessage({
1078
- id: "content-releases.page.ReleaseDetails.table.header.label.action",
1079
- defaultMessage: "action"
1080
- }),
1081
- name: "action"
1082
- },
1083
- ...!release.releasedAt ? [
1084
- {
1085
- label: formatMessage({
1086
- id: "content-releases.page.ReleaseDetails.table.header.label.status",
1087
- defaultMessage: "status"
1088
- }),
1089
- name: "status"
1090
- }
1091
- ] : []
1092
- ];
1093
1020
  return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsxs(Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
1094
1021
  /* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(
1095
1022
  SingleSelect,
@@ -1121,11 +1048,68 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1121
1048
  ...item,
1122
1049
  id: Number(item.entry.id)
1123
1050
  })),
1124
- headers,
1125
- isLoading: isLoading || isFetching,
1051
+ colCount: releaseActions[key].length,
1052
+ isLoading,
1053
+ isFetching,
1126
1054
  children: /* @__PURE__ */ jsxs(Table.Content, { children: [
1127
- /* @__PURE__ */ jsx(Table.Head, { children: headers.map((header) => /* @__PURE__ */ jsx(Table.HeaderCell, { ...header }, header.name)) }),
1128
- /* @__PURE__ */ jsx(Table.Loading, {}),
1055
+ /* @__PURE__ */ jsxs(Table.Head, { children: [
1056
+ /* @__PURE__ */ jsx(
1057
+ Table.HeaderCell,
1058
+ {
1059
+ fieldSchemaType: "string",
1060
+ label: formatMessage({
1061
+ id: "content-releases.page.ReleaseDetails.table.header.label.name",
1062
+ defaultMessage: "name"
1063
+ }),
1064
+ name: "name"
1065
+ }
1066
+ ),
1067
+ /* @__PURE__ */ jsx(
1068
+ Table.HeaderCell,
1069
+ {
1070
+ fieldSchemaType: "string",
1071
+ label: formatMessage({
1072
+ id: "content-releases.page.ReleaseDetails.table.header.label.locale",
1073
+ defaultMessage: "locale"
1074
+ }),
1075
+ name: "locale"
1076
+ }
1077
+ ),
1078
+ /* @__PURE__ */ jsx(
1079
+ Table.HeaderCell,
1080
+ {
1081
+ fieldSchemaType: "string",
1082
+ label: formatMessage({
1083
+ id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
1084
+ defaultMessage: "content-type"
1085
+ }),
1086
+ name: "content-type"
1087
+ }
1088
+ ),
1089
+ /* @__PURE__ */ jsx(
1090
+ Table.HeaderCell,
1091
+ {
1092
+ fieldSchemaType: "string",
1093
+ label: formatMessage({
1094
+ id: "content-releases.page.ReleaseDetails.table.header.label.action",
1095
+ defaultMessage: "action"
1096
+ }),
1097
+ name: "action"
1098
+ }
1099
+ ),
1100
+ !release.releasedAt && /* @__PURE__ */ jsx(
1101
+ Table.HeaderCell,
1102
+ {
1103
+ fieldSchemaType: "string",
1104
+ label: formatMessage({
1105
+ id: "content-releases.page.ReleaseDetails.table.header.label.status",
1106
+ defaultMessage: "status"
1107
+ }),
1108
+ name: "status"
1109
+ }
1110
+ )
1111
+ ] }),
1112
+ /* @__PURE__ */ jsx(Table.LoadingBody, {}),
1129
1113
  /* @__PURE__ */ jsx(Table.Body, { children: releaseActions[key].map(
1130
1114
  ({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
1131
1115
  /* @__PURE__ */ jsx(Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
@@ -1183,17 +1167,17 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1183
1167
  }
1184
1168
  )
1185
1169
  ] }, `releases-group-${key}`)),
1186
- /* @__PURE__ */ jsxs(
1187
- Pagination.Root,
1188
- {
1189
- ...releaseMeta?.pagination,
1190
- defaultPageSize: releaseMeta?.pagination?.pageSize,
1191
- children: [
1192
- /* @__PURE__ */ jsx(Pagination.PageSize, {}),
1193
- /* @__PURE__ */ jsx(Pagination.Links, {})
1194
- ]
1195
- }
1196
- )
1170
+ /* @__PURE__ */ jsxs(Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
1171
+ /* @__PURE__ */ jsx(PageSizeURLQuery, { defaultValue: releaseMeta?.pagination?.pageSize.toString() }),
1172
+ /* @__PURE__ */ jsx(
1173
+ PaginationURLQuery,
1174
+ {
1175
+ pagination: {
1176
+ pageCount: releaseMeta?.pagination?.pageCount || 0
1177
+ }
1178
+ }
1179
+ )
1180
+ ] })
1197
1181
  ] }) });
1198
1182
  };
1199
1183
  const ReleaseDetailsPage = () => {
@@ -1201,19 +1185,14 @@ const ReleaseDetailsPage = () => {
1201
1185
  const { releaseId } = useParams();
1202
1186
  const toggleNotification = useNotification();
1203
1187
  const { formatAPIError } = useAPIErrorHandler();
1204
- const navigate = useNavigate();
1188
+ const { replace } = useHistory();
1205
1189
  const [releaseModalShown, setReleaseModalShown] = React.useState(false);
1206
1190
  const [showWarningSubmit, setWarningSubmit] = React.useState(false);
1207
1191
  const {
1208
1192
  isLoading: isLoadingDetails,
1209
1193
  data,
1210
1194
  isSuccess: isSuccessDetails
1211
- } = useGetReleaseQuery(
1212
- { id: releaseId },
1213
- {
1214
- skip: !releaseId
1215
- }
1216
- );
1195
+ } = useGetReleaseQuery({ id: releaseId });
1217
1196
  const [updateRelease, { isLoading: isSubmittingForm }] = useUpdateReleaseMutation();
1218
1197
  const [deleteRelease, { isLoading: isDeletingRelease }] = useDeleteReleaseMutation();
1219
1198
  const toggleEditReleaseModal = () => {
@@ -1226,13 +1205,10 @@ const ReleaseDetailsPage = () => {
1226
1205
  {
1227
1206
  toggleEditReleaseModal,
1228
1207
  toggleWarningSubmit,
1229
- children: /* @__PURE__ */ jsx(Page.Loading, {})
1208
+ children: /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsx(LoadingIndicatorPage, {}) })
1230
1209
  }
1231
1210
  );
1232
1211
  }
1233
- if (!releaseId) {
1234
- return /* @__PURE__ */ jsx(Navigate, { to: ".." });
1235
- }
1236
1212
  const releaseData = isSuccessDetails && data?.data || null;
1237
1213
  const title = releaseData?.name || "";
1238
1214
  const timezone = releaseData?.timezone ?? null;
@@ -1272,7 +1248,7 @@ const ReleaseDetailsPage = () => {
1272
1248
  id: releaseId
1273
1249
  });
1274
1250
  if ("data" in response) {
1275
- navigate("..");
1251
+ replace("/plugins/content-releases");
1276
1252
  } else if (isAxiosError(response.error)) {
1277
1253
  toggleNotification({
1278
1254
  type: "warning",
@@ -1291,7 +1267,7 @@ const ReleaseDetailsPage = () => {
1291
1267
  toggleEditReleaseModal,
1292
1268
  toggleWarningSubmit,
1293
1269
  children: [
1294
- /* @__PURE__ */ jsx(ReleaseDetailsBody, { releaseId }),
1270
+ /* @__PURE__ */ jsx(ReleaseDetailsBody, {}),
1295
1271
  releaseModalShown && /* @__PURE__ */ jsx(
1296
1272
  ReleaseModal,
1297
1273
  {
@@ -1326,12 +1302,12 @@ const ReleaseDetailsPage = () => {
1326
1302
  );
1327
1303
  };
1328
1304
  const App = () => {
1329
- return /* @__PURE__ */ jsx(Page.Protect, { permissions: PERMISSIONS.main, children: /* @__PURE__ */ jsxs(Routes, { children: [
1330
- /* @__PURE__ */ jsx(Route, { index: true, element: /* @__PURE__ */ jsx(ReleasesPage, {}) }),
1331
- /* @__PURE__ */ jsx(Route, { path: ":releaseId", element: /* @__PURE__ */ jsx(ReleaseDetailsPage, {}) })
1305
+ return /* @__PURE__ */ jsx(CheckPagePermissions, { permissions: PERMISSIONS.main, children: /* @__PURE__ */ jsxs(Switch, { children: [
1306
+ /* @__PURE__ */ jsx(Route, { exact: true, path: `/plugins/${pluginId}`, component: ReleasesPage }),
1307
+ /* @__PURE__ */ jsx(Route, { exact: true, path: `/plugins/${pluginId}/:releaseId`, component: ReleaseDetailsPage })
1332
1308
  ] }) });
1333
1309
  };
1334
1310
  export {
1335
1311
  App
1336
1312
  };
1337
- //# sourceMappingURL=App-PQlYzNfb.mjs.map
1313
+ //# sourceMappingURL=App-HVXzE3i3.mjs.map