@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
@@ -367,7 +367,12 @@ const createHistoryService = ({ strapi: strapi2 }) => {
367
367
  if (userToPopulate == null) {
368
368
  return null;
369
369
  }
370
- return strapi2.query("admin::user").findOne({ where: { id: userToPopulate.id } });
370
+ return strapi2.query("admin::user").findOne({
371
+ where: {
372
+ ...userToPopulate.id ? { id: userToPopulate.id } : {},
373
+ ...userToPopulate.documentId ? { documentId: userToPopulate.documentId } : {}
374
+ }
375
+ });
371
376
  })
372
377
  );
373
378
  return {
@@ -1689,7 +1694,7 @@ const updateDocument = async (ctx, opts) => {
1689
1694
  throw new errors.ForbiddenError();
1690
1695
  }
1691
1696
  const pickPermittedFields = documentVersion ? permissionChecker2.sanitizeUpdateInput(documentVersion) : permissionChecker2.sanitizeCreateInput;
1692
- const setCreator = setCreatorFields({ user, isEdition: true });
1697
+ const setCreator = documentVersion ? setCreatorFields({ user, isEdition: true }) : setCreatorFields({ user });
1693
1698
  const sanitizeFn = async.pipe(pickPermittedFields, setCreator);
1694
1699
  const sanitizedBody = await sanitizeFn(body);
1695
1700
  return documentManager2.update(documentVersion?.documentId || id, model, {
@@ -1898,11 +1903,17 @@ const collectionTypes = {
1898
1903
  }
1899
1904
  const isUpdate = !isCreate;
1900
1905
  if (isUpdate) {
1901
- document = await documentManager2.findOne(id, model, { populate, locale });
1902
- if (!document) {
1906
+ const documentExists = documentManager2.exists(model, id);
1907
+ if (!documentExists) {
1903
1908
  throw new errors.NotFoundError("Document not found");
1904
1909
  }
1905
- if (permissionChecker2.can.update(document)) {
1910
+ document = await documentManager2.findOne(id, model, { populate, locale });
1911
+ if (!document) {
1912
+ if (permissionChecker2.cannot.create({ locale }) || permissionChecker2.cannot.publish({ locale })) {
1913
+ throw new errors.ForbiddenError();
1914
+ }
1915
+ document = await updateDocument(ctx);
1916
+ } else if (permissionChecker2.can.update(document)) {
1906
1917
  await updateDocument(ctx);
1907
1918
  }
1908
1919
  }
@@ -2327,15 +2338,27 @@ const sanitizeMainField = (model, mainField, userAbility) => {
2327
2338
  }
2328
2339
  return mainField;
2329
2340
  };
2330
- const addStatusToRelations = async (uid2, relations2) => {
2331
- if (!contentTypes$1.hasDraftAndPublish(strapi.contentTypes[uid2])) {
2341
+ const addStatusToRelations = async (targetUid, relations2) => {
2342
+ if (!contentTypes$1.hasDraftAndPublish(strapi.getModel(targetUid))) {
2332
2343
  return relations2;
2333
2344
  }
2334
2345
  const documentMetadata2 = getService$1("document-metadata");
2335
- const documentsAvailableStatus = await documentMetadata2.getManyAvailableStatus(uid2, relations2);
2346
+ if (!relations2.length) {
2347
+ return relations2;
2348
+ }
2349
+ const firstRelation = relations2[0];
2350
+ const filters = {
2351
+ documentId: { $in: relations2.map((r) => r.documentId) },
2352
+ // NOTE: find the "opposite" status
2353
+ publishedAt: firstRelation.publishedAt !== null ? { $null: true } : { $notNull: true }
2354
+ };
2355
+ const availableStatus = await strapi.query(targetUid).findMany({
2356
+ select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"],
2357
+ filters
2358
+ });
2336
2359
  return relations2.map((relation) => {
2337
- const availableStatuses = documentsAvailableStatus.filter(
2338
- (availableDocument) => availableDocument.documentId === relation.documentId
2360
+ const availableStatuses = availableStatus.filter(
2361
+ (availableDocument) => availableDocument.documentId === relation.documentId && (relation.locale ? availableDocument.locale === relation.locale : true)
2339
2362
  );
2340
2363
  return {
2341
2364
  ...relation,
@@ -2356,11 +2379,8 @@ const validateLocale = (sourceUid, targetUid, locale) => {
2356
2379
  const isLocalized = strapi.plugin("i18n").service("content-types").isLocalizedContentType;
2357
2380
  const isSourceLocalized = isLocalized(sourceModel);
2358
2381
  const isTargetLocalized = isLocalized(targetModel);
2359
- let validatedLocale = locale;
2360
- if (!targetModel || !isTargetLocalized)
2361
- validatedLocale = void 0;
2362
2382
  return {
2363
- locale: validatedLocale,
2383
+ locale,
2364
2384
  isSourceLocalized,
2365
2385
  isTargetLocalized
2366
2386
  };
@@ -2463,7 +2483,7 @@ const relations = {
2463
2483
  attribute,
2464
2484
  fieldsToSelect,
2465
2485
  mainField,
2466
- source: { schema: sourceSchema },
2486
+ source: { schema: sourceSchema, isLocalized: isSourceLocalized },
2467
2487
  target: { schema: targetSchema, isLocalized: isTargetLocalized },
2468
2488
  sourceSchema,
2469
2489
  targetSchema,
@@ -2485,7 +2505,8 @@ const relations = {
2485
2505
  fieldsToSelect,
2486
2506
  mainField,
2487
2507
  source: {
2488
- schema: { uid: sourceUid, modelType: sourceModelType }
2508
+ schema: { uid: sourceUid, modelType: sourceModelType },
2509
+ isLocalized: isSourceLocalized
2489
2510
  },
2490
2511
  target: {
2491
2512
  schema: { uid: targetUid },
@@ -2523,12 +2544,16 @@ const relations = {
2523
2544
  } else {
2524
2545
  where.id = id;
2525
2546
  }
2526
- if (status) {
2527
- where[`${alias}.published_at`] = getPublishedAtClause(status, targetUid);
2547
+ const publishedAt = getPublishedAtClause(status, targetUid);
2548
+ if (!isEmpty(publishedAt)) {
2549
+ where[`${alias}.published_at`] = publishedAt;
2528
2550
  }
2529
- if (filterByLocale) {
2551
+ if (isTargetLocalized && locale) {
2530
2552
  where[`${alias}.locale`] = locale;
2531
2553
  }
2554
+ if (isSourceLocalized && locale) {
2555
+ where.locale = locale;
2556
+ }
2532
2557
  if ((idsToInclude?.length ?? 0) !== 0) {
2533
2558
  where[`${alias}.id`].$notIn = idsToInclude;
2534
2559
  }
@@ -2546,7 +2571,8 @@ const relations = {
2546
2571
  id: { $notIn: uniq(idsToOmit) }
2547
2572
  });
2548
2573
  }
2549
- const res = await strapi.db.query(targetUid).findPage(strapi.get("query-params").transform(targetUid, queryParams));
2574
+ const dbQuery = strapi.get("query-params").transform(targetUid, queryParams);
2575
+ const res = await strapi.db.query(targetUid).findPage(dbQuery);
2550
2576
  ctx.body = {
2551
2577
  ...res,
2552
2578
  results: await addStatusToRelations(targetUid, res.results)
@@ -2561,21 +2587,33 @@ const relations = {
2561
2587
  attribute,
2562
2588
  targetField,
2563
2589
  fieldsToSelect,
2564
- source: {
2565
- schema: { uid: sourceUid }
2566
- },
2567
- target: {
2568
- schema: { uid: targetUid }
2569
- }
2590
+ status,
2591
+ source: { schema: sourceSchema },
2592
+ target: { schema: targetSchema }
2570
2593
  } = await this.extractAndValidateRequestInfo(ctx, id);
2594
+ const { uid: sourceUid } = sourceSchema;
2595
+ const { uid: targetUid } = targetSchema;
2571
2596
  const permissionQuery = await getService$1("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
2572
2597
  const dbQuery = strapi.db.query(sourceUid);
2573
2598
  const loadRelations = relations$1.isAnyToMany(attribute) ? (...args) => dbQuery.loadPages(...args) : (...args) => dbQuery.load(...args).then((res2) => ({ results: res2 ? [res2] : [] }));
2599
+ const filters = {};
2600
+ if (sourceSchema?.options?.draftAndPublish) {
2601
+ if (targetSchema?.options?.draftAndPublish) {
2602
+ if (status === "published") {
2603
+ filters.publishedAt = { $notNull: true };
2604
+ } else {
2605
+ filters.publishedAt = { $null: true };
2606
+ }
2607
+ }
2608
+ } else if (targetSchema?.options?.draftAndPublish) {
2609
+ filters.publishedAt = { $null: true };
2610
+ }
2574
2611
  const res = await loadRelations({ id: entryId }, targetField, {
2575
- select: ["id", "documentId", "locale", "publishedAt"],
2612
+ select: ["id", "documentId", "locale", "publishedAt", "updatedAt"],
2576
2613
  ordering: "desc",
2577
2614
  page: ctx.request.query.page,
2578
- pageSize: ctx.request.query.pageSize
2615
+ pageSize: ctx.request.query.pageSize,
2616
+ filters
2579
2617
  });
2580
2618
  const loadedIds = res.results.map((item) => item.id);
2581
2619
  addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
@@ -2668,7 +2706,7 @@ const singleTypes = {
2668
2706
  permissionChecker2,
2669
2707
  model,
2670
2708
  // @ts-expect-error - fix types
2671
- { id: document.documentId, locale, publishedAt: null },
2709
+ { documentId: document.documentId, locale, publishedAt: null },
2672
2710
  { availableLocales: true, availableStatus: false }
2673
2711
  );
2674
2712
  ctx.body = { data: {}, meta };
@@ -4039,7 +4077,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4039
4077
  */
4040
4078
  async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
4041
4079
  const versionsByLocale = groupBy("locale", allVersions);
4042
- delete versionsByLocale[version.locale];
4080
+ if (version.locale) {
4081
+ delete versionsByLocale[version.locale];
4082
+ }
4043
4083
  const model = strapi2.getModel(uid2);
4044
4084
  const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
4045
4085
  const traversalFunction = async (localeVersion) => traverseEntity(