@strapi/content-manager 0.0.0-next.c9f32f6f0c2be1b88323373117f12eb33219d20e → 0.0.0-next.cb5f24c83e8fde7c31e5850c14430d38aa9b8862

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 (114) hide show
  1. package/dist/_chunks/CardDragPreview-C0QyJgRA.js.map +1 -1
  2. package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-N-CTtgQa.js → ComponentConfigurationPage-BSEZcJVB.js} +4 -5
  4. package/dist/_chunks/{ComponentConfigurationPage-N-CTtgQa.js.map → ComponentConfigurationPage-BSEZcJVB.js.map} +1 -1
  5. package/dist/_chunks/{ComponentConfigurationPage-BaJMOQyq.mjs → ComponentConfigurationPage-BiASGi7x.mjs} +3 -3
  6. package/dist/_chunks/{ComponentConfigurationPage-BaJMOQyq.mjs.map → ComponentConfigurationPage-BiASGi7x.mjs.map} +1 -1
  7. package/dist/_chunks/{ComponentIcon-BXdiCGQp.js → ComponentIcon-CRbtQEUV.js} +2 -3
  8. package/dist/_chunks/{ComponentIcon-BXdiCGQp.js.map → ComponentIcon-CRbtQEUV.js.map} +1 -1
  9. package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +1 -1
  10. package/dist/_chunks/{EditConfigurationPage-BHkjAbxH.js → EditConfigurationPage-D2rtvneE.js} +4 -5
  11. package/dist/_chunks/{EditConfigurationPage-BHkjAbxH.js.map → EditConfigurationPage-D2rtvneE.js.map} +1 -1
  12. package/dist/_chunks/{EditConfigurationPage-CKK-5LfX.mjs → EditConfigurationPage-vN4zupij.mjs} +3 -3
  13. package/dist/_chunks/{EditConfigurationPage-CKK-5LfX.mjs.map → EditConfigurationPage-vN4zupij.mjs.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-QPUftxUd.js → EditViewPage-BwisF04Q.js} +4 -5
  15. package/dist/_chunks/{EditViewPage-QPUftxUd.js.map → EditViewPage-BwisF04Q.js.map} +1 -1
  16. package/dist/_chunks/{EditViewPage-B11aeMcf.mjs → EditViewPage-_A31Cl4g.mjs} +3 -3
  17. package/dist/_chunks/{EditViewPage-B11aeMcf.mjs.map → EditViewPage-_A31Cl4g.mjs.map} +1 -1
  18. package/dist/_chunks/{Field-Bj_RgtGo.mjs → Field-CvIunNOj.mjs} +129 -96
  19. package/dist/_chunks/Field-CvIunNOj.mjs.map +1 -0
  20. package/dist/_chunks/{Field-DUK83cfh.js → Field-Dsu6-FrM.js} +132 -99
  21. package/dist/_chunks/Field-Dsu6-FrM.js.map +1 -0
  22. package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +1 -1
  23. package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +1 -1
  24. package/dist/_chunks/{Form-DLMSoXV7.mjs → Form-DK0fG0Gj.mjs} +3 -3
  25. package/dist/_chunks/{Form-DLMSoXV7.mjs.map → Form-DK0fG0Gj.mjs.map} +1 -1
  26. package/dist/_chunks/{Form-DHmBRlHd.js → Form-DUwWcCmA.js} +5 -6
  27. package/dist/_chunks/{Form-DHmBRlHd.js.map → Form-DUwWcCmA.js.map} +1 -1
  28. package/dist/_chunks/{History-Di3zm4HT.js → History-CeCDhoJG.js} +5 -6
  29. package/dist/_chunks/{History-Di3zm4HT.js.map → History-CeCDhoJG.js.map} +1 -1
  30. package/dist/_chunks/{History-CfCSNlG9.mjs → History-DP8gmXpm.mjs} +4 -4
  31. package/dist/_chunks/{History-CfCSNlG9.mjs.map → History-DP8gmXpm.mjs.map} +1 -1
  32. package/dist/_chunks/{ListConfigurationPage-0mtv_iqk.mjs → ListConfigurationPage-BCkO5iuN.mjs} +3 -3
  33. package/dist/_chunks/{ListConfigurationPage-0mtv_iqk.mjs.map → ListConfigurationPage-BCkO5iuN.mjs.map} +1 -1
  34. package/dist/_chunks/{ListConfigurationPage-Cq361KIt.js → ListConfigurationPage-C-bAd44a.js} +4 -5
  35. package/dist/_chunks/{ListConfigurationPage-Cq361KIt.js.map → ListConfigurationPage-C-bAd44a.js.map} +1 -1
  36. package/dist/_chunks/{ListViewPage-DFDcG8gM.js → ListViewPage-BKTZFhsM.js} +4 -5
  37. package/dist/_chunks/{ListViewPage-DFDcG8gM.js.map → ListViewPage-BKTZFhsM.js.map} +1 -1
  38. package/dist/_chunks/{ListViewPage-BxLVROX8.mjs → ListViewPage-Cf_DgaFV.mjs} +3 -3
  39. package/dist/_chunks/{ListViewPage-BxLVROX8.mjs.map → ListViewPage-Cf_DgaFV.mjs.map} +1 -1
  40. package/dist/_chunks/{NoContentTypePage-BSyvnDZZ.js → NoContentTypePage-D3Cm3v3q.js} +2 -2
  41. package/dist/_chunks/{NoContentTypePage-BSyvnDZZ.js.map → NoContentTypePage-D3Cm3v3q.js.map} +1 -1
  42. package/dist/_chunks/{NoContentTypePage-BRfDd67_.mjs → NoContentTypePage-nHIyvJcB.mjs} +2 -2
  43. package/dist/_chunks/{NoContentTypePage-BRfDd67_.mjs.map → NoContentTypePage-nHIyvJcB.mjs.map} +1 -1
  44. package/dist/_chunks/{NoPermissionsPage-CV9V8KWa.mjs → NoPermissionsPage-BALVSJ7x.mjs} +2 -2
  45. package/dist/_chunks/{NoPermissionsPage-CV9V8KWa.mjs.map → NoPermissionsPage-BALVSJ7x.mjs.map} +1 -1
  46. package/dist/_chunks/{NoPermissionsPage-DyLphsn_.js → NoPermissionsPage-CChGWBj5.js} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-DyLphsn_.js.map → NoPermissionsPage-CChGWBj5.js.map} +1 -1
  48. package/dist/_chunks/{Preview-C_B1nx3g.mjs → Preview-C4NBzKUV.mjs} +33 -11
  49. package/dist/_chunks/Preview-C4NBzKUV.mjs.map +1 -0
  50. package/dist/_chunks/{Preview-D_3aO6Ly.js → Preview-CT28Ckpg.js} +33 -12
  51. package/dist/_chunks/Preview-CT28Ckpg.js.map +1 -0
  52. package/dist/_chunks/{Relations-C6pwmDXh.mjs → Relations-C8uC89cT.mjs} +6 -8
  53. package/dist/_chunks/{Relations-C6pwmDXh.mjs.map → Relations-C8uC89cT.mjs.map} +1 -1
  54. package/dist/_chunks/{Relations-Cne2AlrL.js → Relations-CvkPCng_.js} +7 -10
  55. package/dist/_chunks/{Relations-Cne2AlrL.js.map → Relations-CvkPCng_.js.map} +1 -1
  56. package/dist/_chunks/{en-Ic0kXjxB.js → en-BK8Xyl5I.js} +2 -1
  57. package/dist/_chunks/{en-Ic0kXjxB.js.map → en-BK8Xyl5I.js.map} +1 -1
  58. package/dist/_chunks/{en-DhFUjrNW.mjs → en-Dtk_ot79.mjs} +2 -1
  59. package/dist/_chunks/{en-DhFUjrNW.mjs.map → en-Dtk_ot79.mjs.map} +1 -1
  60. package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
  61. package/dist/_chunks/{index-T-aWjbj2.js → index-CnX_j5h-.js} +206 -124
  62. package/dist/_chunks/index-CnX_j5h-.js.map +1 -0
  63. package/dist/_chunks/{index-BpxR3En4.mjs → index-Dh2aGTGJ.mjs} +205 -122
  64. package/dist/_chunks/index-Dh2aGTGJ.mjs.map +1 -0
  65. package/dist/_chunks/{layout-DhMZ_lDx.mjs → layout-B5qsPihj.mjs} +4 -4
  66. package/dist/_chunks/{layout-DhMZ_lDx.mjs.map → layout-B5qsPihj.mjs.map} +1 -1
  67. package/dist/_chunks/{layout-BEuNwv-F.js → layout-B_qdWGny.js} +5 -6
  68. package/dist/_chunks/{layout-BEuNwv-F.js.map → layout-B_qdWGny.js.map} +1 -1
  69. package/dist/_chunks/objects-BcXOv6_9.js.map +1 -1
  70. package/dist/_chunks/objects-D6yBsdmx.mjs.map +1 -1
  71. package/dist/_chunks/{relations-kLcuobLk.js → relations-ChcieiF5.js} +2 -2
  72. package/dist/_chunks/{relations-kLcuobLk.js.map → relations-ChcieiF5.js.map} +1 -1
  73. package/dist/_chunks/{relations-BdnxoX6f.mjs → relations-DMXpNY-e.mjs} +2 -2
  74. package/dist/_chunks/{relations-BdnxoX6f.mjs.map → relations-DMXpNY-e.mjs.map} +1 -1
  75. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -1
  76. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -1
  77. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
  78. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js.map → useDragAndDrop-BMtgCYzL.js.map} +1 -1
  79. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
  80. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs.map → useDragAndDrop-DJ6jqvZN.mjs.map} +1 -1
  81. package/dist/admin/index.js +1 -1
  82. package/dist/admin/index.mjs +1 -1
  83. package/dist/admin/src/content-manager.d.ts +3 -2
  84. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  85. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +7 -0
  86. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +49 -0
  87. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +1 -0
  88. package/dist/server/index.js +95 -103
  89. package/dist/server/index.js.map +1 -1
  90. package/dist/server/index.mjs +95 -102
  91. package/dist/server/index.mjs.map +1 -1
  92. package/dist/server/src/controllers/utils/metadata.d.ts +1 -0
  93. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  94. package/dist/server/src/index.d.ts +3 -2
  95. package/dist/server/src/index.d.ts.map +1 -1
  96. package/dist/server/src/preview/index.d.ts.map +1 -1
  97. package/dist/server/src/services/document-metadata.d.ts +4 -2
  98. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  99. package/dist/server/src/services/index.d.ts +3 -2
  100. package/dist/server/src/services/index.d.ts.map +1 -1
  101. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  102. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  103. package/dist/server/src/services/utils/populate.d.ts +2 -2
  104. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  105. package/package.json +11 -9
  106. package/dist/_chunks/Field-Bj_RgtGo.mjs.map +0 -1
  107. package/dist/_chunks/Field-DUK83cfh.js.map +0 -1
  108. package/dist/_chunks/Preview-C_B1nx3g.mjs.map +0 -1
  109. package/dist/_chunks/Preview-D_3aO6Ly.js.map +0 -1
  110. package/dist/_chunks/index-BpxR3En4.mjs.map +0 -1
  111. package/dist/_chunks/index-T-aWjbj2.js.map +0 -1
  112. package/dist/admin/src/preview/constants.d.ts +0 -1
  113. package/dist/server/src/preview/constants.d.ts +0 -2
  114. package/dist/server/src/preview/constants.d.ts.map +0 -1
@@ -15,8 +15,7 @@ const dateFns = require("date-fns");
15
15
  const toolkit = require("@reduxjs/toolkit");
16
16
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
17
17
  function _interopNamespace(e) {
18
- if (e && e.__esModule)
19
- return e;
18
+ if (e && e.__esModule) return e;
20
19
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
21
20
  if (e) {
22
21
  for (const k in e) {
@@ -36,13 +35,20 @@ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
36
35
  const mapValues__default = /* @__PURE__ */ _interopDefault(mapValues);
37
36
  const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
38
37
  const pipe__default = /* @__PURE__ */ _interopDefault(pipe);
39
- const __variableDynamicImportRuntimeHelper = (glob, path) => {
38
+ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
40
39
  const v = glob[path];
41
40
  if (v) {
42
41
  return typeof v === "function" ? v() : Promise.resolve(v);
43
42
  }
44
43
  return new Promise((_, reject) => {
45
- (typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(reject.bind(null, new Error("Unknown variable dynamic import: " + path)));
44
+ (typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
45
+ reject.bind(
46
+ null,
47
+ new Error(
48
+ "Unknown variable dynamic import: " + path + (path.split("/").length !== segs ? ". Note that variables only represent file names one level deep." : "")
49
+ )
50
+ )
51
+ );
46
52
  });
47
53
  };
48
54
  const PLUGIN_ID = "content-manager";
@@ -242,7 +248,19 @@ const documentApi = contentManagerApi.injectEndpoints({
242
248
  { type: "Document", id: `${model}_LIST` },
243
249
  "Relations",
244
250
  { type: "UidAvailability", id: model }
245
- ]
251
+ ],
252
+ transformResponse: (response, meta, arg) => {
253
+ if (!("data" in response) && arg.model === "plugin::users-permissions.user") {
254
+ return {
255
+ data: response,
256
+ meta: {
257
+ availableStatus: [],
258
+ availableLocales: []
259
+ }
260
+ };
261
+ }
262
+ return response;
263
+ }
246
264
  }),
247
265
  deleteDocument: builder.mutation({
248
266
  query: ({ collectionType, model, documentId, params }) => ({
@@ -475,8 +493,7 @@ const {
475
493
  useUnpublishManyDocumentsMutation
476
494
  } = documentApi;
477
495
  const buildValidParams = (query) => {
478
- if (!query)
479
- return query;
496
+ if (!query) return query;
480
497
  const { plugins: _, ...validQueryParams } = {
481
498
  ...query,
482
499
  ...Object.values(query?.plugins ?? {}).reduce(
@@ -1683,7 +1700,7 @@ const useDocumentActions = () => {
1683
1700
  };
1684
1701
  };
1685
1702
  const ProtectedHistoryPage = React__namespace.lazy(
1686
- () => Promise.resolve().then(() => require("./History-Di3zm4HT.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
1703
+ () => Promise.resolve().then(() => require("./History-CeCDhoJG.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
1687
1704
  );
1688
1705
  const routes$2 = [
1689
1706
  {
@@ -1696,7 +1713,7 @@ const routes$2 = [
1696
1713
  }
1697
1714
  ];
1698
1715
  const ProtectedPreviewPage = React__namespace.lazy(
1699
- () => Promise.resolve().then(() => require("./Preview-D_3aO6Ly.js")).then((mod) => ({ default: mod.ProtectedPreviewPage }))
1716
+ () => Promise.resolve().then(() => require("./Preview-CT28Ckpg.js")).then((mod) => ({ default: mod.ProtectedPreviewPage }))
1700
1717
  );
1701
1718
  const routes$1 = [
1702
1719
  {
@@ -1709,31 +1726,31 @@ const routes$1 = [
1709
1726
  }
1710
1727
  ];
1711
1728
  const ProtectedEditViewPage = React.lazy(
1712
- () => Promise.resolve().then(() => require("./EditViewPage-QPUftxUd.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1729
+ () => Promise.resolve().then(() => require("./EditViewPage-BwisF04Q.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1713
1730
  );
1714
1731
  const ProtectedListViewPage = React.lazy(
1715
- () => Promise.resolve().then(() => require("./ListViewPage-DFDcG8gM.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1732
+ () => Promise.resolve().then(() => require("./ListViewPage-BKTZFhsM.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1716
1733
  );
1717
1734
  const ProtectedListConfiguration = React.lazy(
1718
- () => Promise.resolve().then(() => require("./ListConfigurationPage-Cq361KIt.js")).then((mod) => ({
1735
+ () => Promise.resolve().then(() => require("./ListConfigurationPage-C-bAd44a.js")).then((mod) => ({
1719
1736
  default: mod.ProtectedListConfiguration
1720
1737
  }))
1721
1738
  );
1722
1739
  const ProtectedEditConfigurationPage = React.lazy(
1723
- () => Promise.resolve().then(() => require("./EditConfigurationPage-BHkjAbxH.js")).then((mod) => ({
1740
+ () => Promise.resolve().then(() => require("./EditConfigurationPage-D2rtvneE.js")).then((mod) => ({
1724
1741
  default: mod.ProtectedEditConfigurationPage
1725
1742
  }))
1726
1743
  );
1727
1744
  const ProtectedComponentConfigurationPage = React.lazy(
1728
- () => Promise.resolve().then(() => require("./ComponentConfigurationPage-N-CTtgQa.js")).then((mod) => ({
1745
+ () => Promise.resolve().then(() => require("./ComponentConfigurationPage-BSEZcJVB.js")).then((mod) => ({
1729
1746
  default: mod.ProtectedComponentConfigurationPage
1730
1747
  }))
1731
1748
  );
1732
1749
  const NoPermissions = React.lazy(
1733
- () => Promise.resolve().then(() => require("./NoPermissionsPage-DyLphsn_.js")).then((mod) => ({ default: mod.NoPermissions }))
1750
+ () => Promise.resolve().then(() => require("./NoPermissionsPage-CChGWBj5.js")).then((mod) => ({ default: mod.NoPermissions }))
1734
1751
  );
1735
1752
  const NoContentType = React.lazy(
1736
- () => Promise.resolve().then(() => require("./NoContentTypePage-BSyvnDZZ.js")).then((mod) => ({ default: mod.NoContentType }))
1753
+ () => Promise.resolve().then(() => require("./NoContentTypePage-D3Cm3v3q.js")).then((mod) => ({ default: mod.NoContentType }))
1737
1754
  );
1738
1755
  const CollectionTypePages = () => {
1739
1756
  const { collectionType } = reactRouterDom.useParams();
@@ -2264,6 +2281,7 @@ const PublishAction$1 = ({
2264
2281
  };
2265
2282
  };
2266
2283
  PublishAction$1.type = "publish";
2284
+ PublishAction$1.position = "panel";
2267
2285
  const UpdateAction = ({
2268
2286
  activeTab,
2269
2287
  documentId,
@@ -2286,6 +2304,117 @@ const UpdateAction = ({
2286
2304
  const validate = strapiAdmin.useForm("UpdateAction", (state) => state.validate);
2287
2305
  const setErrors = strapiAdmin.useForm("UpdateAction", (state) => state.setErrors);
2288
2306
  const resetForm = strapiAdmin.useForm("PublishAction", ({ resetForm: resetForm2 }) => resetForm2);
2307
+ const handleUpdate = React__namespace.useCallback(async () => {
2308
+ setSubmitting(true);
2309
+ try {
2310
+ if (!modified) {
2311
+ return;
2312
+ }
2313
+ const { errors } = await validate(true, {
2314
+ status: "draft"
2315
+ });
2316
+ if (errors) {
2317
+ toggleNotification({
2318
+ type: "danger",
2319
+ message: formatMessage({
2320
+ id: "content-manager.validation.error",
2321
+ defaultMessage: "There are validation errors in your document. Please fix them before saving."
2322
+ })
2323
+ });
2324
+ return;
2325
+ }
2326
+ if (isCloning) {
2327
+ const res = await clone(
2328
+ {
2329
+ model,
2330
+ documentId: cloneMatch.params.origin,
2331
+ params
2332
+ },
2333
+ transformData(document)
2334
+ );
2335
+ if ("data" in res) {
2336
+ navigate(
2337
+ {
2338
+ pathname: `../${res.data.documentId}`,
2339
+ search: rawQuery
2340
+ },
2341
+ { relative: "path" }
2342
+ );
2343
+ } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2344
+ setErrors(formatValidationErrors(res.error));
2345
+ }
2346
+ } else if (documentId || collectionType === SINGLE_TYPES) {
2347
+ const res = await update(
2348
+ {
2349
+ collectionType,
2350
+ model,
2351
+ documentId,
2352
+ params
2353
+ },
2354
+ transformData(document)
2355
+ );
2356
+ if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2357
+ setErrors(formatValidationErrors(res.error));
2358
+ } else {
2359
+ resetForm();
2360
+ }
2361
+ } else {
2362
+ const res = await create(
2363
+ {
2364
+ model,
2365
+ params
2366
+ },
2367
+ transformData(document)
2368
+ );
2369
+ if ("data" in res && collectionType !== SINGLE_TYPES) {
2370
+ navigate(
2371
+ {
2372
+ pathname: `../${res.data.documentId}`,
2373
+ search: rawQuery
2374
+ },
2375
+ { replace: true, relative: "path" }
2376
+ );
2377
+ } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2378
+ setErrors(formatValidationErrors(res.error));
2379
+ }
2380
+ }
2381
+ } finally {
2382
+ setSubmitting(false);
2383
+ }
2384
+ }, [
2385
+ clone,
2386
+ cloneMatch?.params.origin,
2387
+ collectionType,
2388
+ create,
2389
+ document,
2390
+ documentId,
2391
+ formatMessage,
2392
+ formatValidationErrors,
2393
+ isCloning,
2394
+ model,
2395
+ modified,
2396
+ navigate,
2397
+ params,
2398
+ rawQuery,
2399
+ resetForm,
2400
+ setErrors,
2401
+ setSubmitting,
2402
+ toggleNotification,
2403
+ update,
2404
+ validate
2405
+ ]);
2406
+ React__namespace.useEffect(() => {
2407
+ const handleKeyDown = (e) => {
2408
+ if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) {
2409
+ e.preventDefault();
2410
+ handleUpdate();
2411
+ }
2412
+ };
2413
+ window.addEventListener("keydown", handleKeyDown);
2414
+ return () => {
2415
+ window.removeEventListener("keydown", handleKeyDown);
2416
+ };
2417
+ }, [handleUpdate]);
2289
2418
  return {
2290
2419
  /**
2291
2420
  * Disabled when:
@@ -2298,84 +2427,11 @@ const UpdateAction = ({
2298
2427
  id: "global.save",
2299
2428
  defaultMessage: "Save"
2300
2429
  }),
2301
- onClick: async () => {
2302
- setSubmitting(true);
2303
- try {
2304
- const { errors } = await validate(true, {
2305
- status: "draft"
2306
- });
2307
- if (errors) {
2308
- toggleNotification({
2309
- type: "danger",
2310
- message: formatMessage({
2311
- id: "content-manager.validation.error",
2312
- defaultMessage: "There are validation errors in your document. Please fix them before saving."
2313
- })
2314
- });
2315
- return;
2316
- }
2317
- if (isCloning) {
2318
- const res = await clone(
2319
- {
2320
- model,
2321
- documentId: cloneMatch.params.origin,
2322
- params
2323
- },
2324
- transformData(document)
2325
- );
2326
- if ("data" in res) {
2327
- navigate(
2328
- {
2329
- pathname: `../${res.data.documentId}`,
2330
- search: rawQuery
2331
- },
2332
- { relative: "path" }
2333
- );
2334
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2335
- setErrors(formatValidationErrors(res.error));
2336
- }
2337
- } else if (documentId || collectionType === SINGLE_TYPES) {
2338
- const res = await update(
2339
- {
2340
- collectionType,
2341
- model,
2342
- documentId,
2343
- params
2344
- },
2345
- transformData(document)
2346
- );
2347
- if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2348
- setErrors(formatValidationErrors(res.error));
2349
- } else {
2350
- resetForm();
2351
- }
2352
- } else {
2353
- const res = await create(
2354
- {
2355
- model,
2356
- params
2357
- },
2358
- transformData(document)
2359
- );
2360
- if ("data" in res && collectionType !== SINGLE_TYPES) {
2361
- navigate(
2362
- {
2363
- pathname: `../${res.data.documentId}`,
2364
- search: rawQuery
2365
- },
2366
- { replace: true, relative: "path" }
2367
- );
2368
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2369
- setErrors(formatValidationErrors(res.error));
2370
- }
2371
- }
2372
- } finally {
2373
- setSubmitting(false);
2374
- }
2375
- }
2430
+ onClick: handleUpdate
2376
2431
  };
2377
2432
  };
2378
2433
  UpdateAction.type = "update";
2434
+ UpdateAction.position = "panel";
2379
2435
  const UNPUBLISH_DRAFT_OPTIONS = {
2380
2436
  KEEP: "keep",
2381
2437
  DISCARD: "discard"
@@ -2498,6 +2554,7 @@ const UnpublishAction$1 = ({
2498
2554
  };
2499
2555
  };
2500
2556
  UnpublishAction$1.type = "unpublish";
2557
+ UnpublishAction$1.position = "panel";
2501
2558
  const DiscardAction = ({
2502
2559
  activeTab,
2503
2560
  documentId,
@@ -2548,6 +2605,7 @@ const DiscardAction = ({
2548
2605
  };
2549
2606
  };
2550
2607
  DiscardAction.type = "discard";
2608
+ DiscardAction.position = "panel";
2551
2609
  const DEFAULT_ACTIONS = [PublishAction$1, UpdateAction, UnpublishAction$1, DiscardAction];
2552
2610
  const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
2553
2611
  const RelativeTime = React__namespace.forwardRef(
@@ -2667,7 +2725,7 @@ const HeaderToolbar = () => {
2667
2725
  meta: isCloning ? void 0 : meta,
2668
2726
  collectionType
2669
2727
  },
2670
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
2728
+ descriptions: plugins["content-manager"].apis.getDocumentActions("header"),
2671
2729
  children: (actions2) => {
2672
2730
  const headerActions = actions2.filter((action) => {
2673
2731
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -2875,6 +2933,7 @@ const ConfigureTheViewAction = ({ collectionType, model }) => {
2875
2933
  };
2876
2934
  };
2877
2935
  ConfigureTheViewAction.type = "configure-the-view";
2936
+ ConfigureTheViewAction.position = "header";
2878
2937
  const EditTheModelAction = ({ model }) => {
2879
2938
  const navigate = reactRouterDom.useNavigate();
2880
2939
  const { formatMessage } = reactIntl.useIntl();
@@ -2891,6 +2950,7 @@ const EditTheModelAction = ({ model }) => {
2891
2950
  };
2892
2951
  };
2893
2952
  EditTheModelAction.type = "edit-the-model";
2953
+ EditTheModelAction.position = "header";
2894
2954
  const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2895
2955
  const navigate = reactRouterDom.useNavigate();
2896
2956
  const { formatMessage } = reactIntl.useIntl();
@@ -2964,6 +3024,7 @@ const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2964
3024
  };
2965
3025
  };
2966
3026
  DeleteAction$1.type = "delete";
3027
+ DeleteAction$1.position = ["header", "table-row"];
2967
3028
  const DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction$1];
2968
3029
  const Panels = () => {
2969
3030
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
@@ -3026,7 +3087,7 @@ const ActionsPanelContent = () => {
3026
3087
  strapiAdmin.DescriptionComponentRenderer,
3027
3088
  {
3028
3089
  props,
3029
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
3090
+ descriptions: plugins["content-manager"].apis.getDocumentActions("panel"),
3030
3091
  children: (actions2) => /* @__PURE__ */ jsxRuntime.jsx(DocumentActions, { actions: actions2 })
3031
3092
  }
3032
3093
  ),
@@ -3480,8 +3541,7 @@ const PublishAction = ({ documents, model }) => {
3480
3541
  const refetchList = () => {
3481
3542
  contentManagerApi.util.invalidateTags([{ type: "Document", id: `${model}_LIST` }]);
3482
3543
  };
3483
- if (!showPublishButton)
3484
- return null;
3544
+ if (!showPublishButton) return null;
3485
3545
  return {
3486
3546
  actionType: "publish",
3487
3547
  variant: "tertiary",
@@ -3549,8 +3609,7 @@ const DeleteAction = ({ documents, model }) => {
3549
3609
  selectRow([]);
3550
3610
  }
3551
3611
  };
3552
- if (!hasDeletePermission)
3553
- return null;
3612
+ if (!hasDeletePermission) return null;
3554
3613
  return {
3555
3614
  variant: "danger-light",
3556
3615
  label: formatMessage({ id: "global.delete", defaultMessage: "Delete" }),
@@ -3599,8 +3658,7 @@ const UnpublishAction = ({ documents, model }) => {
3599
3658
  }
3600
3659
  };
3601
3660
  const showUnpublishButton = hasDraftAndPublishEnabled && hasPublishPermission && documents.some((entry) => entry.status === "published" || entry.status === "modified");
3602
- if (!showUnpublishButton)
3603
- return null;
3661
+ if (!showUnpublishButton) return null;
3604
3662
  return {
3605
3663
  variant: "tertiary",
3606
3664
  label: formatMessage({ id: "app.utils.unpublish", defaultMessage: "Unpublish" }),
@@ -3705,7 +3763,7 @@ const TableActions = ({ document }) => {
3705
3763
  strapiAdmin.DescriptionComponentRenderer,
3706
3764
  {
3707
3765
  props,
3708
- descriptions: plugins["content-manager"].apis.getDocumentActions().filter((action) => action.name !== "PublishAction"),
3766
+ descriptions: plugins["content-manager"].apis.getDocumentActions("table-row").filter((action) => action.name !== "PublishAction"),
3709
3767
  children: (actions2) => {
3710
3768
  const tableRowActions = actions2.filter((action) => {
3711
3769
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -3764,6 +3822,7 @@ const EditAction = ({ documentId }) => {
3764
3822
  };
3765
3823
  };
3766
3824
  EditAction.type = "edit";
3825
+ EditAction.position = "table-row";
3767
3826
  const StyledPencil = styledComponents.styled(Icons.Pencil)`
3768
3827
  path {
3769
3828
  fill: currentColor;
@@ -3840,6 +3899,7 @@ const CloneAction = ({ model, documentId }) => {
3840
3899
  };
3841
3900
  };
3842
3901
  CloneAction.type = "clone";
3902
+ CloneAction.position = "table-row";
3843
3903
  const StyledDuplicate = styledComponents.styled(Icons.Duplicate)`
3844
3904
  path {
3845
3905
  fill: currentColor;
@@ -3926,7 +3986,14 @@ class ContentManagerPlugin {
3926
3986
  addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),
3927
3987
  addEditViewSidePanel: this.addEditViewSidePanel.bind(this),
3928
3988
  getBulkActions: () => this.bulkActions,
3929
- getDocumentActions: () => this.documentActions,
3989
+ getDocumentActions: (position) => {
3990
+ if (position) {
3991
+ return this.documentActions.filter(
3992
+ (action) => action.position == void 0 || [action.position].flat().includes(position)
3993
+ );
3994
+ }
3995
+ return this.documentActions;
3996
+ },
3930
3997
  getEditViewSidePanels: () => this.editViewSidePanels,
3931
3998
  getHeaderActions: () => this.headerActions
3932
3999
  }
@@ -3936,10 +4003,8 @@ class ContentManagerPlugin {
3936
4003
  const getPrintableType = (value) => {
3937
4004
  const nativeType = typeof value;
3938
4005
  if (nativeType === "object") {
3939
- if (value === null)
3940
- return "null";
3941
- if (Array.isArray(value))
3942
- return "array";
4006
+ if (value === null) return "null";
4007
+ if (Array.isArray(value)) return "array";
3943
4008
  if (value instanceof Object && value.constructor.name !== "Object") {
3944
4009
  return value.constructor.name;
3945
4010
  }
@@ -3992,6 +4057,7 @@ const HistoryAction = ({ model, document }) => {
3992
4057
  };
3993
4058
  };
3994
4059
  HistoryAction.type = "history";
4060
+ HistoryAction.position = "header";
3995
4061
  const historyAdmin = {
3996
4062
  bootstrap(app) {
3997
4063
  const { addDocumentAction } = app.getPlugin("content-manager").apis;
@@ -4054,11 +4120,18 @@ const previewApi = contentManagerApi.injectEndpoints({
4054
4120
  })
4055
4121
  });
4056
4122
  const { useGetPreviewUrlQuery } = previewApi;
4123
+ const ConditionalTooltip = ({ isShown, label, children }) => {
4124
+ if (isShown) {
4125
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { label, children });
4126
+ }
4127
+ return children;
4128
+ };
4057
4129
  const PreviewSidePanel = ({ model, documentId, document }) => {
4058
4130
  const { formatMessage } = reactIntl.useIntl();
4059
4131
  const { trackUsage } = strapiAdmin.useTracking();
4060
4132
  const { pathname } = reactRouterDom.useLocation();
4061
4133
  const [{ query }] = strapiAdmin.useQueryParams();
4134
+ const isModified = strapiAdmin.useForm("PreviewSidePanel", (state) => state.modified);
4062
4135
  const { data, error } = useGetPreviewUrlQuery({
4063
4136
  params: {
4064
4137
  contentType: model
@@ -4078,28 +4151,37 @@ const PreviewSidePanel = ({ model, documentId, document }) => {
4078
4151
  };
4079
4152
  return {
4080
4153
  title: formatMessage({ id: "content-manager.preview.panel.title", defaultMessage: "Preview" }),
4081
- content: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { gap: 2, width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
4082
- designSystem.Button,
4154
+ content: /* @__PURE__ */ jsxRuntime.jsx(
4155
+ ConditionalTooltip,
4083
4156
  {
4084
- variant: "tertiary",
4085
- tag: reactRouterDom.Link,
4086
- to: { pathname: "preview", search: qs.stringify(query, { encode: false }) },
4087
- onClick: trackNavigation,
4088
- flex: "auto",
4089
- children: formatMessage({
4090
- id: "content-manager.preview.panel.button",
4091
- defaultMessage: "Open preview"
4092
- })
4157
+ label: formatMessage({
4158
+ id: "content-manager.preview.panel.button-disabled-tooltip",
4159
+ defaultMessage: "Please save to open the preview"
4160
+ }),
4161
+ isShown: isModified,
4162
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { cursor: "not-allowed", width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
4163
+ designSystem.Button,
4164
+ {
4165
+ variant: "tertiary",
4166
+ tag: reactRouterDom.Link,
4167
+ to: { pathname: "preview", search: qs.stringify(query, { encode: false }) },
4168
+ onClick: trackNavigation,
4169
+ width: "100%",
4170
+ disabled: isModified,
4171
+ pointerEvents: isModified ? "none" : void 0,
4172
+ tabIndex: isModified ? -1 : void 0,
4173
+ children: formatMessage({
4174
+ id: "content-manager.preview.panel.button",
4175
+ defaultMessage: "Open preview"
4176
+ })
4177
+ }
4178
+ ) })
4093
4179
  }
4094
- ) })
4180
+ )
4095
4181
  };
4096
4182
  };
4097
- const FEATURE_ID = "preview";
4098
4183
  const previewAdmin = {
4099
4184
  bootstrap(app) {
4100
- if (!window.strapi.future.isEnabled(FEATURE_ID)) {
4101
- return;
4102
- }
4103
4185
  const contentManagerPluginApis = app.getPlugin("content-manager").apis;
4104
4186
  contentManagerPluginApis.addEditViewSidePanel([PreviewSidePanel]);
4105
4187
  }
@@ -4123,7 +4205,7 @@ const index = {
4123
4205
  app.router.addRoute({
4124
4206
  path: "content-manager/*",
4125
4207
  lazy: async () => {
4126
- const { Layout } = await Promise.resolve().then(() => require("./layout-BEuNwv-F.js"));
4208
+ const { Layout } = await Promise.resolve().then(() => require("./layout-B_qdWGny.js"));
4127
4209
  return {
4128
4210
  Component: Layout
4129
4211
  };
@@ -4143,7 +4225,7 @@ const index = {
4143
4225
  async registerTrads({ locales }) {
4144
4226
  const importedTrads = await Promise.all(
4145
4227
  locales.map((locale) => {
4146
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/ar.json": () => Promise.resolve().then(() => require("./ar-BUUWXIYu.js")), "./translations/ca.json": () => Promise.resolve().then(() => require("./ca-Cmk45QO6.js")), "./translations/cs.json": () => Promise.resolve().then(() => require("./cs-CkJy6B2v.js")), "./translations/de.json": () => Promise.resolve().then(() => require("./de-CCEmbAah.js")), "./translations/en.json": () => Promise.resolve().then(() => require("./en-Ic0kXjxB.js")), "./translations/es.json": () => Promise.resolve().then(() => require("./es-9K52xZIr.js")), "./translations/eu.json": () => Promise.resolve().then(() => require("./eu-VDH-3ovk.js")), "./translations/fr.json": () => Promise.resolve().then(() => require("./fr-B2Kyv8Z9.js")), "./translations/gu.json": () => Promise.resolve().then(() => require("./gu-BRmF601H.js")), "./translations/hi.json": () => Promise.resolve().then(() => require("./hi-CCJBptSq.js")), "./translations/hu.json": () => Promise.resolve().then(() => require("./hu-sNV_yLYy.js")), "./translations/id.json": () => Promise.resolve().then(() => require("./id-B5Ser98A.js")), "./translations/it.json": () => Promise.resolve().then(() => require("./it-DkBIs7vD.js")), "./translations/ja.json": () => Promise.resolve().then(() => require("./ja-7sfIbjxE.js")), "./translations/ko.json": () => Promise.resolve().then(() => require("./ko-woFZPmLk.js")), "./translations/ml.json": () => Promise.resolve().then(() => require("./ml-C2W8N8k1.js")), "./translations/ms.json": () => Promise.resolve().then(() => require("./ms-BuFotyP_.js")), "./translations/nl.json": () => Promise.resolve().then(() => require("./nl-bbEOHChV.js")), "./translations/pl.json": () => Promise.resolve().then(() => require("./pl-uzwG-hk7.js")), "./translations/pt-BR.json": () => Promise.resolve().then(() => require("./pt-BR-BiOz37D9.js")), "./translations/pt.json": () => Promise.resolve().then(() => require("./pt-CeXQuq50.js")), "./translations/ru.json": () => Promise.resolve().then(() => require("./ru-BT3ybNny.js")), "./translations/sa.json": () => Promise.resolve().then(() => require("./sa-CcvkYInH.js")), "./translations/sk.json": () => Promise.resolve().then(() => require("./sk-CvY09Xjv.js")), "./translations/sv.json": () => Promise.resolve().then(() => require("./sv-MYDuzgvT.js")), "./translations/th.json": () => Promise.resolve().then(() => require("./th-D9_GfAjc.js")), "./translations/tr.json": () => Promise.resolve().then(() => require("./tr-D9UH-O_R.js")), "./translations/uk.json": () => Promise.resolve().then(() => require("./uk-C8EiqJY7.js")), "./translations/vi.json": () => Promise.resolve().then(() => require("./vi-CJlYDheJ.js")), "./translations/zh-Hans.json": () => Promise.resolve().then(() => require("./zh-Hans-9kOncHGw.js")), "./translations/zh.json": () => Promise.resolve().then(() => require("./zh-CQQfszqR.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
4228
+ return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/ar.json": () => Promise.resolve().then(() => require("./ar-BUUWXIYu.js")), "./translations/ca.json": () => Promise.resolve().then(() => require("./ca-Cmk45QO6.js")), "./translations/cs.json": () => Promise.resolve().then(() => require("./cs-CkJy6B2v.js")), "./translations/de.json": () => Promise.resolve().then(() => require("./de-CCEmbAah.js")), "./translations/en.json": () => Promise.resolve().then(() => require("./en-BK8Xyl5I.js")), "./translations/es.json": () => Promise.resolve().then(() => require("./es-9K52xZIr.js")), "./translations/eu.json": () => Promise.resolve().then(() => require("./eu-VDH-3ovk.js")), "./translations/fr.json": () => Promise.resolve().then(() => require("./fr-B2Kyv8Z9.js")), "./translations/gu.json": () => Promise.resolve().then(() => require("./gu-BRmF601H.js")), "./translations/hi.json": () => Promise.resolve().then(() => require("./hi-CCJBptSq.js")), "./translations/hu.json": () => Promise.resolve().then(() => require("./hu-sNV_yLYy.js")), "./translations/id.json": () => Promise.resolve().then(() => require("./id-B5Ser98A.js")), "./translations/it.json": () => Promise.resolve().then(() => require("./it-DkBIs7vD.js")), "./translations/ja.json": () => Promise.resolve().then(() => require("./ja-7sfIbjxE.js")), "./translations/ko.json": () => Promise.resolve().then(() => require("./ko-woFZPmLk.js")), "./translations/ml.json": () => Promise.resolve().then(() => require("./ml-C2W8N8k1.js")), "./translations/ms.json": () => Promise.resolve().then(() => require("./ms-BuFotyP_.js")), "./translations/nl.json": () => Promise.resolve().then(() => require("./nl-bbEOHChV.js")), "./translations/pl.json": () => Promise.resolve().then(() => require("./pl-uzwG-hk7.js")), "./translations/pt-BR.json": () => Promise.resolve().then(() => require("./pt-BR-BiOz37D9.js")), "./translations/pt.json": () => Promise.resolve().then(() => require("./pt-CeXQuq50.js")), "./translations/ru.json": () => Promise.resolve().then(() => require("./ru-BT3ybNny.js")), "./translations/sa.json": () => Promise.resolve().then(() => require("./sa-CcvkYInH.js")), "./translations/sk.json": () => Promise.resolve().then(() => require("./sk-CvY09Xjv.js")), "./translations/sv.json": () => Promise.resolve().then(() => require("./sv-MYDuzgvT.js")), "./translations/th.json": () => Promise.resolve().then(() => require("./th-D9_GfAjc.js")), "./translations/tr.json": () => Promise.resolve().then(() => require("./tr-D9UH-O_R.js")), "./translations/uk.json": () => Promise.resolve().then(() => require("./uk-C8EiqJY7.js")), "./translations/vi.json": () => Promise.resolve().then(() => require("./vi-CJlYDheJ.js")), "./translations/zh-Hans.json": () => Promise.resolve().then(() => require("./zh-Hans-9kOncHGw.js")), "./translations/zh.json": () => Promise.resolve().then(() => require("./zh-CQQfszqR.js")) }), `./translations/${locale}.json`, 3).then(({ default: data }) => {
4147
4229
  return {
4148
4230
  data: prefixPluginTranslations(data, PLUGIN_ID),
4149
4231
  locale
@@ -4203,4 +4285,4 @@ exports.useGetContentTypeConfigurationQuery = useGetContentTypeConfigurationQuer
4203
4285
  exports.useGetInitialDataQuery = useGetInitialDataQuery;
4204
4286
  exports.useGetPreviewUrlQuery = useGetPreviewUrlQuery;
4205
4287
  exports.useUpdateContentTypeConfigurationMutation = useUpdateContentTypeConfigurationMutation;
4206
- //# sourceMappingURL=index-T-aWjbj2.js.map
4288
+ //# sourceMappingURL=index-CnX_j5h-.js.map