@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.
- package/dist/_chunks/{App-gu1aiP6i.mjs → App-Cmn2Mkn7.mjs} +213 -200
- package/dist/_chunks/App-Cmn2Mkn7.mjs.map +1 -0
- package/dist/_chunks/{App-HjWtUYmc.js → App-FVorrIzF.js} +224 -211
- package/dist/_chunks/App-FVorrIzF.js.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-3tRbmbY3.mjs → PurchaseContentReleases-C8djn9fP.mjs} +1 -1
- package/dist/_chunks/{PurchaseContentReleases-3tRbmbY3.mjs.map → PurchaseContentReleases-C8djn9fP.mjs.map} +1 -1
- package/dist/_chunks/{PurchaseContentReleases-bpIYXOfu.js → PurchaseContentReleases-sD6ADHk2.js} +1 -1
- package/dist/_chunks/{PurchaseContentReleases-bpIYXOfu.js.map → PurchaseContentReleases-sD6ADHk2.js.map} +1 -1
- package/dist/_chunks/{en-ltT1TlKQ.mjs → en-B9Ur3VsE.mjs} +1 -1
- package/dist/_chunks/en-B9Ur3VsE.mjs.map +1 -0
- package/dist/_chunks/{en-HrREghh3.js → en-DtFJ5ViE.js} +1 -1
- package/dist/_chunks/en-DtFJ5ViE.js.map +1 -0
- package/dist/_chunks/{index-ZNwxYN8H.js → index-BfJLth9Z.js} +120 -189
- package/dist/_chunks/index-BfJLth9Z.js.map +1 -0
- package/dist/_chunks/{index-mvj9PSKd.mjs → index-DDohgTaQ.mjs} +125 -194
- package/dist/_chunks/index-DDohgTaQ.mjs.map +1 -0
- package/dist/admin/index.js +1 -15
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +2 -16
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/components/CMReleasesContainer.d.ts +22 -0
- package/dist/admin/src/components/RelativeTime.d.ts +28 -0
- package/dist/admin/src/components/ReleaseAction.d.ts +3 -0
- package/dist/admin/src/components/ReleaseActionMenu.d.ts +26 -0
- package/dist/admin/src/components/ReleaseActionOptions.d.ts +9 -0
- package/dist/admin/src/components/ReleaseListCell.d.ts +0 -0
- package/dist/admin/src/components/ReleaseModal.d.ts +16 -0
- package/dist/admin/src/constants.d.ts +58 -0
- package/dist/admin/src/index.d.ts +3 -0
- package/dist/admin/src/pages/App.d.ts +1 -0
- package/dist/admin/src/pages/PurchaseContentReleases.d.ts +2 -0
- package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +2 -0
- package/dist/admin/src/pages/ReleasesPage.d.ts +8 -0
- package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +181 -0
- package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +39 -0
- package/dist/admin/src/pluginId.d.ts +1 -0
- package/dist/admin/src/services/axios.d.ts +29 -0
- package/dist/admin/src/services/release.d.ts +429 -0
- package/dist/admin/src/store/hooks.d.ts +7 -0
- package/dist/admin/src/utils/prefixPluginTranslations.d.ts +3 -0
- package/dist/admin/src/utils/time.d.ts +1 -0
- package/dist/server/index.js +83 -86
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +84 -86
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts +5 -0
- package/dist/server/src/bootstrap.d.ts.map +1 -0
- package/dist/server/src/constants.d.ts +12 -0
- package/dist/server/src/constants.d.ts.map +1 -0
- package/dist/server/src/content-types/index.d.ts +99 -0
- package/dist/server/src/content-types/index.d.ts.map +1 -0
- package/dist/server/src/content-types/release/index.d.ts +48 -0
- package/dist/server/src/content-types/release/index.d.ts.map +1 -0
- package/dist/server/src/content-types/release/schema.d.ts +47 -0
- package/dist/server/src/content-types/release/schema.d.ts.map +1 -0
- package/dist/server/src/content-types/release-action/index.d.ts +50 -0
- package/dist/server/src/content-types/release-action/index.d.ts.map +1 -0
- package/dist/server/src/content-types/release-action/schema.d.ts +49 -0
- package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -0
- package/dist/server/src/controllers/index.d.ts +20 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -0
- package/dist/server/src/controllers/release-action.d.ts +10 -0
- package/dist/server/src/controllers/release-action.d.ts.map +1 -0
- package/dist/server/src/controllers/release.d.ts +12 -0
- package/dist/server/src/controllers/release.d.ts.map +1 -0
- package/dist/server/src/controllers/validation/release-action.d.ts +8 -0
- package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -0
- package/dist/server/src/controllers/validation/release.d.ts +2 -0
- package/dist/server/src/controllers/validation/release.d.ts.map +1 -0
- package/dist/server/src/destroy.d.ts +5 -0
- package/dist/server/src/destroy.d.ts.map +1 -0
- package/dist/server/src/index.d.ts +2096 -0
- package/dist/server/src/index.d.ts.map +1 -0
- package/dist/server/src/migrations/index.d.ts +13 -0
- package/dist/server/src/migrations/index.d.ts.map +1 -0
- package/dist/server/src/register.d.ts +5 -0
- package/dist/server/src/register.d.ts.map +1 -0
- package/dist/server/src/routes/index.d.ts +35 -0
- package/dist/server/src/routes/index.d.ts.map +1 -0
- package/dist/server/src/routes/release-action.d.ts +18 -0
- package/dist/server/src/routes/release-action.d.ts.map +1 -0
- package/dist/server/src/routes/release.d.ts +18 -0
- package/dist/server/src/routes/release.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +1826 -0
- package/dist/server/src/services/index.d.ts.map +1 -0
- package/dist/server/src/services/release.d.ts +66 -0
- package/dist/server/src/services/release.d.ts.map +1 -0
- package/dist/server/src/services/scheduling.d.ts +18 -0
- package/dist/server/src/services/scheduling.d.ts.map +1 -0
- package/dist/server/src/services/validation.d.ts +18 -0
- package/dist/server/src/services/validation.d.ts.map +1 -0
- package/dist/server/src/utils/index.d.ts +14 -0
- package/dist/server/src/utils/index.d.ts.map +1 -0
- package/dist/shared/contracts/release-actions.d.ts +131 -0
- package/dist/shared/contracts/release-actions.d.ts.map +1 -0
- package/dist/shared/contracts/releases.d.ts +182 -0
- package/dist/shared/contracts/releases.d.ts.map +1 -0
- package/dist/shared/types.d.ts +24 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/validation-schemas.d.ts +2 -0
- package/dist/shared/validation-schemas.d.ts.map +1 -0
- package/package.json +26 -31
- package/dist/_chunks/App-HjWtUYmc.js.map +0 -1
- package/dist/_chunks/App-gu1aiP6i.mjs.map +0 -1
- package/dist/_chunks/en-HrREghh3.js.map +0 -1
- package/dist/_chunks/en-ltT1TlKQ.mjs.map +0 -1
- package/dist/_chunks/index-ZNwxYN8H.js.map +0 -1
- package/dist/_chunks/index-mvj9PSKd.mjs.map +0 -1
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Cross, Pencil, More, Plus, PaperPlane } from "@strapi/icons";
|
|
1
|
+
import { Cross, Pencil, More, Plus, EmptyDocuments, PaperPlane } from "@strapi/icons";
|
|
3
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
3
|
import * as React from "react";
|
|
5
4
|
import { skipToken } from "@reduxjs/toolkit/query";
|
|
6
|
-
import {
|
|
5
|
+
import { getFetchClient, useNotification, useAPIErrorHandler, useRBAC, useAuth, useQueryParams } from "@strapi/admin/strapi-admin";
|
|
6
|
+
import { IconButton, Flex, Icon, Typography, Field, FieldLabel, VisuallyHidden, FieldInput, Box, Button, EmptyStateLayout, ModalLayout, ModalHeader, ModalBody, SingleSelect, SingleSelectOption, ModalFooter } from "@strapi/design-system";
|
|
7
7
|
import { Menu, Link, LinkButton } from "@strapi/design-system/v2";
|
|
8
|
+
import { unstable_useDocument } from "@strapi/plugin-content-manager/strapi-admin";
|
|
8
9
|
import { isAxiosError as isAxiosError$1 } from "axios";
|
|
9
10
|
import { Formik, Form } from "formik";
|
|
10
11
|
import { useIntl } from "react-intl";
|
|
11
|
-
import { NavLink, Link as Link$1 } from "react-router-dom";
|
|
12
|
+
import { NavLink, useParams, Link as Link$1 } from "react-router-dom";
|
|
12
13
|
import * as yup from "yup";
|
|
13
14
|
import { createApi } from "@reduxjs/toolkit/query/react";
|
|
14
15
|
import styled from "styled-components";
|
|
15
|
-
import { useDispatch, useSelector } from "react-redux";
|
|
16
16
|
const __variableDynamicImportRuntimeHelper = (glob, path) => {
|
|
17
17
|
const v = glob[path];
|
|
18
18
|
if (v) {
|
|
@@ -376,8 +376,6 @@ const getTimezoneOffset = (timezone, date) => {
|
|
|
376
376
|
return "";
|
|
377
377
|
}
|
|
378
378
|
};
|
|
379
|
-
const useTypedDispatch = useDispatch;
|
|
380
|
-
const useTypedSelector = useSelector;
|
|
381
379
|
const StyledMenuItem = styled(Menu.Item)`
|
|
382
380
|
&:hover {
|
|
383
381
|
background: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}100`]};
|
|
@@ -414,9 +412,12 @@ const StyledIconButton = styled(IconButton)`
|
|
|
414
412
|
`;
|
|
415
413
|
const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
|
|
416
414
|
const { formatMessage } = useIntl();
|
|
417
|
-
const toggleNotification = useNotification();
|
|
415
|
+
const { toggleNotification } = useNotification();
|
|
418
416
|
const { formatAPIError } = useAPIErrorHandler();
|
|
419
417
|
const [deleteReleaseAction] = useDeleteReleaseActionMutation();
|
|
418
|
+
const {
|
|
419
|
+
allowedActions: { canDeleteAction }
|
|
420
|
+
} = useRBAC(PERMISSIONS);
|
|
420
421
|
const handleDeleteAction = async () => {
|
|
421
422
|
const response = await deleteReleaseAction({
|
|
422
423
|
params: { releaseId, actionId }
|
|
@@ -434,24 +435,27 @@ const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
|
|
|
434
435
|
if ("error" in response) {
|
|
435
436
|
if (isAxiosError$1(response.error)) {
|
|
436
437
|
toggleNotification({
|
|
437
|
-
type: "
|
|
438
|
+
type: "danger",
|
|
438
439
|
message: formatAPIError(response.error)
|
|
439
440
|
});
|
|
440
441
|
} else {
|
|
441
442
|
toggleNotification({
|
|
442
|
-
type: "
|
|
443
|
+
type: "danger",
|
|
443
444
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
444
445
|
});
|
|
445
446
|
}
|
|
446
447
|
}
|
|
447
448
|
};
|
|
448
|
-
|
|
449
|
+
if (!canDeleteAction) {
|
|
450
|
+
return null;
|
|
451
|
+
}
|
|
452
|
+
return /* @__PURE__ */ jsx(StyledMenuItem, { variant: "danger", onSelect: handleDeleteAction, children: /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
449
453
|
/* @__PURE__ */ jsx(Icon, { as: Cross, width: 3, height: 3 }),
|
|
450
454
|
/* @__PURE__ */ jsx(Typography, { textColor: "danger600", variant: "omega", children: formatMessage({
|
|
451
455
|
id: "content-releases.content-manager-edit-view.remove-from-release",
|
|
452
456
|
defaultMessage: "Remove from release"
|
|
453
457
|
}) })
|
|
454
|
-
] }) })
|
|
458
|
+
] }) });
|
|
455
459
|
};
|
|
456
460
|
const ReleaseActionEntryLinkItem = ({
|
|
457
461
|
contentTypeUid,
|
|
@@ -459,41 +463,44 @@ const ReleaseActionEntryLinkItem = ({
|
|
|
459
463
|
locale
|
|
460
464
|
}) => {
|
|
461
465
|
const { formatMessage } = useIntl();
|
|
462
|
-
const
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
!
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
466
|
+
const userPermissions = useAuth("ReleaseActionEntryLinkItem", (state) => state.permissions);
|
|
467
|
+
const canUpdateEntryForLocale = React.useMemo(() => {
|
|
468
|
+
const updatePermissions = userPermissions.find(
|
|
469
|
+
(permission) => permission.subject === contentTypeUid && permission.action === "plugin::content-manager.explorer.update"
|
|
470
|
+
);
|
|
471
|
+
if (!updatePermissions) {
|
|
472
|
+
return false;
|
|
473
|
+
}
|
|
474
|
+
return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));
|
|
475
|
+
}, [contentTypeUid, locale, userPermissions]);
|
|
476
|
+
const {
|
|
477
|
+
allowedActions: { canUpdate: canUpdateContentType }
|
|
478
|
+
} = useRBAC({
|
|
479
|
+
updateContentType: [
|
|
480
|
+
{
|
|
481
|
+
action: "plugin::content-manager.explorer.update",
|
|
482
|
+
subject: contentTypeUid
|
|
483
|
+
}
|
|
484
|
+
]
|
|
485
|
+
});
|
|
486
|
+
if (!canUpdateContentType || !canUpdateEntryForLocale) {
|
|
487
|
+
return null;
|
|
488
|
+
}
|
|
489
|
+
return /* @__PURE__ */ jsx(StyledMenuItem, { children: /* @__PURE__ */ jsx(
|
|
490
|
+
Link,
|
|
473
491
|
{
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
children:
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
to: {
|
|
485
|
-
pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
|
|
486
|
-
search: locale && `?plugins[i18n][locale]=${locale}`
|
|
487
|
-
},
|
|
488
|
-
startIcon: /* @__PURE__ */ jsx(Icon, { as: Pencil, width: 3, height: 3 }),
|
|
489
|
-
children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
|
|
490
|
-
id: "content-releases.content-manager-edit-view.edit-entry",
|
|
491
|
-
defaultMessage: "Edit entry"
|
|
492
|
-
}) })
|
|
493
|
-
}
|
|
494
|
-
) })
|
|
492
|
+
as: NavLink,
|
|
493
|
+
to: {
|
|
494
|
+
pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
|
|
495
|
+
search: locale && `?plugins[i18n][locale]=${locale}`
|
|
496
|
+
},
|
|
497
|
+
startIcon: /* @__PURE__ */ jsx(Icon, { as: Pencil, width: 3, height: 3 }),
|
|
498
|
+
children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
|
|
499
|
+
id: "content-releases.content-manager-edit-view.edit-entry",
|
|
500
|
+
defaultMessage: "Edit entry"
|
|
501
|
+
}) })
|
|
495
502
|
}
|
|
496
|
-
);
|
|
503
|
+
) });
|
|
497
504
|
};
|
|
498
505
|
const EditReleaseItem = ({ releaseId }) => {
|
|
499
506
|
const { formatMessage } = useIntl();
|
|
@@ -512,9 +519,10 @@ const EditReleaseItem = ({ releaseId }) => {
|
|
|
512
519
|
};
|
|
513
520
|
const Root = ({ children, hasTriggerBorder = false }) => {
|
|
514
521
|
const { formatMessage } = useIntl();
|
|
522
|
+
const { allowedActions } = useRBAC(PERMISSIONS);
|
|
515
523
|
return (
|
|
516
524
|
// A user can access the dropdown if they have permissions to delete a release-action OR update a release
|
|
517
|
-
|
|
525
|
+
allowedActions.canDeleteAction || allowedActions.canUpdate ? /* @__PURE__ */ jsxs(Menu.Root, { children: [
|
|
518
526
|
/* @__PURE__ */ jsx(
|
|
519
527
|
Menu.Trigger,
|
|
520
528
|
{
|
|
@@ -529,7 +537,7 @@ const Root = ({ children, hasTriggerBorder = false }) => {
|
|
|
529
537
|
}
|
|
530
538
|
),
|
|
531
539
|
/* @__PURE__ */ jsx(Menu.Content, { top: 1, popoverPlacement: "bottom-end", children })
|
|
532
|
-
] })
|
|
540
|
+
] }) : null
|
|
533
541
|
);
|
|
534
542
|
};
|
|
535
543
|
const ReleaseActionMenu = {
|
|
@@ -661,12 +669,13 @@ const INITIAL_VALUES = {
|
|
|
661
669
|
const NoReleases = () => {
|
|
662
670
|
const { formatMessage } = useIntl();
|
|
663
671
|
return /* @__PURE__ */ jsx(
|
|
664
|
-
|
|
672
|
+
EmptyStateLayout,
|
|
665
673
|
{
|
|
666
|
-
|
|
674
|
+
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "10rem" }),
|
|
675
|
+
content: formatMessage({
|
|
667
676
|
id: "content-releases.content-manager-edit-view.add-to-release.no-releases-message",
|
|
668
677
|
defaultMessage: "No available releases. Open the list of releases and create a new one from there."
|
|
669
|
-
},
|
|
678
|
+
}),
|
|
670
679
|
action: /* @__PURE__ */ jsx(
|
|
671
680
|
LinkButton,
|
|
672
681
|
{
|
|
@@ -691,9 +700,10 @@ const AddActionToReleaseModal = ({
|
|
|
691
700
|
}) => {
|
|
692
701
|
const releaseHeaderId = React.useId();
|
|
693
702
|
const { formatMessage } = useIntl();
|
|
694
|
-
const toggleNotification = useNotification();
|
|
703
|
+
const { toggleNotification } = useNotification();
|
|
695
704
|
const { formatAPIError } = useAPIErrorHandler();
|
|
696
|
-
const {
|
|
705
|
+
const [{ query }] = useQueryParams();
|
|
706
|
+
const locale = query.plugins?.i18n?.locale;
|
|
697
707
|
const response = useGetReleasesForEntryQuery({
|
|
698
708
|
contentTypeUid,
|
|
699
709
|
entryId,
|
|
@@ -702,7 +712,6 @@ const AddActionToReleaseModal = ({
|
|
|
702
712
|
const releases = response.data?.data;
|
|
703
713
|
const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();
|
|
704
714
|
const handleSubmit = async (values) => {
|
|
705
|
-
const locale = modifiedData.locale;
|
|
706
715
|
const releaseActionEntry = {
|
|
707
716
|
contentType: contentTypeUid,
|
|
708
717
|
id: entryId,
|
|
@@ -726,12 +735,12 @@ const AddActionToReleaseModal = ({
|
|
|
726
735
|
if ("error" in response2) {
|
|
727
736
|
if (isAxiosError$1(response2.error)) {
|
|
728
737
|
toggleNotification({
|
|
729
|
-
type: "
|
|
738
|
+
type: "danger",
|
|
730
739
|
message: formatAPIError(response2.error)
|
|
731
740
|
});
|
|
732
741
|
} else {
|
|
733
742
|
toggleNotification({
|
|
734
|
-
type: "
|
|
743
|
+
type: "danger",
|
|
735
744
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
736
745
|
});
|
|
737
746
|
}
|
|
@@ -784,7 +793,7 @@ const AddActionToReleaseModal = ({
|
|
|
784
793
|
/* @__PURE__ */ jsx(
|
|
785
794
|
ModalFooter,
|
|
786
795
|
{
|
|
787
|
-
startActions: /* @__PURE__ */ jsx(Button
|
|
796
|
+
startActions: /* @__PURE__ */ jsx(Button, { onClick: handleClose, variant: "tertiary", name: "cancel", children: formatMessage({
|
|
788
797
|
id: "content-releases.content-manager-edit-view.add-to-release.cancel-button",
|
|
789
798
|
defaultMessage: "Cancel"
|
|
790
799
|
}) }),
|
|
@@ -793,7 +802,7 @@ const AddActionToReleaseModal = ({
|
|
|
793
802
|
* TODO: Ideally we would use isValid from Formik to disable the button, however currently it always returns true
|
|
794
803
|
* for yup.string().required(), even when the value is falsy (including empty string)
|
|
795
804
|
*/
|
|
796
|
-
/* @__PURE__ */ jsx(Button
|
|
805
|
+
/* @__PURE__ */ jsx(Button, { type: "submit", disabled: !values.releaseId, loading: isLoading, children: formatMessage({
|
|
797
806
|
id: "content-releases.content-manager-edit-view.add-to-release.continue-button",
|
|
798
807
|
defaultMessage: "Continue"
|
|
799
808
|
}) })
|
|
@@ -809,17 +818,20 @@ const AddActionToReleaseModal = ({
|
|
|
809
818
|
const CMReleasesContainer = () => {
|
|
810
819
|
const [isModalOpen, setIsModalOpen] = React.useState(false);
|
|
811
820
|
const { formatMessage, formatDate, formatTime } = useIntl();
|
|
812
|
-
const {
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
821
|
+
const { id, slug, collectionType } = useParams();
|
|
822
|
+
const isCreatingEntry = id === "create";
|
|
823
|
+
const { allowedActions } = useRBAC(PERMISSIONS);
|
|
824
|
+
const { canCreateAction, canRead: canMain, canDeleteAction } = allowedActions;
|
|
825
|
+
const { schema } = unstable_useDocument({
|
|
826
|
+
collectionType,
|
|
827
|
+
model: slug
|
|
828
|
+
});
|
|
829
|
+
const hasDraftAndPublish = schema?.options?.draftAndPublish;
|
|
818
830
|
const contentTypeUid = slug;
|
|
819
|
-
const canFetch =
|
|
831
|
+
const canFetch = id != null && contentTypeUid != null;
|
|
820
832
|
const fetchParams = canFetch ? {
|
|
821
833
|
contentTypeUid,
|
|
822
|
-
entryId,
|
|
834
|
+
entryId: id,
|
|
823
835
|
hasEntryAttached: true
|
|
824
836
|
} : skipToken;
|
|
825
837
|
const response = useGetReleasesForEntryQuery(fetchParams);
|
|
@@ -837,7 +849,10 @@ const CMReleasesContainer = () => {
|
|
|
837
849
|
}
|
|
838
850
|
return `success${shade}`;
|
|
839
851
|
};
|
|
840
|
-
|
|
852
|
+
if (!canMain) {
|
|
853
|
+
return null;
|
|
854
|
+
}
|
|
855
|
+
return /* @__PURE__ */ jsxs(
|
|
841
856
|
Box,
|
|
842
857
|
{
|
|
843
858
|
as: "aside",
|
|
@@ -894,7 +909,7 @@ const CMReleasesContainer = () => {
|
|
|
894
909
|
)
|
|
895
910
|
}
|
|
896
911
|
),
|
|
897
|
-
/* @__PURE__ */ jsxs(Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: [
|
|
912
|
+
/* @__PURE__ */ jsx(Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: /* @__PURE__ */ jsxs(Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: [
|
|
898
913
|
/* @__PURE__ */ jsx(Typography, { fontSize: 2, fontWeight: "bold", variant: "omega", textColor: "neutral700", children: release.name }),
|
|
899
914
|
release.scheduledAt && release.timezone && /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: formatMessage(
|
|
900
915
|
{
|
|
@@ -918,7 +933,7 @@ const CMReleasesContainer = () => {
|
|
|
918
933
|
)
|
|
919
934
|
}
|
|
920
935
|
) }),
|
|
921
|
-
|
|
936
|
+
canDeleteAction ? /* @__PURE__ */ jsxs(ReleaseActionMenu.Root, { hasTriggerBorder: true, children: [
|
|
922
937
|
/* @__PURE__ */ jsx(ReleaseActionMenu.EditReleaseItem, { releaseId: release.id }),
|
|
923
938
|
/* @__PURE__ */ jsx(
|
|
924
939
|
ReleaseActionMenu.DeleteReleaseActionItem,
|
|
@@ -927,15 +942,15 @@ const CMReleasesContainer = () => {
|
|
|
927
942
|
actionId: release.actions[0].id
|
|
928
943
|
}
|
|
929
944
|
)
|
|
930
|
-
] })
|
|
931
|
-
] })
|
|
945
|
+
] }) : null
|
|
946
|
+
] }) })
|
|
932
947
|
]
|
|
933
948
|
},
|
|
934
949
|
release.id
|
|
935
950
|
);
|
|
936
951
|
}),
|
|
937
|
-
|
|
938
|
-
Button
|
|
952
|
+
canCreateAction ? /* @__PURE__ */ jsx(
|
|
953
|
+
Button,
|
|
939
954
|
{
|
|
940
955
|
justifyContent: "center",
|
|
941
956
|
paddingLeft: 4,
|
|
@@ -949,19 +964,19 @@ const CMReleasesContainer = () => {
|
|
|
949
964
|
defaultMessage: "Add to release"
|
|
950
965
|
})
|
|
951
966
|
}
|
|
952
|
-
)
|
|
967
|
+
) : null
|
|
953
968
|
] }),
|
|
954
969
|
isModalOpen && /* @__PURE__ */ jsx(
|
|
955
970
|
AddActionToReleaseModal,
|
|
956
971
|
{
|
|
957
972
|
handleClose: toggleModal,
|
|
958
973
|
contentTypeUid,
|
|
959
|
-
entryId
|
|
974
|
+
entryId: id
|
|
960
975
|
}
|
|
961
976
|
)
|
|
962
977
|
]
|
|
963
978
|
}
|
|
964
|
-
)
|
|
979
|
+
);
|
|
965
980
|
};
|
|
966
981
|
const getContentPermissions = (subject) => {
|
|
967
982
|
const permissions = {
|
|
@@ -978,11 +993,11 @@ const getContentPermissions = (subject) => {
|
|
|
978
993
|
};
|
|
979
994
|
return permissions;
|
|
980
995
|
};
|
|
981
|
-
const ReleaseAction = ({
|
|
996
|
+
const ReleaseAction = ({ documentIds, model }) => {
|
|
982
997
|
const { formatMessage } = useIntl();
|
|
983
|
-
const toggleNotification = useNotification();
|
|
998
|
+
const { toggleNotification } = useNotification();
|
|
984
999
|
const { formatAPIError } = useAPIErrorHandler();
|
|
985
|
-
const {
|
|
1000
|
+
const [{ query }] = useQueryParams();
|
|
986
1001
|
const contentPermissions = getContentPermissions(model);
|
|
987
1002
|
const {
|
|
988
1003
|
allowedActions: { canPublish }
|
|
@@ -994,15 +1009,17 @@ const ReleaseAction = ({ ids, model }) => {
|
|
|
994
1009
|
const releases = response.data?.data;
|
|
995
1010
|
const [createManyReleaseActions, { isLoading }] = useCreateManyReleaseActionsMutation();
|
|
996
1011
|
const handleSubmit = async (values) => {
|
|
997
|
-
const locale =
|
|
998
|
-
const releaseActionEntries =
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1012
|
+
const locale = query.plugins?.i18n?.locale;
|
|
1013
|
+
const releaseActionEntries = documentIds.map(
|
|
1014
|
+
(id) => ({
|
|
1015
|
+
type: values.type,
|
|
1016
|
+
entry: {
|
|
1017
|
+
contentType: model,
|
|
1018
|
+
id,
|
|
1019
|
+
locale
|
|
1020
|
+
}
|
|
1021
|
+
})
|
|
1022
|
+
);
|
|
1006
1023
|
const response2 = await createManyReleaseActions({
|
|
1007
1024
|
body: releaseActionEntries,
|
|
1008
1025
|
params: { releaseId: values.releaseId }
|
|
@@ -1111,7 +1128,7 @@ const ReleaseAction = ({ ids, model }) => {
|
|
|
1111
1128
|
/* @__PURE__ */ jsx(
|
|
1112
1129
|
ModalFooter,
|
|
1113
1130
|
{
|
|
1114
|
-
startActions: /* @__PURE__ */ jsx(Button
|
|
1131
|
+
startActions: /* @__PURE__ */ jsx(Button, { onClick: onClose, variant: "tertiary", name: "cancel", children: formatMessage({
|
|
1115
1132
|
id: "content-releases.content-manager-list-view.add-to-release.cancel-button",
|
|
1116
1133
|
defaultMessage: "Cancel"
|
|
1117
1134
|
}) }),
|
|
@@ -1120,7 +1137,7 @@ const ReleaseAction = ({ ids, model }) => {
|
|
|
1120
1137
|
* TODO: Ideally we would use isValid from Formik to disable the button, however currently it always returns true
|
|
1121
1138
|
* for yup.string().required(), even when the value is falsy (including empty string)
|
|
1122
1139
|
*/
|
|
1123
|
-
/* @__PURE__ */ jsx(Button
|
|
1140
|
+
/* @__PURE__ */ jsx(Button, { type: "submit", disabled: !values.releaseId, loading: isLoading, children: formatMessage({
|
|
1124
1141
|
id: "content-releases.content-manager-list-view.add-to-release.continue-button",
|
|
1125
1142
|
defaultMessage: "Continue"
|
|
1126
1143
|
}) })
|
|
@@ -1134,96 +1151,14 @@ const ReleaseAction = ({ ids, model }) => {
|
|
|
1134
1151
|
}
|
|
1135
1152
|
};
|
|
1136
1153
|
};
|
|
1137
|
-
const
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
path {
|
|
1141
|
-
fill: ${({ theme }) => theme.colors.neutral500};
|
|
1142
|
-
}
|
|
1143
|
-
}
|
|
1144
|
-
&:hover {
|
|
1145
|
-
svg {
|
|
1146
|
-
> g,
|
|
1147
|
-
path {
|
|
1148
|
-
fill: ${({ theme }) => theme.colors.neutral600};
|
|
1149
|
-
}
|
|
1150
|
-
}
|
|
1151
|
-
}
|
|
1152
|
-
&:active {
|
|
1153
|
-
svg {
|
|
1154
|
-
> g,
|
|
1155
|
-
path {
|
|
1156
|
-
fill: ${({ theme }) => theme.colors.neutral400};
|
|
1157
|
-
}
|
|
1158
|
-
}
|
|
1159
|
-
}
|
|
1160
|
-
`;
|
|
1161
|
-
const ActionWrapper = styled(Flex)`
|
|
1162
|
-
svg {
|
|
1163
|
-
height: ${4 / 16}rem;
|
|
1164
|
-
}
|
|
1165
|
-
`;
|
|
1166
|
-
const useReleasesList = (entryId) => {
|
|
1167
|
-
const { uid: contentTypeUid } = useTypedSelector(
|
|
1168
|
-
(state) => state["content-manager_listView"].contentType
|
|
1169
|
-
);
|
|
1170
|
-
const listViewData = useTypedSelector((state) => state["content-manager_listView"].data);
|
|
1171
|
-
const entriesIds = listViewData.map((entry) => entry.id);
|
|
1172
|
-
const response = useGetMappedEntriesInReleasesQuery(
|
|
1173
|
-
{ contentTypeUid, entriesIds },
|
|
1174
|
-
{ skip: !entriesIds || !contentTypeUid || entriesIds.length === 0 }
|
|
1175
|
-
);
|
|
1176
|
-
const mappedEntriesInReleases = response.data || {};
|
|
1177
|
-
return mappedEntriesInReleases?.[entryId] || [];
|
|
1178
|
-
};
|
|
1179
|
-
const addColumnToTableHook = ({ displayedHeaders, layout }) => {
|
|
1180
|
-
const { contentType } = layout;
|
|
1181
|
-
if (!contentType.options?.draftAndPublish) {
|
|
1182
|
-
return { displayedHeaders, layout };
|
|
1154
|
+
const prefixPluginTranslations = (trad, pluginId2) => {
|
|
1155
|
+
if (!pluginId2) {
|
|
1156
|
+
throw new TypeError("pluginId can't be empty");
|
|
1183
1157
|
}
|
|
1184
|
-
return {
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
key: "__release_key__",
|
|
1189
|
-
fieldSchema: { type: "string" },
|
|
1190
|
-
metadatas: { label: "To be released in", searchable: true, sortable: false },
|
|
1191
|
-
name: "releasedAt",
|
|
1192
|
-
cellFormatter: (props) => /* @__PURE__ */ jsx(ReleaseListCell, { ...props })
|
|
1193
|
-
}
|
|
1194
|
-
],
|
|
1195
|
-
layout
|
|
1196
|
-
};
|
|
1197
|
-
};
|
|
1198
|
-
const ReleaseListCell = ({ id }) => {
|
|
1199
|
-
const releases = useReleasesList(id);
|
|
1200
|
-
const [visible, setVisible] = React.useState(false);
|
|
1201
|
-
const buttonRef = React.useRef(null);
|
|
1202
|
-
const { formatMessage } = useIntl();
|
|
1203
|
-
const handleTogglePopover = () => setVisible((prev) => !prev);
|
|
1204
|
-
return /* @__PURE__ */ jsx(Flex, { onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx(Button, { type: "button", onClick: handleTogglePopover, ref: buttonRef, children: /* @__PURE__ */ jsxs(ActionWrapper, { height: "2rem", width: "2rem", children: [
|
|
1205
|
-
/* @__PURE__ */ jsx(Typography, { style: { maxWidth: "252px", cursor: "pointer" }, textColor: "neutral800", children: releases.length > 0 ? formatMessage(
|
|
1206
|
-
{
|
|
1207
|
-
id: "content-releases.content-manager.list-view.releases-number",
|
|
1208
|
-
defaultMessage: "{number} {number, plural, one {release} other {releases}}"
|
|
1209
|
-
},
|
|
1210
|
-
{
|
|
1211
|
-
number: releases.length
|
|
1212
|
-
}
|
|
1213
|
-
) : "-" }),
|
|
1214
|
-
/* @__PURE__ */ jsxs(Flex, { children: [
|
|
1215
|
-
releases.length > 0 && /* @__PURE__ */ jsx(SortIcon, {}),
|
|
1216
|
-
visible && /* @__PURE__ */ jsx(
|
|
1217
|
-
Popover,
|
|
1218
|
-
{
|
|
1219
|
-
onDismiss: handleTogglePopover,
|
|
1220
|
-
source: buttonRef,
|
|
1221
|
-
spacing: 16,
|
|
1222
|
-
children: /* @__PURE__ */ jsx("ul", { children: releases.map(({ id: id2, name }) => /* @__PURE__ */ jsx(Box, { padding: 3, as: "li", children: /* @__PURE__ */ jsx(Link, { href: `/admin/plugins/content-releases/${id2}`, isExternal: false, children: name }) }, id2)) })
|
|
1223
|
-
}
|
|
1224
|
-
)
|
|
1225
|
-
] })
|
|
1226
|
-
] }) }) });
|
|
1158
|
+
return Object.keys(trad).reduce((acc, current) => {
|
|
1159
|
+
acc[`${pluginId2}.${current}`] = trad[current];
|
|
1160
|
+
return acc;
|
|
1161
|
+
}, {});
|
|
1227
1162
|
};
|
|
1228
1163
|
const admin = {
|
|
1229
1164
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -1231,23 +1166,20 @@ const admin = {
|
|
|
1231
1166
|
app.createHook("ContentReleases/pages/ReleaseDetails/add-locale-in-releases");
|
|
1232
1167
|
if (window.strapi.features.isEnabled("cms-content-releases")) {
|
|
1233
1168
|
app.addMenuLink({
|
|
1234
|
-
to:
|
|
1169
|
+
to: `plugins/${pluginId}`,
|
|
1235
1170
|
icon: PaperPlane,
|
|
1236
1171
|
intlLabel: {
|
|
1237
1172
|
id: `${pluginId}.plugin.name`,
|
|
1238
1173
|
defaultMessage: "Releases"
|
|
1239
1174
|
},
|
|
1240
|
-
|
|
1241
|
-
const { App } = await import("./App-gu1aiP6i.mjs");
|
|
1242
|
-
return App;
|
|
1243
|
-
},
|
|
1175
|
+
Component: () => import("./App-Cmn2Mkn7.mjs").then((mod) => ({ default: mod.App })),
|
|
1244
1176
|
permissions: PERMISSIONS.main
|
|
1245
1177
|
});
|
|
1246
1178
|
app.addMiddlewares([() => releaseApi.middleware]);
|
|
1247
1179
|
app.addReducers({
|
|
1248
1180
|
[releaseApi.reducerPath]: releaseApi.reducer
|
|
1249
1181
|
});
|
|
1250
|
-
app.
|
|
1182
|
+
app.getPlugin("content-manager").injectComponent("editView", "right-links", {
|
|
1251
1183
|
name: `${pluginId}-link`,
|
|
1252
1184
|
Component: CMReleasesContainer
|
|
1253
1185
|
});
|
|
@@ -1256,7 +1188,6 @@ const admin = {
|
|
|
1256
1188
|
actions.splice(deleteActionIndex, 0, ReleaseAction);
|
|
1257
1189
|
return actions;
|
|
1258
1190
|
});
|
|
1259
|
-
app.registerHook("Admin/CM/pages/ListView/inject-column-in-table", addColumnToTableHook);
|
|
1260
1191
|
} else if (!window.strapi.features.isEnabled("cms-content-releases") && window.strapi?.flags?.promoteEE) {
|
|
1261
1192
|
app.addMenuLink({
|
|
1262
1193
|
to: `/plugins/purchase-content-releases`,
|
|
@@ -1265,9 +1196,10 @@ const admin = {
|
|
|
1265
1196
|
id: `${pluginId}.plugin.name`,
|
|
1266
1197
|
defaultMessage: "Releases"
|
|
1267
1198
|
},
|
|
1199
|
+
permissions: [],
|
|
1268
1200
|
async Component() {
|
|
1269
|
-
const { PurchaseContentReleases } = await import("./PurchaseContentReleases-
|
|
1270
|
-
return PurchaseContentReleases;
|
|
1201
|
+
const { PurchaseContentReleases } = await import("./PurchaseContentReleases-C8djn9fP.mjs");
|
|
1202
|
+
return { default: PurchaseContentReleases };
|
|
1271
1203
|
},
|
|
1272
1204
|
lockIcon: true
|
|
1273
1205
|
});
|
|
@@ -1276,7 +1208,7 @@ const admin = {
|
|
|
1276
1208
|
async registerTrads({ locales }) {
|
|
1277
1209
|
const importedTrads = await Promise.all(
|
|
1278
1210
|
locales.map((locale) => {
|
|
1279
|
-
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-
|
|
1211
|
+
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-B9Ur3VsE.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
|
|
1280
1212
|
return {
|
|
1281
1213
|
data: prefixPluginTranslations(data, "content-releases"),
|
|
1282
1214
|
locale
|
|
@@ -1300,15 +1232,14 @@ export {
|
|
|
1300
1232
|
useUpdateReleaseMutation as c,
|
|
1301
1233
|
useDeleteReleaseMutation as d,
|
|
1302
1234
|
usePublishReleaseMutation as e,
|
|
1303
|
-
|
|
1235
|
+
useGetReleaseActionsQuery as f,
|
|
1304
1236
|
getTimezoneOffset as g,
|
|
1305
|
-
|
|
1237
|
+
useUpdateReleaseActionMutation as h,
|
|
1306
1238
|
isAxiosError as i,
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
admin as l,
|
|
1239
|
+
ReleaseActionMenu as j,
|
|
1240
|
+
admin as k,
|
|
1310
1241
|
pluginId as p,
|
|
1311
1242
|
releaseApi as r,
|
|
1312
1243
|
useGetReleasesQuery as u
|
|
1313
1244
|
};
|
|
1314
|
-
//# sourceMappingURL=index-
|
|
1245
|
+
//# sourceMappingURL=index-DDohgTaQ.mjs.map
|