@strapi/content-manager 0.0.0-experimental.2bad311ac375d1115d085a9cee4fdbe11a455caf → 0.0.0-experimental.2e2b694fbeb6a64dd7504ce6bccecf956e9eaf03

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 (106) hide show
  1. package/dist/_chunks/{ComponentConfigurationPage-7-qB29e7.mjs → ComponentConfigurationPage-CIjXcRAB.mjs} +4 -4
  2. package/dist/_chunks/{ComponentConfigurationPage-7-qB29e7.mjs.map → ComponentConfigurationPage-CIjXcRAB.mjs.map} +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-DP7AC0UU.js → ComponentConfigurationPage-gsCd80MU.js} +4 -4
  4. package/dist/_chunks/{ComponentConfigurationPage-DP7AC0UU.js.map → ComponentConfigurationPage-gsCd80MU.js.map} +1 -1
  5. package/dist/_chunks/{EditConfigurationPage-CI4XoymK.mjs → EditConfigurationPage-BglmD_BF.mjs} +4 -4
  6. package/dist/_chunks/{EditConfigurationPage-CI4XoymK.mjs.map → EditConfigurationPage-BglmD_BF.mjs.map} +1 -1
  7. package/dist/_chunks/{EditConfigurationPage-DITVliEI.js → EditConfigurationPage-DHDQKBzw.js} +4 -4
  8. package/dist/_chunks/{EditConfigurationPage-DITVliEI.js.map → EditConfigurationPage-DHDQKBzw.js.map} +1 -1
  9. package/dist/_chunks/{EditViewPage-CUS2EAhB.js → EditViewPage-C4iTxUPU.js} +10 -4
  10. package/dist/_chunks/EditViewPage-C4iTxUPU.js.map +1 -0
  11. package/dist/_chunks/{EditViewPage-Dzpno8xI.mjs → EditViewPage-CiwVPMaK.mjs} +10 -4
  12. package/dist/_chunks/EditViewPage-CiwVPMaK.mjs.map +1 -0
  13. package/dist/_chunks/{Field-B_jG_EV9.mjs → Field-DIjL1b5d.mjs} +42 -10
  14. package/dist/_chunks/Field-DIjL1b5d.mjs.map +1 -0
  15. package/dist/_chunks/{Field-CtUU1Fg8.js → Field-DhXEK8y1.js} +42 -10
  16. package/dist/_chunks/Field-DhXEK8y1.js.map +1 -0
  17. package/dist/_chunks/{Form-BXHao2mZ.mjs → Form-CmNesrvR.mjs} +3 -3
  18. package/dist/_chunks/Form-CmNesrvR.mjs.map +1 -0
  19. package/dist/_chunks/{Form-DTqO0ymI.js → Form-CwmJ4sWe.js} +3 -3
  20. package/dist/_chunks/Form-CwmJ4sWe.js.map +1 -0
  21. package/dist/_chunks/{History-C_uSGzO5.js → History-BLCCNgCt.js} +24 -11
  22. package/dist/_chunks/History-BLCCNgCt.js.map +1 -0
  23. package/dist/_chunks/{History-2Ah2CQ4T.mjs → History-D-99Wh30.mjs} +25 -12
  24. package/dist/_chunks/History-D-99Wh30.mjs.map +1 -0
  25. package/dist/_chunks/{ListConfigurationPage-nyuP7OSy.js → ListConfigurationPage-DxWpeZrO.js} +3 -3
  26. package/dist/_chunks/{ListConfigurationPage-nyuP7OSy.js.map → ListConfigurationPage-DxWpeZrO.js.map} +1 -1
  27. package/dist/_chunks/{ListConfigurationPage-BjSJlaoC.mjs → ListConfigurationPage-JPWZz7Kg.mjs} +3 -3
  28. package/dist/_chunks/{ListConfigurationPage-BjSJlaoC.mjs.map → ListConfigurationPage-JPWZz7Kg.mjs.map} +1 -1
  29. package/dist/_chunks/{ListViewPage-DHgHD8Xg.js → ListViewPage-CIQekSFz.js} +15 -4
  30. package/dist/_chunks/ListViewPage-CIQekSFz.js.map +1 -0
  31. package/dist/_chunks/{ListViewPage-B75x3nz2.mjs → ListViewPage-DSK3f0ST.mjs} +15 -4
  32. package/dist/_chunks/{ListViewPage-B75x3nz2.mjs.map → ListViewPage-DSK3f0ST.mjs.map} +1 -1
  33. package/dist/_chunks/{NoContentTypePage-CDUKdZ7d.js → NoContentTypePage-C5cxKvC2.js} +2 -2
  34. package/dist/_chunks/{NoContentTypePage-CDUKdZ7d.js.map → NoContentTypePage-C5cxKvC2.js.map} +1 -1
  35. package/dist/_chunks/{NoContentTypePage-DUacQSyF.mjs → NoContentTypePage-D99LU1YP.mjs} +2 -2
  36. package/dist/_chunks/{NoContentTypePage-DUacQSyF.mjs.map → NoContentTypePage-D99LU1YP.mjs.map} +1 -1
  37. package/dist/_chunks/{NoPermissionsPage-SFllMekk.mjs → NoPermissionsPage-DBrBw-0y.mjs} +2 -2
  38. package/dist/_chunks/{NoPermissionsPage-SFllMekk.mjs.map → NoPermissionsPage-DBrBw-0y.mjs.map} +1 -1
  39. package/dist/_chunks/{NoPermissionsPage-zwIZydDI.js → NoPermissionsPage-Oy4tmUrW.js} +2 -2
  40. package/dist/_chunks/{NoPermissionsPage-zwIZydDI.js.map → NoPermissionsPage-Oy4tmUrW.js.map} +1 -1
  41. package/dist/_chunks/{Relations-D2NRW8fC.mjs → Relations-BBmhcWFV.mjs} +62 -33
  42. package/dist/_chunks/Relations-BBmhcWFV.mjs.map +1 -0
  43. package/dist/_chunks/{Relations-NFLaRNPr.js → Relations-eG-9p_qS.js} +61 -32
  44. package/dist/_chunks/Relations-eG-9p_qS.js.map +1 -0
  45. package/dist/_chunks/{en-BlhnxQfj.js → en-Bm0D0IWz.js} +7 -7
  46. package/dist/_chunks/{en-BlhnxQfj.js.map → en-Bm0D0IWz.js.map} +1 -1
  47. package/dist/_chunks/{en-C8YBvRrK.mjs → en-DKV44jRb.mjs} +7 -7
  48. package/dist/_chunks/{en-C8YBvRrK.mjs.map → en-DKV44jRb.mjs.map} +1 -1
  49. package/dist/_chunks/{index-ovJRE1FM.js → index-BIWDoFLK.js} +119 -83
  50. package/dist/_chunks/index-BIWDoFLK.js.map +1 -0
  51. package/dist/_chunks/{index-C9HxCo5R.mjs → index-BrUzbQ30.mjs} +119 -84
  52. package/dist/_chunks/index-BrUzbQ30.mjs.map +1 -0
  53. package/dist/_chunks/{layout-DaUjDiWQ.mjs → layout-_5-cXs34.mjs} +3 -3
  54. package/dist/_chunks/{layout-DaUjDiWQ.mjs.map → layout-_5-cXs34.mjs.map} +1 -1
  55. package/dist/_chunks/{layout-UNWstw_s.js → layout-lMc9i1-Z.js} +3 -3
  56. package/dist/_chunks/{layout-UNWstw_s.js.map → layout-lMc9i1-Z.js.map} +1 -1
  57. package/dist/_chunks/{objects-gigeqt7s.js → objects-BcXOv6_9.js} +2 -4
  58. package/dist/_chunks/{objects-gigeqt7s.js.map → objects-BcXOv6_9.js.map} +1 -1
  59. package/dist/_chunks/{objects-mKMAmfec.mjs → objects-D6yBsdmx.mjs} +2 -4
  60. package/dist/_chunks/{objects-mKMAmfec.mjs.map → objects-D6yBsdmx.mjs.map} +1 -1
  61. package/dist/_chunks/{relations-NN3coOG5.js → relations-BRHithi8.js} +3 -7
  62. package/dist/_chunks/relations-BRHithi8.js.map +1 -0
  63. package/dist/_chunks/{relations-D8iFAeRu.mjs → relations-B_VLk-DD.mjs} +3 -7
  64. package/dist/_chunks/relations-B_VLk-DD.mjs.map +1 -0
  65. package/dist/admin/index.js +1 -1
  66. package/dist/admin/index.mjs +1 -1
  67. package/dist/admin/src/preview/constants.d.ts +1 -0
  68. package/dist/admin/src/preview/index.d.ts +4 -0
  69. package/dist/server/index.js +72 -26
  70. package/dist/server/index.js.map +1 -1
  71. package/dist/server/index.mjs +72 -26
  72. package/dist/server/index.mjs.map +1 -1
  73. package/dist/server/src/bootstrap.d.ts.map +1 -1
  74. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  75. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  76. package/dist/server/src/controllers/utils/metadata.d.ts +15 -1
  77. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  78. package/dist/server/src/history/services/history.d.ts.map +1 -1
  79. package/dist/server/src/index.d.ts +4 -4
  80. package/dist/server/src/preview/constants.d.ts +2 -0
  81. package/dist/server/src/preview/constants.d.ts.map +1 -0
  82. package/dist/server/src/preview/index.d.ts +4 -0
  83. package/dist/server/src/preview/index.d.ts.map +1 -0
  84. package/dist/server/src/services/document-metadata.d.ts +8 -8
  85. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  86. package/dist/server/src/services/index.d.ts +4 -4
  87. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  88. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  89. package/dist/server/src/utils/index.d.ts +2 -0
  90. package/dist/server/src/utils/index.d.ts.map +1 -1
  91. package/package.json +7 -7
  92. package/dist/_chunks/EditViewPage-CUS2EAhB.js.map +0 -1
  93. package/dist/_chunks/EditViewPage-Dzpno8xI.mjs.map +0 -1
  94. package/dist/_chunks/Field-B_jG_EV9.mjs.map +0 -1
  95. package/dist/_chunks/Field-CtUU1Fg8.js.map +0 -1
  96. package/dist/_chunks/Form-BXHao2mZ.mjs.map +0 -1
  97. package/dist/_chunks/Form-DTqO0ymI.js.map +0 -1
  98. package/dist/_chunks/History-2Ah2CQ4T.mjs.map +0 -1
  99. package/dist/_chunks/History-C_uSGzO5.js.map +0 -1
  100. package/dist/_chunks/ListViewPage-DHgHD8Xg.js.map +0 -1
  101. package/dist/_chunks/Relations-D2NRW8fC.mjs.map +0 -1
  102. package/dist/_chunks/Relations-NFLaRNPr.js.map +0 -1
  103. package/dist/_chunks/index-C9HxCo5R.mjs.map +0 -1
  104. package/dist/_chunks/index-ovJRE1FM.js.map +0 -1
  105. package/dist/_chunks/relations-D8iFAeRu.mjs.map +0 -1
  106. package/dist/_chunks/relations-NN3coOG5.js.map +0 -1
@@ -0,0 +1 @@
1
+ export declare const FEATURE_ID = "preview";
@@ -0,0 +1,4 @@
1
+ declare const previewAdmin: {
2
+ bootstrap(app: Pick<import("@strapi/admin/strapi-admin").StrapiApp, "getPlugin" | "addSettingsLink" | "addSettingsLinks" | "registerHook">): {} | undefined;
3
+ };
4
+ export { previewAdmin };
@@ -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 {
@@ -690,7 +695,7 @@ const historyVersion = {
690
695
  }
691
696
  }
692
697
  };
693
- const getFeature = () => {
698
+ const getFeature$1 = () => {
694
699
  if (strapi.ee.features.isEnabled("cms-content-history")) {
695
700
  return {
696
701
  register({ strapi: strapi2 }) {
@@ -713,7 +718,7 @@ const getFeature = () => {
713
718
  }
714
719
  };
715
720
  };
716
- const history = getFeature();
721
+ const history = getFeature$1();
717
722
  const register = async ({ strapi: strapi2 }) => {
718
723
  await history.register?.({ strapi: strapi2 });
719
724
  };
@@ -721,6 +726,18 @@ const ALLOWED_WEBHOOK_EVENTS = {
721
726
  ENTRY_PUBLISH: "entry.publish",
722
727
  ENTRY_UNPUBLISH: "entry.unpublish"
723
728
  };
729
+ const FEATURE_ID = "preview";
730
+ const getFeature = () => {
731
+ if (!strapi.features.future.isEnabled(FEATURE_ID)) {
732
+ return {};
733
+ }
734
+ return {
735
+ bootstrap() {
736
+ console.log("Bootstrapping preview server");
737
+ }
738
+ };
739
+ };
740
+ const preview = getFeature();
724
741
  const bootstrap = async () => {
725
742
  Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
726
743
  strapi.get("webhookStore").addAllowedEvent(key, value);
@@ -730,6 +747,7 @@ const bootstrap = async () => {
730
747
  await getService$1("content-types").syncConfigurations();
731
748
  await getService$1("permission").registerPermissions();
732
749
  await history.bootstrap?.({ strapi });
750
+ await preview.bootstrap?.({ strapi });
733
751
  };
734
752
  const destroy = async ({ strapi: strapi2 }) => {
735
753
  await history.destroy?.({ strapi: strapi2 });
@@ -1715,7 +1733,7 @@ const updateDocument = async (ctx, opts) => {
1715
1733
  throw new strapiUtils.errors.ForbiddenError();
1716
1734
  }
1717
1735
  const pickPermittedFields = documentVersion ? permissionChecker2.sanitizeUpdateInput(documentVersion) : permissionChecker2.sanitizeCreateInput;
1718
- const setCreator = strapiUtils.setCreatorFields({ user, isEdition: true });
1736
+ const setCreator = documentVersion ? strapiUtils.setCreatorFields({ user, isEdition: true }) : strapiUtils.setCreatorFields({ user });
1719
1737
  const sanitizeFn = strapiUtils.async.pipe(pickPermittedFields, setCreator);
1720
1738
  const sanitizedBody = await sanitizeFn(body);
1721
1739
  return documentManager2.update(documentVersion?.documentId || id, model, {
@@ -2359,15 +2377,27 @@ const sanitizeMainField = (model, mainField, userAbility) => {
2359
2377
  }
2360
2378
  return mainField;
2361
2379
  };
2362
- const addStatusToRelations = async (uid2, relations2) => {
2363
- if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.contentTypes[uid2])) {
2380
+ const addStatusToRelations = async (targetUid, relations2) => {
2381
+ if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.getModel(targetUid))) {
2364
2382
  return relations2;
2365
2383
  }
2366
2384
  const documentMetadata2 = getService$1("document-metadata");
2367
- const documentsAvailableStatus = await documentMetadata2.getManyAvailableStatus(uid2, relations2);
2385
+ if (!relations2.length) {
2386
+ return relations2;
2387
+ }
2388
+ const firstRelation = relations2[0];
2389
+ const filters = {
2390
+ documentId: { $in: relations2.map((r) => r.documentId) },
2391
+ // NOTE: find the "opposite" status
2392
+ publishedAt: firstRelation.publishedAt !== null ? { $null: true } : { $notNull: true }
2393
+ };
2394
+ const availableStatus = await strapi.query(targetUid).findMany({
2395
+ select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"],
2396
+ filters
2397
+ });
2368
2398
  return relations2.map((relation) => {
2369
- const availableStatuses = documentsAvailableStatus.filter(
2370
- (availableDocument) => availableDocument.documentId === relation.documentId
2399
+ const availableStatuses = availableStatus.filter(
2400
+ (availableDocument) => availableDocument.documentId === relation.documentId && (relation.locale ? availableDocument.locale === relation.locale : true)
2371
2401
  );
2372
2402
  return {
2373
2403
  ...relation,
@@ -2388,11 +2418,8 @@ const validateLocale = (sourceUid, targetUid, locale) => {
2388
2418
  const isLocalized = strapi.plugin("i18n").service("content-types").isLocalizedContentType;
2389
2419
  const isSourceLocalized = isLocalized(sourceModel);
2390
2420
  const isTargetLocalized = isLocalized(targetModel);
2391
- let validatedLocale = locale;
2392
- if (!targetModel || !isTargetLocalized)
2393
- validatedLocale = void 0;
2394
2421
  return {
2395
- locale: validatedLocale,
2422
+ locale,
2396
2423
  isSourceLocalized,
2397
2424
  isTargetLocalized
2398
2425
  };
@@ -2495,7 +2522,7 @@ const relations = {
2495
2522
  attribute,
2496
2523
  fieldsToSelect,
2497
2524
  mainField,
2498
- source: { schema: sourceSchema },
2525
+ source: { schema: sourceSchema, isLocalized: isSourceLocalized },
2499
2526
  target: { schema: targetSchema, isLocalized: isTargetLocalized },
2500
2527
  sourceSchema,
2501
2528
  targetSchema,
@@ -2517,7 +2544,8 @@ const relations = {
2517
2544
  fieldsToSelect,
2518
2545
  mainField,
2519
2546
  source: {
2520
- schema: { uid: sourceUid, modelType: sourceModelType }
2547
+ schema: { uid: sourceUid, modelType: sourceModelType },
2548
+ isLocalized: isSourceLocalized
2521
2549
  },
2522
2550
  target: {
2523
2551
  schema: { uid: targetUid },
@@ -2559,9 +2587,12 @@ const relations = {
2559
2587
  if (!fp.isEmpty(publishedAt)) {
2560
2588
  where[`${alias}.published_at`] = publishedAt;
2561
2589
  }
2562
- if (filterByLocale) {
2590
+ if (isTargetLocalized && locale) {
2563
2591
  where[`${alias}.locale`] = locale;
2564
2592
  }
2593
+ if (isSourceLocalized && locale) {
2594
+ where.locale = locale;
2595
+ }
2565
2596
  if ((idsToInclude?.length ?? 0) !== 0) {
2566
2597
  where[`${alias}.id`].$notIn = idsToInclude;
2567
2598
  }
@@ -2579,7 +2610,8 @@ const relations = {
2579
2610
  id: { $notIn: fp.uniq(idsToOmit) }
2580
2611
  });
2581
2612
  }
2582
- const res = await strapi.db.query(targetUid).findPage(strapi.get("query-params").transform(targetUid, queryParams));
2613
+ const dbQuery = strapi.get("query-params").transform(targetUid, queryParams);
2614
+ const res = await strapi.db.query(targetUid).findPage(dbQuery);
2583
2615
  ctx.body = {
2584
2616
  ...res,
2585
2617
  results: await addStatusToRelations(targetUid, res.results)
@@ -2594,21 +2626,33 @@ const relations = {
2594
2626
  attribute,
2595
2627
  targetField,
2596
2628
  fieldsToSelect,
2597
- source: {
2598
- schema: { uid: sourceUid }
2599
- },
2600
- target: {
2601
- schema: { uid: targetUid }
2602
- }
2629
+ status,
2630
+ source: { schema: sourceSchema },
2631
+ target: { schema: targetSchema }
2603
2632
  } = await this.extractAndValidateRequestInfo(ctx, id);
2633
+ const { uid: sourceUid } = sourceSchema;
2634
+ const { uid: targetUid } = targetSchema;
2604
2635
  const permissionQuery = await getService$1("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
2605
2636
  const dbQuery = strapi.db.query(sourceUid);
2606
2637
  const loadRelations = strapiUtils.relations.isAnyToMany(attribute) ? (...args) => dbQuery.loadPages(...args) : (...args) => dbQuery.load(...args).then((res2) => ({ results: res2 ? [res2] : [] }));
2638
+ const filters = {};
2639
+ if (sourceSchema?.options?.draftAndPublish) {
2640
+ if (targetSchema?.options?.draftAndPublish) {
2641
+ if (status === "published") {
2642
+ filters.publishedAt = { $notNull: true };
2643
+ } else {
2644
+ filters.publishedAt = { $null: true };
2645
+ }
2646
+ }
2647
+ } else if (targetSchema?.options?.draftAndPublish) {
2648
+ filters.publishedAt = { $null: true };
2649
+ }
2607
2650
  const res = await loadRelations({ id: entryId }, targetField, {
2608
- select: ["id", "documentId", "locale", "publishedAt"],
2651
+ select: ["id", "documentId", "locale", "publishedAt", "updatedAt"],
2609
2652
  ordering: "desc",
2610
2653
  page: ctx.request.query.page,
2611
- pageSize: ctx.request.query.pageSize
2654
+ pageSize: ctx.request.query.pageSize,
2655
+ filters
2612
2656
  });
2613
2657
  const loadedIds = res.results.map((item) => item.id);
2614
2658
  addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
@@ -4072,7 +4116,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4072
4116
  */
4073
4117
  async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
4074
4118
  const versionsByLocale = fp.groupBy("locale", allVersions);
4075
- delete versionsByLocale[version.locale];
4119
+ if (version.locale) {
4120
+ delete versionsByLocale[version.locale];
4121
+ }
4076
4122
  const model = strapi2.getModel(uid2);
4077
4123
  const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
4078
4124
  const traversalFunction = async (localeVersion) => strapiUtils.traverseEntity(