@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
@@ -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, [
@@ -149,6 +149,24 @@ const releaseApi = strapiAdmin.adminApi.enhanceEndpoints({
149
149
  { type: "Release", id: "LIST" },
150
150
  { type: "ReleaseAction", id: "LIST" }
151
151
  ]);
152
+ },
153
+ createWorkflow(endpoint) {
154
+ extendInvalidatesTags(endpoint, [
155
+ { type: "Release", id: "LIST" },
156
+ { type: "ReleaseAction", id: "LIST" }
157
+ ]);
158
+ },
159
+ updateWorkflow(endpoint) {
160
+ extendInvalidatesTags(endpoint, [
161
+ { type: "Release", id: "LIST" },
162
+ { type: "ReleaseAction", id: "LIST" }
163
+ ]);
164
+ },
165
+ deleteWorkflow(endpoint) {
166
+ extendInvalidatesTags(endpoint, [
167
+ { type: "Release", id: "LIST" },
168
+ { type: "ReleaseAction", id: "LIST" }
169
+ ]);
152
170
  }
153
171
  }
154
172
  }).injectEndpoints({
@@ -219,7 +237,10 @@ const releaseApi = strapiAdmin.adminApi.enhanceEndpoints({
219
237
  method: "GET"
220
238
  };
221
239
  },
222
- providesTags: (result, error, arg) => [{ type: "Release", id: arg.id }]
240
+ providesTags: (result, error, arg) => [
241
+ { type: "Release", id: "LIST" },
242
+ { type: "Release", id: arg.id }
243
+ ]
223
244
  }),
224
245
  getReleaseActions: build.query({
225
246
  query({ releaseId, ...params }) {
@@ -288,7 +309,11 @@ const releaseApi = strapiAdmin.adminApi.enhanceEndpoints({
288
309
  data: body
289
310
  };
290
311
  },
291
- invalidatesTags: () => [{ type: "ReleaseAction", id: "LIST" }],
312
+ invalidatesTags: (res, error, arg) => [
313
+ { type: "ReleaseAction", id: "LIST" },
314
+ { type: "Release", id: "LIST" },
315
+ { type: "Release", id: arg.params.releaseId }
316
+ ],
292
317
  async onQueryStarted({ body, params, query, actionPath }, { dispatch, queryFulfilled }) {
293
318
  const paramsWithoutActionId = {
294
319
  releaseId: params.releaseId,
@@ -335,7 +360,10 @@ const releaseApi = strapiAdmin.adminApi.enhanceEndpoints({
335
360
  method: "POST"
336
361
  };
337
362
  },
338
- invalidatesTags: (result, error, arg) => [{ type: "Release", id: arg.id }]
363
+ invalidatesTags: (result, error, arg) => [
364
+ { type: "Release", id: arg.id },
365
+ { type: "Document", id: `ALL_LIST` }
366
+ ]
339
367
  }),
340
368
  deleteRelease: build.mutation({
341
369
  query({ id }) {
@@ -373,7 +401,7 @@ const releaseApi = strapiAdmin.adminApi.enhanceEndpoints({
373
401
  data
374
402
  };
375
403
  },
376
- invalidatesTags: (result, error, arg) => [{ type: "ReleaseSettings" }]
404
+ invalidatesTags: [{ type: "ReleaseSettings" }]
377
405
  })
378
406
  };
379
407
  }
@@ -598,6 +626,7 @@ const AddActionToReleaseModal = ({
598
626
  };
599
627
  const ReleaseActionModalForm = ({
600
628
  documentId,
629
+ document,
601
630
  model,
602
631
  collectionType
603
632
  }) => {
@@ -676,6 +705,8 @@ const ReleaseActionModalForm = ({
676
705
  defaultMessage: "Add to release"
677
706
  }),
678
707
  icon: /* @__PURE__ */ jsxRuntime.jsx(icons.PaperPlane, {}),
708
+ // Entry is creating so we don't want to allow adding it to a release
709
+ disabled: !document,
679
710
  position: ["panel", "table-row"],
680
711
  dialog: {
681
712
  type: "modal",
@@ -714,6 +745,236 @@ const ReleaseActionModalForm = ({
714
745
  }
715
746
  };
716
747
  };
748
+ const getContentPermissions = (subject) => {
749
+ const permissions = {
750
+ publish: [
751
+ {
752
+ action: "plugin::content-manager.explorer.publish",
753
+ subject,
754
+ id: "",
755
+ actionParameters: {},
756
+ properties: {},
757
+ conditions: []
758
+ }
759
+ ]
760
+ };
761
+ return permissions;
762
+ };
763
+ const ReleaseAction = ({ documents, model }) => {
764
+ const { formatMessage } = reactIntl.useIntl();
765
+ const { toggleNotification } = strapiAdmin.useNotification();
766
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
767
+ const [{ query }] = strapiAdmin.useQueryParams();
768
+ const contentPermissions = getContentPermissions(model);
769
+ const {
770
+ allowedActions: { canPublish }
771
+ } = strapiAdmin.useRBAC(contentPermissions);
772
+ const {
773
+ allowedActions: { canCreate }
774
+ } = strapiAdmin.useRBAC(PERMISSIONS);
775
+ const response = useGetReleasesQuery();
776
+ const releases = response.data?.data;
777
+ const [createManyReleaseActions, { isLoading }] = useCreateManyReleaseActionsMutation();
778
+ const documentIds = documents.map((doc) => doc.documentId);
779
+ const handleSubmit = async (values) => {
780
+ const locale = query.plugins?.i18n?.locale;
781
+ const releaseActionEntries = documentIds.map(
782
+ (entryDocumentId) => ({
783
+ type: values.type,
784
+ contentType: model,
785
+ entryDocumentId,
786
+ locale
787
+ })
788
+ );
789
+ const response2 = await createManyReleaseActions({
790
+ body: releaseActionEntries,
791
+ params: { releaseId: values.releaseId }
792
+ });
793
+ if ("data" in response2) {
794
+ const notificationMessage = formatMessage(
795
+ {
796
+ id: "content-releases.content-manager-list-view.add-to-release.notification.success.message",
797
+ defaultMessage: "{entriesAlreadyInRelease} out of {totalEntries} entries were already in the release."
798
+ },
799
+ {
800
+ entriesAlreadyInRelease: response2.data.meta.entriesAlreadyInRelease,
801
+ totalEntries: response2.data.meta.totalEntries
802
+ }
803
+ );
804
+ const notification = {
805
+ type: "success",
806
+ title: formatMessage(
807
+ {
808
+ id: "content-releases.content-manager-list-view.add-to-release.notification.success.title",
809
+ defaultMessage: "Successfully added to release."
810
+ },
811
+ {
812
+ entriesAlreadyInRelease: response2.data.meta.entriesAlreadyInRelease,
813
+ totalEntries: response2.data.meta.totalEntries
814
+ }
815
+ ),
816
+ message: response2.data.meta.entriesAlreadyInRelease ? notificationMessage : ""
817
+ };
818
+ toggleNotification(notification);
819
+ return true;
820
+ }
821
+ if ("error" in response2) {
822
+ if (strapiAdmin.isFetchError(response2.error)) {
823
+ toggleNotification({
824
+ type: "warning",
825
+ message: formatAPIError(response2.error)
826
+ });
827
+ } else {
828
+ toggleNotification({
829
+ type: "warning",
830
+ message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
831
+ });
832
+ }
833
+ }
834
+ };
835
+ if (!canCreate || !canPublish)
836
+ return null;
837
+ return {
838
+ actionType: "release",
839
+ variant: "tertiary",
840
+ label: formatMessage({
841
+ id: "content-manager-list-view.add-to-release",
842
+ defaultMessage: "Add to Release"
843
+ }),
844
+ dialog: {
845
+ type: "modal",
846
+ title: formatMessage({
847
+ id: "content-manager-list-view.add-to-release",
848
+ defaultMessage: "Add to Release"
849
+ }),
850
+ content: ({ onClose }) => {
851
+ return /* @__PURE__ */ jsxRuntime.jsx(
852
+ formik.Formik,
853
+ {
854
+ onSubmit: async (values) => {
855
+ const data = await handleSubmit(values);
856
+ if (data) {
857
+ return onClose();
858
+ }
859
+ },
860
+ validationSchema: RELEASE_ACTION_FORM_SCHEMA,
861
+ initialValues: INITIAL_VALUES,
862
+ children: ({ values, setFieldValue }) => /* @__PURE__ */ jsxRuntime.jsxs(formik.Form, { children: [
863
+ 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: [
864
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingBottom: 6, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { required: true, children: [
865
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
866
+ id: "content-releases.content-manager-list-view.add-to-release.select-label",
867
+ defaultMessage: "Select a release"
868
+ }) }),
869
+ /* @__PURE__ */ jsxRuntime.jsx(
870
+ designSystem.SingleSelect,
871
+ {
872
+ placeholder: formatMessage({
873
+ id: "content-releases.content-manager-list-view.add-to-release.select-placeholder",
874
+ defaultMessage: "Select"
875
+ }),
876
+ onChange: (value) => setFieldValue("releaseId", value),
877
+ value: values.releaseId,
878
+ children: releases?.map((release) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: release.id, children: release.name }, release.id))
879
+ }
880
+ )
881
+ ] }) }),
882
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
883
+ id: "content-releases.content-manager-list-view.add-to-release.action-type-label",
884
+ defaultMessage: "What do you want to do with these entries?"
885
+ }) }),
886
+ /* @__PURE__ */ jsxRuntime.jsx(
887
+ ReleaseActionOptions,
888
+ {
889
+ selected: values.type,
890
+ handleChange: (e) => setFieldValue("type", e.target.value),
891
+ name: "type"
892
+ }
893
+ )
894
+ ] }) }),
895
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Footer, { children: [
896
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { onClick: onClose, variant: "tertiary", name: "cancel", children: formatMessage({
897
+ id: "content-releases.content-manager-list-view.add-to-release.cancel-button",
898
+ defaultMessage: "Cancel"
899
+ }) }),
900
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { type: "submit", disabled: !values.releaseId, loading: isLoading, children: formatMessage({
901
+ id: "content-releases.content-manager-list-view.add-to-release.continue-button",
902
+ defaultMessage: "Continue"
903
+ }) })
904
+ ] })
905
+ ] })
906
+ }
907
+ );
908
+ }
909
+ }
910
+ };
911
+ };
912
+ const useReleasesList = (contentTypeUid, documentId) => {
913
+ const listViewData = strapiAdmin.useTable("ListView", (state) => state.rows);
914
+ const documentIds = listViewData.map((entry) => entry.documentId);
915
+ const [{ query }] = strapiAdmin.useQueryParams();
916
+ const locale = query?.plugins?.i18n?.locale || void 0;
917
+ const response = useGetMappedEntriesInReleasesQuery(
918
+ { contentTypeUid, documentIds, locale },
919
+ { skip: !documentIds || !contentTypeUid || documentIds.length === 0 }
920
+ );
921
+ const mappedEntriesInReleases = response.data || {};
922
+ return mappedEntriesInReleases?.[documentId] || [];
923
+ };
924
+ const addColumnToTableHook = ({ displayedHeaders, layout }) => {
925
+ const { options } = layout;
926
+ if (!options?.draftAndPublish) {
927
+ return { displayedHeaders, layout };
928
+ }
929
+ return {
930
+ displayedHeaders: [
931
+ ...displayedHeaders,
932
+ {
933
+ searchable: false,
934
+ sortable: false,
935
+ name: "releases",
936
+ label: {
937
+ id: "content-releases.content-manager.list-view.releases.header",
938
+ defaultMessage: "To be released in"
939
+ },
940
+ cellFormatter: (props, _, { model }) => /* @__PURE__ */ jsxRuntime.jsx(ReleaseListCell, { ...props, model })
941
+ }
942
+ ],
943
+ layout
944
+ };
945
+ };
946
+ const ReleaseListCell = ({ documentId, model }) => {
947
+ const releases = useReleasesList(model, documentId);
948
+ const { formatMessage } = reactIntl.useIntl();
949
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Popover.Root, { children: [
950
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Popover.Trigger, { children: /* @__PURE__ */ jsxRuntime.jsx(
951
+ designSystem.Button,
952
+ {
953
+ variant: "ghost",
954
+ onClick: (e) => e.stopPropagation(),
955
+ endIcon: releases.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(icons.CaretDown, { width: "1.2rem", height: "1.2rem" }) : null,
956
+ children: /* @__PURE__ */ jsxRuntime.jsx(
957
+ designSystem.Typography,
958
+ {
959
+ style: { maxWidth: "252px", cursor: "pointer" },
960
+ textColor: "neutral800",
961
+ fontWeight: "regular",
962
+ children: releases.length > 0 ? formatMessage(
963
+ {
964
+ id: "content-releases.content-manager.list-view.releases-number",
965
+ defaultMessage: "{number} {number, plural, one {release} other {releases}}"
966
+ },
967
+ {
968
+ number: releases.length
969
+ }
970
+ ) : "-"
971
+ }
972
+ )
973
+ }
974
+ ) }),
975
+ /* @__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)) }) })
976
+ ] });
977
+ };
717
978
  const getTimezoneOffset = (timezone, date) => {
718
979
  try {
719
980
  const offsetPart = new Intl.DateTimeFormat("en", {
@@ -880,7 +1141,7 @@ const Root = ({ children }) => {
880
1141
  return (
881
1142
  // A user can access the dropdown if they have permissions to delete a release-action OR update a release
882
1143
  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(
1144
+ /* @__PURE__ */ jsxRuntime.jsx(StyledMoreButton, { variant: "tertiary", endIcon: null, paddingLeft: "7px", paddingRight: "7px", children: /* @__PURE__ */ jsxRuntime.jsx(
884
1145
  designSystem.AccessibleIcon,
885
1146
  {
886
1147
  label: formatMessage({
@@ -894,13 +1155,23 @@ const Root = ({ children }) => {
894
1155
  ] }) : null
895
1156
  );
896
1157
  };
1158
+ const StyledMoreButton = styledComponents.styled(designSystem.Menu.Trigger)`
1159
+ & > span {
1160
+ display: flex;
1161
+ }
1162
+ `;
897
1163
  const ReleaseActionMenu = {
898
1164
  Root,
899
1165
  EditReleaseItem,
900
1166
  DeleteReleaseActionItem,
901
1167
  ReleaseActionEntryLinkItem
902
1168
  };
903
- const Panel = ({ model, documentId, collectionType }) => {
1169
+ const Panel = ({
1170
+ model,
1171
+ document,
1172
+ documentId,
1173
+ collectionType
1174
+ }) => {
904
1175
  const [{ query }] = strapiAdmin.useQueryParams();
905
1176
  const locale = query.plugins?.i18n?.locale;
906
1177
  const {
@@ -909,12 +1180,17 @@ const Panel = ({ model, documentId, collectionType }) => {
909
1180
  const { formatMessage, formatDate, formatTime } = reactIntl.useIntl();
910
1181
  const { allowedActions } = strapiAdmin.useRBAC(PERMISSIONS);
911
1182
  const { canRead, canDeleteAction } = allowedActions;
912
- const response = useGetReleasesForEntryQuery({
913
- contentType: model,
914
- entryDocumentId: documentId,
915
- locale,
916
- hasEntryAttached: true
917
- });
1183
+ const response = useGetReleasesForEntryQuery(
1184
+ {
1185
+ contentType: model,
1186
+ entryDocumentId: documentId,
1187
+ locale,
1188
+ hasEntryAttached: true
1189
+ },
1190
+ {
1191
+ skip: !document
1192
+ }
1193
+ );
918
1194
  const releases = response.data?.data;
919
1195
  const getReleaseColorVariant = (actionType, shade) => {
920
1196
  if (actionType === "unpublish") {
@@ -928,7 +1204,7 @@ const Panel = ({ model, documentId, collectionType }) => {
928
1204
  if (collectionType === "collection-types" && (!documentId || documentId === "create")) {
929
1205
  return null;
930
1206
  }
931
- if (releases && releases.length === 0) {
1207
+ if (!releases || releases.length === 0) {
932
1208
  return null;
933
1209
  }
934
1210
  return {
@@ -1013,9 +1289,6 @@ const Panel = ({ model, documentId, collectionType }) => {
1013
1289
  };
1014
1290
  const pluginId = "content-releases";
1015
1291
  const prefixPluginTranslations = (trad, pluginId2) => {
1016
- if (!pluginId2) {
1017
- throw new TypeError("pluginId can't be empty");
1018
- }
1019
1292
  return Object.keys(trad).reduce((acc, current) => {
1020
1293
  acc[`${pluginId2}.${current}`] = trad[current];
1021
1294
  return acc;
@@ -1033,7 +1306,7 @@ const admin = {
1033
1306
  id: `${pluginId}.plugin.name`,
1034
1307
  defaultMessage: "Releases"
1035
1308
  },
1036
- Component: () => Promise.resolve().then(() => require("./App-D-lWdVb2.js")).then((mod) => ({ default: mod.App })),
1309
+ Component: () => Promise.resolve().then(() => require("./App-lx4Ucy9W.js")).then((mod) => ({ default: mod.App })),
1037
1310
  permissions: PERMISSIONS.main,
1038
1311
  position: 2
1039
1312
  });
@@ -1057,10 +1330,18 @@ const admin = {
1057
1330
  },
1058
1331
  permissions: [],
1059
1332
  async Component() {
1060
- const { ProtectedReleasesSettingsPage } = await Promise.resolve().then(() => require("./ReleasesSettingsPage-xfAoY8N3.js"));
1333
+ const { ProtectedReleasesSettingsPage } = await Promise.resolve().then(() => require("./ReleasesSettingsPage-T5VEAV03.js"));
1061
1334
  return { default: ProtectedReleasesSettingsPage };
1062
1335
  }
1063
1336
  });
1337
+ if ("addBulkAction" in contentManagerPluginApis && typeof contentManagerPluginApis.addBulkAction === "function") {
1338
+ contentManagerPluginApis.addBulkAction((actions) => {
1339
+ const deleteActionIndex = actions.findIndex((action) => action.type === "delete");
1340
+ actions.splice(deleteActionIndex, 0, ReleaseAction);
1341
+ return actions;
1342
+ });
1343
+ }
1344
+ app.registerHook("Admin/CM/pages/ListView/inject-column-in-table", addColumnToTableHook);
1064
1345
  } else if (!window.strapi.features.isEnabled("cms-content-releases") && window.strapi?.flags?.promoteEE) {
1065
1346
  app.addSettingsLink("global", {
1066
1347
  id: pluginId,
@@ -1081,7 +1362,7 @@ const admin = {
1081
1362
  async registerTrads({ locales }) {
1082
1363
  const importedTrads = await Promise.all(
1083
1364
  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 }) => {
1365
+ return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-BWPPsSH-.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
1085
1366
  return {
1086
1367
  data: prefixPluginTranslations(data, "content-releases"),
1087
1368
  locale
@@ -1115,4 +1396,4 @@ exports.usePublishReleaseMutation = usePublishReleaseMutation;
1115
1396
  exports.useUpdateReleaseActionMutation = useUpdateReleaseActionMutation;
1116
1397
  exports.useUpdateReleaseMutation = useUpdateReleaseMutation;
1117
1398
  exports.useUpdateReleaseSettingsMutation = useUpdateReleaseSettingsMutation;
1118
- //# sourceMappingURL=index-jnv9zdcE.js.map
1399
+ //# sourceMappingURL=index-Cl3tM1YW.js.map