@strapi/content-releases 0.0.0-experimental.d5b46d578a5c055b8dcc66939e1b5d540976fafb → 0.0.0-experimental.defd8568ae03ef8d52f86e1f3541979f953c3941

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 (110) hide show
  1. package/dist/_chunks/{App-OP70yd5M.js → App-C0DlH0im.js} +245 -217
  2. package/dist/_chunks/App-C0DlH0im.js.map +1 -0
  3. package/dist/_chunks/{App-x6Tjj3HN.mjs → App-O0ZO-S35.mjs} +228 -200
  4. package/dist/_chunks/App-O0ZO-S35.mjs.map +1 -0
  5. package/dist/_chunks/{PurchaseContentReleases-bpIYXOfu.js → PurchaseContentReleases-DAHdUpAA.js} +4 -4
  6. package/dist/_chunks/PurchaseContentReleases-DAHdUpAA.js.map +1 -0
  7. package/dist/_chunks/{PurchaseContentReleases-3tRbmbY3.mjs → PurchaseContentReleases-Ex09YpKR.mjs} +5 -5
  8. package/dist/_chunks/PurchaseContentReleases-Ex09YpKR.mjs.map +1 -0
  9. package/dist/_chunks/{en-bpHsnU0n.mjs → en-B9Ur3VsE.mjs} +2 -1
  10. package/dist/_chunks/en-B9Ur3VsE.mjs.map +1 -0
  11. package/dist/_chunks/{en-3SGjiVyR.js → en-DtFJ5ViE.js} +2 -1
  12. package/dist/_chunks/en-DtFJ5ViE.js.map +1 -0
  13. package/dist/_chunks/{index-1ejXLtzt.mjs → index-DjDPK8kb.mjs} +155 -117
  14. package/dist/_chunks/index-DjDPK8kb.mjs.map +1 -0
  15. package/dist/_chunks/{index-ydocdaZ0.js → index-DoZNNtsb.js} +161 -123
  16. package/dist/_chunks/index-DoZNNtsb.js.map +1 -0
  17. package/dist/admin/index.js +1 -15
  18. package/dist/admin/index.js.map +1 -1
  19. package/dist/admin/index.mjs +2 -16
  20. package/dist/admin/index.mjs.map +1 -1
  21. package/dist/admin/src/components/CMReleasesContainer.d.ts +22 -0
  22. package/dist/admin/src/components/RelativeTime.d.ts +28 -0
  23. package/dist/admin/src/components/ReleaseAction.d.ts +3 -0
  24. package/dist/admin/src/components/ReleaseActionMenu.d.ts +26 -0
  25. package/dist/admin/src/components/ReleaseActionOptions.d.ts +9 -0
  26. package/dist/admin/src/components/ReleaseListCell.d.ts +0 -0
  27. package/dist/admin/src/components/ReleaseModal.d.ts +16 -0
  28. package/dist/admin/src/constants.d.ts +58 -0
  29. package/dist/admin/src/index.d.ts +3 -0
  30. package/dist/admin/src/pages/App.d.ts +1 -0
  31. package/dist/admin/src/pages/PurchaseContentReleases.d.ts +2 -0
  32. package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +2 -0
  33. package/dist/admin/src/pages/ReleasesPage.d.ts +8 -0
  34. package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +181 -0
  35. package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +39 -0
  36. package/dist/admin/src/pluginId.d.ts +1 -0
  37. package/dist/admin/src/services/axios.d.ts +29 -0
  38. package/dist/admin/src/services/release.d.ts +429 -0
  39. package/dist/admin/src/store/hooks.d.ts +7 -0
  40. package/dist/admin/src/utils/prefixPluginTranslations.d.ts +3 -0
  41. package/dist/admin/src/utils/time.d.ts +1 -0
  42. package/dist/server/index.js +152 -93
  43. package/dist/server/index.js.map +1 -1
  44. package/dist/server/index.mjs +153 -93
  45. package/dist/server/index.mjs.map +1 -1
  46. package/dist/server/src/bootstrap.d.ts +5 -0
  47. package/dist/server/src/bootstrap.d.ts.map +1 -0
  48. package/dist/server/src/constants.d.ts +12 -0
  49. package/dist/server/src/constants.d.ts.map +1 -0
  50. package/dist/server/src/content-types/index.d.ts +99 -0
  51. package/dist/server/src/content-types/index.d.ts.map +1 -0
  52. package/dist/server/src/content-types/release/index.d.ts +48 -0
  53. package/dist/server/src/content-types/release/index.d.ts.map +1 -0
  54. package/dist/server/src/content-types/release/schema.d.ts +47 -0
  55. package/dist/server/src/content-types/release/schema.d.ts.map +1 -0
  56. package/dist/server/src/content-types/release-action/index.d.ts +50 -0
  57. package/dist/server/src/content-types/release-action/index.d.ts.map +1 -0
  58. package/dist/server/src/content-types/release-action/schema.d.ts +49 -0
  59. package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -0
  60. package/dist/server/src/controllers/index.d.ts +20 -0
  61. package/dist/server/src/controllers/index.d.ts.map +1 -0
  62. package/dist/server/src/controllers/release-action.d.ts +10 -0
  63. package/dist/server/src/controllers/release-action.d.ts.map +1 -0
  64. package/dist/server/src/controllers/release.d.ts +12 -0
  65. package/dist/server/src/controllers/release.d.ts.map +1 -0
  66. package/dist/server/src/controllers/validation/release-action.d.ts +8 -0
  67. package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -0
  68. package/dist/server/src/controllers/validation/release.d.ts +2 -0
  69. package/dist/server/src/controllers/validation/release.d.ts.map +1 -0
  70. package/dist/server/src/destroy.d.ts +5 -0
  71. package/dist/server/src/destroy.d.ts.map +1 -0
  72. package/dist/server/src/index.d.ts +2096 -0
  73. package/dist/server/src/index.d.ts.map +1 -0
  74. package/dist/server/src/migrations/index.d.ts +13 -0
  75. package/dist/server/src/migrations/index.d.ts.map +1 -0
  76. package/dist/server/src/register.d.ts +5 -0
  77. package/dist/server/src/register.d.ts.map +1 -0
  78. package/dist/server/src/routes/index.d.ts +35 -0
  79. package/dist/server/src/routes/index.d.ts.map +1 -0
  80. package/dist/server/src/routes/release-action.d.ts +18 -0
  81. package/dist/server/src/routes/release-action.d.ts.map +1 -0
  82. package/dist/server/src/routes/release.d.ts +18 -0
  83. package/dist/server/src/routes/release.d.ts.map +1 -0
  84. package/dist/server/src/services/index.d.ts +1826 -0
  85. package/dist/server/src/services/index.d.ts.map +1 -0
  86. package/dist/server/src/services/release.d.ts +66 -0
  87. package/dist/server/src/services/release.d.ts.map +1 -0
  88. package/dist/server/src/services/scheduling.d.ts +18 -0
  89. package/dist/server/src/services/scheduling.d.ts.map +1 -0
  90. package/dist/server/src/services/validation.d.ts +18 -0
  91. package/dist/server/src/services/validation.d.ts.map +1 -0
  92. package/dist/server/src/utils/index.d.ts +14 -0
  93. package/dist/server/src/utils/index.d.ts.map +1 -0
  94. package/dist/shared/contracts/release-actions.d.ts +131 -0
  95. package/dist/shared/contracts/release-actions.d.ts.map +1 -0
  96. package/dist/shared/contracts/releases.d.ts +182 -0
  97. package/dist/shared/contracts/releases.d.ts.map +1 -0
  98. package/dist/shared/types.d.ts +24 -0
  99. package/dist/shared/types.d.ts.map +1 -0
  100. package/dist/shared/validation-schemas.d.ts +2 -0
  101. package/dist/shared/validation-schemas.d.ts.map +1 -0
  102. package/package.json +26 -31
  103. package/dist/_chunks/App-OP70yd5M.js.map +0 -1
  104. package/dist/_chunks/App-x6Tjj3HN.mjs.map +0 -1
  105. package/dist/_chunks/PurchaseContentReleases-3tRbmbY3.mjs.map +0 -1
  106. package/dist/_chunks/PurchaseContentReleases-bpIYXOfu.js.map +0 -1
  107. package/dist/_chunks/en-3SGjiVyR.js.map +0 -1
  108. package/dist/_chunks/en-bpHsnU0n.mjs.map +0 -1
  109. package/dist/_chunks/index-1ejXLtzt.mjs.map +0 -1
  110. package/dist/_chunks/index-ydocdaZ0.js.map +0 -1
@@ -1,14 +1,14 @@
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-ydocdaZ0.js");
6
+ const index = require("./index-DoZNNtsb.js");
7
7
  const React = require("react");
8
- const strapiAdmin = require("@strapi/admin/strapi-admin");
9
8
  const designSystem = require("@strapi/design-system");
10
- const v2 = require("@strapi/design-system/v2");
11
9
  const icons = require("@strapi/icons");
10
+ const symbols = require("@strapi/icons/symbols");
11
+ const strapiAdmin$1 = require("@strapi/plugin-content-manager/strapi-admin");
12
12
  const format = require("date-fns/format");
13
13
  const dateFnsTz = require("date-fns-tz");
14
14
  const reactIntl = require("react-intl");
@@ -16,10 +16,8 @@ const styled = require("styled-components");
16
16
  const dateFns = require("date-fns");
17
17
  const formik = require("formik");
18
18
  const yup = require("yup");
19
- require("@reduxjs/toolkit/query");
20
- require("axios");
21
- require("@reduxjs/toolkit/query/react");
22
- require("react-redux");
19
+ const reactRedux = require("react-redux");
20
+ const ee = require("@strapi/admin/strapi-admin/ee");
23
21
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
24
22
  function _interopNamespace(e) {
25
23
  if (e && e.__esModule)
@@ -43,6 +41,36 @@ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
43
41
  const format__default = /* @__PURE__ */ _interopDefault(format);
44
42
  const styled__default = /* @__PURE__ */ _interopDefault(styled);
45
43
  const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
44
+ const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
45
+ const RelativeTime$1 = React__namespace.forwardRef(
46
+ ({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {
47
+ const { formatRelativeTime, formatDate, formatTime } = reactIntl.useIntl();
48
+ const interval = dateFns.intervalToDuration({
49
+ start: timestamp,
50
+ end: Date.now()
51
+ // see https://github.com/date-fns/date-fns/issues/2891 – No idea why it's all partial it returns it every time.
52
+ });
53
+ const unit = intervals.find((intervalUnit) => {
54
+ return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
55
+ });
56
+ const relativeTime = dateFns.isPast(timestamp) ? -interval[unit] : interval[unit];
57
+ const customInterval = customIntervals.find(
58
+ (custom) => interval[custom.unit] < custom.threshold
59
+ );
60
+ const displayText = customInterval ? customInterval.text : formatRelativeTime(relativeTime, unit, { numeric: "auto" });
61
+ return /* @__PURE__ */ jsxRuntime.jsx(
62
+ "time",
63
+ {
64
+ ref: forwardedRef,
65
+ dateTime: timestamp.toISOString(),
66
+ role: "time",
67
+ title: `${formatDate(timestamp)} ${formatTime(timestamp)}`,
68
+ ...restProps,
69
+ children: displayText
70
+ }
71
+ );
72
+ }
73
+ );
46
74
  const RELEASE_SCHEMA = yup__namespace.object().shape({
47
75
  name: yup__namespace.string().trim().required(),
48
76
  scheduledAt: yup__namespace.string().nullable(),
@@ -280,10 +308,11 @@ const TimezoneComponent = ({ timezoneOptions }) => {
280
308
  }
281
309
  );
282
310
  };
283
- const LinkCard = styled__default.default(v2.Link)`
311
+ const useTypedDispatch = reactRedux.useDispatch;
312
+ const LinkCard = styled__default.default(designSystem.Link)`
284
313
  display: block;
285
314
  `;
286
- const RelativeTime = styled__default.default(helperPlugin.RelativeTime)`
315
+ const RelativeTime = styled__default.default(RelativeTime$1)`
287
316
  display: inline-block;
288
317
  &::first-letter {
289
318
  text-transform: uppercase;
@@ -317,7 +346,7 @@ const getBadgeProps = (status) => {
317
346
  const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
318
347
  const { formatMessage } = reactIntl.useIntl();
319
348
  if (isError) {
320
- return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.AnErrorOccurred, {});
349
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
321
350
  }
322
351
  if (releases?.length === 0) {
323
352
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -332,7 +361,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
332
361
  target: sectionTitle
333
362
  }
334
363
  ),
335
- icon: /* @__PURE__ */ jsxRuntime.jsx(icons.EmptyDocuments, { width: "10rem" })
364
+ icon: /* @__PURE__ */ jsxRuntime.jsx(symbols.EmptyDocuments, { width: "16rem" })
336
365
  }
337
366
  );
338
367
  }
@@ -382,23 +411,26 @@ const ReleasesPage = () => {
382
411
  const tabRef = React__namespace.useRef(null);
383
412
  const location = reactRouterDom.useLocation();
384
413
  const [releaseModalShown, setReleaseModalShown] = React__namespace.useState(false);
385
- const toggleNotification = helperPlugin.useNotification();
414
+ const { toggleNotification } = strapiAdmin.useNotification();
386
415
  const { formatMessage } = reactIntl.useIntl();
387
- const { push, replace } = reactRouterDom.useHistory();
388
- const { formatAPIError } = helperPlugin.useAPIErrorHandler();
389
- const [{ query }, setQuery] = helperPlugin.useQueryParams();
416
+ const navigate = reactRouterDom.useNavigate();
417
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
418
+ const [{ query }, setQuery] = strapiAdmin.useQueryParams();
390
419
  const response = index.useGetReleasesQuery(query);
391
420
  const [createRelease, { isLoading: isSubmittingForm }] = index.useCreateReleaseMutation();
392
- const { getFeature } = strapiAdmin.useLicenseLimits();
421
+ const { getFeature } = ee.useLicenseLimits();
393
422
  const { maximumReleases = 3 } = getFeature("cms-content-releases");
394
- const { trackUsage } = helperPlugin.useTracking();
423
+ const { trackUsage } = strapiAdmin.useTracking();
424
+ const {
425
+ allowedActions: { canCreate }
426
+ } = strapiAdmin.useRBAC(index.PERMISSIONS);
395
427
  const { isLoading, isSuccess, isError } = response;
396
428
  const activeTab = response?.currentData?.meta?.activeTab || "pending";
397
429
  const activeTabIndex = ["pending", "done"].indexOf(activeTab);
398
430
  React__namespace.useEffect(() => {
399
431
  if (location?.state?.errors) {
400
432
  toggleNotification({
401
- type: "warning",
433
+ type: "danger",
402
434
  title: formatMessage({
403
435
  id: "content-releases.pages.Releases.notification.error.title",
404
436
  defaultMessage: "Your request could not be processed."
@@ -408,9 +440,9 @@ const ReleasesPage = () => {
408
440
  defaultMessage: "Please try again or open another release."
409
441
  })
410
442
  });
411
- replace({ state: null });
443
+ navigate("", { replace: true, state: null });
412
444
  }
413
- }, [formatMessage, location?.state?.errors, replace, toggleNotification]);
445
+ }, [formatMessage, location?.state?.errors, navigate, toggleNotification]);
414
446
  React__namespace.useEffect(() => {
415
447
  if (tabRef.current) {
416
448
  tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
@@ -420,7 +452,7 @@ const ReleasesPage = () => {
420
452
  setReleaseModalShown((prev) => !prev);
421
453
  };
422
454
  if (isLoading) {
423
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Main, { "aria-busy": isLoading, children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
455
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
424
456
  }
425
457
  const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
426
458
  const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
@@ -451,15 +483,15 @@ const ReleasesPage = () => {
451
483
  })
452
484
  });
453
485
  trackUsage("didCreateRelease");
454
- push(`/plugins/content-releases/${response2.data.data.id}`);
486
+ navigate(response2.data.data.id.toString());
455
487
  } else if (index.isAxiosError(response2.error)) {
456
488
  toggleNotification({
457
- type: "warning",
489
+ type: "danger",
458
490
  message: formatAPIError(response2.error)
459
491
  });
460
492
  } else {
461
493
  toggleNotification({
462
- type: "warning",
494
+ type: "danger",
463
495
  message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
464
496
  });
465
497
  }
@@ -476,7 +508,7 @@ const ReleasesPage = () => {
476
508
  id: "content-releases.pages.Releases.header-subtitle",
477
509
  defaultMessage: "Create and manage content updates"
478
510
  }),
479
- primaryAction: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: index.PERMISSIONS.create, children: /* @__PURE__ */ jsxRuntime.jsx(
511
+ primaryAction: canCreate ? /* @__PURE__ */ jsxRuntime.jsx(
480
512
  designSystem.Button,
481
513
  {
482
514
  startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}),
@@ -487,7 +519,7 @@ const ReleasesPage = () => {
487
519
  defaultMessage: "New release"
488
520
  })
489
521
  }
490
- ) })
522
+ ) : null
491
523
  }
492
524
  ),
493
525
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -495,7 +527,7 @@ const ReleasesPage = () => {
495
527
  StyledAlert,
496
528
  {
497
529
  marginBottom: 6,
498
- action: /* @__PURE__ */ jsxRuntime.jsx(v2.Link, { href: "https://strapi.io/pricing-cloud", isExternal: true, children: formatMessage({
530
+ action: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Link, { href: "https://strapi.io/pricing-cloud", isExternal: true, children: formatMessage({
499
531
  id: "content-releases.pages.Releases.max-limit-reached.action",
500
532
  defaultMessage: "Explore plans"
501
533
  }) }),
@@ -566,23 +598,17 @@ const ReleasesPage = () => {
566
598
  ]
567
599
  }
568
600
  ),
569
- response.currentData?.meta?.pagination?.total ? /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
570
- /* @__PURE__ */ jsxRuntime.jsx(
571
- helperPlugin.PageSizeURLQuery,
572
- {
573
- options: ["8", "16", "32", "64"],
574
- defaultValue: response?.currentData?.meta?.pagination?.pageSize.toString()
575
- }
576
- ),
577
- /* @__PURE__ */ jsxRuntime.jsx(
578
- helperPlugin.PaginationURLQuery,
579
- {
580
- pagination: {
581
- pageCount: response?.currentData?.meta?.pagination?.pageCount || 0
582
- }
583
- }
584
- )
585
- ] }) : null
601
+ /* @__PURE__ */ jsxRuntime.jsxs(
602
+ strapiAdmin.Pagination.Root,
603
+ {
604
+ ...response?.currentData?.meta?.pagination,
605
+ defaultPageSize: response?.currentData?.meta?.pagination?.pageSize,
606
+ children: [
607
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.PageSize, { options: ["8", "16", "32", "64"] }),
608
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.Links, {})
609
+ ]
610
+ }
611
+ )
586
612
  ] }) }),
587
613
  releaseModalShown && /* @__PURE__ */ jsxRuntime.jsx(
588
614
  ReleaseModal,
@@ -601,7 +627,7 @@ const ReleaseInfoWrapper = styled__default.default(designSystem.Flex)`
601
627
  border-bottom-left-radius: ${({ theme }) => theme.borderRadius};
602
628
  border-top: 1px solid ${({ theme }) => theme.colors.neutral150};
603
629
  `;
604
- const StyledMenuItem = styled__default.default(v2.Menu.Item)`
630
+ const StyledMenuItem = styled__default.default(designSystem.Menu.Item)`
605
631
  svg path {
606
632
  fill: ${({ theme, disabled }) => disabled && theme.colors.neutral500};
607
633
  }
@@ -630,14 +656,18 @@ const TrashIcon = styled__default.default(icons.Trash)`
630
656
  const TypographyMaxWidth = styled__default.default(designSystem.Typography)`
631
657
  max-width: 300px;
632
658
  `;
633
- const EntryValidationText = ({ action, schema, components, entry }) => {
659
+ const EntryValidationText = ({ action, schema, entry }) => {
634
660
  const { formatMessage } = reactIntl.useIntl();
635
- const { validate } = strapiAdmin.unstable_useDocument();
636
- const { errors } = validate(entry, {
637
- contentType: schema,
638
- components,
639
- isCreatingEntry: false
640
- });
661
+ const { validate } = strapiAdmin$1.unstable_useDocument(
662
+ {
663
+ collectionType: schema?.kind ?? "",
664
+ model: schema?.uid ?? ""
665
+ },
666
+ {
667
+ skip: !schema
668
+ }
669
+ );
670
+ const errors = validate(entry) ?? {};
641
671
  if (Object.keys(errors).length > 0) {
642
672
  const validationErrorsMessages = Object.entries(errors).map(
643
673
  ([key, value]) => formatMessage(
@@ -646,13 +676,13 @@ const EntryValidationText = ({ action, schema, components, entry }) => {
646
676
  )
647
677
  ).join(" ");
648
678
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
649
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { color: "danger600", as: icons.CrossCircle }),
679
+ /* @__PURE__ */ jsxRuntime.jsx(icons.CrossCircle, { fill: "danger600" }),
650
680
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsxRuntime.jsx(TypographyMaxWidth, { textColor: "danger600", variant: "omega", fontWeight: "semiBold", ellipsis: true, children: validationErrorsMessages }) })
651
681
  ] });
652
682
  }
653
683
  if (action == "publish") {
654
684
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
655
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { color: "success600", as: icons.CheckCircle }),
685
+ /* @__PURE__ */ jsxRuntime.jsx(icons.CheckCircle, { fill: "success600" }),
656
686
  entry.publishedAt ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
657
687
  id: "content-releases.pages.ReleaseDetails.entry-validation.already-published",
658
688
  defaultMessage: "Already published"
@@ -663,7 +693,7 @@ const EntryValidationText = ({ action, schema, components, entry }) => {
663
693
  ] });
664
694
  }
665
695
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
666
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { color: "success600", as: icons.CheckCircle }),
696
+ /* @__PURE__ */ jsxRuntime.jsx(icons.CheckCircle, { fill: "success600" }),
667
697
  !entry.publishedAt ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
668
698
  id: "content-releases.pages.ReleaseDetails.entry-validation.already-unpublished",
669
699
  defaultMessage: "Already unpublished"
@@ -685,18 +715,22 @@ const ReleaseDetailsLayout = ({
685
715
  isLoading: isLoadingDetails,
686
716
  isError,
687
717
  error
688
- } = index.useGetReleaseQuery({ id: releaseId });
718
+ } = index.useGetReleaseQuery(
719
+ { id: releaseId },
720
+ {
721
+ skip: !releaseId
722
+ }
723
+ );
689
724
  const [publishRelease, { isLoading: isPublishing }] = index.usePublishReleaseMutation();
690
- const toggleNotification = helperPlugin.useNotification();
691
- const { formatAPIError } = helperPlugin.useAPIErrorHandler();
692
- const {
693
- allowedActions: { canUpdate, canDelete }
694
- } = helperPlugin.useRBAC(index.PERMISSIONS);
695
- const dispatch = index.useTypedDispatch();
696
- const { trackUsage } = helperPlugin.useTracking();
725
+ const { toggleNotification } = strapiAdmin.useNotification();
726
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
727
+ const { allowedActions } = strapiAdmin.useRBAC(index.PERMISSIONS);
728
+ const { canUpdate, canDelete, canPublish } = allowedActions;
729
+ const dispatch = useTypedDispatch();
730
+ const { trackUsage } = strapiAdmin.useTracking();
697
731
  const release = data?.data;
698
- const handlePublishRelease = async () => {
699
- const response = await publishRelease({ id: releaseId });
732
+ const handlePublishRelease = (id) => async () => {
733
+ const response = await publishRelease({ id });
700
734
  if ("data" in response) {
701
735
  toggleNotification({
702
736
  type: "success",
@@ -713,12 +747,12 @@ const ReleaseDetailsLayout = ({
713
747
  });
714
748
  } else if (index.isAxiosError(response.error)) {
715
749
  toggleNotification({
716
- type: "warning",
750
+ type: "danger",
717
751
  message: formatAPIError(response.error)
718
752
  });
719
753
  } else {
720
754
  toggleNotification({
721
- type: "warning",
755
+ type: "danger",
722
756
  message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
723
757
  });
724
758
  }
@@ -744,21 +778,19 @@ const ReleaseDetailsLayout = ({
744
778
  return release.createdBy.email;
745
779
  };
746
780
  if (isLoadingDetails) {
747
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Main, { "aria-busy": isLoadingDetails, children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
781
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
748
782
  }
749
783
  if (isError || !release) {
750
784
  return /* @__PURE__ */ jsxRuntime.jsx(
751
- reactRouterDom.Redirect,
785
+ reactRouterDom.Navigate,
752
786
  {
753
- to: {
754
- pathname: "/plugins/content-releases",
755
- state: {
756
- errors: [
757
- {
758
- code: error?.code
759
- }
760
- ]
761
- }
787
+ to: "..",
788
+ state: {
789
+ errors: [
790
+ {
791
+ code: error?.code
792
+ }
793
+ ]
762
794
  }
763
795
  }
764
796
  );
@@ -802,14 +834,11 @@ const ReleaseDetailsLayout = ({
802
834
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : "") }),
803
835
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { ...getBadgeProps(release.status), children: release.status })
804
836
  ] }),
805
- navigationAction: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Link, { startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.ArrowLeft, {}), to: "/plugins/content-releases", children: formatMessage({
806
- id: "global.back",
807
- defaultMessage: "Back"
808
- }) }),
837
+ navigationAction: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.BackButton, {}),
809
838
  primaryAction: !release.releasedAt && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
810
- /* @__PURE__ */ jsxRuntime.jsxs(v2.Menu.Root, { children: [
839
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Root, { children: [
811
840
  /* @__PURE__ */ jsxRuntime.jsx(
812
- v2.Menu.Trigger,
841
+ designSystem.Menu.Trigger,
813
842
  {
814
843
  as: designSystem.IconButton,
815
844
  paddingLeft: 2,
@@ -822,7 +851,7 @@ const ReleaseDetailsLayout = ({
822
851
  variant: "tertiary"
823
852
  }
824
853
  ),
825
- /* @__PURE__ */ jsxRuntime.jsxs(v2.Menu.Content, { top: 1, popoverPlacement: "bottom-end", children: [
854
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Content, { top: 1, popoverPlacement: "bottom-end", maxHeight: void 0, children: [
826
855
  /* @__PURE__ */ jsxRuntime.jsxs(
827
856
  designSystem.Flex,
828
857
  {
@@ -871,7 +900,7 @@ const ReleaseDetailsLayout = ({
871
900
  defaultMessage: "Created"
872
901
  }) }),
873
902
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", color: "neutral300", children: [
874
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.RelativeTime, { timestamp: new Date(release.createdAt) }),
903
+ /* @__PURE__ */ jsxRuntime.jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
875
904
  formatMessage(
876
905
  {
877
906
  id: "content-releases.header.actions.created.description",
@@ -889,12 +918,12 @@ const ReleaseDetailsLayout = ({
889
918
  id: "content-releases.header.actions.refresh",
890
919
  defaultMessage: "Refresh"
891
920
  }) }),
892
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: index.PERMISSIONS.publish, children: /* @__PURE__ */ jsxRuntime.jsx(
921
+ canPublish ? /* @__PURE__ */ jsxRuntime.jsx(
893
922
  designSystem.Button,
894
923
  {
895
924
  size: "S",
896
925
  variant: "default",
897
- onClick: handlePublishRelease,
926
+ onClick: handlePublishRelease(release.id.toString()),
898
927
  loading: isPublishing,
899
928
  disabled: release.actions.meta.count === 0,
900
929
  children: formatMessage({
@@ -902,7 +931,7 @@ const ReleaseDetailsLayout = ({
902
931
  defaultMessage: "Publish"
903
932
  })
904
933
  }
905
- ) })
934
+ ) : null
906
935
  ] })
907
936
  }
908
937
  ),
@@ -910,6 +939,7 @@ const ReleaseDetailsLayout = ({
910
939
  ] });
911
940
  };
912
941
  const GROUP_BY_OPTIONS = ["contentType", "locale", "action"];
942
+ const GROUP_BY_OPTIONS_NO_LOCALE = ["contentType", "action"];
913
943
  const getGroupByOptionLabel = (value) => {
914
944
  if (value === "locale") {
915
945
  return {
@@ -928,12 +958,11 @@ const getGroupByOptionLabel = (value) => {
928
958
  defaultMessage: "Content-Types"
929
959
  };
930
960
  };
931
- const ReleaseDetailsBody = () => {
961
+ const ReleaseDetailsBody = ({ releaseId }) => {
932
962
  const { formatMessage } = reactIntl.useIntl();
933
- const { releaseId } = reactRouterDom.useParams();
934
- const [{ query }, setQuery] = helperPlugin.useQueryParams();
935
- const toggleNotification = helperPlugin.useNotification();
936
- const { formatAPIError } = helperPlugin.useAPIErrorHandler();
963
+ const [{ query }, setQuery] = strapiAdmin.useQueryParams();
964
+ const { toggleNotification } = strapiAdmin.useNotification();
965
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
937
966
  const {
938
967
  data: releaseData,
939
968
  isLoading: isReleaseLoading,
@@ -942,7 +971,21 @@ const ReleaseDetailsBody = () => {
942
971
  } = index.useGetReleaseQuery({ id: releaseId });
943
972
  const {
944
973
  allowedActions: { canUpdate }
945
- } = helperPlugin.useRBAC(index.PERMISSIONS);
974
+ } = strapiAdmin.useRBAC(index.PERMISSIONS);
975
+ 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
+ );
946
989
  const release = releaseData?.data;
947
990
  const selectedGroupBy = query?.groupBy || "contentType";
948
991
  const {
@@ -973,19 +1016,19 @@ const ReleaseDetailsBody = () => {
973
1016
  if ("error" in response) {
974
1017
  if (index.isAxiosError(response.error)) {
975
1018
  toggleNotification({
976
- type: "warning",
1019
+ type: "danger",
977
1020
  message: formatAPIError(response.error)
978
1021
  });
979
1022
  } else {
980
1023
  toggleNotification({
981
- type: "warning",
1024
+ type: "danger",
982
1025
  message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
983
1026
  });
984
1027
  }
985
1028
  }
986
1029
  };
987
1030
  if (isLoading || isReleaseLoading) {
988
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
1031
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
989
1032
  }
990
1033
  const releaseActions = data?.data;
991
1034
  const releaseMeta = data?.meta;
@@ -1004,30 +1047,24 @@ const ReleaseDetailsBody = () => {
1004
1047
  });
1005
1048
  }
1006
1049
  return /* @__PURE__ */ jsxRuntime.jsx(
1007
- reactRouterDom.Redirect,
1050
+ reactRouterDom.Navigate,
1008
1051
  {
1009
- to: {
1010
- pathname: "/plugins/content-releases",
1011
- state: {
1012
- errors: errorsArray
1013
- }
1052
+ to: "..",
1053
+ state: {
1054
+ errors: errorsArray
1014
1055
  }
1015
1056
  }
1016
1057
  );
1017
1058
  }
1018
1059
  if (isError || !releaseActions) {
1019
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.AnErrorOccurred, {}) });
1060
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
1020
1061
  }
1021
1062
  if (Object.keys(releaseActions).length === 0) {
1022
1063
  return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(
1023
- helperPlugin.NoContent,
1064
+ designSystem.EmptyStateLayout,
1024
1065
  {
1025
- content: {
1026
- id: "content-releases.pages.Details.tab.emptyEntries",
1027
- defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
1028
- },
1029
1066
  action: /* @__PURE__ */ jsxRuntime.jsx(
1030
- v2.LinkButton,
1067
+ designSystem.LinkButton,
1031
1068
  {
1032
1069
  as: reactRouterDom.Link,
1033
1070
  to: {
@@ -1040,18 +1077,59 @@ const ReleaseDetailsBody = () => {
1040
1077
  defaultMessage: "Open the Content Manager"
1041
1078
  })
1042
1079
  }
1043
- )
1080
+ ),
1081
+ icon: /* @__PURE__ */ jsxRuntime.jsx(symbols.EmptyDocuments, { width: "16rem" }),
1082
+ content: formatMessage({
1083
+ id: "content-releases.pages.Details.tab.emptyEntries",
1084
+ defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
1085
+ })
1044
1086
  }
1045
1087
  ) });
1046
1088
  }
1089
+ const groupByLabel = formatMessage({
1090
+ id: "content-releases.pages.ReleaseDetails.groupBy.aria-label",
1091
+ defaultMessage: "Group by"
1092
+ });
1093
+ 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
+ {
1103
+ label: formatMessage({
1104
+ id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
1105
+ defaultMessage: "content-type"
1106
+ }),
1107
+ name: "content-type"
1108
+ },
1109
+ {
1110
+ label: formatMessage({
1111
+ id: "content-releases.page.ReleaseDetails.table.header.label.action",
1112
+ defaultMessage: "action"
1113
+ }),
1114
+ name: "action"
1115
+ },
1116
+ ...!release.releasedAt ? [
1117
+ {
1118
+ label: formatMessage({
1119
+ id: "content-releases.page.ReleaseDetails.table.header.label.status",
1120
+ defaultMessage: "status"
1121
+ }),
1122
+ name: "status"
1123
+ }
1124
+ ] : []
1125
+ ];
1126
+ const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;
1047
1127
  return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
1048
1128
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { children: /* @__PURE__ */ jsxRuntime.jsx(
1049
1129
  designSystem.SingleSelect,
1050
1130
  {
1051
- "aria-label": formatMessage({
1052
- id: "content-releases.pages.ReleaseDetails.groupBy.aria-label",
1053
- defaultMessage: "Group by"
1054
- }),
1131
+ placeholder: groupByLabel,
1132
+ "aria-label": groupByLabel,
1055
1133
  customizeContent: (value) => formatMessage(
1056
1134
  {
1057
1135
  id: `content-releases.pages.ReleaseDetails.groupBy.label`,
@@ -1063,84 +1141,27 @@ const ReleaseDetailsBody = () => {
1063
1141
  ),
1064
1142
  value: formatMessage(getGroupByOptionLabel(selectedGroupBy)),
1065
1143
  onChange: (value) => setQuery({ groupBy: value }),
1066
- children: GROUP_BY_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: option, children: formatMessage(getGroupByOptionLabel(option)) }, option))
1144
+ children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: option, children: formatMessage(getGroupByOptionLabel(option)) }, option))
1067
1145
  }
1068
1146
  ) }),
1069
1147
  Object.keys(releaseActions).map((key) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 4, direction: "column", alignItems: "stretch", children: [
1070
1148
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { role: "separator", "aria-label": key, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { children: key }) }),
1071
1149
  /* @__PURE__ */ jsxRuntime.jsx(
1072
- helperPlugin.Table.Root,
1150
+ strapiAdmin.Table.Root,
1073
1151
  {
1074
1152
  rows: releaseActions[key].map((item) => ({
1075
1153
  ...item,
1076
1154
  id: Number(item.entry.id)
1077
1155
  })),
1078
- colCount: releaseActions[key].length,
1079
- isLoading,
1080
- isFetching,
1081
- children: /* @__PURE__ */ jsxRuntime.jsxs(helperPlugin.Table.Content, { children: [
1082
- /* @__PURE__ */ jsxRuntime.jsxs(helperPlugin.Table.Head, { children: [
1083
- /* @__PURE__ */ jsxRuntime.jsx(
1084
- helperPlugin.Table.HeaderCell,
1085
- {
1086
- fieldSchemaType: "string",
1087
- label: formatMessage({
1088
- id: "content-releases.page.ReleaseDetails.table.header.label.name",
1089
- defaultMessage: "name"
1090
- }),
1091
- name: "name"
1092
- }
1093
- ),
1094
- /* @__PURE__ */ jsxRuntime.jsx(
1095
- helperPlugin.Table.HeaderCell,
1096
- {
1097
- fieldSchemaType: "string",
1098
- label: formatMessage({
1099
- id: "content-releases.page.ReleaseDetails.table.header.label.locale",
1100
- defaultMessage: "locale"
1101
- }),
1102
- name: "locale"
1103
- }
1104
- ),
1105
- /* @__PURE__ */ jsxRuntime.jsx(
1106
- helperPlugin.Table.HeaderCell,
1107
- {
1108
- fieldSchemaType: "string",
1109
- label: formatMessage({
1110
- id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
1111
- defaultMessage: "content-type"
1112
- }),
1113
- name: "content-type"
1114
- }
1115
- ),
1116
- /* @__PURE__ */ jsxRuntime.jsx(
1117
- helperPlugin.Table.HeaderCell,
1118
- {
1119
- fieldSchemaType: "string",
1120
- label: formatMessage({
1121
- id: "content-releases.page.ReleaseDetails.table.header.label.action",
1122
- defaultMessage: "action"
1123
- }),
1124
- name: "action"
1125
- }
1126
- ),
1127
- !release.releasedAt && /* @__PURE__ */ jsxRuntime.jsx(
1128
- helperPlugin.Table.HeaderCell,
1129
- {
1130
- fieldSchemaType: "string",
1131
- label: formatMessage({
1132
- id: "content-releases.page.ReleaseDetails.table.header.label.status",
1133
- defaultMessage: "status"
1134
- }),
1135
- name: "status"
1136
- }
1137
- )
1138
- ] }),
1139
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.Table.LoadingBody, {}),
1140
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.Table.Body, { children: releaseActions[key].map(
1156
+ headers,
1157
+ isLoading: isLoading || isFetching,
1158
+ 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.Loading, {}),
1161
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Body, { children: releaseActions[key].map(
1141
1162
  ({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
1142
1163
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
1143
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "10%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
1164
+ hasI18nEnabled && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "10%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
1144
1165
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "10%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: contentType.displayName || "" }) }),
1145
1166
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "20%", children: release.releasedAt ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: formatMessage(
1146
1167
  {
@@ -1194,34 +1215,39 @@ const ReleaseDetailsBody = () => {
1194
1215
  }
1195
1216
  )
1196
1217
  ] }, `releases-group-${key}`)),
1197
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
1198
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.PageSizeURLQuery, { defaultValue: releaseMeta?.pagination?.pageSize.toString() }),
1199
- /* @__PURE__ */ jsxRuntime.jsx(
1200
- helperPlugin.PaginationURLQuery,
1201
- {
1202
- pagination: {
1203
- pageCount: releaseMeta?.pagination?.pageCount || 0
1204
- }
1205
- }
1206
- )
1207
- ] })
1218
+ /* @__PURE__ */ jsxRuntime.jsxs(
1219
+ strapiAdmin.Pagination.Root,
1220
+ {
1221
+ ...releaseMeta?.pagination,
1222
+ defaultPageSize: releaseMeta?.pagination?.pageSize,
1223
+ children: [
1224
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.PageSize, {}),
1225
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.Links, {})
1226
+ ]
1227
+ }
1228
+ )
1208
1229
  ] }) });
1209
1230
  };
1210
1231
  const ReleaseDetailsPage = () => {
1211
1232
  const { formatMessage } = reactIntl.useIntl();
1212
1233
  const { releaseId } = reactRouterDom.useParams();
1213
- const toggleNotification = helperPlugin.useNotification();
1214
- const { formatAPIError } = helperPlugin.useAPIErrorHandler();
1215
- const { replace } = reactRouterDom.useHistory();
1234
+ const { toggleNotification } = strapiAdmin.useNotification();
1235
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
1236
+ const navigate = reactRouterDom.useNavigate();
1216
1237
  const [releaseModalShown, setReleaseModalShown] = React__namespace.useState(false);
1217
1238
  const [showWarningSubmit, setWarningSubmit] = React__namespace.useState(false);
1218
1239
  const {
1219
1240
  isLoading: isLoadingDetails,
1220
1241
  data,
1221
1242
  isSuccess: isSuccessDetails
1222
- } = index.useGetReleaseQuery({ id: releaseId });
1243
+ } = index.useGetReleaseQuery(
1244
+ { id: releaseId },
1245
+ {
1246
+ skip: !releaseId
1247
+ }
1248
+ );
1223
1249
  const [updateRelease, { isLoading: isSubmittingForm }] = index.useUpdateReleaseMutation();
1224
- const [deleteRelease, { isLoading: isDeletingRelease }] = index.useDeleteReleaseMutation();
1250
+ const [deleteRelease] = index.useDeleteReleaseMutation();
1225
1251
  const toggleEditReleaseModal = () => {
1226
1252
  setReleaseModalShown((prev) => !prev);
1227
1253
  };
@@ -1232,10 +1258,13 @@ const ReleaseDetailsPage = () => {
1232
1258
  {
1233
1259
  toggleEditReleaseModal,
1234
1260
  toggleWarningSubmit,
1235
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) })
1261
+ children: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {})
1236
1262
  }
1237
1263
  );
1238
1264
  }
1265
+ if (!releaseId) {
1266
+ return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: ".." });
1267
+ }
1239
1268
  const releaseData = isSuccessDetails && data?.data || null;
1240
1269
  const title = releaseData?.name || "";
1241
1270
  const timezone = releaseData?.timezone ?? null;
@@ -1260,12 +1289,12 @@ const ReleaseDetailsPage = () => {
1260
1289
  toggleEditReleaseModal();
1261
1290
  } else if (index.isAxiosError(response.error)) {
1262
1291
  toggleNotification({
1263
- type: "warning",
1292
+ type: "danger",
1264
1293
  message: formatAPIError(response.error)
1265
1294
  });
1266
1295
  } else {
1267
1296
  toggleNotification({
1268
- type: "warning",
1297
+ type: "danger",
1269
1298
  message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
1270
1299
  });
1271
1300
  }
@@ -1275,15 +1304,15 @@ const ReleaseDetailsPage = () => {
1275
1304
  id: releaseId
1276
1305
  });
1277
1306
  if ("data" in response) {
1278
- replace("/plugins/content-releases");
1307
+ navigate("..");
1279
1308
  } else if (index.isAxiosError(response.error)) {
1280
1309
  toggleNotification({
1281
- type: "warning",
1310
+ type: "danger",
1282
1311
  message: formatAPIError(response.error)
1283
1312
  });
1284
1313
  } else {
1285
1314
  toggleNotification({
1286
- type: "warning",
1315
+ type: "danger",
1287
1316
  message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
1288
1317
  });
1289
1318
  }
@@ -1294,7 +1323,7 @@ const ReleaseDetailsPage = () => {
1294
1323
  toggleEditReleaseModal,
1295
1324
  toggleWarningSubmit,
1296
1325
  children: [
1297
- /* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsBody, {}),
1326
+ /* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsBody, { releaseId }),
1298
1327
  releaseModalShown && /* @__PURE__ */ jsxRuntime.jsx(
1299
1328
  ReleaseModal,
1300
1329
  {
@@ -1312,16 +1341,15 @@ const ReleaseDetailsPage = () => {
1312
1341
  }
1313
1342
  ),
1314
1343
  /* @__PURE__ */ jsxRuntime.jsx(
1315
- helperPlugin.ConfirmDialog,
1344
+ strapiAdmin.ConfirmDialog,
1316
1345
  {
1317
- bodyText: {
1346
+ isOpen: showWarningSubmit,
1347
+ onClose: toggleWarningSubmit,
1348
+ onConfirm: handleDeleteRelease,
1349
+ children: formatMessage({
1318
1350
  id: "content-releases.dialog.confirmation-message",
1319
1351
  defaultMessage: "Are you sure you want to delete this release?"
1320
- },
1321
- isOpen: showWarningSubmit,
1322
- isConfirmButtonLoading: isDeletingRelease,
1323
- onToggleDialog: toggleWarningSubmit,
1324
- onConfirm: handleDeleteRelease
1352
+ })
1325
1353
  }
1326
1354
  )
1327
1355
  ]
@@ -1329,10 +1357,10 @@ const ReleaseDetailsPage = () => {
1329
1357
  );
1330
1358
  };
1331
1359
  const App = () => {
1332
- return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPagePermissions, { permissions: index.PERMISSIONS.main, children: /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.Switch, { children: [
1333
- /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { exact: true, path: `/plugins/${index.pluginId}`, component: ReleasesPage }),
1334
- /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { exact: true, path: `/plugins/${index.pluginId}/:releaseId`, component: ReleaseDetailsPage })
1360
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Protect, { permissions: index.PERMISSIONS.main, children: /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.Routes, { children: [
1361
+ /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { index: true, element: /* @__PURE__ */ jsxRuntime.jsx(ReleasesPage, {}) }),
1362
+ /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { path: ":releaseId", element: /* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsPage, {}) })
1335
1363
  ] }) });
1336
1364
  };
1337
1365
  exports.App = App;
1338
- //# sourceMappingURL=App-OP70yd5M.js.map
1366
+ //# sourceMappingURL=App-C0DlH0im.js.map