@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,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
- const v2 = require("@strapi/design-system/v2");
8
+ const symbols = require("@strapi/icons/symbols");
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 };
@@ -159,7 +159,7 @@ const isAxiosError = (err) => {
159
159
  const releaseApi = react.createApi({
160
160
  reducerPath: pluginId,
161
161
  baseQuery: axiosBaseQuery,
162
- tagTypes: ["Release", "ReleaseAction"],
162
+ tagTypes: ["Release", "ReleaseAction", "EntriesInRelease"],
163
163
  endpoints: (build) => {
164
164
  return {
165
165
  getReleasesForEntry: build.query({
@@ -284,7 +284,8 @@ const releaseApi = react.createApi({
284
284
  },
285
285
  invalidatesTags: [
286
286
  { type: "Release", id: "LIST" },
287
- { type: "ReleaseAction", id: "LIST" }
287
+ { type: "ReleaseAction", id: "LIST" },
288
+ { type: "EntriesInRelease" }
288
289
  ]
289
290
  }),
290
291
  updateReleaseAction: build.mutation({
@@ -327,7 +328,8 @@ const releaseApi = react.createApi({
327
328
  invalidatesTags: (result, error, arg) => [
328
329
  { type: "Release", id: "LIST" },
329
330
  { type: "Release", id: arg.params.releaseId },
330
- { type: "ReleaseAction", id: "LIST" }
331
+ { type: "ReleaseAction", id: "LIST" },
332
+ { type: "EntriesInRelease" }
331
333
  ]
332
334
  }),
333
335
  publishRelease: build.mutation({
@@ -346,7 +348,22 @@ const releaseApi = react.createApi({
346
348
  method: "DELETE"
347
349
  };
348
350
  },
349
- invalidatesTags: () => [{ type: "Release", id: "LIST" }]
351
+ invalidatesTags: () => [{ type: "Release", id: "LIST" }, { type: "EntriesInRelease" }]
352
+ }),
353
+ getMappedEntriesInReleases: build.query({
354
+ query(params) {
355
+ return {
356
+ url: "/content-releases/mapEntriesToReleases",
357
+ method: "GET",
358
+ config: {
359
+ params
360
+ }
361
+ };
362
+ },
363
+ transformResponse(response) {
364
+ return response.data;
365
+ },
366
+ providesTags: [{ type: "EntriesInRelease" }]
350
367
  })
351
368
  };
352
369
  }
@@ -363,7 +380,8 @@ const {
363
380
  useUpdateReleaseActionMutation,
364
381
  usePublishReleaseMutation,
365
382
  useDeleteReleaseActionMutation,
366
- useDeleteReleaseMutation
383
+ useDeleteReleaseMutation,
384
+ useGetMappedEntriesInReleasesQuery
367
385
  } = releaseApi;
368
386
  const getTimezoneOffset = (timezone, date) => {
369
387
  try {
@@ -381,16 +399,12 @@ const getTimezoneOffset = (timezone, date) => {
381
399
  return "";
382
400
  }
383
401
  };
384
- const useTypedDispatch = reactRedux.useDispatch;
385
- const useTypedSelector = reactRedux.useSelector;
386
- const StyledMenuItem = styled__default.default(v2.Menu.Item)`
402
+ const StyledMenuItem = styled__default.default(designSystem.Menu.Item)`
387
403
  &:hover {
388
404
  background: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}100`]};
389
405
 
390
406
  svg {
391
- path {
392
- fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
393
- }
407
+ fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
394
408
  }
395
409
 
396
410
  a {
@@ -399,9 +413,7 @@ const StyledMenuItem = styled__default.default(v2.Menu.Item)`
399
413
  }
400
414
 
401
415
  svg {
402
- path {
403
- fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
404
- }
416
+ fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
405
417
  }
406
418
 
407
419
  a {
@@ -419,9 +431,12 @@ const StyledIconButton = styled__default.default(designSystem.IconButton)`
419
431
  `;
420
432
  const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
421
433
  const { formatMessage } = reactIntl.useIntl();
422
- const toggleNotification = helperPlugin.useNotification();
423
- const { formatAPIError } = helperPlugin.useAPIErrorHandler();
434
+ const { toggleNotification } = strapiAdmin.useNotification();
435
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
424
436
  const [deleteReleaseAction] = useDeleteReleaseActionMutation();
437
+ const {
438
+ allowedActions: { canDeleteAction }
439
+ } = strapiAdmin.useRBAC(PERMISSIONS);
425
440
  const handleDeleteAction = async () => {
426
441
  const response = await deleteReleaseAction({
427
442
  params: { releaseId, actionId }
@@ -439,24 +454,27 @@ const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
439
454
  if ("error" in response) {
440
455
  if (axios.isAxiosError(response.error)) {
441
456
  toggleNotification({
442
- type: "warning",
457
+ type: "danger",
443
458
  message: formatAPIError(response.error)
444
459
  });
445
460
  } else {
446
461
  toggleNotification({
447
- type: "warning",
462
+ type: "danger",
448
463
  message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
449
464
  });
450
465
  }
451
466
  }
452
467
  };
453
- 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: [
454
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: icons.Cross, width: 3, height: 3 }),
468
+ if (!canDeleteAction) {
469
+ return null;
470
+ }
471
+ return /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { variant: "danger", onSelect: handleDeleteAction, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
472
+ /* @__PURE__ */ jsxRuntime.jsx(icons.Cross, { width: "1.2rem", height: "1.2rem" }),
455
473
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "danger600", variant: "omega", children: formatMessage({
456
474
  id: "content-releases.content-manager-edit-view.remove-from-release",
457
475
  defaultMessage: "Remove from release"
458
476
  }) })
459
- ] }) }) });
477
+ ] }) });
460
478
  };
461
479
  const ReleaseActionEntryLinkItem = ({
462
480
  contentTypeUid,
@@ -464,49 +482,52 @@ const ReleaseActionEntryLinkItem = ({
464
482
  locale
465
483
  }) => {
466
484
  const { formatMessage } = reactIntl.useIntl();
467
- const collectionTypePermissions = useTypedSelector(
468
- (state) => state.rbacProvider.collectionTypesRelatedPermissions
469
- );
470
- const updatePermissions = contentTypeUid ? collectionTypePermissions[contentTypeUid]?.["plugin::content-manager.explorer.update"] : [];
471
- const canUpdateEntryForLocale = Boolean(
472
- !locale || updatePermissions?.find(
473
- (permission) => permission.properties?.locales?.includes(locale)
474
- )
475
- );
476
- return /* @__PURE__ */ jsxRuntime.jsx(
477
- helperPlugin.CheckPermissions,
485
+ const userPermissions = strapiAdmin.useAuth("ReleaseActionEntryLinkItem", (state) => state.permissions);
486
+ const canUpdateEntryForLocale = React__namespace.useMemo(() => {
487
+ const updatePermissions = userPermissions.find(
488
+ (permission) => permission.subject === contentTypeUid && permission.action === "plugin::content-manager.explorer.update"
489
+ );
490
+ if (!updatePermissions) {
491
+ return false;
492
+ }
493
+ return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));
494
+ }, [contentTypeUid, locale, userPermissions]);
495
+ const {
496
+ allowedActions: { canUpdate: canUpdateContentType }
497
+ } = strapiAdmin.useRBAC({
498
+ updateContentType: [
499
+ {
500
+ action: "plugin::content-manager.explorer.update",
501
+ subject: contentTypeUid
502
+ }
503
+ ]
504
+ });
505
+ if (!canUpdateContentType || !canUpdateEntryForLocale) {
506
+ return null;
507
+ }
508
+ return /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
509
+ designSystem.Link,
478
510
  {
479
- permissions: [
480
- {
481
- action: "plugin::content-manager.explorer.update",
482
- subject: contentTypeUid
483
- }
484
- ],
485
- children: canUpdateEntryForLocale && /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
486
- v2.Link,
487
- {
488
- as: reactRouterDom.NavLink,
489
- to: {
490
- pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
491
- search: locale && `?plugins[i18n][locale]=${locale}`
492
- },
493
- startIcon: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: icons.Pencil, width: 3, height: 3 }),
494
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", children: formatMessage({
495
- id: "content-releases.content-manager-edit-view.edit-entry",
496
- defaultMessage: "Edit entry"
497
- }) })
498
- }
499
- ) })
511
+ as: reactRouterDom.NavLink,
512
+ to: {
513
+ pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
514
+ search: locale && `?plugins[i18n][locale]=${locale}`
515
+ },
516
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, { width: "1.2rem", height: "1.2rem" }),
517
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", children: formatMessage({
518
+ id: "content-releases.content-manager-edit-view.edit-entry",
519
+ defaultMessage: "Edit entry"
520
+ }) })
500
521
  }
501
- );
522
+ ) });
502
523
  };
503
524
  const EditReleaseItem = ({ releaseId }) => {
504
525
  const { formatMessage } = reactIntl.useIntl();
505
526
  return /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
506
- v2.Link,
527
+ designSystem.Link,
507
528
  {
508
529
  href: `/admin/plugins/content-releases/${releaseId}`,
509
- startIcon: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: icons.Pencil, width: 3, height: 3 }),
530
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, { width: "1.2rem", height: "1.2rem" }),
510
531
  isExternal: false,
511
532
  children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", children: formatMessage({
512
533
  id: "content-releases.content-manager-edit-view.edit-release",
@@ -517,11 +538,12 @@ const EditReleaseItem = ({ releaseId }) => {
517
538
  };
518
539
  const Root = ({ children, hasTriggerBorder = false }) => {
519
540
  const { formatMessage } = reactIntl.useIntl();
541
+ const { allowedActions } = strapiAdmin.useRBAC(PERMISSIONS);
520
542
  return (
521
543
  // A user can access the dropdown if they have permissions to delete a release-action OR update a release
522
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: [...PERMISSIONS.deleteAction, ...PERMISSIONS.update], children: /* @__PURE__ */ jsxRuntime.jsxs(v2.Menu.Root, { children: [
544
+ allowedActions.canDeleteAction || allowedActions.canUpdate ? /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Root, { children: [
523
545
  /* @__PURE__ */ jsxRuntime.jsx(
524
- v2.Menu.Trigger,
546
+ designSystem.Menu.Trigger,
525
547
  {
526
548
  as: hasTriggerBorder ? StyledIconButton : designSystem.IconButton,
527
549
  paddingLeft: 2,
@@ -533,8 +555,8 @@ const Root = ({ children, hasTriggerBorder = false }) => {
533
555
  icon: /* @__PURE__ */ jsxRuntime.jsx(icons.More, {})
534
556
  }
535
557
  ),
536
- /* @__PURE__ */ jsxRuntime.jsx(v2.Menu.Content, { top: 1, popoverPlacement: "bottom-end", children })
537
- ] }) })
558
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.Content, { top: 1, popoverPlacement: "bottom-end", children })
559
+ ] }) : null
538
560
  );
539
561
  };
540
562
  const ReleaseActionMenu = {
@@ -666,14 +688,15 @@ const INITIAL_VALUES = {
666
688
  const NoReleases = () => {
667
689
  const { formatMessage } = reactIntl.useIntl();
668
690
  return /* @__PURE__ */ jsxRuntime.jsx(
669
- helperPlugin.NoContent,
691
+ designSystem.EmptyStateLayout,
670
692
  {
671
- content: {
693
+ icon: /* @__PURE__ */ jsxRuntime.jsx(symbols.EmptyDocuments, { width: "16rem" }),
694
+ content: formatMessage({
672
695
  id: "content-releases.content-manager-edit-view.add-to-release.no-releases-message",
673
696
  defaultMessage: "No available releases. Open the list of releases and create a new one from there."
674
- },
697
+ }),
675
698
  action: /* @__PURE__ */ jsxRuntime.jsx(
676
- v2.LinkButton,
699
+ designSystem.LinkButton,
677
700
  {
678
701
  to: {
679
702
  pathname: "/plugins/content-releases"
@@ -696,9 +719,10 @@ const AddActionToReleaseModal = ({
696
719
  }) => {
697
720
  const releaseHeaderId = React__namespace.useId();
698
721
  const { formatMessage } = reactIntl.useIntl();
699
- const toggleNotification = helperPlugin.useNotification();
700
- const { formatAPIError } = helperPlugin.useAPIErrorHandler();
701
- const { modifiedData } = helperPlugin.useCMEditViewDataManager();
722
+ const { toggleNotification } = strapiAdmin.useNotification();
723
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
724
+ const [{ query: query2 }] = strapiAdmin.useQueryParams();
725
+ const locale = query2.plugins?.i18n?.locale;
702
726
  const response = useGetReleasesForEntryQuery({
703
727
  contentTypeUid,
704
728
  entryId,
@@ -707,7 +731,6 @@ const AddActionToReleaseModal = ({
707
731
  const releases = response.data?.data;
708
732
  const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();
709
733
  const handleSubmit = async (values) => {
710
- const locale = modifiedData.locale;
711
734
  const releaseActionEntry = {
712
735
  contentType: contentTypeUid,
713
736
  id: entryId,
@@ -731,12 +754,12 @@ const AddActionToReleaseModal = ({
731
754
  if ("error" in response2) {
732
755
  if (axios.isAxiosError(response2.error)) {
733
756
  toggleNotification({
734
- type: "warning",
757
+ type: "danger",
735
758
  message: formatAPIError(response2.error)
736
759
  });
737
760
  } else {
738
761
  toggleNotification({
739
- type: "warning",
762
+ type: "danger",
740
763
  message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
741
764
  });
742
765
  }
@@ -814,17 +837,20 @@ const AddActionToReleaseModal = ({
814
837
  const CMReleasesContainer = () => {
815
838
  const [isModalOpen, setIsModalOpen] = React__namespace.useState(false);
816
839
  const { formatMessage, formatDate, formatTime } = reactIntl.useIntl();
817
- const {
818
- isCreatingEntry,
819
- hasDraftAndPublish,
820
- initialData: { id: entryId },
821
- slug
822
- } = helperPlugin.useCMEditViewDataManager();
840
+ const { id, slug, collectionType } = reactRouterDom.useParams();
841
+ const isCreatingEntry = id === "create";
842
+ const { allowedActions } = strapiAdmin.useRBAC(PERMISSIONS);
843
+ const { canCreateAction, canRead: canMain, canDeleteAction } = allowedActions;
844
+ const { schema } = strapiAdmin$1.unstable_useDocument({
845
+ collectionType,
846
+ model: slug
847
+ });
848
+ const hasDraftAndPublish = schema?.options?.draftAndPublish;
823
849
  const contentTypeUid = slug;
824
- const canFetch = entryId != null && contentTypeUid != null;
850
+ const canFetch = id != null && contentTypeUid != null;
825
851
  const fetchParams = canFetch ? {
826
852
  contentTypeUid,
827
- entryId,
853
+ entryId: id,
828
854
  hasEntryAttached: true
829
855
  } : query.skipToken;
830
856
  const response = useGetReleasesForEntryQuery(fetchParams);
@@ -842,7 +868,10 @@ const CMReleasesContainer = () => {
842
868
  }
843
869
  return `success${shade}`;
844
870
  };
845
- return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: PERMISSIONS.main, children: /* @__PURE__ */ jsxRuntime.jsxs(
871
+ if (!canMain) {
872
+ return null;
873
+ }
874
+ return /* @__PURE__ */ jsxRuntime.jsxs(
846
875
  designSystem.Box,
847
876
  {
848
877
  as: "aside",
@@ -869,7 +898,7 @@ const CMReleasesContainer = () => {
869
898
  alignItems: "start",
870
899
  borderWidth: "1px",
871
900
  borderStyle: "solid",
872
- borderColor: getReleaseColorVariant(release.action.type, "200"),
901
+ borderColor: getReleaseColorVariant(release.actions[0].type, "200"),
873
902
  overflow: "hidden",
874
903
  hasRadius: true,
875
904
  children: [
@@ -880,26 +909,26 @@ const CMReleasesContainer = () => {
880
909
  paddingBottom: 3,
881
910
  paddingLeft: 4,
882
911
  paddingRight: 4,
883
- background: getReleaseColorVariant(release.action.type, "100"),
912
+ background: getReleaseColorVariant(release.actions[0].type, "100"),
884
913
  width: "100%",
885
914
  children: /* @__PURE__ */ jsxRuntime.jsx(
886
915
  designSystem.Typography,
887
916
  {
888
917
  fontSize: 1,
889
918
  variant: "pi",
890
- textColor: getReleaseColorVariant(release.action.type, "600"),
919
+ textColor: getReleaseColorVariant(release.actions[0].type, "600"),
891
920
  children: formatMessage(
892
921
  {
893
922
  id: "content-releases.content-manager-edit-view.list-releases.title",
894
923
  defaultMessage: "{isPublish, select, true {Will be published in} other {Will be unpublished in}}"
895
924
  },
896
- { isPublish: release.action.type === "publish" }
925
+ { isPublish: release.actions[0].type === "publish" }
897
926
  )
898
927
  }
899
928
  )
900
929
  }
901
930
  ),
902
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: [
931
+ /* @__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: [
903
932
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontSize: 2, fontWeight: "bold", variant: "omega", textColor: "neutral700", children: release.name }),
904
933
  release.scheduledAt && release.timezone && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", children: formatMessage(
905
934
  {
@@ -923,23 +952,23 @@ const CMReleasesContainer = () => {
923
952
  )
924
953
  }
925
954
  ) }),
926
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: PERMISSIONS.deleteAction, children: /* @__PURE__ */ jsxRuntime.jsxs(ReleaseActionMenu.Root, { hasTriggerBorder: true, children: [
955
+ canDeleteAction ? /* @__PURE__ */ jsxRuntime.jsxs(ReleaseActionMenu.Root, { hasTriggerBorder: true, children: [
927
956
  /* @__PURE__ */ jsxRuntime.jsx(ReleaseActionMenu.EditReleaseItem, { releaseId: release.id }),
928
957
  /* @__PURE__ */ jsxRuntime.jsx(
929
958
  ReleaseActionMenu.DeleteReleaseActionItem,
930
959
  {
931
960
  releaseId: release.id,
932
- actionId: release.action.id
961
+ actionId: release.actions[0].id
933
962
  }
934
963
  )
935
- ] }) })
936
- ] })
964
+ ] }) : null
965
+ ] }) })
937
966
  ]
938
967
  },
939
968
  release.id
940
969
  );
941
970
  }),
942
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: PERMISSIONS.createAction, children: /* @__PURE__ */ jsxRuntime.jsx(
971
+ canCreateAction ? /* @__PURE__ */ jsxRuntime.jsx(
943
972
  designSystem.Button,
944
973
  {
945
974
  justifyContent: "center",
@@ -954,19 +983,19 @@ const CMReleasesContainer = () => {
954
983
  defaultMessage: "Add to release"
955
984
  })
956
985
  }
957
- ) })
986
+ ) : null
958
987
  ] }),
959
988
  isModalOpen && /* @__PURE__ */ jsxRuntime.jsx(
960
989
  AddActionToReleaseModal,
961
990
  {
962
991
  handleClose: toggleModal,
963
992
  contentTypeUid,
964
- entryId
993
+ entryId: id
965
994
  }
966
995
  )
967
996
  ]
968
997
  }
969
- ) });
998
+ );
970
999
  };
971
1000
  const getContentPermissions = (subject) => {
972
1001
  const permissions = {
@@ -983,31 +1012,33 @@ const getContentPermissions = (subject) => {
983
1012
  };
984
1013
  return permissions;
985
1014
  };
986
- const ReleaseAction = ({ ids, model }) => {
1015
+ const ReleaseAction = ({ documentIds, model }) => {
987
1016
  const { formatMessage } = reactIntl.useIntl();
988
- const toggleNotification = helperPlugin.useNotification();
989
- const { formatAPIError } = helperPlugin.useAPIErrorHandler();
990
- const { modifiedData } = helperPlugin.useCMEditViewDataManager();
1017
+ const { toggleNotification } = strapiAdmin.useNotification();
1018
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
1019
+ const [{ query: query2 }] = strapiAdmin.useQueryParams();
991
1020
  const contentPermissions = getContentPermissions(model);
992
1021
  const {
993
1022
  allowedActions: { canPublish }
994
- } = helperPlugin.useRBAC(contentPermissions);
1023
+ } = strapiAdmin.useRBAC(contentPermissions);
995
1024
  const {
996
1025
  allowedActions: { canCreate }
997
- } = helperPlugin.useRBAC(PERMISSIONS);
1026
+ } = strapiAdmin.useRBAC(PERMISSIONS);
998
1027
  const response = useGetReleasesQuery();
999
1028
  const releases = response.data?.data;
1000
1029
  const [createManyReleaseActions, { isLoading }] = useCreateManyReleaseActionsMutation();
1001
1030
  const handleSubmit = async (values) => {
1002
- const locale = modifiedData.locale;
1003
- const releaseActionEntries = ids.map((id) => ({
1004
- type: values.type,
1005
- entry: {
1006
- contentType: model,
1007
- id,
1008
- locale
1009
- }
1010
- }));
1031
+ const locale = query2.plugins?.i18n?.locale;
1032
+ const releaseActionEntries = documentIds.map(
1033
+ (id) => ({
1034
+ type: values.type,
1035
+ entry: {
1036
+ contentType: model,
1037
+ id,
1038
+ locale
1039
+ }
1040
+ })
1041
+ );
1011
1042
  const response2 = await createManyReleaseActions({
1012
1043
  body: releaseActionEntries,
1013
1044
  params: { releaseId: values.releaseId }
@@ -1139,28 +1170,35 @@ const ReleaseAction = ({ ids, model }) => {
1139
1170
  }
1140
1171
  };
1141
1172
  };
1173
+ const prefixPluginTranslations = (trad, pluginId2) => {
1174
+ if (!pluginId2) {
1175
+ throw new TypeError("pluginId can't be empty");
1176
+ }
1177
+ return Object.keys(trad).reduce((acc, current) => {
1178
+ acc[`${pluginId2}.${current}`] = trad[current];
1179
+ return acc;
1180
+ }, {});
1181
+ };
1142
1182
  const admin = {
1143
1183
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1144
1184
  register(app) {
1185
+ app.createHook("ContentReleases/pages/ReleaseDetails/add-locale-in-releases");
1145
1186
  if (window.strapi.features.isEnabled("cms-content-releases")) {
1146
1187
  app.addMenuLink({
1147
- to: `/plugins/${pluginId}`,
1188
+ to: `plugins/${pluginId}`,
1148
1189
  icon: icons.PaperPlane,
1149
1190
  intlLabel: {
1150
1191
  id: `${pluginId}.plugin.name`,
1151
1192
  defaultMessage: "Releases"
1152
1193
  },
1153
- async Component() {
1154
- const { App } = await Promise.resolve().then(() => require("./App-OP70yd5M.js"));
1155
- return App;
1156
- },
1194
+ Component: () => Promise.resolve().then(() => require("./App-C0DlH0im.js")).then((mod) => ({ default: mod.App })),
1157
1195
  permissions: PERMISSIONS.main
1158
1196
  });
1159
1197
  app.addMiddlewares([() => releaseApi.middleware]);
1160
1198
  app.addReducers({
1161
1199
  [releaseApi.reducerPath]: releaseApi.reducer
1162
1200
  });
1163
- app.injectContentManagerComponent("editView", "right-links", {
1201
+ app.getPlugin("content-manager").injectComponent("editView", "right-links", {
1164
1202
  name: `${pluginId}-link`,
1165
1203
  Component: CMReleasesContainer
1166
1204
  });
@@ -1177,9 +1215,10 @@ const admin = {
1177
1215
  id: `${pluginId}.plugin.name`,
1178
1216
  defaultMessage: "Releases"
1179
1217
  },
1218
+ permissions: [],
1180
1219
  async Component() {
1181
- const { PurchaseContentReleases } = await Promise.resolve().then(() => require("./PurchaseContentReleases-bpIYXOfu.js"));
1182
- return PurchaseContentReleases;
1220
+ const { PurchaseContentReleases } = await Promise.resolve().then(() => require("./PurchaseContentReleases-DAHdUpAA.js"));
1221
+ return { default: PurchaseContentReleases };
1183
1222
  },
1184
1223
  lockIcon: true
1185
1224
  });
@@ -1188,9 +1227,9 @@ const admin = {
1188
1227
  async registerTrads({ locales }) {
1189
1228
  const importedTrads = await Promise.all(
1190
1229
  locales.map((locale) => {
1191
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-3SGjiVyR.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
1230
+ return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-DtFJ5ViE.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
1192
1231
  return {
1193
- data: helperPlugin.prefixPluginTranslations(data, "content-releases"),
1232
+ data: prefixPluginTranslations(data, "content-releases"),
1194
1233
  locale
1195
1234
  };
1196
1235
  }).catch(() => {
@@ -1218,7 +1257,6 @@ exports.useGetReleaseActionsQuery = useGetReleaseActionsQuery;
1218
1257
  exports.useGetReleaseQuery = useGetReleaseQuery;
1219
1258
  exports.useGetReleasesQuery = useGetReleasesQuery;
1220
1259
  exports.usePublishReleaseMutation = usePublishReleaseMutation;
1221
- exports.useTypedDispatch = useTypedDispatch;
1222
1260
  exports.useUpdateReleaseActionMutation = useUpdateReleaseActionMutation;
1223
1261
  exports.useUpdateReleaseMutation = useUpdateReleaseMutation;
1224
- //# sourceMappingURL=index-ydocdaZ0.js.map
1262
+ //# sourceMappingURL=index-DoZNNtsb.js.map