@strapi/content-releases 0.0.0-experimental.d8a676a242377cee820b59b21a05d47290d9ac73 → 0.0.0-experimental.d954d57341a6623992a0d211daaec8e245c3517d

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 (110) hide show
  1. package/dist/_chunks/{App-p8aKBitd.js → App-CqbuK4M6.js} +426 -427
  2. package/dist/_chunks/App-CqbuK4M6.js.map +1 -0
  3. package/dist/_chunks/{App-bpzO2Ljh.mjs → App-Do-Rnv0A.mjs} +406 -406
  4. package/dist/_chunks/App-Do-Rnv0A.mjs.map +1 -0
  5. package/dist/_chunks/{PurchaseContentReleases-YhAPgpG9.js → PurchaseContentReleases-Be3acS2L.js} +8 -7
  6. package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js.map +1 -0
  7. package/dist/_chunks/{PurchaseContentReleases-Clm0iACO.mjs → PurchaseContentReleases-_MxP6-Dt.mjs} +9 -8
  8. package/dist/_chunks/PurchaseContentReleases-_MxP6-Dt.mjs.map +1 -0
  9. package/dist/_chunks/{en-WuuhP6Bn.mjs → en-B9Ur3VsE.mjs} +11 -3
  10. package/dist/_chunks/en-B9Ur3VsE.mjs.map +1 -0
  11. package/dist/_chunks/{en-gcJJ5htG.js → en-DtFJ5ViE.js} +11 -3
  12. package/dist/_chunks/en-DtFJ5ViE.js.map +1 -0
  13. package/dist/_chunks/{index-AECgcaDa.mjs → index-D_pgdqQL.mjs} +244 -247
  14. package/dist/_chunks/index-D_pgdqQL.mjs.map +1 -0
  15. package/dist/_chunks/{index-fP3qoWZ4.js → index-Tedsw4GC.js} +244 -249
  16. package/dist/_chunks/index-Tedsw4GC.js.map +1 -0
  17. package/dist/admin/index.js +1 -15
  18. package/dist/admin/index.js.map +1 -1
  19. package/dist/admin/index.mjs +2 -16
  20. package/dist/admin/index.mjs.map +1 -1
  21. package/dist/admin/src/components/CMReleasesContainer.d.ts +22 -0
  22. package/dist/admin/src/components/RelativeTime.d.ts +28 -0
  23. package/dist/admin/src/components/ReleaseAction.d.ts +3 -0
  24. package/dist/admin/src/components/ReleaseActionMenu.d.ts +26 -0
  25. package/dist/admin/src/components/ReleaseActionOptions.d.ts +9 -0
  26. package/dist/admin/src/components/ReleaseListCell.d.ts +0 -0
  27. package/dist/admin/src/components/ReleaseModal.d.ts +17 -0
  28. package/dist/admin/src/constants.d.ts +58 -0
  29. package/dist/admin/src/index.d.ts +3 -0
  30. package/dist/admin/src/pages/App.d.ts +1 -0
  31. package/dist/admin/src/pages/PurchaseContentReleases.d.ts +2 -0
  32. package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +2 -0
  33. package/dist/admin/src/pages/ReleasesPage.d.ts +8 -0
  34. package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +181 -0
  35. package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +39 -0
  36. package/dist/admin/src/pluginId.d.ts +1 -0
  37. package/dist/admin/src/services/release.d.ts +105 -0
  38. package/dist/admin/src/store/hooks.d.ts +7 -0
  39. package/dist/admin/src/utils/api.d.ts +6 -0
  40. package/dist/admin/src/utils/prefixPluginTranslations.d.ts +3 -0
  41. package/dist/admin/src/utils/time.d.ts +1 -0
  42. package/dist/server/index.js +358 -237
  43. package/dist/server/index.js.map +1 -1
  44. package/dist/server/index.mjs +359 -237
  45. package/dist/server/index.mjs.map +1 -1
  46. package/dist/server/src/bootstrap.d.ts +5 -0
  47. package/dist/server/src/bootstrap.d.ts.map +1 -0
  48. package/dist/server/src/constants.d.ts +12 -0
  49. package/dist/server/src/constants.d.ts.map +1 -0
  50. package/dist/server/src/content-types/index.d.ts +99 -0
  51. package/dist/server/src/content-types/index.d.ts.map +1 -0
  52. package/dist/server/src/content-types/release/index.d.ts +48 -0
  53. package/dist/server/src/content-types/release/index.d.ts.map +1 -0
  54. package/dist/server/src/content-types/release/schema.d.ts +47 -0
  55. package/dist/server/src/content-types/release/schema.d.ts.map +1 -0
  56. package/dist/server/src/content-types/release-action/index.d.ts +50 -0
  57. package/dist/server/src/content-types/release-action/index.d.ts.map +1 -0
  58. package/dist/server/src/content-types/release-action/schema.d.ts +49 -0
  59. package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -0
  60. package/dist/server/src/controllers/index.d.ts +20 -0
  61. package/dist/server/src/controllers/index.d.ts.map +1 -0
  62. package/dist/server/src/controllers/release-action.d.ts +10 -0
  63. package/dist/server/src/controllers/release-action.d.ts.map +1 -0
  64. package/dist/server/src/controllers/release.d.ts +12 -0
  65. package/dist/server/src/controllers/release.d.ts.map +1 -0
  66. package/dist/server/src/controllers/validation/release-action.d.ts +8 -0
  67. package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -0
  68. package/dist/server/src/controllers/validation/release.d.ts +2 -0
  69. package/dist/server/src/controllers/validation/release.d.ts.map +1 -0
  70. package/dist/server/src/destroy.d.ts +5 -0
  71. package/dist/server/src/destroy.d.ts.map +1 -0
  72. package/dist/server/src/index.d.ts +2096 -0
  73. package/dist/server/src/index.d.ts.map +1 -0
  74. package/dist/server/src/migrations/index.d.ts +13 -0
  75. package/dist/server/src/migrations/index.d.ts.map +1 -0
  76. package/dist/server/src/register.d.ts +5 -0
  77. package/dist/server/src/register.d.ts.map +1 -0
  78. package/dist/server/src/routes/index.d.ts +35 -0
  79. package/dist/server/src/routes/index.d.ts.map +1 -0
  80. package/dist/server/src/routes/release-action.d.ts +18 -0
  81. package/dist/server/src/routes/release-action.d.ts.map +1 -0
  82. package/dist/server/src/routes/release.d.ts +18 -0
  83. package/dist/server/src/routes/release.d.ts.map +1 -0
  84. package/dist/server/src/services/index.d.ts +1826 -0
  85. package/dist/server/src/services/index.d.ts.map +1 -0
  86. package/dist/server/src/services/release.d.ts +66 -0
  87. package/dist/server/src/services/release.d.ts.map +1 -0
  88. package/dist/server/src/services/scheduling.d.ts +18 -0
  89. package/dist/server/src/services/scheduling.d.ts.map +1 -0
  90. package/dist/server/src/services/validation.d.ts +18 -0
  91. package/dist/server/src/services/validation.d.ts.map +1 -0
  92. package/dist/server/src/utils/index.d.ts +14 -0
  93. package/dist/server/src/utils/index.d.ts.map +1 -0
  94. package/dist/shared/contracts/release-actions.d.ts +131 -0
  95. package/dist/shared/contracts/release-actions.d.ts.map +1 -0
  96. package/dist/shared/contracts/releases.d.ts +182 -0
  97. package/dist/shared/contracts/releases.d.ts.map +1 -0
  98. package/dist/shared/types.d.ts +24 -0
  99. package/dist/shared/types.d.ts.map +1 -0
  100. package/dist/shared/validation-schemas.d.ts +2 -0
  101. package/dist/shared/validation-schemas.d.ts.map +1 -0
  102. package/package.json +29 -36
  103. package/dist/_chunks/App-bpzO2Ljh.mjs.map +0 -1
  104. package/dist/_chunks/App-p8aKBitd.js.map +0 -1
  105. package/dist/_chunks/PurchaseContentReleases-Clm0iACO.mjs.map +0 -1
  106. package/dist/_chunks/PurchaseContentReleases-YhAPgpG9.js.map +0 -1
  107. package/dist/_chunks/en-WuuhP6Bn.mjs.map +0 -1
  108. package/dist/_chunks/en-gcJJ5htG.js.map +0 -1
  109. package/dist/_chunks/index-AECgcaDa.mjs.map +0 -1
  110. package/dist/_chunks/index-fP3qoWZ4.js.map +0 -1
@@ -1,20 +1,17 @@
1
1
  "use strict";
2
- const helperPlugin = require("@strapi/helper-plugin");
3
2
  const icons = require("@strapi/icons");
4
3
  const jsxRuntime = require("react/jsx-runtime");
5
4
  const React = require("react");
6
5
  const query = require("@reduxjs/toolkit/query");
6
+ const strapiAdmin = require("@strapi/admin/strapi-admin");
7
+ const strapiAdmin$1 = require("@strapi/content-manager/strapi-admin");
7
8
  const designSystem = require("@strapi/design-system");
8
- const v2 = require("@strapi/design-system/v2");
9
- const axios = require("axios");
9
+ const symbols = require("@strapi/icons/symbols");
10
10
  const formik = require("formik");
11
11
  const reactIntl = require("react-intl");
12
12
  const reactRouterDom = require("react-router-dom");
13
13
  const yup = require("yup");
14
- const react = require("@reduxjs/toolkit/query/react");
15
- const styled = require("styled-components");
16
- const reactRedux = require("react-redux");
17
- const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
14
+ const styledComponents = require("styled-components");
18
15
  function _interopNamespace(e) {
19
16
  if (e && e.__esModule)
20
17
  return e;
@@ -35,7 +32,6 @@ function _interopNamespace(e) {
35
32
  }
36
33
  const React__namespace = /* @__PURE__ */ _interopNamespace(React);
37
34
  const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
38
- const styled__default = /* @__PURE__ */ _interopDefault(styled);
39
35
  const __variableDynamicImportRuntimeHelper = (glob, path) => {
40
36
  const v = glob[path];
41
37
  if (v) {
@@ -117,49 +113,9 @@ const PERMISSIONS = {
117
113
  }
118
114
  ]
119
115
  };
120
- const pluginId = "content-releases";
121
- const axiosBaseQuery = async ({
122
- url,
123
- method,
124
- data,
125
- config
126
- }) => {
127
- try {
128
- const { get, post, del, put } = helperPlugin.getFetchClient();
129
- if (method === "POST") {
130
- const result2 = await post(url, data, config);
131
- return { data: result2.data };
132
- }
133
- if (method === "DELETE") {
134
- const result2 = await del(url, config);
135
- return { data: result2.data };
136
- }
137
- if (method === "PUT") {
138
- const result2 = await put(url, data, config);
139
- return { data: result2.data };
140
- }
141
- const result = await get(url, config);
142
- return { data: result.data };
143
- } catch (error) {
144
- const err = error;
145
- return {
146
- error: {
147
- status: err.response?.status,
148
- code: err.code,
149
- response: {
150
- data: err.response?.data
151
- }
152
- }
153
- };
154
- }
155
- };
156
- const isAxiosError = (err) => {
157
- return typeof err === "object" && err !== null && "response" in err && typeof err.response === "object" && err.response !== null && "data" in err.response;
158
- };
159
- const releaseApi = react.createApi({
160
- reducerPath: pluginId,
161
- baseQuery: axiosBaseQuery,
162
- tagTypes: ["Release", "ReleaseAction"],
116
+ const releaseApi = strapiAdmin.adminApi.enhanceEndpoints({
117
+ addTagTypes: ["Release", "ReleaseAction", "EntriesInRelease"]
118
+ }).injectEndpoints({
163
119
  endpoints: (build) => {
164
120
  return {
165
121
  getReleasesForEntry: build.query({
@@ -274,6 +230,20 @@ const releaseApi = react.createApi({
274
230
  { type: "ReleaseAction", id: "LIST" }
275
231
  ]
276
232
  }),
233
+ createManyReleaseActions: build.mutation({
234
+ query({ body, params }) {
235
+ return {
236
+ url: `/content-releases/${params.releaseId}/actions/bulk`,
237
+ method: "POST",
238
+ data: body
239
+ };
240
+ },
241
+ invalidatesTags: [
242
+ { type: "Release", id: "LIST" },
243
+ { type: "ReleaseAction", id: "LIST" },
244
+ { type: "EntriesInRelease" }
245
+ ]
246
+ }),
277
247
  updateReleaseAction: build.mutation({
278
248
  query({ body, params }) {
279
249
  return {
@@ -289,13 +259,17 @@ const releaseApi = react.createApi({
289
259
  ...query2
290
260
  };
291
261
  const patchResult = dispatch(
292
- releaseApi.util.updateQueryData("getReleaseActions", paramsWithoutActionId, (draft) => {
293
- const [key, index] = actionPath;
294
- const action = draft.data[key][index];
295
- if (action) {
296
- action.type = body.type;
262
+ releaseApi.util.updateQueryData(
263
+ "getReleaseActions",
264
+ paramsWithoutActionId,
265
+ (draft) => {
266
+ const [key, index] = actionPath;
267
+ const action = draft.data[key][index];
268
+ if (action) {
269
+ action.type = body.type;
270
+ }
297
271
  }
298
- })
272
+ )
299
273
  );
300
274
  try {
301
275
  await queryFulfilled;
@@ -311,9 +285,11 @@ const releaseApi = react.createApi({
311
285
  method: "DELETE"
312
286
  };
313
287
  },
314
- invalidatesTags: [
288
+ invalidatesTags: (result, error, arg) => [
315
289
  { type: "Release", id: "LIST" },
316
- { type: "ReleaseAction", id: "LIST" }
290
+ { type: "Release", id: arg.params.releaseId },
291
+ { type: "ReleaseAction", id: "LIST" },
292
+ { type: "EntriesInRelease" }
317
293
  ]
318
294
  }),
319
295
  publishRelease: build.mutation({
@@ -332,7 +308,22 @@ const releaseApi = react.createApi({
332
308
  method: "DELETE"
333
309
  };
334
310
  },
335
- invalidatesTags: () => [{ type: "Release", id: "LIST" }]
311
+ invalidatesTags: () => [{ type: "Release", id: "LIST" }, { type: "EntriesInRelease" }]
312
+ }),
313
+ getMappedEntriesInReleases: build.query({
314
+ query(params) {
315
+ return {
316
+ url: "/content-releases/mapEntriesToReleases",
317
+ method: "GET",
318
+ config: {
319
+ params
320
+ }
321
+ };
322
+ },
323
+ transformResponse(response) {
324
+ return response.data;
325
+ },
326
+ providesTags: [{ type: "EntriesInRelease" }]
336
327
  })
337
328
  };
338
329
  }
@@ -344,11 +335,13 @@ const {
344
335
  useGetReleaseActionsQuery,
345
336
  useCreateReleaseMutation,
346
337
  useCreateReleaseActionMutation,
338
+ useCreateManyReleaseActionsMutation,
347
339
  useUpdateReleaseMutation,
348
340
  useUpdateReleaseActionMutation,
349
341
  usePublishReleaseMutation,
350
342
  useDeleteReleaseActionMutation,
351
- useDeleteReleaseMutation
343
+ useDeleteReleaseMutation,
344
+ useGetMappedEntriesInReleasesQuery
352
345
  } = releaseApi;
353
346
  const getTimezoneOffset = (timezone, date) => {
354
347
  try {
@@ -366,16 +359,12 @@ const getTimezoneOffset = (timezone, date) => {
366
359
  return "";
367
360
  }
368
361
  };
369
- const useTypedDispatch = reactRedux.useDispatch;
370
- const useTypedSelector = reactRedux.useSelector;
371
- const StyledMenuItem = styled__default.default(v2.Menu.Item)`
362
+ const StyledMenuItem = styledComponents.styled(designSystem.Menu.Item)`
372
363
  &:hover {
373
- background: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}100`]};
364
+ background: ${({ theme, $variant = "neutral" }) => theme.colors[`${$variant}100`]};
374
365
 
375
366
  svg {
376
- path {
377
- fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
378
- }
367
+ fill: ${({ theme, $variant = "neutral" }) => theme.colors[`${$variant}600`]};
379
368
  }
380
369
 
381
370
  a {
@@ -384,9 +373,7 @@ const StyledMenuItem = styled__default.default(v2.Menu.Item)`
384
373
  }
385
374
 
386
375
  svg {
387
- path {
388
- fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
389
- }
376
+ fill: ${({ theme, $variant = "neutral" }) => theme.colors[`${$variant}600`]};
390
377
  }
391
378
 
392
379
  a {
@@ -398,15 +385,14 @@ const StyledMenuItem = styled__default.default(v2.Menu.Item)`
398
385
  width: 100%;
399
386
  }
400
387
  `;
401
- const StyledIconButton = styled__default.default(designSystem.IconButton)`
402
- /* Setting this style inline with borderColor will not apply the style */
403
- border: ${({ theme }) => `1px solid ${theme.colors.neutral200}`};
404
- `;
405
388
  const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
406
389
  const { formatMessage } = reactIntl.useIntl();
407
- const toggleNotification = helperPlugin.useNotification();
408
- const { formatAPIError } = helperPlugin.useAPIErrorHandler();
390
+ const { toggleNotification } = strapiAdmin.useNotification();
391
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
409
392
  const [deleteReleaseAction] = useDeleteReleaseActionMutation();
393
+ const {
394
+ allowedActions: { canDeleteAction }
395
+ } = strapiAdmin.useRBAC(PERMISSIONS);
410
396
  const handleDeleteAction = async () => {
411
397
  const response = await deleteReleaseAction({
412
398
  params: { releaseId, actionId }
@@ -422,26 +408,29 @@ const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
422
408
  return;
423
409
  }
424
410
  if ("error" in response) {
425
- if (axios.isAxiosError(response.error)) {
411
+ if (strapiAdmin.isFetchError(response.error)) {
426
412
  toggleNotification({
427
- type: "warning",
413
+ type: "danger",
428
414
  message: formatAPIError(response.error)
429
415
  });
430
416
  } else {
431
417
  toggleNotification({
432
- type: "warning",
418
+ type: "danger",
433
419
  message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
434
420
  });
435
421
  }
436
422
  }
437
423
  };
438
- return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: PERMISSIONS.deleteAction, children: /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { variant: "danger", onSelect: handleDeleteAction, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
439
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: icons.Cross, width: 3, height: 3 }),
424
+ if (!canDeleteAction) {
425
+ return null;
426
+ }
427
+ return /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { $variant: "danger", onSelect: handleDeleteAction, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
428
+ /* @__PURE__ */ jsxRuntime.jsx(icons.Cross, { width: "1.6rem", height: "1.6rem" }),
440
429
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "danger600", variant: "omega", children: formatMessage({
441
430
  id: "content-releases.content-manager-edit-view.remove-from-release",
442
431
  defaultMessage: "Remove from release"
443
432
  }) })
444
- ] }) }) });
433
+ ] }) });
445
434
  };
446
435
  const ReleaseActionEntryLinkItem = ({
447
436
  contentTypeUid,
@@ -449,77 +438,79 @@ const ReleaseActionEntryLinkItem = ({
449
438
  locale
450
439
  }) => {
451
440
  const { formatMessage } = reactIntl.useIntl();
452
- const collectionTypePermissions = useTypedSelector(
453
- (state) => state.rbacProvider.collectionTypesRelatedPermissions
454
- );
455
- const updatePermissions = contentTypeUid ? collectionTypePermissions[contentTypeUid]?.["plugin::content-manager.explorer.update"] : [];
456
- const canUpdateEntryForLocale = Boolean(
457
- !locale || updatePermissions?.find(
458
- (permission) => permission.properties?.locales?.includes(locale)
459
- )
460
- );
441
+ const userPermissions = strapiAdmin.useAuth("ReleaseActionEntryLinkItem", (state) => state.permissions);
442
+ const canUpdateEntryForLocale = React__namespace.useMemo(() => {
443
+ const updatePermissions = userPermissions.find(
444
+ (permission) => permission.subject === contentTypeUid && permission.action === "plugin::content-manager.explorer.update"
445
+ );
446
+ if (!updatePermissions) {
447
+ return false;
448
+ }
449
+ return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));
450
+ }, [contentTypeUid, locale, userPermissions]);
451
+ const {
452
+ allowedActions: { canUpdate: canUpdateContentType }
453
+ } = strapiAdmin.useRBAC({
454
+ updateContentType: [
455
+ {
456
+ action: "plugin::content-manager.explorer.update",
457
+ subject: contentTypeUid
458
+ }
459
+ ]
460
+ });
461
+ if (!canUpdateContentType || !canUpdateEntryForLocale) {
462
+ return null;
463
+ }
461
464
  return /* @__PURE__ */ jsxRuntime.jsx(
462
- helperPlugin.CheckPermissions,
465
+ StyledMenuItem,
463
466
  {
464
- permissions: [
465
- {
466
- action: "plugin::content-manager.explorer.update",
467
- subject: contentTypeUid
468
- }
469
- ],
470
- children: canUpdateEntryForLocale && /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
471
- v2.Link,
472
- {
473
- as: reactRouterDom.NavLink,
474
- to: {
475
- pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
476
- search: locale && `?plugins[i18n][locale]=${locale}`
477
- },
478
- startIcon: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: icons.Pencil, width: 3, height: 3 }),
479
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", children: formatMessage({
480
- id: "content-releases.content-manager-edit-view.edit-entry",
481
- defaultMessage: "Edit entry"
482
- }) })
483
- }
484
- ) })
467
+ tag: reactRouterDom.Link,
468
+ isLink: true,
469
+ to: {
470
+ pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
471
+ search: locale && `?plugins[i18n][locale]=${locale}`
472
+ },
473
+ children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
474
+ /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, { width: "1.6rem", height: "1.6rem" }),
475
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", children: formatMessage({
476
+ id: "content-releases.content-manager-edit-view.edit-entry",
477
+ defaultMessage: "Edit entry"
478
+ }) })
479
+ ] })
485
480
  }
486
481
  );
487
482
  };
488
483
  const EditReleaseItem = ({ releaseId }) => {
489
484
  const { formatMessage } = reactIntl.useIntl();
490
- return /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
491
- v2.Link,
492
- {
493
- as: reactRouterDom.NavLink,
494
- to: `/plugins/content-releases/${releaseId}`,
495
- startIcon: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: icons.Pencil, width: 3, height: 3 }),
496
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", children: formatMessage({
485
+ return (
486
+ /* @ts-expect-error inference isn't working in DS */
487
+ /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { tag: reactRouterDom.Link, isLink: true, to: `/plugins/content-releases/${releaseId}`, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
488
+ /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, { width: "1.6rem", height: "1.6rem" }),
489
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", children: formatMessage({
497
490
  id: "content-releases.content-manager-edit-view.edit-release",
498
491
  defaultMessage: "Edit release"
499
492
  }) })
500
- }
501
- ) });
493
+ ] }) })
494
+ );
502
495
  };
503
- const Root = ({ children, hasTriggerBorder = false }) => {
496
+ const Root = ({ children }) => {
504
497
  const { formatMessage } = reactIntl.useIntl();
498
+ const { allowedActions } = strapiAdmin.useRBAC(PERMISSIONS);
505
499
  return (
506
500
  // A user can access the dropdown if they have permissions to delete a release-action OR update a release
507
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: [...PERMISSIONS.deleteAction, ...PERMISSIONS.update], children: /* @__PURE__ */ jsxRuntime.jsxs(v2.Menu.Root, { children: [
508
- /* @__PURE__ */ jsxRuntime.jsx(
509
- v2.Menu.Trigger,
501
+ allowedActions.canDeleteAction || allowedActions.canUpdate ? /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Root, { children: [
502
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.Trigger, { paddingLeft: 2, paddingRight: 2, children: /* @__PURE__ */ jsxRuntime.jsx(
503
+ designSystem.AccessibleIcon,
510
504
  {
511
- as: hasTriggerBorder ? StyledIconButton : designSystem.IconButton,
512
- paddingLeft: 2,
513
- paddingRight: 2,
514
- "aria-label": formatMessage({
505
+ label: formatMessage({
515
506
  id: "content-releases.content-manager-edit-view.release-action-menu",
516
507
  defaultMessage: "Release action options"
517
508
  }),
518
- icon: /* @__PURE__ */ jsxRuntime.jsx(icons.More, {})
509
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.More, {})
519
510
  }
520
- ),
521
- /* @__PURE__ */ jsxRuntime.jsx(v2.Menu.Content, { top: 1, popoverPlacement: "bottom-end", children })
522
- ] }) })
511
+ ) }),
512
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.Content, { top: 1, popoverPlacement: "bottom-end", children })
513
+ ] }) : null
523
514
  );
524
515
  };
525
516
  const ReleaseActionMenu = {
@@ -534,11 +525,11 @@ const getBorderLeftRadiusValue = (actionType) => {
534
525
  const getBorderRightRadiusValue = (actionType) => {
535
526
  return actionType === "publish" ? 0 : 1;
536
527
  };
537
- const FieldWrapper = styled__default.default(designSystem.Field)`
538
- border-top-left-radius: ${({ actionType, theme }) => theme.spaces[getBorderLeftRadiusValue(actionType)]};
539
- border-bottom-left-radius: ${({ actionType, theme }) => theme.spaces[getBorderLeftRadiusValue(actionType)]};
540
- border-top-right-radius: ${({ actionType, theme }) => theme.spaces[getBorderRightRadiusValue(actionType)]};
541
- border-bottom-right-radius: ${({ actionType, theme }) => theme.spaces[getBorderRightRadiusValue(actionType)]};
528
+ const FieldWrapper = styledComponents.styled(designSystem.Field.Root)`
529
+ border-top-left-radius: ${({ $actionType, theme }) => theme.spaces[getBorderLeftRadiusValue($actionType)]};
530
+ border-bottom-left-radius: ${({ $actionType, theme }) => theme.spaces[getBorderLeftRadiusValue($actionType)]};
531
+ border-top-right-radius: ${({ $actionType, theme }) => theme.spaces[getBorderRightRadiusValue($actionType)]};
532
+ border-bottom-right-radius: ${({ $actionType, theme }) => theme.spaces[getBorderRightRadiusValue($actionType)]};
542
533
 
543
534
  > label {
544
535
  color: inherit;
@@ -549,14 +540,14 @@ const FieldWrapper = styled__default.default(designSystem.Field)`
549
540
  }
550
541
 
551
542
  &[data-checked='true'] {
552
- color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
553
- background-color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary100 : theme.colors.danger100};
554
- border-color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
543
+ color: ${({ theme, $actionType }) => $actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
544
+ background-color: ${({ theme, $actionType }) => $actionType === "publish" ? theme.colors.primary100 : theme.colors.danger100};
545
+ border-color: ${({ theme, $actionType }) => $actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
555
546
  }
556
547
 
557
548
  &[data-checked='false'] {
558
- border-left: ${({ actionType }) => actionType === "unpublish" && "none"};
559
- border-right: ${({ actionType }) => actionType === "publish" && "none"};
549
+ border-left: ${({ $actionType }) => $actionType === "unpublish" && "none"};
550
+ border-right: ${({ $actionType }) => $actionType === "publish" && "none"};
560
551
  }
561
552
 
562
553
  &[data-checked='false'][data-disabled='false']:hover {
@@ -585,7 +576,7 @@ const ActionOption = ({
585
576
  return /* @__PURE__ */ jsxRuntime.jsx(
586
577
  FieldWrapper,
587
578
  {
588
- actionType,
579
+ $actionType: actionType,
589
580
  background: "primary0",
590
581
  borderColor: "neutral200",
591
582
  color: selected === actionType ? "primary600" : "neutral600",
@@ -593,12 +584,11 @@ const ActionOption = ({
593
584
  cursor: "pointer",
594
585
  "data-checked": selected === actionType,
595
586
  "data-disabled": disabled && selected !== actionType,
596
- children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.FieldLabel, { htmlFor: `${name}-${actionType}`, children: [
587
+ children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Label, { children: [
597
588
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { children: /* @__PURE__ */ jsxRuntime.jsx(
598
- designSystem.FieldInput,
589
+ designSystem.Field.Input,
599
590
  {
600
591
  type: "radio",
601
- id: `${name}-${actionType}`,
602
592
  name,
603
593
  checked: selected === actionType,
604
594
  onChange: handleChange,
@@ -651,19 +641,20 @@ const INITIAL_VALUES = {
651
641
  const NoReleases = () => {
652
642
  const { formatMessage } = reactIntl.useIntl();
653
643
  return /* @__PURE__ */ jsxRuntime.jsx(
654
- helperPlugin.NoContent,
644
+ designSystem.EmptyStateLayout,
655
645
  {
656
- content: {
646
+ icon: /* @__PURE__ */ jsxRuntime.jsx(symbols.EmptyDocuments, { width: "16rem" }),
647
+ content: formatMessage({
657
648
  id: "content-releases.content-manager-edit-view.add-to-release.no-releases-message",
658
649
  defaultMessage: "No available releases. Open the list of releases and create a new one from there."
659
- },
650
+ }),
660
651
  action: /* @__PURE__ */ jsxRuntime.jsx(
661
- v2.LinkButton,
652
+ designSystem.LinkButton,
662
653
  {
663
654
  to: {
664
655
  pathname: "/plugins/content-releases"
665
656
  },
666
- as: reactRouterDom.Link,
657
+ tag: reactRouterDom.Link,
667
658
  variant: "secondary",
668
659
  children: formatMessage({
669
660
  id: "content-releases.content-manager-edit-view.add-to-release.redirect-button",
@@ -675,15 +666,16 @@ const NoReleases = () => {
675
666
  );
676
667
  };
677
668
  const AddActionToReleaseModal = ({
678
- handleClose,
669
+ open,
670
+ onOpenChange,
679
671
  contentTypeUid,
680
672
  entryId
681
673
  }) => {
682
- const releaseHeaderId = React__namespace.useId();
683
674
  const { formatMessage } = reactIntl.useIntl();
684
- const toggleNotification = helperPlugin.useNotification();
685
- const { formatAPIError } = helperPlugin.useAPIErrorHandler();
686
- const { modifiedData } = helperPlugin.useCMEditViewDataManager();
675
+ const { toggleNotification } = strapiAdmin.useNotification();
676
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
677
+ const [{ query: query2 }] = strapiAdmin.useQueryParams();
678
+ const locale = query2.plugins?.i18n?.locale;
687
679
  const response = useGetReleasesForEntryQuery({
688
680
  contentTypeUid,
689
681
  entryId,
@@ -692,7 +684,6 @@ const AddActionToReleaseModal = ({
692
684
  const releases = response.data?.data;
693
685
  const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();
694
686
  const handleSubmit = async (values) => {
695
- const locale = modifiedData.locale;
696
687
  const releaseActionEntry = {
697
688
  contentType: contentTypeUid,
698
689
  id: entryId,
@@ -710,25 +701,25 @@ const AddActionToReleaseModal = ({
710
701
  defaultMessage: "Entry added to release"
711
702
  })
712
703
  });
713
- handleClose();
704
+ onOpenChange();
714
705
  return;
715
706
  }
716
707
  if ("error" in response2) {
717
- if (axios.isAxiosError(response2.error)) {
708
+ if (strapiAdmin.isFetchError(response2.error)) {
718
709
  toggleNotification({
719
- type: "warning",
710
+ type: "danger",
720
711
  message: formatAPIError(response2.error)
721
712
  });
722
713
  } else {
723
714
  toggleNotification({
724
- type: "warning",
715
+ type: "danger",
725
716
  message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
726
717
  });
727
718
  }
728
719
  }
729
720
  };
730
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.ModalLayout, { onClose: handleClose, labelledBy: releaseHeaderId, children: [
731
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.ModalHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { id: releaseHeaderId, fontWeight: "bold", textColor: "neutral800", children: formatMessage({
721
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Root, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Content, { children: [
722
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Title, { fontWeight: "bold", children: formatMessage({
732
723
  id: "content-releases.content-manager-edit-view.add-to-release",
733
724
  defaultMessage: "Add to release"
734
725
  }) }) }),
@@ -740,25 +731,26 @@ const AddActionToReleaseModal = ({
740
731
  initialValues: INITIAL_VALUES,
741
732
  children: ({ values, setFieldValue }) => {
742
733
  return /* @__PURE__ */ jsxRuntime.jsxs(formik.Form, { children: [
743
- releases?.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(NoReleases, {}) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.ModalBody, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
744
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingBottom: 6, children: /* @__PURE__ */ jsxRuntime.jsx(
745
- designSystem.SingleSelect,
746
- {
747
- required: true,
748
- label: formatMessage({
749
- id: "content-releases.content-manager-edit-view.add-to-release.select-label",
750
- defaultMessage: "Select a release"
751
- }),
752
- placeholder: formatMessage({
753
- id: "content-releases.content-manager-edit-view.add-to-release.select-placeholder",
754
- defaultMessage: "Select"
755
- }),
756
- onChange: (value) => setFieldValue("releaseId", value),
757
- value: values.releaseId,
758
- children: releases?.map((release) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: release.id, children: release.name }, release.id))
759
- }
760
- ) }),
761
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.FieldLabel, { children: formatMessage({
734
+ 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: [
735
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingBottom: 6, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { required: true, children: [
736
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
737
+ id: "content-releases.content-manager-edit-view.add-to-release.select-label",
738
+ defaultMessage: "Select a release"
739
+ }) }),
740
+ /* @__PURE__ */ jsxRuntime.jsx(
741
+ designSystem.SingleSelect,
742
+ {
743
+ placeholder: formatMessage({
744
+ id: "content-releases.content-manager-edit-view.add-to-release.select-placeholder",
745
+ defaultMessage: "Select"
746
+ }),
747
+ onChange: (value) => setFieldValue("releaseId", value),
748
+ value: values.releaseId,
749
+ children: releases?.map((release) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: release.id, children: release.name }, release.id))
750
+ }
751
+ )
752
+ ] }) }),
753
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
762
754
  id: "content-releases.content-manager-edit-view.add-to-release.action-type-label",
763
755
  defaultMessage: "What do you want to do with this entry?"
764
756
  }) }),
@@ -771,43 +763,37 @@ const AddActionToReleaseModal = ({
771
763
  }
772
764
  )
773
765
  ] }) }),
774
- /* @__PURE__ */ jsxRuntime.jsx(
775
- designSystem.ModalFooter,
776
- {
777
- startActions: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { onClick: handleClose, variant: "tertiary", name: "cancel", children: formatMessage({
778
- id: "content-releases.content-manager-edit-view.add-to-release.cancel-button",
779
- defaultMessage: "Cancel"
780
- }) }),
781
- endActions: (
782
- /**
783
- * TODO: Ideally we would use isValid from Formik to disable the button, however currently it always returns true
784
- * for yup.string().required(), even when the value is falsy (including empty string)
785
- */
786
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { type: "submit", disabled: !values.releaseId, loading: isLoading, children: formatMessage({
787
- id: "content-releases.content-manager-edit-view.add-to-release.continue-button",
788
- defaultMessage: "Continue"
789
- }) })
790
- )
791
- }
792
- )
766
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Footer, { children: [
767
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Close, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { variant: "tertiary", name: "cancel", children: formatMessage({
768
+ id: "content-releases.content-manager-edit-view.add-to-release.cancel-button",
769
+ defaultMessage: "Cancel"
770
+ }) }) }),
771
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { type: "submit", disabled: !values.releaseId, loading: isLoading, children: formatMessage({
772
+ id: "content-releases.content-manager-edit-view.add-to-release.continue-button",
773
+ defaultMessage: "Continue"
774
+ }) })
775
+ ] })
793
776
  ] });
794
777
  }
795
778
  }
796
779
  )
797
- ] });
780
+ ] }) });
798
781
  };
799
782
  const CMReleasesContainer = () => {
800
783
  const [isModalOpen, setIsModalOpen] = React__namespace.useState(false);
801
784
  const { formatMessage, formatDate, formatTime } = reactIntl.useIntl();
802
- const {
803
- isCreatingEntry,
804
- hasDraftAndPublish,
805
- initialData: { id: entryId },
806
- slug
807
- } = helperPlugin.useCMEditViewDataManager();
785
+ const { id, slug, collectionType } = reactRouterDom.useParams();
786
+ const isCreatingEntry = id === "create";
787
+ const entryId = parseInt(id, 10);
788
+ const { allowedActions } = strapiAdmin.useRBAC(PERMISSIONS);
789
+ const { canCreateAction, canRead: canMain, canDeleteAction } = allowedActions;
790
+ const { schema } = strapiAdmin$1.unstable_useDocument({
791
+ collectionType,
792
+ model: slug
793
+ });
794
+ const hasDraftAndPublish = schema?.options?.draftAndPublish;
808
795
  const contentTypeUid = slug;
809
- const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
810
- const canFetch = entryId != null && contentTypeUid != null;
796
+ const canFetch = id != null && contentTypeUid != null;
811
797
  const fetchParams = canFetch ? {
812
798
  contentTypeUid,
813
799
  entryId,
@@ -828,10 +814,13 @@ const CMReleasesContainer = () => {
828
814
  }
829
815
  return `success${shade}`;
830
816
  };
831
- return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: PERMISSIONS.main, children: /* @__PURE__ */ jsxRuntime.jsxs(
817
+ if (!canMain) {
818
+ return null;
819
+ }
820
+ return /* @__PURE__ */ jsxRuntime.jsxs(
832
821
  designSystem.Box,
833
822
  {
834
- as: "aside",
823
+ tag: "aside",
835
824
  "aria-label": formatMessage({
836
825
  id: "content-releases.plugin.name",
837
826
  defaultMessage: "Releases"
@@ -855,7 +844,7 @@ const CMReleasesContainer = () => {
855
844
  alignItems: "start",
856
845
  borderWidth: "1px",
857
846
  borderStyle: "solid",
858
- borderColor: getReleaseColorVariant(release.action.type, "200"),
847
+ borderColor: getReleaseColorVariant(release.actions[0].type, "200"),
859
848
  overflow: "hidden",
860
849
  hasRadius: true,
861
850
  children: [
@@ -866,28 +855,28 @@ const CMReleasesContainer = () => {
866
855
  paddingBottom: 3,
867
856
  paddingLeft: 4,
868
857
  paddingRight: 4,
869
- background: getReleaseColorVariant(release.action.type, "100"),
858
+ background: getReleaseColorVariant(release.actions[0].type, "100"),
870
859
  width: "100%",
871
860
  children: /* @__PURE__ */ jsxRuntime.jsx(
872
861
  designSystem.Typography,
873
862
  {
874
863
  fontSize: 1,
875
864
  variant: "pi",
876
- textColor: getReleaseColorVariant(release.action.type, "600"),
865
+ textColor: getReleaseColorVariant(release.actions[0].type, "600"),
877
866
  children: formatMessage(
878
867
  {
879
868
  id: "content-releases.content-manager-edit-view.list-releases.title",
880
869
  defaultMessage: "{isPublish, select, true {Will be published in} other {Will be unpublished in}}"
881
870
  },
882
- { isPublish: release.action.type === "publish" }
871
+ { isPublish: release.actions[0].type === "publish" }
883
872
  )
884
873
  }
885
874
  )
886
875
  }
887
876
  ),
888
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: [
877
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: [
889
878
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontSize: 2, fontWeight: "bold", variant: "omega", textColor: "neutral700", children: release.name }),
890
- IsSchedulingEnabled && release.scheduledAt && release.timezone && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", children: formatMessage(
879
+ release.scheduledAt && release.timezone && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", children: formatMessage(
891
880
  {
892
881
  id: "content-releases.content-manager-edit-view.scheduled.date",
893
882
  defaultMessage: "{date} at {time} ({offset})"
@@ -909,23 +898,23 @@ const CMReleasesContainer = () => {
909
898
  )
910
899
  }
911
900
  ) }),
912
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: PERMISSIONS.deleteAction, children: /* @__PURE__ */ jsxRuntime.jsxs(ReleaseActionMenu.Root, { hasTriggerBorder: true, children: [
901
+ canDeleteAction ? /* @__PURE__ */ jsxRuntime.jsxs(ReleaseActionMenu.Root, { hasTriggerBorder: true, children: [
913
902
  /* @__PURE__ */ jsxRuntime.jsx(ReleaseActionMenu.EditReleaseItem, { releaseId: release.id }),
914
903
  /* @__PURE__ */ jsxRuntime.jsx(
915
904
  ReleaseActionMenu.DeleteReleaseActionItem,
916
905
  {
917
906
  releaseId: release.id,
918
- actionId: release.action.id
907
+ actionId: release.actions[0].id
919
908
  }
920
909
  )
921
- ] }) })
922
- ] })
910
+ ] }) : null
911
+ ] }) })
923
912
  ]
924
913
  },
925
914
  release.id
926
915
  );
927
916
  }),
928
- /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: PERMISSIONS.createAction, children: /* @__PURE__ */ jsxRuntime.jsx(
917
+ canCreateAction ? /* @__PURE__ */ jsxRuntime.jsx(
929
918
  designSystem.Button,
930
919
  {
931
920
  justifyContent: "center",
@@ -940,42 +929,48 @@ const CMReleasesContainer = () => {
940
929
  defaultMessage: "Add to release"
941
930
  })
942
931
  }
943
- ) })
932
+ ) : null
944
933
  ] }),
945
- isModalOpen && /* @__PURE__ */ jsxRuntime.jsx(
934
+ /* @__PURE__ */ jsxRuntime.jsx(
946
935
  AddActionToReleaseModal,
947
936
  {
948
- handleClose: toggleModal,
937
+ open: isModalOpen,
938
+ onOpenChange: toggleModal,
949
939
  contentTypeUid,
950
940
  entryId
951
941
  }
952
942
  )
953
943
  ]
954
944
  }
955
- ) });
945
+ );
946
+ };
947
+ const pluginId = "content-releases";
948
+ const prefixPluginTranslations = (trad, pluginId2) => {
949
+ if (!pluginId2) {
950
+ throw new TypeError("pluginId can't be empty");
951
+ }
952
+ return Object.keys(trad).reduce((acc, current) => {
953
+ acc[`${pluginId2}.${current}`] = trad[current];
954
+ return acc;
955
+ }, {});
956
956
  };
957
957
  const admin = {
958
958
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
959
959
  register(app) {
960
+ app.createHook("ContentReleases/pages/ReleaseDetails/add-locale-in-releases");
960
961
  if (window.strapi.features.isEnabled("cms-content-releases")) {
961
962
  app.addMenuLink({
962
- to: `/plugins/${pluginId}`,
963
+ to: `plugins/${pluginId}`,
963
964
  icon: icons.PaperPlane,
964
965
  intlLabel: {
965
966
  id: `${pluginId}.plugin.name`,
966
967
  defaultMessage: "Releases"
967
968
  },
968
- async Component() {
969
- const { App } = await Promise.resolve().then(() => require("./App-p8aKBitd.js"));
970
- return App;
971
- },
972
- permissions: PERMISSIONS.main
973
- });
974
- app.addMiddlewares([() => releaseApi.middleware]);
975
- app.addReducers({
976
- [releaseApi.reducerPath]: releaseApi.reducer
969
+ Component: () => Promise.resolve().then(() => require("./App-CqbuK4M6.js")).then((mod) => ({ default: mod.App })),
970
+ permissions: PERMISSIONS.main,
971
+ position: 2
977
972
  });
978
- app.injectContentManagerComponent("editView", "right-links", {
973
+ app.getPlugin("content-manager").injectComponent("editView", "right-links", {
979
974
  name: `${pluginId}-link`,
980
975
  Component: CMReleasesContainer
981
976
  });
@@ -987,20 +982,22 @@ const admin = {
987
982
  id: `${pluginId}.plugin.name`,
988
983
  defaultMessage: "Releases"
989
984
  },
985
+ permissions: [],
990
986
  async Component() {
991
- const { PurchaseContentReleases } = await Promise.resolve().then(() => require("./PurchaseContentReleases-YhAPgpG9.js"));
992
- return PurchaseContentReleases;
987
+ const { PurchaseContentReleases } = await Promise.resolve().then(() => require("./PurchaseContentReleases-Be3acS2L.js"));
988
+ return { default: PurchaseContentReleases };
993
989
  },
994
- lockIcon: true
990
+ lockIcon: true,
991
+ position: 2
995
992
  });
996
993
  }
997
994
  },
998
995
  async registerTrads({ locales }) {
999
996
  const importedTrads = await Promise.all(
1000
997
  locales.map((locale) => {
1001
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-gcJJ5htG.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
998
+ return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-DtFJ5ViE.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
1002
999
  return {
1003
- data: helperPlugin.prefixPluginTranslations(data, "content-releases"),
1000
+ data: prefixPluginTranslations(data, "content-releases"),
1004
1001
  locale
1005
1002
  };
1006
1003
  }).catch(() => {
@@ -1019,7 +1016,6 @@ exports.ReleaseActionMenu = ReleaseActionMenu;
1019
1016
  exports.ReleaseActionOptions = ReleaseActionOptions;
1020
1017
  exports.admin = admin;
1021
1018
  exports.getTimezoneOffset = getTimezoneOffset;
1022
- exports.isAxiosError = isAxiosError;
1023
1019
  exports.pluginId = pluginId;
1024
1020
  exports.releaseApi = releaseApi;
1025
1021
  exports.useCreateReleaseMutation = useCreateReleaseMutation;
@@ -1028,7 +1024,6 @@ exports.useGetReleaseActionsQuery = useGetReleaseActionsQuery;
1028
1024
  exports.useGetReleaseQuery = useGetReleaseQuery;
1029
1025
  exports.useGetReleasesQuery = useGetReleasesQuery;
1030
1026
  exports.usePublishReleaseMutation = usePublishReleaseMutation;
1031
- exports.useTypedDispatch = useTypedDispatch;
1032
1027
  exports.useUpdateReleaseActionMutation = useUpdateReleaseActionMutation;
1033
1028
  exports.useUpdateReleaseMutation = useUpdateReleaseMutation;
1034
- //# sourceMappingURL=index-fP3qoWZ4.js.map
1029
+ //# sourceMappingURL=index-Tedsw4GC.js.map