@strapi/content-releases 0.0.0-experimental.edc24aaa3bb5a90fa5fd4fee208167dd4e2e38d4 → 0.0.0-experimental.ee7402bacc4656d268ab76aa9c334a7b7a951201
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-UQxgTJY5.mjs → App-CiZCkScI.mjs} +314 -107
- package/dist/_chunks/App-CiZCkScI.mjs.map +1 -0
- package/dist/_chunks/{App-D-lWdVb2.js → App-SGjO5UPV.js} +354 -148
- package/dist/_chunks/App-SGjO5UPV.js.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-Be3acS2L.js → PurchaseContentReleases--qQepXpP.js} +2 -2
- package/dist/_chunks/PurchaseContentReleases--qQepXpP.js.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-_MxP6-Dt.mjs → PurchaseContentReleases-D-n-w-st.mjs} +2 -2
- package/dist/_chunks/{PurchaseContentReleases-_MxP6-Dt.mjs.map → PurchaseContentReleases-D-n-w-st.mjs.map} +1 -1
- package/dist/_chunks/{ReleasesSettingsPage-xfAoY8N3.js → ReleasesSettingsPage-Cto_NLUd.js} +4 -4
- package/dist/_chunks/ReleasesSettingsPage-Cto_NLUd.js.map +1 -0
- package/dist/_chunks/{ReleasesSettingsPage-CuUXvABk.mjs → ReleasesSettingsPage-DQT8N3A-.mjs} +4 -4
- package/dist/_chunks/ReleasesSettingsPage-DQT8N3A-.mjs.map +1 -0
- package/dist/_chunks/{en-BCDLTJn3.js → en-BWPPsSH-.js} +12 -2
- package/dist/_chunks/en-BWPPsSH-.js.map +1 -0
- package/dist/_chunks/{en-CGXIF4vQ.mjs → en-D9Q4YW03.mjs} +12 -2
- package/dist/_chunks/en-D9Q4YW03.mjs.map +1 -0
- package/dist/_chunks/{index-b3Ej95H7.mjs → index-BjvFfTtA.mjs} +316 -29
- package/dist/_chunks/index-BjvFfTtA.mjs.map +1 -0
- package/dist/_chunks/{index-jnv9zdcE.js → index-CyU534vL.js} +314 -28
- package/dist/_chunks/index-CyU534vL.js.map +1 -0
- package/dist/_chunks/{schemas-z5zp-_Gd.js → schemas-DBYv9gK8.js} +3 -4
- package/dist/_chunks/schemas-DBYv9gK8.js.map +1 -0
- package/dist/_chunks/{schemas-63pFihNF.mjs → schemas-DdA2ic2U.mjs} +2 -2
- package/dist/_chunks/schemas-DdA2ic2U.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/components/EntryValidationPopover.d.ts +13 -0
- package/dist/admin/src/components/ReleaseListCell.d.ts +28 -0
- package/dist/admin/src/services/release.d.ts +34 -32
- package/dist/server/index.js +192 -90
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +191 -88
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/controllers/index.d.ts +2 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/release-action.d.ts +1 -0
- package/dist/server/src/controllers/release-action.d.ts.map +1 -1
- package/dist/server/src/controllers/release.d.ts +1 -0
- package/dist/server/src/controllers/release.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +6 -6
- package/dist/server/src/middlewares/documents.d.ts.map +1 -1
- package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts.map +1 -1
- package/dist/server/src/routes/release-action.d.ts.map +1 -1
- package/dist/server/src/routes/release.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +4 -6
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/release-action.d.ts +6 -8
- package/dist/server/src/services/release-action.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/shared/contracts/release-actions.d.ts +11 -6
- package/dist/shared/contracts/release-actions.d.ts.map +1 -1
- package/dist/shared/contracts/releases.d.ts +3 -2
- package/dist/shared/contracts/releases.d.ts.map +1 -1
- package/package.json +18 -16
- package/dist/_chunks/App-D-lWdVb2.js.map +0 -1
- package/dist/_chunks/App-UQxgTJY5.mjs.map +0 -1
- package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js.map +0 -1
- package/dist/_chunks/ReleasesSettingsPage-CuUXvABk.mjs.map +0 -1
- package/dist/_chunks/ReleasesSettingsPage-xfAoY8N3.js.map +0 -1
- package/dist/_chunks/en-BCDLTJn3.js.map +0 -1
- package/dist/_chunks/en-CGXIF4vQ.mjs.map +0 -1
- package/dist/_chunks/index-b3Ej95H7.mjs.map +0 -1
- package/dist/_chunks/index-jnv9zdcE.js.map +0 -1
- package/dist/_chunks/schemas-63pFihNF.mjs.map +0 -1
- package/dist/_chunks/schemas-z5zp-_Gd.js.map +0 -1
- package/strapi-server.js +0 -3
|
@@ -1,22 +1,29 @@
|
|
|
1
|
-
import { PaperPlane, Cross, Pencil, More } from "@strapi/icons";
|
|
1
|
+
import { PaperPlane, CaretDown, Cross, Pencil, More } from "@strapi/icons";
|
|
2
2
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
3
|
-
import { adminApi, useRBAC, useNotification, useAPIErrorHandler, useQueryParams, isFetchError, useAuth } from "@strapi/admin/strapi-admin";
|
|
3
|
+
import { adminApi, useRBAC, useNotification, useAPIErrorHandler, useQueryParams, isFetchError, useTable, useAuth } from "@strapi/admin/strapi-admin";
|
|
4
|
+
import { Field, Flex, VisuallyHidden, Modal, Button, EmptyStateLayout, LinkButton, Box, SingleSelect, SingleSelectOption, Popover, Typography, Link as Link$1, Menu, AccessibleIcon } from "@strapi/design-system";
|
|
5
|
+
import { useFormik, Formik, Form } from "formik";
|
|
6
|
+
import { useIntl } from "react-intl";
|
|
4
7
|
import { unstable_useDocumentLayout } from "@strapi/content-manager/strapi-admin";
|
|
5
|
-
import { Field, Flex, VisuallyHidden, Modal, Button, Box, SingleSelect, SingleSelectOption, EmptyStateLayout, LinkButton, Menu, Typography, AccessibleIcon } from "@strapi/design-system";
|
|
6
8
|
import { EmptyDocuments } from "@strapi/icons/symbols";
|
|
7
|
-
import { useFormik } from "formik";
|
|
8
|
-
import { useIntl } from "react-intl";
|
|
9
9
|
import { Link, NavLink } from "react-router-dom";
|
|
10
10
|
import * as yup from "yup";
|
|
11
11
|
import { styled } from "styled-components";
|
|
12
12
|
import * as React from "react";
|
|
13
|
-
const __variableDynamicImportRuntimeHelper = (glob, path) => {
|
|
13
|
+
const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
|
|
14
14
|
const v = glob[path];
|
|
15
15
|
if (v) {
|
|
16
16
|
return typeof v === "function" ? v() : Promise.resolve(v);
|
|
17
17
|
}
|
|
18
18
|
return new Promise((_, reject) => {
|
|
19
|
-
(typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
|
|
19
|
+
(typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
|
|
20
|
+
reject.bind(
|
|
21
|
+
null,
|
|
22
|
+
new Error(
|
|
23
|
+
"Unknown variable dynamic import: " + path + (path.split("/").length !== segs ? ". Note that variables only represent file names one level deep." : "")
|
|
24
|
+
)
|
|
25
|
+
)
|
|
26
|
+
);
|
|
20
27
|
});
|
|
21
28
|
};
|
|
22
29
|
const PERMISSIONS = {
|
|
@@ -103,7 +110,7 @@ const extendInvalidatesTags = (endpoint, extraTags) => {
|
|
|
103
110
|
Object.assign(endpoint, { invalidatesTags: newInvalidatesTags });
|
|
104
111
|
};
|
|
105
112
|
const releaseApi = adminApi.enhanceEndpoints({
|
|
106
|
-
addTagTypes: ["Release", "ReleaseAction", "EntriesInRelease", "ReleaseSettings"],
|
|
113
|
+
addTagTypes: ["Release", "ReleaseAction", "EntriesInRelease", "ReleaseSettings", "Document"],
|
|
107
114
|
endpoints: {
|
|
108
115
|
updateDocument(endpoint) {
|
|
109
116
|
extendInvalidatesTags(endpoint, [
|
|
@@ -128,6 +135,24 @@ const releaseApi = adminApi.enhanceEndpoints({
|
|
|
128
135
|
{ type: "Release", id: "LIST" },
|
|
129
136
|
{ type: "ReleaseAction", id: "LIST" }
|
|
130
137
|
]);
|
|
138
|
+
},
|
|
139
|
+
createWorkflow(endpoint) {
|
|
140
|
+
extendInvalidatesTags(endpoint, [
|
|
141
|
+
{ type: "Release", id: "LIST" },
|
|
142
|
+
{ type: "ReleaseAction", id: "LIST" }
|
|
143
|
+
]);
|
|
144
|
+
},
|
|
145
|
+
updateWorkflow(endpoint) {
|
|
146
|
+
extendInvalidatesTags(endpoint, [
|
|
147
|
+
{ type: "Release", id: "LIST" },
|
|
148
|
+
{ type: "ReleaseAction", id: "LIST" }
|
|
149
|
+
]);
|
|
150
|
+
},
|
|
151
|
+
deleteWorkflow(endpoint) {
|
|
152
|
+
extendInvalidatesTags(endpoint, [
|
|
153
|
+
{ type: "Release", id: "LIST" },
|
|
154
|
+
{ type: "ReleaseAction", id: "LIST" }
|
|
155
|
+
]);
|
|
131
156
|
}
|
|
132
157
|
}
|
|
133
158
|
}).injectEndpoints({
|
|
@@ -198,7 +223,10 @@ const releaseApi = adminApi.enhanceEndpoints({
|
|
|
198
223
|
method: "GET"
|
|
199
224
|
};
|
|
200
225
|
},
|
|
201
|
-
providesTags: (result, error, arg) => [
|
|
226
|
+
providesTags: (result, error, arg) => [
|
|
227
|
+
{ type: "Release", id: "LIST" },
|
|
228
|
+
{ type: "Release", id: arg.id }
|
|
229
|
+
]
|
|
202
230
|
}),
|
|
203
231
|
getReleaseActions: build.query({
|
|
204
232
|
query({ releaseId, ...params }) {
|
|
@@ -267,7 +295,11 @@ const releaseApi = adminApi.enhanceEndpoints({
|
|
|
267
295
|
data: body
|
|
268
296
|
};
|
|
269
297
|
},
|
|
270
|
-
invalidatesTags: () => [
|
|
298
|
+
invalidatesTags: (res, error, arg) => [
|
|
299
|
+
{ type: "ReleaseAction", id: "LIST" },
|
|
300
|
+
{ type: "Release", id: "LIST" },
|
|
301
|
+
{ type: "Release", id: arg.params.releaseId }
|
|
302
|
+
],
|
|
271
303
|
async onQueryStarted({ body, params, query, actionPath }, { dispatch, queryFulfilled }) {
|
|
272
304
|
const paramsWithoutActionId = {
|
|
273
305
|
releaseId: params.releaseId,
|
|
@@ -314,7 +346,10 @@ const releaseApi = adminApi.enhanceEndpoints({
|
|
|
314
346
|
method: "POST"
|
|
315
347
|
};
|
|
316
348
|
},
|
|
317
|
-
invalidatesTags: (result, error, arg) => [
|
|
349
|
+
invalidatesTags: (result, error, arg) => [
|
|
350
|
+
{ type: "Release", id: arg.id },
|
|
351
|
+
{ type: "Document", id: `ALL_LIST` }
|
|
352
|
+
]
|
|
318
353
|
}),
|
|
319
354
|
deleteRelease: build.mutation({
|
|
320
355
|
query({ id }) {
|
|
@@ -352,7 +387,7 @@ const releaseApi = adminApi.enhanceEndpoints({
|
|
|
352
387
|
data
|
|
353
388
|
};
|
|
354
389
|
},
|
|
355
|
-
invalidatesTags:
|
|
390
|
+
invalidatesTags: [{ type: "ReleaseSettings" }]
|
|
356
391
|
})
|
|
357
392
|
};
|
|
358
393
|
}
|
|
@@ -577,6 +612,7 @@ const AddActionToReleaseModal = ({
|
|
|
577
612
|
};
|
|
578
613
|
const ReleaseActionModalForm = ({
|
|
579
614
|
documentId,
|
|
615
|
+
document,
|
|
580
616
|
model,
|
|
581
617
|
collectionType
|
|
582
618
|
}) => {
|
|
@@ -655,6 +691,8 @@ const ReleaseActionModalForm = ({
|
|
|
655
691
|
defaultMessage: "Add to release"
|
|
656
692
|
}),
|
|
657
693
|
icon: /* @__PURE__ */ jsx(PaperPlane, {}),
|
|
694
|
+
// Entry is creating so we don't want to allow adding it to a release
|
|
695
|
+
disabled: !document,
|
|
658
696
|
position: ["panel", "table-row"],
|
|
659
697
|
dialog: {
|
|
660
698
|
type: "modal",
|
|
@@ -693,6 +731,235 @@ const ReleaseActionModalForm = ({
|
|
|
693
731
|
}
|
|
694
732
|
};
|
|
695
733
|
};
|
|
734
|
+
const getContentPermissions = (subject) => {
|
|
735
|
+
const permissions = {
|
|
736
|
+
publish: [
|
|
737
|
+
{
|
|
738
|
+
action: "plugin::content-manager.explorer.publish",
|
|
739
|
+
subject,
|
|
740
|
+
id: "",
|
|
741
|
+
actionParameters: {},
|
|
742
|
+
properties: {},
|
|
743
|
+
conditions: []
|
|
744
|
+
}
|
|
745
|
+
]
|
|
746
|
+
};
|
|
747
|
+
return permissions;
|
|
748
|
+
};
|
|
749
|
+
const ReleaseAction = ({ documents, model }) => {
|
|
750
|
+
const { formatMessage } = useIntl();
|
|
751
|
+
const { toggleNotification } = useNotification();
|
|
752
|
+
const { formatAPIError } = useAPIErrorHandler();
|
|
753
|
+
const [{ query }] = useQueryParams();
|
|
754
|
+
const contentPermissions = getContentPermissions(model);
|
|
755
|
+
const {
|
|
756
|
+
allowedActions: { canPublish }
|
|
757
|
+
} = useRBAC(contentPermissions);
|
|
758
|
+
const {
|
|
759
|
+
allowedActions: { canCreate }
|
|
760
|
+
} = useRBAC(PERMISSIONS);
|
|
761
|
+
const response = useGetReleasesQuery();
|
|
762
|
+
const releases = response.data?.data;
|
|
763
|
+
const [createManyReleaseActions, { isLoading }] = useCreateManyReleaseActionsMutation();
|
|
764
|
+
const documentIds = documents.map((doc) => doc.documentId);
|
|
765
|
+
const handleSubmit = async (values) => {
|
|
766
|
+
const locale = query.plugins?.i18n?.locale;
|
|
767
|
+
const releaseActionEntries = documentIds.map(
|
|
768
|
+
(entryDocumentId) => ({
|
|
769
|
+
type: values.type,
|
|
770
|
+
contentType: model,
|
|
771
|
+
entryDocumentId,
|
|
772
|
+
locale
|
|
773
|
+
})
|
|
774
|
+
);
|
|
775
|
+
const response2 = await createManyReleaseActions({
|
|
776
|
+
body: releaseActionEntries,
|
|
777
|
+
params: { releaseId: values.releaseId }
|
|
778
|
+
});
|
|
779
|
+
if ("data" in response2) {
|
|
780
|
+
const notificationMessage = formatMessage(
|
|
781
|
+
{
|
|
782
|
+
id: "content-releases.content-manager-list-view.add-to-release.notification.success.message",
|
|
783
|
+
defaultMessage: "{entriesAlreadyInRelease} out of {totalEntries} entries were already in the release."
|
|
784
|
+
},
|
|
785
|
+
{
|
|
786
|
+
entriesAlreadyInRelease: response2.data.meta.entriesAlreadyInRelease,
|
|
787
|
+
totalEntries: response2.data.meta.totalEntries
|
|
788
|
+
}
|
|
789
|
+
);
|
|
790
|
+
const notification = {
|
|
791
|
+
type: "success",
|
|
792
|
+
title: formatMessage(
|
|
793
|
+
{
|
|
794
|
+
id: "content-releases.content-manager-list-view.add-to-release.notification.success.title",
|
|
795
|
+
defaultMessage: "Successfully added to release."
|
|
796
|
+
},
|
|
797
|
+
{
|
|
798
|
+
entriesAlreadyInRelease: response2.data.meta.entriesAlreadyInRelease,
|
|
799
|
+
totalEntries: response2.data.meta.totalEntries
|
|
800
|
+
}
|
|
801
|
+
),
|
|
802
|
+
message: response2.data.meta.entriesAlreadyInRelease ? notificationMessage : ""
|
|
803
|
+
};
|
|
804
|
+
toggleNotification(notification);
|
|
805
|
+
return true;
|
|
806
|
+
}
|
|
807
|
+
if ("error" in response2) {
|
|
808
|
+
if (isFetchError(response2.error)) {
|
|
809
|
+
toggleNotification({
|
|
810
|
+
type: "warning",
|
|
811
|
+
message: formatAPIError(response2.error)
|
|
812
|
+
});
|
|
813
|
+
} else {
|
|
814
|
+
toggleNotification({
|
|
815
|
+
type: "warning",
|
|
816
|
+
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
817
|
+
});
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
};
|
|
821
|
+
if (!canCreate || !canPublish) return null;
|
|
822
|
+
return {
|
|
823
|
+
actionType: "release",
|
|
824
|
+
variant: "tertiary",
|
|
825
|
+
label: formatMessage({
|
|
826
|
+
id: "content-manager-list-view.add-to-release",
|
|
827
|
+
defaultMessage: "Add to Release"
|
|
828
|
+
}),
|
|
829
|
+
dialog: {
|
|
830
|
+
type: "modal",
|
|
831
|
+
title: formatMessage({
|
|
832
|
+
id: "content-manager-list-view.add-to-release",
|
|
833
|
+
defaultMessage: "Add to Release"
|
|
834
|
+
}),
|
|
835
|
+
content: ({ onClose }) => {
|
|
836
|
+
return /* @__PURE__ */ jsx(
|
|
837
|
+
Formik,
|
|
838
|
+
{
|
|
839
|
+
onSubmit: async (values) => {
|
|
840
|
+
const data = await handleSubmit(values);
|
|
841
|
+
if (data) {
|
|
842
|
+
return onClose();
|
|
843
|
+
}
|
|
844
|
+
},
|
|
845
|
+
validationSchema: RELEASE_ACTION_FORM_SCHEMA,
|
|
846
|
+
initialValues: INITIAL_VALUES,
|
|
847
|
+
children: ({ values, setFieldValue }) => /* @__PURE__ */ jsxs(Form, { children: [
|
|
848
|
+
releases?.length === 0 ? /* @__PURE__ */ jsx(NoReleases, {}) : /* @__PURE__ */ jsx(Modal.Body, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
|
|
849
|
+
/* @__PURE__ */ jsx(Box, { paddingBottom: 6, children: /* @__PURE__ */ jsxs(Field.Root, { required: true, children: [
|
|
850
|
+
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
|
|
851
|
+
id: "content-releases.content-manager-list-view.add-to-release.select-label",
|
|
852
|
+
defaultMessage: "Select a release"
|
|
853
|
+
}) }),
|
|
854
|
+
/* @__PURE__ */ jsx(
|
|
855
|
+
SingleSelect,
|
|
856
|
+
{
|
|
857
|
+
placeholder: formatMessage({
|
|
858
|
+
id: "content-releases.content-manager-list-view.add-to-release.select-placeholder",
|
|
859
|
+
defaultMessage: "Select"
|
|
860
|
+
}),
|
|
861
|
+
onChange: (value) => setFieldValue("releaseId", value),
|
|
862
|
+
value: values.releaseId,
|
|
863
|
+
children: releases?.map((release) => /* @__PURE__ */ jsx(SingleSelectOption, { value: release.id, children: release.name }, release.id))
|
|
864
|
+
}
|
|
865
|
+
)
|
|
866
|
+
] }) }),
|
|
867
|
+
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
|
|
868
|
+
id: "content-releases.content-manager-list-view.add-to-release.action-type-label",
|
|
869
|
+
defaultMessage: "What do you want to do with these entries?"
|
|
870
|
+
}) }),
|
|
871
|
+
/* @__PURE__ */ jsx(
|
|
872
|
+
ReleaseActionOptions,
|
|
873
|
+
{
|
|
874
|
+
selected: values.type,
|
|
875
|
+
handleChange: (e) => setFieldValue("type", e.target.value),
|
|
876
|
+
name: "type"
|
|
877
|
+
}
|
|
878
|
+
)
|
|
879
|
+
] }) }),
|
|
880
|
+
/* @__PURE__ */ jsxs(Modal.Footer, { children: [
|
|
881
|
+
/* @__PURE__ */ jsx(Button, { onClick: onClose, variant: "tertiary", name: "cancel", children: formatMessage({
|
|
882
|
+
id: "content-releases.content-manager-list-view.add-to-release.cancel-button",
|
|
883
|
+
defaultMessage: "Cancel"
|
|
884
|
+
}) }),
|
|
885
|
+
/* @__PURE__ */ jsx(Button, { type: "submit", disabled: !values.releaseId, loading: isLoading, children: formatMessage({
|
|
886
|
+
id: "content-releases.content-manager-list-view.add-to-release.continue-button",
|
|
887
|
+
defaultMessage: "Continue"
|
|
888
|
+
}) })
|
|
889
|
+
] })
|
|
890
|
+
] })
|
|
891
|
+
}
|
|
892
|
+
);
|
|
893
|
+
}
|
|
894
|
+
}
|
|
895
|
+
};
|
|
896
|
+
};
|
|
897
|
+
const useReleasesList = (contentTypeUid, documentId) => {
|
|
898
|
+
const listViewData = useTable("ListView", (state) => state.rows);
|
|
899
|
+
const documentIds = listViewData.map((entry) => entry.documentId);
|
|
900
|
+
const [{ query }] = useQueryParams();
|
|
901
|
+
const locale = query?.plugins?.i18n?.locale || void 0;
|
|
902
|
+
const response = useGetMappedEntriesInReleasesQuery(
|
|
903
|
+
{ contentTypeUid, documentIds, locale },
|
|
904
|
+
{ skip: !documentIds || !contentTypeUid || documentIds.length === 0 }
|
|
905
|
+
);
|
|
906
|
+
const mappedEntriesInReleases = response.data || {};
|
|
907
|
+
return mappedEntriesInReleases?.[documentId] || [];
|
|
908
|
+
};
|
|
909
|
+
const addColumnToTableHook = ({ displayedHeaders, layout }) => {
|
|
910
|
+
const { options } = layout;
|
|
911
|
+
if (!options?.draftAndPublish) {
|
|
912
|
+
return { displayedHeaders, layout };
|
|
913
|
+
}
|
|
914
|
+
return {
|
|
915
|
+
displayedHeaders: [
|
|
916
|
+
...displayedHeaders,
|
|
917
|
+
{
|
|
918
|
+
searchable: false,
|
|
919
|
+
sortable: false,
|
|
920
|
+
name: "releases",
|
|
921
|
+
label: {
|
|
922
|
+
id: "content-releases.content-manager.list-view.releases.header",
|
|
923
|
+
defaultMessage: "To be released in"
|
|
924
|
+
},
|
|
925
|
+
cellFormatter: (props, _, { model }) => /* @__PURE__ */ jsx(ReleaseListCell, { ...props, model })
|
|
926
|
+
}
|
|
927
|
+
],
|
|
928
|
+
layout
|
|
929
|
+
};
|
|
930
|
+
};
|
|
931
|
+
const ReleaseListCell = ({ documentId, model }) => {
|
|
932
|
+
const releases = useReleasesList(model, documentId);
|
|
933
|
+
const { formatMessage } = useIntl();
|
|
934
|
+
return /* @__PURE__ */ jsxs(Popover.Root, { children: [
|
|
935
|
+
/* @__PURE__ */ jsx(Popover.Trigger, { children: /* @__PURE__ */ jsx(
|
|
936
|
+
Button,
|
|
937
|
+
{
|
|
938
|
+
variant: "ghost",
|
|
939
|
+
onClick: (e) => e.stopPropagation(),
|
|
940
|
+
endIcon: releases.length > 0 ? /* @__PURE__ */ jsx(CaretDown, { width: "1.2rem", height: "1.2rem" }) : null,
|
|
941
|
+
children: /* @__PURE__ */ jsx(
|
|
942
|
+
Typography,
|
|
943
|
+
{
|
|
944
|
+
style: { maxWidth: "252px", cursor: "pointer" },
|
|
945
|
+
textColor: "neutral800",
|
|
946
|
+
fontWeight: "regular",
|
|
947
|
+
children: releases.length > 0 ? formatMessage(
|
|
948
|
+
{
|
|
949
|
+
id: "content-releases.content-manager.list-view.releases-number",
|
|
950
|
+
defaultMessage: "{number} {number, plural, one {release} other {releases}}"
|
|
951
|
+
},
|
|
952
|
+
{
|
|
953
|
+
number: releases.length
|
|
954
|
+
}
|
|
955
|
+
) : "-"
|
|
956
|
+
}
|
|
957
|
+
)
|
|
958
|
+
}
|
|
959
|
+
) }),
|
|
960
|
+
/* @__PURE__ */ jsx(Popover.Content, { children: /* @__PURE__ */ jsx("ul", { children: releases.map(({ id, name }) => /* @__PURE__ */ jsx(Box, { padding: 3, tag: "li", children: /* @__PURE__ */ jsx(Link$1, { href: `/admin/plugins/content-releases/${id}`, isExternal: false, children: name }) }, id)) }) })
|
|
961
|
+
] });
|
|
962
|
+
};
|
|
696
963
|
const getTimezoneOffset = (timezone, date) => {
|
|
697
964
|
try {
|
|
698
965
|
const offsetPart = new Intl.DateTimeFormat("en", {
|
|
@@ -859,7 +1126,7 @@ const Root = ({ children }) => {
|
|
|
859
1126
|
return (
|
|
860
1127
|
// A user can access the dropdown if they have permissions to delete a release-action OR update a release
|
|
861
1128
|
allowedActions.canDeleteAction || allowedActions.canUpdate ? /* @__PURE__ */ jsxs(Menu.Root, { children: [
|
|
862
|
-
/* @__PURE__ */ jsx(
|
|
1129
|
+
/* @__PURE__ */ jsx(StyledMoreButton, { variant: "tertiary", endIcon: null, paddingLeft: "7px", paddingRight: "7px", children: /* @__PURE__ */ jsx(
|
|
863
1130
|
AccessibleIcon,
|
|
864
1131
|
{
|
|
865
1132
|
label: formatMessage({
|
|
@@ -873,13 +1140,23 @@ const Root = ({ children }) => {
|
|
|
873
1140
|
] }) : null
|
|
874
1141
|
);
|
|
875
1142
|
};
|
|
1143
|
+
const StyledMoreButton = styled(Menu.Trigger)`
|
|
1144
|
+
& > span {
|
|
1145
|
+
display: flex;
|
|
1146
|
+
}
|
|
1147
|
+
`;
|
|
876
1148
|
const ReleaseActionMenu = {
|
|
877
1149
|
Root,
|
|
878
1150
|
EditReleaseItem,
|
|
879
1151
|
DeleteReleaseActionItem,
|
|
880
1152
|
ReleaseActionEntryLinkItem
|
|
881
1153
|
};
|
|
882
|
-
const Panel = ({
|
|
1154
|
+
const Panel = ({
|
|
1155
|
+
model,
|
|
1156
|
+
document,
|
|
1157
|
+
documentId,
|
|
1158
|
+
collectionType
|
|
1159
|
+
}) => {
|
|
883
1160
|
const [{ query }] = useQueryParams();
|
|
884
1161
|
const locale = query.plugins?.i18n?.locale;
|
|
885
1162
|
const {
|
|
@@ -888,12 +1165,17 @@ const Panel = ({ model, documentId, collectionType }) => {
|
|
|
888
1165
|
const { formatMessage, formatDate, formatTime } = useIntl();
|
|
889
1166
|
const { allowedActions } = useRBAC(PERMISSIONS);
|
|
890
1167
|
const { canRead, canDeleteAction } = allowedActions;
|
|
891
|
-
const response = useGetReleasesForEntryQuery(
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
1168
|
+
const response = useGetReleasesForEntryQuery(
|
|
1169
|
+
{
|
|
1170
|
+
contentType: model,
|
|
1171
|
+
entryDocumentId: documentId,
|
|
1172
|
+
locale,
|
|
1173
|
+
hasEntryAttached: true
|
|
1174
|
+
},
|
|
1175
|
+
{
|
|
1176
|
+
skip: !document
|
|
1177
|
+
}
|
|
1178
|
+
);
|
|
897
1179
|
const releases = response.data?.data;
|
|
898
1180
|
const getReleaseColorVariant = (actionType, shade) => {
|
|
899
1181
|
if (actionType === "unpublish") {
|
|
@@ -907,7 +1189,7 @@ const Panel = ({ model, documentId, collectionType }) => {
|
|
|
907
1189
|
if (collectionType === "collection-types" && (!documentId || documentId === "create")) {
|
|
908
1190
|
return null;
|
|
909
1191
|
}
|
|
910
|
-
if (releases
|
|
1192
|
+
if (!releases || releases.length === 0) {
|
|
911
1193
|
return null;
|
|
912
1194
|
}
|
|
913
1195
|
return {
|
|
@@ -992,9 +1274,6 @@ const Panel = ({ model, documentId, collectionType }) => {
|
|
|
992
1274
|
};
|
|
993
1275
|
const pluginId = "content-releases";
|
|
994
1276
|
const prefixPluginTranslations = (trad, pluginId2) => {
|
|
995
|
-
if (!pluginId2) {
|
|
996
|
-
throw new TypeError("pluginId can't be empty");
|
|
997
|
-
}
|
|
998
1277
|
return Object.keys(trad).reduce((acc, current) => {
|
|
999
1278
|
acc[`${pluginId2}.${current}`] = trad[current];
|
|
1000
1279
|
return acc;
|
|
@@ -1012,7 +1291,7 @@ const admin = {
|
|
|
1012
1291
|
id: `${pluginId}.plugin.name`,
|
|
1013
1292
|
defaultMessage: "Releases"
|
|
1014
1293
|
},
|
|
1015
|
-
Component: () => import("./App-
|
|
1294
|
+
Component: () => import("./App-CiZCkScI.mjs").then((mod) => ({ default: mod.App })),
|
|
1016
1295
|
permissions: PERMISSIONS.main,
|
|
1017
1296
|
position: 2
|
|
1018
1297
|
});
|
|
@@ -1036,10 +1315,18 @@ const admin = {
|
|
|
1036
1315
|
},
|
|
1037
1316
|
permissions: [],
|
|
1038
1317
|
async Component() {
|
|
1039
|
-
const { ProtectedReleasesSettingsPage } = await import("./ReleasesSettingsPage-
|
|
1318
|
+
const { ProtectedReleasesSettingsPage } = await import("./ReleasesSettingsPage-DQT8N3A-.mjs");
|
|
1040
1319
|
return { default: ProtectedReleasesSettingsPage };
|
|
1041
1320
|
}
|
|
1042
1321
|
});
|
|
1322
|
+
if ("addBulkAction" in contentManagerPluginApis && typeof contentManagerPluginApis.addBulkAction === "function") {
|
|
1323
|
+
contentManagerPluginApis.addBulkAction((actions) => {
|
|
1324
|
+
const deleteActionIndex = actions.findIndex((action) => action.type === "delete");
|
|
1325
|
+
actions.splice(deleteActionIndex, 0, ReleaseAction);
|
|
1326
|
+
return actions;
|
|
1327
|
+
});
|
|
1328
|
+
}
|
|
1329
|
+
app.registerHook("Admin/CM/pages/ListView/inject-column-in-table", addColumnToTableHook);
|
|
1043
1330
|
} else if (!window.strapi.features.isEnabled("cms-content-releases") && window.strapi?.flags?.promoteEE) {
|
|
1044
1331
|
app.addSettingsLink("global", {
|
|
1045
1332
|
id: pluginId,
|
|
@@ -1050,7 +1337,7 @@ const admin = {
|
|
|
1050
1337
|
},
|
|
1051
1338
|
permissions: [],
|
|
1052
1339
|
async Component() {
|
|
1053
|
-
const { PurchaseContentReleases } = await import("./PurchaseContentReleases-
|
|
1340
|
+
const { PurchaseContentReleases } = await import("./PurchaseContentReleases-D-n-w-st.mjs");
|
|
1054
1341
|
return { default: PurchaseContentReleases };
|
|
1055
1342
|
},
|
|
1056
1343
|
licenseOnly: true
|
|
@@ -1060,7 +1347,7 @@ const admin = {
|
|
|
1060
1347
|
async registerTrads({ locales }) {
|
|
1061
1348
|
const importedTrads = await Promise.all(
|
|
1062
1349
|
locales.map((locale) => {
|
|
1063
|
-
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-
|
|
1350
|
+
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-D9Q4YW03.mjs") }), `./translations/${locale}.json`, 3).then(({ default: data }) => {
|
|
1064
1351
|
return {
|
|
1065
1352
|
data: prefixPluginTranslations(data, "content-releases"),
|
|
1066
1353
|
locale
|
|
@@ -1096,4 +1383,4 @@ export {
|
|
|
1096
1383
|
releaseApi as r,
|
|
1097
1384
|
useGetReleasesQuery as u
|
|
1098
1385
|
};
|
|
1099
|
-
//# sourceMappingURL=index-
|
|
1386
|
+
//# sourceMappingURL=index-BjvFfTtA.mjs.map
|