@strapi/content-manager 0.0.0-experimental.626cf5324f21d318dee435c11cb3e08bb4c414b7 → 0.0.0-experimental.646ad2aaf2b8f9970409242af8d77b0512d19bd1

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 (99) hide show
  1. package/dist/_chunks/{ComponentConfigurationPage-G4EIirP8.js → ComponentConfigurationPage-D1SEOQBu.js} +3 -3
  2. package/dist/_chunks/{ComponentConfigurationPage-G4EIirP8.js.map → ComponentConfigurationPage-D1SEOQBu.js.map} +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-CnL10QYC.mjs → ComponentConfigurationPage-oqdZo6l8.mjs} +3 -3
  4. package/dist/_chunks/{ComponentConfigurationPage-CnL10QYC.mjs.map → ComponentConfigurationPage-oqdZo6l8.mjs.map} +1 -1
  5. package/dist/_chunks/{EditConfigurationPage-B2AA1kVF.js → EditConfigurationPage-BP94U6vG.js} +3 -3
  6. package/dist/_chunks/{EditConfigurationPage-B2AA1kVF.js.map → EditConfigurationPage-BP94U6vG.js.map} +1 -1
  7. package/dist/_chunks/{EditConfigurationPage-I2kKh9dx.mjs → EditConfigurationPage-DVLmpXPs.mjs} +3 -3
  8. package/dist/_chunks/{EditConfigurationPage-I2kKh9dx.mjs.map → EditConfigurationPage-DVLmpXPs.mjs.map} +1 -1
  9. package/dist/_chunks/{EditViewPage-CHgoNwlc.js → EditViewPage-BfAywbBE.js} +15 -5
  10. package/dist/_chunks/EditViewPage-BfAywbBE.js.map +1 -0
  11. package/dist/_chunks/{EditViewPage-zFjJK0s8.mjs → EditViewPage-Cvjs7D6M.mjs} +15 -5
  12. package/dist/_chunks/EditViewPage-Cvjs7D6M.mjs.map +1 -0
  13. package/dist/_chunks/{Field-DPAzUS1M.mjs → Field-CJrfStLX.mjs} +69 -25
  14. package/dist/_chunks/Field-CJrfStLX.mjs.map +1 -0
  15. package/dist/_chunks/{Field-9DePZh-0.js → Field-DC7FM64m.js} +69 -25
  16. package/dist/_chunks/Field-DC7FM64m.js.map +1 -0
  17. package/dist/_chunks/{Form-DPm-KZ1A.js → Form-Ahp2hi7E.js} +3 -3
  18. package/dist/_chunks/Form-Ahp2hi7E.js.map +1 -0
  19. package/dist/_chunks/{Form-CEkENbkF.mjs → Form-BTgUlCEm.mjs} +3 -3
  20. package/dist/_chunks/Form-BTgUlCEm.mjs.map +1 -0
  21. package/dist/_chunks/{History-DXSbTWez.js → History-DZ9T1ZL6.js} +23 -10
  22. package/dist/_chunks/History-DZ9T1ZL6.js.map +1 -0
  23. package/dist/_chunks/{History-utls71em.mjs → History-Drr6mxnK.mjs} +24 -11
  24. package/dist/_chunks/History-Drr6mxnK.mjs.map +1 -0
  25. package/dist/_chunks/{ListConfigurationPage-D5C7ACZ_.js → ListConfigurationPage-B8bYMcVE.js} +2 -2
  26. package/dist/_chunks/{ListConfigurationPage-D5C7ACZ_.js.map → ListConfigurationPage-B8bYMcVE.js.map} +1 -1
  27. package/dist/_chunks/{ListConfigurationPage-CuMXWWqb.mjs → ListConfigurationPage-C6calJtW.mjs} +2 -2
  28. package/dist/_chunks/{ListConfigurationPage-CuMXWWqb.mjs.map → ListConfigurationPage-C6calJtW.mjs.map} +1 -1
  29. package/dist/_chunks/{ListViewPage-DfuwH1tt.js → ListViewPage-BfiTNTUl.js} +4 -4
  30. package/dist/_chunks/{ListViewPage-DfuwH1tt.js.map → ListViewPage-BfiTNTUl.js.map} +1 -1
  31. package/dist/_chunks/{ListViewPage-CdKd-PS_.mjs → ListViewPage-CQb0CL40.mjs} +4 -4
  32. package/dist/_chunks/{ListViewPage-CdKd-PS_.mjs.map → ListViewPage-CQb0CL40.mjs.map} +1 -1
  33. package/dist/_chunks/{NoContentTypePage-DkToTT7u.mjs → NoContentTypePage-C-BK38Ai.mjs} +2 -2
  34. package/dist/_chunks/{NoContentTypePage-DkToTT7u.mjs.map → NoContentTypePage-C-BK38Ai.mjs.map} +1 -1
  35. package/dist/_chunks/{NoContentTypePage-BIxlkWWi.js → NoContentTypePage-wJwVyqoZ.js} +2 -2
  36. package/dist/_chunks/{NoContentTypePage-BIxlkWWi.js.map → NoContentTypePage-wJwVyqoZ.js.map} +1 -1
  37. package/dist/_chunks/{NoPermissionsPage-DlWi4BAH.mjs → NoPermissionsPage-BBdxJ-4m.mjs} +2 -2
  38. package/dist/_chunks/{NoPermissionsPage-DlWi4BAH.mjs.map → NoPermissionsPage-BBdxJ-4m.mjs.map} +1 -1
  39. package/dist/_chunks/{NoPermissionsPage-Bu4GWYb-.js → NoPermissionsPage-DKaXyuK9.js} +2 -2
  40. package/dist/_chunks/{NoPermissionsPage-Bu4GWYb-.js.map → NoPermissionsPage-DKaXyuK9.js.map} +1 -1
  41. package/dist/_chunks/{Relations-CFjTESWQ.js → Relations-D7NskJzt.js} +68 -35
  42. package/dist/_chunks/Relations-D7NskJzt.js.map +1 -0
  43. package/dist/_chunks/{Relations-QP5yn9_z.mjs → Relations-DApDLUXv.mjs} +69 -36
  44. package/dist/_chunks/Relations-DApDLUXv.mjs.map +1 -0
  45. package/dist/_chunks/{en-BVzUkPxZ.js → en-Bm0D0IWz.js} +8 -8
  46. package/dist/_chunks/{en-BVzUkPxZ.js.map → en-Bm0D0IWz.js.map} +1 -1
  47. package/dist/_chunks/{en-CPTj6CjC.mjs → en-DKV44jRb.mjs} +8 -8
  48. package/dist/_chunks/{en-CPTj6CjC.mjs.map → en-DKV44jRb.mjs.map} +1 -1
  49. package/dist/_chunks/{index-BHfS6_D5.mjs → index-Bz1SCyIj.mjs} +948 -870
  50. package/dist/_chunks/index-Bz1SCyIj.mjs.map +1 -0
  51. package/dist/_chunks/{index-DXiHxy70.js → index-D3u7haqj.js} +947 -868
  52. package/dist/_chunks/index-D3u7haqj.js.map +1 -0
  53. package/dist/_chunks/{layout-bE-WUnQ0.js → layout-C_0aK53L.js} +3 -3
  54. package/dist/_chunks/{layout-bE-WUnQ0.js.map → layout-C_0aK53L.js.map} +1 -1
  55. package/dist/_chunks/{layout-DX_52HSH.mjs → layout-PNlIceEV.mjs} +3 -3
  56. package/dist/_chunks/{layout-DX_52HSH.mjs.map → layout-PNlIceEV.mjs.map} +1 -1
  57. package/dist/_chunks/{relations-SCVAL_aJ.mjs → relations-BAIQsBLx.mjs} +3 -7
  58. package/dist/_chunks/relations-BAIQsBLx.mjs.map +1 -0
  59. package/dist/_chunks/{relations-D706vblp.js → relations-ClRXiXcM.js} +3 -7
  60. package/dist/_chunks/relations-ClRXiXcM.js.map +1 -0
  61. package/dist/admin/index.js +2 -1
  62. package/dist/admin/index.js.map +1 -1
  63. package/dist/admin/index.mjs +3 -2
  64. package/dist/admin/src/exports.d.ts +1 -1
  65. package/dist/admin/src/hooks/useDocument.d.ts +32 -1
  66. package/dist/admin/src/pages/EditView/components/Header.d.ts +1 -0
  67. package/dist/server/index.js +70 -30
  68. package/dist/server/index.js.map +1 -1
  69. package/dist/server/index.mjs +70 -30
  70. package/dist/server/index.mjs.map +1 -1
  71. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  72. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  73. package/dist/server/src/controllers/utils/metadata.d.ts +15 -1
  74. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  75. package/dist/server/src/history/services/history.d.ts.map +1 -1
  76. package/dist/server/src/index.d.ts +4 -4
  77. package/dist/server/src/services/document-metadata.d.ts +8 -8
  78. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  79. package/dist/server/src/services/index.d.ts +4 -4
  80. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  81. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  82. package/dist/server/src/utils/index.d.ts +2 -0
  83. package/dist/server/src/utils/index.d.ts.map +1 -1
  84. package/package.json +11 -11
  85. package/dist/_chunks/EditViewPage-CHgoNwlc.js.map +0 -1
  86. package/dist/_chunks/EditViewPage-zFjJK0s8.mjs.map +0 -1
  87. package/dist/_chunks/Field-9DePZh-0.js.map +0 -1
  88. package/dist/_chunks/Field-DPAzUS1M.mjs.map +0 -1
  89. package/dist/_chunks/Form-CEkENbkF.mjs.map +0 -1
  90. package/dist/_chunks/Form-DPm-KZ1A.js.map +0 -1
  91. package/dist/_chunks/History-DXSbTWez.js.map +0 -1
  92. package/dist/_chunks/History-utls71em.mjs.map +0 -1
  93. package/dist/_chunks/Relations-CFjTESWQ.js.map +0 -1
  94. package/dist/_chunks/Relations-QP5yn9_z.mjs.map +0 -1
  95. package/dist/_chunks/index-BHfS6_D5.mjs.map +0 -1
  96. package/dist/_chunks/index-DXiHxy70.js.map +0 -1
  97. package/dist/_chunks/relations-D706vblp.js.map +0 -1
  98. package/dist/_chunks/relations-SCVAL_aJ.mjs.map +0 -1
  99. package/strapi-server.js +0 -3
@@ -393,7 +393,12 @@ const createHistoryService = ({ strapi: strapi2 }) => {
393
393
  if (userToPopulate == null) {
394
394
  return null;
395
395
  }
396
- return strapi2.query("admin::user").findOne({ where: { id: userToPopulate.id } });
396
+ return strapi2.query("admin::user").findOne({
397
+ where: {
398
+ ...userToPopulate.id ? { id: userToPopulate.id } : {},
399
+ ...userToPopulate.documentId ? { documentId: userToPopulate.documentId } : {}
400
+ }
401
+ });
397
402
  })
398
403
  );
399
404
  return {
@@ -1715,7 +1720,7 @@ const updateDocument = async (ctx, opts) => {
1715
1720
  throw new strapiUtils.errors.ForbiddenError();
1716
1721
  }
1717
1722
  const pickPermittedFields = documentVersion ? permissionChecker2.sanitizeUpdateInput(documentVersion) : permissionChecker2.sanitizeCreateInput;
1718
- const setCreator = strapiUtils.setCreatorFields({ user, isEdition: true });
1723
+ const setCreator = documentVersion ? strapiUtils.setCreatorFields({ user, isEdition: true }) : strapiUtils.setCreatorFields({ user });
1719
1724
  const sanitizeFn = strapiUtils.async.pipe(pickPermittedFields, setCreator);
1720
1725
  const sanitizedBody = await sanitizeFn(body);
1721
1726
  return documentManager2.update(documentVersion?.documentId || id, model, {
@@ -1924,11 +1929,17 @@ const collectionTypes = {
1924
1929
  }
1925
1930
  const isUpdate = !isCreate;
1926
1931
  if (isUpdate) {
1927
- document = await documentManager2.findOne(id, model, { populate, locale });
1928
- if (!document) {
1932
+ const documentExists = documentManager2.exists(model, id);
1933
+ if (!documentExists) {
1929
1934
  throw new strapiUtils.errors.NotFoundError("Document not found");
1930
1935
  }
1931
- if (permissionChecker2.can.update(document)) {
1936
+ document = await documentManager2.findOne(id, model, { populate, locale });
1937
+ if (!document) {
1938
+ if (permissionChecker2.cannot.create({ locale }) || permissionChecker2.cannot.publish({ locale })) {
1939
+ throw new strapiUtils.errors.ForbiddenError();
1940
+ }
1941
+ document = await updateDocument(ctx);
1942
+ } else if (permissionChecker2.can.update(document)) {
1932
1943
  await updateDocument(ctx);
1933
1944
  }
1934
1945
  }
@@ -2353,15 +2364,27 @@ const sanitizeMainField = (model, mainField, userAbility) => {
2353
2364
  }
2354
2365
  return mainField;
2355
2366
  };
2356
- const addStatusToRelations = async (uid2, relations2) => {
2357
- if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.contentTypes[uid2])) {
2367
+ const addStatusToRelations = async (targetUid, relations2) => {
2368
+ if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.getModel(targetUid))) {
2358
2369
  return relations2;
2359
2370
  }
2360
2371
  const documentMetadata2 = getService$1("document-metadata");
2361
- const documentsAvailableStatus = await documentMetadata2.getManyAvailableStatus(uid2, relations2);
2372
+ if (!relations2.length) {
2373
+ return relations2;
2374
+ }
2375
+ const firstRelation = relations2[0];
2376
+ const filters = {
2377
+ documentId: { $in: relations2.map((r) => r.documentId) },
2378
+ // NOTE: find the "opposite" status
2379
+ publishedAt: firstRelation.publishedAt !== null ? { $null: true } : { $notNull: true }
2380
+ };
2381
+ const availableStatus = await strapi.query(targetUid).findMany({
2382
+ select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"],
2383
+ filters
2384
+ });
2362
2385
  return relations2.map((relation) => {
2363
- const availableStatuses = documentsAvailableStatus.filter(
2364
- (availableDocument) => availableDocument.documentId === relation.documentId
2386
+ const availableStatuses = availableStatus.filter(
2387
+ (availableDocument) => availableDocument.documentId === relation.documentId && (relation.locale ? availableDocument.locale === relation.locale : true)
2365
2388
  );
2366
2389
  return {
2367
2390
  ...relation,
@@ -2382,11 +2405,8 @@ const validateLocale = (sourceUid, targetUid, locale) => {
2382
2405
  const isLocalized = strapi.plugin("i18n").service("content-types").isLocalizedContentType;
2383
2406
  const isSourceLocalized = isLocalized(sourceModel);
2384
2407
  const isTargetLocalized = isLocalized(targetModel);
2385
- let validatedLocale = locale;
2386
- if (!targetModel || !isTargetLocalized)
2387
- validatedLocale = void 0;
2388
2408
  return {
2389
- locale: validatedLocale,
2409
+ locale,
2390
2410
  isSourceLocalized,
2391
2411
  isTargetLocalized
2392
2412
  };
@@ -2489,7 +2509,7 @@ const relations = {
2489
2509
  attribute,
2490
2510
  fieldsToSelect,
2491
2511
  mainField,
2492
- source: { schema: sourceSchema },
2512
+ source: { schema: sourceSchema, isLocalized: isSourceLocalized },
2493
2513
  target: { schema: targetSchema, isLocalized: isTargetLocalized },
2494
2514
  sourceSchema,
2495
2515
  targetSchema,
@@ -2511,7 +2531,8 @@ const relations = {
2511
2531
  fieldsToSelect,
2512
2532
  mainField,
2513
2533
  source: {
2514
- schema: { uid: sourceUid, modelType: sourceModelType }
2534
+ schema: { uid: sourceUid, modelType: sourceModelType },
2535
+ isLocalized: isSourceLocalized
2515
2536
  },
2516
2537
  target: {
2517
2538
  schema: { uid: targetUid },
@@ -2549,12 +2570,16 @@ const relations = {
2549
2570
  } else {
2550
2571
  where.id = id;
2551
2572
  }
2552
- if (status) {
2553
- where[`${alias}.published_at`] = getPublishedAtClause(status, targetUid);
2573
+ const publishedAt = getPublishedAtClause(status, targetUid);
2574
+ if (!fp.isEmpty(publishedAt)) {
2575
+ where[`${alias}.published_at`] = publishedAt;
2554
2576
  }
2555
- if (filterByLocale) {
2577
+ if (isTargetLocalized && locale) {
2556
2578
  where[`${alias}.locale`] = locale;
2557
2579
  }
2580
+ if (isSourceLocalized && locale) {
2581
+ where.locale = locale;
2582
+ }
2558
2583
  if ((idsToInclude?.length ?? 0) !== 0) {
2559
2584
  where[`${alias}.id`].$notIn = idsToInclude;
2560
2585
  }
@@ -2572,7 +2597,8 @@ const relations = {
2572
2597
  id: { $notIn: fp.uniq(idsToOmit) }
2573
2598
  });
2574
2599
  }
2575
- const res = await strapi.db.query(targetUid).findPage(strapi.get("query-params").transform(targetUid, queryParams));
2600
+ const dbQuery = strapi.get("query-params").transform(targetUid, queryParams);
2601
+ const res = await strapi.db.query(targetUid).findPage(dbQuery);
2576
2602
  ctx.body = {
2577
2603
  ...res,
2578
2604
  results: await addStatusToRelations(targetUid, res.results)
@@ -2587,21 +2613,33 @@ const relations = {
2587
2613
  attribute,
2588
2614
  targetField,
2589
2615
  fieldsToSelect,
2590
- source: {
2591
- schema: { uid: sourceUid }
2592
- },
2593
- target: {
2594
- schema: { uid: targetUid }
2595
- }
2616
+ status,
2617
+ source: { schema: sourceSchema },
2618
+ target: { schema: targetSchema }
2596
2619
  } = await this.extractAndValidateRequestInfo(ctx, id);
2620
+ const { uid: sourceUid } = sourceSchema;
2621
+ const { uid: targetUid } = targetSchema;
2597
2622
  const permissionQuery = await getService$1("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
2598
2623
  const dbQuery = strapi.db.query(sourceUid);
2599
2624
  const loadRelations = strapiUtils.relations.isAnyToMany(attribute) ? (...args) => dbQuery.loadPages(...args) : (...args) => dbQuery.load(...args).then((res2) => ({ results: res2 ? [res2] : [] }));
2625
+ const filters = {};
2626
+ if (sourceSchema?.options?.draftAndPublish) {
2627
+ if (targetSchema?.options?.draftAndPublish) {
2628
+ if (status === "published") {
2629
+ filters.publishedAt = { $notNull: true };
2630
+ } else {
2631
+ filters.publishedAt = { $null: true };
2632
+ }
2633
+ }
2634
+ } else if (targetSchema?.options?.draftAndPublish) {
2635
+ filters.publishedAt = { $null: true };
2636
+ }
2600
2637
  const res = await loadRelations({ id: entryId }, targetField, {
2601
- select: ["id", "documentId", "locale", "publishedAt"],
2638
+ select: ["id", "documentId", "locale", "publishedAt", "updatedAt"],
2602
2639
  ordering: "desc",
2603
2640
  page: ctx.request.query.page,
2604
- pageSize: ctx.request.query.pageSize
2641
+ pageSize: ctx.request.query.pageSize,
2642
+ filters
2605
2643
  });
2606
2644
  const loadedIds = res.results.map((item) => item.id);
2607
2645
  addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
@@ -2694,7 +2732,7 @@ const singleTypes = {
2694
2732
  permissionChecker2,
2695
2733
  model,
2696
2734
  // @ts-expect-error - fix types
2697
- { id: document.documentId, locale, publishedAt: null },
2735
+ { documentId: document.documentId, locale, publishedAt: null },
2698
2736
  { availableLocales: true, availableStatus: false }
2699
2737
  );
2700
2738
  ctx.body = { data: {}, meta };
@@ -4065,7 +4103,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4065
4103
  */
4066
4104
  async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
4067
4105
  const versionsByLocale = fp.groupBy("locale", allVersions);
4068
- delete versionsByLocale[version.locale];
4106
+ if (version.locale) {
4107
+ delete versionsByLocale[version.locale];
4108
+ }
4069
4109
  const model = strapi2.getModel(uid2);
4070
4110
  const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
4071
4111
  const traversalFunction = async (localeVersion) => strapiUtils.traverseEntity(