@strapi/content-releases 0.0.0-experimental.edc24aaa3bb5a90fa5fd4fee208167dd4e2e38d4 → 0.0.0-experimental.f0a0bc26f5ef0693aaea2a616bc6b816cfee54b6

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 (61) hide show
  1. package/dist/_chunks/{App-UQxgTJY5.mjs → App-FQyYFBJT.mjs} +313 -105
  2. package/dist/_chunks/App-FQyYFBJT.mjs.map +1 -0
  3. package/dist/_chunks/{App-D-lWdVb2.js → App-lx4Ucy9W.js} +352 -144
  4. package/dist/_chunks/App-lx4Ucy9W.js.map +1 -0
  5. package/dist/_chunks/{ReleasesSettingsPage-CuUXvABk.mjs → ReleasesSettingsPage-DqBxvJ9i.mjs} +4 -4
  6. package/dist/_chunks/ReleasesSettingsPage-DqBxvJ9i.mjs.map +1 -0
  7. package/dist/_chunks/{ReleasesSettingsPage-xfAoY8N3.js → ReleasesSettingsPage-T5VEAV03.js} +4 -4
  8. package/dist/_chunks/ReleasesSettingsPage-T5VEAV03.js.map +1 -0
  9. package/dist/_chunks/{en-BCDLTJn3.js → en-BWPPsSH-.js} +12 -2
  10. package/dist/_chunks/en-BWPPsSH-.js.map +1 -0
  11. package/dist/_chunks/{en-CGXIF4vQ.mjs → en-D9Q4YW03.mjs} +12 -2
  12. package/dist/_chunks/en-D9Q4YW03.mjs.map +1 -0
  13. package/dist/_chunks/{index-b3Ej95H7.mjs → index-CK9G80CL.mjs} +307 -26
  14. package/dist/_chunks/index-CK9G80CL.mjs.map +1 -0
  15. package/dist/_chunks/{index-jnv9zdcE.js → index-Cl3tM1YW.js} +304 -23
  16. package/dist/_chunks/index-Cl3tM1YW.js.map +1 -0
  17. package/dist/_chunks/{schemas-z5zp-_Gd.js → schemas-BE1LxE9J.js} +2 -2
  18. package/dist/_chunks/schemas-BE1LxE9J.js.map +1 -0
  19. package/dist/_chunks/{schemas-63pFihNF.mjs → schemas-DdA2ic2U.mjs} +2 -2
  20. package/dist/_chunks/schemas-DdA2ic2U.mjs.map +1 -0
  21. package/dist/admin/index.js +1 -1
  22. package/dist/admin/index.mjs +1 -1
  23. package/dist/admin/src/components/EntryValidationPopover.d.ts +13 -0
  24. package/dist/admin/src/components/ReleaseListCell.d.ts +28 -0
  25. package/dist/admin/src/services/release.d.ts +34 -32
  26. package/dist/server/index.js +191 -88
  27. package/dist/server/index.js.map +1 -1
  28. package/dist/server/index.mjs +191 -88
  29. package/dist/server/index.mjs.map +1 -1
  30. package/dist/server/src/controllers/index.d.ts +2 -0
  31. package/dist/server/src/controllers/index.d.ts.map +1 -1
  32. package/dist/server/src/controllers/release-action.d.ts +1 -0
  33. package/dist/server/src/controllers/release-action.d.ts.map +1 -1
  34. package/dist/server/src/controllers/release.d.ts +1 -0
  35. package/dist/server/src/controllers/release.d.ts.map +1 -1
  36. package/dist/server/src/index.d.ts +6 -6
  37. package/dist/server/src/middlewares/documents.d.ts.map +1 -1
  38. package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts.map +1 -1
  39. package/dist/server/src/routes/release-action.d.ts.map +1 -1
  40. package/dist/server/src/routes/release.d.ts.map +1 -1
  41. package/dist/server/src/services/index.d.ts +4 -6
  42. package/dist/server/src/services/index.d.ts.map +1 -1
  43. package/dist/server/src/services/release-action.d.ts +6 -8
  44. package/dist/server/src/services/release-action.d.ts.map +1 -1
  45. package/dist/server/src/utils/index.d.ts.map +1 -1
  46. package/dist/shared/contracts/release-actions.d.ts +11 -6
  47. package/dist/shared/contracts/release-actions.d.ts.map +1 -1
  48. package/dist/shared/contracts/releases.d.ts +3 -2
  49. package/dist/shared/contracts/releases.d.ts.map +1 -1
  50. package/package.json +17 -15
  51. package/dist/_chunks/App-D-lWdVb2.js.map +0 -1
  52. package/dist/_chunks/App-UQxgTJY5.mjs.map +0 -1
  53. package/dist/_chunks/ReleasesSettingsPage-CuUXvABk.mjs.map +0 -1
  54. package/dist/_chunks/ReleasesSettingsPage-xfAoY8N3.js.map +0 -1
  55. package/dist/_chunks/en-BCDLTJn3.js.map +0 -1
  56. package/dist/_chunks/en-CGXIF4vQ.mjs.map +0 -1
  57. package/dist/_chunks/index-b3Ej95H7.mjs.map +0 -1
  58. package/dist/_chunks/index-jnv9zdcE.js.map +0 -1
  59. package/dist/_chunks/schemas-63pFihNF.mjs.map +0 -1
  60. package/dist/_chunks/schemas-z5zp-_Gd.js.map +0 -1
  61. package/strapi-server.js +0 -3
@@ -1,11 +1,11 @@
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";
@@ -103,7 +103,7 @@ const extendInvalidatesTags = (endpoint, extraTags) => {
103
103
  Object.assign(endpoint, { invalidatesTags: newInvalidatesTags });
104
104
  };
105
105
  const releaseApi = adminApi.enhanceEndpoints({
106
- addTagTypes: ["Release", "ReleaseAction", "EntriesInRelease", "ReleaseSettings"],
106
+ addTagTypes: ["Release", "ReleaseAction", "EntriesInRelease", "ReleaseSettings", "Document"],
107
107
  endpoints: {
108
108
  updateDocument(endpoint) {
109
109
  extendInvalidatesTags(endpoint, [
@@ -128,6 +128,24 @@ const releaseApi = adminApi.enhanceEndpoints({
128
128
  { type: "Release", id: "LIST" },
129
129
  { type: "ReleaseAction", id: "LIST" }
130
130
  ]);
131
+ },
132
+ createWorkflow(endpoint) {
133
+ extendInvalidatesTags(endpoint, [
134
+ { type: "Release", id: "LIST" },
135
+ { type: "ReleaseAction", id: "LIST" }
136
+ ]);
137
+ },
138
+ updateWorkflow(endpoint) {
139
+ extendInvalidatesTags(endpoint, [
140
+ { type: "Release", id: "LIST" },
141
+ { type: "ReleaseAction", id: "LIST" }
142
+ ]);
143
+ },
144
+ deleteWorkflow(endpoint) {
145
+ extendInvalidatesTags(endpoint, [
146
+ { type: "Release", id: "LIST" },
147
+ { type: "ReleaseAction", id: "LIST" }
148
+ ]);
131
149
  }
132
150
  }
133
151
  }).injectEndpoints({
@@ -198,7 +216,10 @@ const releaseApi = adminApi.enhanceEndpoints({
198
216
  method: "GET"
199
217
  };
200
218
  },
201
- providesTags: (result, error, arg) => [{ type: "Release", id: arg.id }]
219
+ providesTags: (result, error, arg) => [
220
+ { type: "Release", id: "LIST" },
221
+ { type: "Release", id: arg.id }
222
+ ]
202
223
  }),
203
224
  getReleaseActions: build.query({
204
225
  query({ releaseId, ...params }) {
@@ -267,7 +288,11 @@ const releaseApi = adminApi.enhanceEndpoints({
267
288
  data: body
268
289
  };
269
290
  },
270
- invalidatesTags: () => [{ type: "ReleaseAction", id: "LIST" }],
291
+ invalidatesTags: (res, error, arg) => [
292
+ { type: "ReleaseAction", id: "LIST" },
293
+ { type: "Release", id: "LIST" },
294
+ { type: "Release", id: arg.params.releaseId }
295
+ ],
271
296
  async onQueryStarted({ body, params, query, actionPath }, { dispatch, queryFulfilled }) {
272
297
  const paramsWithoutActionId = {
273
298
  releaseId: params.releaseId,
@@ -314,7 +339,10 @@ const releaseApi = adminApi.enhanceEndpoints({
314
339
  method: "POST"
315
340
  };
316
341
  },
317
- invalidatesTags: (result, error, arg) => [{ type: "Release", id: arg.id }]
342
+ invalidatesTags: (result, error, arg) => [
343
+ { type: "Release", id: arg.id },
344
+ { type: "Document", id: `ALL_LIST` }
345
+ ]
318
346
  }),
319
347
  deleteRelease: build.mutation({
320
348
  query({ id }) {
@@ -352,7 +380,7 @@ const releaseApi = adminApi.enhanceEndpoints({
352
380
  data
353
381
  };
354
382
  },
355
- invalidatesTags: (result, error, arg) => [{ type: "ReleaseSettings" }]
383
+ invalidatesTags: [{ type: "ReleaseSettings" }]
356
384
  })
357
385
  };
358
386
  }
@@ -577,6 +605,7 @@ const AddActionToReleaseModal = ({
577
605
  };
578
606
  const ReleaseActionModalForm = ({
579
607
  documentId,
608
+ document,
580
609
  model,
581
610
  collectionType
582
611
  }) => {
@@ -655,6 +684,8 @@ const ReleaseActionModalForm = ({
655
684
  defaultMessage: "Add to release"
656
685
  }),
657
686
  icon: /* @__PURE__ */ jsx(PaperPlane, {}),
687
+ // Entry is creating so we don't want to allow adding it to a release
688
+ disabled: !document,
658
689
  position: ["panel", "table-row"],
659
690
  dialog: {
660
691
  type: "modal",
@@ -693,6 +724,236 @@ const ReleaseActionModalForm = ({
693
724
  }
694
725
  };
695
726
  };
727
+ const getContentPermissions = (subject) => {
728
+ const permissions = {
729
+ publish: [
730
+ {
731
+ action: "plugin::content-manager.explorer.publish",
732
+ subject,
733
+ id: "",
734
+ actionParameters: {},
735
+ properties: {},
736
+ conditions: []
737
+ }
738
+ ]
739
+ };
740
+ return permissions;
741
+ };
742
+ const ReleaseAction = ({ documents, model }) => {
743
+ const { formatMessage } = useIntl();
744
+ const { toggleNotification } = useNotification();
745
+ const { formatAPIError } = useAPIErrorHandler();
746
+ const [{ query }] = useQueryParams();
747
+ const contentPermissions = getContentPermissions(model);
748
+ const {
749
+ allowedActions: { canPublish }
750
+ } = useRBAC(contentPermissions);
751
+ const {
752
+ allowedActions: { canCreate }
753
+ } = useRBAC(PERMISSIONS);
754
+ const response = useGetReleasesQuery();
755
+ const releases = response.data?.data;
756
+ const [createManyReleaseActions, { isLoading }] = useCreateManyReleaseActionsMutation();
757
+ const documentIds = documents.map((doc) => doc.documentId);
758
+ const handleSubmit = async (values) => {
759
+ const locale = query.plugins?.i18n?.locale;
760
+ const releaseActionEntries = documentIds.map(
761
+ (entryDocumentId) => ({
762
+ type: values.type,
763
+ contentType: model,
764
+ entryDocumentId,
765
+ locale
766
+ })
767
+ );
768
+ const response2 = await createManyReleaseActions({
769
+ body: releaseActionEntries,
770
+ params: { releaseId: values.releaseId }
771
+ });
772
+ if ("data" in response2) {
773
+ const notificationMessage = formatMessage(
774
+ {
775
+ id: "content-releases.content-manager-list-view.add-to-release.notification.success.message",
776
+ defaultMessage: "{entriesAlreadyInRelease} out of {totalEntries} entries were already in the release."
777
+ },
778
+ {
779
+ entriesAlreadyInRelease: response2.data.meta.entriesAlreadyInRelease,
780
+ totalEntries: response2.data.meta.totalEntries
781
+ }
782
+ );
783
+ const notification = {
784
+ type: "success",
785
+ title: formatMessage(
786
+ {
787
+ id: "content-releases.content-manager-list-view.add-to-release.notification.success.title",
788
+ defaultMessage: "Successfully added to release."
789
+ },
790
+ {
791
+ entriesAlreadyInRelease: response2.data.meta.entriesAlreadyInRelease,
792
+ totalEntries: response2.data.meta.totalEntries
793
+ }
794
+ ),
795
+ message: response2.data.meta.entriesAlreadyInRelease ? notificationMessage : ""
796
+ };
797
+ toggleNotification(notification);
798
+ return true;
799
+ }
800
+ if ("error" in response2) {
801
+ if (isFetchError(response2.error)) {
802
+ toggleNotification({
803
+ type: "warning",
804
+ message: formatAPIError(response2.error)
805
+ });
806
+ } else {
807
+ toggleNotification({
808
+ type: "warning",
809
+ message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
810
+ });
811
+ }
812
+ }
813
+ };
814
+ if (!canCreate || !canPublish)
815
+ return null;
816
+ return {
817
+ actionType: "release",
818
+ variant: "tertiary",
819
+ label: formatMessage({
820
+ id: "content-manager-list-view.add-to-release",
821
+ defaultMessage: "Add to Release"
822
+ }),
823
+ dialog: {
824
+ type: "modal",
825
+ title: formatMessage({
826
+ id: "content-manager-list-view.add-to-release",
827
+ defaultMessage: "Add to Release"
828
+ }),
829
+ content: ({ onClose }) => {
830
+ return /* @__PURE__ */ jsx(
831
+ Formik,
832
+ {
833
+ onSubmit: async (values) => {
834
+ const data = await handleSubmit(values);
835
+ if (data) {
836
+ return onClose();
837
+ }
838
+ },
839
+ validationSchema: RELEASE_ACTION_FORM_SCHEMA,
840
+ initialValues: INITIAL_VALUES,
841
+ children: ({ values, setFieldValue }) => /* @__PURE__ */ jsxs(Form, { children: [
842
+ releases?.length === 0 ? /* @__PURE__ */ jsx(NoReleases, {}) : /* @__PURE__ */ jsx(Modal.Body, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
843
+ /* @__PURE__ */ jsx(Box, { paddingBottom: 6, children: /* @__PURE__ */ jsxs(Field.Root, { required: true, children: [
844
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
845
+ id: "content-releases.content-manager-list-view.add-to-release.select-label",
846
+ defaultMessage: "Select a release"
847
+ }) }),
848
+ /* @__PURE__ */ jsx(
849
+ SingleSelect,
850
+ {
851
+ placeholder: formatMessage({
852
+ id: "content-releases.content-manager-list-view.add-to-release.select-placeholder",
853
+ defaultMessage: "Select"
854
+ }),
855
+ onChange: (value) => setFieldValue("releaseId", value),
856
+ value: values.releaseId,
857
+ children: releases?.map((release) => /* @__PURE__ */ jsx(SingleSelectOption, { value: release.id, children: release.name }, release.id))
858
+ }
859
+ )
860
+ ] }) }),
861
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
862
+ id: "content-releases.content-manager-list-view.add-to-release.action-type-label",
863
+ defaultMessage: "What do you want to do with these entries?"
864
+ }) }),
865
+ /* @__PURE__ */ jsx(
866
+ ReleaseActionOptions,
867
+ {
868
+ selected: values.type,
869
+ handleChange: (e) => setFieldValue("type", e.target.value),
870
+ name: "type"
871
+ }
872
+ )
873
+ ] }) }),
874
+ /* @__PURE__ */ jsxs(Modal.Footer, { children: [
875
+ /* @__PURE__ */ jsx(Button, { onClick: onClose, variant: "tertiary", name: "cancel", children: formatMessage({
876
+ id: "content-releases.content-manager-list-view.add-to-release.cancel-button",
877
+ defaultMessage: "Cancel"
878
+ }) }),
879
+ /* @__PURE__ */ jsx(Button, { type: "submit", disabled: !values.releaseId, loading: isLoading, children: formatMessage({
880
+ id: "content-releases.content-manager-list-view.add-to-release.continue-button",
881
+ defaultMessage: "Continue"
882
+ }) })
883
+ ] })
884
+ ] })
885
+ }
886
+ );
887
+ }
888
+ }
889
+ };
890
+ };
891
+ const useReleasesList = (contentTypeUid, documentId) => {
892
+ const listViewData = useTable("ListView", (state) => state.rows);
893
+ const documentIds = listViewData.map((entry) => entry.documentId);
894
+ const [{ query }] = useQueryParams();
895
+ const locale = query?.plugins?.i18n?.locale || void 0;
896
+ const response = useGetMappedEntriesInReleasesQuery(
897
+ { contentTypeUid, documentIds, locale },
898
+ { skip: !documentIds || !contentTypeUid || documentIds.length === 0 }
899
+ );
900
+ const mappedEntriesInReleases = response.data || {};
901
+ return mappedEntriesInReleases?.[documentId] || [];
902
+ };
903
+ const addColumnToTableHook = ({ displayedHeaders, layout }) => {
904
+ const { options } = layout;
905
+ if (!options?.draftAndPublish) {
906
+ return { displayedHeaders, layout };
907
+ }
908
+ return {
909
+ displayedHeaders: [
910
+ ...displayedHeaders,
911
+ {
912
+ searchable: false,
913
+ sortable: false,
914
+ name: "releases",
915
+ label: {
916
+ id: "content-releases.content-manager.list-view.releases.header",
917
+ defaultMessage: "To be released in"
918
+ },
919
+ cellFormatter: (props, _, { model }) => /* @__PURE__ */ jsx(ReleaseListCell, { ...props, model })
920
+ }
921
+ ],
922
+ layout
923
+ };
924
+ };
925
+ const ReleaseListCell = ({ documentId, model }) => {
926
+ const releases = useReleasesList(model, documentId);
927
+ const { formatMessage } = useIntl();
928
+ return /* @__PURE__ */ jsxs(Popover.Root, { children: [
929
+ /* @__PURE__ */ jsx(Popover.Trigger, { children: /* @__PURE__ */ jsx(
930
+ Button,
931
+ {
932
+ variant: "ghost",
933
+ onClick: (e) => e.stopPropagation(),
934
+ endIcon: releases.length > 0 ? /* @__PURE__ */ jsx(CaretDown, { width: "1.2rem", height: "1.2rem" }) : null,
935
+ children: /* @__PURE__ */ jsx(
936
+ Typography,
937
+ {
938
+ style: { maxWidth: "252px", cursor: "pointer" },
939
+ textColor: "neutral800",
940
+ fontWeight: "regular",
941
+ children: releases.length > 0 ? formatMessage(
942
+ {
943
+ id: "content-releases.content-manager.list-view.releases-number",
944
+ defaultMessage: "{number} {number, plural, one {release} other {releases}}"
945
+ },
946
+ {
947
+ number: releases.length
948
+ }
949
+ ) : "-"
950
+ }
951
+ )
952
+ }
953
+ ) }),
954
+ /* @__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)) }) })
955
+ ] });
956
+ };
696
957
  const getTimezoneOffset = (timezone, date) => {
697
958
  try {
698
959
  const offsetPart = new Intl.DateTimeFormat("en", {
@@ -859,7 +1120,7 @@ const Root = ({ children }) => {
859
1120
  return (
860
1121
  // A user can access the dropdown if they have permissions to delete a release-action OR update a release
861
1122
  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(
1123
+ /* @__PURE__ */ jsx(StyledMoreButton, { variant: "tertiary", endIcon: null, paddingLeft: "7px", paddingRight: "7px", children: /* @__PURE__ */ jsx(
863
1124
  AccessibleIcon,
864
1125
  {
865
1126
  label: formatMessage({
@@ -873,13 +1134,23 @@ const Root = ({ children }) => {
873
1134
  ] }) : null
874
1135
  );
875
1136
  };
1137
+ const StyledMoreButton = styled(Menu.Trigger)`
1138
+ & > span {
1139
+ display: flex;
1140
+ }
1141
+ `;
876
1142
  const ReleaseActionMenu = {
877
1143
  Root,
878
1144
  EditReleaseItem,
879
1145
  DeleteReleaseActionItem,
880
1146
  ReleaseActionEntryLinkItem
881
1147
  };
882
- const Panel = ({ model, documentId, collectionType }) => {
1148
+ const Panel = ({
1149
+ model,
1150
+ document,
1151
+ documentId,
1152
+ collectionType
1153
+ }) => {
883
1154
  const [{ query }] = useQueryParams();
884
1155
  const locale = query.plugins?.i18n?.locale;
885
1156
  const {
@@ -888,12 +1159,17 @@ const Panel = ({ model, documentId, collectionType }) => {
888
1159
  const { formatMessage, formatDate, formatTime } = useIntl();
889
1160
  const { allowedActions } = useRBAC(PERMISSIONS);
890
1161
  const { canRead, canDeleteAction } = allowedActions;
891
- const response = useGetReleasesForEntryQuery({
892
- contentType: model,
893
- entryDocumentId: documentId,
894
- locale,
895
- hasEntryAttached: true
896
- });
1162
+ const response = useGetReleasesForEntryQuery(
1163
+ {
1164
+ contentType: model,
1165
+ entryDocumentId: documentId,
1166
+ locale,
1167
+ hasEntryAttached: true
1168
+ },
1169
+ {
1170
+ skip: !document
1171
+ }
1172
+ );
897
1173
  const releases = response.data?.data;
898
1174
  const getReleaseColorVariant = (actionType, shade) => {
899
1175
  if (actionType === "unpublish") {
@@ -907,7 +1183,7 @@ const Panel = ({ model, documentId, collectionType }) => {
907
1183
  if (collectionType === "collection-types" && (!documentId || documentId === "create")) {
908
1184
  return null;
909
1185
  }
910
- if (releases && releases.length === 0) {
1186
+ if (!releases || releases.length === 0) {
911
1187
  return null;
912
1188
  }
913
1189
  return {
@@ -992,9 +1268,6 @@ const Panel = ({ model, documentId, collectionType }) => {
992
1268
  };
993
1269
  const pluginId = "content-releases";
994
1270
  const prefixPluginTranslations = (trad, pluginId2) => {
995
- if (!pluginId2) {
996
- throw new TypeError("pluginId can't be empty");
997
- }
998
1271
  return Object.keys(trad).reduce((acc, current) => {
999
1272
  acc[`${pluginId2}.${current}`] = trad[current];
1000
1273
  return acc;
@@ -1012,7 +1285,7 @@ const admin = {
1012
1285
  id: `${pluginId}.plugin.name`,
1013
1286
  defaultMessage: "Releases"
1014
1287
  },
1015
- Component: () => import("./App-UQxgTJY5.mjs").then((mod) => ({ default: mod.App })),
1288
+ Component: () => import("./App-FQyYFBJT.mjs").then((mod) => ({ default: mod.App })),
1016
1289
  permissions: PERMISSIONS.main,
1017
1290
  position: 2
1018
1291
  });
@@ -1036,10 +1309,18 @@ const admin = {
1036
1309
  },
1037
1310
  permissions: [],
1038
1311
  async Component() {
1039
- const { ProtectedReleasesSettingsPage } = await import("./ReleasesSettingsPage-CuUXvABk.mjs");
1312
+ const { ProtectedReleasesSettingsPage } = await import("./ReleasesSettingsPage-DqBxvJ9i.mjs");
1040
1313
  return { default: ProtectedReleasesSettingsPage };
1041
1314
  }
1042
1315
  });
1316
+ if ("addBulkAction" in contentManagerPluginApis && typeof contentManagerPluginApis.addBulkAction === "function") {
1317
+ contentManagerPluginApis.addBulkAction((actions) => {
1318
+ const deleteActionIndex = actions.findIndex((action) => action.type === "delete");
1319
+ actions.splice(deleteActionIndex, 0, ReleaseAction);
1320
+ return actions;
1321
+ });
1322
+ }
1323
+ app.registerHook("Admin/CM/pages/ListView/inject-column-in-table", addColumnToTableHook);
1043
1324
  } else if (!window.strapi.features.isEnabled("cms-content-releases") && window.strapi?.flags?.promoteEE) {
1044
1325
  app.addSettingsLink("global", {
1045
1326
  id: pluginId,
@@ -1060,7 +1341,7 @@ const admin = {
1060
1341
  async registerTrads({ locales }) {
1061
1342
  const importedTrads = await Promise.all(
1062
1343
  locales.map((locale) => {
1063
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-CGXIF4vQ.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
1344
+ return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-D9Q4YW03.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
1064
1345
  return {
1065
1346
  data: prefixPluginTranslations(data, "content-releases"),
1066
1347
  locale
@@ -1096,4 +1377,4 @@ export {
1096
1377
  releaseApi as r,
1097
1378
  useGetReleasesQuery as u
1098
1379
  };
1099
- //# sourceMappingURL=index-b3Ej95H7.mjs.map
1380
+ //# sourceMappingURL=index-CK9G80CL.mjs.map