@strapi/content-manager 0.0.0-experimental.9a23f06c0b3b13548dbd12feb3dc92d3c10bebb1 → 0.0.0-experimental.9bd63a0f51283779d88aa9d86aa78c40ed628a15

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 (89) hide show
  1. package/dist/_chunks/{ComponentConfigurationPage-CpBFh6_r.mjs → ComponentConfigurationPage-B2g3icXu.mjs} +3 -3
  2. package/dist/_chunks/{ComponentConfigurationPage-CpBFh6_r.mjs.map → ComponentConfigurationPage-B2g3icXu.mjs.map} +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-_zF8p6CY.js → ComponentConfigurationPage-CzDn8Uxh.js} +3 -3
  4. package/dist/_chunks/{ComponentConfigurationPage-_zF8p6CY.js.map → ComponentConfigurationPage-CzDn8Uxh.js.map} +1 -1
  5. package/dist/_chunks/{EditConfigurationPage-_aG2DJSU.js → EditConfigurationPage-Bcbi6r5y.js} +3 -3
  6. package/dist/_chunks/{EditConfigurationPage-_aG2DJSU.js.map → EditConfigurationPage-Bcbi6r5y.js.map} +1 -1
  7. package/dist/_chunks/{EditConfigurationPage-CE_yavTi.mjs → EditConfigurationPage-DSA1zONV.mjs} +3 -3
  8. package/dist/_chunks/{EditConfigurationPage-CE_yavTi.mjs.map → EditConfigurationPage-DSA1zONV.mjs.map} +1 -1
  9. package/dist/_chunks/{EditViewPage-G9uNzwYL.js → EditViewPage-BvcMXaP2.js} +15 -5
  10. package/dist/_chunks/EditViewPage-BvcMXaP2.js.map +1 -0
  11. package/dist/_chunks/{EditViewPage-DeTn7rAF.mjs → EditViewPage-Ca2EmJpb.mjs} +15 -5
  12. package/dist/_chunks/EditViewPage-Ca2EmJpb.mjs.map +1 -0
  13. package/dist/_chunks/{Field-CnCKhI1R.mjs → Field-BEYkgCZ0.mjs} +69 -25
  14. package/dist/_chunks/Field-BEYkgCZ0.mjs.map +1 -0
  15. package/dist/_chunks/{Field-DDHUWEfV.js → Field-CmaWxdpf.js} +69 -25
  16. package/dist/_chunks/Field-CmaWxdpf.js.map +1 -0
  17. package/dist/_chunks/{Form-IvVVwqRL.mjs → Form-BJVbU6w4.mjs} +3 -3
  18. package/dist/_chunks/Form-BJVbU6w4.mjs.map +1 -0
  19. package/dist/_chunks/{Form-DYETaKUX.js → Form-DAUpPBVM.js} +3 -3
  20. package/dist/_chunks/Form-DAUpPBVM.js.map +1 -0
  21. package/dist/_chunks/{History-CnZDctSO.js → History-Bw9vfT1k.js} +23 -10
  22. package/dist/_chunks/History-Bw9vfT1k.js.map +1 -0
  23. package/dist/_chunks/{History-BMunT-do.mjs → History-M6Pk9CoY.mjs} +24 -11
  24. package/dist/_chunks/History-M6Pk9CoY.mjs.map +1 -0
  25. package/dist/_chunks/{ListConfigurationPage-CDqkCxgV.mjs → ListConfigurationPage-D7ior2zq.mjs} +2 -2
  26. package/dist/_chunks/{ListConfigurationPage-CDqkCxgV.mjs.map → ListConfigurationPage-D7ior2zq.mjs.map} +1 -1
  27. package/dist/_chunks/{ListConfigurationPage-BynalOp8.js → ListConfigurationPage-DBVqF5fc.js} +2 -2
  28. package/dist/_chunks/{ListConfigurationPage-BynalOp8.js.map → ListConfigurationPage-DBVqF5fc.js.map} +1 -1
  29. package/dist/_chunks/{ListViewPage-_5gS-DOF.mjs → ListViewPage-BH37wONY.mjs} +10 -6
  30. package/dist/_chunks/ListViewPage-BH37wONY.mjs.map +1 -0
  31. package/dist/_chunks/{ListViewPage-I88Ouzoq.js → ListViewPage-MZu-8OKX.js} +10 -6
  32. package/dist/_chunks/ListViewPage-MZu-8OKX.js.map +1 -0
  33. package/dist/_chunks/{NoContentTypePage-BaWQ7HsA.js → NoContentTypePage-C9lRMTCa.js} +2 -2
  34. package/dist/_chunks/{NoContentTypePage-BaWQ7HsA.js.map → NoContentTypePage-C9lRMTCa.js.map} +1 -1
  35. package/dist/_chunks/{NoContentTypePage-Dht-55hr.mjs → NoContentTypePage-DRp7Aem_.mjs} +2 -2
  36. package/dist/_chunks/{NoContentTypePage-Dht-55hr.mjs.map → NoContentTypePage-DRp7Aem_.mjs.map} +1 -1
  37. package/dist/_chunks/{NoPermissionsPage-DCVUh5at.js → NoPermissionsPage-COs61PpB.js} +2 -2
  38. package/dist/_chunks/{NoPermissionsPage-DCVUh5at.js.map → NoPermissionsPage-COs61PpB.js.map} +1 -1
  39. package/dist/_chunks/{NoPermissionsPage-Bs8D5W_v.mjs → NoPermissionsPage-CzhRt5CA.mjs} +2 -2
  40. package/dist/_chunks/{NoPermissionsPage-Bs8D5W_v.mjs.map → NoPermissionsPage-CzhRt5CA.mjs.map} +1 -1
  41. package/dist/_chunks/{Relations-Chdt5qWc.mjs → Relations-68XxIzPI.mjs} +49 -28
  42. package/dist/_chunks/Relations-68XxIzPI.mjs.map +1 -0
  43. package/dist/_chunks/{Relations-BPgFQeGj.js → Relations-CsGlulU_.js} +49 -28
  44. package/dist/_chunks/Relations-CsGlulU_.js.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-D4UGPFZC.mjs → index-CsfwpRfc.mjs} +949 -871
  50. package/dist/_chunks/index-CsfwpRfc.mjs.map +1 -0
  51. package/dist/_chunks/{index-BhbLFX4l.js → index-oDq3VO9j.js} +948 -869
  52. package/dist/_chunks/index-oDq3VO9j.js.map +1 -0
  53. package/dist/_chunks/{layout-D4HI4_PS.mjs → layout-C5uSVTqi.mjs} +3 -3
  54. package/dist/_chunks/{layout-D4HI4_PS.mjs.map → layout-C5uSVTqi.mjs.map} +1 -1
  55. package/dist/_chunks/{layout-CYA7s0qO.js → layout-Euka-kfv.js} +3 -3
  56. package/dist/_chunks/{layout-CYA7s0qO.js.map → layout-Euka-kfv.js.map} +1 -1
  57. package/dist/_chunks/{relations-1pXaYpBK.mjs → relations-BpHVgFuV.mjs} +2 -2
  58. package/dist/_chunks/{relations-1pXaYpBK.mjs.map → relations-BpHVgFuV.mjs.map} +1 -1
  59. package/dist/_chunks/{relations-DDZ9OxNo.js → relations-DG7kmxa0.js} +2 -2
  60. package/dist/_chunks/{relations-DDZ9OxNo.js.map → relations-DG7kmxa0.js.map} +1 -1
  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 +31 -17
  68. package/dist/server/index.js.map +1 -1
  69. package/dist/server/index.mjs +31 -17
  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/history/services/history.d.ts.map +1 -1
  74. package/package.json +11 -11
  75. package/dist/_chunks/EditViewPage-DeTn7rAF.mjs.map +0 -1
  76. package/dist/_chunks/EditViewPage-G9uNzwYL.js.map +0 -1
  77. package/dist/_chunks/Field-CnCKhI1R.mjs.map +0 -1
  78. package/dist/_chunks/Field-DDHUWEfV.js.map +0 -1
  79. package/dist/_chunks/Form-DYETaKUX.js.map +0 -1
  80. package/dist/_chunks/Form-IvVVwqRL.mjs.map +0 -1
  81. package/dist/_chunks/History-BMunT-do.mjs.map +0 -1
  82. package/dist/_chunks/History-CnZDctSO.js.map +0 -1
  83. package/dist/_chunks/ListViewPage-I88Ouzoq.js.map +0 -1
  84. package/dist/_chunks/ListViewPage-_5gS-DOF.mjs.map +0 -1
  85. package/dist/_chunks/Relations-BPgFQeGj.js.map +0 -1
  86. package/dist/_chunks/Relations-Chdt5qWc.mjs.map +0 -1
  87. package/dist/_chunks/index-BhbLFX4l.js.map +0 -1
  88. package/dist/_chunks/index-D4UGPFZC.mjs.map +0 -1
  89. package/strapi-server.js +0 -3
@@ -31,7 +31,9 @@ type UseDocument = (args: UseDocumentArgs, opts?: UseDocumentOpts) => {
31
31
  * This is the schema of the content type, it is not the same as the layout.
32
32
  */
33
33
  schema?: Schema;
34
+ schemas?: Schema[];
34
35
  validate: (document: Document) => null | FormErrors;
36
+ hasError?: boolean;
35
37
  };
36
38
  /**
37
39
  * @alpha
@@ -78,10 +80,39 @@ declare const useDoc: () => {
78
80
  * This is the schema of the content type, it is not the same as the layout.
79
81
  */
80
82
  schema?: ContentType | undefined;
83
+ schemas?: ContentType[] | undefined;
81
84
  validate: (document: Document) => null | FormErrors;
85
+ hasError?: boolean | undefined;
82
86
  collectionType: string;
83
87
  model: string;
84
88
  id: string | undefined;
85
89
  };
86
- export { useDocument, useDoc };
90
+ /**
91
+ * @public
92
+ * @experimental
93
+ * Content manager context hooks for plugin development.
94
+ * Make sure to use this hook inside the content manager.
95
+ */
96
+ declare const useContentManagerContext: () => {
97
+ error: import("@reduxjs/toolkit").SerializedError | import("../utils/api").BaseQueryError | undefined;
98
+ isLoading: boolean;
99
+ model: string;
100
+ collectionType: string;
101
+ id: string | undefined;
102
+ slug: string;
103
+ isCreatingEntry: boolean;
104
+ isSingleType: boolean;
105
+ hasDraftAndPublish: boolean;
106
+ components: ComponentsDictionary;
107
+ contentType: ContentType | undefined;
108
+ contentTypes: ContentType[] | undefined;
109
+ form: import("@strapi/admin/strapi-admin").FormContextValue<import("@strapi/admin/strapi-admin").FormValues>;
110
+ layout: {
111
+ error?: import("@reduxjs/toolkit").SerializedError | import("../utils/api").BaseQueryError | undefined;
112
+ isLoading: boolean;
113
+ edit: import("./useDocumentLayout").EditLayout;
114
+ list: import("./useDocumentLayout").ListLayout;
115
+ };
116
+ };
117
+ export { useDocument, useDoc, useContentManagerContext };
87
118
  export type { UseDocument, UseDocumentArgs, Document, Schema, ComponentsDictionary };
@@ -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 };
@@ -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
  }
@@ -2382,11 +2393,8 @@ const validateLocale = (sourceUid, targetUid, locale) => {
2382
2393
  const isLocalized = strapi.plugin("i18n").service("content-types").isLocalizedContentType;
2383
2394
  const isSourceLocalized = isLocalized(sourceModel);
2384
2395
  const isTargetLocalized = isLocalized(targetModel);
2385
- let validatedLocale = locale;
2386
- if (!targetModel || !isTargetLocalized)
2387
- validatedLocale = void 0;
2388
2396
  return {
2389
- locale: validatedLocale,
2397
+ locale,
2390
2398
  isSourceLocalized,
2391
2399
  isTargetLocalized
2392
2400
  };
@@ -2489,7 +2497,7 @@ const relations = {
2489
2497
  attribute,
2490
2498
  fieldsToSelect,
2491
2499
  mainField,
2492
- source: { schema: sourceSchema },
2500
+ source: { schema: sourceSchema, isLocalized: isSourceLocalized },
2493
2501
  target: { schema: targetSchema, isLocalized: isTargetLocalized },
2494
2502
  sourceSchema,
2495
2503
  targetSchema,
@@ -2511,7 +2519,8 @@ const relations = {
2511
2519
  fieldsToSelect,
2512
2520
  mainField,
2513
2521
  source: {
2514
- schema: { uid: sourceUid, modelType: sourceModelType }
2522
+ schema: { uid: sourceUid, modelType: sourceModelType },
2523
+ isLocalized: isSourceLocalized
2515
2524
  },
2516
2525
  target: {
2517
2526
  schema: { uid: targetUid },
@@ -2549,12 +2558,16 @@ const relations = {
2549
2558
  } else {
2550
2559
  where.id = id;
2551
2560
  }
2552
- if (status) {
2553
- where[`${alias}.published_at`] = getPublishedAtClause(status, targetUid);
2561
+ const publishedAt = getPublishedAtClause(status, targetUid);
2562
+ if (!fp.isEmpty(publishedAt)) {
2563
+ where[`${alias}.published_at`] = publishedAt;
2554
2564
  }
2555
- if (filterByLocale) {
2565
+ if (isTargetLocalized && locale) {
2556
2566
  where[`${alias}.locale`] = locale;
2557
2567
  }
2568
+ if (isSourceLocalized && locale) {
2569
+ where.locale = locale;
2570
+ }
2558
2571
  if ((idsToInclude?.length ?? 0) !== 0) {
2559
2572
  where[`${alias}.id`].$notIn = idsToInclude;
2560
2573
  }
@@ -2572,7 +2585,8 @@ const relations = {
2572
2585
  id: { $notIn: fp.uniq(idsToOmit) }
2573
2586
  });
2574
2587
  }
2575
- const res = await strapi.db.query(targetUid).findPage(strapi.get("query-params").transform(targetUid, queryParams));
2588
+ const dbQuery = strapi.get("query-params").transform(targetUid, queryParams);
2589
+ const res = await strapi.db.query(targetUid).findPage(dbQuery);
2576
2590
  ctx.body = {
2577
2591
  ...res,
2578
2592
  results: await addStatusToRelations(targetUid, res.results)
@@ -2609,7 +2623,7 @@ const relations = {
2609
2623
  ...strapi.get("query-params").transform(targetUid, permissionQuery),
2610
2624
  ordering: "desc"
2611
2625
  });
2612
- const relationsUnion = fp.uniqBy("id", fp.concat(sanitizedRes.results, res.results));
2626
+ const relationsUnion = fp.uniqBy("documentId", fp.concat(sanitizedRes.results, res.results));
2613
2627
  ctx.body = {
2614
2628
  pagination: res.pagination || {
2615
2629
  page: 1,
@@ -2694,7 +2708,7 @@ const singleTypes = {
2694
2708
  permissionChecker2,
2695
2709
  model,
2696
2710
  // @ts-expect-error - fix types
2697
- { id: document.documentId, locale, publishedAt: null },
2711
+ { documentId: document.documentId, locale, publishedAt: null },
2698
2712
  { availableLocales: true, availableStatus: false }
2699
2713
  );
2700
2714
  ctx.body = { data: {}, meta };