@strapi/content-manager 0.0.0-experimental.5e04dee5c96cd68273df3b3cadf4635e19dc2afc → 0.0.0-experimental.5f6fc3bc1a7d1b7c5fe926a37d4869f00e812287

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 (109) hide show
  1. package/dist/_chunks/{ComponentConfigurationPage-B3yDbeU1.mjs → ComponentConfigurationPage-DJ5voqEK.mjs} +3 -3
  2. package/dist/_chunks/{ComponentConfigurationPage-B3yDbeU1.mjs.map → ComponentConfigurationPage-DJ5voqEK.mjs.map} +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-KXSuLnQD.js → ComponentConfigurationPage-_6osrv39.js} +3 -3
  4. package/dist/_chunks/{ComponentConfigurationPage-KXSuLnQD.js.map → ComponentConfigurationPage-_6osrv39.js.map} +1 -1
  5. package/dist/_chunks/{EditConfigurationPage-D7PrLO8j.mjs → EditConfigurationPage-CZofxSLy.mjs} +3 -3
  6. package/dist/_chunks/{EditConfigurationPage-D7PrLO8j.mjs.map → EditConfigurationPage-CZofxSLy.mjs.map} +1 -1
  7. package/dist/_chunks/{EditConfigurationPage-BQ17--5R.js → EditConfigurationPage-ZN3s568V.js} +3 -3
  8. package/dist/_chunks/{EditConfigurationPage-BQ17--5R.js.map → EditConfigurationPage-ZN3s568V.js.map} +1 -1
  9. package/dist/_chunks/{EditViewPage-BgjdnGz2.js → EditViewPage-Co2IKQZH.js} +4 -4
  10. package/dist/_chunks/EditViewPage-Co2IKQZH.js.map +1 -0
  11. package/dist/_chunks/{EditViewPage-B7VgwJaG.mjs → EditViewPage-HYljoEY7.mjs} +4 -4
  12. package/dist/_chunks/EditViewPage-HYljoEY7.mjs.map +1 -0
  13. package/dist/_chunks/{Field-tHCw4lGA.mjs → Field-BOPUMZ1u.mjs} +31 -62
  14. package/dist/_chunks/Field-BOPUMZ1u.mjs.map +1 -0
  15. package/dist/_chunks/{Field-CdK7ZLmv.js → Field-G9CkFUtP.js} +34 -65
  16. package/dist/_chunks/Field-G9CkFUtP.js.map +1 -0
  17. package/dist/_chunks/{Form-BJxdTv3Q.mjs → Form-CDwNp7pU.mjs} +15 -7
  18. package/dist/_chunks/Form-CDwNp7pU.mjs.map +1 -0
  19. package/dist/_chunks/{Form-C_0KTVvV.js → Form-crsbkGxI.js} +15 -7
  20. package/dist/_chunks/Form-crsbkGxI.js.map +1 -0
  21. package/dist/_chunks/{History-DR2txJLE.mjs → History-BDZrgfZ3.mjs} +4 -4
  22. package/dist/_chunks/{History-DR2txJLE.mjs.map → History-BDZrgfZ3.mjs.map} +1 -1
  23. package/dist/_chunks/{History-nuEzM5qm.js → History-CWcM9HnW.js} +4 -4
  24. package/dist/_chunks/{History-nuEzM5qm.js.map → History-CWcM9HnW.js.map} +1 -1
  25. package/dist/_chunks/{ListConfigurationPage-voFVtXu6.mjs → ListConfigurationPage-BZ3ScUna.mjs} +2 -2
  26. package/dist/_chunks/{ListConfigurationPage-voFVtXu6.mjs.map → ListConfigurationPage-BZ3ScUna.mjs.map} +1 -1
  27. package/dist/_chunks/{ListConfigurationPage-CnB86Psm.js → ListConfigurationPage-DGzoQD_I.js} +2 -2
  28. package/dist/_chunks/{ListConfigurationPage-CnB86Psm.js.map → ListConfigurationPage-DGzoQD_I.js.map} +1 -1
  29. package/dist/_chunks/{ListViewPage-SXIXm-RM.js → ListViewPage-BBAC9aPu.js} +42 -38
  30. package/dist/_chunks/ListViewPage-BBAC9aPu.js.map +1 -0
  31. package/dist/_chunks/{ListViewPage-B_GaWgRH.mjs → ListViewPage-CsX7tWx-.mjs} +39 -35
  32. package/dist/_chunks/ListViewPage-CsX7tWx-.mjs.map +1 -0
  33. package/dist/_chunks/{NoContentTypePage-BzsQ3hLZ.js → NoContentTypePage-CwVDx_YC.js} +2 -2
  34. package/dist/_chunks/{NoContentTypePage-BzsQ3hLZ.js.map → NoContentTypePage-CwVDx_YC.js.map} +1 -1
  35. package/dist/_chunks/{NoContentTypePage-CYiGpsbj.mjs → NoContentTypePage-LClTUPWs.mjs} +2 -2
  36. package/dist/_chunks/{NoContentTypePage-CYiGpsbj.mjs.map → NoContentTypePage-LClTUPWs.mjs.map} +1 -1
  37. package/dist/_chunks/{NoPermissionsPage-IGkId4C5.js → NoPermissionsPage-D2iWw-sn.js} +2 -2
  38. package/dist/_chunks/{NoPermissionsPage-IGkId4C5.js.map → NoPermissionsPage-D2iWw-sn.js.map} +1 -1
  39. package/dist/_chunks/{NoPermissionsPage-B5baIHal.mjs → NoPermissionsPage-S4Re3FwO.mjs} +2 -2
  40. package/dist/_chunks/{NoPermissionsPage-B5baIHal.mjs.map → NoPermissionsPage-S4Re3FwO.mjs.map} +1 -1
  41. package/dist/_chunks/{Relations-CIYDdKU-.mjs → Relations-Dmv0Tpe5.mjs} +3 -3
  42. package/dist/_chunks/{Relations-CIYDdKU-.mjs.map → Relations-Dmv0Tpe5.mjs.map} +1 -1
  43. package/dist/_chunks/{Relations-Dhuurpx2.js → Relations-jwuTFGOV.js} +3 -3
  44. package/dist/_chunks/{Relations-Dhuurpx2.js.map → Relations-jwuTFGOV.js.map} +1 -1
  45. package/dist/_chunks/{en-uOUIxfcQ.js → en-BlhnxQfj.js} +7 -6
  46. package/dist/_chunks/{en-uOUIxfcQ.js.map → en-BlhnxQfj.js.map} +1 -1
  47. package/dist/_chunks/{en-BrCTWlZv.mjs → en-C8YBvRrK.mjs} +7 -6
  48. package/dist/_chunks/{en-BrCTWlZv.mjs.map → en-C8YBvRrK.mjs.map} +1 -1
  49. package/dist/_chunks/{index-C9TJPyni.mjs → index-BmUAydCA.mjs} +1032 -914
  50. package/dist/_chunks/index-BmUAydCA.mjs.map +1 -0
  51. package/dist/_chunks/{index-CdT0kHZ8.js → index-CBX6KyXv.js} +1012 -894
  52. package/dist/_chunks/index-CBX6KyXv.js.map +1 -0
  53. package/dist/_chunks/{layout-BNqvLR_b.mjs → layout-ClP-DC72.mjs} +5 -4
  54. package/dist/_chunks/{layout-BNqvLR_b.mjs.map → layout-ClP-DC72.mjs.map} +1 -1
  55. package/dist/_chunks/{layout-C6dxWYT7.js → layout-CxxkX9jY.js} +5 -4
  56. package/dist/_chunks/{layout-C6dxWYT7.js.map → layout-CxxkX9jY.js.map} +1 -1
  57. package/dist/_chunks/{relations-DtFaDnP1.js → relations-DIjTADIu.js} +2 -2
  58. package/dist/_chunks/{relations-DtFaDnP1.js.map → relations-DIjTADIu.js.map} +1 -1
  59. package/dist/_chunks/{relations-CkKqKw65.mjs → relations-op89RClB.mjs} +2 -2
  60. package/dist/_chunks/{relations-CkKqKw65.mjs.map → relations-op89RClB.mjs.map} +1 -1
  61. package/dist/_chunks/{usePrev-B9w_-eYc.js → useDebounce-CtcjDB3L.js} +14 -1
  62. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -0
  63. package/dist/_chunks/useDebounce-DmuSJIF3.mjs +29 -0
  64. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -0
  65. package/dist/admin/index.js +2 -1
  66. package/dist/admin/index.js.map +1 -1
  67. package/dist/admin/index.mjs +5 -4
  68. package/dist/admin/src/exports.d.ts +1 -1
  69. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  70. package/dist/admin/src/hooks/useDocument.d.ts +30 -1
  71. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +0 -32
  72. package/dist/admin/src/pages/EditView/components/Header.d.ts +10 -11
  73. package/dist/admin/src/services/api.d.ts +1 -1
  74. package/dist/admin/src/services/components.d.ts +2 -2
  75. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  76. package/dist/admin/src/services/documents.d.ts +19 -17
  77. package/dist/admin/src/services/init.d.ts +1 -1
  78. package/dist/admin/src/services/relations.d.ts +2 -2
  79. package/dist/admin/src/services/uid.d.ts +3 -3
  80. package/dist/admin/src/utils/validation.d.ts +4 -1
  81. package/dist/server/index.js +50 -25
  82. package/dist/server/index.js.map +1 -1
  83. package/dist/server/index.mjs +50 -25
  84. package/dist/server/index.mjs.map +1 -1
  85. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  86. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  87. package/dist/server/src/history/services/history.d.ts.map +1 -1
  88. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  89. package/dist/server/src/history/services/utils.d.ts +1 -0
  90. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  91. package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
  92. package/dist/server/src/services/permission-checker.d.ts.map +1 -1
  93. package/dist/shared/contracts/collection-types.d.ts +3 -1
  94. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  95. package/package.json +11 -11
  96. package/dist/_chunks/EditViewPage-B7VgwJaG.mjs.map +0 -1
  97. package/dist/_chunks/EditViewPage-BgjdnGz2.js.map +0 -1
  98. package/dist/_chunks/Field-CdK7ZLmv.js.map +0 -1
  99. package/dist/_chunks/Field-tHCw4lGA.mjs.map +0 -1
  100. package/dist/_chunks/Form-BJxdTv3Q.mjs.map +0 -1
  101. package/dist/_chunks/Form-C_0KTVvV.js.map +0 -1
  102. package/dist/_chunks/ListViewPage-B_GaWgRH.mjs.map +0 -1
  103. package/dist/_chunks/ListViewPage-SXIXm-RM.js.map +0 -1
  104. package/dist/_chunks/index-C9TJPyni.mjs.map +0 -1
  105. package/dist/_chunks/index-CdT0kHZ8.js.map +0 -1
  106. package/dist/_chunks/usePrev-B9w_-eYc.js.map +0 -1
  107. package/dist/_chunks/usePrev-DH6iah0A.mjs +0 -16
  108. package/dist/_chunks/usePrev-DH6iah0A.mjs.map +0 -1
  109. package/strapi-server.js +0 -3
@@ -199,7 +199,9 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
199
199
  return strapi2.db.query("plugin::upload.file").findOne({ where: { id: versionRelationData.id } });
200
200
  };
201
201
  const localesService = strapi2.plugin("i18n")?.service("locales");
202
+ const i18nContentTypeService = strapi2.plugin("i18n")?.service("content-types");
202
203
  const getDefaultLocale = async () => localesService ? localesService.getDefaultLocale() : null;
204
+ const isLocalizedContentType = (model) => i18nContentTypeService ? i18nContentTypeService.isLocalizedContentType(model) : false;
203
205
  const getLocaleDictionary = async () => {
204
206
  if (!localesService)
205
207
  return {};
@@ -317,6 +319,7 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
317
319
  getRelationRestoreValue,
318
320
  getMediaRestoreValue,
319
321
  getDefaultLocale,
322
+ isLocalizedContentType,
320
323
  getLocaleDictionary,
321
324
  getRetentionDays,
322
325
  getVersionStatus,
@@ -339,7 +342,13 @@ const createHistoryService = ({ strapi: strapi2 }) => {
339
342
  });
340
343
  },
341
344
  async findVersionsPage(params) {
342
- const locale = params.query.locale || await serviceUtils.getDefaultLocale();
345
+ const model = strapi2.getModel(params.query.contentType);
346
+ const isLocalizedContentType = serviceUtils.isLocalizedContentType(model);
347
+ const defaultLocale = await serviceUtils.getDefaultLocale();
348
+ let locale = null;
349
+ if (isLocalizedContentType) {
350
+ locale = params.query.locale || defaultLocale;
351
+ }
343
352
  const [{ results, pagination }, localeDictionary] = await Promise.all([
344
353
  query.findPage({
345
354
  ...params.query,
@@ -555,11 +564,13 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
555
564
  }
556
565
  const uid2 = context.contentType.uid;
557
566
  const schemas = getSchemas(uid2);
567
+ const model = strapi2.getModel(uid2);
568
+ const isLocalizedContentType = serviceUtils.isLocalizedContentType(model);
558
569
  const localeEntries = await strapi2.db.query(uid2).findMany({
559
570
  where: {
560
571
  documentId,
561
- locale: { $in: locales },
562
- publishedAt: null
572
+ ...isLocalizedContentType ? { locale: { $in: locales } } : {},
573
+ ...strapiUtils.contentTypes.hasDraftAndPublish(strapi2.contentTypes[uid2]) ? { publishedAt: null } : {}
563
574
  },
564
575
  populate: serviceUtils.getDeepPopulate(
565
576
  uid2,
@@ -1219,6 +1230,11 @@ const { createPolicy } = strapiUtils.policy;
1219
1230
  const hasPermissions = createPolicy({
1220
1231
  name: "plugin::content-manager.hasPermissions",
1221
1232
  validator: validateHasPermissionsInput,
1233
+ /**
1234
+ * NOTE: Action aliases are currently not checked at this level (policy).
1235
+ * This is currently the intended behavior to avoid changing the behavior of API related permissions.
1236
+ * If you want to add support for it, please create a dedicated RFC with a list of potential side effect this could have.
1237
+ */
1222
1238
  handler(ctx, config = {}) {
1223
1239
  const { actions = [], hasAtLeastOne = false } = config;
1224
1240
  const { userAbility } = ctx.state;
@@ -1771,7 +1787,7 @@ const collectionTypes = {
1771
1787
  permissionChecker2,
1772
1788
  model,
1773
1789
  // @ts-expect-error TODO: fix
1774
- { id, locale, publishedAt: null },
1790
+ { documentId: id, locale, publishedAt: null },
1775
1791
  { availableLocales: true, availableStatus: false }
1776
1792
  );
1777
1793
  ctx.body = { data: {}, meta };
@@ -1974,7 +1990,9 @@ const collectionTypes = {
1974
1990
  if (permissionChecker2.cannot.unpublish()) {
1975
1991
  return ctx.forbidden();
1976
1992
  }
1977
- const { locale } = await getDocumentLocaleAndStatus(body, model);
1993
+ const { locale } = await getDocumentLocaleAndStatus(body, model, {
1994
+ allowMultipleLocales: true
1995
+ });
1978
1996
  const entityPromises = documentIds.map(
1979
1997
  (documentId) => documentManager2.findLocales(documentId, model, { locale, isPublished: true })
1980
1998
  );
@@ -2325,20 +2343,13 @@ const sanitizeMainField = (model, mainField, userAbility) => {
2325
2343
  userAbility,
2326
2344
  model: model.uid
2327
2345
  });
2328
- if (!isListable(model, mainField)) {
2346
+ const isMainFieldListable = isListable(model, mainField);
2347
+ const canReadMainField = permissionChecker2.can.read(null, mainField);
2348
+ if (!isMainFieldListable || !canReadMainField) {
2329
2349
  return "id";
2330
2350
  }
2331
- if (permissionChecker2.cannot.read(null, mainField)) {
2332
- if (model.uid === "plugin::users-permissions.role") {
2333
- const userPermissionChecker = getService$1("permission-checker").create({
2334
- userAbility,
2335
- model: "plugin::users-permissions.user"
2336
- });
2337
- if (userPermissionChecker.can.read()) {
2338
- return "name";
2339
- }
2340
- }
2341
- return "id";
2351
+ if (model.uid === "plugin::users-permissions.role") {
2352
+ return "name";
2342
2353
  }
2343
2354
  return mainField;
2344
2355
  };
@@ -2538,8 +2549,9 @@ const relations = {
2538
2549
  } else {
2539
2550
  where.id = id;
2540
2551
  }
2541
- if (status) {
2542
- where[`${alias}.published_at`] = getPublishedAtClause(status, targetUid);
2552
+ const publishedAt = getPublishedAtClause(status, targetUid);
2553
+ if (!fp.isEmpty(publishedAt)) {
2554
+ where[`${alias}.published_at`] = publishedAt;
2543
2555
  }
2544
2556
  if (filterByLocale) {
2545
2557
  where[`${alias}.locale`] = locale;
@@ -2596,9 +2608,7 @@ const relations = {
2596
2608
  addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
2597
2609
  const sanitizedRes = await loadRelations({ id: entryId }, targetField, {
2598
2610
  ...strapi.get("query-params").transform(targetUid, permissionQuery),
2599
- ordering: "desc",
2600
- page: ctx.request.query.page,
2601
- pageSize: ctx.request.query.pageSize
2611
+ ordering: "desc"
2602
2612
  });
2603
2613
  const relationsUnion = fp.uniqBy("id", fp.concat(sanitizedRes.results, res.results));
2604
2614
  ctx.body = {
@@ -3504,12 +3514,27 @@ const createPermissionChecker = (strapi2) => ({ userAbility, model }) => {
3504
3514
  ability: userAbility,
3505
3515
  model
3506
3516
  });
3507
- const toSubject = (entity) => entity ? permissionsManager.toSubject(entity, model) : model;
3517
+ const { actionProvider } = strapi2.service("admin::permission");
3518
+ const toSubject = (entity) => {
3519
+ return entity ? permissionsManager.toSubject(entity, model) : model;
3520
+ };
3508
3521
  const can = (action, entity, field) => {
3509
- return userAbility.can(action, toSubject(entity), field);
3522
+ const subject = toSubject(entity);
3523
+ const aliases = actionProvider.unstable_aliases(action, model);
3524
+ return (
3525
+ // Test the original action to see if it passes
3526
+ userAbility.can(action, subject, field) || // Else try every known alias if at least one of them succeed, then the user "can"
3527
+ aliases.some((alias) => userAbility.can(alias, subject, field))
3528
+ );
3510
3529
  };
3511
3530
  const cannot = (action, entity, field) => {
3512
- return userAbility.cannot(action, toSubject(entity), field);
3531
+ const subject = toSubject(entity);
3532
+ const aliases = actionProvider.unstable_aliases(action, model);
3533
+ return (
3534
+ // Test both the original action
3535
+ userAbility.cannot(action, subject, field) && // and every known alias, if all of them fail (cannot), then the user truly "cannot"
3536
+ aliases.every((alias) => userAbility.cannot(alias, subject, field))
3537
+ );
3513
3538
  };
3514
3539
  const sanitizeOutput = (data, { action = ACTIONS.read } = {}) => {
3515
3540
  return permissionsManager.sanitizeOutput(data, { subject: toSubject(data), action });