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

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 (105) hide show
  1. package/dist/_chunks/{App-PQlYzNfb.mjs → App-XbK-TdJn.mjs} +258 -283
  2. package/dist/_chunks/App-XbK-TdJn.mjs.map +1 -0
  3. package/dist/_chunks/{App-lzeJz92X.js → App-ftICpqDz.js} +256 -281
  4. package/dist/_chunks/App-ftICpqDz.js.map +1 -0
  5. package/dist/_chunks/{PurchaseContentReleases-Clm0iACO.mjs → PurchaseContentReleases-3tRbmbY3.mjs} +2 -2
  6. package/dist/_chunks/PurchaseContentReleases-3tRbmbY3.mjs.map +1 -0
  7. package/dist/_chunks/{PurchaseContentReleases-YhAPgpG9.js → PurchaseContentReleases-bpIYXOfu.js} +2 -2
  8. package/dist/_chunks/PurchaseContentReleases-bpIYXOfu.js.map +1 -0
  9. package/dist/_chunks/{en-gcJJ5htG.js → en-4CUzVH2g.js} +2 -3
  10. package/dist/_chunks/en-4CUzVH2g.js.map +1 -0
  11. package/dist/_chunks/{en-WuuhP6Bn.mjs → en-pOJ6G5fC.mjs} +2 -3
  12. package/dist/_chunks/en-pOJ6G5fC.mjs.map +1 -0
  13. package/dist/_chunks/{index--4AgLDzb.mjs → index-8LrruHqK.mjs} +33 -27
  14. package/dist/_chunks/index-8LrruHqK.mjs.map +1 -0
  15. package/dist/_chunks/{index-Nf1JfI-m.js → index-RYVGXFeL.js} +29 -23
  16. package/dist/_chunks/index-RYVGXFeL.js.map +1 -0
  17. package/dist/admin/index.js +1 -1
  18. package/dist/admin/index.mjs +1 -1
  19. package/dist/server/index.js +344 -203
  20. package/dist/server/index.js.map +1 -1
  21. package/dist/server/index.mjs +344 -204
  22. package/dist/server/index.mjs.map +1 -1
  23. package/package.json +21 -14
  24. package/dist/_chunks/App-PQlYzNfb.mjs.map +0 -1
  25. package/dist/_chunks/App-lzeJz92X.js.map +0 -1
  26. package/dist/_chunks/PurchaseContentReleases-Clm0iACO.mjs.map +0 -1
  27. package/dist/_chunks/PurchaseContentReleases-YhAPgpG9.js.map +0 -1
  28. package/dist/_chunks/en-WuuhP6Bn.mjs.map +0 -1
  29. package/dist/_chunks/en-gcJJ5htG.js.map +0 -1
  30. package/dist/_chunks/index--4AgLDzb.mjs.map +0 -1
  31. package/dist/_chunks/index-Nf1JfI-m.js.map +0 -1
  32. package/dist/admin/src/components/CMReleasesContainer.d.ts +0 -1
  33. package/dist/admin/src/components/RelativeTime.d.ts +0 -28
  34. package/dist/admin/src/components/ReleaseActionMenu.d.ts +0 -26
  35. package/dist/admin/src/components/ReleaseActionOptions.d.ts +0 -9
  36. package/dist/admin/src/components/ReleaseModal.d.ts +0 -16
  37. package/dist/admin/src/constants.d.ts +0 -58
  38. package/dist/admin/src/index.d.ts +0 -3
  39. package/dist/admin/src/pages/App.d.ts +0 -1
  40. package/dist/admin/src/pages/PurchaseContentReleases.d.ts +0 -2
  41. package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +0 -2
  42. package/dist/admin/src/pages/ReleasesPage.d.ts +0 -8
  43. package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +0 -181
  44. package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +0 -39
  45. package/dist/admin/src/pluginId.d.ts +0 -1
  46. package/dist/admin/src/services/axios.d.ts +0 -29
  47. package/dist/admin/src/services/release.d.ts +0 -369
  48. package/dist/admin/src/store/hooks.d.ts +0 -7
  49. package/dist/admin/src/utils/time.d.ts +0 -1
  50. package/dist/server/src/bootstrap.d.ts +0 -5
  51. package/dist/server/src/bootstrap.d.ts.map +0 -1
  52. package/dist/server/src/constants.d.ts +0 -12
  53. package/dist/server/src/constants.d.ts.map +0 -1
  54. package/dist/server/src/content-types/index.d.ts +0 -99
  55. package/dist/server/src/content-types/index.d.ts.map +0 -1
  56. package/dist/server/src/content-types/release/index.d.ts +0 -48
  57. package/dist/server/src/content-types/release/index.d.ts.map +0 -1
  58. package/dist/server/src/content-types/release/schema.d.ts +0 -47
  59. package/dist/server/src/content-types/release/schema.d.ts.map +0 -1
  60. package/dist/server/src/content-types/release-action/index.d.ts +0 -50
  61. package/dist/server/src/content-types/release-action/index.d.ts.map +0 -1
  62. package/dist/server/src/content-types/release-action/schema.d.ts +0 -49
  63. package/dist/server/src/content-types/release-action/schema.d.ts.map +0 -1
  64. package/dist/server/src/controllers/index.d.ts +0 -18
  65. package/dist/server/src/controllers/index.d.ts.map +0 -1
  66. package/dist/server/src/controllers/release-action.d.ts +0 -9
  67. package/dist/server/src/controllers/release-action.d.ts.map +0 -1
  68. package/dist/server/src/controllers/release.d.ts +0 -11
  69. package/dist/server/src/controllers/release.d.ts.map +0 -1
  70. package/dist/server/src/controllers/validation/release-action.d.ts +0 -3
  71. package/dist/server/src/controllers/validation/release-action.d.ts.map +0 -1
  72. package/dist/server/src/controllers/validation/release.d.ts +0 -2
  73. package/dist/server/src/controllers/validation/release.d.ts.map +0 -1
  74. package/dist/server/src/destroy.d.ts +0 -5
  75. package/dist/server/src/destroy.d.ts.map +0 -1
  76. package/dist/server/src/index.d.ts +0 -2092
  77. package/dist/server/src/index.d.ts.map +0 -1
  78. package/dist/server/src/migrations/index.d.ts +0 -10
  79. package/dist/server/src/migrations/index.d.ts.map +0 -1
  80. package/dist/server/src/register.d.ts +0 -5
  81. package/dist/server/src/register.d.ts.map +0 -1
  82. package/dist/server/src/routes/index.d.ts +0 -35
  83. package/dist/server/src/routes/index.d.ts.map +0 -1
  84. package/dist/server/src/routes/release-action.d.ts +0 -18
  85. package/dist/server/src/routes/release-action.d.ts.map +0 -1
  86. package/dist/server/src/routes/release.d.ts +0 -18
  87. package/dist/server/src/routes/release.d.ts.map +0 -1
  88. package/dist/server/src/services/index.d.ts +0 -1826
  89. package/dist/server/src/services/index.d.ts.map +0 -1
  90. package/dist/server/src/services/release.d.ts +0 -66
  91. package/dist/server/src/services/release.d.ts.map +0 -1
  92. package/dist/server/src/services/scheduling.d.ts +0 -18
  93. package/dist/server/src/services/scheduling.d.ts.map +0 -1
  94. package/dist/server/src/services/validation.d.ts +0 -14
  95. package/dist/server/src/services/validation.d.ts.map +0 -1
  96. package/dist/server/src/utils/index.d.ts +0 -14
  97. package/dist/server/src/utils/index.d.ts.map +0 -1
  98. package/dist/shared/contracts/release-actions.d.ts +0 -105
  99. package/dist/shared/contracts/release-actions.d.ts.map +0 -1
  100. package/dist/shared/contracts/releases.d.ts +0 -166
  101. package/dist/shared/contracts/releases.d.ts.map +0 -1
  102. package/dist/shared/types.d.ts +0 -24
  103. package/dist/shared/types.d.ts.map +0 -1
  104. package/dist/shared/validation-schemas.d.ts +0 -2
  105. package/dist/shared/validation-schemas.d.ts.map +0 -1
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
- const strapiAdmin = require("@strapi/admin/strapi-admin");
4
+ const helperPlugin = require("@strapi/helper-plugin");
5
5
  const reactRouterDom = require("react-router-dom");
6
- const index = require("./index-Nf1JfI-m.js");
6
+ const index = require("./index-RYVGXFeL.js");
7
7
  const React = require("react");
8
+ const strapiAdmin = require("@strapi/admin/strapi-admin");
8
9
  const designSystem = require("@strapi/design-system");
9
10
  const v2 = require("@strapi/design-system/v2");
10
- const helperPlugin = require("@strapi/helper-plugin");
11
11
  const icons = require("@strapi/icons");
12
12
  const format = require("date-fns/format");
13
13
  const dateFnsTz = require("date-fns-tz");
@@ -43,36 +43,6 @@ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
43
43
  const format__default = /* @__PURE__ */ _interopDefault(format);
44
44
  const styled__default = /* @__PURE__ */ _interopDefault(styled);
45
45
  const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
46
- const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
47
- const RelativeTime = React__namespace.forwardRef(
48
- ({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {
49
- const { formatRelativeTime, formatDate, formatTime } = reactIntl.useIntl();
50
- const interval = dateFns.intervalToDuration({
51
- start: timestamp,
52
- end: Date.now()
53
- // see https://github.com/date-fns/date-fns/issues/2891 – No idea why it's all partial it returns it every time.
54
- });
55
- const unit = intervals.find((intervalUnit) => {
56
- return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
57
- });
58
- const relativeTime = dateFns.isPast(timestamp) ? -interval[unit] : interval[unit];
59
- const customInterval = customIntervals.find(
60
- (custom) => interval[custom.unit] < custom.threshold
61
- );
62
- const displayText = customInterval ? customInterval.text : formatRelativeTime(relativeTime, unit, { numeric: "auto" });
63
- return /* @__PURE__ */ jsxRuntime.jsx(
64
- "time",
65
- {
66
- ref: forwardedRef,
67
- dateTime: timestamp.toISOString(),
68
- role: "time",
69
- title: `${formatDate(timestamp)} ${formatTime(timestamp)}`,
70
- ...restProps,
71
- children: displayText
72
- }
73
- );
74
- }
75
- );
76
46
  const RELEASE_SCHEMA = yup__namespace.object().shape({
77
47
  name: yup__namespace.string().trim().required(),
78
48
  scheduledAt: yup__namespace.string().nullable(),
@@ -102,7 +72,6 @@ const ReleaseModal = ({
102
72
  const { formatMessage } = reactIntl.useIntl();
103
73
  const { pathname } = reactRouterDom.useLocation();
104
74
  const isCreatingRelease = pathname === `/plugins/${index.pluginId}`;
105
- const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
106
75
  const { timezoneList, systemTimezone = { value: "UTC+00:00-Africa/Abidjan " } } = getTimezones(
107
76
  initialValues.scheduledAt ? new Date(initialValues.scheduledAt) : /* @__PURE__ */ new Date()
108
77
  );
@@ -110,13 +79,12 @@ const ReleaseModal = ({
110
79
  const { date, time, timezone } = values;
111
80
  if (!date || !time || !timezone)
112
81
  return null;
113
- const formattedDate = dateFns.parse(time, "HH:mm", new Date(date));
114
- const timezoneWithoutOffset = timezone.split("_")[1];
115
- return dateFnsTz.zonedTimeToUtc(formattedDate, timezoneWithoutOffset);
82
+ const timezoneWithoutOffset = timezone.split("&")[1];
83
+ return dateFnsTz.zonedTimeToUtc(`${date} ${time}`, timezoneWithoutOffset);
116
84
  };
117
85
  const getTimezoneWithOffset = () => {
118
86
  const currentTimezone = timezoneList.find(
119
- (timezone) => timezone.value.split("_")[1] === initialValues.timezone
87
+ (timezone) => timezone.value.split("&")[1] === initialValues.timezone
120
88
  );
121
89
  return currentTimezone?.value || systemTimezone.value;
122
90
  };
@@ -134,7 +102,7 @@ const ReleaseModal = ({
134
102
  onSubmit: (values) => {
135
103
  handleSubmit({
136
104
  ...values,
137
- timezone: values.timezone ? values.timezone.split("_")[1] : null,
105
+ timezone: values.timezone ? values.timezone.split("&")[1] : null,
138
106
  scheduledAt: values.isScheduled ? getScheduledTimestamp(values) : null
139
107
  });
140
108
  },
@@ -160,92 +128,88 @@ const ReleaseModal = ({
160
128
  required: true
161
129
  }
162
130
  ),
163
- IsSchedulingEnabled && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
164
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "max-content", children: /* @__PURE__ */ jsxRuntime.jsx(
165
- designSystem.Checkbox,
166
- {
167
- name: "isScheduled",
168
- value: values.isScheduled,
169
- onChange: (event) => {
170
- setFieldValue("isScheduled", event.target.checked);
171
- if (!event.target.checked) {
131
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "max-content", children: /* @__PURE__ */ jsxRuntime.jsx(
132
+ designSystem.Checkbox,
133
+ {
134
+ name: "isScheduled",
135
+ value: values.isScheduled,
136
+ onChange: (event) => {
137
+ setFieldValue("isScheduled", event.target.checked);
138
+ if (!event.target.checked) {
139
+ setFieldValue("date", null);
140
+ setFieldValue("time", "");
141
+ setFieldValue("timezone", null);
142
+ } else {
143
+ setFieldValue("date", initialValues.date);
144
+ setFieldValue("time", initialValues.time);
145
+ setFieldValue("timezone", initialValues.timezone ?? systemTimezone?.value);
146
+ }
147
+ },
148
+ children: /* @__PURE__ */ jsxRuntime.jsx(
149
+ designSystem.Typography,
150
+ {
151
+ textColor: values.isScheduled ? "primary600" : "neutral800",
152
+ fontWeight: values.isScheduled ? "semiBold" : "regular",
153
+ children: formatMessage({
154
+ id: "modal.form.input.label.schedule-release",
155
+ defaultMessage: "Schedule release"
156
+ })
157
+ }
158
+ )
159
+ }
160
+ ) }),
161
+ values.isScheduled && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
162
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 4, alignItems: "start", children: [
163
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
164
+ designSystem.DatePicker,
165
+ {
166
+ label: formatMessage({
167
+ id: "content-releases.modal.form.input.label.date",
168
+ defaultMessage: "Date"
169
+ }),
170
+ name: "date",
171
+ error: errors.date,
172
+ onChange: (date) => {
173
+ const isoFormatDate = date ? dateFns.formatISO(date, { representation: "date" }) : null;
174
+ setFieldValue("date", isoFormatDate);
175
+ },
176
+ clearLabel: formatMessage({
177
+ id: "content-releases.modal.form.input.clearLabel",
178
+ defaultMessage: "Clear"
179
+ }),
180
+ onClear: () => {
172
181
  setFieldValue("date", null);
182
+ },
183
+ selectedDate: values.date || void 0,
184
+ required: true,
185
+ minDate: dateFnsTz.utcToZonedTime(/* @__PURE__ */ new Date(), values.timezone.split("&")[1])
186
+ }
187
+ ) }),
188
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
189
+ designSystem.TimePicker,
190
+ {
191
+ label: formatMessage({
192
+ id: "content-releases.modal.form.input.label.time",
193
+ defaultMessage: "Time"
194
+ }),
195
+ name: "time",
196
+ error: errors.time,
197
+ onChange: (time) => {
198
+ setFieldValue("time", time);
199
+ },
200
+ clearLabel: formatMessage({
201
+ id: "content-releases.modal.form.input.clearLabel",
202
+ defaultMessage: "Clear"
203
+ }),
204
+ onClear: () => {
173
205
  setFieldValue("time", "");
174
- setFieldValue("timezone", null);
175
- } else {
176
- setFieldValue("date", initialValues.date);
177
- setFieldValue("time", initialValues.time);
178
- setFieldValue(
179
- "timezone",
180
- initialValues.timezone ?? systemTimezone?.value
181
- );
182
- }
183
- },
184
- children: /* @__PURE__ */ jsxRuntime.jsx(
185
- designSystem.Typography,
186
- {
187
- textColor: values.isScheduled ? "primary600" : "neutral800",
188
- fontWeight: values.isScheduled ? "semiBold" : "regular",
189
- children: formatMessage({
190
- id: "modal.form.input.label.schedule-release",
191
- defaultMessage: "Schedule release"
192
- })
193
- }
194
- )
195
- }
196
- ) }),
197
- values.isScheduled && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
198
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 4, alignItems: "start", children: [
199
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
200
- designSystem.DatePicker,
201
- {
202
- label: formatMessage({
203
- id: "content-releases.modal.form.input.label.date",
204
- defaultMessage: "Date"
205
- }),
206
- name: "date",
207
- error: errors.date,
208
- onChange: (date) => {
209
- const isoFormatDate = date ? dateFns.formatISO(date, { representation: "date" }) : null;
210
- setFieldValue("date", isoFormatDate);
211
- },
212
- clearLabel: formatMessage({
213
- id: "content-releases.modal.form.input.clearLabel",
214
- defaultMessage: "Clear"
215
- }),
216
- onClear: () => {
217
- setFieldValue("date", null);
218
- },
219
- selectedDate: values.date || void 0,
220
- required: true
221
- }
222
- ) }),
223
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
224
- designSystem.TimePicker,
225
- {
226
- label: formatMessage({
227
- id: "content-releases.modal.form.input.label.time",
228
- defaultMessage: "Time"
229
- }),
230
- name: "time",
231
- error: errors.time,
232
- onChange: (time) => {
233
- setFieldValue("time", time);
234
- },
235
- clearLabel: formatMessage({
236
- id: "content-releases.modal.form.input.clearLabel",
237
- defaultMessage: "Clear"
238
- }),
239
- onClear: () => {
240
- setFieldValue("time", "");
241
- },
242
- value: values.time || void 0,
243
- required: true
244
- }
245
- ) })
246
- ] }),
247
- /* @__PURE__ */ jsxRuntime.jsx(TimezoneComponent, { timezoneOptions: timezoneList })
248
- ] })
206
+ },
207
+ value: values.time || void 0,
208
+ required: true
209
+ }
210
+ ) })
211
+ ] }),
212
+ /* @__PURE__ */ jsxRuntime.jsx(TimezoneComponent, { timezoneOptions: timezoneList })
249
213
  ] })
250
214
  ] }) }),
251
215
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -269,10 +233,10 @@ const ReleaseModal = ({
269
233
  const getTimezones = (selectedDate) => {
270
234
  const timezoneList = Intl.supportedValuesOf("timeZone").map((timezone) => {
271
235
  const utcOffset = index.getTimezoneOffset(timezone, selectedDate);
272
- return { offset: utcOffset, value: `${utcOffset}_${timezone}` };
236
+ return { offset: utcOffset, value: `${utcOffset}&${timezone}` };
273
237
  });
274
238
  const systemTimezone = timezoneList.find(
275
- (timezone) => timezone.value.split("_")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
239
+ (timezone) => timezone.value.split("&")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
276
240
  );
277
241
  return { timezoneList, systemTimezone };
278
242
  };
@@ -284,7 +248,7 @@ const TimezoneComponent = ({ timezoneOptions }) => {
284
248
  if (values.date) {
285
249
  const { timezoneList: timezoneList2 } = getTimezones(new Date(values.date));
286
250
  setTimezoneList(timezoneList2);
287
- const updatedTimezone = values.timezone && timezoneList2.find((tz) => tz.value.split("_")[1] === values.timezone.split("_")[1]);
251
+ const updatedTimezone = values.timezone && timezoneList2.find((tz) => tz.value.split("&")[1] === values.timezone.split("&")[1]);
288
252
  if (updatedTimezone) {
289
253
  setFieldValue("timezone", updatedTimezone.value);
290
254
  }
@@ -297,9 +261,10 @@ const TimezoneComponent = ({ timezoneOptions }) => {
297
261
  id: "content-releases.modal.form.input.label.timezone",
298
262
  defaultMessage: "Timezone"
299
263
  }),
264
+ autocomplete: { type: "list", filter: "contains" },
300
265
  name: "timezone",
301
266
  value: values.timezone || void 0,
302
- textValue: values.timezone ? values.timezone.replace("_", " ") : void 0,
267
+ textValue: values.timezone ? values.timezone.replace(/&/, " ") : void 0,
303
268
  onChange: (timezone) => {
304
269
  setFieldValue("timezone", timezone);
305
270
  },
@@ -311,14 +276,14 @@ const TimezoneComponent = ({ timezoneOptions }) => {
311
276
  },
312
277
  error: errors.timezone,
313
278
  required: true,
314
- children: timezoneList.map((timezone) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.ComboboxOption, { value: timezone.value, children: timezone.value.replace("_", " ") }, timezone.value))
279
+ children: timezoneList.map((timezone) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.ComboboxOption, { value: timezone.value, children: timezone.value.replace(/&/, " ") }, timezone.value))
315
280
  }
316
281
  );
317
282
  };
318
283
  const LinkCard = styled__default.default(v2.Link)`
319
284
  display: block;
320
285
  `;
321
- const CapitalizeRelativeTime = styled__default.default(RelativeTime)`
286
+ const CapitalizeRelativeTime = styled__default.default(helperPlugin.RelativeTime)`
322
287
  text-transform: capitalize;
323
288
  `;
324
289
  const getBadgeProps = (status) => {
@@ -348,9 +313,8 @@ const getBadgeProps = (status) => {
348
313
  };
349
314
  const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
350
315
  const { formatMessage } = reactIntl.useIntl();
351
- const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
352
316
  if (isError) {
353
- return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
317
+ return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.AnErrorOccurred, {});
354
318
  }
355
319
  if (releases?.length === 0) {
356
320
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -369,7 +333,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
369
333
  }
370
334
  );
371
335
  }
372
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid, { gap: 4, children: releases.map(({ id, name, actions, scheduledAt, status }) => /* @__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(
336
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid, { gap: 4, children: releases.map(({ id, name, scheduledAt, status }) => /* @__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(
373
337
  designSystem.Flex,
374
338
  {
375
339
  direction: "column",
@@ -385,16 +349,10 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
385
349
  children: [
386
350
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "start", gap: 1, children: [
387
351
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { as: "h3", variant: "delta", fontWeight: "bold", children: name }),
388
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", children: IsSchedulingEnabled ? scheduledAt ? /* @__PURE__ */ jsxRuntime.jsx(CapitalizeRelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
352
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", children: scheduledAt ? /* @__PURE__ */ jsxRuntime.jsx(CapitalizeRelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
389
353
  id: "content-releases.pages.Releases.not-scheduled",
390
354
  defaultMessage: "Not scheduled"
391
- }) : formatMessage(
392
- {
393
- id: "content-releases.page.Releases.release-item.entries",
394
- defaultMessage: "{number, plural, =0 {No entries} one {# entry} other {# entries}}"
395
- },
396
- { number: actions.meta.count }
397
- ) })
355
+ }) })
398
356
  ] }),
399
357
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { ...getBadgeProps(status), children: status })
400
358
  ]
@@ -413,8 +371,7 @@ const INITIAL_FORM_VALUES = {
413
371
  name: "",
414
372
  date: null,
415
373
  time: "",
416
- // Remove future flag check after Scheduling Beta release and replace with true as creating new release should include scheduling by default
417
- isScheduled: window.strapi.future.isEnabled("contentReleasesScheduling"),
374
+ isScheduled: true,
418
375
  scheduledAt: null,
419
376
  timezone: null
420
377
  };
@@ -424,7 +381,7 @@ const ReleasesPage = () => {
424
381
  const [releaseModalShown, setReleaseModalShown] = React__namespace.useState(false);
425
382
  const toggleNotification = helperPlugin.useNotification();
426
383
  const { formatMessage } = reactIntl.useIntl();
427
- const navigate = reactRouterDom.useNavigate();
384
+ const { push, replace } = reactRouterDom.useHistory();
428
385
  const { formatAPIError } = helperPlugin.useAPIErrorHandler();
429
386
  const [{ query }, setQuery] = helperPlugin.useQueryParams();
430
387
  const response = index.useGetReleasesQuery(query);
@@ -448,9 +405,9 @@ const ReleasesPage = () => {
448
405
  defaultMessage: "Please try again or open another release."
449
406
  })
450
407
  });
451
- navigate("", { replace: true, state: null });
408
+ replace({ state: null });
452
409
  }
453
- }, [formatMessage, location?.state?.errors, navigate, toggleNotification]);
410
+ }, [formatMessage, location?.state?.errors, replace, toggleNotification]);
454
411
  React__namespace.useEffect(() => {
455
412
  if (tabRef.current) {
456
413
  tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
@@ -460,7 +417,7 @@ const ReleasesPage = () => {
460
417
  setReleaseModalShown((prev) => !prev);
461
418
  };
462
419
  if (isLoading) {
463
- return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
420
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Main, { "aria-busy": isLoading, children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
464
421
  }
465
422
  const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
466
423
  const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
@@ -491,7 +448,7 @@ const ReleasesPage = () => {
491
448
  })
492
449
  });
493
450
  trackUsage("didCreateRelease");
494
- navigate(response2.data.data.id.toString());
451
+ push(`/plugins/content-releases/${response2.data.data.id}`);
495
452
  } else if (index.isAxiosError(response2.error)) {
496
453
  toggleNotification({
497
454
  type: "warning",
@@ -606,17 +563,23 @@ const ReleasesPage = () => {
606
563
  ]
607
564
  }
608
565
  ),
609
- /* @__PURE__ */ jsxRuntime.jsxs(
610
- strapiAdmin.Pagination.Root,
611
- {
612
- ...response?.currentData?.meta?.pagination,
613
- defaultPageSize: response?.currentData?.meta?.pagination?.pageSize,
614
- children: [
615
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.PageSize, { options: ["8", "16", "32", "64"] }),
616
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.Links, {})
617
- ]
618
- }
619
- )
566
+ response.currentData?.meta?.pagination?.total ? /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
567
+ /* @__PURE__ */ jsxRuntime.jsx(
568
+ helperPlugin.PageSizeURLQuery,
569
+ {
570
+ options: ["8", "16", "32", "64"],
571
+ defaultValue: response?.currentData?.meta?.pagination?.pageSize.toString()
572
+ }
573
+ ),
574
+ /* @__PURE__ */ jsxRuntime.jsx(
575
+ helperPlugin.PaginationURLQuery,
576
+ {
577
+ pagination: {
578
+ pageCount: response?.currentData?.meta?.pagination?.pageCount || 0
579
+ }
580
+ }
581
+ )
582
+ ] }) : null
620
583
  ] }) }),
621
584
  releaseModalShown && /* @__PURE__ */ jsxRuntime.jsx(
622
585
  ReleaseModal,
@@ -664,18 +627,14 @@ const TrashIcon = styled__default.default(icons.Trash)`
664
627
  const TypographyMaxWidth = styled__default.default(designSystem.Typography)`
665
628
  max-width: 300px;
666
629
  `;
667
- const EntryValidationText = ({ action, schema, entry }) => {
630
+ const EntryValidationText = ({ action, schema, components, entry }) => {
668
631
  const { formatMessage } = reactIntl.useIntl();
669
- const { validate } = strapiAdmin.unstable_useDocument(
670
- {
671
- collectionType: schema?.kind ?? "",
672
- model: schema?.uid ?? ""
673
- },
674
- {
675
- skip: !schema
676
- }
677
- );
678
- const errors = validate(entry) ?? {};
632
+ const { validate } = strapiAdmin.unstable_useDocument();
633
+ const { errors } = validate(entry, {
634
+ contentType: schema,
635
+ components,
636
+ isCreatingEntry: false
637
+ });
679
638
  if (Object.keys(errors).length > 0) {
680
639
  const validationErrorsMessages = Object.entries(errors).map(
681
640
  ([key, value]) => formatMessage(
@@ -723,12 +682,7 @@ const ReleaseDetailsLayout = ({
723
682
  isLoading: isLoadingDetails,
724
683
  isError,
725
684
  error
726
- } = index.useGetReleaseQuery(
727
- { id: releaseId },
728
- {
729
- skip: !releaseId
730
- }
731
- );
685
+ } = index.useGetReleaseQuery({ id: releaseId });
732
686
  const [publishRelease, { isLoading: isPublishing }] = index.usePublishReleaseMutation();
733
687
  const toggleNotification = helperPlugin.useNotification();
734
688
  const { formatAPIError } = helperPlugin.useAPIErrorHandler();
@@ -738,8 +692,8 @@ const ReleaseDetailsLayout = ({
738
692
  const dispatch = index.useTypedDispatch();
739
693
  const { trackUsage } = helperPlugin.useTracking();
740
694
  const release = data?.data;
741
- const handlePublishRelease = (id) => async () => {
742
- const response = await publishRelease({ id });
695
+ const handlePublishRelease = async () => {
696
+ const response = await publishRelease({ id: releaseId });
743
697
  if ("data" in response) {
744
698
  toggleNotification({
745
699
  type: "success",
@@ -767,7 +721,12 @@ const ReleaseDetailsLayout = ({
767
721
  }
768
722
  };
769
723
  const handleRefresh = () => {
770
- dispatch(index.releaseApi.util.invalidateTags([{ type: "ReleaseAction", id: "LIST" }]));
724
+ dispatch(
725
+ index.releaseApi.util.invalidateTags([
726
+ { type: "ReleaseAction", id: "LIST" },
727
+ { type: "Release", id: releaseId }
728
+ ])
729
+ );
771
730
  };
772
731
  const getCreatedByUser = () => {
773
732
  if (!release?.createdBy) {
@@ -782,26 +741,27 @@ const ReleaseDetailsLayout = ({
782
741
  return release.createdBy.email;
783
742
  };
784
743
  if (isLoadingDetails) {
785
- return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
744
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Main, { "aria-busy": isLoadingDetails, children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
786
745
  }
787
746
  if (isError || !release) {
788
747
  return /* @__PURE__ */ jsxRuntime.jsx(
789
- reactRouterDom.Navigate,
748
+ reactRouterDom.Redirect,
790
749
  {
791
- to: "..",
792
- state: {
793
- errors: [
794
- {
795
- code: error?.code
796
- }
797
- ]
750
+ to: {
751
+ pathname: "/plugins/content-releases",
752
+ state: {
753
+ errors: [
754
+ {
755
+ code: error?.code
756
+ }
757
+ ]
758
+ }
798
759
  }
799
760
  }
800
761
  );
801
762
  }
802
763
  const totalEntries = release.actions.meta.count || 0;
803
764
  const hasCreatedByUser = Boolean(getCreatedByUser());
804
- const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
805
765
  const isScheduled = release.scheduledAt && release.timezone;
806
766
  const numberOfEntriesText = formatMessage(
807
767
  {
@@ -836,10 +796,13 @@ const ReleaseDetailsLayout = ({
836
796
  {
837
797
  title: release.name,
838
798
  subtitle: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, lineHeight: 6, children: [
839
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (IsSchedulingEnabled && isScheduled ? ` - ${scheduledText}` : "") }),
799
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : "") }),
840
800
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { ...getBadgeProps(release.status), children: release.status })
841
801
  ] }),
842
- navigationAction: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.BackButton, {}),
802
+ navigationAction: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Link, { startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.ArrowLeft, {}), to: "/plugins/content-releases", children: formatMessage({
803
+ id: "global.back",
804
+ defaultMessage: "Back"
805
+ }) }),
843
806
  primaryAction: !release.releasedAt && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
844
807
  /* @__PURE__ */ jsxRuntime.jsxs(v2.Menu.Root, { children: [
845
808
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -905,7 +868,7 @@ const ReleaseDetailsLayout = ({
905
868
  defaultMessage: "Created"
906
869
  }) }),
907
870
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", color: "neutral300", children: [
908
- /* @__PURE__ */ jsxRuntime.jsx(RelativeTime, { timestamp: new Date(release.createdAt) }),
871
+ /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.RelativeTime, { timestamp: new Date(release.createdAt) }),
909
872
  formatMessage(
910
873
  {
911
874
  id: "content-releases.header.actions.created.description",
@@ -928,7 +891,7 @@ const ReleaseDetailsLayout = ({
928
891
  {
929
892
  size: "S",
930
893
  variant: "default",
931
- onClick: handlePublishRelease(release.id.toString()),
894
+ onClick: handlePublishRelease,
932
895
  loading: isPublishing,
933
896
  disabled: release.actions.meta.count === 0,
934
897
  children: formatMessage({
@@ -962,8 +925,9 @@ const getGroupByOptionLabel = (value) => {
962
925
  defaultMessage: "Content-Types"
963
926
  };
964
927
  };
965
- const ReleaseDetailsBody = ({ releaseId }) => {
928
+ const ReleaseDetailsBody = () => {
966
929
  const { formatMessage } = reactIntl.useIntl();
930
+ const { releaseId } = reactRouterDom.useParams();
967
931
  const [{ query }, setQuery] = helperPlugin.useQueryParams();
968
932
  const toggleNotification = helperPlugin.useNotification();
969
933
  const { formatAPIError } = helperPlugin.useAPIErrorHandler();
@@ -1018,7 +982,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1018
982
  }
1019
983
  };
1020
984
  if (isLoading || isReleaseLoading) {
1021
- return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
985
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
1022
986
  }
1023
987
  const releaseActions = data?.data;
1024
988
  const releaseMeta = data?.meta;
@@ -1037,22 +1001,28 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1037
1001
  });
1038
1002
  }
1039
1003
  return /* @__PURE__ */ jsxRuntime.jsx(
1040
- reactRouterDom.Navigate,
1004
+ reactRouterDom.Redirect,
1041
1005
  {
1042
- to: "..",
1043
- state: {
1044
- errors: errorsArray
1006
+ to: {
1007
+ pathname: "/plugins/content-releases",
1008
+ state: {
1009
+ errors: errorsArray
1010
+ }
1045
1011
  }
1046
1012
  }
1047
1013
  );
1048
1014
  }
1049
1015
  if (isError || !releaseActions) {
1050
- return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
1016
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.AnErrorOccurred, {}) });
1051
1017
  }
1052
1018
  if (Object.keys(releaseActions).length === 0) {
1053
1019
  return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(
1054
- designSystem.EmptyStateLayout,
1020
+ helperPlugin.NoContent,
1055
1021
  {
1022
+ content: {
1023
+ id: "content-releases.pages.Details.tab.emptyEntries",
1024
+ defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
1025
+ },
1056
1026
  action: /* @__PURE__ */ jsxRuntime.jsx(
1057
1027
  v2.LinkButton,
1058
1028
  {
@@ -1067,54 +1037,10 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1067
1037
  defaultMessage: "Open the Content Manager"
1068
1038
  })
1069
1039
  }
1070
- ),
1071
- icon: /* @__PURE__ */ jsxRuntime.jsx(icons.EmptyDocuments, { width: "10rem" }),
1072
- content: formatMessage({
1073
- id: "content-releases.pages.Details.tab.emptyEntries",
1074
- defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
1075
- })
1040
+ )
1076
1041
  }
1077
1042
  ) });
1078
1043
  }
1079
- const headers = [
1080
- {
1081
- label: formatMessage({
1082
- id: "content-releases.page.ReleaseDetails.table.header.label.name",
1083
- defaultMessage: "name"
1084
- }),
1085
- name: "name"
1086
- },
1087
- {
1088
- label: formatMessage({
1089
- id: "content-releases.page.ReleaseDetails.table.header.label.locale",
1090
- defaultMessage: "locale"
1091
- }),
1092
- name: "locale"
1093
- },
1094
- {
1095
- label: formatMessage({
1096
- id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
1097
- defaultMessage: "content-type"
1098
- }),
1099
- name: "content-type"
1100
- },
1101
- {
1102
- label: formatMessage({
1103
- id: "content-releases.page.ReleaseDetails.table.header.label.action",
1104
- defaultMessage: "action"
1105
- }),
1106
- name: "action"
1107
- },
1108
- ...!release.releasedAt ? [
1109
- {
1110
- label: formatMessage({
1111
- id: "content-releases.page.ReleaseDetails.table.header.label.status",
1112
- defaultMessage: "status"
1113
- }),
1114
- name: "status"
1115
- }
1116
- ] : []
1117
- ];
1118
1044
  return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
1119
1045
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { children: /* @__PURE__ */ jsxRuntime.jsx(
1120
1046
  designSystem.SingleSelect,
@@ -1140,18 +1066,75 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1140
1066
  Object.keys(releaseActions).map((key) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 4, direction: "column", alignItems: "stretch", children: [
1141
1067
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { role: "separator", "aria-label": key, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { children: key }) }),
1142
1068
  /* @__PURE__ */ jsxRuntime.jsx(
1143
- strapiAdmin.Table.Root,
1069
+ helperPlugin.Table.Root,
1144
1070
  {
1145
1071
  rows: releaseActions[key].map((item) => ({
1146
1072
  ...item,
1147
1073
  id: Number(item.entry.id)
1148
1074
  })),
1149
- headers,
1150
- isLoading: isLoading || isFetching,
1151
- children: /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Table.Content, { children: [
1152
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Head, { children: headers.map((header) => /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.HeaderCell, { ...header }, header.name)) }),
1153
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Loading, {}),
1154
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Body, { children: releaseActions[key].map(
1075
+ colCount: releaseActions[key].length,
1076
+ isLoading,
1077
+ isFetching,
1078
+ children: /* @__PURE__ */ jsxRuntime.jsxs(helperPlugin.Table.Content, { children: [
1079
+ /* @__PURE__ */ jsxRuntime.jsxs(helperPlugin.Table.Head, { children: [
1080
+ /* @__PURE__ */ jsxRuntime.jsx(
1081
+ helperPlugin.Table.HeaderCell,
1082
+ {
1083
+ fieldSchemaType: "string",
1084
+ label: formatMessage({
1085
+ id: "content-releases.page.ReleaseDetails.table.header.label.name",
1086
+ defaultMessage: "name"
1087
+ }),
1088
+ name: "name"
1089
+ }
1090
+ ),
1091
+ /* @__PURE__ */ jsxRuntime.jsx(
1092
+ helperPlugin.Table.HeaderCell,
1093
+ {
1094
+ fieldSchemaType: "string",
1095
+ label: formatMessage({
1096
+ id: "content-releases.page.ReleaseDetails.table.header.label.locale",
1097
+ defaultMessage: "locale"
1098
+ }),
1099
+ name: "locale"
1100
+ }
1101
+ ),
1102
+ /* @__PURE__ */ jsxRuntime.jsx(
1103
+ helperPlugin.Table.HeaderCell,
1104
+ {
1105
+ fieldSchemaType: "string",
1106
+ label: formatMessage({
1107
+ id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
1108
+ defaultMessage: "content-type"
1109
+ }),
1110
+ name: "content-type"
1111
+ }
1112
+ ),
1113
+ /* @__PURE__ */ jsxRuntime.jsx(
1114
+ helperPlugin.Table.HeaderCell,
1115
+ {
1116
+ fieldSchemaType: "string",
1117
+ label: formatMessage({
1118
+ id: "content-releases.page.ReleaseDetails.table.header.label.action",
1119
+ defaultMessage: "action"
1120
+ }),
1121
+ name: "action"
1122
+ }
1123
+ ),
1124
+ !release.releasedAt && /* @__PURE__ */ jsxRuntime.jsx(
1125
+ helperPlugin.Table.HeaderCell,
1126
+ {
1127
+ fieldSchemaType: "string",
1128
+ label: formatMessage({
1129
+ id: "content-releases.page.ReleaseDetails.table.header.label.status",
1130
+ defaultMessage: "status"
1131
+ }),
1132
+ name: "status"
1133
+ }
1134
+ )
1135
+ ] }),
1136
+ /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.Table.LoadingBody, {}),
1137
+ /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.Table.Body, { children: releaseActions[key].map(
1155
1138
  ({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
1156
1139
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
1157
1140
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "10%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
@@ -1208,17 +1191,17 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1208
1191
  }
1209
1192
  )
1210
1193
  ] }, `releases-group-${key}`)),
1211
- /* @__PURE__ */ jsxRuntime.jsxs(
1212
- strapiAdmin.Pagination.Root,
1213
- {
1214
- ...releaseMeta?.pagination,
1215
- defaultPageSize: releaseMeta?.pagination?.pageSize,
1216
- children: [
1217
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.PageSize, {}),
1218
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.Links, {})
1219
- ]
1220
- }
1221
- )
1194
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
1195
+ /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.PageSizeURLQuery, { defaultValue: releaseMeta?.pagination?.pageSize.toString() }),
1196
+ /* @__PURE__ */ jsxRuntime.jsx(
1197
+ helperPlugin.PaginationURLQuery,
1198
+ {
1199
+ pagination: {
1200
+ pageCount: releaseMeta?.pagination?.pageCount || 0
1201
+ }
1202
+ }
1203
+ )
1204
+ ] })
1222
1205
  ] }) });
1223
1206
  };
1224
1207
  const ReleaseDetailsPage = () => {
@@ -1226,19 +1209,14 @@ const ReleaseDetailsPage = () => {
1226
1209
  const { releaseId } = reactRouterDom.useParams();
1227
1210
  const toggleNotification = helperPlugin.useNotification();
1228
1211
  const { formatAPIError } = helperPlugin.useAPIErrorHandler();
1229
- const navigate = reactRouterDom.useNavigate();
1212
+ const { replace } = reactRouterDom.useHistory();
1230
1213
  const [releaseModalShown, setReleaseModalShown] = React__namespace.useState(false);
1231
1214
  const [showWarningSubmit, setWarningSubmit] = React__namespace.useState(false);
1232
1215
  const {
1233
1216
  isLoading: isLoadingDetails,
1234
1217
  data,
1235
1218
  isSuccess: isSuccessDetails
1236
- } = index.useGetReleaseQuery(
1237
- { id: releaseId },
1238
- {
1239
- skip: !releaseId
1240
- }
1241
- );
1219
+ } = index.useGetReleaseQuery({ id: releaseId });
1242
1220
  const [updateRelease, { isLoading: isSubmittingForm }] = index.useUpdateReleaseMutation();
1243
1221
  const [deleteRelease, { isLoading: isDeletingRelease }] = index.useDeleteReleaseMutation();
1244
1222
  const toggleEditReleaseModal = () => {
@@ -1251,18 +1229,15 @@ const ReleaseDetailsPage = () => {
1251
1229
  {
1252
1230
  toggleEditReleaseModal,
1253
1231
  toggleWarningSubmit,
1254
- children: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {})
1232
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) })
1255
1233
  }
1256
1234
  );
1257
1235
  }
1258
- if (!releaseId) {
1259
- return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: ".." });
1260
- }
1261
1236
  const releaseData = isSuccessDetails && data?.data || null;
1262
1237
  const title = releaseData?.name || "";
1263
1238
  const timezone = releaseData?.timezone ?? null;
1264
1239
  const scheduledAt = releaseData?.scheduledAt && timezone ? dateFnsTz.utcToZonedTime(releaseData.scheduledAt, timezone) : null;
1265
- const date = scheduledAt ? new Date(format__default.default(scheduledAt, "yyyy-MM-dd")) : null;
1240
+ const date = scheduledAt ? format__default.default(scheduledAt, "yyyy-MM-dd") : null;
1266
1241
  const time = scheduledAt ? format__default.default(scheduledAt, "HH:mm") : "";
1267
1242
  const handleEditRelease = async (values) => {
1268
1243
  const response = await updateRelease({
@@ -1297,7 +1272,7 @@ const ReleaseDetailsPage = () => {
1297
1272
  id: releaseId
1298
1273
  });
1299
1274
  if ("data" in response) {
1300
- navigate("..");
1275
+ replace("/plugins/content-releases");
1301
1276
  } else if (index.isAxiosError(response.error)) {
1302
1277
  toggleNotification({
1303
1278
  type: "warning",
@@ -1316,7 +1291,7 @@ const ReleaseDetailsPage = () => {
1316
1291
  toggleEditReleaseModal,
1317
1292
  toggleWarningSubmit,
1318
1293
  children: [
1319
- /* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsBody, { releaseId }),
1294
+ /* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsBody, {}),
1320
1295
  releaseModalShown && /* @__PURE__ */ jsxRuntime.jsx(
1321
1296
  ReleaseModal,
1322
1297
  {
@@ -1351,10 +1326,10 @@ const ReleaseDetailsPage = () => {
1351
1326
  );
1352
1327
  };
1353
1328
  const App = () => {
1354
- return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Protect, { permissions: index.PERMISSIONS.main, children: /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.Routes, { children: [
1355
- /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { index: true, element: /* @__PURE__ */ jsxRuntime.jsx(ReleasesPage, {}) }),
1356
- /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { path: ":releaseId", element: /* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsPage, {}) })
1329
+ return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPagePermissions, { permissions: index.PERMISSIONS.main, children: /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.Switch, { children: [
1330
+ /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { exact: true, path: `/plugins/${index.pluginId}`, component: ReleasesPage }),
1331
+ /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { exact: true, path: `/plugins/${index.pluginId}/:releaseId`, component: ReleaseDetailsPage })
1357
1332
  ] }) });
1358
1333
  };
1359
1334
  exports.App = App;
1360
- //# sourceMappingURL=App-lzeJz92X.js.map
1335
+ //# sourceMappingURL=App-ftICpqDz.js.map