@strapi/content-releases 0.0.0-experimental.d8a676a242377cee820b59b21a05d47290d9ac73 → 0.0.0-experimental.e3e48deb89bd0a1b6cc69b698696566fa7854a95

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 (93) hide show
  1. package/dist/_chunks/{App-bpzO2Ljh.mjs → App-PQlYzNfb.mjs} +181 -167
  2. package/dist/_chunks/App-PQlYzNfb.mjs.map +1 -0
  3. package/dist/_chunks/{App-p8aKBitd.js → App-lzeJz92X.js} +179 -165
  4. package/dist/_chunks/App-lzeJz92X.js.map +1 -0
  5. package/dist/_chunks/{index-AECgcaDa.mjs → index--4AgLDzb.mjs} +20 -26
  6. package/dist/_chunks/index--4AgLDzb.mjs.map +1 -0
  7. package/dist/_chunks/{index-fP3qoWZ4.js → index-Nf1JfI-m.js} +16 -22
  8. package/dist/_chunks/index-Nf1JfI-m.js.map +1 -0
  9. package/dist/admin/index.js +1 -1
  10. package/dist/admin/index.mjs +1 -1
  11. package/dist/admin/src/components/CMReleasesContainer.d.ts +1 -0
  12. package/dist/admin/src/components/RelativeTime.d.ts +28 -0
  13. package/dist/admin/src/components/ReleaseActionMenu.d.ts +26 -0
  14. package/dist/admin/src/components/ReleaseActionOptions.d.ts +9 -0
  15. package/dist/admin/src/components/ReleaseModal.d.ts +16 -0
  16. package/dist/admin/src/constants.d.ts +58 -0
  17. package/dist/admin/src/index.d.ts +3 -0
  18. package/dist/admin/src/pages/App.d.ts +1 -0
  19. package/dist/admin/src/pages/PurchaseContentReleases.d.ts +2 -0
  20. package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +2 -0
  21. package/dist/admin/src/pages/ReleasesPage.d.ts +8 -0
  22. package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +181 -0
  23. package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +39 -0
  24. package/dist/admin/src/pluginId.d.ts +1 -0
  25. package/dist/admin/src/services/axios.d.ts +29 -0
  26. package/dist/admin/src/services/release.d.ts +369 -0
  27. package/dist/admin/src/store/hooks.d.ts +7 -0
  28. package/dist/admin/src/utils/time.d.ts +1 -0
  29. package/dist/server/index.js +92 -171
  30. package/dist/server/index.js.map +1 -1
  31. package/dist/server/index.mjs +93 -171
  32. package/dist/server/index.mjs.map +1 -1
  33. package/dist/server/src/bootstrap.d.ts +5 -0
  34. package/dist/server/src/bootstrap.d.ts.map +1 -0
  35. package/dist/server/src/constants.d.ts +12 -0
  36. package/dist/server/src/constants.d.ts.map +1 -0
  37. package/dist/server/src/content-types/index.d.ts +99 -0
  38. package/dist/server/src/content-types/index.d.ts.map +1 -0
  39. package/dist/server/src/content-types/release/index.d.ts +48 -0
  40. package/dist/server/src/content-types/release/index.d.ts.map +1 -0
  41. package/dist/server/src/content-types/release/schema.d.ts +47 -0
  42. package/dist/server/src/content-types/release/schema.d.ts.map +1 -0
  43. package/dist/server/src/content-types/release-action/index.d.ts +50 -0
  44. package/dist/server/src/content-types/release-action/index.d.ts.map +1 -0
  45. package/dist/server/src/content-types/release-action/schema.d.ts +49 -0
  46. package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -0
  47. package/dist/server/src/controllers/index.d.ts +18 -0
  48. package/dist/server/src/controllers/index.d.ts.map +1 -0
  49. package/dist/server/src/controllers/release-action.d.ts +9 -0
  50. package/dist/server/src/controllers/release-action.d.ts.map +1 -0
  51. package/dist/server/src/controllers/release.d.ts +11 -0
  52. package/dist/server/src/controllers/release.d.ts.map +1 -0
  53. package/dist/server/src/controllers/validation/release-action.d.ts +3 -0
  54. package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -0
  55. package/dist/server/src/controllers/validation/release.d.ts +2 -0
  56. package/dist/server/src/controllers/validation/release.d.ts.map +1 -0
  57. package/dist/server/src/destroy.d.ts +5 -0
  58. package/dist/server/src/destroy.d.ts.map +1 -0
  59. package/dist/server/src/index.d.ts +2092 -0
  60. package/dist/server/src/index.d.ts.map +1 -0
  61. package/dist/server/src/migrations/index.d.ts +10 -0
  62. package/dist/server/src/migrations/index.d.ts.map +1 -0
  63. package/dist/server/src/register.d.ts +5 -0
  64. package/dist/server/src/register.d.ts.map +1 -0
  65. package/dist/server/src/routes/index.d.ts +35 -0
  66. package/dist/server/src/routes/index.d.ts.map +1 -0
  67. package/dist/server/src/routes/release-action.d.ts +18 -0
  68. package/dist/server/src/routes/release-action.d.ts.map +1 -0
  69. package/dist/server/src/routes/release.d.ts +18 -0
  70. package/dist/server/src/routes/release.d.ts.map +1 -0
  71. package/dist/server/src/services/index.d.ts +1826 -0
  72. package/dist/server/src/services/index.d.ts.map +1 -0
  73. package/dist/server/src/services/release.d.ts +66 -0
  74. package/dist/server/src/services/release.d.ts.map +1 -0
  75. package/dist/server/src/services/scheduling.d.ts +18 -0
  76. package/dist/server/src/services/scheduling.d.ts.map +1 -0
  77. package/dist/server/src/services/validation.d.ts +14 -0
  78. package/dist/server/src/services/validation.d.ts.map +1 -0
  79. package/dist/server/src/utils/index.d.ts +14 -0
  80. package/dist/server/src/utils/index.d.ts.map +1 -0
  81. package/dist/shared/contracts/release-actions.d.ts +105 -0
  82. package/dist/shared/contracts/release-actions.d.ts.map +1 -0
  83. package/dist/shared/contracts/releases.d.ts +166 -0
  84. package/dist/shared/contracts/releases.d.ts.map +1 -0
  85. package/dist/shared/types.d.ts +24 -0
  86. package/dist/shared/types.d.ts.map +1 -0
  87. package/dist/shared/validation-schemas.d.ts +2 -0
  88. package/dist/shared/validation-schemas.d.ts.map +1 -0
  89. package/package.json +14 -21
  90. package/dist/_chunks/App-bpzO2Ljh.mjs.map +0 -1
  91. package/dist/_chunks/App-p8aKBitd.js.map +0 -1
  92. package/dist/_chunks/index-AECgcaDa.mjs.map +0 -1
  93. package/dist/_chunks/index-fP3qoWZ4.js.map +0 -1
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
- const helperPlugin = require("@strapi/helper-plugin");
4
+ const strapiAdmin = require("@strapi/admin/strapi-admin");
5
5
  const reactRouterDom = require("react-router-dom");
6
- const index = require("./index-fP3qoWZ4.js");
6
+ const index = require("./index-Nf1JfI-m.js");
7
7
  const React = require("react");
8
- const strapiAdmin = require("@strapi/admin/strapi-admin");
9
8
  const designSystem = require("@strapi/design-system");
10
9
  const v2 = require("@strapi/design-system/v2");
10
+ const helperPlugin = require("@strapi/helper-plugin");
11
11
  const icons = require("@strapi/icons");
12
12
  const format = require("date-fns/format");
13
13
  const dateFnsTz = require("date-fns-tz");
@@ -43,6 +43,36 @@ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
43
43
  const format__default = /* @__PURE__ */ _interopDefault(format);
44
44
  const styled__default = /* @__PURE__ */ _interopDefault(styled);
45
45
  const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
46
+ const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
47
+ const RelativeTime = React__namespace.forwardRef(
48
+ ({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {
49
+ const { formatRelativeTime, formatDate, formatTime } = reactIntl.useIntl();
50
+ const interval = dateFns.intervalToDuration({
51
+ start: timestamp,
52
+ end: Date.now()
53
+ // see https://github.com/date-fns/date-fns/issues/2891 – No idea why it's all partial it returns it every time.
54
+ });
55
+ const unit = intervals.find((intervalUnit) => {
56
+ return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
57
+ });
58
+ const relativeTime = dateFns.isPast(timestamp) ? -interval[unit] : interval[unit];
59
+ const customInterval = customIntervals.find(
60
+ (custom) => interval[custom.unit] < custom.threshold
61
+ );
62
+ const displayText = customInterval ? customInterval.text : formatRelativeTime(relativeTime, unit, { numeric: "auto" });
63
+ return /* @__PURE__ */ jsxRuntime.jsx(
64
+ "time",
65
+ {
66
+ ref: forwardedRef,
67
+ dateTime: timestamp.toISOString(),
68
+ role: "time",
69
+ title: `${formatDate(timestamp)} ${formatTime(timestamp)}`,
70
+ ...restProps,
71
+ children: displayText
72
+ }
73
+ );
74
+ }
75
+ );
46
76
  const RELEASE_SCHEMA = yup__namespace.object().shape({
47
77
  name: yup__namespace.string().trim().required(),
48
78
  scheduledAt: yup__namespace.string().nullable(),
@@ -81,12 +111,12 @@ const ReleaseModal = ({
81
111
  if (!date || !time || !timezone)
82
112
  return null;
83
113
  const formattedDate = dateFns.parse(time, "HH:mm", new Date(date));
84
- const timezoneWithoutOffset = timezone.split("&")[1];
114
+ const timezoneWithoutOffset = timezone.split("_")[1];
85
115
  return dateFnsTz.zonedTimeToUtc(formattedDate, timezoneWithoutOffset);
86
116
  };
87
117
  const getTimezoneWithOffset = () => {
88
118
  const currentTimezone = timezoneList.find(
89
- (timezone) => timezone.value.split("&")[1] === initialValues.timezone
119
+ (timezone) => timezone.value.split("_")[1] === initialValues.timezone
90
120
  );
91
121
  return currentTimezone?.value || systemTimezone.value;
92
122
  };
@@ -104,7 +134,7 @@ const ReleaseModal = ({
104
134
  onSubmit: (values) => {
105
135
  handleSubmit({
106
136
  ...values,
107
- timezone: values.timezone ? values.timezone.split("&")[1] : null,
137
+ timezone: values.timezone ? values.timezone.split("_")[1] : null,
108
138
  scheduledAt: values.isScheduled ? getScheduledTimestamp(values) : null
109
139
  });
110
140
  },
@@ -187,8 +217,7 @@ const ReleaseModal = ({
187
217
  setFieldValue("date", null);
188
218
  },
189
219
  selectedDate: values.date || void 0,
190
- required: true,
191
- minDate: dateFnsTz.utcToZonedTime(/* @__PURE__ */ new Date(), values.timezone.split("&")[1])
220
+ required: true
192
221
  }
193
222
  ) }),
194
223
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -240,10 +269,10 @@ const ReleaseModal = ({
240
269
  const getTimezones = (selectedDate) => {
241
270
  const timezoneList = Intl.supportedValuesOf("timeZone").map((timezone) => {
242
271
  const utcOffset = index.getTimezoneOffset(timezone, selectedDate);
243
- return { offset: utcOffset, value: `${utcOffset}&${timezone}` };
272
+ return { offset: utcOffset, value: `${utcOffset}_${timezone}` };
244
273
  });
245
274
  const systemTimezone = timezoneList.find(
246
- (timezone) => timezone.value.split("&")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
275
+ (timezone) => timezone.value.split("_")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
247
276
  );
248
277
  return { timezoneList, systemTimezone };
249
278
  };
@@ -255,7 +284,7 @@ const TimezoneComponent = ({ timezoneOptions }) => {
255
284
  if (values.date) {
256
285
  const { timezoneList: timezoneList2 } = getTimezones(new Date(values.date));
257
286
  setTimezoneList(timezoneList2);
258
- const updatedTimezone = values.timezone && timezoneList2.find((tz) => tz.value.split("&")[1] === values.timezone.split("&")[1]);
287
+ const updatedTimezone = values.timezone && timezoneList2.find((tz) => tz.value.split("_")[1] === values.timezone.split("_")[1]);
259
288
  if (updatedTimezone) {
260
289
  setFieldValue("timezone", updatedTimezone.value);
261
290
  }
@@ -268,10 +297,9 @@ const TimezoneComponent = ({ timezoneOptions }) => {
268
297
  id: "content-releases.modal.form.input.label.timezone",
269
298
  defaultMessage: "Timezone"
270
299
  }),
271
- autocomplete: { type: "list", filter: "contains" },
272
300
  name: "timezone",
273
301
  value: values.timezone || void 0,
274
- textValue: values.timezone ? values.timezone.replace(/&/, " ") : void 0,
302
+ textValue: values.timezone ? values.timezone.replace("_", " ") : void 0,
275
303
  onChange: (timezone) => {
276
304
  setFieldValue("timezone", timezone);
277
305
  },
@@ -283,14 +311,14 @@ const TimezoneComponent = ({ timezoneOptions }) => {
283
311
  },
284
312
  error: errors.timezone,
285
313
  required: true,
286
- children: timezoneList.map((timezone) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.ComboboxOption, { value: timezone.value, children: timezone.value.replace(/&/, " ") }, timezone.value))
314
+ children: timezoneList.map((timezone) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.ComboboxOption, { value: timezone.value, children: timezone.value.replace("_", " ") }, timezone.value))
287
315
  }
288
316
  );
289
317
  };
290
318
  const LinkCard = styled__default.default(v2.Link)`
291
319
  display: block;
292
320
  `;
293
- const CapitalizeRelativeTime = styled__default.default(helperPlugin.RelativeTime)`
321
+ const CapitalizeRelativeTime = styled__default.default(RelativeTime)`
294
322
  text-transform: capitalize;
295
323
  `;
296
324
  const getBadgeProps = (status) => {
@@ -322,7 +350,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
322
350
  const { formatMessage } = reactIntl.useIntl();
323
351
  const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
324
352
  if (isError) {
325
- return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.AnErrorOccurred, {});
353
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
326
354
  }
327
355
  if (releases?.length === 0) {
328
356
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -396,7 +424,7 @@ const ReleasesPage = () => {
396
424
  const [releaseModalShown, setReleaseModalShown] = React__namespace.useState(false);
397
425
  const toggleNotification = helperPlugin.useNotification();
398
426
  const { formatMessage } = reactIntl.useIntl();
399
- const { push, replace } = reactRouterDom.useHistory();
427
+ const navigate = reactRouterDom.useNavigate();
400
428
  const { formatAPIError } = helperPlugin.useAPIErrorHandler();
401
429
  const [{ query }, setQuery] = helperPlugin.useQueryParams();
402
430
  const response = index.useGetReleasesQuery(query);
@@ -420,9 +448,9 @@ const ReleasesPage = () => {
420
448
  defaultMessage: "Please try again or open another release."
421
449
  })
422
450
  });
423
- replace({ state: null });
451
+ navigate("", { replace: true, state: null });
424
452
  }
425
- }, [formatMessage, location?.state?.errors, replace, toggleNotification]);
453
+ }, [formatMessage, location?.state?.errors, navigate, toggleNotification]);
426
454
  React__namespace.useEffect(() => {
427
455
  if (tabRef.current) {
428
456
  tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
@@ -432,7 +460,7 @@ const ReleasesPage = () => {
432
460
  setReleaseModalShown((prev) => !prev);
433
461
  };
434
462
  if (isLoading) {
435
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Main, { "aria-busy": isLoading, children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
463
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
436
464
  }
437
465
  const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
438
466
  const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
@@ -463,7 +491,7 @@ const ReleasesPage = () => {
463
491
  })
464
492
  });
465
493
  trackUsage("didCreateRelease");
466
- push(`/plugins/content-releases/${response2.data.data.id}`);
494
+ navigate(response2.data.data.id.toString());
467
495
  } else if (index.isAxiosError(response2.error)) {
468
496
  toggleNotification({
469
497
  type: "warning",
@@ -578,23 +606,17 @@ const ReleasesPage = () => {
578
606
  ]
579
607
  }
580
608
  ),
581
- response.currentData?.meta?.pagination?.total ? /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
582
- /* @__PURE__ */ jsxRuntime.jsx(
583
- helperPlugin.PageSizeURLQuery,
584
- {
585
- options: ["8", "16", "32", "64"],
586
- defaultValue: response?.currentData?.meta?.pagination?.pageSize.toString()
587
- }
588
- ),
589
- /* @__PURE__ */ jsxRuntime.jsx(
590
- helperPlugin.PaginationURLQuery,
591
- {
592
- pagination: {
593
- pageCount: response?.currentData?.meta?.pagination?.pageCount || 0
594
- }
595
- }
596
- )
597
- ] }) : null
609
+ /* @__PURE__ */ jsxRuntime.jsxs(
610
+ strapiAdmin.Pagination.Root,
611
+ {
612
+ ...response?.currentData?.meta?.pagination,
613
+ defaultPageSize: response?.currentData?.meta?.pagination?.pageSize,
614
+ children: [
615
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.PageSize, { options: ["8", "16", "32", "64"] }),
616
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.Links, {})
617
+ ]
618
+ }
619
+ )
598
620
  ] }) }),
599
621
  releaseModalShown && /* @__PURE__ */ jsxRuntime.jsx(
600
622
  ReleaseModal,
@@ -642,14 +664,18 @@ const TrashIcon = styled__default.default(icons.Trash)`
642
664
  const TypographyMaxWidth = styled__default.default(designSystem.Typography)`
643
665
  max-width: 300px;
644
666
  `;
645
- const EntryValidationText = ({ action, schema, components, entry }) => {
667
+ const EntryValidationText = ({ action, schema, entry }) => {
646
668
  const { formatMessage } = reactIntl.useIntl();
647
- const { validate } = strapiAdmin.unstable_useDocument();
648
- const { errors } = validate(entry, {
649
- contentType: schema,
650
- components,
651
- isCreatingEntry: false
652
- });
669
+ const { validate } = strapiAdmin.unstable_useDocument(
670
+ {
671
+ collectionType: schema?.kind ?? "",
672
+ model: schema?.uid ?? ""
673
+ },
674
+ {
675
+ skip: !schema
676
+ }
677
+ );
678
+ const errors = validate(entry) ?? {};
653
679
  if (Object.keys(errors).length > 0) {
654
680
  const validationErrorsMessages = Object.entries(errors).map(
655
681
  ([key, value]) => formatMessage(
@@ -697,7 +723,12 @@ const ReleaseDetailsLayout = ({
697
723
  isLoading: isLoadingDetails,
698
724
  isError,
699
725
  error
700
- } = index.useGetReleaseQuery({ id: releaseId });
726
+ } = index.useGetReleaseQuery(
727
+ { id: releaseId },
728
+ {
729
+ skip: !releaseId
730
+ }
731
+ );
701
732
  const [publishRelease, { isLoading: isPublishing }] = index.usePublishReleaseMutation();
702
733
  const toggleNotification = helperPlugin.useNotification();
703
734
  const { formatAPIError } = helperPlugin.useAPIErrorHandler();
@@ -707,8 +738,8 @@ const ReleaseDetailsLayout = ({
707
738
  const dispatch = index.useTypedDispatch();
708
739
  const { trackUsage } = helperPlugin.useTracking();
709
740
  const release = data?.data;
710
- const handlePublishRelease = async () => {
711
- const response = await publishRelease({ id: releaseId });
741
+ const handlePublishRelease = (id) => async () => {
742
+ const response = await publishRelease({ id });
712
743
  if ("data" in response) {
713
744
  toggleNotification({
714
745
  type: "success",
@@ -751,21 +782,19 @@ const ReleaseDetailsLayout = ({
751
782
  return release.createdBy.email;
752
783
  };
753
784
  if (isLoadingDetails) {
754
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Main, { "aria-busy": isLoadingDetails, children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
785
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
755
786
  }
756
787
  if (isError || !release) {
757
788
  return /* @__PURE__ */ jsxRuntime.jsx(
758
- reactRouterDom.Redirect,
789
+ reactRouterDom.Navigate,
759
790
  {
760
- to: {
761
- pathname: "/plugins/content-releases",
762
- state: {
763
- errors: [
764
- {
765
- code: error?.code
766
- }
767
- ]
768
- }
791
+ to: "..",
792
+ state: {
793
+ errors: [
794
+ {
795
+ code: error?.code
796
+ }
797
+ ]
769
798
  }
770
799
  }
771
800
  );
@@ -810,10 +839,7 @@ const ReleaseDetailsLayout = ({
810
839
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (IsSchedulingEnabled && isScheduled ? ` - ${scheduledText}` : "") }),
811
840
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { ...getBadgeProps(release.status), children: release.status })
812
841
  ] }),
813
- navigationAction: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Link, { startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.ArrowLeft, {}), to: "/plugins/content-releases", children: formatMessage({
814
- id: "global.back",
815
- defaultMessage: "Back"
816
- }) }),
842
+ navigationAction: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.BackButton, {}),
817
843
  primaryAction: !release.releasedAt && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
818
844
  /* @__PURE__ */ jsxRuntime.jsxs(v2.Menu.Root, { children: [
819
845
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -879,7 +905,7 @@ const ReleaseDetailsLayout = ({
879
905
  defaultMessage: "Created"
880
906
  }) }),
881
907
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", color: "neutral300", children: [
882
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.RelativeTime, { timestamp: new Date(release.createdAt) }),
908
+ /* @__PURE__ */ jsxRuntime.jsx(RelativeTime, { timestamp: new Date(release.createdAt) }),
883
909
  formatMessage(
884
910
  {
885
911
  id: "content-releases.header.actions.created.description",
@@ -902,7 +928,7 @@ const ReleaseDetailsLayout = ({
902
928
  {
903
929
  size: "S",
904
930
  variant: "default",
905
- onClick: handlePublishRelease,
931
+ onClick: handlePublishRelease(release.id.toString()),
906
932
  loading: isPublishing,
907
933
  disabled: release.actions.meta.count === 0,
908
934
  children: formatMessage({
@@ -936,9 +962,8 @@ const getGroupByOptionLabel = (value) => {
936
962
  defaultMessage: "Content-Types"
937
963
  };
938
964
  };
939
- const ReleaseDetailsBody = () => {
965
+ const ReleaseDetailsBody = ({ releaseId }) => {
940
966
  const { formatMessage } = reactIntl.useIntl();
941
- const { releaseId } = reactRouterDom.useParams();
942
967
  const [{ query }, setQuery] = helperPlugin.useQueryParams();
943
968
  const toggleNotification = helperPlugin.useNotification();
944
969
  const { formatAPIError } = helperPlugin.useAPIErrorHandler();
@@ -993,7 +1018,7 @@ const ReleaseDetailsBody = () => {
993
1018
  }
994
1019
  };
995
1020
  if (isLoading || isReleaseLoading) {
996
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
1021
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
997
1022
  }
998
1023
  const releaseActions = data?.data;
999
1024
  const releaseMeta = data?.meta;
@@ -1012,28 +1037,22 @@ const ReleaseDetailsBody = () => {
1012
1037
  });
1013
1038
  }
1014
1039
  return /* @__PURE__ */ jsxRuntime.jsx(
1015
- reactRouterDom.Redirect,
1040
+ reactRouterDom.Navigate,
1016
1041
  {
1017
- to: {
1018
- pathname: "/plugins/content-releases",
1019
- state: {
1020
- errors: errorsArray
1021
- }
1042
+ to: "..",
1043
+ state: {
1044
+ errors: errorsArray
1022
1045
  }
1023
1046
  }
1024
1047
  );
1025
1048
  }
1026
1049
  if (isError || !releaseActions) {
1027
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.AnErrorOccurred, {}) });
1050
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
1028
1051
  }
1029
1052
  if (Object.keys(releaseActions).length === 0) {
1030
1053
  return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(
1031
- helperPlugin.NoContent,
1054
+ designSystem.EmptyStateLayout,
1032
1055
  {
1033
- content: {
1034
- id: "content-releases.pages.Details.tab.emptyEntries",
1035
- defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
1036
- },
1037
1056
  action: /* @__PURE__ */ jsxRuntime.jsx(
1038
1057
  v2.LinkButton,
1039
1058
  {
@@ -1048,10 +1067,54 @@ const ReleaseDetailsBody = () => {
1048
1067
  defaultMessage: "Open the Content Manager"
1049
1068
  })
1050
1069
  }
1051
- )
1070
+ ),
1071
+ icon: /* @__PURE__ */ jsxRuntime.jsx(icons.EmptyDocuments, { width: "10rem" }),
1072
+ content: formatMessage({
1073
+ id: "content-releases.pages.Details.tab.emptyEntries",
1074
+ defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
1075
+ })
1052
1076
  }
1053
1077
  ) });
1054
1078
  }
1079
+ const headers = [
1080
+ {
1081
+ label: formatMessage({
1082
+ id: "content-releases.page.ReleaseDetails.table.header.label.name",
1083
+ defaultMessage: "name"
1084
+ }),
1085
+ name: "name"
1086
+ },
1087
+ {
1088
+ label: formatMessage({
1089
+ id: "content-releases.page.ReleaseDetails.table.header.label.locale",
1090
+ defaultMessage: "locale"
1091
+ }),
1092
+ name: "locale"
1093
+ },
1094
+ {
1095
+ label: formatMessage({
1096
+ id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
1097
+ defaultMessage: "content-type"
1098
+ }),
1099
+ name: "content-type"
1100
+ },
1101
+ {
1102
+ label: formatMessage({
1103
+ id: "content-releases.page.ReleaseDetails.table.header.label.action",
1104
+ defaultMessage: "action"
1105
+ }),
1106
+ name: "action"
1107
+ },
1108
+ ...!release.releasedAt ? [
1109
+ {
1110
+ label: formatMessage({
1111
+ id: "content-releases.page.ReleaseDetails.table.header.label.status",
1112
+ defaultMessage: "status"
1113
+ }),
1114
+ name: "status"
1115
+ }
1116
+ ] : []
1117
+ ];
1055
1118
  return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
1056
1119
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { children: /* @__PURE__ */ jsxRuntime.jsx(
1057
1120
  designSystem.SingleSelect,
@@ -1077,75 +1140,18 @@ const ReleaseDetailsBody = () => {
1077
1140
  Object.keys(releaseActions).map((key) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 4, direction: "column", alignItems: "stretch", children: [
1078
1141
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { role: "separator", "aria-label": key, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { children: key }) }),
1079
1142
  /* @__PURE__ */ jsxRuntime.jsx(
1080
- helperPlugin.Table.Root,
1143
+ strapiAdmin.Table.Root,
1081
1144
  {
1082
1145
  rows: releaseActions[key].map((item) => ({
1083
1146
  ...item,
1084
1147
  id: Number(item.entry.id)
1085
1148
  })),
1086
- colCount: releaseActions[key].length,
1087
- isLoading,
1088
- isFetching,
1089
- children: /* @__PURE__ */ jsxRuntime.jsxs(helperPlugin.Table.Content, { children: [
1090
- /* @__PURE__ */ jsxRuntime.jsxs(helperPlugin.Table.Head, { children: [
1091
- /* @__PURE__ */ jsxRuntime.jsx(
1092
- helperPlugin.Table.HeaderCell,
1093
- {
1094
- fieldSchemaType: "string",
1095
- label: formatMessage({
1096
- id: "content-releases.page.ReleaseDetails.table.header.label.name",
1097
- defaultMessage: "name"
1098
- }),
1099
- name: "name"
1100
- }
1101
- ),
1102
- /* @__PURE__ */ jsxRuntime.jsx(
1103
- helperPlugin.Table.HeaderCell,
1104
- {
1105
- fieldSchemaType: "string",
1106
- label: formatMessage({
1107
- id: "content-releases.page.ReleaseDetails.table.header.label.locale",
1108
- defaultMessage: "locale"
1109
- }),
1110
- name: "locale"
1111
- }
1112
- ),
1113
- /* @__PURE__ */ jsxRuntime.jsx(
1114
- helperPlugin.Table.HeaderCell,
1115
- {
1116
- fieldSchemaType: "string",
1117
- label: formatMessage({
1118
- id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
1119
- defaultMessage: "content-type"
1120
- }),
1121
- name: "content-type"
1122
- }
1123
- ),
1124
- /* @__PURE__ */ jsxRuntime.jsx(
1125
- helperPlugin.Table.HeaderCell,
1126
- {
1127
- fieldSchemaType: "string",
1128
- label: formatMessage({
1129
- id: "content-releases.page.ReleaseDetails.table.header.label.action",
1130
- defaultMessage: "action"
1131
- }),
1132
- name: "action"
1133
- }
1134
- ),
1135
- !release.releasedAt && /* @__PURE__ */ jsxRuntime.jsx(
1136
- helperPlugin.Table.HeaderCell,
1137
- {
1138
- fieldSchemaType: "string",
1139
- label: formatMessage({
1140
- id: "content-releases.page.ReleaseDetails.table.header.label.status",
1141
- defaultMessage: "status"
1142
- }),
1143
- name: "status"
1144
- }
1145
- )
1146
- ] }),
1147
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.Table.LoadingBody, {}),
1148
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.Table.Body, { children: releaseActions[key].map(
1149
+ headers,
1150
+ isLoading: isLoading || isFetching,
1151
+ children: /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Table.Content, { children: [
1152
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Head, { children: headers.map((header) => /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.HeaderCell, { ...header }, header.name)) }),
1153
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Loading, {}),
1154
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Body, { children: releaseActions[key].map(
1149
1155
  ({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
1150
1156
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
1151
1157
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "10%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
@@ -1202,17 +1208,17 @@ const ReleaseDetailsBody = () => {
1202
1208
  }
1203
1209
  )
1204
1210
  ] }, `releases-group-${key}`)),
1205
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
1206
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.PageSizeURLQuery, { defaultValue: releaseMeta?.pagination?.pageSize.toString() }),
1207
- /* @__PURE__ */ jsxRuntime.jsx(
1208
- helperPlugin.PaginationURLQuery,
1209
- {
1210
- pagination: {
1211
- pageCount: releaseMeta?.pagination?.pageCount || 0
1212
- }
1213
- }
1214
- )
1215
- ] })
1211
+ /* @__PURE__ */ jsxRuntime.jsxs(
1212
+ strapiAdmin.Pagination.Root,
1213
+ {
1214
+ ...releaseMeta?.pagination,
1215
+ defaultPageSize: releaseMeta?.pagination?.pageSize,
1216
+ children: [
1217
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.PageSize, {}),
1218
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.Links, {})
1219
+ ]
1220
+ }
1221
+ )
1216
1222
  ] }) });
1217
1223
  };
1218
1224
  const ReleaseDetailsPage = () => {
@@ -1220,14 +1226,19 @@ const ReleaseDetailsPage = () => {
1220
1226
  const { releaseId } = reactRouterDom.useParams();
1221
1227
  const toggleNotification = helperPlugin.useNotification();
1222
1228
  const { formatAPIError } = helperPlugin.useAPIErrorHandler();
1223
- const { replace } = reactRouterDom.useHistory();
1229
+ const navigate = reactRouterDom.useNavigate();
1224
1230
  const [releaseModalShown, setReleaseModalShown] = React__namespace.useState(false);
1225
1231
  const [showWarningSubmit, setWarningSubmit] = React__namespace.useState(false);
1226
1232
  const {
1227
1233
  isLoading: isLoadingDetails,
1228
1234
  data,
1229
1235
  isSuccess: isSuccessDetails
1230
- } = index.useGetReleaseQuery({ id: releaseId });
1236
+ } = index.useGetReleaseQuery(
1237
+ { id: releaseId },
1238
+ {
1239
+ skip: !releaseId
1240
+ }
1241
+ );
1231
1242
  const [updateRelease, { isLoading: isSubmittingForm }] = index.useUpdateReleaseMutation();
1232
1243
  const [deleteRelease, { isLoading: isDeletingRelease }] = index.useDeleteReleaseMutation();
1233
1244
  const toggleEditReleaseModal = () => {
@@ -1240,10 +1251,13 @@ const ReleaseDetailsPage = () => {
1240
1251
  {
1241
1252
  toggleEditReleaseModal,
1242
1253
  toggleWarningSubmit,
1243
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) })
1254
+ children: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {})
1244
1255
  }
1245
1256
  );
1246
1257
  }
1258
+ if (!releaseId) {
1259
+ return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: ".." });
1260
+ }
1247
1261
  const releaseData = isSuccessDetails && data?.data || null;
1248
1262
  const title = releaseData?.name || "";
1249
1263
  const timezone = releaseData?.timezone ?? null;
@@ -1283,7 +1297,7 @@ const ReleaseDetailsPage = () => {
1283
1297
  id: releaseId
1284
1298
  });
1285
1299
  if ("data" in response) {
1286
- replace("/plugins/content-releases");
1300
+ navigate("..");
1287
1301
  } else if (index.isAxiosError(response.error)) {
1288
1302
  toggleNotification({
1289
1303
  type: "warning",
@@ -1302,7 +1316,7 @@ const ReleaseDetailsPage = () => {
1302
1316
  toggleEditReleaseModal,
1303
1317
  toggleWarningSubmit,
1304
1318
  children: [
1305
- /* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsBody, {}),
1319
+ /* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsBody, { releaseId }),
1306
1320
  releaseModalShown && /* @__PURE__ */ jsxRuntime.jsx(
1307
1321
  ReleaseModal,
1308
1322
  {
@@ -1337,10 +1351,10 @@ const ReleaseDetailsPage = () => {
1337
1351
  );
1338
1352
  };
1339
1353
  const App = () => {
1340
- return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPagePermissions, { permissions: index.PERMISSIONS.main, children: /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.Switch, { children: [
1341
- /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { exact: true, path: `/plugins/${index.pluginId}`, component: ReleasesPage }),
1342
- /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { exact: true, path: `/plugins/${index.pluginId}/:releaseId`, component: ReleaseDetailsPage })
1354
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Protect, { permissions: index.PERMISSIONS.main, children: /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.Routes, { children: [
1355
+ /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { index: true, element: /* @__PURE__ */ jsxRuntime.jsx(ReleasesPage, {}) }),
1356
+ /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { path: ":releaseId", element: /* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsPage, {}) })
1343
1357
  ] }) });
1344
1358
  };
1345
1359
  exports.App = App;
1346
- //# sourceMappingURL=App-p8aKBitd.js.map
1360
+ //# sourceMappingURL=App-lzeJz92X.js.map