@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.
Files changed (66) hide show
  1. package/dist/_chunks/{App-UQxgTJY5.mjs → App-CiZCkScI.mjs} +314 -107
  2. package/dist/_chunks/App-CiZCkScI.mjs.map +1 -0
  3. package/dist/_chunks/{App-D-lWdVb2.js → App-SGjO5UPV.js} +354 -148
  4. package/dist/_chunks/App-SGjO5UPV.js.map +1 -0
  5. package/dist/_chunks/{PurchaseContentReleases-Be3acS2L.js → PurchaseContentReleases--qQepXpP.js} +2 -2
  6. package/dist/_chunks/PurchaseContentReleases--qQepXpP.js.map +1 -0
  7. package/dist/_chunks/{PurchaseContentReleases-_MxP6-Dt.mjs → PurchaseContentReleases-D-n-w-st.mjs} +2 -2
  8. package/dist/_chunks/{PurchaseContentReleases-_MxP6-Dt.mjs.map → PurchaseContentReleases-D-n-w-st.mjs.map} +1 -1
  9. package/dist/_chunks/{ReleasesSettingsPage-xfAoY8N3.js → ReleasesSettingsPage-Cto_NLUd.js} +4 -4
  10. package/dist/_chunks/ReleasesSettingsPage-Cto_NLUd.js.map +1 -0
  11. package/dist/_chunks/{ReleasesSettingsPage-CuUXvABk.mjs → ReleasesSettingsPage-DQT8N3A-.mjs} +4 -4
  12. package/dist/_chunks/ReleasesSettingsPage-DQT8N3A-.mjs.map +1 -0
  13. package/dist/_chunks/{en-BCDLTJn3.js → en-BWPPsSH-.js} +12 -2
  14. package/dist/_chunks/en-BWPPsSH-.js.map +1 -0
  15. package/dist/_chunks/{en-CGXIF4vQ.mjs → en-D9Q4YW03.mjs} +12 -2
  16. package/dist/_chunks/en-D9Q4YW03.mjs.map +1 -0
  17. package/dist/_chunks/{index-b3Ej95H7.mjs → index-BjvFfTtA.mjs} +316 -29
  18. package/dist/_chunks/index-BjvFfTtA.mjs.map +1 -0
  19. package/dist/_chunks/{index-jnv9zdcE.js → index-CyU534vL.js} +314 -28
  20. package/dist/_chunks/index-CyU534vL.js.map +1 -0
  21. package/dist/_chunks/{schemas-z5zp-_Gd.js → schemas-DBYv9gK8.js} +3 -4
  22. package/dist/_chunks/schemas-DBYv9gK8.js.map +1 -0
  23. package/dist/_chunks/{schemas-63pFihNF.mjs → schemas-DdA2ic2U.mjs} +2 -2
  24. package/dist/_chunks/schemas-DdA2ic2U.mjs.map +1 -0
  25. package/dist/admin/index.js +1 -1
  26. package/dist/admin/index.mjs +1 -1
  27. package/dist/admin/src/components/EntryValidationPopover.d.ts +13 -0
  28. package/dist/admin/src/components/ReleaseListCell.d.ts +28 -0
  29. package/dist/admin/src/services/release.d.ts +34 -32
  30. package/dist/server/index.js +192 -90
  31. package/dist/server/index.js.map +1 -1
  32. package/dist/server/index.mjs +191 -88
  33. package/dist/server/index.mjs.map +1 -1
  34. package/dist/server/src/controllers/index.d.ts +2 -0
  35. package/dist/server/src/controllers/index.d.ts.map +1 -1
  36. package/dist/server/src/controllers/release-action.d.ts +1 -0
  37. package/dist/server/src/controllers/release-action.d.ts.map +1 -1
  38. package/dist/server/src/controllers/release.d.ts +1 -0
  39. package/dist/server/src/controllers/release.d.ts.map +1 -1
  40. package/dist/server/src/index.d.ts +6 -6
  41. package/dist/server/src/middlewares/documents.d.ts.map +1 -1
  42. package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts.map +1 -1
  43. package/dist/server/src/routes/release-action.d.ts.map +1 -1
  44. package/dist/server/src/routes/release.d.ts.map +1 -1
  45. package/dist/server/src/services/index.d.ts +4 -6
  46. package/dist/server/src/services/index.d.ts.map +1 -1
  47. package/dist/server/src/services/release-action.d.ts +6 -8
  48. package/dist/server/src/services/release-action.d.ts.map +1 -1
  49. package/dist/server/src/utils/index.d.ts.map +1 -1
  50. package/dist/shared/contracts/release-actions.d.ts +11 -6
  51. package/dist/shared/contracts/release-actions.d.ts.map +1 -1
  52. package/dist/shared/contracts/releases.d.ts +3 -2
  53. package/dist/shared/contracts/releases.d.ts.map +1 -1
  54. package/package.json +18 -16
  55. package/dist/_chunks/App-D-lWdVb2.js.map +0 -1
  56. package/dist/_chunks/App-UQxgTJY5.mjs.map +0 -1
  57. package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js.map +0 -1
  58. package/dist/_chunks/ReleasesSettingsPage-CuUXvABk.mjs.map +0 -1
  59. package/dist/_chunks/ReleasesSettingsPage-xfAoY8N3.js.map +0 -1
  60. package/dist/_chunks/en-BCDLTJn3.js.map +0 -1
  61. package/dist/_chunks/en-CGXIF4vQ.mjs.map +0 -1
  62. package/dist/_chunks/index-b3Ej95H7.mjs.map +0 -1
  63. package/dist/_chunks/index-jnv9zdcE.js.map +0 -1
  64. package/dist/_chunks/schemas-63pFihNF.mjs.map +0 -1
  65. package/dist/_chunks/schemas-z5zp-_Gd.js.map +0 -1
  66. 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)(reject.bind(null, new Error("Unknown variable dynamic import: " + path)));
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) => [{ type: "Release", id: arg.id }]
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: () => [{ type: "ReleaseAction", id: "LIST" }],
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) => [{ type: "Release", id: arg.id }]
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: (result, error, arg) => [{ type: "ReleaseSettings" }]
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(Menu.Trigger, { variant: "tertiary", endIcon: null, paddingLeft: 2, paddingRight: 2, children: /* @__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 = ({ model, documentId, collectionType }) => {
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
- contentType: model,
893
- entryDocumentId: documentId,
894
- locale,
895
- hasEntryAttached: true
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 && releases.length === 0) {
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-UQxgTJY5.mjs").then((mod) => ({ default: mod.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-CuUXvABk.mjs");
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-_MxP6-Dt.mjs");
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-CGXIF4vQ.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
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-b3Ej95H7.mjs.map
1386
+ //# sourceMappingURL=index-BjvFfTtA.mjs.map