@strapi/content-manager 0.0.0-next.959c5589d0d3efa25d7ca014656d9ff48c173399 → 0.0.0-next.a4bb06d54b493ab973659d0200e0e42937988850

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 (195) 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-gsCd80MU.js → ComponentConfigurationPage-BLWQy8ru.js} +4 -5
  4. package/dist/_chunks/{ComponentConfigurationPage-gsCd80MU.js.map → ComponentConfigurationPage-BLWQy8ru.js.map} +1 -1
  5. package/dist/_chunks/{ComponentConfigurationPage-CIjXcRAB.mjs → ComponentConfigurationPage-CtIa3aa2.mjs} +3 -3
  6. package/dist/_chunks/{ComponentConfigurationPage-CIjXcRAB.mjs.map → ComponentConfigurationPage-CtIa3aa2.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-BglmD_BF.mjs → EditConfigurationPage-DsPR2DVk.mjs} +3 -3
  11. package/dist/_chunks/{EditConfigurationPage-BglmD_BF.mjs.map → EditConfigurationPage-DsPR2DVk.mjs.map} +1 -1
  12. package/dist/_chunks/{EditConfigurationPage-DHDQKBzw.js → EditConfigurationPage-RQkymxCy.js} +4 -5
  13. package/dist/_chunks/{EditConfigurationPage-DHDQKBzw.js.map → EditConfigurationPage-RQkymxCy.js.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-C4iTxUPU.js → EditViewPage-B-kExt8C.js} +38 -9
  15. package/dist/_chunks/EditViewPage-B-kExt8C.js.map +1 -0
  16. package/dist/_chunks/{EditViewPage-CiwVPMaK.mjs → EditViewPage-BPyVuPfM.mjs} +38 -8
  17. package/dist/_chunks/EditViewPage-BPyVuPfM.mjs.map +1 -0
  18. package/dist/_chunks/{Field-DhXEK8y1.js → Field-DPIsQRre.js} +177 -122
  19. package/dist/_chunks/Field-DPIsQRre.js.map +1 -0
  20. package/dist/_chunks/{Field-DIjL1b5d.mjs → Field-Dltnt1km.mjs} +175 -120
  21. package/dist/_chunks/Field-Dltnt1km.mjs.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-CwmJ4sWe.js → Form-BFi4MXMT.js} +5 -6
  25. package/dist/_chunks/{Form-CwmJ4sWe.js.map → Form-BFi4MXMT.js.map} +1 -1
  26. package/dist/_chunks/{Form-CmNesrvR.mjs → Form-C1IcWm1u.mjs} +3 -3
  27. package/dist/_chunks/{Form-CmNesrvR.mjs.map → Form-C1IcWm1u.mjs.map} +1 -1
  28. package/dist/_chunks/{History-D-99Wh30.mjs → History-04ChQ4pl.mjs} +50 -96
  29. package/dist/_chunks/History-04ChQ4pl.mjs.map +1 -0
  30. package/dist/_chunks/{History-BLCCNgCt.js → History-wjcK4L0C.js} +50 -97
  31. package/dist/_chunks/History-wjcK4L0C.js.map +1 -0
  32. package/dist/_chunks/{ListConfigurationPage-JPWZz7Kg.mjs → ListConfigurationPage-BYqPYLSU.mjs} +6 -5
  33. package/dist/_chunks/ListConfigurationPage-BYqPYLSU.mjs.map +1 -0
  34. package/dist/_chunks/{ListConfigurationPage-DxWpeZrO.js → ListConfigurationPage-CRbxIC3J.js} +6 -6
  35. package/dist/_chunks/ListConfigurationPage-CRbxIC3J.js.map +1 -0
  36. package/dist/_chunks/{ListViewPage-CIQekSFz.js → ListViewPage-D5NY9183.js} +64 -53
  37. package/dist/_chunks/ListViewPage-D5NY9183.js.map +1 -0
  38. package/dist/_chunks/{ListViewPage-DSK3f0ST.mjs → ListViewPage-FU2LBuhl.mjs} +63 -51
  39. package/dist/_chunks/ListViewPage-FU2LBuhl.mjs.map +1 -0
  40. package/dist/_chunks/{NoContentTypePage-C5cxKvC2.js → NoContentTypePage-BgQVE_Qb.js} +2 -2
  41. package/dist/_chunks/{NoContentTypePage-C5cxKvC2.js.map → NoContentTypePage-BgQVE_Qb.js.map} +1 -1
  42. package/dist/_chunks/{NoContentTypePage-D99LU1YP.mjs → NoContentTypePage-DCKUkwb8.mjs} +2 -2
  43. package/dist/_chunks/{NoContentTypePage-D99LU1YP.mjs.map → NoContentTypePage-DCKUkwb8.mjs.map} +1 -1
  44. package/dist/_chunks/{NoPermissionsPage-Oy4tmUrW.js → NoPermissionsPage-C5jwn70o.js} +2 -2
  45. package/dist/_chunks/{NoPermissionsPage-Oy4tmUrW.js.map → NoPermissionsPage-C5jwn70o.js.map} +1 -1
  46. package/dist/_chunks/{NoPermissionsPage-DBrBw-0y.mjs → NoPermissionsPage-jqve7C8l.mjs} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-DBrBw-0y.mjs.map → NoPermissionsPage-jqve7C8l.mjs.map} +1 -1
  48. package/dist/_chunks/Preview-BMYN548c.mjs +294 -0
  49. package/dist/_chunks/Preview-BMYN548c.mjs.map +1 -0
  50. package/dist/_chunks/Preview-DaOihysv.js +312 -0
  51. package/dist/_chunks/Preview-DaOihysv.js.map +1 -0
  52. package/dist/_chunks/{Relations-eG-9p_qS.js → Relations-CTGM7Hv5.js} +10 -10
  53. package/dist/_chunks/Relations-CTGM7Hv5.js.map +1 -0
  54. package/dist/_chunks/{Relations-BBmhcWFV.mjs → Relations-gscPkxjF.mjs} +9 -8
  55. package/dist/_chunks/Relations-gscPkxjF.mjs.map +1 -0
  56. package/dist/_chunks/{en-Bm0D0IWz.js → en-BzQmavmK.js} +21 -4
  57. package/dist/_chunks/{en-Bm0D0IWz.js.map → en-BzQmavmK.js.map} +1 -1
  58. package/dist/_chunks/{en-DKV44jRb.mjs → en-CSxLmrh1.mjs} +21 -4
  59. package/dist/_chunks/{en-DKV44jRb.mjs.map → en-CSxLmrh1.mjs.map} +1 -1
  60. package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
  61. package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
  62. package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
  63. package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
  64. package/dist/_chunks/{fr-CD9VFbPM.mjs → fr--pg5jUbt.mjs} +13 -3
  65. package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr--pg5jUbt.mjs.map} +1 -1
  66. package/dist/_chunks/{fr-B7kGGg3E.js → fr-B2Kyv8Z9.js} +13 -3
  67. package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-B2Kyv8Z9.js.map} +1 -1
  68. package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
  69. package/dist/_chunks/{index-BIWDoFLK.js → index-Ca7YWlAA.js} +363 -193
  70. package/dist/_chunks/index-Ca7YWlAA.js.map +1 -0
  71. package/dist/_chunks/{index-BrUzbQ30.mjs → index-DqasUQ6Q.mjs} +366 -195
  72. package/dist/_chunks/index-DqasUQ6Q.mjs.map +1 -0
  73. package/dist/_chunks/{ja-CcFe8diO.js → ja-7sfIbjxE.js} +2 -2
  74. package/dist/_chunks/{es-EUonQTon.js.map → ja-7sfIbjxE.js.map} +1 -1
  75. package/dist/_chunks/{ja-CtsUxOvk.mjs → ja-BHqhDq4V.mjs} +2 -2
  76. package/dist/_chunks/{ja-CtsUxOvk.mjs.map → ja-BHqhDq4V.mjs.map} +1 -1
  77. package/dist/_chunks/{layout-lMc9i1-Z.js → layout-BW80JSCd.js} +5 -6
  78. package/dist/_chunks/{layout-lMc9i1-Z.js.map → layout-BW80JSCd.js.map} +1 -1
  79. package/dist/_chunks/{layout-_5-cXs34.mjs → layout-W3clJSCy.mjs} +4 -4
  80. package/dist/_chunks/{layout-_5-cXs34.mjs.map → layout-W3clJSCy.mjs.map} +1 -1
  81. package/dist/_chunks/objects-BcXOv6_9.js.map +1 -1
  82. package/dist/_chunks/objects-D6yBsdmx.mjs.map +1 -1
  83. package/dist/_chunks/{relations-B_VLk-DD.mjs → relations-BlDkoeWh.mjs} +6 -3
  84. package/dist/_chunks/relations-BlDkoeWh.mjs.map +1 -0
  85. package/dist/_chunks/{relations-BRHithi8.js → relations-C9Usz9k5.js} +6 -3
  86. package/dist/_chunks/relations-C9Usz9k5.js.map +1 -0
  87. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -1
  88. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -1
  89. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
  90. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js.map → useDragAndDrop-BMtgCYzL.js.map} +1 -1
  91. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
  92. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs.map → useDragAndDrop-DJ6jqvZN.mjs.map} +1 -1
  93. package/dist/admin/index.js +2 -1
  94. package/dist/admin/index.js.map +1 -1
  95. package/dist/admin/index.mjs +5 -4
  96. package/dist/admin/src/content-manager.d.ts +3 -2
  97. package/dist/admin/src/exports.d.ts +1 -0
  98. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  99. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
  100. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  101. package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +3 -3
  102. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +7 -0
  103. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +49 -0
  104. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +1 -0
  105. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +4 -1
  106. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +4 -1
  107. package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
  108. package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
  109. package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
  110. package/dist/admin/src/preview/index.d.ts +1 -1
  111. package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
  112. package/dist/admin/src/preview/routes.d.ts +3 -0
  113. package/dist/admin/src/preview/services/preview.d.ts +3 -0
  114. package/dist/admin/src/router.d.ts +1 -1
  115. package/dist/admin/src/services/api.d.ts +1 -1
  116. package/dist/admin/src/services/components.d.ts +2 -2
  117. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  118. package/dist/admin/src/services/documents.d.ts +16 -19
  119. package/dist/admin/src/services/init.d.ts +1 -1
  120. package/dist/admin/src/services/relations.d.ts +2 -2
  121. package/dist/admin/src/services/uid.d.ts +3 -3
  122. package/dist/server/index.js +516 -312
  123. package/dist/server/index.js.map +1 -1
  124. package/dist/server/index.mjs +517 -312
  125. package/dist/server/index.mjs.map +1 -1
  126. package/dist/server/src/controllers/index.d.ts.map +1 -1
  127. package/dist/server/src/controllers/utils/metadata.d.ts +1 -0
  128. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  129. package/dist/server/src/history/controllers/history-version.d.ts +1 -1
  130. package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
  131. package/dist/server/src/history/services/history.d.ts +3 -3
  132. package/dist/server/src/history/services/history.d.ts.map +1 -1
  133. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  134. package/dist/server/src/history/services/utils.d.ts +6 -11
  135. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  136. package/dist/server/src/index.d.ts +3 -2
  137. package/dist/server/src/index.d.ts.map +1 -1
  138. package/dist/server/src/preview/controllers/index.d.ts +2 -0
  139. package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
  140. package/dist/server/src/preview/controllers/preview.d.ts +13 -0
  141. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
  142. package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
  143. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
  144. package/dist/server/src/preview/index.d.ts.map +1 -1
  145. package/dist/server/src/preview/routes/index.d.ts +8 -0
  146. package/dist/server/src/preview/routes/index.d.ts.map +1 -0
  147. package/dist/server/src/preview/routes/preview.d.ts +4 -0
  148. package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
  149. package/dist/server/src/preview/services/index.d.ts +16 -0
  150. package/dist/server/src/preview/services/index.d.ts.map +1 -0
  151. package/dist/server/src/preview/services/preview-config.d.ts +32 -0
  152. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
  153. package/dist/server/src/preview/services/preview.d.ts +12 -0
  154. package/dist/server/src/preview/services/preview.d.ts.map +1 -0
  155. package/dist/server/src/preview/utils.d.ts +19 -0
  156. package/dist/server/src/preview/utils.d.ts.map +1 -0
  157. package/dist/server/src/register.d.ts.map +1 -1
  158. package/dist/server/src/routes/index.d.ts.map +1 -1
  159. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  160. package/dist/server/src/services/document-metadata.d.ts +4 -2
  161. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  162. package/dist/server/src/services/index.d.ts +3 -2
  163. package/dist/server/src/services/index.d.ts.map +1 -1
  164. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  165. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  166. package/dist/server/src/services/utils/populate.d.ts +2 -2
  167. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  168. package/dist/shared/contracts/index.d.ts +1 -0
  169. package/dist/shared/contracts/index.d.ts.map +1 -1
  170. package/dist/shared/contracts/preview.d.ts +27 -0
  171. package/dist/shared/contracts/preview.d.ts.map +1 -0
  172. package/dist/shared/index.js +4 -0
  173. package/dist/shared/index.js.map +1 -1
  174. package/dist/shared/index.mjs +4 -0
  175. package/dist/shared/index.mjs.map +1 -1
  176. package/package.json +13 -12
  177. package/dist/_chunks/EditViewPage-C4iTxUPU.js.map +0 -1
  178. package/dist/_chunks/EditViewPage-CiwVPMaK.mjs.map +0 -1
  179. package/dist/_chunks/Field-DIjL1b5d.mjs.map +0 -1
  180. package/dist/_chunks/Field-DhXEK8y1.js.map +0 -1
  181. package/dist/_chunks/History-BLCCNgCt.js.map +0 -1
  182. package/dist/_chunks/History-D-99Wh30.mjs.map +0 -1
  183. package/dist/_chunks/ListConfigurationPage-DxWpeZrO.js.map +0 -1
  184. package/dist/_chunks/ListConfigurationPage-JPWZz7Kg.mjs.map +0 -1
  185. package/dist/_chunks/ListViewPage-CIQekSFz.js.map +0 -1
  186. package/dist/_chunks/ListViewPage-DSK3f0ST.mjs.map +0 -1
  187. package/dist/_chunks/Relations-BBmhcWFV.mjs.map +0 -1
  188. package/dist/_chunks/Relations-eG-9p_qS.js.map +0 -1
  189. package/dist/_chunks/index-BIWDoFLK.js.map +0 -1
  190. package/dist/_chunks/index-BrUzbQ30.mjs.map +0 -1
  191. package/dist/_chunks/relations-BRHithi8.js.map +0 -1
  192. package/dist/_chunks/relations-B_VLk-DD.mjs.map +0 -1
  193. package/dist/admin/src/preview/constants.d.ts +0 -1
  194. package/dist/server/src/preview/constants.d.ts +0 -2
  195. package/dist/server/src/preview/constants.d.ts.map +0 -1
@@ -7,16 +7,15 @@ const designSystem = require("@strapi/design-system");
7
7
  const mapValues = require("lodash/fp/mapValues");
8
8
  const reactIntl = require("react-intl");
9
9
  const reactRouterDom = require("react-router-dom");
10
+ const styledComponents = require("styled-components");
10
11
  const yup = require("yup");
12
+ const qs = require("qs");
11
13
  const pipe = require("lodash/fp/pipe");
12
14
  const dateFns = require("date-fns");
13
- const styledComponents = require("styled-components");
14
- const qs = require("qs");
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";
@@ -190,7 +196,8 @@ const contentManagerApi = strapiAdmin.adminApi.enhanceEndpoints({
190
196
  "InitialData",
191
197
  "HistoryVersion",
192
198
  "Relations",
193
- "UidAvailability"
199
+ "UidAvailability",
200
+ "RecentDocumentList"
194
201
  ]
195
202
  });
196
203
  const documentApi = contentManagerApi.injectEndpoints({
@@ -208,7 +215,7 @@ const documentApi = contentManagerApi.injectEndpoints({
208
215
  if (error) {
209
216
  return [];
210
217
  }
211
- return [{ type: "Document", id: `${model}_LIST` }];
218
+ return [{ type: "Document", id: `${model}_LIST` }, "RecentDocumentList"];
212
219
  }
213
220
  }),
214
221
  cloneDocument: builder.mutation({
@@ -222,7 +229,8 @@ const documentApi = contentManagerApi.injectEndpoints({
222
229
  }),
223
230
  invalidatesTags: (_result, _error, { model }) => [
224
231
  { type: "Document", id: `${model}_LIST` },
225
- { type: "UidAvailability", id: model }
232
+ { type: "UidAvailability", id: model },
233
+ "RecentDocumentList"
226
234
  ]
227
235
  }),
228
236
  /**
@@ -241,8 +249,21 @@ const documentApi = contentManagerApi.injectEndpoints({
241
249
  invalidatesTags: (result, _error, { model }) => [
242
250
  { type: "Document", id: `${model}_LIST` },
243
251
  "Relations",
244
- { type: "UidAvailability", id: model }
245
- ]
252
+ { type: "UidAvailability", id: model },
253
+ "RecentDocumentList"
254
+ ],
255
+ transformResponse: (response, meta, arg) => {
256
+ if (!("data" in response) && arg.model === "plugin::users-permissions.user") {
257
+ return {
258
+ data: response,
259
+ meta: {
260
+ availableStatus: [],
261
+ availableLocales: []
262
+ }
263
+ };
264
+ }
265
+ return response;
266
+ }
246
267
  }),
247
268
  deleteDocument: builder.mutation({
248
269
  query: ({ collectionType, model, documentId, params }) => ({
@@ -253,7 +274,8 @@ const documentApi = contentManagerApi.injectEndpoints({
253
274
  }
254
275
  }),
255
276
  invalidatesTags: (_result, _error, { collectionType, model }) => [
256
- { type: "Document", id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model }
277
+ { type: "Document", id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model },
278
+ "RecentDocumentList"
257
279
  ]
258
280
  }),
259
281
  deleteManyDocuments: builder.mutation({
@@ -265,7 +287,10 @@ const documentApi = contentManagerApi.injectEndpoints({
265
287
  params
266
288
  }
267
289
  }),
268
- invalidatesTags: (_res, _error, { model }) => [{ type: "Document", id: `${model}_LIST` }]
290
+ invalidatesTags: (_res, _error, { model }) => [
291
+ { type: "Document", id: `${model}_LIST` },
292
+ "RecentDocumentList"
293
+ ]
269
294
  }),
270
295
  discardDocument: builder.mutation({
271
296
  query: ({ collectionType, model, documentId, params }) => ({
@@ -283,7 +308,8 @@ const documentApi = contentManagerApi.injectEndpoints({
283
308
  },
284
309
  { type: "Document", id: `${model}_LIST` },
285
310
  "Relations",
286
- { type: "UidAvailability", id: model }
311
+ { type: "UidAvailability", id: model },
312
+ "RecentDocumentList"
287
313
  ];
288
314
  }
289
315
  }),
@@ -293,10 +319,10 @@ const documentApi = contentManagerApi.injectEndpoints({
293
319
  */
294
320
  getAllDocuments: builder.query({
295
321
  query: ({ model, params }) => ({
296
- url: `/content-manager/collection-types/${model}${params ? `?${params}` : ""}`,
322
+ url: `/content-manager/collection-types/${model}`,
297
323
  method: "GET",
298
324
  config: {
299
- params
325
+ params: qs.stringify(params, { encode: true })
300
326
  }
301
327
  }),
302
328
  providesTags: (result, _error, arg) => {
@@ -378,7 +404,8 @@ const documentApi = contentManagerApi.injectEndpoints({
378
404
  id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
379
405
  },
380
406
  { type: "Document", id: `${model}_LIST` },
381
- "Relations"
407
+ "Relations",
408
+ "RecentDocumentList"
382
409
  ];
383
410
  }
384
411
  }),
@@ -409,7 +436,9 @@ const documentApi = contentManagerApi.injectEndpoints({
409
436
  id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
410
437
  },
411
438
  "Relations",
412
- { type: "UidAvailability", id: model }
439
+ { type: "UidAvailability", id: model },
440
+ "RecentDocumentList",
441
+ "RecentDocumentList"
413
442
  ];
414
443
  },
415
444
  async onQueryStarted({ data, ...patch }, { dispatch, queryFulfilled }) {
@@ -439,7 +468,8 @@ const documentApi = contentManagerApi.injectEndpoints({
439
468
  {
440
469
  type: "Document",
441
470
  id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
442
- }
471
+ },
472
+ "RecentDocumentList"
443
473
  ];
444
474
  }
445
475
  }),
@@ -452,7 +482,10 @@ const documentApi = contentManagerApi.injectEndpoints({
452
482
  params
453
483
  }
454
484
  }),
455
- invalidatesTags: (_res, _error, { model, documentIds }) => documentIds.map((id) => ({ type: "Document", id: `${model}_${id}` }))
485
+ invalidatesTags: (_res, _error, { model, documentIds }) => [
486
+ ...documentIds.map((id) => ({ type: "Document", id: `${model}_${id}` })),
487
+ "RecentDocumentList"
488
+ ]
456
489
  })
457
490
  })
458
491
  });
@@ -475,8 +508,7 @@ const {
475
508
  useUnpublishManyDocumentsMutation
476
509
  } = documentApi;
477
510
  const buildValidParams = (query) => {
478
- if (!query)
479
- return query;
511
+ if (!query) return query;
480
512
  const { plugins: _, ...validQueryParams } = {
481
513
  ...query,
482
514
  ...Object.values(query?.plugins ?? {}).reduce(
@@ -484,9 +516,6 @@ const buildValidParams = (query) => {
484
516
  {}
485
517
  )
486
518
  };
487
- if ("_q" in validQueryParams) {
488
- validQueryParams._q = encodeURIComponent(validQueryParams._q);
489
- }
490
519
  return validQueryParams;
491
520
  };
492
521
  const isBaseQueryError = (error) => {
@@ -1685,10 +1714,10 @@ const useDocumentActions = () => {
1685
1714
  update
1686
1715
  };
1687
1716
  };
1688
- const ProtectedHistoryPage = React.lazy(
1689
- () => Promise.resolve().then(() => require("./History-BLCCNgCt.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
1717
+ const ProtectedHistoryPage = React__namespace.lazy(
1718
+ () => Promise.resolve().then(() => require("./History-wjcK4L0C.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
1690
1719
  );
1691
- const routes$1 = [
1720
+ const routes$2 = [
1692
1721
  {
1693
1722
  path: ":collectionType/:slug/:id/history",
1694
1723
  Component: ProtectedHistoryPage
@@ -1698,32 +1727,45 @@ const routes$1 = [
1698
1727
  Component: ProtectedHistoryPage
1699
1728
  }
1700
1729
  ];
1730
+ const ProtectedPreviewPage = React__namespace.lazy(
1731
+ () => Promise.resolve().then(() => require("./Preview-DaOihysv.js")).then((mod) => ({ default: mod.ProtectedPreviewPage }))
1732
+ );
1733
+ const routes$1 = [
1734
+ {
1735
+ path: ":collectionType/:slug/:id/preview",
1736
+ Component: ProtectedPreviewPage
1737
+ },
1738
+ {
1739
+ path: ":collectionType/:slug/preview",
1740
+ Component: ProtectedPreviewPage
1741
+ }
1742
+ ];
1701
1743
  const ProtectedEditViewPage = React.lazy(
1702
- () => Promise.resolve().then(() => require("./EditViewPage-C4iTxUPU.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1744
+ () => Promise.resolve().then(() => require("./EditViewPage-B-kExt8C.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1703
1745
  );
1704
1746
  const ProtectedListViewPage = React.lazy(
1705
- () => Promise.resolve().then(() => require("./ListViewPage-CIQekSFz.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1747
+ () => Promise.resolve().then(() => require("./ListViewPage-D5NY9183.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1706
1748
  );
1707
1749
  const ProtectedListConfiguration = React.lazy(
1708
- () => Promise.resolve().then(() => require("./ListConfigurationPage-DxWpeZrO.js")).then((mod) => ({
1750
+ () => Promise.resolve().then(() => require("./ListConfigurationPage-CRbxIC3J.js")).then((mod) => ({
1709
1751
  default: mod.ProtectedListConfiguration
1710
1752
  }))
1711
1753
  );
1712
1754
  const ProtectedEditConfigurationPage = React.lazy(
1713
- () => Promise.resolve().then(() => require("./EditConfigurationPage-DHDQKBzw.js")).then((mod) => ({
1755
+ () => Promise.resolve().then(() => require("./EditConfigurationPage-RQkymxCy.js")).then((mod) => ({
1714
1756
  default: mod.ProtectedEditConfigurationPage
1715
1757
  }))
1716
1758
  );
1717
1759
  const ProtectedComponentConfigurationPage = React.lazy(
1718
- () => Promise.resolve().then(() => require("./ComponentConfigurationPage-gsCd80MU.js")).then((mod) => ({
1760
+ () => Promise.resolve().then(() => require("./ComponentConfigurationPage-BLWQy8ru.js")).then((mod) => ({
1719
1761
  default: mod.ProtectedComponentConfigurationPage
1720
1762
  }))
1721
1763
  );
1722
1764
  const NoPermissions = React.lazy(
1723
- () => Promise.resolve().then(() => require("./NoPermissionsPage-Oy4tmUrW.js")).then((mod) => ({ default: mod.NoPermissions }))
1765
+ () => Promise.resolve().then(() => require("./NoPermissionsPage-C5jwn70o.js")).then((mod) => ({ default: mod.NoPermissions }))
1724
1766
  );
1725
1767
  const NoContentType = React.lazy(
1726
- () => Promise.resolve().then(() => require("./NoContentTypePage-C5cxKvC2.js")).then((mod) => ({ default: mod.NoContentType }))
1768
+ () => Promise.resolve().then(() => require("./NoContentTypePage-BgQVE_Qb.js")).then((mod) => ({ default: mod.NoContentType }))
1727
1769
  );
1728
1770
  const CollectionTypePages = () => {
1729
1771
  const { collectionType } = reactRouterDom.useParams();
@@ -1735,7 +1777,7 @@ const CollectionTypePages = () => {
1735
1777
  const CLONE_RELATIVE_PATH = ":collectionType/:slug/clone/:origin";
1736
1778
  const CLONE_PATH = `/content-manager/${CLONE_RELATIVE_PATH}`;
1737
1779
  const LIST_RELATIVE_PATH = ":collectionType/:slug";
1738
- const LIST_PATH = `/content-manager/${LIST_RELATIVE_PATH}`;
1780
+ const LIST_PATH = `/content-manager/collection-types/:slug`;
1739
1781
  const routes = [
1740
1782
  {
1741
1783
  path: LIST_RELATIVE_PATH,
@@ -1769,6 +1811,7 @@ const routes = [
1769
1811
  path: "no-content-types",
1770
1812
  Component: NoContentType
1771
1813
  },
1814
+ ...routes$2,
1772
1815
  ...routes$1
1773
1816
  ];
1774
1817
  const DocumentActions = ({ actions: actions2 }) => {
@@ -1867,6 +1910,11 @@ const DocumentActionButton = (action) => {
1867
1910
  ) : null
1868
1911
  ] });
1869
1912
  };
1913
+ const MenuItem = styledComponents.styled(designSystem.Menu.Item)`
1914
+ &:hover {
1915
+ background: ${({ theme, isVariantDanger, isDisabled }) => isVariantDanger && !isDisabled ? theme.colors.danger100 : "neutral"};
1916
+ }
1917
+ `;
1870
1918
  const DocumentActionsMenu = ({
1871
1919
  actions: actions2,
1872
1920
  children,
@@ -1925,48 +1973,32 @@ const DocumentActionsMenu = ({
1925
1973
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Content, { maxHeight: void 0, popoverPlacement: "bottom-end", children: [
1926
1974
  actions2.map((action) => {
1927
1975
  return /* @__PURE__ */ jsxRuntime.jsx(
1928
- designSystem.Menu.Item,
1976
+ MenuItem,
1929
1977
  {
1930
1978
  disabled: action.disabled,
1931
1979
  onSelect: handleClick(action),
1932
1980
  display: "block",
1933
- children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", gap: 4, children: [
1934
- /* @__PURE__ */ jsxRuntime.jsxs(
1935
- designSystem.Flex,
1936
- {
1937
- color: !action.disabled ? convertActionVariantToColor(action.variant) : "inherit",
1938
- gap: 2,
1939
- tag: "span",
1940
- children: [
1941
- /* @__PURE__ */ jsxRuntime.jsx(
1942
- designSystem.Flex,
1943
- {
1944
- tag: "span",
1945
- color: !action.disabled ? convertActionVariantToIconColor(action.variant) : "inherit",
1946
- children: action.icon
1947
- }
1948
- ),
1949
- action.label
1950
- ]
1951
- }
1952
- ),
1953
- action.id.startsWith("HistoryAction") && /* @__PURE__ */ jsxRuntime.jsx(
1954
- designSystem.Flex,
1955
- {
1956
- alignItems: "center",
1957
- background: "alternative100",
1958
- borderStyle: "solid",
1959
- borderColor: "alternative200",
1960
- borderWidth: "1px",
1961
- height: 5,
1962
- paddingLeft: 2,
1963
- paddingRight: 2,
1964
- hasRadius: true,
1965
- color: "alternative600",
1966
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", fontWeight: "bold", lineHeight: 1, children: formatMessage({ id: "global.new", defaultMessage: "New" }) })
1967
- }
1968
- )
1969
- ] })
1981
+ isVariantDanger: action.variant === "danger",
1982
+ isDisabled: action.disabled,
1983
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "space-between", gap: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(
1984
+ designSystem.Flex,
1985
+ {
1986
+ color: !action.disabled ? convertActionVariantToColor(action.variant) : "inherit",
1987
+ gap: 2,
1988
+ tag: "span",
1989
+ children: [
1990
+ /* @__PURE__ */ jsxRuntime.jsx(
1991
+ designSystem.Flex,
1992
+ {
1993
+ tag: "span",
1994
+ color: !action.disabled ? convertActionVariantToIconColor(action.variant) : "inherit",
1995
+ children: action.icon
1996
+ }
1997
+ ),
1998
+ action.label
1999
+ ]
2000
+ }
2001
+ ) })
1970
2002
  },
1971
2003
  action.id
1972
2004
  );
@@ -2103,6 +2135,7 @@ const PublishAction$1 = ({
2103
2135
  const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
2104
2136
  const isListView = reactRouterDom.useMatch(LIST_PATH) !== null;
2105
2137
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
2138
+ const { id } = reactRouterDom.useParams();
2106
2139
  const { formatMessage } = reactIntl.useIntl();
2107
2140
  const canPublish = useDocumentRBAC("PublishAction", ({ canPublish: canPublish2 }) => canPublish2);
2108
2141
  const { publish } = useDocumentActions();
@@ -2205,10 +2238,12 @@ const PublishAction$1 = ({
2205
2238
  transformData(formValues)
2206
2239
  );
2207
2240
  if ("data" in res && collectionType !== SINGLE_TYPES) {
2208
- navigate({
2209
- pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2210
- search: rawQuery
2211
- });
2241
+ if (id === "create") {
2242
+ navigate({
2243
+ pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2244
+ search: rawQuery
2245
+ });
2246
+ }
2212
2247
  } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2213
2248
  setErrors(formatValidationErrors(res.error));
2214
2249
  }
@@ -2261,6 +2296,7 @@ const PublishAction$1 = ({
2261
2296
  };
2262
2297
  };
2263
2298
  PublishAction$1.type = "publish";
2299
+ PublishAction$1.position = "panel";
2264
2300
  const UpdateAction = ({
2265
2301
  activeTab,
2266
2302
  documentId,
@@ -2283,96 +2319,134 @@ const UpdateAction = ({
2283
2319
  const validate = strapiAdmin.useForm("UpdateAction", (state) => state.validate);
2284
2320
  const setErrors = strapiAdmin.useForm("UpdateAction", (state) => state.setErrors);
2285
2321
  const resetForm = strapiAdmin.useForm("PublishAction", ({ resetForm: resetForm2 }) => resetForm2);
2286
- return {
2287
- /**
2288
- * Disabled when:
2289
- * - the form is submitting
2290
- * - the document is not modified & we're not cloning (you can save a clone entity straight away)
2291
- * - the active tab is the published tab
2292
- */
2293
- disabled: isSubmitting || !modified && !isCloning || activeTab === "published",
2294
- label: formatMessage({
2295
- id: "content-manager.containers.Edit.save",
2296
- defaultMessage: "Save"
2297
- }),
2298
- onClick: async () => {
2299
- setSubmitting(true);
2300
- try {
2301
- const { errors } = await validate(true, {
2302
- status: "draft"
2322
+ const handleUpdate = React__namespace.useCallback(async () => {
2323
+ setSubmitting(true);
2324
+ try {
2325
+ if (!modified) {
2326
+ return;
2327
+ }
2328
+ const { errors } = await validate(true, {
2329
+ status: "draft"
2330
+ });
2331
+ if (errors) {
2332
+ toggleNotification({
2333
+ type: "danger",
2334
+ message: formatMessage({
2335
+ id: "content-manager.validation.error",
2336
+ defaultMessage: "There are validation errors in your document. Please fix them before saving."
2337
+ })
2303
2338
  });
2304
- if (errors) {
2305
- toggleNotification({
2306
- type: "danger",
2307
- message: formatMessage({
2308
- id: "content-manager.validation.error",
2309
- defaultMessage: "There are validation errors in your document. Please fix them before saving."
2310
- })
2311
- });
2312
- return;
2313
- }
2314
- if (isCloning) {
2315
- const res = await clone(
2316
- {
2317
- model,
2318
- documentId: cloneMatch.params.origin,
2319
- params
2320
- },
2321
- transformData(document)
2322
- );
2323
- if ("data" in res) {
2324
- navigate(
2325
- {
2326
- pathname: `../${res.data.documentId}`,
2327
- search: rawQuery
2328
- },
2329
- { relative: "path" }
2330
- );
2331
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2332
- setErrors(formatValidationErrors(res.error));
2333
- }
2334
- } else if (documentId || collectionType === SINGLE_TYPES) {
2335
- const res = await update(
2339
+ return;
2340
+ }
2341
+ if (isCloning) {
2342
+ const res = await clone(
2343
+ {
2344
+ model,
2345
+ documentId: cloneMatch.params.origin,
2346
+ params
2347
+ },
2348
+ transformData(document)
2349
+ );
2350
+ if ("data" in res) {
2351
+ navigate(
2336
2352
  {
2337
- collectionType,
2338
- model,
2339
- documentId,
2340
- params
2353
+ pathname: `../${res.data.documentId}`,
2354
+ search: rawQuery
2341
2355
  },
2342
- transformData(document)
2356
+ { relative: "path" }
2343
2357
  );
2344
- if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2345
- setErrors(formatValidationErrors(res.error));
2346
- } else {
2347
- resetForm();
2348
- }
2358
+ } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2359
+ setErrors(formatValidationErrors(res.error));
2360
+ }
2361
+ } else if (documentId || collectionType === SINGLE_TYPES) {
2362
+ const res = await update(
2363
+ {
2364
+ collectionType,
2365
+ model,
2366
+ documentId,
2367
+ params
2368
+ },
2369
+ transformData(document)
2370
+ );
2371
+ if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2372
+ setErrors(formatValidationErrors(res.error));
2349
2373
  } else {
2350
- const res = await create(
2374
+ resetForm();
2375
+ }
2376
+ } else {
2377
+ const res = await create(
2378
+ {
2379
+ model,
2380
+ params
2381
+ },
2382
+ transformData(document)
2383
+ );
2384
+ if ("data" in res && collectionType !== SINGLE_TYPES) {
2385
+ navigate(
2351
2386
  {
2352
- model,
2353
- params
2387
+ pathname: `../${res.data.documentId}`,
2388
+ search: rawQuery
2354
2389
  },
2355
- transformData(document)
2390
+ { replace: true, relative: "path" }
2356
2391
  );
2357
- if ("data" in res && collectionType !== SINGLE_TYPES) {
2358
- navigate(
2359
- {
2360
- pathname: `../${res.data.documentId}`,
2361
- search: rawQuery
2362
- },
2363
- { replace: true, relative: "path" }
2364
- );
2365
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2366
- setErrors(formatValidationErrors(res.error));
2367
- }
2392
+ } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2393
+ setErrors(formatValidationErrors(res.error));
2368
2394
  }
2369
- } finally {
2370
- setSubmitting(false);
2371
2395
  }
2396
+ } finally {
2397
+ setSubmitting(false);
2372
2398
  }
2399
+ }, [
2400
+ clone,
2401
+ cloneMatch?.params.origin,
2402
+ collectionType,
2403
+ create,
2404
+ document,
2405
+ documentId,
2406
+ formatMessage,
2407
+ formatValidationErrors,
2408
+ isCloning,
2409
+ model,
2410
+ modified,
2411
+ navigate,
2412
+ params,
2413
+ rawQuery,
2414
+ resetForm,
2415
+ setErrors,
2416
+ setSubmitting,
2417
+ toggleNotification,
2418
+ update,
2419
+ validate
2420
+ ]);
2421
+ React__namespace.useEffect(() => {
2422
+ const handleKeyDown = (e) => {
2423
+ if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) {
2424
+ e.preventDefault();
2425
+ handleUpdate();
2426
+ }
2427
+ };
2428
+ window.addEventListener("keydown", handleKeyDown);
2429
+ return () => {
2430
+ window.removeEventListener("keydown", handleKeyDown);
2431
+ };
2432
+ }, [handleUpdate]);
2433
+ return {
2434
+ /**
2435
+ * Disabled when:
2436
+ * - the form is submitting
2437
+ * - the document is not modified & we're not cloning (you can save a clone entity straight away)
2438
+ * - the active tab is the published tab
2439
+ */
2440
+ disabled: isSubmitting || !modified && !isCloning || activeTab === "published",
2441
+ label: formatMessage({
2442
+ id: "global.save",
2443
+ defaultMessage: "Save"
2444
+ }),
2445
+ onClick: handleUpdate
2373
2446
  };
2374
2447
  };
2375
2448
  UpdateAction.type = "update";
2449
+ UpdateAction.position = "panel";
2376
2450
  const UNPUBLISH_DRAFT_OPTIONS = {
2377
2451
  KEEP: "keep",
2378
2452
  DISCARD: "discard"
@@ -2495,6 +2569,7 @@ const UnpublishAction$1 = ({
2495
2569
  };
2496
2570
  };
2497
2571
  UnpublishAction$1.type = "unpublish";
2572
+ UnpublishAction$1.position = "panel";
2498
2573
  const DiscardAction = ({
2499
2574
  activeTab,
2500
2575
  documentId,
@@ -2545,6 +2620,7 @@ const DiscardAction = ({
2545
2620
  };
2546
2621
  };
2547
2622
  DiscardAction.type = "discard";
2623
+ DiscardAction.position = "panel";
2548
2624
  const DEFAULT_ACTIONS = [PublishAction$1, UpdateAction, UnpublishAction$1, DiscardAction];
2549
2625
  const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
2550
2626
  const RelativeTime = React__namespace.forwardRef(
@@ -2557,7 +2633,7 @@ const RelativeTime = React__namespace.forwardRef(
2557
2633
  });
2558
2634
  const unit = intervals.find((intervalUnit) => {
2559
2635
  return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
2560
- });
2636
+ }) ?? "seconds";
2561
2637
  const relativeTime = dateFns.isPast(timestamp) ? -interval[unit] : interval[unit];
2562
2638
  const customInterval = customIntervals.find(
2563
2639
  (custom) => interval[custom.unit] < custom.threshold
@@ -2591,19 +2667,29 @@ const getDisplayName = ({
2591
2667
  return email ?? "";
2592
2668
  };
2593
2669
  const capitalise = (str) => str.charAt(0).toUpperCase() + str.slice(1);
2594
- const DocumentStatus = ({ status = "draft", ...restProps }) => {
2670
+ const DocumentStatus = ({ status = "draft", size = "S", ...restProps }) => {
2595
2671
  const statusVariant = status === "draft" ? "secondary" : status === "published" ? "success" : "alternative";
2596
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Status, { ...restProps, showBullet: false, size: "S", variant: statusVariant, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "span", variant: "omega", fontWeight: "bold", children: capitalise(status) }) });
2672
+ const { formatMessage } = reactIntl.useIntl();
2673
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Status, { ...restProps, size, variant: statusVariant, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "span", variant: "omega", fontWeight: "bold", children: formatMessage({
2674
+ id: `content-manager.containers.List.${status}`,
2675
+ defaultMessage: capitalise(status)
2676
+ }) }) });
2597
2677
  };
2598
2678
  const Header = ({ isCreating, status, title: documentTitle = "Untitled" }) => {
2599
2679
  const { formatMessage } = reactIntl.useIntl();
2600
2680
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
2681
+ const params = reactRouterDom.useParams();
2601
2682
  const title = isCreating ? formatMessage({
2602
2683
  id: "content-manager.containers.edit.title.new",
2603
2684
  defaultMessage: "Create an entry"
2604
2685
  }) : documentTitle;
2605
2686
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "flex-start", paddingTop: 6, paddingBottom: 4, gap: 2, children: [
2606
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.BackButton, {}),
2687
+ /* @__PURE__ */ jsxRuntime.jsx(
2688
+ strapiAdmin.BackButton,
2689
+ {
2690
+ fallback: params.collectionType === SINGLE_TYPES ? void 0 : `../${COLLECTION_TYPES}/${params.slug}`
2691
+ }
2692
+ ),
2607
2693
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { width: "100%", justifyContent: "space-between", gap: "80px", alignItems: "flex-start", children: [
2608
2694
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "alpha", tag: "h1", children: title }),
2609
2695
  /* @__PURE__ */ jsxRuntime.jsx(HeaderToolbar, {})
@@ -2654,7 +2740,7 @@ const HeaderToolbar = () => {
2654
2740
  meta: isCloning ? void 0 : meta,
2655
2741
  collectionType
2656
2742
  },
2657
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
2743
+ descriptions: plugins["content-manager"].apis.getDocumentActions("header"),
2658
2744
  children: (actions2) => {
2659
2745
  const headerActions = actions2.filter((action) => {
2660
2746
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -2862,6 +2948,7 @@ const ConfigureTheViewAction = ({ collectionType, model }) => {
2862
2948
  };
2863
2949
  };
2864
2950
  ConfigureTheViewAction.type = "configure-the-view";
2951
+ ConfigureTheViewAction.position = "header";
2865
2952
  const EditTheModelAction = ({ model }) => {
2866
2953
  const navigate = reactRouterDom.useNavigate();
2867
2954
  const { formatMessage } = reactIntl.useIntl();
@@ -2878,6 +2965,7 @@ const EditTheModelAction = ({ model }) => {
2878
2965
  };
2879
2966
  };
2880
2967
  EditTheModelAction.type = "edit-the-model";
2968
+ EditTheModelAction.position = "header";
2881
2969
  const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2882
2970
  const navigate = reactRouterDom.useNavigate();
2883
2971
  const { formatMessage } = reactIntl.useIntl();
@@ -2951,6 +3039,7 @@ const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2951
3039
  };
2952
3040
  };
2953
3041
  DeleteAction$1.type = "delete";
3042
+ DeleteAction$1.position = ["header", "table-row"];
2954
3043
  const DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction$1];
2955
3044
  const Panels = () => {
2956
3045
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
@@ -3013,7 +3102,7 @@ const ActionsPanelContent = () => {
3013
3102
  strapiAdmin.DescriptionComponentRenderer,
3014
3103
  {
3015
3104
  props,
3016
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
3105
+ descriptions: plugins["content-manager"].apis.getDocumentActions("panel"),
3017
3106
  children: (actions2) => /* @__PURE__ */ jsxRuntime.jsx(DocumentActions, { actions: actions2 })
3018
3107
  }
3019
3108
  ),
@@ -3290,18 +3379,10 @@ const SelectedEntriesTableContent = ({
3290
3379
  search: row.locale && `?plugins[i18n][locale]=${row.locale}`
3291
3380
  },
3292
3381
  state: { from: pathname },
3293
- label: formatMessage(
3294
- { id: "app.component.HelperPluginTable.edit", defaultMessage: "Edit {target}" },
3295
- {
3296
- target: formatMessage(
3297
- {
3298
- id: "content-manager.components.ListViewHelperPluginTable.row-line",
3299
- defaultMessage: "item line {number}"
3300
- },
3301
- { number: index2 + 1 }
3302
- )
3303
- }
3304
- ),
3382
+ label: formatMessage({
3383
+ id: "content-manager.bulk-publish.edit",
3384
+ defaultMessage: "Edit"
3385
+ }),
3305
3386
  target: "_blank",
3306
3387
  marginLeft: "auto",
3307
3388
  variant: "ghost",
@@ -3475,8 +3556,7 @@ const PublishAction = ({ documents, model }) => {
3475
3556
  const refetchList = () => {
3476
3557
  contentManagerApi.util.invalidateTags([{ type: "Document", id: `${model}_LIST` }]);
3477
3558
  };
3478
- if (!showPublishButton)
3479
- return null;
3559
+ if (!showPublishButton) return null;
3480
3560
  return {
3481
3561
  actionType: "publish",
3482
3562
  variant: "tertiary",
@@ -3544,8 +3624,7 @@ const DeleteAction = ({ documents, model }) => {
3544
3624
  selectRow([]);
3545
3625
  }
3546
3626
  };
3547
- if (!hasDeletePermission)
3548
- return null;
3627
+ if (!hasDeletePermission) return null;
3549
3628
  return {
3550
3629
  variant: "danger-light",
3551
3630
  label: formatMessage({ id: "global.delete", defaultMessage: "Delete" }),
@@ -3594,8 +3673,7 @@ const UnpublishAction = ({ documents, model }) => {
3594
3673
  }
3595
3674
  };
3596
3675
  const showUnpublishButton = hasDraftAndPublishEnabled && hasPublishPermission && documents.some((entry) => entry.status === "published" || entry.status === "modified");
3597
- if (!showUnpublishButton)
3598
- return null;
3676
+ if (!showUnpublishButton) return null;
3599
3677
  return {
3600
3678
  variant: "tertiary",
3601
3679
  label: formatMessage({ id: "app.utils.unpublish", defaultMessage: "Unpublish" }),
@@ -3700,7 +3778,7 @@ const TableActions = ({ document }) => {
3700
3778
  strapiAdmin.DescriptionComponentRenderer,
3701
3779
  {
3702
3780
  props,
3703
- descriptions: plugins["content-manager"].apis.getDocumentActions().filter((action) => action.name !== "PublishAction"),
3781
+ descriptions: plugins["content-manager"].apis.getDocumentActions("table-row").filter((action) => action.name !== "PublishAction"),
3704
3782
  children: (actions2) => {
3705
3783
  const tableRowActions = actions2.filter((action) => {
3706
3784
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -3759,6 +3837,7 @@ const EditAction = ({ documentId }) => {
3759
3837
  };
3760
3838
  };
3761
3839
  EditAction.type = "edit";
3840
+ EditAction.position = "table-row";
3762
3841
  const StyledPencil = styledComponents.styled(Icons.Pencil)`
3763
3842
  path {
3764
3843
  fill: currentColor;
@@ -3835,6 +3914,7 @@ const CloneAction = ({ model, documentId }) => {
3835
3914
  };
3836
3915
  };
3837
3916
  CloneAction.type = "clone";
3917
+ CloneAction.position = "table-row";
3838
3918
  const StyledDuplicate = styledComponents.styled(Icons.Duplicate)`
3839
3919
  path {
3840
3920
  fill: currentColor;
@@ -3921,7 +4001,14 @@ class ContentManagerPlugin {
3921
4001
  addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),
3922
4002
  addEditViewSidePanel: this.addEditViewSidePanel.bind(this),
3923
4003
  getBulkActions: () => this.bulkActions,
3924
- getDocumentActions: () => this.documentActions,
4004
+ getDocumentActions: (position) => {
4005
+ if (position) {
4006
+ return this.documentActions.filter(
4007
+ (action) => action.position == void 0 || [action.position].flat().includes(position)
4008
+ );
4009
+ }
4010
+ return this.documentActions;
4011
+ },
3925
4012
  getEditViewSidePanels: () => this.editViewSidePanels,
3926
4013
  getHeaderActions: () => this.headerActions
3927
4014
  }
@@ -3931,10 +4018,8 @@ class ContentManagerPlugin {
3931
4018
  const getPrintableType = (value) => {
3932
4019
  const nativeType = typeof value;
3933
4020
  if (nativeType === "object") {
3934
- if (value === null)
3935
- return "null";
3936
- if (Array.isArray(value))
3937
- return "array";
4021
+ if (value === null) return "null";
4022
+ if (Array.isArray(value)) return "array";
3938
4023
  if (value instanceof Object && value.constructor.name !== "Object") {
3939
4024
  return value.constructor.name;
3940
4025
  }
@@ -3945,17 +4030,27 @@ const HistoryAction = ({ model, document }) => {
3945
4030
  const { formatMessage } = reactIntl.useIntl();
3946
4031
  const [{ query }] = strapiAdmin.useQueryParams();
3947
4032
  const navigate = reactRouterDom.useNavigate();
4033
+ const { trackUsage } = strapiAdmin.useTracking();
4034
+ const { pathname } = reactRouterDom.useLocation();
3948
4035
  const pluginsQueryParams = qs.stringify({ plugins: query.plugins }, { encode: false });
3949
4036
  if (!window.strapi.features.isEnabled("cms-content-history")) {
3950
4037
  return null;
3951
4038
  }
4039
+ const handleOnClick = () => {
4040
+ const destination = { pathname: "history", search: pluginsQueryParams };
4041
+ trackUsage("willNavigate", {
4042
+ from: pathname,
4043
+ to: `${pathname}/${destination.pathname}`
4044
+ });
4045
+ navigate(destination);
4046
+ };
3952
4047
  return {
3953
4048
  icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.ClockCounterClockwise, {}),
3954
4049
  label: formatMessage({
3955
4050
  id: "content-manager.history.document-action",
3956
4051
  defaultMessage: "Content History"
3957
4052
  }),
3958
- onClick: () => navigate({ pathname: "history", search: pluginsQueryParams }),
4053
+ onClick: handleOnClick,
3959
4054
  disabled: (
3960
4055
  /**
3961
4056
  * The user is creating a new document.
@@ -3977,6 +4072,7 @@ const HistoryAction = ({ model, document }) => {
3977
4072
  };
3978
4073
  };
3979
4074
  HistoryAction.type = "history";
4075
+ HistoryAction.position = "header";
3980
4076
  const historyAdmin = {
3981
4077
  bootstrap(app) {
3982
4078
  const { addDocumentAction } = app.getPlugin("content-manager").apis;
@@ -4023,13 +4119,86 @@ const { setInitialData } = actions;
4023
4119
  const reducer = toolkit.combineReducers({
4024
4120
  app: reducer$1
4025
4121
  });
4026
- const FEATURE_ID = "preview";
4122
+ const previewApi = contentManagerApi.injectEndpoints({
4123
+ endpoints: (builder) => ({
4124
+ getPreviewUrl: builder.query({
4125
+ query({ query, params }) {
4126
+ return {
4127
+ url: `/content-manager/preview/url/${params.contentType}`,
4128
+ method: "GET",
4129
+ config: {
4130
+ params: query
4131
+ }
4132
+ };
4133
+ }
4134
+ })
4135
+ })
4136
+ });
4137
+ const { useGetPreviewUrlQuery } = previewApi;
4138
+ const ConditionalTooltip = ({ isShown, label, children }) => {
4139
+ if (isShown) {
4140
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { label, children });
4141
+ }
4142
+ return children;
4143
+ };
4144
+ const PreviewSidePanel = ({ model, documentId, document }) => {
4145
+ const { formatMessage } = reactIntl.useIntl();
4146
+ const { trackUsage } = strapiAdmin.useTracking();
4147
+ const { pathname } = reactRouterDom.useLocation();
4148
+ const [{ query }] = strapiAdmin.useQueryParams();
4149
+ const isModified = strapiAdmin.useForm("PreviewSidePanel", (state) => state.modified);
4150
+ const { data, error } = useGetPreviewUrlQuery({
4151
+ params: {
4152
+ contentType: model
4153
+ },
4154
+ query: {
4155
+ documentId,
4156
+ locale: document?.locale,
4157
+ status: document?.status
4158
+ }
4159
+ });
4160
+ if (!data?.data?.url || error) {
4161
+ return null;
4162
+ }
4163
+ const trackNavigation = () => {
4164
+ const destinationPathname = pathname.replace(/\/$/, "") + "/preview";
4165
+ trackUsage("willNavigate", { from: pathname, to: destinationPathname });
4166
+ };
4167
+ return {
4168
+ title: formatMessage({ id: "content-manager.preview.panel.title", defaultMessage: "Preview" }),
4169
+ content: /* @__PURE__ */ jsxRuntime.jsx(
4170
+ ConditionalTooltip,
4171
+ {
4172
+ label: formatMessage({
4173
+ id: "content-manager.preview.panel.button-disabled-tooltip",
4174
+ defaultMessage: "Please save to open the preview"
4175
+ }),
4176
+ isShown: isModified,
4177
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { cursor: "not-allowed", width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
4178
+ designSystem.Button,
4179
+ {
4180
+ variant: "tertiary",
4181
+ tag: reactRouterDom.Link,
4182
+ to: { pathname: "preview", search: qs.stringify(query, { encode: false }) },
4183
+ onClick: trackNavigation,
4184
+ width: "100%",
4185
+ disabled: isModified,
4186
+ pointerEvents: isModified ? "none" : void 0,
4187
+ tabIndex: isModified ? -1 : void 0,
4188
+ children: formatMessage({
4189
+ id: "content-manager.preview.panel.button",
4190
+ defaultMessage: "Open preview"
4191
+ })
4192
+ }
4193
+ ) })
4194
+ }
4195
+ )
4196
+ };
4197
+ };
4027
4198
  const previewAdmin = {
4028
4199
  bootstrap(app) {
4029
- if (!window.strapi.future.isEnabled(FEATURE_ID)) {
4030
- return {};
4031
- }
4032
- console.log("Bootstrapping preview admin");
4200
+ const contentManagerPluginApis = app.getPlugin("content-manager").apis;
4201
+ contentManagerPluginApis.addEditViewSidePanel([PreviewSidePanel]);
4033
4202
  }
4034
4203
  };
4035
4204
  const index = {
@@ -4051,7 +4220,7 @@ const index = {
4051
4220
  app.router.addRoute({
4052
4221
  path: "content-manager/*",
4053
4222
  lazy: async () => {
4054
- const { Layout } = await Promise.resolve().then(() => require("./layout-lMc9i1-Z.js"));
4223
+ const { Layout } = await Promise.resolve().then(() => require("./layout-BW80JSCd.js"));
4055
4224
  return {
4056
4225
  Component: Layout
4057
4226
  };
@@ -4071,7 +4240,7 @@ const index = {
4071
4240
  async registerTrads({ locales }) {
4072
4241
  const importedTrads = await Promise.all(
4073
4242
  locales.map((locale) => {
4074
- 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-Bm0D0IWz.js")), "./translations/es.json": () => Promise.resolve().then(() => require("./es-EUonQTon.js")), "./translations/eu.json": () => Promise.resolve().then(() => require("./eu-VDH-3ovk.js")), "./translations/fr.json": () => Promise.resolve().then(() => require("./fr-B7kGGg3E.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-CcFe8diO.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 }) => {
4243
+ 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-BzQmavmK.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 }) => {
4075
4244
  return {
4076
4245
  data: prefixPluginTranslations(data, PLUGIN_ID),
4077
4246
  locale
@@ -4129,5 +4298,6 @@ exports.useGetAllContentTypeSettingsQuery = useGetAllContentTypeSettingsQuery;
4129
4298
  exports.useGetAllDocumentsQuery = useGetAllDocumentsQuery;
4130
4299
  exports.useGetContentTypeConfigurationQuery = useGetContentTypeConfigurationQuery;
4131
4300
  exports.useGetInitialDataQuery = useGetInitialDataQuery;
4301
+ exports.useGetPreviewUrlQuery = useGetPreviewUrlQuery;
4132
4302
  exports.useUpdateContentTypeConfigurationMutation = useUpdateContentTypeConfigurationMutation;
4133
- //# sourceMappingURL=index-BIWDoFLK.js.map
4303
+ //# sourceMappingURL=index-Ca7YWlAA.js.map