@strapi/content-releases 5.0.0-rc.3 → 5.0.0-rc.30

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 (58) hide show
  1. package/dist/_chunks/{App-UQxgTJY5.mjs → App-BA2xDdy0.mjs} +43 -20
  2. package/dist/_chunks/App-BA2xDdy0.mjs.map +1 -0
  3. package/dist/_chunks/{App-D-lWdVb2.js → App-D4Wira1X.js} +42 -19
  4. package/dist/_chunks/App-D4Wira1X.js.map +1 -0
  5. package/dist/_chunks/{ReleasesSettingsPage-CuUXvABk.mjs → ReleasesSettingsPage-BAlbMWpw.mjs} +4 -4
  6. package/dist/_chunks/ReleasesSettingsPage-BAlbMWpw.mjs.map +1 -0
  7. package/dist/_chunks/{ReleasesSettingsPage-xfAoY8N3.js → ReleasesSettingsPage-xhFyRXCM.js} +4 -4
  8. package/dist/_chunks/ReleasesSettingsPage-xhFyRXCM.js.map +1 -0
  9. package/dist/_chunks/{en-BCDLTJn3.js → en-CmYoEnA7.js} +2 -1
  10. package/dist/_chunks/en-CmYoEnA7.js.map +1 -0
  11. package/dist/_chunks/{en-CGXIF4vQ.mjs → en-D0yVZFqf.mjs} +2 -1
  12. package/dist/_chunks/en-D0yVZFqf.mjs.map +1 -0
  13. package/dist/_chunks/{index-b3Ej95H7.mjs → index-CCFFG3Zs.mjs} +289 -23
  14. package/dist/_chunks/index-CCFFG3Zs.mjs.map +1 -0
  15. package/dist/_chunks/{index-jnv9zdcE.js → index-DxkQGp4N.js} +286 -20
  16. package/dist/_chunks/index-DxkQGp4N.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/ReleaseListCell.d.ts +28 -0
  24. package/dist/admin/src/services/release.d.ts +34 -32
  25. package/dist/server/index.js +108 -79
  26. package/dist/server/index.js.map +1 -1
  27. package/dist/server/index.mjs +108 -79
  28. package/dist/server/index.mjs.map +1 -1
  29. package/dist/server/src/controllers/index.d.ts +2 -0
  30. package/dist/server/src/controllers/index.d.ts.map +1 -1
  31. package/dist/server/src/controllers/release-action.d.ts +1 -0
  32. package/dist/server/src/controllers/release-action.d.ts.map +1 -1
  33. package/dist/server/src/controllers/release.d.ts +1 -0
  34. package/dist/server/src/controllers/release.d.ts.map +1 -1
  35. package/dist/server/src/index.d.ts +4 -0
  36. package/dist/server/src/index.d.ts.map +1 -1
  37. package/dist/server/src/routes/release-action.d.ts.map +1 -1
  38. package/dist/server/src/routes/release.d.ts.map +1 -1
  39. package/dist/server/src/services/index.d.ts +2 -0
  40. package/dist/server/src/services/index.d.ts.map +1 -1
  41. package/dist/server/src/services/release-action.d.ts +3 -1
  42. package/dist/server/src/services/release-action.d.ts.map +1 -1
  43. package/dist/shared/contracts/release-actions.d.ts +3 -5
  44. package/dist/shared/contracts/release-actions.d.ts.map +1 -1
  45. package/dist/shared/contracts/releases.d.ts +3 -2
  46. package/dist/shared/contracts/releases.d.ts.map +1 -1
  47. package/package.json +12 -11
  48. package/dist/_chunks/App-D-lWdVb2.js.map +0 -1
  49. package/dist/_chunks/App-UQxgTJY5.mjs.map +0 -1
  50. package/dist/_chunks/ReleasesSettingsPage-CuUXvABk.mjs.map +0 -1
  51. package/dist/_chunks/ReleasesSettingsPage-xfAoY8N3.js.map +0 -1
  52. package/dist/_chunks/en-BCDLTJn3.js.map +0 -1
  53. package/dist/_chunks/en-CGXIF4vQ.mjs.map +0 -1
  54. package/dist/_chunks/index-b3Ej95H7.mjs.map +0 -1
  55. package/dist/_chunks/index-jnv9zdcE.js.map +0 -1
  56. package/dist/_chunks/schemas-63pFihNF.mjs.map +0 -1
  57. package/dist/_chunks/schemas-z5zp-_Gd.js.map +0 -1
  58. package/strapi-server.js +0 -3
@@ -2,11 +2,11 @@
2
2
  const icons = require("@strapi/icons");
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const strapiAdmin = require("@strapi/admin/strapi-admin");
5
- const strapiAdmin$1 = require("@strapi/content-manager/strapi-admin");
6
5
  const designSystem = require("@strapi/design-system");
7
- const symbols = require("@strapi/icons/symbols");
8
6
  const formik = require("formik");
9
7
  const reactIntl = require("react-intl");
8
+ const strapiAdmin$1 = require("@strapi/content-manager/strapi-admin");
9
+ const symbols = require("@strapi/icons/symbols");
10
10
  const reactRouterDom = require("react-router-dom");
11
11
  const yup = require("yup");
12
12
  const styledComponents = require("styled-components");
@@ -124,7 +124,7 @@ const extendInvalidatesTags = (endpoint, extraTags) => {
124
124
  Object.assign(endpoint, { invalidatesTags: newInvalidatesTags });
125
125
  };
126
126
  const releaseApi = strapiAdmin.adminApi.enhanceEndpoints({
127
- addTagTypes: ["Release", "ReleaseAction", "EntriesInRelease", "ReleaseSettings"],
127
+ addTagTypes: ["Release", "ReleaseAction", "EntriesInRelease", "ReleaseSettings", "Document"],
128
128
  endpoints: {
129
129
  updateDocument(endpoint) {
130
130
  extendInvalidatesTags(endpoint, [
@@ -219,7 +219,10 @@ const releaseApi = strapiAdmin.adminApi.enhanceEndpoints({
219
219
  method: "GET"
220
220
  };
221
221
  },
222
- providesTags: (result, error, arg) => [{ type: "Release", id: arg.id }]
222
+ providesTags: (result, error, arg) => [
223
+ { type: "Release", id: "LIST" },
224
+ { type: "Release", id: arg.id }
225
+ ]
223
226
  }),
224
227
  getReleaseActions: build.query({
225
228
  query({ releaseId, ...params }) {
@@ -288,7 +291,11 @@ const releaseApi = strapiAdmin.adminApi.enhanceEndpoints({
288
291
  data: body
289
292
  };
290
293
  },
291
- invalidatesTags: () => [{ type: "ReleaseAction", id: "LIST" }],
294
+ invalidatesTags: (res, error, arg) => [
295
+ { type: "ReleaseAction", id: "LIST" },
296
+ { type: "Release", id: "LIST" },
297
+ { type: "Release", id: arg.params.releaseId }
298
+ ],
292
299
  async onQueryStarted({ body, params, query, actionPath }, { dispatch, queryFulfilled }) {
293
300
  const paramsWithoutActionId = {
294
301
  releaseId: params.releaseId,
@@ -335,7 +342,10 @@ const releaseApi = strapiAdmin.adminApi.enhanceEndpoints({
335
342
  method: "POST"
336
343
  };
337
344
  },
338
- invalidatesTags: (result, error, arg) => [{ type: "Release", id: arg.id }]
345
+ invalidatesTags: (result, error, arg) => [
346
+ { type: "Release", id: arg.id },
347
+ { type: "Document", id: `ALL_LIST` }
348
+ ]
339
349
  }),
340
350
  deleteRelease: build.mutation({
341
351
  query({ id }) {
@@ -373,7 +383,7 @@ const releaseApi = strapiAdmin.adminApi.enhanceEndpoints({
373
383
  data
374
384
  };
375
385
  },
376
- invalidatesTags: (result, error, arg) => [{ type: "ReleaseSettings" }]
386
+ invalidatesTags: [{ type: "ReleaseSettings" }]
377
387
  })
378
388
  };
379
389
  }
@@ -598,6 +608,7 @@ const AddActionToReleaseModal = ({
598
608
  };
599
609
  const ReleaseActionModalForm = ({
600
610
  documentId,
611
+ document,
601
612
  model,
602
613
  collectionType
603
614
  }) => {
@@ -676,6 +687,8 @@ const ReleaseActionModalForm = ({
676
687
  defaultMessage: "Add to release"
677
688
  }),
678
689
  icon: /* @__PURE__ */ jsxRuntime.jsx(icons.PaperPlane, {}),
690
+ // Entry is creating so we don't want to allow adding it to a release
691
+ disabled: !document,
679
692
  position: ["panel", "table-row"],
680
693
  dialog: {
681
694
  type: "modal",
@@ -714,6 +727,236 @@ const ReleaseActionModalForm = ({
714
727
  }
715
728
  };
716
729
  };
730
+ const getContentPermissions = (subject) => {
731
+ const permissions = {
732
+ publish: [
733
+ {
734
+ action: "plugin::content-manager.explorer.publish",
735
+ subject,
736
+ id: "",
737
+ actionParameters: {},
738
+ properties: {},
739
+ conditions: []
740
+ }
741
+ ]
742
+ };
743
+ return permissions;
744
+ };
745
+ const ReleaseAction = ({ documents, model }) => {
746
+ const { formatMessage } = reactIntl.useIntl();
747
+ const { toggleNotification } = strapiAdmin.useNotification();
748
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
749
+ const [{ query }] = strapiAdmin.useQueryParams();
750
+ const contentPermissions = getContentPermissions(model);
751
+ const {
752
+ allowedActions: { canPublish }
753
+ } = strapiAdmin.useRBAC(contentPermissions);
754
+ const {
755
+ allowedActions: { canCreate }
756
+ } = strapiAdmin.useRBAC(PERMISSIONS);
757
+ const response = useGetReleasesQuery();
758
+ const releases = response.data?.data;
759
+ const [createManyReleaseActions, { isLoading }] = useCreateManyReleaseActionsMutation();
760
+ const documentIds = documents.map((doc) => doc.documentId);
761
+ const handleSubmit = async (values) => {
762
+ const locale = query.plugins?.i18n?.locale;
763
+ const releaseActionEntries = documentIds.map(
764
+ (entryDocumentId) => ({
765
+ type: values.type,
766
+ contentType: model,
767
+ entryDocumentId,
768
+ locale
769
+ })
770
+ );
771
+ const response2 = await createManyReleaseActions({
772
+ body: releaseActionEntries,
773
+ params: { releaseId: values.releaseId }
774
+ });
775
+ if ("data" in response2) {
776
+ const notificationMessage = formatMessage(
777
+ {
778
+ id: "content-releases.content-manager-list-view.add-to-release.notification.success.message",
779
+ defaultMessage: "{entriesAlreadyInRelease} out of {totalEntries} entries were already in the release."
780
+ },
781
+ {
782
+ entriesAlreadyInRelease: response2.data.meta.entriesAlreadyInRelease,
783
+ totalEntries: response2.data.meta.totalEntries
784
+ }
785
+ );
786
+ const notification = {
787
+ type: "success",
788
+ title: formatMessage(
789
+ {
790
+ id: "content-releases.content-manager-list-view.add-to-release.notification.success.title",
791
+ defaultMessage: "Successfully added to release."
792
+ },
793
+ {
794
+ entriesAlreadyInRelease: response2.data.meta.entriesAlreadyInRelease,
795
+ totalEntries: response2.data.meta.totalEntries
796
+ }
797
+ ),
798
+ message: response2.data.meta.entriesAlreadyInRelease ? notificationMessage : ""
799
+ };
800
+ toggleNotification(notification);
801
+ return true;
802
+ }
803
+ if ("error" in response2) {
804
+ if (strapiAdmin.isFetchError(response2.error)) {
805
+ toggleNotification({
806
+ type: "warning",
807
+ message: formatAPIError(response2.error)
808
+ });
809
+ } else {
810
+ toggleNotification({
811
+ type: "warning",
812
+ message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
813
+ });
814
+ }
815
+ }
816
+ };
817
+ if (!canCreate || !canPublish)
818
+ return null;
819
+ return {
820
+ actionType: "release",
821
+ variant: "tertiary",
822
+ label: formatMessage({
823
+ id: "content-manager-list-view.add-to-release",
824
+ defaultMessage: "Add to Release"
825
+ }),
826
+ dialog: {
827
+ type: "modal",
828
+ title: formatMessage({
829
+ id: "content-manager-list-view.add-to-release",
830
+ defaultMessage: "Add to Release"
831
+ }),
832
+ content: ({ onClose }) => {
833
+ return /* @__PURE__ */ jsxRuntime.jsx(
834
+ formik.Formik,
835
+ {
836
+ onSubmit: async (values) => {
837
+ const data = await handleSubmit(values);
838
+ if (data) {
839
+ return onClose();
840
+ }
841
+ },
842
+ validationSchema: RELEASE_ACTION_FORM_SCHEMA,
843
+ initialValues: INITIAL_VALUES,
844
+ children: ({ values, setFieldValue }) => /* @__PURE__ */ jsxRuntime.jsxs(formik.Form, { children: [
845
+ releases?.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(NoReleases, {}) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Body, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
846
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingBottom: 6, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { required: true, children: [
847
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
848
+ id: "content-releases.content-manager-list-view.add-to-release.select-label",
849
+ defaultMessage: "Select a release"
850
+ }) }),
851
+ /* @__PURE__ */ jsxRuntime.jsx(
852
+ designSystem.SingleSelect,
853
+ {
854
+ placeholder: formatMessage({
855
+ id: "content-releases.content-manager-list-view.add-to-release.select-placeholder",
856
+ defaultMessage: "Select"
857
+ }),
858
+ onChange: (value) => setFieldValue("releaseId", value),
859
+ value: values.releaseId,
860
+ children: releases?.map((release) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: release.id, children: release.name }, release.id))
861
+ }
862
+ )
863
+ ] }) }),
864
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
865
+ id: "content-releases.content-manager-list-view.add-to-release.action-type-label",
866
+ defaultMessage: "What do you want to do with these entries?"
867
+ }) }),
868
+ /* @__PURE__ */ jsxRuntime.jsx(
869
+ ReleaseActionOptions,
870
+ {
871
+ selected: values.type,
872
+ handleChange: (e) => setFieldValue("type", e.target.value),
873
+ name: "type"
874
+ }
875
+ )
876
+ ] }) }),
877
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Footer, { children: [
878
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { onClick: onClose, variant: "tertiary", name: "cancel", children: formatMessage({
879
+ id: "content-releases.content-manager-list-view.add-to-release.cancel-button",
880
+ defaultMessage: "Cancel"
881
+ }) }),
882
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { type: "submit", disabled: !values.releaseId, loading: isLoading, children: formatMessage({
883
+ id: "content-releases.content-manager-list-view.add-to-release.continue-button",
884
+ defaultMessage: "Continue"
885
+ }) })
886
+ ] })
887
+ ] })
888
+ }
889
+ );
890
+ }
891
+ }
892
+ };
893
+ };
894
+ const useReleasesList = (contentTypeUid, documentId) => {
895
+ const listViewData = strapiAdmin.useTable("ListView", (state) => state.rows);
896
+ const documentIds = listViewData.map((entry) => entry.documentId);
897
+ const [{ query }] = strapiAdmin.useQueryParams();
898
+ const locale = query?.plugins?.i18n?.locale || void 0;
899
+ const response = useGetMappedEntriesInReleasesQuery(
900
+ { contentTypeUid, documentIds, locale },
901
+ { skip: !documentIds || !contentTypeUid || documentIds.length === 0 }
902
+ );
903
+ const mappedEntriesInReleases = response.data || {};
904
+ return mappedEntriesInReleases?.[documentId] || [];
905
+ };
906
+ const addColumnToTableHook = ({ displayedHeaders, layout }) => {
907
+ const { options } = layout;
908
+ if (!options?.draftAndPublish) {
909
+ return { displayedHeaders, layout };
910
+ }
911
+ return {
912
+ displayedHeaders: [
913
+ ...displayedHeaders,
914
+ {
915
+ searchable: false,
916
+ sortable: false,
917
+ name: "releases",
918
+ label: {
919
+ id: "content-releases.content-manager.list-view.releases.header",
920
+ defaultMessage: "To be released in"
921
+ },
922
+ cellFormatter: (props, _, { model }) => /* @__PURE__ */ jsxRuntime.jsx(ReleaseListCell, { ...props, model })
923
+ }
924
+ ],
925
+ layout
926
+ };
927
+ };
928
+ const ReleaseListCell = ({ documentId, model }) => {
929
+ const releases = useReleasesList(model, documentId);
930
+ const { formatMessage } = reactIntl.useIntl();
931
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Popover.Root, { children: [
932
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Popover.Trigger, { children: /* @__PURE__ */ jsxRuntime.jsx(
933
+ designSystem.Button,
934
+ {
935
+ variant: "ghost",
936
+ onClick: (e) => e.stopPropagation(),
937
+ endIcon: releases.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(icons.CaretDown, { width: "1.2rem", height: "1.2rem" }) : null,
938
+ children: /* @__PURE__ */ jsxRuntime.jsx(
939
+ designSystem.Typography,
940
+ {
941
+ style: { maxWidth: "252px", cursor: "pointer" },
942
+ textColor: "neutral800",
943
+ fontWeight: "regular",
944
+ children: releases.length > 0 ? formatMessage(
945
+ {
946
+ id: "content-releases.content-manager.list-view.releases-number",
947
+ defaultMessage: "{number} {number, plural, one {release} other {releases}}"
948
+ },
949
+ {
950
+ number: releases.length
951
+ }
952
+ ) : "-"
953
+ }
954
+ )
955
+ }
956
+ ) }),
957
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Popover.Content, { children: /* @__PURE__ */ jsxRuntime.jsx("ul", { children: releases.map(({ id, name }) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 3, tag: "li", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Link, { href: `/admin/plugins/content-releases/${id}`, isExternal: false, children: name }) }, id)) }) })
958
+ ] });
959
+ };
717
960
  const getTimezoneOffset = (timezone, date) => {
718
961
  try {
719
962
  const offsetPart = new Intl.DateTimeFormat("en", {
@@ -880,7 +1123,7 @@ const Root = ({ children }) => {
880
1123
  return (
881
1124
  // A user can access the dropdown if they have permissions to delete a release-action OR update a release
882
1125
  allowedActions.canDeleteAction || allowedActions.canUpdate ? /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Root, { children: [
883
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.Trigger, { variant: "tertiary", endIcon: null, paddingLeft: 2, paddingRight: 2, children: /* @__PURE__ */ jsxRuntime.jsx(
1126
+ /* @__PURE__ */ jsxRuntime.jsx(StyledMoreButton, { variant: "tertiary", endIcon: null, paddingLeft: "7px", paddingRight: "7px", children: /* @__PURE__ */ jsxRuntime.jsx(
884
1127
  designSystem.AccessibleIcon,
885
1128
  {
886
1129
  label: formatMessage({
@@ -894,13 +1137,23 @@ const Root = ({ children }) => {
894
1137
  ] }) : null
895
1138
  );
896
1139
  };
1140
+ const StyledMoreButton = styledComponents.styled(designSystem.Menu.Trigger)`
1141
+ & > span {
1142
+ display: flex;
1143
+ }
1144
+ `;
897
1145
  const ReleaseActionMenu = {
898
1146
  Root,
899
1147
  EditReleaseItem,
900
1148
  DeleteReleaseActionItem,
901
1149
  ReleaseActionEntryLinkItem
902
1150
  };
903
- const Panel = ({ model, documentId, collectionType }) => {
1151
+ const Panel = ({
1152
+ model,
1153
+ document,
1154
+ documentId,
1155
+ collectionType
1156
+ }) => {
904
1157
  const [{ query }] = strapiAdmin.useQueryParams();
905
1158
  const locale = query.plugins?.i18n?.locale;
906
1159
  const {
@@ -909,12 +1162,17 @@ const Panel = ({ model, documentId, collectionType }) => {
909
1162
  const { formatMessage, formatDate, formatTime } = reactIntl.useIntl();
910
1163
  const { allowedActions } = strapiAdmin.useRBAC(PERMISSIONS);
911
1164
  const { canRead, canDeleteAction } = allowedActions;
912
- const response = useGetReleasesForEntryQuery({
913
- contentType: model,
914
- entryDocumentId: documentId,
915
- locale,
916
- hasEntryAttached: true
917
- });
1165
+ const response = useGetReleasesForEntryQuery(
1166
+ {
1167
+ contentType: model,
1168
+ entryDocumentId: documentId,
1169
+ locale,
1170
+ hasEntryAttached: true
1171
+ },
1172
+ {
1173
+ skip: !document
1174
+ }
1175
+ );
918
1176
  const releases = response.data?.data;
919
1177
  const getReleaseColorVariant = (actionType, shade) => {
920
1178
  if (actionType === "unpublish") {
@@ -928,7 +1186,7 @@ const Panel = ({ model, documentId, collectionType }) => {
928
1186
  if (collectionType === "collection-types" && (!documentId || documentId === "create")) {
929
1187
  return null;
930
1188
  }
931
- if (releases && releases.length === 0) {
1189
+ if (!releases || releases.length === 0) {
932
1190
  return null;
933
1191
  }
934
1192
  return {
@@ -1033,7 +1291,7 @@ const admin = {
1033
1291
  id: `${pluginId}.plugin.name`,
1034
1292
  defaultMessage: "Releases"
1035
1293
  },
1036
- Component: () => Promise.resolve().then(() => require("./App-D-lWdVb2.js")).then((mod) => ({ default: mod.App })),
1294
+ Component: () => Promise.resolve().then(() => require("./App-D4Wira1X.js")).then((mod) => ({ default: mod.App })),
1037
1295
  permissions: PERMISSIONS.main,
1038
1296
  position: 2
1039
1297
  });
@@ -1057,10 +1315,18 @@ const admin = {
1057
1315
  },
1058
1316
  permissions: [],
1059
1317
  async Component() {
1060
- const { ProtectedReleasesSettingsPage } = await Promise.resolve().then(() => require("./ReleasesSettingsPage-xfAoY8N3.js"));
1318
+ const { ProtectedReleasesSettingsPage } = await Promise.resolve().then(() => require("./ReleasesSettingsPage-xhFyRXCM.js"));
1061
1319
  return { default: ProtectedReleasesSettingsPage };
1062
1320
  }
1063
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);
1064
1330
  } else if (!window.strapi.features.isEnabled("cms-content-releases") && window.strapi?.flags?.promoteEE) {
1065
1331
  app.addSettingsLink("global", {
1066
1332
  id: pluginId,
@@ -1081,7 +1347,7 @@ const admin = {
1081
1347
  async registerTrads({ locales }) {
1082
1348
  const importedTrads = await Promise.all(
1083
1349
  locales.map((locale) => {
1084
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-BCDLTJn3.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
1350
+ return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-CmYoEnA7.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
1085
1351
  return {
1086
1352
  data: prefixPluginTranslations(data, "content-releases"),
1087
1353
  locale
@@ -1115,4 +1381,4 @@ exports.usePublishReleaseMutation = usePublishReleaseMutation;
1115
1381
  exports.useUpdateReleaseActionMutation = useUpdateReleaseActionMutation;
1116
1382
  exports.useUpdateReleaseMutation = useUpdateReleaseMutation;
1117
1383
  exports.useUpdateReleaseSettingsMutation = useUpdateReleaseSettingsMutation;
1118
- //# sourceMappingURL=index-jnv9zdcE.js.map
1384
+ //# sourceMappingURL=index-DxkQGp4N.js.map