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

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 (108) hide show
  1. package/dist/_chunks/{ComponentConfigurationPage-DJ5voqEK.mjs → ComponentConfigurationPage-CIjXcRAB.mjs} +4 -4
  2. package/dist/_chunks/{ComponentConfigurationPage-DJ5voqEK.mjs.map → ComponentConfigurationPage-CIjXcRAB.mjs.map} +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-_6osrv39.js → ComponentConfigurationPage-gsCd80MU.js} +4 -4
  4. package/dist/_chunks/{ComponentConfigurationPage-_6osrv39.js.map → ComponentConfigurationPage-gsCd80MU.js.map} +1 -1
  5. package/dist/_chunks/{EditConfigurationPage-CZofxSLy.mjs → EditConfigurationPage-BglmD_BF.mjs} +4 -4
  6. package/dist/_chunks/{EditConfigurationPage-CZofxSLy.mjs.map → EditConfigurationPage-BglmD_BF.mjs.map} +1 -1
  7. package/dist/_chunks/{EditConfigurationPage-ZN3s568V.js → EditConfigurationPage-DHDQKBzw.js} +4 -4
  8. package/dist/_chunks/{EditConfigurationPage-ZN3s568V.js.map → EditConfigurationPage-DHDQKBzw.js.map} +1 -1
  9. package/dist/_chunks/{EditViewPage-Co2IKQZH.js → EditViewPage-C4iTxUPU.js} +15 -5
  10. package/dist/_chunks/EditViewPage-C4iTxUPU.js.map +1 -0
  11. package/dist/_chunks/{EditViewPage-HYljoEY7.mjs → EditViewPage-CiwVPMaK.mjs} +15 -5
  12. package/dist/_chunks/EditViewPage-CiwVPMaK.mjs.map +1 -0
  13. package/dist/_chunks/{Field-BOPUMZ1u.mjs → Field-DIjL1b5d.mjs} +70 -26
  14. package/dist/_chunks/Field-DIjL1b5d.mjs.map +1 -0
  15. package/dist/_chunks/{Field-G9CkFUtP.js → Field-DhXEK8y1.js} +70 -26
  16. package/dist/_chunks/Field-DhXEK8y1.js.map +1 -0
  17. package/dist/_chunks/{Form-CDwNp7pU.mjs → Form-CmNesrvR.mjs} +3 -3
  18. package/dist/_chunks/Form-CmNesrvR.mjs.map +1 -0
  19. package/dist/_chunks/{Form-crsbkGxI.js → Form-CwmJ4sWe.js} +3 -3
  20. package/dist/_chunks/Form-CwmJ4sWe.js.map +1 -0
  21. package/dist/_chunks/{History-CWcM9HnW.js → History-BLCCNgCt.js} +24 -11
  22. package/dist/_chunks/History-BLCCNgCt.js.map +1 -0
  23. package/dist/_chunks/{History-BDZrgfZ3.mjs → History-D-99Wh30.mjs} +25 -12
  24. package/dist/_chunks/History-D-99Wh30.mjs.map +1 -0
  25. package/dist/_chunks/{ListConfigurationPage-DGzoQD_I.js → ListConfigurationPage-DxWpeZrO.js} +3 -3
  26. package/dist/_chunks/{ListConfigurationPage-DGzoQD_I.js.map → ListConfigurationPage-DxWpeZrO.js.map} +1 -1
  27. package/dist/_chunks/{ListConfigurationPage-BZ3ScUna.mjs → ListConfigurationPage-JPWZz7Kg.mjs} +3 -3
  28. package/dist/_chunks/{ListConfigurationPage-BZ3ScUna.mjs.map → ListConfigurationPage-JPWZz7Kg.mjs.map} +1 -1
  29. package/dist/_chunks/{ListViewPage-BBAC9aPu.js → ListViewPage-CIQekSFz.js} +16 -5
  30. package/dist/_chunks/ListViewPage-CIQekSFz.js.map +1 -0
  31. package/dist/_chunks/{ListViewPage-CsX7tWx-.mjs → ListViewPage-DSK3f0ST.mjs} +16 -5
  32. package/dist/_chunks/{ListViewPage-CsX7tWx-.mjs.map → ListViewPage-DSK3f0ST.mjs.map} +1 -1
  33. package/dist/_chunks/{NoContentTypePage-CwVDx_YC.js → NoContentTypePage-C5cxKvC2.js} +2 -2
  34. package/dist/_chunks/{NoContentTypePage-CwVDx_YC.js.map → NoContentTypePage-C5cxKvC2.js.map} +1 -1
  35. package/dist/_chunks/{NoContentTypePage-LClTUPWs.mjs → NoContentTypePage-D99LU1YP.mjs} +2 -2
  36. package/dist/_chunks/{NoContentTypePage-LClTUPWs.mjs.map → NoContentTypePage-D99LU1YP.mjs.map} +1 -1
  37. package/dist/_chunks/{NoPermissionsPage-S4Re3FwO.mjs → NoPermissionsPage-DBrBw-0y.mjs} +2 -2
  38. package/dist/_chunks/{NoPermissionsPage-S4Re3FwO.mjs.map → NoPermissionsPage-DBrBw-0y.mjs.map} +1 -1
  39. package/dist/_chunks/{NoPermissionsPage-D2iWw-sn.js → NoPermissionsPage-Oy4tmUrW.js} +2 -2
  40. package/dist/_chunks/{NoPermissionsPage-D2iWw-sn.js.map → NoPermissionsPage-Oy4tmUrW.js.map} +1 -1
  41. package/dist/_chunks/{Relations-Dmv0Tpe5.mjs → Relations-BBmhcWFV.mjs} +69 -36
  42. package/dist/_chunks/Relations-BBmhcWFV.mjs.map +1 -0
  43. package/dist/_chunks/{Relations-jwuTFGOV.js → Relations-eG-9p_qS.js} +68 -35
  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-CBX6KyXv.js → index-BIWDoFLK.js} +124 -87
  50. package/dist/_chunks/index-BIWDoFLK.js.map +1 -0
  51. package/dist/_chunks/{index-BmUAydCA.mjs → index-BrUzbQ30.mjs} +124 -88
  52. package/dist/_chunks/index-BrUzbQ30.mjs.map +1 -0
  53. package/dist/_chunks/{layout-ClP-DC72.mjs → layout-_5-cXs34.mjs} +3 -3
  54. package/dist/_chunks/{layout-ClP-DC72.mjs.map → layout-_5-cXs34.mjs.map} +1 -1
  55. package/dist/_chunks/{layout-CxxkX9jY.js → layout-lMc9i1-Z.js} +3 -3
  56. package/dist/_chunks/{layout-CxxkX9jY.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-DIjTADIu.js → relations-BRHithi8.js} +3 -7
  62. package/dist/_chunks/relations-BRHithi8.js.map +1 -0
  63. package/dist/_chunks/{relations-op89RClB.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/hooks/useDocument.d.ts +2 -0
  68. package/dist/admin/src/pages/EditView/components/Header.d.ts +1 -0
  69. package/dist/admin/src/preview/constants.d.ts +1 -0
  70. package/dist/admin/src/preview/index.d.ts +4 -0
  71. package/dist/server/index.js +82 -30
  72. package/dist/server/index.js.map +1 -1
  73. package/dist/server/index.mjs +82 -30
  74. package/dist/server/index.mjs.map +1 -1
  75. package/dist/server/src/bootstrap.d.ts.map +1 -1
  76. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  77. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  78. package/dist/server/src/controllers/utils/metadata.d.ts +15 -1
  79. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  80. package/dist/server/src/history/services/history.d.ts.map +1 -1
  81. package/dist/server/src/index.d.ts +4 -4
  82. package/dist/server/src/preview/constants.d.ts +2 -0
  83. package/dist/server/src/preview/constants.d.ts.map +1 -0
  84. package/dist/server/src/preview/index.d.ts +4 -0
  85. package/dist/server/src/preview/index.d.ts.map +1 -0
  86. package/dist/server/src/services/document-metadata.d.ts +8 -8
  87. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  88. package/dist/server/src/services/index.d.ts +4 -4
  89. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  90. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  91. package/dist/server/src/utils/index.d.ts +2 -0
  92. package/dist/server/src/utils/index.d.ts.map +1 -1
  93. package/package.json +10 -10
  94. package/dist/_chunks/EditViewPage-Co2IKQZH.js.map +0 -1
  95. package/dist/_chunks/EditViewPage-HYljoEY7.mjs.map +0 -1
  96. package/dist/_chunks/Field-BOPUMZ1u.mjs.map +0 -1
  97. package/dist/_chunks/Field-G9CkFUtP.js.map +0 -1
  98. package/dist/_chunks/Form-CDwNp7pU.mjs.map +0 -1
  99. package/dist/_chunks/Form-crsbkGxI.js.map +0 -1
  100. package/dist/_chunks/History-BDZrgfZ3.mjs.map +0 -1
  101. package/dist/_chunks/History-CWcM9HnW.js.map +0 -1
  102. package/dist/_chunks/ListViewPage-BBAC9aPu.js.map +0 -1
  103. package/dist/_chunks/Relations-Dmv0Tpe5.mjs.map +0 -1
  104. package/dist/_chunks/Relations-jwuTFGOV.js.map +0 -1
  105. package/dist/_chunks/index-BmUAydCA.mjs.map +0 -1
  106. package/dist/_chunks/index-CBX6KyXv.js.map +0 -1
  107. package/dist/_chunks/relations-DIjTADIu.js.map +0 -1
  108. package/dist/_chunks/relations-op89RClB.mjs.map +0 -1
@@ -33,6 +33,7 @@ type UseDocument = (args: UseDocumentArgs, opts?: UseDocumentOpts) => {
33
33
  schema?: Schema;
34
34
  schemas?: Schema[];
35
35
  validate: (document: Document) => null | FormErrors;
36
+ hasError?: boolean;
36
37
  };
37
38
  /**
38
39
  * @alpha
@@ -81,6 +82,7 @@ declare const useDoc: () => {
81
82
  schema?: ContentType | undefined;
82
83
  schemas?: ContentType[] | undefined;
83
84
  validate: (document: Document) => null | FormErrors;
85
+ hasError?: boolean | undefined;
84
86
  collectionType: string;
85
87
  model: string;
86
88
  id: string | undefined;
@@ -28,6 +28,7 @@ interface HeaderActionDescription {
28
28
  }>;
29
29
  onSelect?: (value: string) => void;
30
30
  value?: string;
31
+ customizeContent?: (value: string) => React.ReactNode;
31
32
  }
32
33
  declare const DEFAULT_HEADER_ACTIONS: DocumentActionComponent[];
33
34
  export { Header, DEFAULT_HEADER_ACTIONS };
@@ -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, {
@@ -1924,11 +1942,17 @@ const collectionTypes = {
1924
1942
  }
1925
1943
  const isUpdate = !isCreate;
1926
1944
  if (isUpdate) {
1927
- document = await documentManager2.findOne(id, model, { populate, locale });
1928
- if (!document) {
1945
+ const documentExists = documentManager2.exists(model, id);
1946
+ if (!documentExists) {
1929
1947
  throw new strapiUtils.errors.NotFoundError("Document not found");
1930
1948
  }
1931
- if (permissionChecker2.can.update(document)) {
1949
+ document = await documentManager2.findOne(id, model, { populate, locale });
1950
+ if (!document) {
1951
+ if (permissionChecker2.cannot.create({ locale }) || permissionChecker2.cannot.publish({ locale })) {
1952
+ throw new strapiUtils.errors.ForbiddenError();
1953
+ }
1954
+ document = await updateDocument(ctx);
1955
+ } else if (permissionChecker2.can.update(document)) {
1932
1956
  await updateDocument(ctx);
1933
1957
  }
1934
1958
  }
@@ -2353,15 +2377,27 @@ const sanitizeMainField = (model, mainField, userAbility) => {
2353
2377
  }
2354
2378
  return mainField;
2355
2379
  };
2356
- const addStatusToRelations = async (uid2, relations2) => {
2357
- if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.contentTypes[uid2])) {
2380
+ const addStatusToRelations = async (targetUid, relations2) => {
2381
+ if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.getModel(targetUid))) {
2358
2382
  return relations2;
2359
2383
  }
2360
2384
  const documentMetadata2 = getService$1("document-metadata");
2361
- 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
+ });
2362
2398
  return relations2.map((relation) => {
2363
- const availableStatuses = documentsAvailableStatus.filter(
2364
- (availableDocument) => availableDocument.documentId === relation.documentId
2399
+ const availableStatuses = availableStatus.filter(
2400
+ (availableDocument) => availableDocument.documentId === relation.documentId && (relation.locale ? availableDocument.locale === relation.locale : true)
2365
2401
  );
2366
2402
  return {
2367
2403
  ...relation,
@@ -2382,11 +2418,8 @@ const validateLocale = (sourceUid, targetUid, locale) => {
2382
2418
  const isLocalized = strapi.plugin("i18n").service("content-types").isLocalizedContentType;
2383
2419
  const isSourceLocalized = isLocalized(sourceModel);
2384
2420
  const isTargetLocalized = isLocalized(targetModel);
2385
- let validatedLocale = locale;
2386
- if (!targetModel || !isTargetLocalized)
2387
- validatedLocale = void 0;
2388
2421
  return {
2389
- locale: validatedLocale,
2422
+ locale,
2390
2423
  isSourceLocalized,
2391
2424
  isTargetLocalized
2392
2425
  };
@@ -2489,7 +2522,7 @@ const relations = {
2489
2522
  attribute,
2490
2523
  fieldsToSelect,
2491
2524
  mainField,
2492
- source: { schema: sourceSchema },
2525
+ source: { schema: sourceSchema, isLocalized: isSourceLocalized },
2493
2526
  target: { schema: targetSchema, isLocalized: isTargetLocalized },
2494
2527
  sourceSchema,
2495
2528
  targetSchema,
@@ -2511,7 +2544,8 @@ const relations = {
2511
2544
  fieldsToSelect,
2512
2545
  mainField,
2513
2546
  source: {
2514
- schema: { uid: sourceUid, modelType: sourceModelType }
2547
+ schema: { uid: sourceUid, modelType: sourceModelType },
2548
+ isLocalized: isSourceLocalized
2515
2549
  },
2516
2550
  target: {
2517
2551
  schema: { uid: targetUid },
@@ -2553,9 +2587,12 @@ const relations = {
2553
2587
  if (!fp.isEmpty(publishedAt)) {
2554
2588
  where[`${alias}.published_at`] = publishedAt;
2555
2589
  }
2556
- if (filterByLocale) {
2590
+ if (isTargetLocalized && locale) {
2557
2591
  where[`${alias}.locale`] = locale;
2558
2592
  }
2593
+ if (isSourceLocalized && locale) {
2594
+ where.locale = locale;
2595
+ }
2559
2596
  if ((idsToInclude?.length ?? 0) !== 0) {
2560
2597
  where[`${alias}.id`].$notIn = idsToInclude;
2561
2598
  }
@@ -2573,7 +2610,8 @@ const relations = {
2573
2610
  id: { $notIn: fp.uniq(idsToOmit) }
2574
2611
  });
2575
2612
  }
2576
- 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);
2577
2615
  ctx.body = {
2578
2616
  ...res,
2579
2617
  results: await addStatusToRelations(targetUid, res.results)
@@ -2588,21 +2626,33 @@ const relations = {
2588
2626
  attribute,
2589
2627
  targetField,
2590
2628
  fieldsToSelect,
2591
- source: {
2592
- schema: { uid: sourceUid }
2593
- },
2594
- target: {
2595
- schema: { uid: targetUid }
2596
- }
2629
+ status,
2630
+ source: { schema: sourceSchema },
2631
+ target: { schema: targetSchema }
2597
2632
  } = await this.extractAndValidateRequestInfo(ctx, id);
2633
+ const { uid: sourceUid } = sourceSchema;
2634
+ const { uid: targetUid } = targetSchema;
2598
2635
  const permissionQuery = await getService$1("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
2599
2636
  const dbQuery = strapi.db.query(sourceUid);
2600
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
+ }
2601
2650
  const res = await loadRelations({ id: entryId }, targetField, {
2602
- select: ["id", "documentId", "locale", "publishedAt"],
2651
+ select: ["id", "documentId", "locale", "publishedAt", "updatedAt"],
2603
2652
  ordering: "desc",
2604
2653
  page: ctx.request.query.page,
2605
- pageSize: ctx.request.query.pageSize
2654
+ pageSize: ctx.request.query.pageSize,
2655
+ filters
2606
2656
  });
2607
2657
  const loadedIds = res.results.map((item) => item.id);
2608
2658
  addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
@@ -2695,7 +2745,7 @@ const singleTypes = {
2695
2745
  permissionChecker2,
2696
2746
  model,
2697
2747
  // @ts-expect-error - fix types
2698
- { id: document.documentId, locale, publishedAt: null },
2748
+ { documentId: document.documentId, locale, publishedAt: null },
2699
2749
  { availableLocales: true, availableStatus: false }
2700
2750
  );
2701
2751
  ctx.body = { data: {}, meta };
@@ -4066,7 +4116,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4066
4116
  */
4067
4117
  async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
4068
4118
  const versionsByLocale = fp.groupBy("locale", allVersions);
4069
- delete versionsByLocale[version.locale];
4119
+ if (version.locale) {
4120
+ delete versionsByLocale[version.locale];
4121
+ }
4070
4122
  const model = strapi2.getModel(uid2);
4071
4123
  const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
4072
4124
  const traversalFunction = async (localeVersion) => strapiUtils.traverseEntity(