@strapi/content-releases 5.0.0-beta.0 → 5.0.0-beta.10

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 (71) hide show
  1. package/dist/_chunks/{App-IkyOz9wq.mjs → App-B2R2exNT.mjs} +257 -256
  2. package/dist/_chunks/App-B2R2exNT.mjs.map +1 -0
  3. package/dist/_chunks/{App-FuRaphre.js → App-CEwOQkKT.js} +265 -265
  4. package/dist/_chunks/App-CEwOQkKT.js.map +1 -0
  5. package/dist/_chunks/{PurchaseContentReleases-YhAPgpG9.js → PurchaseContentReleases-Be3acS2L.js} +8 -7
  6. package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js.map +1 -0
  7. package/dist/_chunks/{PurchaseContentReleases-Clm0iACO.mjs → PurchaseContentReleases-_MxP6-Dt.mjs} +9 -8
  8. package/dist/_chunks/PurchaseContentReleases-_MxP6-Dt.mjs.map +1 -0
  9. package/dist/_chunks/{en-RdapH-9X.mjs → en-B9Ur3VsE.mjs} +11 -2
  10. package/dist/_chunks/en-B9Ur3VsE.mjs.map +1 -0
  11. package/dist/_chunks/{en-faJDuv3q.js → en-DtFJ5ViE.js} +11 -2
  12. package/dist/_chunks/en-DtFJ5ViE.js.map +1 -0
  13. package/dist/_chunks/{index-Sb3Nal8H.js → index-BrWv-zV4.js} +169 -193
  14. package/dist/_chunks/index-BrWv-zV4.js.map +1 -0
  15. package/dist/_chunks/{index-qP3rNiDS.mjs → index-DbmynICx.mjs} +170 -192
  16. package/dist/_chunks/index-DbmynICx.mjs.map +1 -0
  17. package/dist/admin/index.js +1 -1
  18. package/dist/admin/index.mjs +2 -2
  19. package/dist/admin/src/components/CMReleasesContainer.d.ts +21 -0
  20. package/dist/admin/src/components/ReleaseAction.d.ts +3 -0
  21. package/dist/admin/src/components/ReleaseActionMenu.d.ts +1 -1
  22. package/dist/admin/src/components/ReleaseListCell.d.ts +0 -0
  23. package/dist/admin/src/components/ReleaseModal.d.ts +3 -2
  24. package/dist/admin/src/services/release.d.ts +56 -320
  25. package/dist/admin/src/utils/api.d.ts +6 -0
  26. package/dist/server/index.js +101 -52
  27. package/dist/server/index.js.map +1 -1
  28. package/dist/server/index.mjs +102 -53
  29. package/dist/server/index.mjs.map +1 -1
  30. package/dist/server/src/bootstrap.d.ts +2 -2
  31. package/dist/server/src/bootstrap.d.ts.map +1 -1
  32. package/dist/server/src/controllers/index.d.ts +1 -0
  33. package/dist/server/src/controllers/index.d.ts.map +1 -1
  34. package/dist/server/src/controllers/release-action.d.ts.map +1 -1
  35. package/dist/server/src/controllers/release.d.ts +1 -0
  36. package/dist/server/src/controllers/release.d.ts.map +1 -1
  37. package/dist/server/src/controllers/validation/release-action.d.ts +7 -2
  38. package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -1
  39. package/dist/server/src/destroy.d.ts +2 -2
  40. package/dist/server/src/destroy.d.ts.map +1 -1
  41. package/dist/server/src/index.d.ts +1412 -1411
  42. package/dist/server/src/index.d.ts.map +1 -1
  43. package/dist/server/src/migrations/index.d.ts.map +1 -1
  44. package/dist/server/src/register.d.ts +2 -2
  45. package/dist/server/src/register.d.ts.map +1 -1
  46. package/dist/server/src/routes/release.d.ts.map +1 -1
  47. package/dist/server/src/services/index.d.ts +1407 -1407
  48. package/dist/server/src/services/release.d.ts +9 -9
  49. package/dist/server/src/services/release.d.ts.map +1 -1
  50. package/dist/server/src/services/scheduling.d.ts +6 -6
  51. package/dist/server/src/services/scheduling.d.ts.map +1 -1
  52. package/dist/server/src/services/validation.d.ts +2 -2
  53. package/dist/server/src/services/validation.d.ts.map +1 -1
  54. package/dist/server/src/utils/index.d.ts +10 -10
  55. package/dist/server/src/utils/index.d.ts.map +1 -1
  56. package/dist/shared/contracts/release-actions.d.ts +9 -9
  57. package/dist/shared/contracts/release-actions.d.ts.map +1 -1
  58. package/dist/shared/contracts/releases.d.ts +17 -1
  59. package/dist/shared/contracts/releases.d.ts.map +1 -1
  60. package/dist/shared/types.d.ts +2 -2
  61. package/dist/shared/types.d.ts.map +1 -1
  62. package/package.json +19 -19
  63. package/dist/_chunks/App-FuRaphre.js.map +0 -1
  64. package/dist/_chunks/App-IkyOz9wq.mjs.map +0 -1
  65. package/dist/_chunks/PurchaseContentReleases-Clm0iACO.mjs.map +0 -1
  66. package/dist/_chunks/PurchaseContentReleases-YhAPgpG9.js.map +0 -1
  67. package/dist/_chunks/en-RdapH-9X.mjs.map +0 -1
  68. package/dist/_chunks/en-faJDuv3q.js.map +0 -1
  69. package/dist/_chunks/index-Sb3Nal8H.js.map +0 -1
  70. package/dist/_chunks/index-qP3rNiDS.mjs.map +0 -1
  71. package/dist/admin/src/services/axios.d.ts +0 -29
@@ -1,21 +1,23 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
- import { useNotification, useAPIErrorHandler, useQueryParams, useLicenseLimits, useTracking, useRBAC, Page, Pagination, ConfirmDialog, 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 useGetReleaseActionsQuery, h as useUpdateReleaseActionMutation, R as ReleaseActionOptions, j as ReleaseActionMenu, r as releaseApi } from "./index-qP3rNiDS.mjs";
2
+ import { useNotification, useAPIErrorHandler, useQueryParams, useTracking, useRBAC, Page, Layouts, Pagination, isFetchError, ConfirmDialog, BackButton, useStrapiApp, Table } from "@strapi/admin/strapi-admin";
3
+ import { useLocation, useNavigate, NavLink, 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, b as useGetReleaseQuery, c as useUpdateReleaseMutation, d as useDeleteReleaseMutation, e as usePublishReleaseMutation, f as useGetReleaseActionsQuery, h as useUpdateReleaseActionMutation, R as ReleaseActionOptions, i as ReleaseActionMenu, r as releaseApi } from "./index-DbmynICx.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";
7
- import { Link, Menu, LinkButton } from "@strapi/design-system/v2";
8
- import { Plus, EmptyDocuments, Pencil, Trash, More, CrossCircle, CheckCircle } from "@strapi/icons";
6
+ import { unstable_useDocument } from "@strapi/content-manager/strapi-admin";
7
+ import { Modal, Flex, Field, TextInput, Box, Checkbox, Typography, DatePicker, TimePicker, Button, Combobox, ComboboxOption, Link, Alert, Main, Tabs, Divider, EmptyStateLayout, Grid, Badge, Menu, Dialog, LinkButton, SingleSelect, SingleSelectOption, Tr, Td, Tooltip } from "@strapi/design-system";
8
+ import { Plus, Pencil, Trash, More, CrossCircle, CheckCircle } from "@strapi/icons";
9
+ import { EmptyDocuments } from "@strapi/icons/symbols";
9
10
  import format from "date-fns/format";
10
11
  import { utcToZonedTime, zonedTimeToUtc } from "date-fns-tz";
11
12
  import { useIntl } from "react-intl";
12
- import styled from "styled-components";
13
- import { intervalToDuration, isPast, formatISO, parse } from "date-fns";
13
+ import { styled } from "styled-components";
14
+ import { intervalToDuration, isPast, formatISO } from "date-fns";
14
15
  import { Formik, Form, useFormikContext } from "formik";
15
16
  import * as yup from "yup";
16
17
  import { useDispatch } from "react-redux";
18
+ import { useLicenseLimits } from "@strapi/admin/strapi-admin/ee";
17
19
  const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
18
- const RelativeTime = React.forwardRef(
20
+ const RelativeTime$1 = React.forwardRef(
19
21
  ({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {
20
22
  const { formatRelativeTime, formatDate, formatTime } = useIntl();
21
23
  const interval = intervalToDuration({
@@ -66,6 +68,7 @@ const RELEASE_SCHEMA = yup.object().shape({
66
68
  }).required().noUnknown();
67
69
  const ReleaseModal = ({
68
70
  handleClose,
71
+ open,
69
72
  handleSubmit,
70
73
  initialValues,
71
74
  isLoading = false
@@ -80,9 +83,8 @@ const ReleaseModal = ({
80
83
  const { date, time, timezone } = values;
81
84
  if (!date || !time || !timezone)
82
85
  return null;
83
- const formattedDate = parse(time, "HH:mm", new Date(date));
84
86
  const timezoneWithoutOffset = timezone.split("&")[1];
85
- return zonedTimeToUtc(formattedDate, timezoneWithoutOffset);
87
+ return zonedTimeToUtc(`${date} ${time}`, timezoneWithoutOffset);
86
88
  };
87
89
  const getTimezoneWithOffset = () => {
88
90
  const currentTimezone = timezoneList.find(
@@ -90,8 +92,8 @@ const ReleaseModal = ({
90
92
  );
91
93
  return currentTimezone?.value || systemTimezone.value;
92
94
  };
93
- return /* @__PURE__ */ jsxs(ModalLayout, { onClose: handleClose, labelledBy: "title", children: [
94
- /* @__PURE__ */ jsx(ModalHeader, { children: /* @__PURE__ */ jsx(Typography, { id: "title", fontWeight: "bold", textColor: "neutral800", children: formatMessage(
95
+ return /* @__PURE__ */ jsx(Modal.Root, { open, onOpenChange: handleClose, children: /* @__PURE__ */ jsxs(Modal.Content, { children: [
96
+ /* @__PURE__ */ jsx(Modal.Header, { children: /* @__PURE__ */ jsx(Modal.Title, { children: formatMessage(
95
97
  {
96
98
  id: "content-releases.modal.title",
97
99
  defaultMessage: "{isCreatingRelease, select, true {New release} other {Edit release}}"
@@ -114,123 +116,119 @@ const ReleaseModal = ({
114
116
  },
115
117
  validationSchema: RELEASE_SCHEMA,
116
118
  validateOnChange: false,
117
- children: ({ values, errors, handleChange, setFieldValue }) => /* @__PURE__ */ jsxs(Form, { children: [
118
- /* @__PURE__ */ jsx(ModalBody, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
119
- /* @__PURE__ */ jsx(
120
- TextInput,
121
- {
122
- label: formatMessage({
119
+ children: ({ values, errors, handleChange, setFieldValue }) => {
120
+ return /* @__PURE__ */ jsxs(Form, { children: [
121
+ /* @__PURE__ */ jsx(Modal.Body, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
122
+ /* @__PURE__ */ jsxs(Field.Root, { name: "name", error: errors.name, required: true, children: [
123
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
123
124
  id: "content-releases.modal.form.input.label.release-name",
124
125
  defaultMessage: "Name"
125
- }),
126
- name: "name",
127
- value: values.name,
128
- error: errors.name,
129
- onChange: handleChange,
130
- required: true
131
- }
132
- ),
133
- /* @__PURE__ */ jsx(Box, { width: "max-content", children: /* @__PURE__ */ jsx(
134
- Checkbox,
135
- {
136
- name: "isScheduled",
137
- value: values.isScheduled,
138
- onChange: (event) => {
139
- setFieldValue("isScheduled", event.target.checked);
140
- if (!event.target.checked) {
141
- setFieldValue("date", null);
142
- setFieldValue("time", "");
143
- setFieldValue("timezone", null);
144
- } else {
145
- setFieldValue("date", initialValues.date);
146
- setFieldValue("time", initialValues.time);
147
- setFieldValue("timezone", initialValues.timezone ?? systemTimezone?.value);
148
- }
149
- },
150
- children: /* @__PURE__ */ jsx(
151
- Typography,
152
- {
153
- textColor: values.isScheduled ? "primary600" : "neutral800",
154
- fontWeight: values.isScheduled ? "semiBold" : "regular",
155
- children: formatMessage({
156
- id: "modal.form.input.label.schedule-release",
157
- defaultMessage: "Schedule release"
158
- })
159
- }
160
- )
161
- }
162
- ) }),
163
- values.isScheduled && /* @__PURE__ */ jsxs(Fragment, { children: [
164
- /* @__PURE__ */ jsxs(Flex, { gap: 4, alignItems: "start", children: [
165
- /* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
166
- DatePicker,
167
- {
168
- label: formatMessage({
126
+ }) }),
127
+ /* @__PURE__ */ jsx(TextInput, { value: values.name, onChange: handleChange }),
128
+ /* @__PURE__ */ jsx(Field.Error, {})
129
+ ] }),
130
+ /* @__PURE__ */ jsx(Box, { width: "max-content", children: /* @__PURE__ */ jsx(
131
+ Checkbox,
132
+ {
133
+ name: "isScheduled",
134
+ checked: values.isScheduled,
135
+ onCheckedChange: (checked) => {
136
+ setFieldValue("isScheduled", checked);
137
+ if (!checked) {
138
+ setFieldValue("date", null);
139
+ setFieldValue("time", "");
140
+ setFieldValue("timezone", null);
141
+ } else {
142
+ setFieldValue("date", initialValues.date);
143
+ setFieldValue("time", initialValues.time);
144
+ setFieldValue(
145
+ "timezone",
146
+ initialValues.timezone ?? systemTimezone?.value
147
+ );
148
+ }
149
+ },
150
+ children: /* @__PURE__ */ jsx(
151
+ Typography,
152
+ {
153
+ textColor: values.isScheduled ? "primary600" : "neutral800",
154
+ fontWeight: values.isScheduled ? "semiBold" : "regular",
155
+ children: formatMessage({
156
+ id: "modal.form.input.label.schedule-release",
157
+ defaultMessage: "Schedule release"
158
+ })
159
+ }
160
+ )
161
+ }
162
+ ) }),
163
+ values.isScheduled && /* @__PURE__ */ jsxs(Fragment, { children: [
164
+ /* @__PURE__ */ jsxs(Flex, { gap: 4, alignItems: "start", children: [
165
+ /* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsxs(Field.Root, { name: "date", error: errors.date, required: true, children: [
166
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
169
167
  id: "content-releases.modal.form.input.label.date",
170
168
  defaultMessage: "Date"
171
- }),
172
- name: "date",
173
- error: errors.date,
174
- onChange: (date) => {
175
- const isoFormatDate = date ? formatISO(date, { representation: "date" }) : null;
176
- setFieldValue("date", isoFormatDate);
177
- },
178
- clearLabel: formatMessage({
179
- id: "content-releases.modal.form.input.clearLabel",
180
- defaultMessage: "Clear"
181
- }),
182
- onClear: () => {
183
- setFieldValue("date", null);
184
- },
185
- selectedDate: values.date || void 0,
186
- required: true,
187
- minDate: utcToZonedTime(/* @__PURE__ */ new Date(), values.timezone.split("&")[1])
188
- }
189
- ) }),
190
- /* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
191
- TimePicker,
192
- {
193
- label: formatMessage({
169
+ }) }),
170
+ /* @__PURE__ */ jsx(
171
+ DatePicker,
172
+ {
173
+ onChange: (date) => {
174
+ const isoFormatDate = date ? formatISO(date, { representation: "date" }) : null;
175
+ setFieldValue("date", isoFormatDate);
176
+ },
177
+ clearLabel: formatMessage({
178
+ id: "content-releases.modal.form.input.clearLabel",
179
+ defaultMessage: "Clear"
180
+ }),
181
+ onClear: () => {
182
+ setFieldValue("date", null);
183
+ },
184
+ value: values.date ? new Date(values.date) : /* @__PURE__ */ new Date(),
185
+ minDate: utcToZonedTime(/* @__PURE__ */ new Date(), values.timezone.split("&")[1])
186
+ }
187
+ ),
188
+ /* @__PURE__ */ jsx(Field.Error, {})
189
+ ] }) }),
190
+ /* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsxs(Field.Root, { name: "time", error: errors.time, required: true, children: [
191
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
194
192
  id: "content-releases.modal.form.input.label.time",
195
193
  defaultMessage: "Time"
196
- }),
197
- name: "time",
198
- error: errors.time,
199
- onChange: (time) => {
200
- setFieldValue("time", time);
201
- },
202
- clearLabel: formatMessage({
203
- id: "content-releases.modal.form.input.clearLabel",
204
- defaultMessage: "Clear"
205
- }),
206
- onClear: () => {
207
- setFieldValue("time", "");
208
- },
209
- value: values.time || void 0,
210
- required: true
211
- }
212
- ) })
213
- ] }),
214
- /* @__PURE__ */ jsx(TimezoneComponent, { timezoneOptions: timezoneList })
215
- ] })
216
- ] }) }),
217
- /* @__PURE__ */ jsx(
218
- ModalFooter,
219
- {
220
- startActions: /* @__PURE__ */ jsx(Button, { onClick: handleClose, variant: "tertiary", name: "cancel", children: formatMessage({ id: "cancel", defaultMessage: "Cancel" }) }),
221
- endActions: /* @__PURE__ */ jsx(Button, { name: "submit", loading: isLoading, type: "submit", children: formatMessage(
194
+ }) }),
195
+ /* @__PURE__ */ jsx(
196
+ TimePicker,
197
+ {
198
+ onChange: (time) => {
199
+ setFieldValue("time", time);
200
+ },
201
+ clearLabel: formatMessage({
202
+ id: "content-releases.modal.form.input.clearLabel",
203
+ defaultMessage: "Clear"
204
+ }),
205
+ onClear: () => {
206
+ setFieldValue("time", "");
207
+ },
208
+ value: values.time || void 0
209
+ }
210
+ ),
211
+ /* @__PURE__ */ jsx(Field.Error, {})
212
+ ] }) })
213
+ ] }),
214
+ /* @__PURE__ */ jsx(TimezoneComponent, { timezoneOptions: timezoneList })
215
+ ] })
216
+ ] }) }),
217
+ /* @__PURE__ */ jsxs(Modal.Footer, { children: [
218
+ /* @__PURE__ */ jsx(Modal.Close, { children: /* @__PURE__ */ jsx(Button, { variant: "tertiary", name: "cancel", children: formatMessage({ id: "cancel", defaultMessage: "Cancel" }) }) }),
219
+ /* @__PURE__ */ jsx(Button, { name: "submit", loading: isLoading, type: "submit", children: formatMessage(
222
220
  {
223
221
  id: "content-releases.modal.form.button.submit",
224
222
  defaultMessage: "{isCreatingRelease, select, true {Continue} other {Save}}"
225
223
  },
226
224
  { isCreatingRelease }
227
225
  ) })
228
- }
229
- )
230
- ] })
226
+ ] })
227
+ ] });
228
+ }
231
229
  }
232
230
  )
233
- ] });
231
+ ] }) });
234
232
  };
235
233
  const getTimezones = (selectedDate) => {
236
234
  const timezoneList = Intl.supportedValuesOf("timeZone").map((timezone) => {
@@ -256,38 +254,44 @@ const TimezoneComponent = ({ timezoneOptions }) => {
256
254
  }
257
255
  }
258
256
  }, [setFieldValue, values.date, values.timezone]);
259
- return /* @__PURE__ */ jsx(
260
- Combobox,
261
- {
262
- label: formatMessage({
263
- id: "content-releases.modal.form.input.label.timezone",
264
- defaultMessage: "Timezone"
265
- }),
266
- autocomplete: { type: "list", filter: "contains" },
267
- name: "timezone",
268
- value: values.timezone || void 0,
269
- textValue: values.timezone ? values.timezone.replace(/&/, " ") : void 0,
270
- onChange: (timezone) => {
271
- setFieldValue("timezone", timezone);
272
- },
273
- onTextValueChange: (timezone) => {
274
- setFieldValue("timezone", timezone);
275
- },
276
- onClear: () => {
277
- setFieldValue("timezone", "");
278
- },
279
- error: errors.timezone,
280
- required: true,
281
- children: timezoneList.map((timezone) => /* @__PURE__ */ jsx(ComboboxOption, { value: timezone.value, children: timezone.value.replace(/&/, " ") }, timezone.value))
282
- }
283
- );
257
+ return /* @__PURE__ */ jsxs(Field.Root, { name: "timezone", error: errors.timezone, required: true, children: [
258
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
259
+ id: "content-releases.modal.form.input.label.timezone",
260
+ defaultMessage: "Timezone"
261
+ }) }),
262
+ /* @__PURE__ */ jsx(
263
+ Combobox,
264
+ {
265
+ autocomplete: { type: "list", filter: "contains" },
266
+ value: values.timezone || void 0,
267
+ textValue: values.timezone ? values.timezone.replace(/&/, " ") : void 0,
268
+ onChange: (timezone) => {
269
+ setFieldValue("timezone", timezone);
270
+ },
271
+ onTextValueChange: (timezone) => {
272
+ setFieldValue("timezone", timezone);
273
+ },
274
+ onClear: () => {
275
+ setFieldValue("timezone", "");
276
+ },
277
+ children: timezoneList.map((timezone) => /* @__PURE__ */ jsx(ComboboxOption, { value: timezone.value, children: timezone.value.replace(/&/, " ") }, timezone.value))
278
+ }
279
+ ),
280
+ /* @__PURE__ */ jsx(Field.Error, {})
281
+ ] });
284
282
  };
285
283
  const useTypedDispatch = useDispatch;
284
+ const isBaseQueryError = (error) => {
285
+ return typeof error !== "undefined" && error.name !== void 0;
286
+ };
286
287
  const LinkCard = styled(Link)`
287
288
  display: block;
288
289
  `;
289
- const CapitalizeRelativeTime = styled(RelativeTime)`
290
- text-transform: capitalize;
290
+ const RelativeTime = styled(RelativeTime$1)`
291
+ display: inline-block;
292
+ &::first-letter {
293
+ text-transform: uppercase;
294
+ }
291
295
  `;
292
296
  const getBadgeProps = (status) => {
293
297
  let color;
@@ -332,11 +336,11 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
332
336
  target: sectionTitle
333
337
  }
334
338
  ),
335
- icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "10rem" })
339
+ icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "16rem" })
336
340
  }
337
341
  );
338
342
  }
339
- 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(
343
+ return /* @__PURE__ */ jsx(Grid.Root, { gap: 4, children: releases.map(({ id, name, scheduledAt, status }) => /* @__PURE__ */ jsx(Grid.Item, { col: 3, s: 6, xs: 12, children: /* @__PURE__ */ jsx(LinkCard, { tag: NavLink, to: `${id}`, isExternal: false, children: /* @__PURE__ */ jsxs(
340
344
  Flex,
341
345
  {
342
346
  direction: "column",
@@ -351,8 +355,8 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
351
355
  gap: 4,
352
356
  children: [
353
357
  /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "start", gap: 1, children: [
354
- /* @__PURE__ */ jsx(Typography, { as: "h3", variant: "delta", fontWeight: "bold", children: name }),
355
- /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: scheduledAt ? /* @__PURE__ */ jsx(CapitalizeRelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
358
+ /* @__PURE__ */ jsx(Typography, { textColor: "neutral800", tag: "h3", variant: "delta", fontWeight: "bold", children: name }),
359
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: scheduledAt ? /* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
356
360
  id: "content-releases.pages.Releases.not-scheduled",
357
361
  defaultMessage: "Not scheduled"
358
362
  }) })
@@ -372,14 +376,13 @@ const StyledAlert = styled(Alert)`
372
376
  `;
373
377
  const INITIAL_FORM_VALUES = {
374
378
  name: "",
375
- date: null,
379
+ date: void 0,
376
380
  time: "",
377
381
  isScheduled: true,
378
382
  scheduledAt: null,
379
383
  timezone: null
380
384
  };
381
385
  const ReleasesPage = () => {
382
- const tabRef = React.useRef(null);
383
386
  const location = useLocation();
384
387
  const [releaseModalShown, setReleaseModalShown] = React.useState(false);
385
388
  const { toggleNotification } = useNotification();
@@ -397,7 +400,6 @@ const ReleasesPage = () => {
397
400
  } = useRBAC(PERMISSIONS);
398
401
  const { isLoading, isSuccess, isError } = response;
399
402
  const activeTab = response?.currentData?.meta?.activeTab || "pending";
400
- const activeTabIndex = ["pending", "done"].indexOf(activeTab);
401
403
  React.useEffect(() => {
402
404
  if (location?.state?.errors) {
403
405
  toggleNotification({
@@ -414,11 +416,6 @@ const ReleasesPage = () => {
414
416
  navigate("", { replace: true, state: null });
415
417
  }
416
418
  }, [formatMessage, location?.state?.errors, navigate, toggleNotification]);
417
- React.useEffect(() => {
418
- if (tabRef.current) {
419
- tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
420
- }
421
- }, [activeTabIndex]);
422
419
  const toggleAddReleaseModal = () => {
423
420
  setReleaseModalShown((prev) => !prev);
424
421
  };
@@ -427,14 +424,14 @@ const ReleasesPage = () => {
427
424
  }
428
425
  const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
429
426
  const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
430
- const handleTabChange = (index) => {
427
+ const handleTabChange = (tabValue) => {
431
428
  setQuery({
432
429
  ...query,
433
430
  page: 1,
434
431
  pageSize: response?.currentData?.meta?.pagination?.pageSize || 16,
435
432
  filters: {
436
433
  releasedAt: {
437
- $notNull: index === 0 ? false : true
434
+ $notNull: tabValue !== "pending"
438
435
  }
439
436
  }
440
437
  });
@@ -455,7 +452,7 @@ const ReleasesPage = () => {
455
452
  });
456
453
  trackUsage("didCreateRelease");
457
454
  navigate(response2.data.data.id.toString());
458
- } else if (isAxiosError(response2.error)) {
455
+ } else if (isFetchError(response2.error)) {
459
456
  toggleNotification({
460
457
  type: "danger",
461
458
  message: formatAPIError(response2.error)
@@ -469,7 +466,7 @@ const ReleasesPage = () => {
469
466
  };
470
467
  return /* @__PURE__ */ jsxs(Main, { "aria-busy": isLoading, children: [
471
468
  /* @__PURE__ */ jsx(
472
- HeaderLayout,
469
+ Layouts.Header,
473
470
  {
474
471
  title: formatMessage({
475
472
  id: "content-releases.pages.Releases.title",
@@ -493,7 +490,7 @@ const ReleasesPage = () => {
493
490
  ) : null
494
491
  }
495
492
  ),
496
- /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsxs(Fragment, { children: [
493
+ /* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsxs(Fragment, { children: [
497
494
  hasReachedMaximumPendingReleases && /* @__PURE__ */ jsx(
498
495
  StyledAlert,
499
496
  {
@@ -518,21 +515,17 @@ const ReleasesPage = () => {
518
515
  })
519
516
  }
520
517
  ),
521
- /* @__PURE__ */ jsxs(
522
- TabGroup,
523
- {
524
- label: formatMessage({
525
- id: "content-releases.pages.Releases.tab-group.label",
526
- defaultMessage: "Releases list"
527
- }),
528
- variant: "simple",
529
- initialSelectedTabIndex: activeTabIndex,
530
- onTabChange: handleTabChange,
531
- ref: tabRef,
532
- children: [
533
- /* @__PURE__ */ jsxs(Box, { paddingBottom: 8, children: [
534
- /* @__PURE__ */ jsxs(Tabs, { children: [
535
- /* @__PURE__ */ jsx(Tab, { children: formatMessage(
518
+ /* @__PURE__ */ jsxs(Tabs.Root, { variant: "simple", onValueChange: handleTabChange, value: activeTab, children: [
519
+ /* @__PURE__ */ jsxs(Box, { paddingBottom: 8, children: [
520
+ /* @__PURE__ */ jsxs(
521
+ Tabs.List,
522
+ {
523
+ "aria-label": formatMessage({
524
+ id: "content-releases.pages.Releases.tab-group.label",
525
+ defaultMessage: "Releases list"
526
+ }),
527
+ children: [
528
+ /* @__PURE__ */ jsx(Tabs.Trigger, { value: "pending", children: formatMessage(
536
529
  {
537
530
  id: "content-releases.pages.Releases.tab.pending",
538
531
  defaultMessage: "Pending ({count})"
@@ -541,34 +534,32 @@ const ReleasesPage = () => {
541
534
  count: totalPendingReleases
542
535
  }
543
536
  ) }),
544
- /* @__PURE__ */ jsx(Tab, { children: formatMessage({
537
+ /* @__PURE__ */ jsx(Tabs.Trigger, { value: "done", children: formatMessage({
545
538
  id: "content-releases.pages.Releases.tab.done",
546
539
  defaultMessage: "Done"
547
540
  }) })
548
- ] }),
549
- /* @__PURE__ */ jsx(Divider, {})
550
- ] }),
551
- /* @__PURE__ */ jsxs(TabPanels, { children: [
552
- /* @__PURE__ */ jsx(TabPanel, { children: /* @__PURE__ */ jsx(
553
- ReleasesGrid,
554
- {
555
- sectionTitle: "pending",
556
- releases: response?.currentData?.data,
557
- isError
558
- }
559
- ) }),
560
- /* @__PURE__ */ jsx(TabPanel, { children: /* @__PURE__ */ jsx(
561
- ReleasesGrid,
562
- {
563
- sectionTitle: "done",
564
- releases: response?.currentData?.data,
565
- isError
566
- }
567
- ) })
568
- ] })
569
- ]
570
- }
571
- ),
541
+ ]
542
+ }
543
+ ),
544
+ /* @__PURE__ */ jsx(Divider, {})
545
+ ] }),
546
+ /* @__PURE__ */ jsx(Tabs.Content, { value: "pending", children: /* @__PURE__ */ jsx(
547
+ ReleasesGrid,
548
+ {
549
+ sectionTitle: "pending",
550
+ releases: response?.currentData?.data,
551
+ isError
552
+ }
553
+ ) }),
554
+ /* @__PURE__ */ jsx(Tabs.Content, { value: "done", children: /* @__PURE__ */ jsx(
555
+ ReleasesGrid,
556
+ {
557
+ sectionTitle: "done",
558
+ releases: response?.currentData?.data,
559
+ isError
560
+ }
561
+ ) })
562
+ ] }),
572
563
  /* @__PURE__ */ jsxs(
573
564
  Pagination.Root,
574
565
  {
@@ -581,9 +572,10 @@ const ReleasesPage = () => {
581
572
  }
582
573
  )
583
574
  ] }) }),
584
- releaseModalShown && /* @__PURE__ */ jsx(
575
+ /* @__PURE__ */ jsx(
585
576
  ReleaseModal,
586
577
  {
578
+ open: releaseModalShown,
587
579
  handleClose: toggleAddReleaseModal,
588
580
  handleSubmit: handleAddRelease,
589
581
  isLoading: isSubmittingForm,
@@ -607,7 +599,7 @@ const StyledMenuItem = styled(Menu.Item)`
607
599
  }
608
600
 
609
601
  &:hover {
610
- background: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}100`]};
602
+ background: ${({ theme, $variant = "neutral" }) => theme.colors[`${$variant}100`]};
611
603
  }
612
604
  `;
613
605
  const PencilIcon = styled(Pencil)`
@@ -642,18 +634,19 @@ const EntryValidationText = ({ action, schema, entry }) => {
642
634
  if (Object.keys(errors).length > 0) {
643
635
  const validationErrorsMessages = Object.entries(errors).map(
644
636
  ([key, value]) => formatMessage(
637
+ // @ts-expect-error – TODO: fix this will better checks
645
638
  { id: `${value.id}.withField`, defaultMessage: value.defaultMessage },
646
639
  { field: key }
647
640
  )
648
641
  ).join(" ");
649
642
  return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
650
- /* @__PURE__ */ jsx(Icon, { color: "danger600", as: CrossCircle }),
643
+ /* @__PURE__ */ jsx(CrossCircle, { fill: "danger600" }),
651
644
  /* @__PURE__ */ jsx(Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsx(TypographyMaxWidth, { textColor: "danger600", variant: "omega", fontWeight: "semiBold", ellipsis: true, children: validationErrorsMessages }) })
652
645
  ] });
653
646
  }
654
647
  if (action == "publish") {
655
648
  return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
656
- /* @__PURE__ */ jsx(Icon, { color: "success600", as: CheckCircle }),
649
+ /* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
657
650
  entry.publishedAt ? /* @__PURE__ */ jsx(Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
658
651
  id: "content-releases.pages.ReleaseDetails.entry-validation.already-published",
659
652
  defaultMessage: "Already published"
@@ -664,7 +657,7 @@ const EntryValidationText = ({ action, schema, entry }) => {
664
657
  ] });
665
658
  }
666
659
  return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
667
- /* @__PURE__ */ jsx(Icon, { color: "success600", as: CheckCircle }),
660
+ /* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
668
661
  !entry.publishedAt ? /* @__PURE__ */ jsx(Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
669
662
  id: "content-releases.pages.ReleaseDetails.entry-validation.already-unpublished",
670
663
  defaultMessage: "Already unpublished"
@@ -684,7 +677,6 @@ const ReleaseDetailsLayout = ({
684
677
  const {
685
678
  data,
686
679
  isLoading: isLoadingDetails,
687
- isError,
688
680
  error
689
681
  } = useGetReleaseQuery(
690
682
  { id: releaseId },
@@ -716,7 +708,7 @@ const ReleaseDetailsLayout = ({
716
708
  totalPublishedEntries,
717
709
  totalUnpublishedEntries
718
710
  });
719
- } else if (isAxiosError(response.error)) {
711
+ } else if (isFetchError(response.error)) {
720
712
  toggleNotification({
721
713
  type: "danger",
722
714
  message: formatAPIError(response.error)
@@ -729,7 +721,12 @@ const ReleaseDetailsLayout = ({
729
721
  }
730
722
  };
731
723
  const handleRefresh = () => {
732
- dispatch(releaseApi.util.invalidateTags([{ type: "ReleaseAction", id: "LIST" }]));
724
+ dispatch(
725
+ releaseApi.util.invalidateTags([
726
+ { type: "ReleaseAction", id: "LIST" },
727
+ { type: "Release", id: releaseId }
728
+ ])
729
+ );
733
730
  };
734
731
  const getCreatedByUser = () => {
735
732
  if (!release?.createdBy) {
@@ -746,7 +743,7 @@ const ReleaseDetailsLayout = ({
746
743
  if (isLoadingDetails) {
747
744
  return /* @__PURE__ */ jsx(Page.Loading, {});
748
745
  }
749
- if (isError || !release) {
746
+ if (isBaseQueryError(error) && "code" in error || !release) {
750
747
  return /* @__PURE__ */ jsx(
751
748
  Navigate,
752
749
  {
@@ -754,6 +751,7 @@ const ReleaseDetailsLayout = ({
754
751
  state: {
755
752
  errors: [
756
753
  {
754
+ // @ts-expect-error – TODO: fix this weird error flow
757
755
  code: error?.code
758
756
  }
759
757
  ]
@@ -793,7 +791,7 @@ const ReleaseDetailsLayout = ({
793
791
  ) : "";
794
792
  return /* @__PURE__ */ jsxs(Main, { "aria-busy": isLoadingDetails, children: [
795
793
  /* @__PURE__ */ jsx(
796
- HeaderLayout,
794
+ Layouts.Header,
797
795
  {
798
796
  title: release.name,
799
797
  subtitle: /* @__PURE__ */ jsxs(Flex, { gap: 2, lineHeight: 6, children: [
@@ -806,18 +804,17 @@ const ReleaseDetailsLayout = ({
806
804
  /* @__PURE__ */ jsx(
807
805
  Menu.Trigger,
808
806
  {
809
- as: IconButton,
810
807
  paddingLeft: 2,
811
808
  paddingRight: 2,
812
809
  "aria-label": formatMessage({
813
810
  id: "content-releases.header.actions.open-release-actions",
814
811
  defaultMessage: "Release edit and delete menu"
815
812
  }),
816
- icon: /* @__PURE__ */ jsx(More, {}),
817
- variant: "tertiary"
813
+ variant: "tertiary",
814
+ children: /* @__PURE__ */ jsx(More, {})
818
815
  }
819
816
  ),
820
- /* @__PURE__ */ jsxs(Menu.Content, { top: 1, popoverPlacement: "bottom-end", children: [
817
+ /* @__PURE__ */ jsxs(Menu.Content, { top: 1, popoverPlacement: "bottom-end", maxHeight: void 0, children: [
821
818
  /* @__PURE__ */ jsxs(
822
819
  Flex,
823
820
  {
@@ -839,7 +836,7 @@ const ReleaseDetailsLayout = ({
839
836
  {
840
837
  disabled: !canDelete,
841
838
  onSelect: toggleWarningSubmit,
842
- variant: "danger",
839
+ $variant: "danger",
843
840
  children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
844
841
  /* @__PURE__ */ jsx(TrashIcon, {}),
845
842
  /* @__PURE__ */ jsx(Typography, { ellipsis: true, textColor: "danger600", children: formatMessage({
@@ -866,7 +863,7 @@ const ReleaseDetailsLayout = ({
866
863
  defaultMessage: "Created"
867
864
  }) }),
868
865
  /* @__PURE__ */ jsxs(Typography, { variant: "pi", color: "neutral300", children: [
869
- /* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(release.createdAt) }),
866
+ /* @__PURE__ */ jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
870
867
  formatMessage(
871
868
  {
872
869
  id: "content-releases.header.actions.created.description",
@@ -905,6 +902,7 @@ const ReleaseDetailsLayout = ({
905
902
  ] });
906
903
  };
907
904
  const GROUP_BY_OPTIONS = ["contentType", "locale", "action"];
905
+ const GROUP_BY_OPTIONS_NO_LOCALE = ["contentType", "action"];
908
906
  const getGroupByOptionLabel = (value) => {
909
907
  if (value === "locale") {
910
908
  return {
@@ -931,12 +929,25 @@ const ReleaseDetailsBody = ({ releaseId }) => {
931
929
  const {
932
930
  data: releaseData,
933
931
  isLoading: isReleaseLoading,
934
- isError: isReleaseError,
935
932
  error: releaseError
936
933
  } = useGetReleaseQuery({ id: releaseId });
937
934
  const {
938
935
  allowedActions: { canUpdate }
939
936
  } = useRBAC(PERMISSIONS);
937
+ const runHookWaterfall = useStrapiApp("ReleaseDetailsPage", (state) => state.runHookWaterfall);
938
+ const { hasI18nEnabled } = runHookWaterfall(
939
+ "ContentReleases/pages/ReleaseDetails/add-locale-in-releases",
940
+ {
941
+ displayedHeaders: {
942
+ label: formatMessage({
943
+ id: "content-releases.page.ReleaseDetails.table.header.label.locale",
944
+ defaultMessage: "locale"
945
+ }),
946
+ name: "locale"
947
+ },
948
+ hasI18nEnabled: false
949
+ }
950
+ );
940
951
  const release = releaseData?.data;
941
952
  const selectedGroupBy = query?.groupBy || "contentType";
942
953
  const {
@@ -965,7 +976,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
965
976
  // We are passing the action path to found the position in the cache of the action for optimistic updates
966
977
  });
967
978
  if ("error" in response) {
968
- if (isAxiosError(response.error)) {
979
+ if (isFetchError(response.error)) {
969
980
  toggleNotification({
970
981
  type: "danger",
971
982
  message: formatAPIError(response.error)
@@ -985,14 +996,14 @@ const ReleaseDetailsBody = ({ releaseId }) => {
985
996
  const releaseMeta = data?.meta;
986
997
  const contentTypes = releaseMeta?.contentTypes || {};
987
998
  const components = releaseMeta?.components || {};
988
- if (isReleaseError || !release) {
999
+ if (isBaseQueryError(releaseError) || !release) {
989
1000
  const errorsArray = [];
990
- if (releaseError) {
1001
+ if (releaseError && "code" in releaseError) {
991
1002
  errorsArray.push({
992
1003
  code: releaseError.code
993
1004
  });
994
1005
  }
995
- if (releaseActionsError) {
1006
+ if (releaseActionsError && "code" in releaseActionsError) {
996
1007
  errorsArray.push({
997
1008
  code: releaseActionsError.code
998
1009
  });
@@ -1011,13 +1022,13 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1011
1022
  return /* @__PURE__ */ jsx(Page.Error, {});
1012
1023
  }
1013
1024
  if (Object.keys(releaseActions).length === 0) {
1014
- return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsx(
1025
+ return /* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsx(
1015
1026
  EmptyStateLayout,
1016
1027
  {
1017
1028
  action: /* @__PURE__ */ jsx(
1018
1029
  LinkButton,
1019
1030
  {
1020
- as: Link$1,
1031
+ tag: Link$1,
1021
1032
  to: {
1022
1033
  pathname: "/content-manager"
1023
1034
  },
@@ -1029,7 +1040,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1029
1040
  })
1030
1041
  }
1031
1042
  ),
1032
- icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "10rem" }),
1043
+ icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "16rem" }),
1033
1044
  content: formatMessage({
1034
1045
  id: "content-releases.pages.Details.tab.emptyEntries",
1035
1046
  defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
@@ -1037,7 +1048,12 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1037
1048
  }
1038
1049
  ) });
1039
1050
  }
1051
+ const groupByLabel = formatMessage({
1052
+ id: "content-releases.pages.ReleaseDetails.groupBy.aria-label",
1053
+ defaultMessage: "Group by"
1054
+ });
1040
1055
  const headers = [
1056
+ // ...displayedHeaders,
1041
1057
  {
1042
1058
  label: formatMessage({
1043
1059
  id: "content-releases.page.ReleaseDetails.table.header.label.name",
@@ -1045,13 +1061,6 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1045
1061
  }),
1046
1062
  name: "name"
1047
1063
  },
1048
- {
1049
- label: formatMessage({
1050
- id: "content-releases.page.ReleaseDetails.table.header.label.locale",
1051
- defaultMessage: "locale"
1052
- }),
1053
- name: "locale"
1054
- },
1055
1064
  {
1056
1065
  label: formatMessage({
1057
1066
  id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
@@ -1076,14 +1085,13 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1076
1085
  }
1077
1086
  ] : []
1078
1087
  ];
1079
- return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsxs(Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
1088
+ const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;
1089
+ return /* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsxs(Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
1080
1090
  /* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(
1081
1091
  SingleSelect,
1082
1092
  {
1083
- "aria-label": formatMessage({
1084
- id: "content-releases.pages.ReleaseDetails.groupBy.aria-label",
1085
- defaultMessage: "Group by"
1086
- }),
1093
+ placeholder: groupByLabel,
1094
+ "aria-label": groupByLabel,
1087
1095
  customizeContent: (value) => formatMessage(
1088
1096
  {
1089
1097
  id: `content-releases.pages.ReleaseDetails.groupBy.label`,
@@ -1095,7 +1103,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1095
1103
  ),
1096
1104
  value: formatMessage(getGroupByOptionLabel(selectedGroupBy)),
1097
1105
  onChange: (value) => setQuery({ groupBy: value }),
1098
- children: GROUP_BY_OPTIONS.map((option) => /* @__PURE__ */ jsx(SingleSelectOption, { value: option, children: formatMessage(getGroupByOptionLabel(option)) }, option))
1106
+ children: options.map((option) => /* @__PURE__ */ jsx(SingleSelectOption, { value: option, children: formatMessage(getGroupByOptionLabel(option)) }, option))
1099
1107
  }
1100
1108
  ) }),
1101
1109
  Object.keys(releaseActions).map((key) => /* @__PURE__ */ jsxs(Flex, { gap: 4, direction: "column", alignItems: "stretch", children: [
@@ -1115,7 +1123,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1115
1123
  /* @__PURE__ */ jsx(Table.Body, { children: releaseActions[key].map(
1116
1124
  ({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
1117
1125
  /* @__PURE__ */ jsx(Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
1118
- /* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
1126
+ hasI18nEnabled && /* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
1119
1127
  /* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: contentType.displayName || "" }) }),
1120
1128
  /* @__PURE__ */ jsx(Td, { width: "20%", children: release.releasedAt ? /* @__PURE__ */ jsx(Typography, { children: formatMessage(
1121
1129
  {
@@ -1223,7 +1231,7 @@ const ReleaseDetailsPage = () => {
1223
1231
  const title = releaseData?.name || "";
1224
1232
  const timezone = releaseData?.timezone ?? null;
1225
1233
  const scheduledAt = releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;
1226
- const date = scheduledAt ? new Date(format(scheduledAt, "yyyy-MM-dd")) : null;
1234
+ const date = scheduledAt ? format(scheduledAt, "yyyy-MM-dd") : void 0;
1227
1235
  const time = scheduledAt ? format(scheduledAt, "HH:mm") : "";
1228
1236
  const handleEditRelease = async (values) => {
1229
1237
  const response = await updateRelease({
@@ -1240,7 +1248,8 @@ const ReleaseDetailsPage = () => {
1240
1248
  defaultMessage: "Release updated."
1241
1249
  })
1242
1250
  });
1243
- } else if (isAxiosError(response.error)) {
1251
+ toggleEditReleaseModal();
1252
+ } else if (isFetchError(response.error)) {
1244
1253
  toggleNotification({
1245
1254
  type: "danger",
1246
1255
  message: formatAPIError(response.error)
@@ -1251,7 +1260,6 @@ const ReleaseDetailsPage = () => {
1251
1260
  message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
1252
1261
  });
1253
1262
  }
1254
- toggleEditReleaseModal();
1255
1263
  };
1256
1264
  const handleDeleteRelease = async () => {
1257
1265
  const response = await deleteRelease({
@@ -1259,7 +1267,7 @@ const ReleaseDetailsPage = () => {
1259
1267
  });
1260
1268
  if ("data" in response) {
1261
1269
  navigate("..");
1262
- } else if (isAxiosError(response.error)) {
1270
+ } else if (isFetchError(response.error)) {
1263
1271
  toggleNotification({
1264
1272
  type: "danger",
1265
1273
  message: formatAPIError(response.error)
@@ -1278,9 +1286,10 @@ const ReleaseDetailsPage = () => {
1278
1286
  toggleWarningSubmit,
1279
1287
  children: [
1280
1288
  /* @__PURE__ */ jsx(ReleaseDetailsBody, { releaseId }),
1281
- releaseModalShown && /* @__PURE__ */ jsx(
1289
+ /* @__PURE__ */ jsx(
1282
1290
  ReleaseModal,
1283
1291
  {
1292
+ open: releaseModalShown,
1284
1293
  handleClose: toggleEditReleaseModal,
1285
1294
  handleSubmit: handleEditRelease,
1286
1295
  isLoading: isLoadingDetails || isSubmittingForm,
@@ -1294,18 +1303,10 @@ const ReleaseDetailsPage = () => {
1294
1303
  }
1295
1304
  }
1296
1305
  ),
1297
- /* @__PURE__ */ jsx(
1298
- ConfirmDialog,
1299
- {
1300
- isOpen: showWarningSubmit,
1301
- onClose: toggleWarningSubmit,
1302
- onConfirm: handleDeleteRelease,
1303
- children: formatMessage({
1304
- id: "content-releases.dialog.confirmation-message",
1305
- defaultMessage: "Are you sure you want to delete this release?"
1306
- })
1307
- }
1308
- )
1306
+ /* @__PURE__ */ jsx(Dialog.Root, { open: showWarningSubmit, onOpenChange: toggleWarningSubmit, children: /* @__PURE__ */ jsx(ConfirmDialog, { onConfirm: handleDeleteRelease, children: formatMessage({
1307
+ id: "content-releases.dialog.confirmation-message",
1308
+ defaultMessage: "Are you sure you want to delete this release?"
1309
+ }) }) })
1309
1310
  ]
1310
1311
  }
1311
1312
  );
@@ -1319,4 +1320,4 @@ const App = () => {
1319
1320
  export {
1320
1321
  App
1321
1322
  };
1322
- //# sourceMappingURL=App-IkyOz9wq.mjs.map
1323
+ //# sourceMappingURL=App-B2R2exNT.mjs.map