@strapi/content-releases 5.0.0-beta.1 → 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 (65) hide show
  1. package/dist/_chunks/{App-X01LBg5V.mjs → App-B2R2exNT.mjs} +245 -251
  2. package/dist/_chunks/App-B2R2exNT.mjs.map +1 -0
  3. package/dist/_chunks/{App-1LckaIGY.js → App-CEwOQkKT.js} +253 -260
  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-cYWov2wa.js → index-BrWv-zV4.js} +167 -192
  14. package/dist/_chunks/index-BrWv-zV4.js.map +1 -0
  15. package/dist/_chunks/{index-OD9AlD-6.mjs → index-DbmynICx.mjs} +168 -191
  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 +44 -308
  25. package/dist/admin/src/utils/api.d.ts +6 -0
  26. package/dist/server/index.js +93 -32
  27. package/dist/server/index.js.map +1 -1
  28. package/dist/server/index.mjs +93 -32
  29. package/dist/server/index.mjs.map +1 -1
  30. package/dist/server/src/bootstrap.d.ts +1 -1
  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/destroy.d.ts +1 -1
  38. package/dist/server/src/destroy.d.ts.map +1 -1
  39. package/dist/server/src/index.d.ts +9 -8
  40. package/dist/server/src/index.d.ts.map +1 -1
  41. package/dist/server/src/migrations/index.d.ts.map +1 -1
  42. package/dist/server/src/register.d.ts +1 -1
  43. package/dist/server/src/register.d.ts.map +1 -1
  44. package/dist/server/src/routes/release.d.ts.map +1 -1
  45. package/dist/server/src/services/index.d.ts +4 -4
  46. package/dist/server/src/services/release.d.ts +3 -3
  47. package/dist/server/src/services/release.d.ts.map +1 -1
  48. package/dist/server/src/services/scheduling.d.ts +1 -1
  49. package/dist/server/src/services/scheduling.d.ts.map +1 -1
  50. package/dist/server/src/services/validation.d.ts +1 -1
  51. package/dist/server/src/services/validation.d.ts.map +1 -1
  52. package/dist/server/src/utils/index.d.ts +9 -9
  53. package/dist/server/src/utils/index.d.ts.map +1 -1
  54. package/dist/shared/contracts/releases.d.ts +17 -1
  55. package/dist/shared/contracts/releases.d.ts.map +1 -1
  56. package/package.json +18 -18
  57. package/dist/_chunks/App-1LckaIGY.js.map +0 -1
  58. package/dist/_chunks/App-X01LBg5V.mjs.map +0 -1
  59. package/dist/_chunks/PurchaseContentReleases-Clm0iACO.mjs.map +0 -1
  60. package/dist/_chunks/PurchaseContentReleases-YhAPgpG9.js.map +0 -1
  61. package/dist/_chunks/en-RdapH-9X.mjs.map +0 -1
  62. package/dist/_chunks/en-faJDuv3q.js.map +0 -1
  63. package/dist/_chunks/index-OD9AlD-6.mjs.map +0 -1
  64. package/dist/_chunks/index-cYWov2wa.js.map +0 -1
  65. 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-OD9AlD-6.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)
@@ -751,7 +743,7 @@ const ReleaseDetailsLayout = ({
751
743
  if (isLoadingDetails) {
752
744
  return /* @__PURE__ */ jsx(Page.Loading, {});
753
745
  }
754
- if (isError || !release) {
746
+ if (isBaseQueryError(error) && "code" in error || !release) {
755
747
  return /* @__PURE__ */ jsx(
756
748
  Navigate,
757
749
  {
@@ -759,6 +751,7 @@ const ReleaseDetailsLayout = ({
759
751
  state: {
760
752
  errors: [
761
753
  {
754
+ // @ts-expect-error – TODO: fix this weird error flow
762
755
  code: error?.code
763
756
  }
764
757
  ]
@@ -798,7 +791,7 @@ const ReleaseDetailsLayout = ({
798
791
  ) : "";
799
792
  return /* @__PURE__ */ jsxs(Main, { "aria-busy": isLoadingDetails, children: [
800
793
  /* @__PURE__ */ jsx(
801
- HeaderLayout,
794
+ Layouts.Header,
802
795
  {
803
796
  title: release.name,
804
797
  subtitle: /* @__PURE__ */ jsxs(Flex, { gap: 2, lineHeight: 6, children: [
@@ -811,18 +804,17 @@ const ReleaseDetailsLayout = ({
811
804
  /* @__PURE__ */ jsx(
812
805
  Menu.Trigger,
813
806
  {
814
- as: IconButton,
815
807
  paddingLeft: 2,
816
808
  paddingRight: 2,
817
809
  "aria-label": formatMessage({
818
810
  id: "content-releases.header.actions.open-release-actions",
819
811
  defaultMessage: "Release edit and delete menu"
820
812
  }),
821
- icon: /* @__PURE__ */ jsx(More, {}),
822
- variant: "tertiary"
813
+ variant: "tertiary",
814
+ children: /* @__PURE__ */ jsx(More, {})
823
815
  }
824
816
  ),
825
- /* @__PURE__ */ jsxs(Menu.Content, { top: 1, popoverPlacement: "bottom-end", children: [
817
+ /* @__PURE__ */ jsxs(Menu.Content, { top: 1, popoverPlacement: "bottom-end", maxHeight: void 0, children: [
826
818
  /* @__PURE__ */ jsxs(
827
819
  Flex,
828
820
  {
@@ -844,7 +836,7 @@ const ReleaseDetailsLayout = ({
844
836
  {
845
837
  disabled: !canDelete,
846
838
  onSelect: toggleWarningSubmit,
847
- variant: "danger",
839
+ $variant: "danger",
848
840
  children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
849
841
  /* @__PURE__ */ jsx(TrashIcon, {}),
850
842
  /* @__PURE__ */ jsx(Typography, { ellipsis: true, textColor: "danger600", children: formatMessage({
@@ -871,7 +863,7 @@ const ReleaseDetailsLayout = ({
871
863
  defaultMessage: "Created"
872
864
  }) }),
873
865
  /* @__PURE__ */ jsxs(Typography, { variant: "pi", color: "neutral300", children: [
874
- /* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(release.createdAt) }),
866
+ /* @__PURE__ */ jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
875
867
  formatMessage(
876
868
  {
877
869
  id: "content-releases.header.actions.created.description",
@@ -910,6 +902,7 @@ const ReleaseDetailsLayout = ({
910
902
  ] });
911
903
  };
912
904
  const GROUP_BY_OPTIONS = ["contentType", "locale", "action"];
905
+ const GROUP_BY_OPTIONS_NO_LOCALE = ["contentType", "action"];
913
906
  const getGroupByOptionLabel = (value) => {
914
907
  if (value === "locale") {
915
908
  return {
@@ -936,12 +929,25 @@ const ReleaseDetailsBody = ({ releaseId }) => {
936
929
  const {
937
930
  data: releaseData,
938
931
  isLoading: isReleaseLoading,
939
- isError: isReleaseError,
940
932
  error: releaseError
941
933
  } = useGetReleaseQuery({ id: releaseId });
942
934
  const {
943
935
  allowedActions: { canUpdate }
944
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
+ );
945
951
  const release = releaseData?.data;
946
952
  const selectedGroupBy = query?.groupBy || "contentType";
947
953
  const {
@@ -970,7 +976,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
970
976
  // We are passing the action path to found the position in the cache of the action for optimistic updates
971
977
  });
972
978
  if ("error" in response) {
973
- if (isAxiosError(response.error)) {
979
+ if (isFetchError(response.error)) {
974
980
  toggleNotification({
975
981
  type: "danger",
976
982
  message: formatAPIError(response.error)
@@ -990,14 +996,14 @@ const ReleaseDetailsBody = ({ releaseId }) => {
990
996
  const releaseMeta = data?.meta;
991
997
  const contentTypes = releaseMeta?.contentTypes || {};
992
998
  const components = releaseMeta?.components || {};
993
- if (isReleaseError || !release) {
999
+ if (isBaseQueryError(releaseError) || !release) {
994
1000
  const errorsArray = [];
995
- if (releaseError) {
1001
+ if (releaseError && "code" in releaseError) {
996
1002
  errorsArray.push({
997
1003
  code: releaseError.code
998
1004
  });
999
1005
  }
1000
- if (releaseActionsError) {
1006
+ if (releaseActionsError && "code" in releaseActionsError) {
1001
1007
  errorsArray.push({
1002
1008
  code: releaseActionsError.code
1003
1009
  });
@@ -1016,13 +1022,13 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1016
1022
  return /* @__PURE__ */ jsx(Page.Error, {});
1017
1023
  }
1018
1024
  if (Object.keys(releaseActions).length === 0) {
1019
- return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsx(
1025
+ return /* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsx(
1020
1026
  EmptyStateLayout,
1021
1027
  {
1022
1028
  action: /* @__PURE__ */ jsx(
1023
1029
  LinkButton,
1024
1030
  {
1025
- as: Link$1,
1031
+ tag: Link$1,
1026
1032
  to: {
1027
1033
  pathname: "/content-manager"
1028
1034
  },
@@ -1034,7 +1040,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1034
1040
  })
1035
1041
  }
1036
1042
  ),
1037
- icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "10rem" }),
1043
+ icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "16rem" }),
1038
1044
  content: formatMessage({
1039
1045
  id: "content-releases.pages.Details.tab.emptyEntries",
1040
1046
  defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
@@ -1047,6 +1053,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1047
1053
  defaultMessage: "Group by"
1048
1054
  });
1049
1055
  const headers = [
1056
+ // ...displayedHeaders,
1050
1057
  {
1051
1058
  label: formatMessage({
1052
1059
  id: "content-releases.page.ReleaseDetails.table.header.label.name",
@@ -1054,13 +1061,6 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1054
1061
  }),
1055
1062
  name: "name"
1056
1063
  },
1057
- {
1058
- label: formatMessage({
1059
- id: "content-releases.page.ReleaseDetails.table.header.label.locale",
1060
- defaultMessage: "locale"
1061
- }),
1062
- name: "locale"
1063
- },
1064
1064
  {
1065
1065
  label: formatMessage({
1066
1066
  id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
@@ -1085,7 +1085,8 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1085
1085
  }
1086
1086
  ] : []
1087
1087
  ];
1088
- 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: [
1089
1090
  /* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(
1090
1091
  SingleSelect,
1091
1092
  {
@@ -1102,7 +1103,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1102
1103
  ),
1103
1104
  value: formatMessage(getGroupByOptionLabel(selectedGroupBy)),
1104
1105
  onChange: (value) => setQuery({ groupBy: value }),
1105
- 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))
1106
1107
  }
1107
1108
  ) }),
1108
1109
  Object.keys(releaseActions).map((key) => /* @__PURE__ */ jsxs(Flex, { gap: 4, direction: "column", alignItems: "stretch", children: [
@@ -1122,7 +1123,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1122
1123
  /* @__PURE__ */ jsx(Table.Body, { children: releaseActions[key].map(
1123
1124
  ({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
1124
1125
  /* @__PURE__ */ jsx(Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
1125
- /* @__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 : "-"}` }) }),
1126
1127
  /* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: contentType.displayName || "" }) }),
1127
1128
  /* @__PURE__ */ jsx(Td, { width: "20%", children: release.releasedAt ? /* @__PURE__ */ jsx(Typography, { children: formatMessage(
1128
1129
  {
@@ -1230,7 +1231,7 @@ const ReleaseDetailsPage = () => {
1230
1231
  const title = releaseData?.name || "";
1231
1232
  const timezone = releaseData?.timezone ?? null;
1232
1233
  const scheduledAt = releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;
1233
- const date = scheduledAt ? new Date(format(scheduledAt, "yyyy-MM-dd")) : null;
1234
+ const date = scheduledAt ? format(scheduledAt, "yyyy-MM-dd") : void 0;
1234
1235
  const time = scheduledAt ? format(scheduledAt, "HH:mm") : "";
1235
1236
  const handleEditRelease = async (values) => {
1236
1237
  const response = await updateRelease({
@@ -1247,7 +1248,8 @@ const ReleaseDetailsPage = () => {
1247
1248
  defaultMessage: "Release updated."
1248
1249
  })
1249
1250
  });
1250
- } else if (isAxiosError(response.error)) {
1251
+ toggleEditReleaseModal();
1252
+ } else if (isFetchError(response.error)) {
1251
1253
  toggleNotification({
1252
1254
  type: "danger",
1253
1255
  message: formatAPIError(response.error)
@@ -1258,7 +1260,6 @@ const ReleaseDetailsPage = () => {
1258
1260
  message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
1259
1261
  });
1260
1262
  }
1261
- toggleEditReleaseModal();
1262
1263
  };
1263
1264
  const handleDeleteRelease = async () => {
1264
1265
  const response = await deleteRelease({
@@ -1266,7 +1267,7 @@ const ReleaseDetailsPage = () => {
1266
1267
  });
1267
1268
  if ("data" in response) {
1268
1269
  navigate("..");
1269
- } else if (isAxiosError(response.error)) {
1270
+ } else if (isFetchError(response.error)) {
1270
1271
  toggleNotification({
1271
1272
  type: "danger",
1272
1273
  message: formatAPIError(response.error)
@@ -1285,9 +1286,10 @@ const ReleaseDetailsPage = () => {
1285
1286
  toggleWarningSubmit,
1286
1287
  children: [
1287
1288
  /* @__PURE__ */ jsx(ReleaseDetailsBody, { releaseId }),
1288
- releaseModalShown && /* @__PURE__ */ jsx(
1289
+ /* @__PURE__ */ jsx(
1289
1290
  ReleaseModal,
1290
1291
  {
1292
+ open: releaseModalShown,
1291
1293
  handleClose: toggleEditReleaseModal,
1292
1294
  handleSubmit: handleEditRelease,
1293
1295
  isLoading: isLoadingDetails || isSubmittingForm,
@@ -1301,18 +1303,10 @@ const ReleaseDetailsPage = () => {
1301
1303
  }
1302
1304
  }
1303
1305
  ),
1304
- /* @__PURE__ */ jsx(
1305
- ConfirmDialog,
1306
- {
1307
- isOpen: showWarningSubmit,
1308
- onClose: toggleWarningSubmit,
1309
- onConfirm: handleDeleteRelease,
1310
- children: formatMessage({
1311
- id: "content-releases.dialog.confirmation-message",
1312
- defaultMessage: "Are you sure you want to delete this release?"
1313
- })
1314
- }
1315
- )
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
+ }) }) })
1316
1310
  ]
1317
1311
  }
1318
1312
  );
@@ -1326,4 +1320,4 @@ const App = () => {
1326
1320
  export {
1327
1321
  App
1328
1322
  };
1329
- //# sourceMappingURL=App-X01LBg5V.mjs.map
1323
+ //# sourceMappingURL=App-B2R2exNT.mjs.map