@strapi/content-releases 0.0.0-experimental.cae3a5a17d131a6f59673b62d01cfac869ea9cc2 → 0.0.0-experimental.cf82c830d8a75c9f35466f4c6010fb588d34063f
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-iqqoPnBO.js → App-OP70yd5M.js} +696 -433
- package/dist/_chunks/App-OP70yd5M.js.map +1 -0
- package/dist/_chunks/{App-_Jj3tWts.mjs → App-x6Tjj3HN.mjs} +704 -442
- package/dist/_chunks/App-x6Tjj3HN.mjs.map +1 -0
- package/dist/_chunks/PurchaseContentReleases-3tRbmbY3.mjs +51 -0
- package/dist/_chunks/PurchaseContentReleases-3tRbmbY3.mjs.map +1 -0
- package/dist/_chunks/PurchaseContentReleases-bpIYXOfu.js +51 -0
- package/dist/_chunks/PurchaseContentReleases-bpIYXOfu.js.map +1 -0
- package/dist/_chunks/{en-2DuPv5k0.js → en-3SGjiVyR.js} +26 -7
- package/dist/_chunks/en-3SGjiVyR.js.map +1 -0
- package/dist/_chunks/{en-SOqjCdyh.mjs → en-bpHsnU0n.mjs} +26 -7
- package/dist/_chunks/en-bpHsnU0n.mjs.map +1 -0
- package/dist/_chunks/{index-bsuc8ZwZ.mjs → index-1ejXLtzt.mjs} +342 -46
- package/dist/_chunks/index-1ejXLtzt.mjs.map +1 -0
- package/dist/_chunks/{index-_lT-gI3M.js → index-ydocdaZ0.js} +329 -33
- package/dist/_chunks/index-ydocdaZ0.js.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +2 -2
- package/dist/server/index.js +998 -399
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +997 -399
- package/dist/server/index.mjs.map +1 -1
- package/package.json +15 -12
- package/dist/_chunks/App-_Jj3tWts.mjs.map +0 -1
- package/dist/_chunks/App-iqqoPnBO.js.map +0 -1
- package/dist/_chunks/en-2DuPv5k0.js.map +0 -1
- package/dist/_chunks/en-SOqjCdyh.mjs.map +0 -1
- package/dist/_chunks/index-_lT-gI3M.js.map +0 -1
- package/dist/_chunks/index-bsuc8ZwZ.mjs.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getFetchClient, useNotification, useAPIErrorHandler, CheckPermissions, useCMEditViewDataManager, NoContent, prefixPluginTranslations } from "@strapi/helper-plugin";
|
|
1
|
+
import { getFetchClient, useNotification, useAPIErrorHandler, CheckPermissions, useCMEditViewDataManager, NoContent, useRBAC, prefixPluginTranslations } from "@strapi/helper-plugin";
|
|
2
2
|
import { Cross, Pencil, More, Plus, PaperPlane } from "@strapi/icons";
|
|
3
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
import * as React from "react";
|
|
@@ -8,7 +8,7 @@ import { Menu, Link, LinkButton } from "@strapi/design-system/v2";
|
|
|
8
8
|
import { isAxiosError as isAxiosError$1 } from "axios";
|
|
9
9
|
import { Formik, Form } from "formik";
|
|
10
10
|
import { useIntl } from "react-intl";
|
|
11
|
-
import { NavLink,
|
|
11
|
+
import { NavLink, Link as Link$1 } from "react-router-dom";
|
|
12
12
|
import * as yup from "yup";
|
|
13
13
|
import { createApi } from "@reduxjs/toolkit/query/react";
|
|
14
14
|
import styled from "styled-components";
|
|
@@ -251,6 +251,19 @@ const releaseApi = createApi({
|
|
|
251
251
|
{ type: "ReleaseAction", id: "LIST" }
|
|
252
252
|
]
|
|
253
253
|
}),
|
|
254
|
+
createManyReleaseActions: build.mutation({
|
|
255
|
+
query({ body, params }) {
|
|
256
|
+
return {
|
|
257
|
+
url: `/content-releases/${params.releaseId}/actions/bulk`,
|
|
258
|
+
method: "POST",
|
|
259
|
+
data: body
|
|
260
|
+
};
|
|
261
|
+
},
|
|
262
|
+
invalidatesTags: [
|
|
263
|
+
{ type: "Release", id: "LIST" },
|
|
264
|
+
{ type: "ReleaseAction", id: "LIST" }
|
|
265
|
+
]
|
|
266
|
+
}),
|
|
254
267
|
updateReleaseAction: build.mutation({
|
|
255
268
|
query({ body, params }) {
|
|
256
269
|
return {
|
|
@@ -288,8 +301,9 @@ const releaseApi = createApi({
|
|
|
288
301
|
method: "DELETE"
|
|
289
302
|
};
|
|
290
303
|
},
|
|
291
|
-
invalidatesTags: [
|
|
304
|
+
invalidatesTags: (result, error, arg) => [
|
|
292
305
|
{ type: "Release", id: "LIST" },
|
|
306
|
+
{ type: "Release", id: arg.params.releaseId },
|
|
293
307
|
{ type: "ReleaseAction", id: "LIST" }
|
|
294
308
|
]
|
|
295
309
|
}),
|
|
@@ -309,7 +323,7 @@ const releaseApi = createApi({
|
|
|
309
323
|
method: "DELETE"
|
|
310
324
|
};
|
|
311
325
|
},
|
|
312
|
-
invalidatesTags: (
|
|
326
|
+
invalidatesTags: () => [{ type: "Release", id: "LIST" }]
|
|
313
327
|
})
|
|
314
328
|
};
|
|
315
329
|
}
|
|
@@ -321,12 +335,29 @@ const {
|
|
|
321
335
|
useGetReleaseActionsQuery,
|
|
322
336
|
useCreateReleaseMutation,
|
|
323
337
|
useCreateReleaseActionMutation,
|
|
338
|
+
useCreateManyReleaseActionsMutation,
|
|
324
339
|
useUpdateReleaseMutation,
|
|
325
340
|
useUpdateReleaseActionMutation,
|
|
326
341
|
usePublishReleaseMutation,
|
|
327
342
|
useDeleteReleaseActionMutation,
|
|
328
343
|
useDeleteReleaseMutation
|
|
329
344
|
} = releaseApi;
|
|
345
|
+
const getTimezoneOffset = (timezone, date) => {
|
|
346
|
+
try {
|
|
347
|
+
const offsetPart = new Intl.DateTimeFormat("en", {
|
|
348
|
+
timeZone: timezone,
|
|
349
|
+
timeZoneName: "longOffset"
|
|
350
|
+
}).formatToParts(date).find((part) => part.type === "timeZoneName");
|
|
351
|
+
const offset = offsetPart ? offsetPart.value : "";
|
|
352
|
+
let utcOffset = offset.replace("GMT", "UTC");
|
|
353
|
+
if (!utcOffset.includes("+") && !utcOffset.includes("-")) {
|
|
354
|
+
utcOffset = `${utcOffset}+00:00`;
|
|
355
|
+
}
|
|
356
|
+
return utcOffset;
|
|
357
|
+
} catch (error) {
|
|
358
|
+
return "";
|
|
359
|
+
}
|
|
360
|
+
};
|
|
330
361
|
const useTypedDispatch = useDispatch;
|
|
331
362
|
const useTypedSelector = useSelector;
|
|
332
363
|
const StyledMenuItem = styled(Menu.Item)`
|
|
@@ -397,7 +428,7 @@ const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
|
|
|
397
428
|
}
|
|
398
429
|
};
|
|
399
430
|
return /* @__PURE__ */ jsx(CheckPermissions, { permissions: PERMISSIONS.deleteAction, children: /* @__PURE__ */ jsx(StyledMenuItem, { variant: "danger", onSelect: handleDeleteAction, children: /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
400
|
-
/* @__PURE__ */ jsx(Icon, { as: Cross,
|
|
431
|
+
/* @__PURE__ */ jsx(Icon, { as: Cross, width: 3, height: 3 }),
|
|
401
432
|
/* @__PURE__ */ jsx(Typography, { textColor: "danger600", variant: "omega", children: formatMessage({
|
|
402
433
|
id: "content-releases.content-manager-edit-view.remove-from-release",
|
|
403
434
|
defaultMessage: "Remove from release"
|
|
@@ -436,7 +467,7 @@ const ReleaseActionEntryLinkItem = ({
|
|
|
436
467
|
pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
|
|
437
468
|
search: locale && `?plugins[i18n][locale]=${locale}`
|
|
438
469
|
},
|
|
439
|
-
startIcon: /* @__PURE__ */ jsx(Icon, { as: Pencil,
|
|
470
|
+
startIcon: /* @__PURE__ */ jsx(Icon, { as: Pencil, width: 3, height: 3 }),
|
|
440
471
|
children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
|
|
441
472
|
id: "content-releases.content-manager-edit-view.edit-entry",
|
|
442
473
|
defaultMessage: "Edit entry"
|
|
@@ -446,6 +477,21 @@ const ReleaseActionEntryLinkItem = ({
|
|
|
446
477
|
}
|
|
447
478
|
);
|
|
448
479
|
};
|
|
480
|
+
const EditReleaseItem = ({ releaseId }) => {
|
|
481
|
+
const { formatMessage } = useIntl();
|
|
482
|
+
return /* @__PURE__ */ jsx(StyledMenuItem, { children: /* @__PURE__ */ jsx(
|
|
483
|
+
Link,
|
|
484
|
+
{
|
|
485
|
+
href: `/admin/plugins/content-releases/${releaseId}`,
|
|
486
|
+
startIcon: /* @__PURE__ */ jsx(Icon, { as: Pencil, width: 3, height: 3 }),
|
|
487
|
+
isExternal: false,
|
|
488
|
+
children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
|
|
489
|
+
id: "content-releases.content-manager-edit-view.edit-release",
|
|
490
|
+
defaultMessage: "Edit release"
|
|
491
|
+
}) })
|
|
492
|
+
}
|
|
493
|
+
) });
|
|
494
|
+
};
|
|
449
495
|
const Root = ({ children, hasTriggerBorder = false }) => {
|
|
450
496
|
const { formatMessage } = useIntl();
|
|
451
497
|
return (
|
|
@@ -470,6 +516,7 @@ const Root = ({ children, hasTriggerBorder = false }) => {
|
|
|
470
516
|
};
|
|
471
517
|
const ReleaseActionMenu = {
|
|
472
518
|
Root,
|
|
519
|
+
EditReleaseItem,
|
|
473
520
|
DeleteReleaseActionItem,
|
|
474
521
|
ReleaseActionEntryLinkItem
|
|
475
522
|
};
|
|
@@ -493,19 +540,40 @@ const FieldWrapper = styled(Field)`
|
|
|
493
540
|
text-transform: capitalize;
|
|
494
541
|
}
|
|
495
542
|
|
|
496
|
-
&:active,
|
|
497
543
|
&[data-checked='true'] {
|
|
498
|
-
color: ${({ theme }) => theme.colors.primary700};
|
|
499
|
-
background-color: ${({ theme }) => theme.colors.primary100};
|
|
500
|
-
border-color: ${({ theme }) => theme.colors.primary700};
|
|
544
|
+
color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
|
|
545
|
+
background-color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary100 : theme.colors.danger100};
|
|
546
|
+
border-color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
|
|
501
547
|
}
|
|
502
548
|
|
|
503
549
|
&[data-checked='false'] {
|
|
504
550
|
border-left: ${({ actionType }) => actionType === "unpublish" && "none"};
|
|
505
551
|
border-right: ${({ actionType }) => actionType === "publish" && "none"};
|
|
506
552
|
}
|
|
553
|
+
|
|
554
|
+
&[data-checked='false'][data-disabled='false']:hover {
|
|
555
|
+
color: ${({ theme }) => theme.colors.neutral700};
|
|
556
|
+
background-color: ${({ theme }) => theme.colors.neutral100};
|
|
557
|
+
border-color: ${({ theme }) => theme.colors.neutral200};
|
|
558
|
+
|
|
559
|
+
& > label {
|
|
560
|
+
cursor: pointer;
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
&[data-disabled='true'] {
|
|
565
|
+
color: ${({ theme }) => theme.colors.neutral600};
|
|
566
|
+
background-color: ${({ theme }) => theme.colors.neutral150};
|
|
567
|
+
border-color: ${({ theme }) => theme.colors.neutral300};
|
|
568
|
+
}
|
|
507
569
|
`;
|
|
508
|
-
const ActionOption = ({
|
|
570
|
+
const ActionOption = ({
|
|
571
|
+
selected,
|
|
572
|
+
actionType,
|
|
573
|
+
handleChange,
|
|
574
|
+
name,
|
|
575
|
+
disabled = false
|
|
576
|
+
}) => {
|
|
509
577
|
return /* @__PURE__ */ jsx(
|
|
510
578
|
FieldWrapper,
|
|
511
579
|
{
|
|
@@ -516,6 +584,7 @@ const ActionOption = ({ selected, actionType, handleChange, name }) => {
|
|
|
516
584
|
position: "relative",
|
|
517
585
|
cursor: "pointer",
|
|
518
586
|
"data-checked": selected === actionType,
|
|
587
|
+
"data-disabled": disabled && selected !== actionType,
|
|
519
588
|
children: /* @__PURE__ */ jsxs(FieldLabel, { htmlFor: `${name}-${actionType}`, children: [
|
|
520
589
|
/* @__PURE__ */ jsx(VisuallyHidden, { children: /* @__PURE__ */ jsx(
|
|
521
590
|
FieldInput,
|
|
@@ -525,7 +594,8 @@ const ActionOption = ({ selected, actionType, handleChange, name }) => {
|
|
|
525
594
|
name,
|
|
526
595
|
checked: selected === actionType,
|
|
527
596
|
onChange: handleChange,
|
|
528
|
-
value: actionType
|
|
597
|
+
value: actionType,
|
|
598
|
+
disabled
|
|
529
599
|
}
|
|
530
600
|
) }),
|
|
531
601
|
actionType
|
|
@@ -533,7 +603,12 @@ const ActionOption = ({ selected, actionType, handleChange, name }) => {
|
|
|
533
603
|
}
|
|
534
604
|
);
|
|
535
605
|
};
|
|
536
|
-
const ReleaseActionOptions = ({
|
|
606
|
+
const ReleaseActionOptions = ({
|
|
607
|
+
selected,
|
|
608
|
+
handleChange,
|
|
609
|
+
name,
|
|
610
|
+
disabled = false
|
|
611
|
+
}) => {
|
|
537
612
|
return /* @__PURE__ */ jsxs(Flex, { children: [
|
|
538
613
|
/* @__PURE__ */ jsx(
|
|
539
614
|
ActionOption,
|
|
@@ -541,7 +616,8 @@ const ReleaseActionOptions = ({ selected, handleChange, name }) => {
|
|
|
541
616
|
actionType: "publish",
|
|
542
617
|
selected,
|
|
543
618
|
handleChange,
|
|
544
|
-
name
|
|
619
|
+
name,
|
|
620
|
+
disabled
|
|
545
621
|
}
|
|
546
622
|
),
|
|
547
623
|
/* @__PURE__ */ jsx(
|
|
@@ -550,7 +626,8 @@ const ReleaseActionOptions = ({ selected, handleChange, name }) => {
|
|
|
550
626
|
actionType: "unpublish",
|
|
551
627
|
selected,
|
|
552
628
|
handleChange,
|
|
553
|
-
name
|
|
629
|
+
name,
|
|
630
|
+
disabled
|
|
554
631
|
}
|
|
555
632
|
)
|
|
556
633
|
] });
|
|
@@ -594,6 +671,7 @@ const AddActionToReleaseModal = ({
|
|
|
594
671
|
contentTypeUid,
|
|
595
672
|
entryId
|
|
596
673
|
}) => {
|
|
674
|
+
const releaseHeaderId = React.useId();
|
|
597
675
|
const { formatMessage } = useIntl();
|
|
598
676
|
const toggleNotification = useNotification();
|
|
599
677
|
const { formatAPIError } = useAPIErrorHandler();
|
|
@@ -641,8 +719,8 @@ const AddActionToReleaseModal = ({
|
|
|
641
719
|
}
|
|
642
720
|
}
|
|
643
721
|
};
|
|
644
|
-
return /* @__PURE__ */ jsxs(ModalLayout, { onClose: handleClose, labelledBy:
|
|
645
|
-
/* @__PURE__ */ jsx(ModalHeader, { children: /* @__PURE__ */ jsx(Typography, { id:
|
|
722
|
+
return /* @__PURE__ */ jsxs(ModalLayout, { onClose: handleClose, labelledBy: releaseHeaderId, children: [
|
|
723
|
+
/* @__PURE__ */ jsx(ModalHeader, { children: /* @__PURE__ */ jsx(Typography, { id: releaseHeaderId, fontWeight: "bold", textColor: "neutral800", children: formatMessage({
|
|
646
724
|
id: "content-releases.content-manager-edit-view.add-to-release",
|
|
647
725
|
defaultMessage: "Add to release"
|
|
648
726
|
}) }) }),
|
|
@@ -712,16 +790,18 @@ const AddActionToReleaseModal = ({
|
|
|
712
790
|
};
|
|
713
791
|
const CMReleasesContainer = () => {
|
|
714
792
|
const [isModalOpen, setIsModalOpen] = React.useState(false);
|
|
715
|
-
const { formatMessage } = useIntl();
|
|
793
|
+
const { formatMessage, formatDate, formatTime } = useIntl();
|
|
716
794
|
const {
|
|
717
795
|
isCreatingEntry,
|
|
718
|
-
|
|
796
|
+
hasDraftAndPublish,
|
|
797
|
+
initialData: { id: entryId },
|
|
798
|
+
slug
|
|
719
799
|
} = useCMEditViewDataManager();
|
|
720
|
-
const
|
|
721
|
-
const canFetch =
|
|
800
|
+
const contentTypeUid = slug;
|
|
801
|
+
const canFetch = entryId != null && contentTypeUid != null;
|
|
722
802
|
const fetchParams = canFetch ? {
|
|
723
|
-
contentTypeUid
|
|
724
|
-
entryId
|
|
803
|
+
contentTypeUid,
|
|
804
|
+
entryId,
|
|
725
805
|
hasEntryAttached: true
|
|
726
806
|
} : skipToken;
|
|
727
807
|
const response = useGetReleasesForEntryQuery(fetchParams);
|
|
@@ -729,7 +809,7 @@ const CMReleasesContainer = () => {
|
|
|
729
809
|
if (!canFetch) {
|
|
730
810
|
return null;
|
|
731
811
|
}
|
|
732
|
-
if (isCreatingEntry || !
|
|
812
|
+
if (isCreatingEntry || !hasDraftAndPublish) {
|
|
733
813
|
return null;
|
|
734
814
|
}
|
|
735
815
|
const toggleModal = () => setIsModalOpen((prev) => !prev);
|
|
@@ -796,15 +876,40 @@ const CMReleasesContainer = () => {
|
|
|
796
876
|
)
|
|
797
877
|
}
|
|
798
878
|
),
|
|
799
|
-
/* @__PURE__ */ jsxs(Flex, { padding: 4, direction: "column", gap:
|
|
879
|
+
/* @__PURE__ */ jsxs(Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: [
|
|
800
880
|
/* @__PURE__ */ jsx(Typography, { fontSize: 2, fontWeight: "bold", variant: "omega", textColor: "neutral700", children: release.name }),
|
|
801
|
-
|
|
802
|
-
ReleaseActionMenu.DeleteReleaseActionItem,
|
|
881
|
+
release.scheduledAt && release.timezone && /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: formatMessage(
|
|
803
882
|
{
|
|
804
|
-
|
|
805
|
-
|
|
883
|
+
id: "content-releases.content-manager-edit-view.scheduled.date",
|
|
884
|
+
defaultMessage: "{date} at {time} ({offset})"
|
|
885
|
+
},
|
|
886
|
+
{
|
|
887
|
+
date: formatDate(new Date(release.scheduledAt), {
|
|
888
|
+
day: "2-digit",
|
|
889
|
+
month: "2-digit",
|
|
890
|
+
year: "numeric",
|
|
891
|
+
timeZone: release.timezone
|
|
892
|
+
}),
|
|
893
|
+
time: formatTime(new Date(release.scheduledAt), {
|
|
894
|
+
hourCycle: "h23",
|
|
895
|
+
timeZone: release.timezone
|
|
896
|
+
}),
|
|
897
|
+
offset: getTimezoneOffset(
|
|
898
|
+
release.timezone,
|
|
899
|
+
new Date(release.scheduledAt)
|
|
900
|
+
)
|
|
806
901
|
}
|
|
807
|
-
) })
|
|
902
|
+
) }),
|
|
903
|
+
/* @__PURE__ */ jsx(CheckPermissions, { permissions: PERMISSIONS.deleteAction, children: /* @__PURE__ */ jsxs(ReleaseActionMenu.Root, { hasTriggerBorder: true, children: [
|
|
904
|
+
/* @__PURE__ */ jsx(ReleaseActionMenu.EditReleaseItem, { releaseId: release.id }),
|
|
905
|
+
/* @__PURE__ */ jsx(
|
|
906
|
+
ReleaseActionMenu.DeleteReleaseActionItem,
|
|
907
|
+
{
|
|
908
|
+
releaseId: release.id,
|
|
909
|
+
actionId: release.action.id
|
|
910
|
+
}
|
|
911
|
+
)
|
|
912
|
+
] }) })
|
|
808
913
|
] })
|
|
809
914
|
]
|
|
810
915
|
},
|
|
@@ -832,14 +937,185 @@ const CMReleasesContainer = () => {
|
|
|
832
937
|
AddActionToReleaseModal,
|
|
833
938
|
{
|
|
834
939
|
handleClose: toggleModal,
|
|
835
|
-
contentTypeUid
|
|
836
|
-
entryId
|
|
940
|
+
contentTypeUid,
|
|
941
|
+
entryId
|
|
837
942
|
}
|
|
838
943
|
)
|
|
839
944
|
]
|
|
840
945
|
}
|
|
841
946
|
) });
|
|
842
947
|
};
|
|
948
|
+
const getContentPermissions = (subject) => {
|
|
949
|
+
const permissions = {
|
|
950
|
+
publish: [
|
|
951
|
+
{
|
|
952
|
+
action: "plugin::content-manager.explorer.publish",
|
|
953
|
+
subject,
|
|
954
|
+
id: "",
|
|
955
|
+
actionParameters: {},
|
|
956
|
+
properties: {},
|
|
957
|
+
conditions: []
|
|
958
|
+
}
|
|
959
|
+
]
|
|
960
|
+
};
|
|
961
|
+
return permissions;
|
|
962
|
+
};
|
|
963
|
+
const ReleaseAction = ({ ids, model }) => {
|
|
964
|
+
const { formatMessage } = useIntl();
|
|
965
|
+
const toggleNotification = useNotification();
|
|
966
|
+
const { formatAPIError } = useAPIErrorHandler();
|
|
967
|
+
const { modifiedData } = useCMEditViewDataManager();
|
|
968
|
+
const contentPermissions = getContentPermissions(model);
|
|
969
|
+
const {
|
|
970
|
+
allowedActions: { canPublish }
|
|
971
|
+
} = useRBAC(contentPermissions);
|
|
972
|
+
const {
|
|
973
|
+
allowedActions: { canCreate }
|
|
974
|
+
} = useRBAC(PERMISSIONS);
|
|
975
|
+
const response = useGetReleasesQuery();
|
|
976
|
+
const releases = response.data?.data;
|
|
977
|
+
const [createManyReleaseActions, { isLoading }] = useCreateManyReleaseActionsMutation();
|
|
978
|
+
const handleSubmit = async (values) => {
|
|
979
|
+
const locale = modifiedData.locale;
|
|
980
|
+
const releaseActionEntries = ids.map((id) => ({
|
|
981
|
+
type: values.type,
|
|
982
|
+
entry: {
|
|
983
|
+
contentType: model,
|
|
984
|
+
id,
|
|
985
|
+
locale
|
|
986
|
+
}
|
|
987
|
+
}));
|
|
988
|
+
const response2 = await createManyReleaseActions({
|
|
989
|
+
body: releaseActionEntries,
|
|
990
|
+
params: { releaseId: values.releaseId }
|
|
991
|
+
});
|
|
992
|
+
if ("data" in response2) {
|
|
993
|
+
const notificationMessage = formatMessage(
|
|
994
|
+
{
|
|
995
|
+
id: "content-releases.content-manager-list-view.add-to-release.notification.success.message",
|
|
996
|
+
defaultMessage: "{entriesAlreadyInRelease} out of {totalEntries} entries were already in the release."
|
|
997
|
+
},
|
|
998
|
+
{
|
|
999
|
+
entriesAlreadyInRelease: response2.data.meta.entriesAlreadyInRelease,
|
|
1000
|
+
totalEntries: response2.data.meta.totalEntries
|
|
1001
|
+
}
|
|
1002
|
+
);
|
|
1003
|
+
const notification = {
|
|
1004
|
+
type: "success",
|
|
1005
|
+
title: formatMessage(
|
|
1006
|
+
{
|
|
1007
|
+
id: "content-releases.content-manager-list-view.add-to-release.notification.success.title",
|
|
1008
|
+
defaultMessage: "Successfully added to release."
|
|
1009
|
+
},
|
|
1010
|
+
{
|
|
1011
|
+
entriesAlreadyInRelease: response2.data.meta.entriesAlreadyInRelease,
|
|
1012
|
+
totalEntries: response2.data.meta.totalEntries
|
|
1013
|
+
}
|
|
1014
|
+
),
|
|
1015
|
+
message: response2.data.meta.entriesAlreadyInRelease ? notificationMessage : ""
|
|
1016
|
+
};
|
|
1017
|
+
toggleNotification(notification);
|
|
1018
|
+
return true;
|
|
1019
|
+
}
|
|
1020
|
+
if ("error" in response2) {
|
|
1021
|
+
if (isAxiosError$1(response2.error)) {
|
|
1022
|
+
toggleNotification({
|
|
1023
|
+
type: "warning",
|
|
1024
|
+
message: formatAPIError(response2.error)
|
|
1025
|
+
});
|
|
1026
|
+
} else {
|
|
1027
|
+
toggleNotification({
|
|
1028
|
+
type: "warning",
|
|
1029
|
+
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1030
|
+
});
|
|
1031
|
+
}
|
|
1032
|
+
}
|
|
1033
|
+
};
|
|
1034
|
+
if (!canCreate || !canPublish)
|
|
1035
|
+
return null;
|
|
1036
|
+
return {
|
|
1037
|
+
actionType: "release",
|
|
1038
|
+
variant: "tertiary",
|
|
1039
|
+
label: formatMessage({
|
|
1040
|
+
id: "content-manager-list-view.add-to-release",
|
|
1041
|
+
defaultMessage: "Add to Release"
|
|
1042
|
+
}),
|
|
1043
|
+
dialog: {
|
|
1044
|
+
type: "modal",
|
|
1045
|
+
title: formatMessage({
|
|
1046
|
+
id: "content-manager-list-view.add-to-release",
|
|
1047
|
+
defaultMessage: "Add to Release"
|
|
1048
|
+
}),
|
|
1049
|
+
content: ({ onClose }) => {
|
|
1050
|
+
return /* @__PURE__ */ jsx(
|
|
1051
|
+
Formik,
|
|
1052
|
+
{
|
|
1053
|
+
onSubmit: async (values) => {
|
|
1054
|
+
const data = await handleSubmit(values);
|
|
1055
|
+
if (data) {
|
|
1056
|
+
return onClose();
|
|
1057
|
+
}
|
|
1058
|
+
},
|
|
1059
|
+
validationSchema: RELEASE_ACTION_FORM_SCHEMA,
|
|
1060
|
+
initialValues: INITIAL_VALUES,
|
|
1061
|
+
children: ({ values, setFieldValue }) => /* @__PURE__ */ jsxs(Form, { children: [
|
|
1062
|
+
releases?.length === 0 ? /* @__PURE__ */ jsx(NoReleases, {}) : /* @__PURE__ */ jsx(ModalBody, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
|
|
1063
|
+
/* @__PURE__ */ jsx(Box, { paddingBottom: 6, children: /* @__PURE__ */ jsx(
|
|
1064
|
+
SingleSelect,
|
|
1065
|
+
{
|
|
1066
|
+
required: true,
|
|
1067
|
+
label: formatMessage({
|
|
1068
|
+
id: "content-releases.content-manager-list-view.add-to-release.select-label",
|
|
1069
|
+
defaultMessage: "Select a release"
|
|
1070
|
+
}),
|
|
1071
|
+
placeholder: formatMessage({
|
|
1072
|
+
id: "content-releases.content-manager-list-view.add-to-release.select-placeholder",
|
|
1073
|
+
defaultMessage: "Select"
|
|
1074
|
+
}),
|
|
1075
|
+
onChange: (value) => setFieldValue("releaseId", value),
|
|
1076
|
+
value: values.releaseId,
|
|
1077
|
+
children: releases?.map((release) => /* @__PURE__ */ jsx(SingleSelectOption, { value: release.id, children: release.name }, release.id))
|
|
1078
|
+
}
|
|
1079
|
+
) }),
|
|
1080
|
+
/* @__PURE__ */ jsx(FieldLabel, { children: formatMessage({
|
|
1081
|
+
id: "content-releases.content-manager-list-view.add-to-release.action-type-label",
|
|
1082
|
+
defaultMessage: "What do you want to do with these entries?"
|
|
1083
|
+
}) }),
|
|
1084
|
+
/* @__PURE__ */ jsx(
|
|
1085
|
+
ReleaseActionOptions,
|
|
1086
|
+
{
|
|
1087
|
+
selected: values.type,
|
|
1088
|
+
handleChange: (e) => setFieldValue("type", e.target.value),
|
|
1089
|
+
name: "type"
|
|
1090
|
+
}
|
|
1091
|
+
)
|
|
1092
|
+
] }) }),
|
|
1093
|
+
/* @__PURE__ */ jsx(
|
|
1094
|
+
ModalFooter,
|
|
1095
|
+
{
|
|
1096
|
+
startActions: /* @__PURE__ */ jsx(Button, { onClick: onClose, variant: "tertiary", name: "cancel", children: formatMessage({
|
|
1097
|
+
id: "content-releases.content-manager-list-view.add-to-release.cancel-button",
|
|
1098
|
+
defaultMessage: "Cancel"
|
|
1099
|
+
}) }),
|
|
1100
|
+
endActions: (
|
|
1101
|
+
/**
|
|
1102
|
+
* TODO: Ideally we would use isValid from Formik to disable the button, however currently it always returns true
|
|
1103
|
+
* for yup.string().required(), even when the value is falsy (including empty string)
|
|
1104
|
+
*/
|
|
1105
|
+
/* @__PURE__ */ jsx(Button, { type: "submit", disabled: !values.releaseId, loading: isLoading, children: formatMessage({
|
|
1106
|
+
id: "content-releases.content-manager-list-view.add-to-release.continue-button",
|
|
1107
|
+
defaultMessage: "Continue"
|
|
1108
|
+
}) })
|
|
1109
|
+
)
|
|
1110
|
+
}
|
|
1111
|
+
)
|
|
1112
|
+
] })
|
|
1113
|
+
}
|
|
1114
|
+
);
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
};
|
|
1118
|
+
};
|
|
843
1119
|
const admin = {
|
|
844
1120
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
845
1121
|
register(app) {
|
|
@@ -852,7 +1128,7 @@ const admin = {
|
|
|
852
1128
|
defaultMessage: "Releases"
|
|
853
1129
|
},
|
|
854
1130
|
async Component() {
|
|
855
|
-
const { App } = await import("./App-
|
|
1131
|
+
const { App } = await import("./App-x6Tjj3HN.mjs");
|
|
856
1132
|
return App;
|
|
857
1133
|
},
|
|
858
1134
|
permissions: PERMISSIONS.main
|
|
@@ -865,12 +1141,31 @@ const admin = {
|
|
|
865
1141
|
name: `${pluginId}-link`,
|
|
866
1142
|
Component: CMReleasesContainer
|
|
867
1143
|
});
|
|
1144
|
+
app.plugins["content-manager"].apis.addBulkAction((actions) => {
|
|
1145
|
+
const deleteActionIndex = actions.findIndex((action) => action.name === "DeleteAction");
|
|
1146
|
+
actions.splice(deleteActionIndex, 0, ReleaseAction);
|
|
1147
|
+
return actions;
|
|
1148
|
+
});
|
|
1149
|
+
} else if (!window.strapi.features.isEnabled("cms-content-releases") && window.strapi?.flags?.promoteEE) {
|
|
1150
|
+
app.addMenuLink({
|
|
1151
|
+
to: `/plugins/purchase-content-releases`,
|
|
1152
|
+
icon: PaperPlane,
|
|
1153
|
+
intlLabel: {
|
|
1154
|
+
id: `${pluginId}.plugin.name`,
|
|
1155
|
+
defaultMessage: "Releases"
|
|
1156
|
+
},
|
|
1157
|
+
async Component() {
|
|
1158
|
+
const { PurchaseContentReleases } = await import("./PurchaseContentReleases-3tRbmbY3.mjs");
|
|
1159
|
+
return PurchaseContentReleases;
|
|
1160
|
+
},
|
|
1161
|
+
lockIcon: true
|
|
1162
|
+
});
|
|
868
1163
|
}
|
|
869
1164
|
},
|
|
870
1165
|
async registerTrads({ locales }) {
|
|
871
1166
|
const importedTrads = await Promise.all(
|
|
872
1167
|
locales.map((locale) => {
|
|
873
|
-
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-
|
|
1168
|
+
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-bpHsnU0n.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
|
|
874
1169
|
return {
|
|
875
1170
|
data: prefixPluginTranslations(data, "content-releases"),
|
|
876
1171
|
locale
|
|
@@ -889,19 +1184,20 @@ const admin = {
|
|
|
889
1184
|
export {
|
|
890
1185
|
PERMISSIONS as P,
|
|
891
1186
|
ReleaseActionOptions as R,
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
1187
|
+
useCreateReleaseMutation as a,
|
|
1188
|
+
useGetReleaseQuery as b,
|
|
1189
|
+
useUpdateReleaseMutation as c,
|
|
1190
|
+
useDeleteReleaseMutation as d,
|
|
1191
|
+
usePublishReleaseMutation as e,
|
|
1192
|
+
useTypedDispatch as f,
|
|
1193
|
+
getTimezoneOffset as g,
|
|
1194
|
+
useGetReleaseActionsQuery as h,
|
|
900
1195
|
isAxiosError as i,
|
|
901
|
-
|
|
902
|
-
|
|
1196
|
+
useUpdateReleaseActionMutation as j,
|
|
1197
|
+
ReleaseActionMenu as k,
|
|
1198
|
+
admin as l,
|
|
903
1199
|
pluginId as p,
|
|
904
1200
|
releaseApi as r,
|
|
905
|
-
|
|
1201
|
+
useGetReleasesQuery as u
|
|
906
1202
|
};
|
|
907
|
-
//# sourceMappingURL=index-
|
|
1203
|
+
//# sourceMappingURL=index-1ejXLtzt.mjs.map
|