@strapi/content-releases 0.0.0-experimental.c3e9d4b26f9fd3d9eb530b5c11f9baa1d09b13ad → 0.0.0-experimental.c5235059f5636c4549ea2118c75c43b92e2615c8

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 (100) hide show
  1. package/LICENSE +17 -1
  2. package/dist/_chunks/{App-DUmziQ17.js → App-D2cVDqQK.js} +351 -345
  3. package/dist/_chunks/App-D2cVDqQK.js.map +1 -0
  4. package/dist/_chunks/{App-D_6Y9N2F.mjs → App-DbD5Ks8-.mjs} +354 -347
  5. package/dist/_chunks/App-DbD5Ks8-.mjs.map +1 -0
  6. package/dist/_chunks/ReleasesSettingsPage-BDinCYKz.mjs +178 -0
  7. package/dist/_chunks/ReleasesSettingsPage-BDinCYKz.mjs.map +1 -0
  8. package/dist/_chunks/ReleasesSettingsPage-CE_KqB_s.js +178 -0
  9. package/dist/_chunks/ReleasesSettingsPage-CE_KqB_s.js.map +1 -0
  10. package/dist/_chunks/{en-DtFJ5ViE.js → en-CmYoEnA7.js} +9 -2
  11. package/dist/_chunks/en-CmYoEnA7.js.map +1 -0
  12. package/dist/_chunks/{en-B9Ur3VsE.mjs → en-D0yVZFqf.mjs} +9 -2
  13. package/dist/_chunks/en-D0yVZFqf.mjs.map +1 -0
  14. package/dist/_chunks/{index-BomF0-yY.mjs → index-Bgq1X1sL.mjs} +767 -451
  15. package/dist/_chunks/index-Bgq1X1sL.mjs.map +1 -0
  16. package/dist/_chunks/{index-C5Hc767q.js → index-mECKW99O.js} +754 -438
  17. package/dist/_chunks/index-mECKW99O.js.map +1 -0
  18. package/dist/_chunks/schemas-63pFihNF.mjs +44 -0
  19. package/dist/_chunks/schemas-63pFihNF.mjs.map +1 -0
  20. package/dist/_chunks/schemas-z5zp-_Gd.js +62 -0
  21. package/dist/_chunks/schemas-z5zp-_Gd.js.map +1 -0
  22. package/dist/admin/index.js +1 -1
  23. package/dist/admin/index.mjs +2 -2
  24. package/dist/admin/src/components/ReleaseActionMenu.d.ts +2 -2
  25. package/dist/admin/src/components/{CMReleasesContainer.d.ts → ReleaseActionModal.d.ts} +3 -1
  26. package/dist/admin/src/components/ReleaseListCell.d.ts +28 -0
  27. package/dist/admin/src/components/ReleaseModal.d.ts +2 -1
  28. package/dist/admin/src/components/ReleasesPanel.d.ts +3 -0
  29. package/dist/admin/src/constants.d.ts +18 -0
  30. package/dist/admin/src/modules/hooks.d.ts +7 -0
  31. package/dist/admin/src/pages/ReleasesSettingsPage.d.ts +1 -0
  32. package/dist/admin/src/services/release.d.ts +43 -36
  33. package/dist/admin/src/utils/time.d.ts +9 -0
  34. package/dist/admin/src/validation/schemas.d.ts +6 -0
  35. package/dist/server/index.js +796 -623
  36. package/dist/server/index.js.map +1 -1
  37. package/dist/server/index.mjs +797 -624
  38. package/dist/server/index.mjs.map +1 -1
  39. package/dist/server/src/bootstrap.d.ts.map +1 -1
  40. package/dist/server/src/constants.d.ts +11 -2
  41. package/dist/server/src/constants.d.ts.map +1 -1
  42. package/dist/server/src/content-types/index.d.ts +3 -5
  43. package/dist/server/src/content-types/index.d.ts.map +1 -1
  44. package/dist/server/src/content-types/release-action/index.d.ts +3 -5
  45. package/dist/server/src/content-types/release-action/index.d.ts.map +1 -1
  46. package/dist/server/src/content-types/release-action/schema.d.ts +3 -5
  47. package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -1
  48. package/dist/server/src/controllers/index.d.ts +6 -1
  49. package/dist/server/src/controllers/index.d.ts.map +1 -1
  50. package/dist/server/src/controllers/release-action.d.ts.map +1 -1
  51. package/dist/server/src/controllers/release.d.ts +7 -1
  52. package/dist/server/src/controllers/release.d.ts.map +1 -1
  53. package/dist/server/src/controllers/settings.d.ts +11 -0
  54. package/dist/server/src/controllers/settings.d.ts.map +1 -0
  55. package/dist/server/src/controllers/validation/release-action.d.ts +7 -1
  56. package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -1
  57. package/dist/server/src/controllers/validation/release.d.ts +2 -0
  58. package/dist/server/src/controllers/validation/release.d.ts.map +1 -1
  59. package/dist/server/src/controllers/validation/settings.d.ts +3 -0
  60. package/dist/server/src/controllers/validation/settings.d.ts.map +1 -0
  61. package/dist/server/src/index.d.ts +66 -49
  62. package/dist/server/src/index.d.ts.map +1 -1
  63. package/dist/server/src/middlewares/documents.d.ts +6 -0
  64. package/dist/server/src/middlewares/documents.d.ts.map +1 -0
  65. package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts +9 -0
  66. package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts.map +1 -0
  67. package/dist/server/src/migrations/index.d.ts.map +1 -1
  68. package/dist/server/src/register.d.ts.map +1 -1
  69. package/dist/server/src/routes/index.d.ts +16 -0
  70. package/dist/server/src/routes/index.d.ts.map +1 -1
  71. package/dist/server/src/routes/release.d.ts.map +1 -1
  72. package/dist/server/src/routes/settings.d.ts +18 -0
  73. package/dist/server/src/routes/settings.d.ts.map +1 -0
  74. package/dist/server/src/services/index.d.ts +38 -38
  75. package/dist/server/src/services/index.d.ts.map +1 -1
  76. package/dist/server/src/services/release-action.d.ts +36 -0
  77. package/dist/server/src/services/release-action.d.ts.map +1 -0
  78. package/dist/server/src/services/release.d.ts +6 -41
  79. package/dist/server/src/services/release.d.ts.map +1 -1
  80. package/dist/server/src/services/settings.d.ts +13 -0
  81. package/dist/server/src/services/settings.d.ts.map +1 -0
  82. package/dist/server/src/services/validation.d.ts +1 -1
  83. package/dist/server/src/services/validation.d.ts.map +1 -1
  84. package/dist/server/src/utils/index.d.ts +29 -8
  85. package/dist/server/src/utils/index.d.ts.map +1 -1
  86. package/dist/shared/contracts/release-actions.d.ts +9 -10
  87. package/dist/shared/contracts/release-actions.d.ts.map +1 -1
  88. package/dist/shared/contracts/releases.d.ts +9 -7
  89. package/dist/shared/contracts/releases.d.ts.map +1 -1
  90. package/dist/shared/contracts/settings.d.ts +39 -0
  91. package/dist/shared/contracts/settings.d.ts.map +1 -0
  92. package/package.json +10 -9
  93. package/dist/_chunks/App-DUmziQ17.js.map +0 -1
  94. package/dist/_chunks/App-D_6Y9N2F.mjs.map +0 -1
  95. package/dist/_chunks/en-B9Ur3VsE.mjs.map +0 -1
  96. package/dist/_chunks/en-DtFJ5ViE.js.map +0 -1
  97. package/dist/_chunks/index-BomF0-yY.mjs.map +0 -1
  98. package/dist/_chunks/index-C5Hc767q.js.map +0 -1
  99. package/dist/shared/validation-schemas.d.ts +0 -2
  100. package/dist/shared/validation-schemas.d.ts.map +0 -1
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const strapiAdmin = require("@strapi/admin/strapi-admin");
5
5
  const reactRouterDom = require("react-router-dom");
6
- const index = require("./index-C5Hc767q.js");
6
+ const index = require("./index-mECKW99O.js");
7
7
  const React = require("react");
8
8
  const strapiAdmin$1 = require("@strapi/content-manager/strapi-admin");
9
9
  const designSystem = require("@strapi/design-system");
@@ -15,7 +15,7 @@ const reactIntl = require("react-intl");
15
15
  const styledComponents = require("styled-components");
16
16
  const dateFns = require("date-fns");
17
17
  const formik = require("formik");
18
- const yup = require("yup");
18
+ const schemas = require("./schemas-z5zp-_Gd.js");
19
19
  const reactRedux = require("react-redux");
20
20
  const ee = require("@strapi/admin/strapi-admin/ee");
21
21
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
@@ -39,7 +39,6 @@ function _interopNamespace(e) {
39
39
  }
40
40
  const React__namespace = /* @__PURE__ */ _interopNamespace(React);
41
41
  const format__default = /* @__PURE__ */ _interopDefault(format);
42
- const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
43
42
  const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
44
43
  const RelativeTime$1 = React__namespace.forwardRef(
45
44
  ({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {
@@ -70,28 +69,9 @@ const RelativeTime$1 = React__namespace.forwardRef(
70
69
  );
71
70
  }
72
71
  );
73
- const RELEASE_SCHEMA = yup__namespace.object().shape({
74
- name: yup__namespace.string().trim().required(),
75
- scheduledAt: yup__namespace.string().nullable(),
76
- isScheduled: yup__namespace.boolean().optional(),
77
- time: yup__namespace.string().when("isScheduled", {
78
- is: true,
79
- then: yup__namespace.string().trim().required(),
80
- otherwise: yup__namespace.string().nullable()
81
- }),
82
- timezone: yup__namespace.string().when("isScheduled", {
83
- is: true,
84
- then: yup__namespace.string().required().nullable(),
85
- otherwise: yup__namespace.string().nullable()
86
- }),
87
- date: yup__namespace.string().when("isScheduled", {
88
- is: true,
89
- then: yup__namespace.string().required().nullable(),
90
- otherwise: yup__namespace.string().nullable()
91
- })
92
- }).required().noUnknown();
93
72
  const ReleaseModal = ({
94
73
  handleClose,
74
+ open,
95
75
  handleSubmit,
96
76
  initialValues,
97
77
  isLoading = false
@@ -99,7 +79,7 @@ const ReleaseModal = ({
99
79
  const { formatMessage } = reactIntl.useIntl();
100
80
  const { pathname } = reactRouterDom.useLocation();
101
81
  const isCreatingRelease = pathname === `/plugins/${index.pluginId}`;
102
- const { timezoneList, systemTimezone = { value: "UTC+00:00-Africa/Abidjan " } } = getTimezones(
82
+ const { timezoneList, systemTimezone = { value: "UTC+00:00-Africa/Abidjan " } } = index.getTimezones(
103
83
  initialValues.scheduledAt ? new Date(initialValues.scheduledAt) : /* @__PURE__ */ new Date()
104
84
  );
105
85
  const getScheduledTimestamp = (values) => {
@@ -115,8 +95,8 @@ const ReleaseModal = ({
115
95
  );
116
96
  return currentTimezone?.value || systemTimezone.value;
117
97
  };
118
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.ModalLayout, { onClose: handleClose, labelledBy: "title", children: [
119
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.ModalHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { id: "title", fontWeight: "bold", textColor: "neutral800", children: formatMessage(
98
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Root, { open, onOpenChange: handleClose, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Content, { children: [
99
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Title, { children: formatMessage(
120
100
  {
121
101
  id: "content-releases.modal.title",
122
102
  defaultMessage: "{isCreatingRelease, select, true {New release} other {Edit release}}"
@@ -137,27 +117,35 @@ const ReleaseModal = ({
137
117
  ...initialValues,
138
118
  timezone: initialValues.timezone ? getTimezoneWithOffset() : systemTimezone.value
139
119
  },
140
- validationSchema: RELEASE_SCHEMA,
120
+ validationSchema: schemas.RELEASE_SCHEMA,
141
121
  validateOnChange: false,
142
122
  children: ({ values, errors, handleChange, setFieldValue }) => {
143
123
  return /* @__PURE__ */ jsxRuntime.jsxs(formik.Form, { children: [
144
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.ModalBody, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
145
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { name: "name", error: errors.name, required: true, children: [
146
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
147
- id: "content-releases.modal.form.input.label.release-name",
148
- defaultMessage: "Name"
149
- }) }),
150
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.TextInput, { value: values.name, onChange: handleChange }),
151
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
152
- ] }),
124
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Body, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
125
+ /* @__PURE__ */ jsxRuntime.jsxs(
126
+ designSystem.Field.Root,
127
+ {
128
+ name: "name",
129
+ error: errors.name && formatMessage({ id: errors.name, defaultMessage: errors.name }),
130
+ required: true,
131
+ children: [
132
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
133
+ id: "content-releases.modal.form.input.label.release-name",
134
+ defaultMessage: "Name"
135
+ }) }),
136
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.TextInput, { value: values.name, onChange: handleChange }),
137
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
138
+ ]
139
+ }
140
+ ),
153
141
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "max-content", children: /* @__PURE__ */ jsxRuntime.jsx(
154
142
  designSystem.Checkbox,
155
143
  {
156
144
  name: "isScheduled",
157
- value: values.isScheduled,
158
- onChange: (event) => {
159
- setFieldValue("isScheduled", event.target.checked);
160
- if (!event.target.checked) {
145
+ checked: values.isScheduled,
146
+ onCheckedChange: (checked) => {
147
+ setFieldValue("isScheduled", checked);
148
+ if (!checked) {
161
149
  setFieldValue("date", null);
162
150
  setFieldValue("time", "");
163
151
  setFieldValue("timezone", null);
@@ -185,86 +173,89 @@ const ReleaseModal = ({
185
173
  ) }),
186
174
  values.isScheduled && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
187
175
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 4, alignItems: "start", children: [
188
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "100%", children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { name: "date", error: errors.date, required: true, children: [
189
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
190
- id: "content-releases.modal.form.input.label.date",
191
- defaultMessage: "Date"
192
- }) }),
193
- /* @__PURE__ */ jsxRuntime.jsx(
194
- designSystem.DatePicker,
195
- {
196
- onChange: (date) => {
197
- const isoFormatDate = date ? dateFns.formatISO(date, { representation: "date" }) : null;
198
- setFieldValue("date", isoFormatDate);
199
- },
200
- clearLabel: formatMessage({
201
- id: "content-releases.modal.form.input.clearLabel",
202
- defaultMessage: "Clear"
203
- }),
204
- onClear: () => {
205
- setFieldValue("date", null);
206
- },
207
- value: values.date ? new Date(values.date) : /* @__PURE__ */ new Date(),
208
- minDate: dateFnsTz.utcToZonedTime(/* @__PURE__ */ new Date(), values.timezone.split("&")[1])
209
- }
210
- ),
211
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
212
- ] }) }),
213
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "100%", children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { name: "time", error: errors.time, required: true, children: [
214
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
215
- id: "content-releases.modal.form.input.label.time",
216
- defaultMessage: "Time"
217
- }) }),
218
- /* @__PURE__ */ jsxRuntime.jsx(
219
- designSystem.TimePicker,
220
- {
221
- onChange: (time) => {
222
- setFieldValue("time", time);
223
- },
224
- clearLabel: formatMessage({
225
- id: "content-releases.modal.form.input.clearLabel",
226
- defaultMessage: "Clear"
227
- }),
228
- onClear: () => {
229
- setFieldValue("time", "");
230
- },
231
- value: values.time || void 0
232
- }
233
- ),
234
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
235
- ] }) })
176
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "100%", children: /* @__PURE__ */ jsxRuntime.jsxs(
177
+ designSystem.Field.Root,
178
+ {
179
+ name: "date",
180
+ error: errors.date && formatMessage({ id: errors.date, defaultMessage: errors.date }),
181
+ required: true,
182
+ children: [
183
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
184
+ id: "content-releases.modal.form.input.label.date",
185
+ defaultMessage: "Date"
186
+ }) }),
187
+ /* @__PURE__ */ jsxRuntime.jsx(
188
+ designSystem.DatePicker,
189
+ {
190
+ onChange: (date) => {
191
+ const isoFormatDate = date ? dateFns.formatISO(date, { representation: "date" }) : null;
192
+ setFieldValue("date", isoFormatDate);
193
+ },
194
+ clearLabel: formatMessage({
195
+ id: "content-releases.modal.form.input.clearLabel",
196
+ defaultMessage: "Clear"
197
+ }),
198
+ onClear: () => {
199
+ setFieldValue("date", null);
200
+ },
201
+ value: values.date ? new Date(values.date) : /* @__PURE__ */ new Date(),
202
+ minDate: dateFnsTz.utcToZonedTime(/* @__PURE__ */ new Date(), values.timezone.split("&")[1])
203
+ }
204
+ ),
205
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
206
+ ]
207
+ }
208
+ ) }),
209
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "100%", children: /* @__PURE__ */ jsxRuntime.jsxs(
210
+ designSystem.Field.Root,
211
+ {
212
+ name: "time",
213
+ error: errors.time && formatMessage({ id: errors.time, defaultMessage: errors.time }),
214
+ required: true,
215
+ children: [
216
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
217
+ id: "content-releases.modal.form.input.label.time",
218
+ defaultMessage: "Time"
219
+ }) }),
220
+ /* @__PURE__ */ jsxRuntime.jsx(
221
+ designSystem.TimePicker,
222
+ {
223
+ onChange: (time) => {
224
+ setFieldValue("time", time);
225
+ },
226
+ clearLabel: formatMessage({
227
+ id: "content-releases.modal.form.input.clearLabel",
228
+ defaultMessage: "Clear"
229
+ }),
230
+ onClear: () => {
231
+ setFieldValue("time", "");
232
+ },
233
+ value: values.time || void 0
234
+ }
235
+ ),
236
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
237
+ ]
238
+ }
239
+ ) })
236
240
  ] }),
237
241
  /* @__PURE__ */ jsxRuntime.jsx(TimezoneComponent, { timezoneOptions: timezoneList })
238
242
  ] })
239
243
  ] }) }),
240
- /* @__PURE__ */ jsxRuntime.jsx(
241
- designSystem.ModalFooter,
242
- {
243
- startActions: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { onClick: handleClose, variant: "tertiary", name: "cancel", children: formatMessage({ id: "cancel", defaultMessage: "Cancel" }) }),
244
- endActions: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { name: "submit", loading: isLoading, type: "submit", children: formatMessage(
245
- {
246
- id: "content-releases.modal.form.button.submit",
247
- defaultMessage: "{isCreatingRelease, select, true {Continue} other {Save}}"
248
- },
249
- { isCreatingRelease }
250
- ) })
251
- }
252
- )
244
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Footer, { children: [
245
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Close, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { variant: "tertiary", name: "cancel", children: formatMessage({ id: "cancel", defaultMessage: "Cancel" }) }) }),
246
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { name: "submit", loading: isLoading, type: "submit", children: formatMessage(
247
+ {
248
+ id: "content-releases.modal.form.button.submit",
249
+ defaultMessage: "{isCreatingRelease, select, true {Continue} other {Save}}"
250
+ },
251
+ { isCreatingRelease }
252
+ ) })
253
+ ] })
253
254
  ] });
254
255
  }
255
256
  }
256
257
  )
257
- ] });
258
- };
259
- const getTimezones = (selectedDate) => {
260
- const timezoneList = Intl.supportedValuesOf("timeZone").map((timezone) => {
261
- const utcOffset = index.getTimezoneOffset(timezone, selectedDate);
262
- return { offset: utcOffset, value: `${utcOffset}&${timezone}` };
263
- });
264
- const systemTimezone = timezoneList.find(
265
- (timezone) => timezone.value.split("&")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
266
- );
267
- return { timezoneList, systemTimezone };
258
+ ] }) });
268
259
  };
269
260
  const TimezoneComponent = ({ timezoneOptions }) => {
270
261
  const { values, errors, setFieldValue } = formik.useFormikContext();
@@ -272,7 +263,7 @@ const TimezoneComponent = ({ timezoneOptions }) => {
272
263
  const [timezoneList, setTimezoneList] = React__namespace.useState(timezoneOptions);
273
264
  React__namespace.useEffect(() => {
274
265
  if (values.date) {
275
- const { timezoneList: timezoneList2 } = getTimezones(new Date(values.date));
266
+ const { timezoneList: timezoneList2 } = index.getTimezones(new Date(values.date));
276
267
  setTimezoneList(timezoneList2);
277
268
  const updatedTimezone = values.timezone && timezoneList2.find((tz) => tz.value.split("&")[1] === values.timezone.split("&")[1]);
278
269
  if (updatedTimezone) {
@@ -280,31 +271,39 @@ const TimezoneComponent = ({ timezoneOptions }) => {
280
271
  }
281
272
  }
282
273
  }, [setFieldValue, values.date, values.timezone]);
283
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { name: "timezone", error: errors.timezone, required: true, children: [
284
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
285
- id: "content-releases.modal.form.input.label.timezone",
286
- defaultMessage: "Timezone"
287
- }) }),
288
- /* @__PURE__ */ jsxRuntime.jsx(
289
- designSystem.Combobox,
290
- {
291
- autocomplete: { type: "list", filter: "contains" },
292
- value: values.timezone || void 0,
293
- textValue: values.timezone ? values.timezone.replace(/&/, " ") : void 0,
294
- onChange: (timezone) => {
295
- setFieldValue("timezone", timezone);
296
- },
297
- onTextValueChange: (timezone) => {
298
- setFieldValue("timezone", timezone);
299
- },
300
- onClear: () => {
301
- setFieldValue("timezone", "");
302
- },
303
- children: timezoneList.map((timezone) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.ComboboxOption, { value: timezone.value, children: timezone.value.replace(/&/, " ") }, timezone.value))
304
- }
305
- ),
306
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
307
- ] });
274
+ return /* @__PURE__ */ jsxRuntime.jsxs(
275
+ designSystem.Field.Root,
276
+ {
277
+ name: "timezone",
278
+ error: errors.timezone && formatMessage({ id: errors.timezone, defaultMessage: errors.timezone }),
279
+ required: true,
280
+ children: [
281
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
282
+ id: "content-releases.modal.form.input.label.timezone",
283
+ defaultMessage: "Timezone"
284
+ }) }),
285
+ /* @__PURE__ */ jsxRuntime.jsx(
286
+ designSystem.Combobox,
287
+ {
288
+ autocomplete: { type: "list", filter: "contains" },
289
+ value: values.timezone || void 0,
290
+ textValue: values.timezone ? values.timezone.replace(/&/, " ") : void 0,
291
+ onChange: (timezone) => {
292
+ setFieldValue("timezone", timezone);
293
+ },
294
+ onTextValueChange: (timezone) => {
295
+ setFieldValue("timezone", timezone);
296
+ },
297
+ onClear: () => {
298
+ setFieldValue("timezone", "");
299
+ },
300
+ children: timezoneList.map((timezone) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.ComboboxOption, { value: timezone.value, children: timezone.value.replace(/&/, " ") }, timezone.value))
301
+ }
302
+ ),
303
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
304
+ ]
305
+ }
306
+ );
308
307
  };
309
308
  const useTypedDispatch = reactRedux.useDispatch;
310
309
  const isBaseQueryError = (error) => {
@@ -366,7 +365,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
366
365
  }
367
366
  );
368
367
  }
369
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid, { gap: 4, children: releases.map(({ id, name, scheduledAt, status }) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.GridItem, { col: 3, s: 6, xs: 12, children: /* @__PURE__ */ jsxRuntime.jsx(LinkCard, { tag: reactRouterDom.NavLink, to: `${id}`, isExternal: false, children: /* @__PURE__ */ jsxRuntime.jsxs(
368
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: releases.map(({ id, name, scheduledAt, status }) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 3, s: 6, xs: 12, children: /* @__PURE__ */ jsxRuntime.jsx(LinkCard, { tag: reactRouterDom.NavLink, to: `${id}`, isExternal: false, children: /* @__PURE__ */ jsxRuntime.jsxs(
370
369
  designSystem.Flex,
371
370
  {
372
371
  direction: "column",
@@ -381,7 +380,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
381
380
  gap: 4,
382
381
  children: [
383
382
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "start", gap: 1, children: [
384
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "h3", variant: "delta", fontWeight: "bold", children: name }),
383
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", tag: "h3", variant: "delta", fontWeight: "bold", children: name }),
385
384
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", children: scheduledAt ? /* @__PURE__ */ jsxRuntime.jsx(RelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
386
385
  id: "content-releases.pages.Releases.not-scheduled",
387
386
  defaultMessage: "Not scheduled"
@@ -402,14 +401,13 @@ const StyledAlert = styledComponents.styled(designSystem.Alert)`
402
401
  `;
403
402
  const INITIAL_FORM_VALUES = {
404
403
  name: "",
405
- date: void 0,
404
+ date: dateFns.format(/* @__PURE__ */ new Date(), "yyyy-MM-dd"),
406
405
  time: "",
407
406
  isScheduled: true,
408
407
  scheduledAt: null,
409
408
  timezone: null
410
409
  };
411
410
  const ReleasesPage = () => {
412
- const tabRef = React__namespace.useRef(null);
413
411
  const location = reactRouterDom.useLocation();
414
412
  const [releaseModalShown, setReleaseModalShown] = React__namespace.useState(false);
415
413
  const { toggleNotification } = strapiAdmin.useNotification();
@@ -418,6 +416,7 @@ const ReleasesPage = () => {
418
416
  const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
419
417
  const [{ query }, setQuery] = strapiAdmin.useQueryParams();
420
418
  const response = index.useGetReleasesQuery(query);
419
+ const { data, isLoading: isLoadingSettings } = index.useGetReleaseSettingsQuery();
421
420
  const [createRelease, { isLoading: isSubmittingForm }] = index.useCreateReleaseMutation();
422
421
  const { getFeature } = ee.useLicenseLimits();
423
422
  const { maximumReleases = 3 } = getFeature("cms-content-releases");
@@ -425,9 +424,8 @@ const ReleasesPage = () => {
425
424
  const {
426
425
  allowedActions: { canCreate }
427
426
  } = strapiAdmin.useRBAC(index.PERMISSIONS);
428
- const { isLoading, isSuccess, isError } = response;
427
+ const { isLoading: isLoadingReleases, isSuccess, isError } = response;
429
428
  const activeTab = response?.currentData?.meta?.activeTab || "pending";
430
- const activeTabIndex = ["pending", "done"].indexOf(activeTab);
431
429
  React__namespace.useEffect(() => {
432
430
  if (location?.state?.errors) {
433
431
  toggleNotification({
@@ -444,27 +442,22 @@ const ReleasesPage = () => {
444
442
  navigate("", { replace: true, state: null });
445
443
  }
446
444
  }, [formatMessage, location?.state?.errors, navigate, toggleNotification]);
447
- React__namespace.useEffect(() => {
448
- if (tabRef.current) {
449
- tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
450
- }
451
- }, [activeTabIndex]);
452
445
  const toggleAddReleaseModal = () => {
453
446
  setReleaseModalShown((prev) => !prev);
454
447
  };
455
- if (isLoading) {
448
+ if (isLoadingReleases || isLoadingSettings) {
456
449
  return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
457
450
  }
458
451
  const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
459
452
  const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
460
- const handleTabChange = (index2) => {
453
+ const handleTabChange = (tabValue) => {
461
454
  setQuery({
462
455
  ...query,
463
456
  page: 1,
464
457
  pageSize: response?.currentData?.meta?.pagination?.pageSize || 16,
465
458
  filters: {
466
459
  releasedAt: {
467
- $notNull: index2 === 0 ? false : true
460
+ $notNull: tabValue !== "pending"
468
461
  }
469
462
  }
470
463
  });
@@ -497,7 +490,7 @@ const ReleasesPage = () => {
497
490
  });
498
491
  }
499
492
  };
500
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Main, { "aria-busy": isLoading, children: [
493
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Main, { "aria-busy": isLoadingReleases || isLoadingSettings, children: [
501
494
  /* @__PURE__ */ jsxRuntime.jsx(
502
495
  strapiAdmin.Layouts.Header,
503
496
  {
@@ -548,21 +541,17 @@ const ReleasesPage = () => {
548
541
  })
549
542
  }
550
543
  ),
551
- /* @__PURE__ */ jsxRuntime.jsxs(
552
- designSystem.TabGroup,
553
- {
554
- label: formatMessage({
555
- id: "content-releases.pages.Releases.tab-group.label",
556
- defaultMessage: "Releases list"
557
- }),
558
- variant: "simple",
559
- initialSelectedTabIndex: activeTabIndex,
560
- onTabChange: handleTabChange,
561
- ref: tabRef,
562
- children: [
563
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { paddingBottom: 8, children: [
564
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tabs, { children: [
565
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tab, { children: formatMessage(
544
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tabs.Root, { variant: "simple", onValueChange: handleTabChange, value: activeTab, children: [
545
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { paddingBottom: 8, children: [
546
+ /* @__PURE__ */ jsxRuntime.jsxs(
547
+ designSystem.Tabs.List,
548
+ {
549
+ "aria-label": formatMessage({
550
+ id: "content-releases.pages.Releases.tab-group.label",
551
+ defaultMessage: "Releases list"
552
+ }),
553
+ children: [
554
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tabs.Trigger, { value: "pending", children: formatMessage(
566
555
  {
567
556
  id: "content-releases.pages.Releases.tab.pending",
568
557
  defaultMessage: "Pending ({count})"
@@ -571,34 +560,32 @@ const ReleasesPage = () => {
571
560
  count: totalPendingReleases
572
561
  }
573
562
  ) }),
574
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tab, { children: formatMessage({
563
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tabs.Trigger, { value: "done", children: formatMessage({
575
564
  id: "content-releases.pages.Releases.tab.done",
576
565
  defaultMessage: "Done"
577
566
  }) })
578
- ] }),
579
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Divider, {})
580
- ] }),
581
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.TabPanels, { children: [
582
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.TabPanel, { children: /* @__PURE__ */ jsxRuntime.jsx(
583
- ReleasesGrid,
584
- {
585
- sectionTitle: "pending",
586
- releases: response?.currentData?.data,
587
- isError
588
- }
589
- ) }),
590
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.TabPanel, { children: /* @__PURE__ */ jsxRuntime.jsx(
591
- ReleasesGrid,
592
- {
593
- sectionTitle: "done",
594
- releases: response?.currentData?.data,
595
- isError
596
- }
597
- ) })
598
- ] })
599
- ]
600
- }
601
- ),
567
+ ]
568
+ }
569
+ ),
570
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Divider, {})
571
+ ] }),
572
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tabs.Content, { value: "pending", children: /* @__PURE__ */ jsxRuntime.jsx(
573
+ ReleasesGrid,
574
+ {
575
+ sectionTitle: "pending",
576
+ releases: response?.currentData?.data,
577
+ isError
578
+ }
579
+ ) }),
580
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tabs.Content, { value: "done", children: /* @__PURE__ */ jsxRuntime.jsx(
581
+ ReleasesGrid,
582
+ {
583
+ sectionTitle: "done",
584
+ releases: response?.currentData?.data,
585
+ isError
586
+ }
587
+ ) })
588
+ ] }),
602
589
  /* @__PURE__ */ jsxRuntime.jsxs(
603
590
  strapiAdmin.Pagination.Root,
604
591
  {
@@ -611,13 +598,17 @@ const ReleasesPage = () => {
611
598
  }
612
599
  )
613
600
  ] }) }),
614
- releaseModalShown && /* @__PURE__ */ jsxRuntime.jsx(
601
+ /* @__PURE__ */ jsxRuntime.jsx(
615
602
  ReleaseModal,
616
603
  {
604
+ open: releaseModalShown,
617
605
  handleClose: toggleAddReleaseModal,
618
606
  handleSubmit: handleAddRelease,
619
607
  isLoading: isSubmittingForm,
620
- initialValues: INITIAL_FORM_VALUES
608
+ initialValues: {
609
+ ...INITIAL_FORM_VALUES,
610
+ timezone: data?.data.defaultTimezone ? data.data.defaultTimezone.split("&")[1] : null
611
+ }
621
612
  }
622
613
  )
623
614
  ] });
@@ -628,7 +619,7 @@ const ReleaseInfoWrapper = styledComponents.styled(designSystem.Flex)`
628
619
  border-bottom-left-radius: ${({ theme }) => theme.borderRadius};
629
620
  border-top: 1px solid ${({ theme }) => theme.colors.neutral150};
630
621
  `;
631
- const StyledMenuItem = styledComponents.styled(designSystem.Menu.Item)`
622
+ const StyledMenuItem = styledComponents.styled(designSystem.MenuItem)`
632
623
  svg path {
633
624
  fill: ${({ theme, disabled }) => disabled && theme.colors.neutral500};
634
625
  }
@@ -657,42 +648,72 @@ const TrashIcon = styledComponents.styled(icons.Trash)`
657
648
  const TypographyMaxWidth = styledComponents.styled(designSystem.Typography)`
658
649
  max-width: 300px;
659
650
  `;
660
- const EntryValidationText = ({ action, schema, entry }) => {
651
+ const EntryValidationText = ({ action, schema, entry, status }) => {
661
652
  const { formatMessage } = reactIntl.useIntl();
662
- const { validate } = strapiAdmin$1.unstable_useDocument(
653
+ const { validate, isLoading } = strapiAdmin$1.unstable_useDocument(
663
654
  {
664
655
  collectionType: schema?.kind ?? "",
665
656
  model: schema?.uid ?? ""
666
657
  },
667
658
  {
668
- skip: !schema
659
+ // useDocument makes a request to get more data about the entry, but we only want to have the validation function so we skip the request
660
+ skip: true
669
661
  }
670
662
  );
671
- const errors = validate(entry) ?? {};
672
- if (Object.keys(errors).length > 0) {
673
- const validationErrorsMessages = Object.entries(errors).map(
674
- ([key, value]) => formatMessage(
675
- // @ts-expect-error – TODO: fix this will better checks
676
- { id: `${value.id}.withField`, defaultMessage: value.defaultMessage },
677
- { field: key }
678
- )
679
- ).join(" ");
680
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
681
- /* @__PURE__ */ jsxRuntime.jsx(icons.CrossCircle, { fill: "danger600" }),
682
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsxRuntime.jsx(TypographyMaxWidth, { textColor: "danger600", variant: "omega", fontWeight: "semiBold", ellipsis: true, children: validationErrorsMessages }) })
683
- ] });
663
+ if (isLoading) {
664
+ return null;
684
665
  }
685
- if (action == "publish") {
686
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
687
- /* @__PURE__ */ jsxRuntime.jsx(icons.CheckCircle, { fill: "success600" }),
688
- entry.publishedAt ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
689
- id: "content-releases.pages.ReleaseDetails.entry-validation.already-published",
690
- defaultMessage: "Already published"
691
- }) }) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: formatMessage({
692
- id: "content-releases.pages.ReleaseDetails.entry-validation.ready-to-publish",
693
- defaultMessage: "Ready to publish"
694
- }) })
695
- ] });
666
+ const errors = validate(entry) ?? {};
667
+ if (action === "publish") {
668
+ if (Object.keys(errors).length > 0) {
669
+ const validationErrorsMessages = Object.entries(errors).map(
670
+ ([key, value]) => formatMessage(
671
+ // @ts-expect-error – TODO: fix this will better checks
672
+ { id: `${value.id}.withField`, defaultMessage: value.defaultMessage },
673
+ { field: key }
674
+ )
675
+ ).join(" ");
676
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
677
+ /* @__PURE__ */ jsxRuntime.jsx(icons.CrossCircle, { fill: "danger600" }),
678
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsxRuntime.jsx(
679
+ TypographyMaxWidth,
680
+ {
681
+ textColor: "danger600",
682
+ variant: "omega",
683
+ fontWeight: "semiBold",
684
+ ellipsis: true,
685
+ children: validationErrorsMessages
686
+ }
687
+ ) })
688
+ ] });
689
+ }
690
+ if (status === "draft") {
691
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
692
+ /* @__PURE__ */ jsxRuntime.jsx(icons.CheckCircle, { fill: "success600" }),
693
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: formatMessage({
694
+ id: "content-releases.pages.ReleaseDetails.entry-validation.ready-to-publish",
695
+ defaultMessage: "Ready to publish"
696
+ }) })
697
+ ] });
698
+ }
699
+ if (status === "modified") {
700
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
701
+ /* @__PURE__ */ jsxRuntime.jsx(icons.ArrowsCounterClockwise, { fill: "alternative600" }),
702
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: formatMessage({
703
+ id: "content-releases.pages.ReleaseDetails.entry-validation.modified",
704
+ defaultMessage: "Ready to publish changes"
705
+ }) })
706
+ ] });
707
+ }
708
+ if (status === "published") {
709
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
710
+ /* @__PURE__ */ jsxRuntime.jsx(icons.CheckCircle, { fill: "success600" }),
711
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: formatMessage({
712
+ id: "content-releases.pages.ReleaseDetails.entry-validation.already-published",
713
+ defaultMessage: "Already published"
714
+ }) })
715
+ ] });
716
+ }
696
717
  }
697
718
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
698
719
  /* @__PURE__ */ jsxRuntime.jsx(icons.CheckCircle, { fill: "success600" }),
@@ -838,83 +859,71 @@ const ReleaseDetailsLayout = ({
838
859
  ] }),
839
860
  navigationAction: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.BackButton, {}),
840
861
  primaryAction: !release.releasedAt && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
841
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Root, { children: [
842
- /* @__PURE__ */ jsxRuntime.jsx(
843
- designSystem.Menu.Trigger,
844
- {
845
- paddingLeft: 2,
846
- paddingRight: 2,
847
- "aria-label": formatMessage({
848
- id: "content-releases.header.actions.open-release-actions",
849
- defaultMessage: "Release edit and delete menu"
850
- }),
851
- variant: "tertiary",
852
- children: /* @__PURE__ */ jsxRuntime.jsx(icons.More, {})
853
- }
854
- ),
855
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Content, { top: 1, popoverPlacement: "bottom-end", maxHeight: void 0, children: [
856
- /* @__PURE__ */ jsxRuntime.jsxs(
857
- designSystem.Flex,
858
- {
859
- alignItems: "center",
860
- justifyContent: "center",
861
- direction: "column",
862
- padding: 1,
863
- width: "100%",
864
- children: [
865
- /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { disabled: !canUpdate, onSelect: toggleEditReleaseModal, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
866
- /* @__PURE__ */ jsxRuntime.jsx(PencilIcon, {}),
867
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { ellipsis: true, children: formatMessage({
868
- id: "content-releases.header.actions.edit",
869
- defaultMessage: "Edit"
862
+ /* @__PURE__ */ jsxRuntime.jsxs(
863
+ designSystem.SimpleMenu,
864
+ {
865
+ label: /* @__PURE__ */ jsxRuntime.jsx(icons.More, {}),
866
+ variant: "tertiary",
867
+ endIcon: null,
868
+ paddingLeft: "7px",
869
+ paddingRight: "7px",
870
+ "aria-label": formatMessage({
871
+ id: "content-releases.header.actions.open-release-actions",
872
+ defaultMessage: "Release edit and delete menu"
873
+ }),
874
+ popoverPlacement: "bottom-end",
875
+ children: [
876
+ /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { disabled: !canUpdate, onSelect: toggleEditReleaseModal, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
877
+ /* @__PURE__ */ jsxRuntime.jsx(PencilIcon, {}),
878
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { ellipsis: true, children: formatMessage({
879
+ id: "content-releases.header.actions.edit",
880
+ defaultMessage: "Edit"
881
+ }) })
882
+ ] }) }),
883
+ /* @__PURE__ */ jsxRuntime.jsx(
884
+ StyledMenuItem,
885
+ {
886
+ disabled: !canDelete,
887
+ onSelect: toggleWarningSubmit,
888
+ $variant: "danger",
889
+ children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
890
+ /* @__PURE__ */ jsxRuntime.jsx(TrashIcon, {}),
891
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { ellipsis: true, textColor: "danger600", children: formatMessage({
892
+ id: "content-releases.header.actions.delete",
893
+ defaultMessage: "Delete"
870
894
  }) })
871
- ] }) }),
872
- /* @__PURE__ */ jsxRuntime.jsx(
873
- StyledMenuItem,
874
- {
875
- disabled: !canDelete,
876
- onSelect: toggleWarningSubmit,
877
- $variant: "danger",
878
- children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
879
- /* @__PURE__ */ jsxRuntime.jsx(TrashIcon, {}),
880
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { ellipsis: true, textColor: "danger600", children: formatMessage({
881
- id: "content-releases.header.actions.delete",
882
- defaultMessage: "Delete"
883
- }) })
884
- ] })
885
- }
886
- )
887
- ]
888
- }
889
- ),
890
- /* @__PURE__ */ jsxRuntime.jsxs(
891
- ReleaseInfoWrapper,
892
- {
893
- direction: "column",
894
- justifyContent: "center",
895
- alignItems: "flex-start",
896
- gap: 1,
897
- padding: 5,
898
- children: [
899
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", fontWeight: "bold", children: formatMessage({
900
- id: "content-releases.header.actions.created",
901
- defaultMessage: "Created"
902
- }) }),
903
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", color: "neutral300", children: [
904
- /* @__PURE__ */ jsxRuntime.jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
905
- formatMessage(
906
- {
907
- id: "content-releases.header.actions.created.description",
908
- defaultMessage: "{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}"
909
- },
910
- { createdBy: getCreatedByUser(), hasCreatedByUser }
911
- )
912
895
  ] })
913
- ]
914
- }
915
- )
916
- ] })
917
- ] }),
896
+ }
897
+ ),
898
+ /* @__PURE__ */ jsxRuntime.jsxs(
899
+ ReleaseInfoWrapper,
900
+ {
901
+ direction: "column",
902
+ justifyContent: "center",
903
+ alignItems: "flex-start",
904
+ gap: 1,
905
+ padding: 5,
906
+ children: [
907
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", fontWeight: "bold", children: formatMessage({
908
+ id: "content-releases.header.actions.created",
909
+ defaultMessage: "Created"
910
+ }) }),
911
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", color: "neutral300", children: [
912
+ /* @__PURE__ */ jsxRuntime.jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
913
+ formatMessage(
914
+ {
915
+ id: "content-releases.header.actions.created.description",
916
+ defaultMessage: "{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}"
917
+ },
918
+ { createdBy: getCreatedByUser(), hasCreatedByUser }
919
+ )
920
+ ] })
921
+ ]
922
+ }
923
+ )
924
+ ]
925
+ }
926
+ ),
918
927
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { size: "S", variant: "tertiary", onClick: handleRefresh, children: formatMessage({
919
928
  id: "content-releases.header.actions.refresh",
920
929
  defaultMessage: "Refresh"
@@ -973,19 +982,18 @@ const ReleaseDetailsBody = ({ releaseId }) => {
973
982
  allowedActions: { canUpdate }
974
983
  } = strapiAdmin.useRBAC(index.PERMISSIONS);
975
984
  const runHookWaterfall = strapiAdmin.useStrapiApp("ReleaseDetailsPage", (state) => state.runHookWaterfall);
976
- const { hasI18nEnabled } = runHookWaterfall(
977
- "ContentReleases/pages/ReleaseDetails/add-locale-in-releases",
978
- {
979
- displayedHeaders: {
980
- label: formatMessage({
981
- id: "content-releases.page.ReleaseDetails.table.header.label.locale",
982
- defaultMessage: "locale"
983
- }),
984
- name: "locale"
985
- },
986
- hasI18nEnabled: false
987
- }
988
- );
985
+ const { displayedHeaders, hasI18nEnabled } = runHookWaterfall("ContentReleases/pages/ReleaseDetails/add-locale-in-releases", {
986
+ displayedHeaders: [
987
+ {
988
+ label: {
989
+ id: "content-releases.page.ReleaseDetails.table.header.label.name",
990
+ defaultMessage: "name"
991
+ },
992
+ name: "name"
993
+ }
994
+ ],
995
+ hasI18nEnabled: false
996
+ });
989
997
  const release = releaseData?.data;
990
998
  const selectedGroupBy = query?.groupBy || "contentType";
991
999
  const {
@@ -1091,34 +1099,27 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1091
1099
  defaultMessage: "Group by"
1092
1100
  });
1093
1101
  const headers = [
1094
- // ...displayedHeaders,
1095
- {
1096
- label: formatMessage({
1097
- id: "content-releases.page.ReleaseDetails.table.header.label.name",
1098
- defaultMessage: "name"
1099
- }),
1100
- name: "name"
1101
- },
1102
+ ...displayedHeaders,
1102
1103
  {
1103
- label: formatMessage({
1104
+ label: {
1104
1105
  id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
1105
1106
  defaultMessage: "content-type"
1106
- }),
1107
+ },
1107
1108
  name: "content-type"
1108
1109
  },
1109
1110
  {
1110
- label: formatMessage({
1111
+ label: {
1111
1112
  id: "content-releases.page.ReleaseDetails.table.header.label.action",
1112
1113
  defaultMessage: "action"
1113
- }),
1114
+ },
1114
1115
  name: "action"
1115
1116
  },
1116
1117
  ...!release.releasedAt ? [
1117
1118
  {
1118
- label: formatMessage({
1119
+ label: {
1119
1120
  id: "content-releases.page.ReleaseDetails.table.header.label.status",
1120
1121
  defaultMessage: "status"
1121
- }),
1122
+ },
1122
1123
  name: "status"
1123
1124
  }
1124
1125
  ] : []
@@ -1156,10 +1157,10 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1156
1157
  headers,
1157
1158
  isLoading: isLoading || isFetching,
1158
1159
  children: /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Table.Content, { children: [
1159
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Head, { children: headers.map((header) => /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.HeaderCell, { ...header }, header.name)) }),
1160
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Head, { children: headers.map(({ label, name }) => /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.HeaderCell, { label: formatMessage(label), name }, name)) }),
1160
1161
  /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Loading, {}),
1161
1162
  /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Body, { children: releaseActions[key].map(
1162
- ({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
1163
+ ({ id, contentType, locale, type, entry, status }, actionIndex) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
1163
1164
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
1164
1165
  hasI18nEnabled && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "10%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
1165
1166
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "10%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: contentType.displayName || "" }) }),
@@ -1188,7 +1189,8 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1188
1189
  action: type,
1189
1190
  schema: contentTypes?.[contentType.uid],
1190
1191
  components,
1191
- entry
1192
+ entry,
1193
+ status
1192
1194
  }
1193
1195
  ) }),
1194
1196
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "flex-end", children: /* @__PURE__ */ jsxRuntime.jsxs(index.ReleaseActionMenu.Root, { children: [
@@ -1196,7 +1198,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1196
1198
  index.ReleaseActionMenu.ReleaseActionEntryLinkItem,
1197
1199
  {
1198
1200
  contentTypeUid: contentType.uid,
1199
- entryId: entry.id,
1201
+ documentId: entry.documentId,
1200
1202
  locale: locale?.code
1201
1203
  }
1202
1204
  ),
@@ -1246,13 +1248,24 @@ const ReleaseDetailsPage = () => {
1246
1248
  skip: !releaseId
1247
1249
  }
1248
1250
  );
1251
+ const { data: dataTimezone, isLoading: isLoadingTimezone } = index.useGetReleaseSettingsQuery();
1249
1252
  const [updateRelease, { isLoading: isSubmittingForm }] = index.useUpdateReleaseMutation();
1250
1253
  const [deleteRelease] = index.useDeleteReleaseMutation();
1251
1254
  const toggleEditReleaseModal = () => {
1252
1255
  setReleaseModalShown((prev) => !prev);
1253
1256
  };
1257
+ const getTimezoneValue = () => {
1258
+ if (releaseData?.timezone) {
1259
+ return releaseData.timezone;
1260
+ } else {
1261
+ if (dataTimezone?.data.defaultTimezone) {
1262
+ return dataTimezone.data.defaultTimezone;
1263
+ }
1264
+ return null;
1265
+ }
1266
+ };
1254
1267
  const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);
1255
- if (isLoadingDetails) {
1268
+ if (isLoadingDetails || isLoadingTimezone) {
1256
1269
  return /* @__PURE__ */ jsxRuntime.jsx(
1257
1270
  ReleaseDetailsLayout,
1258
1271
  {
@@ -1267,7 +1280,7 @@ const ReleaseDetailsPage = () => {
1267
1280
  }
1268
1281
  const releaseData = isSuccessDetails && data?.data || null;
1269
1282
  const title = releaseData?.name || "";
1270
- const timezone = releaseData?.timezone ?? null;
1283
+ const timezone = getTimezoneValue();
1271
1284
  const scheduledAt = releaseData?.scheduledAt && timezone ? dateFnsTz.utcToZonedTime(releaseData.scheduledAt, timezone) : null;
1272
1285
  const date = scheduledAt ? format__default.default(scheduledAt, "yyyy-MM-dd") : void 0;
1273
1286
  const time = scheduledAt ? format__default.default(scheduledAt, "HH:mm") : "";
@@ -1324,9 +1337,10 @@ const ReleaseDetailsPage = () => {
1324
1337
  toggleWarningSubmit,
1325
1338
  children: [
1326
1339
  /* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsBody, { releaseId }),
1327
- releaseModalShown && /* @__PURE__ */ jsxRuntime.jsx(
1340
+ /* @__PURE__ */ jsxRuntime.jsx(
1328
1341
  ReleaseModal,
1329
1342
  {
1343
+ open: releaseModalShown,
1330
1344
  handleClose: toggleEditReleaseModal,
1331
1345
  handleSubmit: handleEditRelease,
1332
1346
  isLoading: isLoadingDetails || isSubmittingForm,
@@ -1340,18 +1354,10 @@ const ReleaseDetailsPage = () => {
1340
1354
  }
1341
1355
  }
1342
1356
  ),
1343
- /* @__PURE__ */ jsxRuntime.jsx(
1344
- strapiAdmin.ConfirmDialog,
1345
- {
1346
- isOpen: showWarningSubmit,
1347
- onClose: toggleWarningSubmit,
1348
- onConfirm: handleDeleteRelease,
1349
- children: formatMessage({
1350
- id: "content-releases.dialog.confirmation-message",
1351
- defaultMessage: "Are you sure you want to delete this release?"
1352
- })
1353
- }
1354
- )
1357
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Dialog.Root, { open: showWarningSubmit, onOpenChange: toggleWarningSubmit, children: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, { onConfirm: handleDeleteRelease, children: formatMessage({
1358
+ id: "content-releases.dialog.confirmation-message",
1359
+ defaultMessage: "Are you sure you want to delete this release?"
1360
+ }) }) })
1355
1361
  ]
1356
1362
  }
1357
1363
  );
@@ -1363,4 +1369,4 @@ const App = () => {
1363
1369
  ] }) });
1364
1370
  };
1365
1371
  exports.App = App;
1366
- //# sourceMappingURL=App-DUmziQ17.js.map
1372
+ //# sourceMappingURL=App-D2cVDqQK.js.map