@strapi/content-releases 0.0.0-next.583e758623dc82206a4b2758d01dd5948b6e3f6a → 0.0.0-next.5c40a85ef0a0541375210234c3490574da1f5fb5

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 (31) hide show
  1. package/dist/_chunks/{App-P1kyM3gT.js → App-dLXY5ei3.js} +149 -140
  2. package/dist/_chunks/App-dLXY5ei3.js.map +1 -0
  3. package/dist/_chunks/{App-6ugQxqYE.mjs → App-jrh58sXY.mjs} +153 -144
  4. package/dist/_chunks/App-jrh58sXY.mjs.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-HrREghh3.js} +11 -3
  10. package/dist/_chunks/en-HrREghh3.js.map +1 -0
  11. package/dist/_chunks/{en-WuuhP6Bn.mjs → en-ltT1TlKQ.mjs} +11 -3
  12. package/dist/_chunks/en-ltT1TlKQ.mjs.map +1 -0
  13. package/dist/_chunks/{index-2xzbhaQP.js → index-CVO0Rqdm.js} +320 -18
  14. package/dist/_chunks/index-CVO0Rqdm.js.map +1 -0
  15. package/dist/_chunks/{index-_eBuegHN.mjs → index-PiOGBETy.mjs} +325 -23
  16. package/dist/_chunks/index-PiOGBETy.mjs.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 +331 -159
  20. package/dist/server/index.js.map +1 -1
  21. package/dist/server/index.mjs +331 -159
  22. package/dist/server/index.mjs.map +1 -1
  23. package/package.json +12 -12
  24. package/dist/_chunks/App-6ugQxqYE.mjs.map +0 -1
  25. package/dist/_chunks/App-P1kyM3gT.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-2xzbhaQP.js.map +0 -1
  31. package/dist/_chunks/index-_eBuegHN.mjs.map +0 -1
@@ -1,17 +1,17 @@
1
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";
2
+ import { RelativeTime as RelativeTime$1, useNotification, useAPIErrorHandler, useQueryParams, useTracking, LoadingIndicatorPage, CheckPermissions, PageSizeURLQuery, PaginationURLQuery, AnErrorOccurred, ConfirmDialog, useRBAC, useStrapiApp, NoContent, Table, CheckPagePermissions } from "@strapi/helper-plugin";
3
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-_eBuegHN.mjs";
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-PiOGBETy.mjs";
5
5
  import * as React from "react";
6
6
  import { useLicenseLimits, unstable_useDocument } from "@strapi/admin/strapi-admin";
7
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";
8
8
  import { Link, Menu, LinkButton } from "@strapi/design-system/v2";
9
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 { formatISO, parse } from "date-fns";
14
+ import { formatISO } from "date-fns";
15
15
  import { Formik, Form, useFormikContext } from "formik";
16
16
  import * as yup from "yup";
17
17
  import "@reduxjs/toolkit/query";
@@ -47,7 +47,6 @@ const ReleaseModal = ({
47
47
  const { formatMessage } = useIntl();
48
48
  const { pathname } = useLocation();
49
49
  const isCreatingRelease = pathname === `/plugins/${pluginId}`;
50
- const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
51
50
  const { timezoneList, systemTimezone = { value: "UTC+00:00-Africa/Abidjan " } } = getTimezones(
52
51
  initialValues.scheduledAt ? new Date(initialValues.scheduledAt) : /* @__PURE__ */ new Date()
53
52
  );
@@ -55,13 +54,12 @@ const ReleaseModal = ({
55
54
  const { date, time, timezone } = values;
56
55
  if (!date || !time || !timezone)
57
56
  return null;
58
- const formattedDate = parse(time, "HH:mm", new Date(date));
59
- const timezoneWithoutOffset = timezone.split("_")[1];
60
- return zonedTimeToUtc(formattedDate, timezoneWithoutOffset);
57
+ const timezoneWithoutOffset = timezone.split("&")[1];
58
+ return zonedTimeToUtc(`${date} ${time}`, timezoneWithoutOffset);
61
59
  };
62
60
  const getTimezoneWithOffset = () => {
63
61
  const currentTimezone = timezoneList.find(
64
- (timezone) => timezone.value.split("_")[1] === initialValues.timezone
62
+ (timezone) => timezone.value.split("&")[1] === initialValues.timezone
65
63
  );
66
64
  return currentTimezone?.value || systemTimezone.value;
67
65
  };
@@ -79,7 +77,7 @@ const ReleaseModal = ({
79
77
  onSubmit: (values) => {
80
78
  handleSubmit({
81
79
  ...values,
82
- timezone: values.timezone ? values.timezone.split("_")[1] : null,
80
+ timezone: values.timezone ? values.timezone.split("&")[1] : null,
83
81
  scheduledAt: values.isScheduled ? getScheduledTimestamp(values) : null
84
82
  });
85
83
  },
@@ -105,92 +103,88 @@ const ReleaseModal = ({
105
103
  required: true
106
104
  }
107
105
  ),
108
- IsSchedulingEnabled && /* @__PURE__ */ jsxs(Fragment, { children: [
109
- /* @__PURE__ */ jsx(Box, { width: "max-content", children: /* @__PURE__ */ jsx(
110
- Checkbox,
111
- {
112
- name: "isScheduled",
113
- value: values.isScheduled,
114
- onChange: (event) => {
115
- setFieldValue("isScheduled", event.target.checked);
116
- if (!event.target.checked) {
106
+ /* @__PURE__ */ jsx(Box, { width: "max-content", children: /* @__PURE__ */ jsx(
107
+ Checkbox,
108
+ {
109
+ name: "isScheduled",
110
+ value: values.isScheduled,
111
+ onChange: (event) => {
112
+ setFieldValue("isScheduled", event.target.checked);
113
+ if (!event.target.checked) {
114
+ setFieldValue("date", null);
115
+ setFieldValue("time", "");
116
+ setFieldValue("timezone", null);
117
+ } else {
118
+ setFieldValue("date", initialValues.date);
119
+ setFieldValue("time", initialValues.time);
120
+ setFieldValue("timezone", initialValues.timezone ?? systemTimezone?.value);
121
+ }
122
+ },
123
+ children: /* @__PURE__ */ jsx(
124
+ Typography,
125
+ {
126
+ textColor: values.isScheduled ? "primary600" : "neutral800",
127
+ fontWeight: values.isScheduled ? "semiBold" : "regular",
128
+ children: formatMessage({
129
+ id: "modal.form.input.label.schedule-release",
130
+ defaultMessage: "Schedule release"
131
+ })
132
+ }
133
+ )
134
+ }
135
+ ) }),
136
+ values.isScheduled && /* @__PURE__ */ jsxs(Fragment, { children: [
137
+ /* @__PURE__ */ jsxs(Flex, { gap: 4, alignItems: "start", children: [
138
+ /* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
139
+ DatePicker,
140
+ {
141
+ label: formatMessage({
142
+ id: "content-releases.modal.form.input.label.date",
143
+ defaultMessage: "Date"
144
+ }),
145
+ name: "date",
146
+ error: errors.date,
147
+ onChange: (date) => {
148
+ const isoFormatDate = date ? formatISO(date, { representation: "date" }) : null;
149
+ setFieldValue("date", isoFormatDate);
150
+ },
151
+ clearLabel: formatMessage({
152
+ id: "content-releases.modal.form.input.clearLabel",
153
+ defaultMessage: "Clear"
154
+ }),
155
+ onClear: () => {
117
156
  setFieldValue("date", null);
157
+ },
158
+ selectedDate: values.date || void 0,
159
+ required: true,
160
+ minDate: utcToZonedTime(/* @__PURE__ */ new Date(), values.timezone.split("&")[1])
161
+ }
162
+ ) }),
163
+ /* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
164
+ TimePicker,
165
+ {
166
+ label: formatMessage({
167
+ id: "content-releases.modal.form.input.label.time",
168
+ defaultMessage: "Time"
169
+ }),
170
+ name: "time",
171
+ error: errors.time,
172
+ onChange: (time) => {
173
+ setFieldValue("time", time);
174
+ },
175
+ clearLabel: formatMessage({
176
+ id: "content-releases.modal.form.input.clearLabel",
177
+ defaultMessage: "Clear"
178
+ }),
179
+ onClear: () => {
118
180
  setFieldValue("time", "");
119
- setFieldValue("timezone", null);
120
- } else {
121
- setFieldValue("date", initialValues.date);
122
- setFieldValue("time", initialValues.time);
123
- setFieldValue(
124
- "timezone",
125
- initialValues.timezone ?? systemTimezone?.value
126
- );
127
- }
128
- },
129
- children: /* @__PURE__ */ jsx(
130
- Typography,
131
- {
132
- textColor: values.isScheduled ? "primary600" : "neutral800",
133
- fontWeight: values.isScheduled ? "semiBold" : "regular",
134
- children: formatMessage({
135
- id: "modal.form.input.label.schedule-release",
136
- defaultMessage: "Schedule release"
137
- })
138
- }
139
- )
140
- }
141
- ) }),
142
- values.isScheduled && /* @__PURE__ */ jsxs(Fragment, { children: [
143
- /* @__PURE__ */ jsxs(Flex, { gap: 4, alignItems: "start", children: [
144
- /* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
145
- DatePicker,
146
- {
147
- label: formatMessage({
148
- id: "content-releases.modal.form.input.label.date",
149
- defaultMessage: "Date"
150
- }),
151
- name: "date",
152
- error: errors.date,
153
- onChange: (date) => {
154
- const isoFormatDate = date ? formatISO(date, { representation: "date" }) : null;
155
- setFieldValue("date", isoFormatDate);
156
- },
157
- clearLabel: formatMessage({
158
- id: "content-releases.modal.form.input.clearLabel",
159
- defaultMessage: "Clear"
160
- }),
161
- onClear: () => {
162
- setFieldValue("date", null);
163
- },
164
- selectedDate: values.date || void 0,
165
- required: true
166
- }
167
- ) }),
168
- /* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
169
- TimePicker,
170
- {
171
- label: formatMessage({
172
- id: "content-releases.modal.form.input.label.time",
173
- defaultMessage: "Time"
174
- }),
175
- name: "time",
176
- error: errors.time,
177
- onChange: (time) => {
178
- setFieldValue("time", time);
179
- },
180
- clearLabel: formatMessage({
181
- id: "content-releases.modal.form.input.clearLabel",
182
- defaultMessage: "Clear"
183
- }),
184
- onClear: () => {
185
- setFieldValue("time", "");
186
- },
187
- value: values.time || void 0,
188
- required: true
189
- }
190
- ) })
191
- ] }),
192
- /* @__PURE__ */ jsx(TimezoneComponent, { timezoneOptions: timezoneList })
193
- ] })
181
+ },
182
+ value: values.time || void 0,
183
+ required: true
184
+ }
185
+ ) })
186
+ ] }),
187
+ /* @__PURE__ */ jsx(TimezoneComponent, { timezoneOptions: timezoneList })
194
188
  ] })
195
189
  ] }) }),
196
190
  /* @__PURE__ */ jsx(
@@ -214,10 +208,10 @@ const ReleaseModal = ({
214
208
  const getTimezones = (selectedDate) => {
215
209
  const timezoneList = Intl.supportedValuesOf("timeZone").map((timezone) => {
216
210
  const utcOffset = getTimezoneOffset(timezone, selectedDate);
217
- return { offset: utcOffset, value: `${utcOffset}_${timezone}` };
211
+ return { offset: utcOffset, value: `${utcOffset}&${timezone}` };
218
212
  });
219
213
  const systemTimezone = timezoneList.find(
220
- (timezone) => timezone.value.split("_")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
214
+ (timezone) => timezone.value.split("&")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
221
215
  );
222
216
  return { timezoneList, systemTimezone };
223
217
  };
@@ -229,7 +223,7 @@ const TimezoneComponent = ({ timezoneOptions }) => {
229
223
  if (values.date) {
230
224
  const { timezoneList: timezoneList2 } = getTimezones(new Date(values.date));
231
225
  setTimezoneList(timezoneList2);
232
- const updatedTimezone = values.timezone && timezoneList2.find((tz) => tz.value.split("_")[1] === values.timezone.split("_")[1]);
226
+ const updatedTimezone = values.timezone && timezoneList2.find((tz) => tz.value.split("&")[1] === values.timezone.split("&")[1]);
233
227
  if (updatedTimezone) {
234
228
  setFieldValue("timezone", updatedTimezone.value);
235
229
  }
@@ -242,9 +236,10 @@ const TimezoneComponent = ({ timezoneOptions }) => {
242
236
  id: "content-releases.modal.form.input.label.timezone",
243
237
  defaultMessage: "Timezone"
244
238
  }),
239
+ autocomplete: { type: "list", filter: "contains" },
245
240
  name: "timezone",
246
241
  value: values.timezone || void 0,
247
- textValue: values.timezone ? values.timezone.replace("_", " ") : void 0,
242
+ textValue: values.timezone ? values.timezone.replace(/&/, " ") : void 0,
248
243
  onChange: (timezone) => {
249
244
  setFieldValue("timezone", timezone);
250
245
  },
@@ -256,15 +251,18 @@ const TimezoneComponent = ({ timezoneOptions }) => {
256
251
  },
257
252
  error: errors.timezone,
258
253
  required: true,
259
- children: timezoneList.map((timezone) => /* @__PURE__ */ jsx(ComboboxOption, { value: timezone.value, children: timezone.value.replace("_", " ") }, timezone.value))
254
+ children: timezoneList.map((timezone) => /* @__PURE__ */ jsx(ComboboxOption, { value: timezone.value, children: timezone.value.replace(/&/, " ") }, timezone.value))
260
255
  }
261
256
  );
262
257
  };
263
258
  const LinkCard = styled(Link)`
264
259
  display: block;
265
260
  `;
266
- const CapitalizeRelativeTime = styled(RelativeTime)`
267
- text-transform: capitalize;
261
+ const RelativeTime = styled(RelativeTime$1)`
262
+ display: inline-block;
263
+ &::first-letter {
264
+ text-transform: uppercase;
265
+ }
268
266
  `;
269
267
  const getBadgeProps = (status) => {
270
268
  let color;
@@ -293,7 +291,6 @@ const getBadgeProps = (status) => {
293
291
  };
294
292
  const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
295
293
  const { formatMessage } = useIntl();
296
- const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
297
294
  if (isError) {
298
295
  return /* @__PURE__ */ jsx(AnErrorOccurred, {});
299
296
  }
@@ -314,7 +311,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
314
311
  }
315
312
  );
316
313
  }
317
- 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(
314
+ 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(
318
315
  Flex,
319
316
  {
320
317
  direction: "column",
@@ -330,16 +327,10 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
330
327
  children: [
331
328
  /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "start", gap: 1, children: [
332
329
  /* @__PURE__ */ jsx(Typography, { as: "h3", variant: "delta", fontWeight: "bold", children: name }),
333
- /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: IsSchedulingEnabled ? scheduledAt ? /* @__PURE__ */ jsx(CapitalizeRelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
330
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: scheduledAt ? /* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
334
331
  id: "content-releases.pages.Releases.not-scheduled",
335
332
  defaultMessage: "Not scheduled"
336
- }) : formatMessage(
337
- {
338
- id: "content-releases.page.Releases.release-item.entries",
339
- defaultMessage: "{number, plural, =0 {No entries} one {# entry} other {# entries}}"
340
- },
341
- { number: actions.meta.count }
342
- ) })
333
+ }) })
343
334
  ] }),
344
335
  /* @__PURE__ */ jsx(Badge, { ...getBadgeProps(status), children: status })
345
336
  ]
@@ -358,8 +349,7 @@ const INITIAL_FORM_VALUES = {
358
349
  name: "",
359
350
  date: null,
360
351
  time: "",
361
- // Remove future flag check after Scheduling Beta release and replace with true as creating new release should include scheduling by default
362
- isScheduled: window.strapi.future.isEnabled("contentReleasesScheduling"),
352
+ isScheduled: true,
363
353
  scheduledAt: null,
364
354
  timezone: null
365
355
  };
@@ -709,7 +699,12 @@ const ReleaseDetailsLayout = ({
709
699
  }
710
700
  };
711
701
  const handleRefresh = () => {
712
- dispatch(releaseApi.util.invalidateTags([{ type: "ReleaseAction", id: "LIST" }]));
702
+ dispatch(
703
+ releaseApi.util.invalidateTags([
704
+ { type: "ReleaseAction", id: "LIST" },
705
+ { type: "Release", id: releaseId }
706
+ ])
707
+ );
713
708
  };
714
709
  const getCreatedByUser = () => {
715
710
  if (!release?.createdBy) {
@@ -745,7 +740,6 @@ const ReleaseDetailsLayout = ({
745
740
  }
746
741
  const totalEntries = release.actions.meta.count || 0;
747
742
  const hasCreatedByUser = Boolean(getCreatedByUser());
748
- const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
749
743
  const isScheduled = release.scheduledAt && release.timezone;
750
744
  const numberOfEntriesText = formatMessage(
751
745
  {
@@ -780,7 +774,7 @@ const ReleaseDetailsLayout = ({
780
774
  {
781
775
  title: release.name,
782
776
  subtitle: /* @__PURE__ */ jsxs(Flex, { gap: 2, lineHeight: 6, children: [
783
- /* @__PURE__ */ jsx(Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (IsSchedulingEnabled && isScheduled ? ` - ${scheduledText}` : "") }),
777
+ /* @__PURE__ */ jsx(Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : "") }),
784
778
  /* @__PURE__ */ jsx(Badge, { ...getBadgeProps(release.status), children: release.status })
785
779
  ] }),
786
780
  navigationAction: /* @__PURE__ */ jsx(Link$1, { startIcon: /* @__PURE__ */ jsx(ArrowLeft, {}), to: "/plugins/content-releases", children: formatMessage({
@@ -852,7 +846,7 @@ const ReleaseDetailsLayout = ({
852
846
  defaultMessage: "Created"
853
847
  }) }),
854
848
  /* @__PURE__ */ jsxs(Typography, { variant: "pi", color: "neutral300", children: [
855
- /* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(release.createdAt) }),
849
+ /* @__PURE__ */ jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
856
850
  formatMessage(
857
851
  {
858
852
  id: "content-releases.header.actions.created.description",
@@ -891,6 +885,7 @@ const ReleaseDetailsLayout = ({
891
885
  ] });
892
886
  };
893
887
  const GROUP_BY_OPTIONS = ["contentType", "locale", "action"];
888
+ const GROUP_BY_OPTIONS_NO_LOCALE = ["contentType", "action"];
894
889
  const getGroupByOptionLabel = (value) => {
895
890
  if (value === "locale") {
896
891
  return {
@@ -909,6 +904,21 @@ const getGroupByOptionLabel = (value) => {
909
904
  defaultMessage: "Content-Types"
910
905
  };
911
906
  };
907
+ const DEFAULT_RELEASE_DETAILS_HEADER = [
908
+ {
909
+ key: "__name__",
910
+ fieldSchema: { type: "string" },
911
+ metadatas: {
912
+ label: {
913
+ id: "content-releases.page.ReleaseDetails.table.header.label.name",
914
+ defaultMessage: "name"
915
+ },
916
+ searchable: false,
917
+ sortable: false
918
+ },
919
+ name: "name"
920
+ }
921
+ ];
912
922
  const ReleaseDetailsBody = () => {
913
923
  const { formatMessage } = useIntl();
914
924
  const { releaseId } = useParams();
@@ -924,6 +934,17 @@ const ReleaseDetailsBody = () => {
924
934
  const {
925
935
  allowedActions: { canUpdate }
926
936
  } = useRBAC(PERMISSIONS);
937
+ const { runHookWaterfall } = useStrapiApp();
938
+ const {
939
+ displayedHeaders,
940
+ hasI18nEnabled
941
+ } = runHookWaterfall(
942
+ "ContentReleases/pages/ReleaseDetails/add-locale-in-releases",
943
+ {
944
+ displayedHeaders: DEFAULT_RELEASE_DETAILS_HEADER,
945
+ hasI18nEnabled: false
946
+ }
947
+ );
927
948
  const release = releaseData?.data;
928
949
  const selectedGroupBy = query?.groupBy || "contentType";
929
950
  const {
@@ -1025,6 +1046,7 @@ const ReleaseDetailsBody = () => {
1025
1046
  }
1026
1047
  ) });
1027
1048
  }
1049
+ const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;
1028
1050
  return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsxs(Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
1029
1051
  /* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(
1030
1052
  SingleSelect,
@@ -1044,7 +1066,7 @@ const ReleaseDetailsBody = () => {
1044
1066
  ),
1045
1067
  value: formatMessage(getGroupByOptionLabel(selectedGroupBy)),
1046
1068
  onChange: (value) => setQuery({ groupBy: value }),
1047
- children: GROUP_BY_OPTIONS.map((option) => /* @__PURE__ */ jsx(SingleSelectOption, { value: option, children: formatMessage(getGroupByOptionLabel(option)) }, option))
1069
+ children: options.map((option) => /* @__PURE__ */ jsx(SingleSelectOption, { value: option, children: formatMessage(getGroupByOptionLabel(option)) }, option))
1048
1070
  }
1049
1071
  ) }),
1050
1072
  Object.keys(releaseActions).map((key) => /* @__PURE__ */ jsxs(Flex, { gap: 4, direction: "column", alignItems: "stretch", children: [
@@ -1061,28 +1083,15 @@ const ReleaseDetailsBody = () => {
1061
1083
  isFetching,
1062
1084
  children: /* @__PURE__ */ jsxs(Table.Content, { children: [
1063
1085
  /* @__PURE__ */ jsxs(Table.Head, { children: [
1064
- /* @__PURE__ */ jsx(
1086
+ displayedHeaders.map(({ key: key2, fieldSchema, metadatas, name }) => /* @__PURE__ */ jsx(
1065
1087
  Table.HeaderCell,
1066
1088
  {
1067
- fieldSchemaType: "string",
1068
- label: formatMessage({
1069
- id: "content-releases.page.ReleaseDetails.table.header.label.name",
1070
- defaultMessage: "name"
1071
- }),
1072
- name: "name"
1073
- }
1074
- ),
1075
- /* @__PURE__ */ jsx(
1076
- Table.HeaderCell,
1077
- {
1078
- fieldSchemaType: "string",
1079
- label: formatMessage({
1080
- id: "content-releases.page.ReleaseDetails.table.header.label.locale",
1081
- defaultMessage: "locale"
1082
- }),
1083
- name: "locale"
1084
- }
1085
- ),
1089
+ fieldSchemaType: fieldSchema.type,
1090
+ label: formatMessage(metadatas.label),
1091
+ name
1092
+ },
1093
+ key2
1094
+ )),
1086
1095
  /* @__PURE__ */ jsx(
1087
1096
  Table.HeaderCell,
1088
1097
  {
@@ -1121,7 +1130,7 @@ const ReleaseDetailsBody = () => {
1121
1130
  /* @__PURE__ */ jsx(Table.Body, { children: releaseActions[key].map(
1122
1131
  ({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
1123
1132
  /* @__PURE__ */ jsx(Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
1124
- /* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
1133
+ hasI18nEnabled && /* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
1125
1134
  /* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: contentType.displayName || "" }) }),
1126
1135
  /* @__PURE__ */ jsx(Td, { width: "20%", children: release.releasedAt ? /* @__PURE__ */ jsx(Typography, { children: formatMessage(
1127
1136
  {
@@ -1193,7 +1202,7 @@ const ReleaseDetailsPage = () => {
1193
1202
  const { releaseId } = useParams();
1194
1203
  const toggleNotification = useNotification();
1195
1204
  const { formatAPIError } = useAPIErrorHandler();
1196
- const { push } = useHistory();
1205
+ const { replace } = useHistory();
1197
1206
  const [releaseModalShown, setReleaseModalShown] = React.useState(false);
1198
1207
  const [showWarningSubmit, setWarningSubmit] = React.useState(false);
1199
1208
  const {
@@ -1221,7 +1230,7 @@ const ReleaseDetailsPage = () => {
1221
1230
  const title = releaseData?.name || "";
1222
1231
  const timezone = releaseData?.timezone ?? null;
1223
1232
  const scheduledAt = releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;
1224
- const date = scheduledAt ? new Date(format(scheduledAt, "yyyy-MM-dd")) : null;
1233
+ const date = scheduledAt ? format(scheduledAt, "yyyy-MM-dd") : null;
1225
1234
  const time = scheduledAt ? format(scheduledAt, "HH:mm") : "";
1226
1235
  const handleEditRelease = async (values) => {
1227
1236
  const response = await updateRelease({
@@ -1238,6 +1247,7 @@ const ReleaseDetailsPage = () => {
1238
1247
  defaultMessage: "Release updated."
1239
1248
  })
1240
1249
  });
1250
+ toggleEditReleaseModal();
1241
1251
  } else if (isAxiosError(response.error)) {
1242
1252
  toggleNotification({
1243
1253
  type: "warning",
@@ -1249,14 +1259,13 @@ const ReleaseDetailsPage = () => {
1249
1259
  message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
1250
1260
  });
1251
1261
  }
1252
- toggleEditReleaseModal();
1253
1262
  };
1254
1263
  const handleDeleteRelease = async () => {
1255
1264
  const response = await deleteRelease({
1256
1265
  id: releaseId
1257
1266
  });
1258
1267
  if ("data" in response) {
1259
- push("/plugins/content-releases");
1268
+ replace("/plugins/content-releases");
1260
1269
  } else if (isAxiosError(response.error)) {
1261
1270
  toggleNotification({
1262
1271
  type: "warning",
@@ -1318,4 +1327,4 @@ const App = () => {
1318
1327
  export {
1319
1328
  App
1320
1329
  };
1321
- //# sourceMappingURL=App-6ugQxqYE.mjs.map
1330
+ //# sourceMappingURL=App-jrh58sXY.mjs.map