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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/_chunks/App-PQlYzNfb.mjs +1337 -0
  2. package/dist/_chunks/App-PQlYzNfb.mjs.map +1 -0
  3. package/dist/_chunks/App-lzeJz92X.js +1360 -0
  4. package/dist/_chunks/App-lzeJz92X.js.map +1 -0
  5. package/dist/_chunks/PurchaseContentReleases-Clm0iACO.mjs +51 -0
  6. package/dist/_chunks/PurchaseContentReleases-Clm0iACO.mjs.map +1 -0
  7. package/dist/_chunks/PurchaseContentReleases-YhAPgpG9.js +51 -0
  8. package/dist/_chunks/PurchaseContentReleases-YhAPgpG9.js.map +1 -0
  9. package/dist/_chunks/{en-ngTk74JV.mjs → en-WuuhP6Bn.mjs} +22 -6
  10. package/dist/_chunks/en-WuuhP6Bn.mjs.map +1 -0
  11. package/dist/_chunks/{en-haKSQIo8.js → en-gcJJ5htG.js} +22 -6
  12. package/dist/_chunks/en-gcJJ5htG.js.map +1 -0
  13. package/dist/_chunks/{index-XAQOX_IB.mjs → index--4AgLDzb.mjs} +262 -83
  14. package/dist/_chunks/index--4AgLDzb.mjs.map +1 -0
  15. package/dist/_chunks/{index-EdBmRHRU.js → index-Nf1JfI-m.js} +246 -67
  16. package/dist/_chunks/index-Nf1JfI-m.js.map +1 -0
  17. package/dist/admin/index.js +2 -1
  18. package/dist/admin/index.js.map +1 -1
  19. package/dist/admin/index.mjs +3 -2
  20. package/dist/admin/index.mjs.map +1 -1
  21. package/dist/admin/src/components/CMReleasesContainer.d.ts +1 -0
  22. package/dist/admin/src/components/RelativeTime.d.ts +28 -0
  23. package/dist/admin/src/components/ReleaseActionMenu.d.ts +26 -0
  24. package/dist/admin/src/components/ReleaseActionOptions.d.ts +9 -0
  25. package/dist/admin/src/components/ReleaseModal.d.ts +16 -0
  26. package/dist/admin/src/constants.d.ts +58 -0
  27. package/dist/admin/src/index.d.ts +3 -0
  28. package/dist/admin/src/pages/App.d.ts +1 -0
  29. package/dist/admin/src/pages/PurchaseContentReleases.d.ts +2 -0
  30. package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +2 -0
  31. package/dist/admin/src/pages/ReleasesPage.d.ts +8 -0
  32. package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +181 -0
  33. package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +39 -0
  34. package/dist/admin/src/pluginId.d.ts +1 -0
  35. package/dist/admin/src/services/axios.d.ts +29 -0
  36. package/dist/admin/src/services/release.d.ts +369 -0
  37. package/dist/admin/src/store/hooks.d.ts +7 -0
  38. package/dist/admin/src/utils/time.d.ts +1 -0
  39. package/dist/server/index.js +999 -309
  40. package/dist/server/index.js.map +1 -1
  41. package/dist/server/index.mjs +999 -310
  42. package/dist/server/index.mjs.map +1 -1
  43. package/dist/server/src/bootstrap.d.ts +5 -0
  44. package/dist/server/src/bootstrap.d.ts.map +1 -0
  45. package/dist/server/src/constants.d.ts +12 -0
  46. package/dist/server/src/constants.d.ts.map +1 -0
  47. package/dist/server/src/content-types/index.d.ts +99 -0
  48. package/dist/server/src/content-types/index.d.ts.map +1 -0
  49. package/dist/server/src/content-types/release/index.d.ts +48 -0
  50. package/dist/server/src/content-types/release/index.d.ts.map +1 -0
  51. package/dist/server/src/content-types/release/schema.d.ts +47 -0
  52. package/dist/server/src/content-types/release/schema.d.ts.map +1 -0
  53. package/dist/server/src/content-types/release-action/index.d.ts +50 -0
  54. package/dist/server/src/content-types/release-action/index.d.ts.map +1 -0
  55. package/dist/server/src/content-types/release-action/schema.d.ts +49 -0
  56. package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -0
  57. package/dist/server/src/controllers/index.d.ts +18 -0
  58. package/dist/server/src/controllers/index.d.ts.map +1 -0
  59. package/dist/server/src/controllers/release-action.d.ts +9 -0
  60. package/dist/server/src/controllers/release-action.d.ts.map +1 -0
  61. package/dist/server/src/controllers/release.d.ts +11 -0
  62. package/dist/server/src/controllers/release.d.ts.map +1 -0
  63. package/dist/server/src/controllers/validation/release-action.d.ts +3 -0
  64. package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -0
  65. package/dist/server/src/controllers/validation/release.d.ts +2 -0
  66. package/dist/server/src/controllers/validation/release.d.ts.map +1 -0
  67. package/dist/server/src/destroy.d.ts +5 -0
  68. package/dist/server/src/destroy.d.ts.map +1 -0
  69. package/dist/server/src/index.d.ts +2092 -0
  70. package/dist/server/src/index.d.ts.map +1 -0
  71. package/dist/server/src/migrations/index.d.ts +10 -0
  72. package/dist/server/src/migrations/index.d.ts.map +1 -0
  73. package/dist/server/src/register.d.ts +5 -0
  74. package/dist/server/src/register.d.ts.map +1 -0
  75. package/dist/server/src/routes/index.d.ts +35 -0
  76. package/dist/server/src/routes/index.d.ts.map +1 -0
  77. package/dist/server/src/routes/release-action.d.ts +18 -0
  78. package/dist/server/src/routes/release-action.d.ts.map +1 -0
  79. package/dist/server/src/routes/release.d.ts +18 -0
  80. package/dist/server/src/routes/release.d.ts.map +1 -0
  81. package/dist/server/src/services/index.d.ts +1826 -0
  82. package/dist/server/src/services/index.d.ts.map +1 -0
  83. package/dist/server/src/services/release.d.ts +66 -0
  84. package/dist/server/src/services/release.d.ts.map +1 -0
  85. package/dist/server/src/services/scheduling.d.ts +18 -0
  86. package/dist/server/src/services/scheduling.d.ts.map +1 -0
  87. package/dist/server/src/services/validation.d.ts +14 -0
  88. package/dist/server/src/services/validation.d.ts.map +1 -0
  89. package/dist/server/src/utils/index.d.ts +14 -0
  90. package/dist/server/src/utils/index.d.ts.map +1 -0
  91. package/dist/shared/contracts/release-actions.d.ts +105 -0
  92. package/dist/shared/contracts/release-actions.d.ts.map +1 -0
  93. package/dist/shared/contracts/releases.d.ts +166 -0
  94. package/dist/shared/contracts/releases.d.ts.map +1 -0
  95. package/dist/shared/types.d.ts +24 -0
  96. package/dist/shared/types.d.ts.map +1 -0
  97. package/dist/shared/validation-schemas.d.ts +2 -0
  98. package/dist/shared/validation-schemas.d.ts.map +1 -0
  99. package/package.json +19 -22
  100. package/dist/_chunks/App-g2P5kbSm.mjs +0 -945
  101. package/dist/_chunks/App-g2P5kbSm.mjs.map +0 -1
  102. package/dist/_chunks/App-o5_WfqR-.js +0 -967
  103. package/dist/_chunks/App-o5_WfqR-.js.map +0 -1
  104. package/dist/_chunks/en-haKSQIo8.js.map +0 -1
  105. package/dist/_chunks/en-ngTk74JV.mjs.map +0 -1
  106. package/dist/_chunks/index-EdBmRHRU.js.map +0 -1
  107. package/dist/_chunks/index-XAQOX_IB.mjs.map +0 -1
@@ -13,6 +13,7 @@ const reactRouterDom = require("react-router-dom");
13
13
  const yup = require("yup");
14
14
  const react = require("@reduxjs/toolkit/query/react");
15
15
  const styled = require("styled-components");
16
+ const reactRedux = require("react-redux");
16
17
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
17
18
  function _interopNamespace(e) {
18
19
  if (e && e.__esModule)
@@ -281,7 +282,27 @@ const releaseApi = react.createApi({
281
282
  data: body
282
283
  };
283
284
  },
284
- invalidatesTags: () => [{ type: "ReleaseAction", id: "LIST" }]
285
+ invalidatesTags: () => [{ type: "ReleaseAction", id: "LIST" }],
286
+ async onQueryStarted({ body, params, query: query2, actionPath }, { dispatch, queryFulfilled }) {
287
+ const paramsWithoutActionId = {
288
+ releaseId: params.releaseId,
289
+ ...query2
290
+ };
291
+ const patchResult = dispatch(
292
+ releaseApi.util.updateQueryData("getReleaseActions", paramsWithoutActionId, (draft) => {
293
+ const [key, index] = actionPath;
294
+ const action = draft.data[key][index];
295
+ if (action) {
296
+ action.type = body.type;
297
+ }
298
+ })
299
+ );
300
+ try {
301
+ await queryFulfilled;
302
+ } catch {
303
+ patchResult.undo();
304
+ }
305
+ }
285
306
  }),
286
307
  deleteReleaseAction: build.mutation({
287
308
  query({ params }) {
@@ -329,37 +350,59 @@ const {
329
350
  useDeleteReleaseActionMutation,
330
351
  useDeleteReleaseMutation
331
352
  } = releaseApi;
353
+ const getTimezoneOffset = (timezone, date) => {
354
+ try {
355
+ const offsetPart = new Intl.DateTimeFormat("en", {
356
+ timeZone: timezone,
357
+ timeZoneName: "longOffset"
358
+ }).formatToParts(date).find((part) => part.type === "timeZoneName");
359
+ const offset = offsetPart ? offsetPart.value : "";
360
+ let utcOffset = offset.replace("GMT", "UTC");
361
+ if (!utcOffset.includes("+") && !utcOffset.includes("-")) {
362
+ utcOffset = `${utcOffset}+00:00`;
363
+ }
364
+ return utcOffset;
365
+ } catch (error) {
366
+ return "";
367
+ }
368
+ };
369
+ const useTypedDispatch = reactRedux.useDispatch;
370
+ const useTypedSelector = reactRedux.useSelector;
332
371
  const StyledMenuItem = styled__default.default(v2.Menu.Item)`
333
372
  &:hover {
334
- background: ${({ theme }) => theme.colors.danger100};
373
+ background: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}100`]};
374
+
375
+ svg {
376
+ path {
377
+ fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
378
+ }
379
+ }
380
+
381
+ a {
382
+ color: ${({ theme }) => theme.colors.neutral800};
383
+ }
335
384
  }
336
385
 
337
386
  svg {
338
387
  path {
339
- fill: ${({ theme }) => theme.colors.danger600};
388
+ fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
340
389
  }
341
390
  }
342
391
 
343
- &:hover {
344
- svg {
345
- path {
346
- fill: ${({ theme }) => theme.colors.danger600};
347
- }
348
- }
392
+ a {
393
+ color: ${({ theme }) => theme.colors.neutral800};
394
+ }
395
+
396
+ span,
397
+ a {
398
+ width: 100%;
349
399
  }
350
- `;
351
- const StyledCross = styled__default.default(icons.Cross)`
352
- padding: ${({ theme }) => theme.spaces[1]};
353
400
  `;
354
401
  const StyledIconButton = styled__default.default(designSystem.IconButton)`
355
402
  /* Setting this style inline with borderColor will not apply the style */
356
403
  border: ${({ theme }) => `1px solid ${theme.colors.neutral200}`};
357
404
  `;
358
- const ReleaseActionMenu = ({
359
- releaseId,
360
- actionId,
361
- hasTriggerBorder = false
362
- }) => {
405
+ const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
363
406
  const { formatMessage } = reactIntl.useIntl();
364
407
  const toggleNotification = helperPlugin.useNotification();
365
408
  const { formatAPIError } = helperPlugin.useAPIErrorHandler();
@@ -392,6 +435,73 @@ const ReleaseActionMenu = ({
392
435
  }
393
436
  }
394
437
  };
438
+ 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: [
439
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: icons.Cross, width: 3, height: 3 }),
440
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "danger600", variant: "omega", children: formatMessage({
441
+ id: "content-releases.content-manager-edit-view.remove-from-release",
442
+ defaultMessage: "Remove from release"
443
+ }) })
444
+ ] }) }) });
445
+ };
446
+ const ReleaseActionEntryLinkItem = ({
447
+ contentTypeUid,
448
+ entryId,
449
+ locale
450
+ }) => {
451
+ const { formatMessage } = reactIntl.useIntl();
452
+ const collectionTypePermissions = useTypedSelector(
453
+ (state) => state.rbacProvider.collectionTypesRelatedPermissions
454
+ );
455
+ const updatePermissions = contentTypeUid ? collectionTypePermissions[contentTypeUid]?.["plugin::content-manager.explorer.update"] : [];
456
+ const canUpdateEntryForLocale = Boolean(
457
+ !locale || updatePermissions?.find(
458
+ (permission) => permission.properties?.locales?.includes(locale)
459
+ )
460
+ );
461
+ return /* @__PURE__ */ jsxRuntime.jsx(
462
+ helperPlugin.CheckPermissions,
463
+ {
464
+ permissions: [
465
+ {
466
+ action: "plugin::content-manager.explorer.update",
467
+ subject: contentTypeUid
468
+ }
469
+ ],
470
+ children: canUpdateEntryForLocale && /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
471
+ v2.Link,
472
+ {
473
+ as: reactRouterDom.NavLink,
474
+ to: {
475
+ pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
476
+ search: locale && `?plugins[i18n][locale]=${locale}`
477
+ },
478
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: icons.Pencil, width: 3, height: 3 }),
479
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", children: formatMessage({
480
+ id: "content-releases.content-manager-edit-view.edit-entry",
481
+ defaultMessage: "Edit entry"
482
+ }) })
483
+ }
484
+ ) })
485
+ }
486
+ );
487
+ };
488
+ const EditReleaseItem = ({ releaseId }) => {
489
+ const { formatMessage } = reactIntl.useIntl();
490
+ return /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
491
+ v2.Link,
492
+ {
493
+ as: reactRouterDom.NavLink,
494
+ to: `/plugins/content-releases/${releaseId}`,
495
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: icons.Pencil, width: 3, height: 3 }),
496
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", children: formatMessage({
497
+ id: "content-releases.content-manager-edit-view.edit-release",
498
+ defaultMessage: "Edit release"
499
+ }) })
500
+ }
501
+ ) });
502
+ };
503
+ const Root = ({ children, hasTriggerBorder = false }) => {
504
+ const { formatMessage } = reactIntl.useIntl();
395
505
  return (
396
506
  // A user can access the dropdown if they have permissions to delete a release-action OR update a release
397
507
  /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: [...PERMISSIONS.deleteAction, ...PERMISSIONS.update], children: /* @__PURE__ */ jsxRuntime.jsxs(v2.Menu.Root, { children: [
@@ -408,16 +518,16 @@ const ReleaseActionMenu = ({
408
518
  icon: /* @__PURE__ */ jsxRuntime.jsx(icons.More, {})
409
519
  }
410
520
  ),
411
- /* @__PURE__ */ jsxRuntime.jsx(v2.Menu.Content, { top: 1, popoverPlacement: "bottom-end", children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: PERMISSIONS.deleteAction, children: /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { onSelect: handleDeleteAction, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
412
- /* @__PURE__ */ jsxRuntime.jsx(StyledCross, {}),
413
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "danger600", variant: "omega", children: formatMessage({
414
- id: "content-releases.content-manager-edit-view.remove-from-release",
415
- defaultMessage: "Remove from release"
416
- }) })
417
- ] }) }) }) })
521
+ /* @__PURE__ */ jsxRuntime.jsx(v2.Menu.Content, { top: 1, popoverPlacement: "bottom-end", children })
418
522
  ] }) })
419
523
  );
420
524
  };
525
+ const ReleaseActionMenu = {
526
+ Root,
527
+ EditReleaseItem,
528
+ DeleteReleaseActionItem,
529
+ ReleaseActionEntryLinkItem
530
+ };
421
531
  const getBorderLeftRadiusValue = (actionType) => {
422
532
  return actionType === "publish" ? 1 : 0;
423
533
  };
@@ -438,19 +548,40 @@ const FieldWrapper = styled__default.default(designSystem.Field)`
438
548
  text-transform: capitalize;
439
549
  }
440
550
 
441
- &:active,
442
551
  &[data-checked='true'] {
443
- color: ${({ theme }) => theme.colors.primary700};
444
- background-color: ${({ theme }) => theme.colors.primary100};
445
- border-color: ${({ theme }) => theme.colors.primary700};
552
+ color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
553
+ background-color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary100 : theme.colors.danger100};
554
+ border-color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
446
555
  }
447
556
 
448
557
  &[data-checked='false'] {
449
558
  border-left: ${({ actionType }) => actionType === "unpublish" && "none"};
450
559
  border-right: ${({ actionType }) => actionType === "publish" && "none"};
451
560
  }
561
+
562
+ &[data-checked='false'][data-disabled='false']:hover {
563
+ color: ${({ theme }) => theme.colors.neutral700};
564
+ background-color: ${({ theme }) => theme.colors.neutral100};
565
+ border-color: ${({ theme }) => theme.colors.neutral200};
566
+
567
+ & > label {
568
+ cursor: pointer;
569
+ }
570
+ }
571
+
572
+ &[data-disabled='true'] {
573
+ color: ${({ theme }) => theme.colors.neutral600};
574
+ background-color: ${({ theme }) => theme.colors.neutral150};
575
+ border-color: ${({ theme }) => theme.colors.neutral300};
576
+ }
452
577
  `;
453
- const ActionOption = ({ selected, actionType, handleChange, name }) => {
578
+ const ActionOption = ({
579
+ selected,
580
+ actionType,
581
+ handleChange,
582
+ name,
583
+ disabled = false
584
+ }) => {
454
585
  return /* @__PURE__ */ jsxRuntime.jsx(
455
586
  FieldWrapper,
456
587
  {
@@ -461,6 +592,7 @@ const ActionOption = ({ selected, actionType, handleChange, name }) => {
461
592
  position: "relative",
462
593
  cursor: "pointer",
463
594
  "data-checked": selected === actionType,
595
+ "data-disabled": disabled && selected !== actionType,
464
596
  children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.FieldLabel, { htmlFor: `${name}-${actionType}`, children: [
465
597
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { children: /* @__PURE__ */ jsxRuntime.jsx(
466
598
  designSystem.FieldInput,
@@ -470,7 +602,8 @@ const ActionOption = ({ selected, actionType, handleChange, name }) => {
470
602
  name,
471
603
  checked: selected === actionType,
472
604
  onChange: handleChange,
473
- value: actionType
605
+ value: actionType,
606
+ disabled
474
607
  }
475
608
  ) }),
476
609
  actionType
@@ -478,7 +611,12 @@ const ActionOption = ({ selected, actionType, handleChange, name }) => {
478
611
  }
479
612
  );
480
613
  };
481
- const ReleaseActionOptions = ({ selected, handleChange, name }) => {
614
+ const ReleaseActionOptions = ({
615
+ selected,
616
+ handleChange,
617
+ name,
618
+ disabled = false
619
+ }) => {
482
620
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { children: [
483
621
  /* @__PURE__ */ jsxRuntime.jsx(
484
622
  ActionOption,
@@ -486,7 +624,8 @@ const ReleaseActionOptions = ({ selected, handleChange, name }) => {
486
624
  actionType: "publish",
487
625
  selected,
488
626
  handleChange,
489
- name
627
+ name,
628
+ disabled
490
629
  }
491
630
  ),
492
631
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -495,7 +634,8 @@ const ReleaseActionOptions = ({ selected, handleChange, name }) => {
495
634
  actionType: "unpublish",
496
635
  selected,
497
636
  handleChange,
498
- name
637
+ name,
638
+ disabled
499
639
  }
500
640
  )
501
641
  ] });
@@ -511,12 +651,13 @@ const INITIAL_VALUES = {
511
651
  const NoReleases = () => {
512
652
  const { formatMessage } = reactIntl.useIntl();
513
653
  return /* @__PURE__ */ jsxRuntime.jsx(
514
- helperPlugin.NoContent,
654
+ designSystem.EmptyStateLayout,
515
655
  {
516
- content: {
656
+ icon: /* @__PURE__ */ jsxRuntime.jsx(icons.EmptyDocuments, { width: "10rem" }),
657
+ content: formatMessage({
517
658
  id: "content-releases.content-manager-edit-view.add-to-release.no-releases-message",
518
659
  defaultMessage: "No available releases. Open the list of releases and create a new one from there."
519
- },
660
+ }),
520
661
  action: /* @__PURE__ */ jsxRuntime.jsx(
521
662
  v2.LinkButton,
522
663
  {
@@ -539,10 +680,12 @@ const AddActionToReleaseModal = ({
539
680
  contentTypeUid,
540
681
  entryId
541
682
  }) => {
683
+ const releaseHeaderId = React__namespace.useId();
542
684
  const { formatMessage } = reactIntl.useIntl();
543
685
  const toggleNotification = helperPlugin.useNotification();
544
686
  const { formatAPIError } = helperPlugin.useAPIErrorHandler();
545
- const { modifiedData } = helperPlugin.useCMEditViewDataManager();
687
+ const [{ query: query2 }] = helperPlugin.useQueryParams();
688
+ const locale = query2.plugins?.i18n?.locale;
546
689
  const response = useGetReleasesForEntryQuery({
547
690
  contentTypeUid,
548
691
  entryId,
@@ -551,7 +694,6 @@ const AddActionToReleaseModal = ({
551
694
  const releases = response.data?.data;
552
695
  const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();
553
696
  const handleSubmit = async (values) => {
554
- const locale = modifiedData.locale;
555
697
  const releaseActionEntry = {
556
698
  contentType: contentTypeUid,
557
699
  id: entryId,
@@ -586,8 +728,8 @@ const AddActionToReleaseModal = ({
586
728
  }
587
729
  }
588
730
  };
589
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.ModalLayout, { onClose: handleClose, labelledBy: "title", children: [
590
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.ModalHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { id: "title", fontWeight: "bold", textColor: "neutral800", children: formatMessage({
731
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.ModalLayout, { onClose: handleClose, labelledBy: releaseHeaderId, children: [
732
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.ModalHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { id: releaseHeaderId, fontWeight: "bold", textColor: "neutral800", children: formatMessage({
591
733
  id: "content-releases.content-manager-edit-view.add-to-release",
592
734
  defaultMessage: "Add to release"
593
735
  }) }) }),
@@ -657,16 +799,15 @@ const AddActionToReleaseModal = ({
657
799
  };
658
800
  const CMReleasesContainer = () => {
659
801
  const [isModalOpen, setIsModalOpen] = React__namespace.useState(false);
660
- const { formatMessage } = reactIntl.useIntl();
661
- const {
662
- isCreatingEntry,
663
- allLayoutData: { contentType }
664
- } = helperPlugin.useCMEditViewDataManager();
665
- const params = reactRouterDom.useParams();
666
- const canFetch = params?.id != null && contentType?.uid != null;
802
+ const { formatMessage, formatDate, formatTime } = reactIntl.useIntl();
803
+ const { id, slug } = reactRouterDom.useParams();
804
+ const isCreatingEntry = id === "create";
805
+ const contentTypeUid = slug;
806
+ const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
807
+ const canFetch = id != null && contentTypeUid != null;
667
808
  const fetchParams = canFetch ? {
668
- contentTypeUid: contentType.uid,
669
- entryId: params.id,
809
+ contentTypeUid,
810
+ entryId: id,
670
811
  hasEntryAttached: true
671
812
  } : query.skipToken;
672
813
  const response = useGetReleasesForEntryQuery(fetchParams);
@@ -674,7 +815,7 @@ const CMReleasesContainer = () => {
674
815
  if (!canFetch) {
675
816
  return null;
676
817
  }
677
- if (isCreatingEntry || !contentType?.options?.draftAndPublish) {
818
+ if (isCreatingEntry) {
678
819
  return null;
679
820
  }
680
821
  const toggleModal = () => setIsModalOpen((prev) => !prev);
@@ -741,16 +882,40 @@ const CMReleasesContainer = () => {
741
882
  )
742
883
  }
743
884
  ),
744
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { padding: 4, direction: "column", gap: 3, width: "100%", alignItems: "flex-start", children: [
885
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: [
745
886
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontSize: 2, fontWeight: "bold", variant: "omega", textColor: "neutral700", children: release.name }),
746
- /* @__PURE__ */ jsxRuntime.jsx(
747
- ReleaseActionMenu,
887
+ IsSchedulingEnabled && release.scheduledAt && release.timezone && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", children: formatMessage(
888
+ {
889
+ id: "content-releases.content-manager-edit-view.scheduled.date",
890
+ defaultMessage: "{date} at {time} ({offset})"
891
+ },
748
892
  {
749
- releaseId: release.id,
750
- actionId: release.action.id,
751
- hasTriggerBorder: true
893
+ date: formatDate(new Date(release.scheduledAt), {
894
+ day: "2-digit",
895
+ month: "2-digit",
896
+ year: "numeric",
897
+ timeZone: release.timezone
898
+ }),
899
+ time: formatTime(new Date(release.scheduledAt), {
900
+ hourCycle: "h23",
901
+ timeZone: release.timezone
902
+ }),
903
+ offset: getTimezoneOffset(
904
+ release.timezone,
905
+ new Date(release.scheduledAt)
906
+ )
752
907
  }
753
- )
908
+ ) }),
909
+ /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: PERMISSIONS.deleteAction, children: /* @__PURE__ */ jsxRuntime.jsxs(ReleaseActionMenu.Root, { hasTriggerBorder: true, children: [
910
+ /* @__PURE__ */ jsxRuntime.jsx(ReleaseActionMenu.EditReleaseItem, { releaseId: release.id }),
911
+ /* @__PURE__ */ jsxRuntime.jsx(
912
+ ReleaseActionMenu.DeleteReleaseActionItem,
913
+ {
914
+ releaseId: release.id,
915
+ actionId: release.action.id
916
+ }
917
+ )
918
+ ] }) })
754
919
  ] })
755
920
  ]
756
921
  },
@@ -778,8 +943,8 @@ const CMReleasesContainer = () => {
778
943
  AddActionToReleaseModal,
779
944
  {
780
945
  handleClose: toggleModal,
781
- contentTypeUid: contentType.uid,
782
- entryId: params.id
946
+ contentTypeUid,
947
+ entryId: id
783
948
  }
784
949
  )
785
950
  ]
@@ -789,18 +954,15 @@ const CMReleasesContainer = () => {
789
954
  const admin = {
790
955
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
791
956
  register(app) {
792
- if (window.strapi.features.isEnabled("cms-content-releases") && window.strapi.future.isEnabled("contentReleases")) {
957
+ if (window.strapi.features.isEnabled("cms-content-releases")) {
793
958
  app.addMenuLink({
794
- to: `/plugins/${pluginId}`,
959
+ to: `plugins/${pluginId}`,
795
960
  icon: icons.PaperPlane,
796
961
  intlLabel: {
797
962
  id: `${pluginId}.plugin.name`,
798
963
  defaultMessage: "Releases"
799
964
  },
800
- async Component() {
801
- const { App } = await Promise.resolve().then(() => require("./App-o5_WfqR-.js"));
802
- return App;
803
- },
965
+ Component: () => Promise.resolve().then(() => require("./App-lzeJz92X.js")).then((mod) => ({ default: mod.App })),
804
966
  permissions: PERMISSIONS.main
805
967
  });
806
968
  app.addMiddlewares([() => releaseApi.middleware]);
@@ -811,12 +973,26 @@ const admin = {
811
973
  name: `${pluginId}-link`,
812
974
  Component: CMReleasesContainer
813
975
  });
976
+ } else if (!window.strapi.features.isEnabled("cms-content-releases") && window.strapi?.flags?.promoteEE) {
977
+ app.addMenuLink({
978
+ to: `/plugins/purchase-content-releases`,
979
+ icon: icons.PaperPlane,
980
+ intlLabel: {
981
+ id: `${pluginId}.plugin.name`,
982
+ defaultMessage: "Releases"
983
+ },
984
+ async Component() {
985
+ const { PurchaseContentReleases } = await Promise.resolve().then(() => require("./PurchaseContentReleases-YhAPgpG9.js"));
986
+ return PurchaseContentReleases;
987
+ },
988
+ lockIcon: true
989
+ });
814
990
  }
815
991
  },
816
992
  async registerTrads({ locales }) {
817
993
  const importedTrads = await Promise.all(
818
994
  locales.map((locale) => {
819
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-haKSQIo8.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
995
+ return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-gcJJ5htG.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
820
996
  return {
821
997
  data: helperPlugin.prefixPluginTranslations(data, "content-releases"),
822
998
  locale
@@ -836,14 +1012,17 @@ exports.PERMISSIONS = PERMISSIONS;
836
1012
  exports.ReleaseActionMenu = ReleaseActionMenu;
837
1013
  exports.ReleaseActionOptions = ReleaseActionOptions;
838
1014
  exports.admin = admin;
1015
+ exports.getTimezoneOffset = getTimezoneOffset;
839
1016
  exports.isAxiosError = isAxiosError;
840
1017
  exports.pluginId = pluginId;
1018
+ exports.releaseApi = releaseApi;
841
1019
  exports.useCreateReleaseMutation = useCreateReleaseMutation;
842
1020
  exports.useDeleteReleaseMutation = useDeleteReleaseMutation;
843
1021
  exports.useGetReleaseActionsQuery = useGetReleaseActionsQuery;
844
1022
  exports.useGetReleaseQuery = useGetReleaseQuery;
845
1023
  exports.useGetReleasesQuery = useGetReleasesQuery;
846
1024
  exports.usePublishReleaseMutation = usePublishReleaseMutation;
1025
+ exports.useTypedDispatch = useTypedDispatch;
847
1026
  exports.useUpdateReleaseActionMutation = useUpdateReleaseActionMutation;
848
1027
  exports.useUpdateReleaseMutation = useUpdateReleaseMutation;
849
- //# sourceMappingURL=index-EdBmRHRU.js.map
1028
+ //# sourceMappingURL=index-Nf1JfI-m.js.map