@strapi/content-releases 5.0.0-beta.8 → 5.0.0-rc.0

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 (98) hide show
  1. package/LICENSE +17 -1
  2. package/dist/_chunks/{App-D_6Y9N2F.mjs → App-6gbM0io-.mjs} +215 -255
  3. package/dist/_chunks/App-6gbM0io-.mjs.map +1 -0
  4. package/dist/_chunks/{App-DUmziQ17.js → App-zzUitryC.js} +216 -257
  5. package/dist/_chunks/App-zzUitryC.js.map +1 -0
  6. package/dist/_chunks/SettingsPage-CTOl3Qtw.js +157 -0
  7. package/dist/_chunks/SettingsPage-CTOl3Qtw.js.map +1 -0
  8. package/dist/_chunks/SettingsPage-CuSH193e.mjs +157 -0
  9. package/dist/_chunks/SettingsPage-CuSH193e.mjs.map +1 -0
  10. package/dist/_chunks/{en-DtFJ5ViE.js → en-1_1re1mc.js} +7 -2
  11. package/dist/_chunks/en-1_1re1mc.js.map +1 -0
  12. package/dist/_chunks/{en-B9Ur3VsE.mjs → en-C3sq5KNP.mjs} +7 -2
  13. package/dist/_chunks/en-C3sq5KNP.mjs.map +1 -0
  14. package/dist/_chunks/{index-C5Hc767q.js → index-BxRiXenX.js} +518 -437
  15. package/dist/_chunks/index-BxRiXenX.js.map +1 -0
  16. package/dist/_chunks/{index-BomF0-yY.mjs → index-CuchqQ4_.mjs} +525 -444
  17. package/dist/_chunks/index-CuchqQ4_.mjs.map +1 -0
  18. package/dist/_chunks/validation-schemas-C7P2rhPu.mjs +29 -0
  19. package/dist/_chunks/validation-schemas-C7P2rhPu.mjs.map +1 -0
  20. package/dist/_chunks/validation-schemas-bib1fBc7.js +47 -0
  21. package/dist/_chunks/validation-schemas-bib1fBc7.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/ReleaseModal.d.ts +2 -1
  27. package/dist/admin/src/components/ReleasesPanel.d.ts +3 -0
  28. package/dist/admin/src/pages/SettingsPage.d.ts +1 -0
  29. package/dist/admin/src/services/release.d.ts +37 -32
  30. package/dist/admin/src/utils/time.d.ts +9 -0
  31. package/dist/server/index.js +784 -600
  32. package/dist/server/index.js.map +1 -1
  33. package/dist/server/index.mjs +785 -601
  34. package/dist/server/index.mjs.map +1 -1
  35. package/dist/server/src/bootstrap.d.ts.map +1 -1
  36. package/dist/server/src/constants.d.ts +11 -2
  37. package/dist/server/src/constants.d.ts.map +1 -1
  38. package/dist/server/src/content-types/index.d.ts +3 -5
  39. package/dist/server/src/content-types/index.d.ts.map +1 -1
  40. package/dist/server/src/content-types/release-action/index.d.ts +3 -5
  41. package/dist/server/src/content-types/release-action/index.d.ts.map +1 -1
  42. package/dist/server/src/content-types/release-action/schema.d.ts +3 -5
  43. package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -1
  44. package/dist/server/src/controllers/index.d.ts +6 -3
  45. package/dist/server/src/controllers/index.d.ts.map +1 -1
  46. package/dist/server/src/controllers/release-action.d.ts +0 -1
  47. package/dist/server/src/controllers/release-action.d.ts.map +1 -1
  48. package/dist/server/src/controllers/release.d.ts +7 -2
  49. package/dist/server/src/controllers/release.d.ts.map +1 -1
  50. package/dist/server/src/controllers/settings.d.ts +11 -0
  51. package/dist/server/src/controllers/settings.d.ts.map +1 -0
  52. package/dist/server/src/controllers/validation/release-action.d.ts +7 -1
  53. package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -1
  54. package/dist/server/src/controllers/validation/release.d.ts +1 -0
  55. package/dist/server/src/controllers/validation/release.d.ts.map +1 -1
  56. package/dist/server/src/controllers/validation/settings.d.ts +2 -0
  57. package/dist/server/src/controllers/validation/settings.d.ts.map +1 -0
  58. package/dist/server/src/index.d.ts +66 -51
  59. package/dist/server/src/index.d.ts.map +1 -1
  60. package/dist/server/src/middlewares/documents.d.ts +6 -0
  61. package/dist/server/src/middlewares/documents.d.ts.map +1 -0
  62. package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts +9 -0
  63. package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts.map +1 -0
  64. package/dist/server/src/migrations/index.d.ts.map +1 -1
  65. package/dist/server/src/register.d.ts.map +1 -1
  66. package/dist/server/src/routes/index.d.ts +16 -0
  67. package/dist/server/src/routes/index.d.ts.map +1 -1
  68. package/dist/server/src/routes/release-action.d.ts.map +1 -1
  69. package/dist/server/src/routes/release.d.ts.map +1 -1
  70. package/dist/server/src/routes/settings.d.ts +18 -0
  71. package/dist/server/src/routes/settings.d.ts.map +1 -0
  72. package/dist/server/src/services/index.d.ts +38 -38
  73. package/dist/server/src/services/index.d.ts.map +1 -1
  74. package/dist/server/src/services/release-action.d.ts +36 -0
  75. package/dist/server/src/services/release-action.d.ts.map +1 -0
  76. package/dist/server/src/services/release.d.ts +6 -41
  77. package/dist/server/src/services/release.d.ts.map +1 -1
  78. package/dist/server/src/services/settings.d.ts +13 -0
  79. package/dist/server/src/services/settings.d.ts.map +1 -0
  80. package/dist/server/src/services/validation.d.ts +1 -1
  81. package/dist/server/src/services/validation.d.ts.map +1 -1
  82. package/dist/server/src/utils/index.d.ts +29 -8
  83. package/dist/server/src/utils/index.d.ts.map +1 -1
  84. package/dist/shared/contracts/release-actions.d.ts +6 -5
  85. package/dist/shared/contracts/release-actions.d.ts.map +1 -1
  86. package/dist/shared/contracts/releases.d.ts +6 -5
  87. package/dist/shared/contracts/releases.d.ts.map +1 -1
  88. package/dist/shared/contracts/settings.d.ts +39 -0
  89. package/dist/shared/contracts/settings.d.ts.map +1 -0
  90. package/dist/shared/validation-schemas.d.ts +1 -0
  91. package/dist/shared/validation-schemas.d.ts.map +1 -1
  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
@@ -1,11 +1,11 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
2
  import { useNotification, useAPIErrorHandler, useQueryParams, useTracking, useRBAC, Page, Layouts, Pagination, isFetchError, ConfirmDialog, BackButton, useStrapiApp, Table } from "@strapi/admin/strapi-admin";
3
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-BomF0-yY.mjs";
4
+ import { g as getTimezones, 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 getTimezoneOffset, h as useGetReleaseActionsQuery, i as useUpdateReleaseActionMutation, R as ReleaseActionOptions, j as ReleaseActionMenu, r as releaseApi } from "./index-CuchqQ4_.mjs";
5
5
  import * as React from "react";
6
6
  import { unstable_useDocument } from "@strapi/content-manager/strapi-admin";
7
- import { ModalLayout, ModalHeader, Typography, ModalBody, Flex, Field, TextInput, Box, Checkbox, DatePicker, TimePicker, ModalFooter, Button, Combobox, ComboboxOption, Link, Alert, Main, TabGroup, Tabs, Tab, Divider, TabPanels, TabPanel, EmptyStateLayout, Grid, GridItem, Badge, Menu, LinkButton, SingleSelect, SingleSelectOption, Tr, Td, Tooltip } from "@strapi/design-system";
8
- import { Plus, Pencil, Trash, More, CrossCircle, CheckCircle } from "@strapi/icons";
7
+ import { Modal, Flex, Field, TextInput, Box, Checkbox, Typography, DatePicker, TimePicker, Button, Combobox, ComboboxOption, Link, Alert, Main, Tabs, Divider, EmptyStateLayout, Grid, Badge, MenuItem, Dialog, SimpleMenu, LinkButton, SingleSelect, SingleSelectOption, Tr, Td, Tooltip } from "@strapi/design-system";
8
+ import { Plus, Pencil, Trash, More, CrossCircle, CheckCircle, ArrowsCounterClockwise } from "@strapi/icons";
9
9
  import { EmptyDocuments } from "@strapi/icons/symbols";
10
10
  import format from "date-fns/format";
11
11
  import { utcToZonedTime, zonedTimeToUtc } from "date-fns-tz";
@@ -13,7 +13,7 @@ import { useIntl } from "react-intl";
13
13
  import { styled } from "styled-components";
14
14
  import { intervalToDuration, isPast, formatISO } from "date-fns";
15
15
  import { Formik, Form, useFormikContext } from "formik";
16
- import * as yup from "yup";
16
+ import { R as RELEASE_SCHEMA } from "./validation-schemas-C7P2rhPu.mjs";
17
17
  import { useDispatch } from "react-redux";
18
18
  import { useLicenseLimits } from "@strapi/admin/strapi-admin/ee";
19
19
  const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
@@ -46,28 +46,9 @@ const RelativeTime$1 = React.forwardRef(
46
46
  );
47
47
  }
48
48
  );
49
- const RELEASE_SCHEMA = yup.object().shape({
50
- name: yup.string().trim().required(),
51
- scheduledAt: yup.string().nullable(),
52
- isScheduled: yup.boolean().optional(),
53
- time: yup.string().when("isScheduled", {
54
- is: true,
55
- then: yup.string().trim().required(),
56
- otherwise: yup.string().nullable()
57
- }),
58
- timezone: yup.string().when("isScheduled", {
59
- is: true,
60
- then: yup.string().required().nullable(),
61
- otherwise: yup.string().nullable()
62
- }),
63
- date: yup.string().when("isScheduled", {
64
- is: true,
65
- then: yup.string().required().nullable(),
66
- otherwise: yup.string().nullable()
67
- })
68
- }).required().noUnknown();
69
49
  const ReleaseModal = ({
70
50
  handleClose,
51
+ open,
71
52
  handleSubmit,
72
53
  initialValues,
73
54
  isLoading = false
@@ -91,8 +72,8 @@ const ReleaseModal = ({
91
72
  );
92
73
  return currentTimezone?.value || systemTimezone.value;
93
74
  };
94
- return /* @__PURE__ */ jsxs(ModalLayout, { onClose: handleClose, labelledBy: "title", children: [
95
- /* @__PURE__ */ jsx(ModalHeader, { children: /* @__PURE__ */ jsx(Typography, { id: "title", fontWeight: "bold", textColor: "neutral800", children: formatMessage(
75
+ return /* @__PURE__ */ jsx(Modal.Root, { open, onOpenChange: handleClose, children: /* @__PURE__ */ jsxs(Modal.Content, { children: [
76
+ /* @__PURE__ */ jsx(Modal.Header, { children: /* @__PURE__ */ jsx(Modal.Title, { children: formatMessage(
96
77
  {
97
78
  id: "content-releases.modal.title",
98
79
  defaultMessage: "{isCreatingRelease, select, true {New release} other {Edit release}}"
@@ -117,7 +98,7 @@ const ReleaseModal = ({
117
98
  validateOnChange: false,
118
99
  children: ({ values, errors, handleChange, setFieldValue }) => {
119
100
  return /* @__PURE__ */ jsxs(Form, { children: [
120
- /* @__PURE__ */ jsx(ModalBody, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
101
+ /* @__PURE__ */ jsx(Modal.Body, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
121
102
  /* @__PURE__ */ jsxs(Field.Root, { name: "name", error: errors.name, required: true, children: [
122
103
  /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
123
104
  id: "content-releases.modal.form.input.label.release-name",
@@ -130,10 +111,10 @@ const ReleaseModal = ({
130
111
  Checkbox,
131
112
  {
132
113
  name: "isScheduled",
133
- value: values.isScheduled,
134
- onChange: (event) => {
135
- setFieldValue("isScheduled", event.target.checked);
136
- if (!event.target.checked) {
114
+ checked: values.isScheduled,
115
+ onCheckedChange: (checked) => {
116
+ setFieldValue("isScheduled", checked);
117
+ if (!checked) {
137
118
  setFieldValue("date", null);
138
119
  setFieldValue("time", "");
139
120
  setFieldValue("timezone", null);
@@ -213,34 +194,21 @@ const ReleaseModal = ({
213
194
  /* @__PURE__ */ jsx(TimezoneComponent, { timezoneOptions: timezoneList })
214
195
  ] })
215
196
  ] }) }),
216
- /* @__PURE__ */ jsx(
217
- ModalFooter,
218
- {
219
- startActions: /* @__PURE__ */ jsx(Button, { onClick: handleClose, variant: "tertiary", name: "cancel", children: formatMessage({ id: "cancel", defaultMessage: "Cancel" }) }),
220
- endActions: /* @__PURE__ */ jsx(Button, { name: "submit", loading: isLoading, type: "submit", children: formatMessage(
221
- {
222
- id: "content-releases.modal.form.button.submit",
223
- defaultMessage: "{isCreatingRelease, select, true {Continue} other {Save}}"
224
- },
225
- { isCreatingRelease }
226
- ) })
227
- }
228
- )
197
+ /* @__PURE__ */ jsxs(Modal.Footer, { children: [
198
+ /* @__PURE__ */ jsx(Modal.Close, { children: /* @__PURE__ */ jsx(Button, { variant: "tertiary", name: "cancel", children: formatMessage({ id: "cancel", defaultMessage: "Cancel" }) }) }),
199
+ /* @__PURE__ */ jsx(Button, { name: "submit", loading: isLoading, type: "submit", children: formatMessage(
200
+ {
201
+ id: "content-releases.modal.form.button.submit",
202
+ defaultMessage: "{isCreatingRelease, select, true {Continue} other {Save}}"
203
+ },
204
+ { isCreatingRelease }
205
+ ) })
206
+ ] })
229
207
  ] });
230
208
  }
231
209
  }
232
210
  )
233
- ] });
234
- };
235
- const getTimezones = (selectedDate) => {
236
- const timezoneList = Intl.supportedValuesOf("timeZone").map((timezone) => {
237
- const utcOffset = getTimezoneOffset(timezone, selectedDate);
238
- return { offset: utcOffset, value: `${utcOffset}&${timezone}` };
239
- });
240
- const systemTimezone = timezoneList.find(
241
- (timezone) => timezone.value.split("&")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
242
- );
243
- return { timezoneList, systemTimezone };
211
+ ] }) });
244
212
  };
245
213
  const TimezoneComponent = ({ timezoneOptions }) => {
246
214
  const { values, errors, setFieldValue } = useFormikContext();
@@ -342,7 +310,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
342
310
  }
343
311
  );
344
312
  }
345
- 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, { tag: NavLink, to: `${id}`, isExternal: false, children: /* @__PURE__ */ jsxs(
313
+ 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(
346
314
  Flex,
347
315
  {
348
316
  direction: "column",
@@ -357,7 +325,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
357
325
  gap: 4,
358
326
  children: [
359
327
  /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "start", gap: 1, children: [
360
- /* @__PURE__ */ jsx(Typography, { tag: "h3", variant: "delta", fontWeight: "bold", children: name }),
328
+ /* @__PURE__ */ jsx(Typography, { textColor: "neutral800", tag: "h3", variant: "delta", fontWeight: "bold", children: name }),
361
329
  /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: scheduledAt ? /* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
362
330
  id: "content-releases.pages.Releases.not-scheduled",
363
331
  defaultMessage: "Not scheduled"
@@ -385,7 +353,6 @@ const INITIAL_FORM_VALUES = {
385
353
  timezone: null
386
354
  };
387
355
  const ReleasesPage = () => {
388
- const tabRef = React.useRef(null);
389
356
  const location = useLocation();
390
357
  const [releaseModalShown, setReleaseModalShown] = React.useState(false);
391
358
  const { toggleNotification } = useNotification();
@@ -403,7 +370,6 @@ const ReleasesPage = () => {
403
370
  } = useRBAC(PERMISSIONS);
404
371
  const { isLoading, isSuccess, isError } = response;
405
372
  const activeTab = response?.currentData?.meta?.activeTab || "pending";
406
- const activeTabIndex = ["pending", "done"].indexOf(activeTab);
407
373
  React.useEffect(() => {
408
374
  if (location?.state?.errors) {
409
375
  toggleNotification({
@@ -420,11 +386,6 @@ const ReleasesPage = () => {
420
386
  navigate("", { replace: true, state: null });
421
387
  }
422
388
  }, [formatMessage, location?.state?.errors, navigate, toggleNotification]);
423
- React.useEffect(() => {
424
- if (tabRef.current) {
425
- tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
426
- }
427
- }, [activeTabIndex]);
428
389
  const toggleAddReleaseModal = () => {
429
390
  setReleaseModalShown((prev) => !prev);
430
391
  };
@@ -433,14 +394,14 @@ const ReleasesPage = () => {
433
394
  }
434
395
  const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
435
396
  const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
436
- const handleTabChange = (index) => {
397
+ const handleTabChange = (tabValue) => {
437
398
  setQuery({
438
399
  ...query,
439
400
  page: 1,
440
401
  pageSize: response?.currentData?.meta?.pagination?.pageSize || 16,
441
402
  filters: {
442
403
  releasedAt: {
443
- $notNull: index === 0 ? false : true
404
+ $notNull: tabValue !== "pending"
444
405
  }
445
406
  }
446
407
  });
@@ -524,21 +485,17 @@ const ReleasesPage = () => {
524
485
  })
525
486
  }
526
487
  ),
527
- /* @__PURE__ */ jsxs(
528
- TabGroup,
529
- {
530
- label: formatMessage({
531
- id: "content-releases.pages.Releases.tab-group.label",
532
- defaultMessage: "Releases list"
533
- }),
534
- variant: "simple",
535
- initialSelectedTabIndex: activeTabIndex,
536
- onTabChange: handleTabChange,
537
- ref: tabRef,
538
- children: [
539
- /* @__PURE__ */ jsxs(Box, { paddingBottom: 8, children: [
540
- /* @__PURE__ */ jsxs(Tabs, { children: [
541
- /* @__PURE__ */ jsx(Tab, { children: formatMessage(
488
+ /* @__PURE__ */ jsxs(Tabs.Root, { variant: "simple", onValueChange: handleTabChange, value: activeTab, children: [
489
+ /* @__PURE__ */ jsxs(Box, { paddingBottom: 8, children: [
490
+ /* @__PURE__ */ jsxs(
491
+ Tabs.List,
492
+ {
493
+ "aria-label": formatMessage({
494
+ id: "content-releases.pages.Releases.tab-group.label",
495
+ defaultMessage: "Releases list"
496
+ }),
497
+ children: [
498
+ /* @__PURE__ */ jsx(Tabs.Trigger, { value: "pending", children: formatMessage(
542
499
  {
543
500
  id: "content-releases.pages.Releases.tab.pending",
544
501
  defaultMessage: "Pending ({count})"
@@ -547,34 +504,32 @@ const ReleasesPage = () => {
547
504
  count: totalPendingReleases
548
505
  }
549
506
  ) }),
550
- /* @__PURE__ */ jsx(Tab, { children: formatMessage({
507
+ /* @__PURE__ */ jsx(Tabs.Trigger, { value: "done", children: formatMessage({
551
508
  id: "content-releases.pages.Releases.tab.done",
552
509
  defaultMessage: "Done"
553
510
  }) })
554
- ] }),
555
- /* @__PURE__ */ jsx(Divider, {})
556
- ] }),
557
- /* @__PURE__ */ jsxs(TabPanels, { children: [
558
- /* @__PURE__ */ jsx(TabPanel, { children: /* @__PURE__ */ jsx(
559
- ReleasesGrid,
560
- {
561
- sectionTitle: "pending",
562
- releases: response?.currentData?.data,
563
- isError
564
- }
565
- ) }),
566
- /* @__PURE__ */ jsx(TabPanel, { children: /* @__PURE__ */ jsx(
567
- ReleasesGrid,
568
- {
569
- sectionTitle: "done",
570
- releases: response?.currentData?.data,
571
- isError
572
- }
573
- ) })
574
- ] })
575
- ]
576
- }
577
- ),
511
+ ]
512
+ }
513
+ ),
514
+ /* @__PURE__ */ jsx(Divider, {})
515
+ ] }),
516
+ /* @__PURE__ */ jsx(Tabs.Content, { value: "pending", children: /* @__PURE__ */ jsx(
517
+ ReleasesGrid,
518
+ {
519
+ sectionTitle: "pending",
520
+ releases: response?.currentData?.data,
521
+ isError
522
+ }
523
+ ) }),
524
+ /* @__PURE__ */ jsx(Tabs.Content, { value: "done", children: /* @__PURE__ */ jsx(
525
+ ReleasesGrid,
526
+ {
527
+ sectionTitle: "done",
528
+ releases: response?.currentData?.data,
529
+ isError
530
+ }
531
+ ) })
532
+ ] }),
578
533
  /* @__PURE__ */ jsxs(
579
534
  Pagination.Root,
580
535
  {
@@ -587,9 +542,10 @@ const ReleasesPage = () => {
587
542
  }
588
543
  )
589
544
  ] }) }),
590
- releaseModalShown && /* @__PURE__ */ jsx(
545
+ /* @__PURE__ */ jsx(
591
546
  ReleaseModal,
592
547
  {
548
+ open: releaseModalShown,
593
549
  handleClose: toggleAddReleaseModal,
594
550
  handleSubmit: handleAddRelease,
595
551
  isLoading: isSubmittingForm,
@@ -604,7 +560,7 @@ const ReleaseInfoWrapper = styled(Flex)`
604
560
  border-bottom-left-radius: ${({ theme }) => theme.borderRadius};
605
561
  border-top: 1px solid ${({ theme }) => theme.colors.neutral150};
606
562
  `;
607
- const StyledMenuItem = styled(Menu.Item)`
563
+ const StyledMenuItem = styled(MenuItem)`
608
564
  svg path {
609
565
  fill: ${({ theme, disabled }) => disabled && theme.colors.neutral500};
610
566
  }
@@ -633,42 +589,72 @@ const TrashIcon = styled(Trash)`
633
589
  const TypographyMaxWidth = styled(Typography)`
634
590
  max-width: 300px;
635
591
  `;
636
- const EntryValidationText = ({ action, schema, entry }) => {
592
+ const EntryValidationText = ({ action, schema, entry, status }) => {
637
593
  const { formatMessage } = useIntl();
638
- const { validate } = unstable_useDocument(
594
+ const { validate, isLoading } = unstable_useDocument(
639
595
  {
640
596
  collectionType: schema?.kind ?? "",
641
597
  model: schema?.uid ?? ""
642
598
  },
643
599
  {
644
- skip: !schema
600
+ // 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
601
+ skip: true
645
602
  }
646
603
  );
647
- const errors = validate(entry) ?? {};
648
- if (Object.keys(errors).length > 0) {
649
- const validationErrorsMessages = Object.entries(errors).map(
650
- ([key, value]) => formatMessage(
651
- // @ts-expect-error – TODO: fix this will better checks
652
- { id: `${value.id}.withField`, defaultMessage: value.defaultMessage },
653
- { field: key }
654
- )
655
- ).join(" ");
656
- return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
657
- /* @__PURE__ */ jsx(CrossCircle, { fill: "danger600" }),
658
- /* @__PURE__ */ jsx(Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsx(TypographyMaxWidth, { textColor: "danger600", variant: "omega", fontWeight: "semiBold", ellipsis: true, children: validationErrorsMessages }) })
659
- ] });
604
+ if (isLoading) {
605
+ return null;
660
606
  }
661
- if (action == "publish") {
662
- return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
663
- /* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
664
- entry.publishedAt ? /* @__PURE__ */ jsx(Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
665
- id: "content-releases.pages.ReleaseDetails.entry-validation.already-published",
666
- defaultMessage: "Already published"
667
- }) }) : /* @__PURE__ */ jsx(Typography, { children: formatMessage({
668
- id: "content-releases.pages.ReleaseDetails.entry-validation.ready-to-publish",
669
- defaultMessage: "Ready to publish"
670
- }) })
671
- ] });
607
+ const errors = validate(entry) ?? {};
608
+ if (action === "publish") {
609
+ if (Object.keys(errors).length > 0) {
610
+ const validationErrorsMessages = Object.entries(errors).map(
611
+ ([key, value]) => formatMessage(
612
+ // @ts-expect-error – TODO: fix this will better checks
613
+ { id: `${value.id}.withField`, defaultMessage: value.defaultMessage },
614
+ { field: key }
615
+ )
616
+ ).join(" ");
617
+ return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
618
+ /* @__PURE__ */ jsx(CrossCircle, { fill: "danger600" }),
619
+ /* @__PURE__ */ jsx(Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsx(
620
+ TypographyMaxWidth,
621
+ {
622
+ textColor: "danger600",
623
+ variant: "omega",
624
+ fontWeight: "semiBold",
625
+ ellipsis: true,
626
+ children: validationErrorsMessages
627
+ }
628
+ ) })
629
+ ] });
630
+ }
631
+ if (status === "draft") {
632
+ return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
633
+ /* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
634
+ /* @__PURE__ */ jsx(Typography, { children: formatMessage({
635
+ id: "content-releases.pages.ReleaseDetails.entry-validation.ready-to-publish",
636
+ defaultMessage: "Ready to publish"
637
+ }) })
638
+ ] });
639
+ }
640
+ if (status === "modified") {
641
+ return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
642
+ /* @__PURE__ */ jsx(ArrowsCounterClockwise, { fill: "alternative600" }),
643
+ /* @__PURE__ */ jsx(Typography, { children: formatMessage({
644
+ id: "content-releases.pages.ReleaseDetails.entry-validation.modified",
645
+ defaultMessage: "Ready to publish changes"
646
+ }) })
647
+ ] });
648
+ }
649
+ if (status === "published") {
650
+ return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
651
+ /* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
652
+ /* @__PURE__ */ jsx(Typography, { children: formatMessage({
653
+ id: "content-releases.pages.ReleaseDetails.entry-validation.already-published",
654
+ defaultMessage: "Already published"
655
+ }) })
656
+ ] });
657
+ }
672
658
  }
673
659
  return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
674
660
  /* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
@@ -814,83 +800,71 @@ const ReleaseDetailsLayout = ({
814
800
  ] }),
815
801
  navigationAction: /* @__PURE__ */ jsx(BackButton, {}),
816
802
  primaryAction: !release.releasedAt && /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
817
- /* @__PURE__ */ jsxs(Menu.Root, { children: [
818
- /* @__PURE__ */ jsx(
819
- Menu.Trigger,
820
- {
821
- paddingLeft: 2,
822
- paddingRight: 2,
823
- "aria-label": formatMessage({
824
- id: "content-releases.header.actions.open-release-actions",
825
- defaultMessage: "Release edit and delete menu"
826
- }),
827
- variant: "tertiary",
828
- children: /* @__PURE__ */ jsx(More, {})
829
- }
830
- ),
831
- /* @__PURE__ */ jsxs(Menu.Content, { top: 1, popoverPlacement: "bottom-end", maxHeight: void 0, children: [
832
- /* @__PURE__ */ jsxs(
833
- Flex,
834
- {
835
- alignItems: "center",
836
- justifyContent: "center",
837
- direction: "column",
838
- padding: 1,
839
- width: "100%",
840
- children: [
841
- /* @__PURE__ */ jsx(StyledMenuItem, { disabled: !canUpdate, onSelect: toggleEditReleaseModal, children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
842
- /* @__PURE__ */ jsx(PencilIcon, {}),
843
- /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: formatMessage({
844
- id: "content-releases.header.actions.edit",
845
- defaultMessage: "Edit"
803
+ /* @__PURE__ */ jsxs(
804
+ SimpleMenu,
805
+ {
806
+ label: /* @__PURE__ */ jsx(More, {}),
807
+ variant: "tertiary",
808
+ endIcon: null,
809
+ paddingLeft: 2,
810
+ paddingRight: 2,
811
+ "aria-label": formatMessage({
812
+ id: "content-releases.header.actions.open-release-actions",
813
+ defaultMessage: "Release edit and delete menu"
814
+ }),
815
+ popoverPlacement: "bottom-end",
816
+ children: [
817
+ /* @__PURE__ */ jsx(StyledMenuItem, { disabled: !canUpdate, onSelect: toggleEditReleaseModal, children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
818
+ /* @__PURE__ */ jsx(PencilIcon, {}),
819
+ /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: formatMessage({
820
+ id: "content-releases.header.actions.edit",
821
+ defaultMessage: "Edit"
822
+ }) })
823
+ ] }) }),
824
+ /* @__PURE__ */ jsx(
825
+ StyledMenuItem,
826
+ {
827
+ disabled: !canDelete,
828
+ onSelect: toggleWarningSubmit,
829
+ $variant: "danger",
830
+ children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
831
+ /* @__PURE__ */ jsx(TrashIcon, {}),
832
+ /* @__PURE__ */ jsx(Typography, { ellipsis: true, textColor: "danger600", children: formatMessage({
833
+ id: "content-releases.header.actions.delete",
834
+ defaultMessage: "Delete"
846
835
  }) })
847
- ] }) }),
848
- /* @__PURE__ */ jsx(
849
- StyledMenuItem,
850
- {
851
- disabled: !canDelete,
852
- onSelect: toggleWarningSubmit,
853
- $variant: "danger",
854
- children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
855
- /* @__PURE__ */ jsx(TrashIcon, {}),
856
- /* @__PURE__ */ jsx(Typography, { ellipsis: true, textColor: "danger600", children: formatMessage({
857
- id: "content-releases.header.actions.delete",
858
- defaultMessage: "Delete"
859
- }) })
860
- ] })
861
- }
862
- )
863
- ]
864
- }
865
- ),
866
- /* @__PURE__ */ jsxs(
867
- ReleaseInfoWrapper,
868
- {
869
- direction: "column",
870
- justifyContent: "center",
871
- alignItems: "flex-start",
872
- gap: 1,
873
- padding: 5,
874
- children: [
875
- /* @__PURE__ */ jsx(Typography, { variant: "pi", fontWeight: "bold", children: formatMessage({
876
- id: "content-releases.header.actions.created",
877
- defaultMessage: "Created"
878
- }) }),
879
- /* @__PURE__ */ jsxs(Typography, { variant: "pi", color: "neutral300", children: [
880
- /* @__PURE__ */ jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
881
- formatMessage(
882
- {
883
- id: "content-releases.header.actions.created.description",
884
- defaultMessage: "{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}"
885
- },
886
- { createdBy: getCreatedByUser(), hasCreatedByUser }
887
- )
888
836
  ] })
889
- ]
890
- }
891
- )
892
- ] })
893
- ] }),
837
+ }
838
+ ),
839
+ /* @__PURE__ */ jsxs(
840
+ ReleaseInfoWrapper,
841
+ {
842
+ direction: "column",
843
+ justifyContent: "center",
844
+ alignItems: "flex-start",
845
+ gap: 1,
846
+ padding: 5,
847
+ children: [
848
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", fontWeight: "bold", children: formatMessage({
849
+ id: "content-releases.header.actions.created",
850
+ defaultMessage: "Created"
851
+ }) }),
852
+ /* @__PURE__ */ jsxs(Typography, { variant: "pi", color: "neutral300", children: [
853
+ /* @__PURE__ */ jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
854
+ formatMessage(
855
+ {
856
+ id: "content-releases.header.actions.created.description",
857
+ defaultMessage: "{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}"
858
+ },
859
+ { createdBy: getCreatedByUser(), hasCreatedByUser }
860
+ )
861
+ ] })
862
+ ]
863
+ }
864
+ )
865
+ ]
866
+ }
867
+ ),
894
868
  /* @__PURE__ */ jsx(Button, { size: "S", variant: "tertiary", onClick: handleRefresh, children: formatMessage({
895
869
  id: "content-releases.header.actions.refresh",
896
870
  defaultMessage: "Refresh"
@@ -949,19 +923,18 @@ const ReleaseDetailsBody = ({ releaseId }) => {
949
923
  allowedActions: { canUpdate }
950
924
  } = useRBAC(PERMISSIONS);
951
925
  const runHookWaterfall = useStrapiApp("ReleaseDetailsPage", (state) => state.runHookWaterfall);
952
- const { hasI18nEnabled } = runHookWaterfall(
953
- "ContentReleases/pages/ReleaseDetails/add-locale-in-releases",
954
- {
955
- displayedHeaders: {
956
- label: formatMessage({
957
- id: "content-releases.page.ReleaseDetails.table.header.label.locale",
958
- defaultMessage: "locale"
959
- }),
960
- name: "locale"
961
- },
962
- hasI18nEnabled: false
963
- }
964
- );
926
+ const { displayedHeaders, hasI18nEnabled } = runHookWaterfall("ContentReleases/pages/ReleaseDetails/add-locale-in-releases", {
927
+ displayedHeaders: [
928
+ {
929
+ label: {
930
+ id: "content-releases.page.ReleaseDetails.table.header.label.name",
931
+ defaultMessage: "name"
932
+ },
933
+ name: "name"
934
+ }
935
+ ],
936
+ hasI18nEnabled: false
937
+ });
965
938
  const release = releaseData?.data;
966
939
  const selectedGroupBy = query?.groupBy || "contentType";
967
940
  const {
@@ -1067,34 +1040,27 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1067
1040
  defaultMessage: "Group by"
1068
1041
  });
1069
1042
  const headers = [
1070
- // ...displayedHeaders,
1043
+ ...displayedHeaders,
1071
1044
  {
1072
- label: formatMessage({
1073
- id: "content-releases.page.ReleaseDetails.table.header.label.name",
1074
- defaultMessage: "name"
1075
- }),
1076
- name: "name"
1077
- },
1078
- {
1079
- label: formatMessage({
1045
+ label: {
1080
1046
  id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
1081
1047
  defaultMessage: "content-type"
1082
- }),
1048
+ },
1083
1049
  name: "content-type"
1084
1050
  },
1085
1051
  {
1086
- label: formatMessage({
1052
+ label: {
1087
1053
  id: "content-releases.page.ReleaseDetails.table.header.label.action",
1088
1054
  defaultMessage: "action"
1089
- }),
1055
+ },
1090
1056
  name: "action"
1091
1057
  },
1092
1058
  ...!release.releasedAt ? [
1093
1059
  {
1094
- label: formatMessage({
1060
+ label: {
1095
1061
  id: "content-releases.page.ReleaseDetails.table.header.label.status",
1096
1062
  defaultMessage: "status"
1097
- }),
1063
+ },
1098
1064
  name: "status"
1099
1065
  }
1100
1066
  ] : []
@@ -1132,10 +1098,10 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1132
1098
  headers,
1133
1099
  isLoading: isLoading || isFetching,
1134
1100
  children: /* @__PURE__ */ jsxs(Table.Content, { children: [
1135
- /* @__PURE__ */ jsx(Table.Head, { children: headers.map((header) => /* @__PURE__ */ jsx(Table.HeaderCell, { ...header }, header.name)) }),
1101
+ /* @__PURE__ */ jsx(Table.Head, { children: headers.map(({ label, name }) => /* @__PURE__ */ jsx(Table.HeaderCell, { label: formatMessage(label), name }, name)) }),
1136
1102
  /* @__PURE__ */ jsx(Table.Loading, {}),
1137
1103
  /* @__PURE__ */ jsx(Table.Body, { children: releaseActions[key].map(
1138
- ({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
1104
+ ({ id, contentType, locale, type, entry, status }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
1139
1105
  /* @__PURE__ */ jsx(Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
1140
1106
  hasI18nEnabled && /* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
1141
1107
  /* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: contentType.displayName || "" }) }),
@@ -1164,7 +1130,8 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1164
1130
  action: type,
1165
1131
  schema: contentTypes?.[contentType.uid],
1166
1132
  components,
1167
- entry
1133
+ entry,
1134
+ status
1168
1135
  }
1169
1136
  ) }),
1170
1137
  /* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsx(Flex, { justifyContent: "flex-end", children: /* @__PURE__ */ jsxs(ReleaseActionMenu.Root, { children: [
@@ -1172,7 +1139,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
1172
1139
  ReleaseActionMenu.ReleaseActionEntryLinkItem,
1173
1140
  {
1174
1141
  contentTypeUid: contentType.uid,
1175
- entryId: entry.id,
1142
+ documentId: entry.documentId,
1176
1143
  locale: locale?.code
1177
1144
  }
1178
1145
  ),
@@ -1300,9 +1267,10 @@ const ReleaseDetailsPage = () => {
1300
1267
  toggleWarningSubmit,
1301
1268
  children: [
1302
1269
  /* @__PURE__ */ jsx(ReleaseDetailsBody, { releaseId }),
1303
- releaseModalShown && /* @__PURE__ */ jsx(
1270
+ /* @__PURE__ */ jsx(
1304
1271
  ReleaseModal,
1305
1272
  {
1273
+ open: releaseModalShown,
1306
1274
  handleClose: toggleEditReleaseModal,
1307
1275
  handleSubmit: handleEditRelease,
1308
1276
  isLoading: isLoadingDetails || isSubmittingForm,
@@ -1316,18 +1284,10 @@ const ReleaseDetailsPage = () => {
1316
1284
  }
1317
1285
  }
1318
1286
  ),
1319
- /* @__PURE__ */ jsx(
1320
- ConfirmDialog,
1321
- {
1322
- isOpen: showWarningSubmit,
1323
- onClose: toggleWarningSubmit,
1324
- onConfirm: handleDeleteRelease,
1325
- children: formatMessage({
1326
- id: "content-releases.dialog.confirmation-message",
1327
- defaultMessage: "Are you sure you want to delete this release?"
1328
- })
1329
- }
1330
- )
1287
+ /* @__PURE__ */ jsx(Dialog.Root, { open: showWarningSubmit, onOpenChange: toggleWarningSubmit, children: /* @__PURE__ */ jsx(ConfirmDialog, { onConfirm: handleDeleteRelease, children: formatMessage({
1288
+ id: "content-releases.dialog.confirmation-message",
1289
+ defaultMessage: "Are you sure you want to delete this release?"
1290
+ }) }) })
1331
1291
  ]
1332
1292
  }
1333
1293
  );
@@ -1341,4 +1301,4 @@ const App = () => {
1341
1301
  export {
1342
1302
  App
1343
1303
  };
1344
- //# sourceMappingURL=App-D_6Y9N2F.mjs.map
1304
+ //# sourceMappingURL=App-6gbM0io-.mjs.map