@strapi/content-releases 0.0.0-experimental.d00dc50c81bce037c4321a90cc2f790eb3c51acb → 0.0.0-experimental.d23c1d5b0e45dd06ef09977f526c85468be05403

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 (108) hide show
  1. package/dist/_chunks/{App-gu1aiP6i.mjs → App-Cmn2Mkn7.mjs} +213 -200
  2. package/dist/_chunks/App-Cmn2Mkn7.mjs.map +1 -0
  3. package/dist/_chunks/{App-HjWtUYmc.js → App-FVorrIzF.js} +224 -211
  4. package/dist/_chunks/App-FVorrIzF.js.map +1 -0
  5. package/dist/_chunks/{PurchaseContentReleases-3tRbmbY3.mjs → PurchaseContentReleases-C8djn9fP.mjs} +1 -1
  6. package/dist/_chunks/{PurchaseContentReleases-3tRbmbY3.mjs.map → PurchaseContentReleases-C8djn9fP.mjs.map} +1 -1
  7. package/dist/_chunks/{PurchaseContentReleases-bpIYXOfu.js → PurchaseContentReleases-sD6ADHk2.js} +1 -1
  8. package/dist/_chunks/{PurchaseContentReleases-bpIYXOfu.js.map → PurchaseContentReleases-sD6ADHk2.js.map} +1 -1
  9. package/dist/_chunks/{en-ltT1TlKQ.mjs → en-B9Ur3VsE.mjs} +1 -1
  10. package/dist/_chunks/en-B9Ur3VsE.mjs.map +1 -0
  11. package/dist/_chunks/{en-HrREghh3.js → en-DtFJ5ViE.js} +1 -1
  12. package/dist/_chunks/en-DtFJ5ViE.js.map +1 -0
  13. package/dist/_chunks/{index-ZNwxYN8H.js → index-BfJLth9Z.js} +120 -189
  14. package/dist/_chunks/index-BfJLth9Z.js.map +1 -0
  15. package/dist/_chunks/{index-mvj9PSKd.mjs → index-DDohgTaQ.mjs} +125 -194
  16. package/dist/_chunks/index-DDohgTaQ.mjs.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 +83 -86
  43. package/dist/server/index.js.map +1 -1
  44. package/dist/server/index.mjs +84 -86
  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-HjWtUYmc.js.map +0 -1
  104. package/dist/_chunks/App-gu1aiP6i.mjs.map +0 -1
  105. package/dist/_chunks/en-HrREghh3.js.map +0 -1
  106. package/dist/_chunks/en-ltT1TlKQ.mjs.map +0 -1
  107. package/dist/_chunks/index-ZNwxYN8H.js.map +0 -1
  108. package/dist/_chunks/index-mvj9PSKd.mjs.map +0 -1
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
- const helperPlugin = require("@strapi/helper-plugin");
3
2
  const icons = require("@strapi/icons");
4
3
  const jsxRuntime = require("react/jsx-runtime");
5
4
  const React = require("react");
6
5
  const query = require("@reduxjs/toolkit/query");
6
+ const strapiAdmin = require("@strapi/admin/strapi-admin");
7
7
  const designSystem = require("@strapi/design-system");
8
8
  const v2 = require("@strapi/design-system/v2");
9
+ const strapiAdmin$1 = require("@strapi/plugin-content-manager/strapi-admin");
9
10
  const axios = require("axios");
10
11
  const formik = require("formik");
11
12
  const reactIntl = require("react-intl");
@@ -13,7 +14,6 @@ const reactRouterDom = require("react-router-dom");
13
14
  const yup = require("yup");
14
15
  const react = require("@reduxjs/toolkit/query/react");
15
16
  const styled = require("styled-components");
16
- const reactRedux = require("react-redux");
17
17
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
18
18
  function _interopNamespace(e) {
19
19
  if (e && e.__esModule)
@@ -125,7 +125,7 @@ const axiosBaseQuery = async ({
125
125
  config
126
126
  }) => {
127
127
  try {
128
- const { get, post, del, put } = helperPlugin.getFetchClient();
128
+ const { get, post, del, put } = strapiAdmin.getFetchClient();
129
129
  if (method === "POST") {
130
130
  const result2 = await post(url, data, config);
131
131
  return { data: result2.data };
@@ -399,8 +399,6 @@ const getTimezoneOffset = (timezone, date) => {
399
399
  return "";
400
400
  }
401
401
  };
402
- const useTypedDispatch = reactRedux.useDispatch;
403
- const useTypedSelector = reactRedux.useSelector;
404
402
  const StyledMenuItem = styled__default.default(v2.Menu.Item)`
405
403
  &:hover {
406
404
  background: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}100`]};
@@ -437,9 +435,12 @@ const StyledIconButton = styled__default.default(designSystem.IconButton)`
437
435
  `;
438
436
  const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
439
437
  const { formatMessage } = reactIntl.useIntl();
440
- const toggleNotification = helperPlugin.useNotification();
441
- const { formatAPIError } = helperPlugin.useAPIErrorHandler();
438
+ const { toggleNotification } = strapiAdmin.useNotification();
439
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
442
440
  const [deleteReleaseAction] = useDeleteReleaseActionMutation();
441
+ const {
442
+ allowedActions: { canDeleteAction }
443
+ } = strapiAdmin.useRBAC(PERMISSIONS);
443
444
  const handleDeleteAction = async () => {
444
445
  const response = await deleteReleaseAction({
445
446
  params: { releaseId, actionId }
@@ -457,24 +458,27 @@ const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
457
458
  if ("error" in response) {
458
459
  if (axios.isAxiosError(response.error)) {
459
460
  toggleNotification({
460
- type: "warning",
461
+ type: "danger",
461
462
  message: formatAPIError(response.error)
462
463
  });
463
464
  } else {
464
465
  toggleNotification({
465
- type: "warning",
466
+ type: "danger",
466
467
  message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
467
468
  });
468
469
  }
469
470
  }
470
471
  };
471
- return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: PERMISSIONS.deleteAction, children: /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { variant: "danger", onSelect: handleDeleteAction, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
472
+ if (!canDeleteAction) {
473
+ return null;
474
+ }
475
+ return /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { variant: "danger", onSelect: handleDeleteAction, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
472
476
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: icons.Cross, width: 3, height: 3 }),
473
477
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "danger600", variant: "omega", children: formatMessage({
474
478
  id: "content-releases.content-manager-edit-view.remove-from-release",
475
479
  defaultMessage: "Remove from release"
476
480
  }) })
477
- ] }) }) });
481
+ ] }) });
478
482
  };
479
483
  const ReleaseActionEntryLinkItem = ({
480
484
  contentTypeUid,
@@ -482,41 +486,44 @@ const ReleaseActionEntryLinkItem = ({
482
486
  locale
483
487
  }) => {
484
488
  const { formatMessage } = reactIntl.useIntl();
485
- const collectionTypePermissions = useTypedSelector(
486
- (state) => state.rbacProvider.collectionTypesRelatedPermissions
487
- );
488
- const updatePermissions = contentTypeUid ? collectionTypePermissions[contentTypeUid]?.["plugin::content-manager.explorer.update"] : [];
489
- const canUpdateEntryForLocale = Boolean(
490
- !locale || updatePermissions?.find(
491
- (permission) => permission.properties?.locales?.includes(locale)
492
- )
493
- );
494
- return /* @__PURE__ */ jsxRuntime.jsx(
495
- helperPlugin.CheckPermissions,
489
+ const userPermissions = strapiAdmin.useAuth("ReleaseActionEntryLinkItem", (state) => state.permissions);
490
+ const canUpdateEntryForLocale = React__namespace.useMemo(() => {
491
+ const updatePermissions = userPermissions.find(
492
+ (permission) => permission.subject === contentTypeUid && permission.action === "plugin::content-manager.explorer.update"
493
+ );
494
+ if (!updatePermissions) {
495
+ return false;
496
+ }
497
+ return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));
498
+ }, [contentTypeUid, locale, userPermissions]);
499
+ const {
500
+ allowedActions: { canUpdate: canUpdateContentType }
501
+ } = strapiAdmin.useRBAC({
502
+ updateContentType: [
503
+ {
504
+ action: "plugin::content-manager.explorer.update",
505
+ subject: contentTypeUid
506
+ }
507
+ ]
508
+ });
509
+ if (!canUpdateContentType || !canUpdateEntryForLocale) {
510
+ return null;
511
+ }
512
+ return /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
513
+ v2.Link,
496
514
  {
497
- permissions: [
498
- {
499
- action: "plugin::content-manager.explorer.update",
500
- subject: contentTypeUid
501
- }
502
- ],
503
- children: canUpdateEntryForLocale && /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
504
- v2.Link,
505
- {
506
- as: reactRouterDom.NavLink,
507
- to: {
508
- pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
509
- search: locale && `?plugins[i18n][locale]=${locale}`
510
- },
511
- startIcon: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: icons.Pencil, width: 3, height: 3 }),
512
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", children: formatMessage({
513
- id: "content-releases.content-manager-edit-view.edit-entry",
514
- defaultMessage: "Edit entry"
515
- }) })
516
- }
517
- ) })
515
+ as: reactRouterDom.NavLink,
516
+ to: {
517
+ pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
518
+ search: locale && `?plugins[i18n][locale]=${locale}`
519
+ },
520
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: icons.Pencil, width: 3, height: 3 }),
521
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", children: formatMessage({
522
+ id: "content-releases.content-manager-edit-view.edit-entry",
523
+ defaultMessage: "Edit entry"
524
+ }) })
518
525
  }
519
- );
526
+ ) });
520
527
  };
521
528
  const EditReleaseItem = ({ releaseId }) => {
522
529
  const { formatMessage } = reactIntl.useIntl();
@@ -535,9 +542,10 @@ const EditReleaseItem = ({ releaseId }) => {
535
542
  };
536
543
  const Root = ({ children, hasTriggerBorder = false }) => {
537
544
  const { formatMessage } = reactIntl.useIntl();
545
+ const { allowedActions } = strapiAdmin.useRBAC(PERMISSIONS);
538
546
  return (
539
547
  // A user can access the dropdown if they have permissions to delete a release-action OR update a release
540
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: [...PERMISSIONS.deleteAction, ...PERMISSIONS.update], children: /* @__PURE__ */ jsxRuntime.jsxs(v2.Menu.Root, { children: [
548
+ allowedActions.canDeleteAction || allowedActions.canUpdate ? /* @__PURE__ */ jsxRuntime.jsxs(v2.Menu.Root, { children: [
541
549
  /* @__PURE__ */ jsxRuntime.jsx(
542
550
  v2.Menu.Trigger,
543
551
  {
@@ -552,7 +560,7 @@ const Root = ({ children, hasTriggerBorder = false }) => {
552
560
  }
553
561
  ),
554
562
  /* @__PURE__ */ jsxRuntime.jsx(v2.Menu.Content, { top: 1, popoverPlacement: "bottom-end", children })
555
- ] }) })
563
+ ] }) : null
556
564
  );
557
565
  };
558
566
  const ReleaseActionMenu = {
@@ -684,12 +692,13 @@ const INITIAL_VALUES = {
684
692
  const NoReleases = () => {
685
693
  const { formatMessage } = reactIntl.useIntl();
686
694
  return /* @__PURE__ */ jsxRuntime.jsx(
687
- helperPlugin.NoContent,
695
+ designSystem.EmptyStateLayout,
688
696
  {
689
- content: {
697
+ icon: /* @__PURE__ */ jsxRuntime.jsx(icons.EmptyDocuments, { width: "10rem" }),
698
+ content: formatMessage({
690
699
  id: "content-releases.content-manager-edit-view.add-to-release.no-releases-message",
691
700
  defaultMessage: "No available releases. Open the list of releases and create a new one from there."
692
- },
701
+ }),
693
702
  action: /* @__PURE__ */ jsxRuntime.jsx(
694
703
  v2.LinkButton,
695
704
  {
@@ -714,9 +723,10 @@ const AddActionToReleaseModal = ({
714
723
  }) => {
715
724
  const releaseHeaderId = React__namespace.useId();
716
725
  const { formatMessage } = reactIntl.useIntl();
717
- const toggleNotification = helperPlugin.useNotification();
718
- const { formatAPIError } = helperPlugin.useAPIErrorHandler();
719
- const { modifiedData } = helperPlugin.useCMEditViewDataManager();
726
+ const { toggleNotification } = strapiAdmin.useNotification();
727
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
728
+ const [{ query: query2 }] = strapiAdmin.useQueryParams();
729
+ const locale = query2.plugins?.i18n?.locale;
720
730
  const response = useGetReleasesForEntryQuery({
721
731
  contentTypeUid,
722
732
  entryId,
@@ -725,7 +735,6 @@ const AddActionToReleaseModal = ({
725
735
  const releases = response.data?.data;
726
736
  const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();
727
737
  const handleSubmit = async (values) => {
728
- const locale = modifiedData.locale;
729
738
  const releaseActionEntry = {
730
739
  contentType: contentTypeUid,
731
740
  id: entryId,
@@ -749,12 +758,12 @@ const AddActionToReleaseModal = ({
749
758
  if ("error" in response2) {
750
759
  if (axios.isAxiosError(response2.error)) {
751
760
  toggleNotification({
752
- type: "warning",
761
+ type: "danger",
753
762
  message: formatAPIError(response2.error)
754
763
  });
755
764
  } else {
756
765
  toggleNotification({
757
- type: "warning",
766
+ type: "danger",
758
767
  message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
759
768
  });
760
769
  }
@@ -832,17 +841,20 @@ const AddActionToReleaseModal = ({
832
841
  const CMReleasesContainer = () => {
833
842
  const [isModalOpen, setIsModalOpen] = React__namespace.useState(false);
834
843
  const { formatMessage, formatDate, formatTime } = reactIntl.useIntl();
835
- const {
836
- isCreatingEntry,
837
- hasDraftAndPublish,
838
- initialData: { id: entryId },
839
- slug
840
- } = helperPlugin.useCMEditViewDataManager();
844
+ const { id, slug, collectionType } = reactRouterDom.useParams();
845
+ const isCreatingEntry = id === "create";
846
+ const { allowedActions } = strapiAdmin.useRBAC(PERMISSIONS);
847
+ const { canCreateAction, canRead: canMain, canDeleteAction } = allowedActions;
848
+ const { schema } = strapiAdmin$1.unstable_useDocument({
849
+ collectionType,
850
+ model: slug
851
+ });
852
+ const hasDraftAndPublish = schema?.options?.draftAndPublish;
841
853
  const contentTypeUid = slug;
842
- const canFetch = entryId != null && contentTypeUid != null;
854
+ const canFetch = id != null && contentTypeUid != null;
843
855
  const fetchParams = canFetch ? {
844
856
  contentTypeUid,
845
- entryId,
857
+ entryId: id,
846
858
  hasEntryAttached: true
847
859
  } : query.skipToken;
848
860
  const response = useGetReleasesForEntryQuery(fetchParams);
@@ -860,7 +872,10 @@ const CMReleasesContainer = () => {
860
872
  }
861
873
  return `success${shade}`;
862
874
  };
863
- return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: PERMISSIONS.main, children: /* @__PURE__ */ jsxRuntime.jsxs(
875
+ if (!canMain) {
876
+ return null;
877
+ }
878
+ return /* @__PURE__ */ jsxRuntime.jsxs(
864
879
  designSystem.Box,
865
880
  {
866
881
  as: "aside",
@@ -917,7 +932,7 @@ const CMReleasesContainer = () => {
917
932
  )
918
933
  }
919
934
  ),
920
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: [
935
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: [
921
936
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontSize: 2, fontWeight: "bold", variant: "omega", textColor: "neutral700", children: release.name }),
922
937
  release.scheduledAt && release.timezone && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", children: formatMessage(
923
938
  {
@@ -941,7 +956,7 @@ const CMReleasesContainer = () => {
941
956
  )
942
957
  }
943
958
  ) }),
944
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: PERMISSIONS.deleteAction, children: /* @__PURE__ */ jsxRuntime.jsxs(ReleaseActionMenu.Root, { hasTriggerBorder: true, children: [
959
+ canDeleteAction ? /* @__PURE__ */ jsxRuntime.jsxs(ReleaseActionMenu.Root, { hasTriggerBorder: true, children: [
945
960
  /* @__PURE__ */ jsxRuntime.jsx(ReleaseActionMenu.EditReleaseItem, { releaseId: release.id }),
946
961
  /* @__PURE__ */ jsxRuntime.jsx(
947
962
  ReleaseActionMenu.DeleteReleaseActionItem,
@@ -950,14 +965,14 @@ const CMReleasesContainer = () => {
950
965
  actionId: release.actions[0].id
951
966
  }
952
967
  )
953
- ] }) })
954
- ] })
968
+ ] }) : null
969
+ ] }) })
955
970
  ]
956
971
  },
957
972
  release.id
958
973
  );
959
974
  }),
960
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: PERMISSIONS.createAction, children: /* @__PURE__ */ jsxRuntime.jsx(
975
+ canCreateAction ? /* @__PURE__ */ jsxRuntime.jsx(
961
976
  designSystem.Button,
962
977
  {
963
978
  justifyContent: "center",
@@ -972,19 +987,19 @@ const CMReleasesContainer = () => {
972
987
  defaultMessage: "Add to release"
973
988
  })
974
989
  }
975
- ) })
990
+ ) : null
976
991
  ] }),
977
992
  isModalOpen && /* @__PURE__ */ jsxRuntime.jsx(
978
993
  AddActionToReleaseModal,
979
994
  {
980
995
  handleClose: toggleModal,
981
996
  contentTypeUid,
982
- entryId
997
+ entryId: id
983
998
  }
984
999
  )
985
1000
  ]
986
1001
  }
987
- ) });
1002
+ );
988
1003
  };
989
1004
  const getContentPermissions = (subject) => {
990
1005
  const permissions = {
@@ -1001,31 +1016,33 @@ const getContentPermissions = (subject) => {
1001
1016
  };
1002
1017
  return permissions;
1003
1018
  };
1004
- const ReleaseAction = ({ ids, model }) => {
1019
+ const ReleaseAction = ({ documentIds, model }) => {
1005
1020
  const { formatMessage } = reactIntl.useIntl();
1006
- const toggleNotification = helperPlugin.useNotification();
1007
- const { formatAPIError } = helperPlugin.useAPIErrorHandler();
1008
- const { modifiedData } = helperPlugin.useCMEditViewDataManager();
1021
+ const { toggleNotification } = strapiAdmin.useNotification();
1022
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
1023
+ const [{ query: query2 }] = strapiAdmin.useQueryParams();
1009
1024
  const contentPermissions = getContentPermissions(model);
1010
1025
  const {
1011
1026
  allowedActions: { canPublish }
1012
- } = helperPlugin.useRBAC(contentPermissions);
1027
+ } = strapiAdmin.useRBAC(contentPermissions);
1013
1028
  const {
1014
1029
  allowedActions: { canCreate }
1015
- } = helperPlugin.useRBAC(PERMISSIONS);
1030
+ } = strapiAdmin.useRBAC(PERMISSIONS);
1016
1031
  const response = useGetReleasesQuery();
1017
1032
  const releases = response.data?.data;
1018
1033
  const [createManyReleaseActions, { isLoading }] = useCreateManyReleaseActionsMutation();
1019
1034
  const handleSubmit = async (values) => {
1020
- const locale = modifiedData.locale;
1021
- const releaseActionEntries = ids.map((id) => ({
1022
- type: values.type,
1023
- entry: {
1024
- contentType: model,
1025
- id,
1026
- locale
1027
- }
1028
- }));
1035
+ const locale = query2.plugins?.i18n?.locale;
1036
+ const releaseActionEntries = documentIds.map(
1037
+ (id) => ({
1038
+ type: values.type,
1039
+ entry: {
1040
+ contentType: model,
1041
+ id,
1042
+ locale
1043
+ }
1044
+ })
1045
+ );
1029
1046
  const response2 = await createManyReleaseActions({
1030
1047
  body: releaseActionEntries,
1031
1048
  params: { releaseId: values.releaseId }
@@ -1157,96 +1174,14 @@ const ReleaseAction = ({ ids, model }) => {
1157
1174
  }
1158
1175
  };
1159
1176
  };
1160
- const Button = styled__default.default.button`
1161
- svg {
1162
- > g,
1163
- path {
1164
- fill: ${({ theme }) => theme.colors.neutral500};
1165
- }
1166
- }
1167
- &:hover {
1168
- svg {
1169
- > g,
1170
- path {
1171
- fill: ${({ theme }) => theme.colors.neutral600};
1172
- }
1173
- }
1174
- }
1175
- &:active {
1176
- svg {
1177
- > g,
1178
- path {
1179
- fill: ${({ theme }) => theme.colors.neutral400};
1180
- }
1181
- }
1182
- }
1183
- `;
1184
- const ActionWrapper = styled__default.default(designSystem.Flex)`
1185
- svg {
1186
- height: ${4 / 16}rem;
1187
- }
1188
- `;
1189
- const useReleasesList = (entryId) => {
1190
- const { uid: contentTypeUid } = useTypedSelector(
1191
- (state) => state["content-manager_listView"].contentType
1192
- );
1193
- const listViewData = useTypedSelector((state) => state["content-manager_listView"].data);
1194
- const entriesIds = listViewData.map((entry) => entry.id);
1195
- const response = useGetMappedEntriesInReleasesQuery(
1196
- { contentTypeUid, entriesIds },
1197
- { skip: !entriesIds || !contentTypeUid || entriesIds.length === 0 }
1198
- );
1199
- const mappedEntriesInReleases = response.data || {};
1200
- return mappedEntriesInReleases?.[entryId] || [];
1201
- };
1202
- const addColumnToTableHook = ({ displayedHeaders, layout }) => {
1203
- const { contentType } = layout;
1204
- if (!contentType.options?.draftAndPublish) {
1205
- return { displayedHeaders, layout };
1177
+ const prefixPluginTranslations = (trad, pluginId2) => {
1178
+ if (!pluginId2) {
1179
+ throw new TypeError("pluginId can't be empty");
1206
1180
  }
1207
- return {
1208
- displayedHeaders: [
1209
- ...displayedHeaders,
1210
- {
1211
- key: "__release_key__",
1212
- fieldSchema: { type: "string" },
1213
- metadatas: { label: "To be released in", searchable: true, sortable: false },
1214
- name: "releasedAt",
1215
- cellFormatter: (props) => /* @__PURE__ */ jsxRuntime.jsx(ReleaseListCell, { ...props })
1216
- }
1217
- ],
1218
- layout
1219
- };
1220
- };
1221
- const ReleaseListCell = ({ id }) => {
1222
- const releases = useReleasesList(id);
1223
- const [visible, setVisible] = React__namespace.useState(false);
1224
- const buttonRef = React__namespace.useRef(null);
1225
- const { formatMessage } = reactIntl.useIntl();
1226
- const handleTogglePopover = () => setVisible((prev) => !prev);
1227
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "button", onClick: handleTogglePopover, ref: buttonRef, children: /* @__PURE__ */ jsxRuntime.jsxs(ActionWrapper, { height: "2rem", width: "2rem", children: [
1228
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { style: { maxWidth: "252px", cursor: "pointer" }, textColor: "neutral800", children: releases.length > 0 ? formatMessage(
1229
- {
1230
- id: "content-releases.content-manager.list-view.releases-number",
1231
- defaultMessage: "{number} {number, plural, one {release} other {releases}}"
1232
- },
1233
- {
1234
- number: releases.length
1235
- }
1236
- ) : "-" }),
1237
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { children: [
1238
- releases.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.SortIcon, {}),
1239
- visible && /* @__PURE__ */ jsxRuntime.jsx(
1240
- designSystem.Popover,
1241
- {
1242
- onDismiss: handleTogglePopover,
1243
- source: buttonRef,
1244
- spacing: 16,
1245
- children: /* @__PURE__ */ jsxRuntime.jsx("ul", { children: releases.map(({ id: id2, name }) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 3, as: "li", children: /* @__PURE__ */ jsxRuntime.jsx(v2.Link, { href: `/admin/plugins/content-releases/${id2}`, isExternal: false, children: name }) }, id2)) })
1246
- }
1247
- )
1248
- ] })
1249
- ] }) }) });
1181
+ return Object.keys(trad).reduce((acc, current) => {
1182
+ acc[`${pluginId2}.${current}`] = trad[current];
1183
+ return acc;
1184
+ }, {});
1250
1185
  };
1251
1186
  const admin = {
1252
1187
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -1254,23 +1189,20 @@ const admin = {
1254
1189
  app.createHook("ContentReleases/pages/ReleaseDetails/add-locale-in-releases");
1255
1190
  if (window.strapi.features.isEnabled("cms-content-releases")) {
1256
1191
  app.addMenuLink({
1257
- to: `/plugins/${pluginId}`,
1192
+ to: `plugins/${pluginId}`,
1258
1193
  icon: icons.PaperPlane,
1259
1194
  intlLabel: {
1260
1195
  id: `${pluginId}.plugin.name`,
1261
1196
  defaultMessage: "Releases"
1262
1197
  },
1263
- async Component() {
1264
- const { App } = await Promise.resolve().then(() => require("./App-HjWtUYmc.js"));
1265
- return App;
1266
- },
1198
+ Component: () => Promise.resolve().then(() => require("./App-FVorrIzF.js")).then((mod) => ({ default: mod.App })),
1267
1199
  permissions: PERMISSIONS.main
1268
1200
  });
1269
1201
  app.addMiddlewares([() => releaseApi.middleware]);
1270
1202
  app.addReducers({
1271
1203
  [releaseApi.reducerPath]: releaseApi.reducer
1272
1204
  });
1273
- app.injectContentManagerComponent("editView", "right-links", {
1205
+ app.getPlugin("content-manager").injectComponent("editView", "right-links", {
1274
1206
  name: `${pluginId}-link`,
1275
1207
  Component: CMReleasesContainer
1276
1208
  });
@@ -1279,7 +1211,6 @@ const admin = {
1279
1211
  actions.splice(deleteActionIndex, 0, ReleaseAction);
1280
1212
  return actions;
1281
1213
  });
1282
- app.registerHook("Admin/CM/pages/ListView/inject-column-in-table", addColumnToTableHook);
1283
1214
  } else if (!window.strapi.features.isEnabled("cms-content-releases") && window.strapi?.flags?.promoteEE) {
1284
1215
  app.addMenuLink({
1285
1216
  to: `/plugins/purchase-content-releases`,
@@ -1288,9 +1219,10 @@ const admin = {
1288
1219
  id: `${pluginId}.plugin.name`,
1289
1220
  defaultMessage: "Releases"
1290
1221
  },
1222
+ permissions: [],
1291
1223
  async Component() {
1292
- const { PurchaseContentReleases } = await Promise.resolve().then(() => require("./PurchaseContentReleases-bpIYXOfu.js"));
1293
- return PurchaseContentReleases;
1224
+ const { PurchaseContentReleases } = await Promise.resolve().then(() => require("./PurchaseContentReleases-sD6ADHk2.js"));
1225
+ return { default: PurchaseContentReleases };
1294
1226
  },
1295
1227
  lockIcon: true
1296
1228
  });
@@ -1299,9 +1231,9 @@ const admin = {
1299
1231
  async registerTrads({ locales }) {
1300
1232
  const importedTrads = await Promise.all(
1301
1233
  locales.map((locale) => {
1302
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-HrREghh3.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
1234
+ return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-DtFJ5ViE.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
1303
1235
  return {
1304
- data: helperPlugin.prefixPluginTranslations(data, "content-releases"),
1236
+ data: prefixPluginTranslations(data, "content-releases"),
1305
1237
  locale
1306
1238
  };
1307
1239
  }).catch(() => {
@@ -1329,7 +1261,6 @@ exports.useGetReleaseActionsQuery = useGetReleaseActionsQuery;
1329
1261
  exports.useGetReleaseQuery = useGetReleaseQuery;
1330
1262
  exports.useGetReleasesQuery = useGetReleasesQuery;
1331
1263
  exports.usePublishReleaseMutation = usePublishReleaseMutation;
1332
- exports.useTypedDispatch = useTypedDispatch;
1333
1264
  exports.useUpdateReleaseActionMutation = useUpdateReleaseActionMutation;
1334
1265
  exports.useUpdateReleaseMutation = useUpdateReleaseMutation;
1335
- //# sourceMappingURL=index-ZNwxYN8H.js.map
1266
+ //# sourceMappingURL=index-BfJLth9Z.js.map