@strapi/content-manager 0.0.0-experimental.8bf99b7c43ed372264c198d347a2ada9dfed174d → 0.0.0-experimental.8c28a74d1219c09f4ee67402fd3a26f182c4990a

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 (195) hide show
  1. package/dist/admin/components/LeftMenu.js +30 -34
  2. package/dist/admin/components/LeftMenu.js.map +1 -1
  3. package/dist/admin/components/LeftMenu.mjs +32 -36
  4. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  5. package/dist/admin/components/Widgets.js +161 -0
  6. package/dist/admin/components/Widgets.js.map +1 -0
  7. package/dist/admin/components/Widgets.mjs +158 -0
  8. package/dist/admin/components/Widgets.mjs.map +1 -0
  9. package/dist/admin/content-manager.js.map +1 -1
  10. package/dist/admin/content-manager.mjs.map +1 -1
  11. package/dist/admin/history/pages/History.js +1 -9
  12. package/dist/admin/history/pages/History.js.map +1 -1
  13. package/dist/admin/history/pages/History.mjs +1 -9
  14. package/dist/admin/history/pages/History.mjs.map +1 -1
  15. package/dist/admin/hooks/useDocumentActions.js +13 -2
  16. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  17. package/dist/admin/hooks/useDocumentActions.mjs +13 -2
  18. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  19. package/dist/admin/hooks/useDocumentContext.js +57 -0
  20. package/dist/admin/hooks/useDocumentContext.js.map +1 -0
  21. package/dist/admin/hooks/useDocumentContext.mjs +36 -0
  22. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -0
  23. package/dist/admin/index.js +42 -5
  24. package/dist/admin/index.js.map +1 -1
  25. package/dist/admin/index.mjs +42 -3
  26. package/dist/admin/index.mjs.map +1 -1
  27. package/dist/admin/pages/EditView/EditViewPage.js +85 -93
  28. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  29. package/dist/admin/pages/EditView/EditViewPage.mjs +86 -94
  30. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/DocumentActions.js +232 -51
  32. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/DocumentActions.mjs +238 -57
  34. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +7 -12
  36. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +8 -13
  38. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
  44. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
  46. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +2 -2
  48. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +2 -2
  50. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +4 -2
  52. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +4 -2
  54. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +5 -16
  56. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +5 -16
  58. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -3
  60. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -3
  62. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +495 -345
  64. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +495 -347
  66. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +143 -86
  68. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +146 -89
  70. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/UID.js +7 -7
  72. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +7 -7
  74. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  76. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  78. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/InputRenderer.js +3 -10
  80. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/InputRenderer.mjs +3 -10
  82. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  83. package/dist/admin/pages/ListView/ListViewPage.js +0 -77
  84. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  85. package/dist/admin/pages/ListView/ListViewPage.mjs +1 -78
  86. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  87. package/dist/admin/preview/components/PreviewHeader.js +3 -6
  88. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  89. package/dist/admin/preview/components/PreviewHeader.mjs +3 -6
  90. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  91. package/dist/admin/preview/pages/Preview.js +94 -102
  92. package/dist/admin/preview/pages/Preview.js.map +1 -1
  93. package/dist/admin/preview/pages/Preview.mjs +94 -102
  94. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  95. package/dist/admin/services/homepage.js +30 -0
  96. package/dist/admin/services/homepage.js.map +1 -0
  97. package/dist/admin/services/homepage.mjs +28 -0
  98. package/dist/admin/services/homepage.mjs.map +1 -0
  99. package/dist/admin/src/components/Widgets.d.ts +3 -0
  100. package/dist/admin/src/content-manager.d.ts +0 -3
  101. package/dist/admin/src/features/DocumentRBAC.d.ts +1 -1
  102. package/dist/admin/src/history/pages/History.d.ts +1 -1
  103. package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
  104. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  105. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
  106. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  107. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +73 -7
  108. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -0
  109. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  110. package/dist/admin/src/preview/pages/Preview.d.ts +2 -1
  111. package/dist/admin/src/services/homepage.d.ts +5 -0
  112. package/dist/admin/translations/en.json.js +2 -1
  113. package/dist/admin/translations/en.json.js.map +1 -1
  114. package/dist/admin/translations/en.json.mjs +2 -1
  115. package/dist/admin/translations/en.json.mjs.map +1 -1
  116. package/dist/admin/translations/ru.json.js +235 -226
  117. package/dist/admin/translations/ru.json.js.map +1 -1
  118. package/dist/admin/translations/ru.json.mjs +230 -226
  119. package/dist/admin/translations/ru.json.mjs.map +1 -1
  120. package/dist/server/controllers/index.js +3 -1
  121. package/dist/server/controllers/index.js.map +1 -1
  122. package/dist/server/controllers/index.mjs +3 -1
  123. package/dist/server/controllers/index.mjs.map +1 -1
  124. package/dist/server/homepage/controllers/homepage.js +57 -0
  125. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  126. package/dist/server/homepage/controllers/homepage.mjs +36 -0
  127. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  128. package/dist/server/homepage/controllers/index.js +10 -0
  129. package/dist/server/homepage/controllers/index.js.map +1 -0
  130. package/dist/server/homepage/controllers/index.mjs +8 -0
  131. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  132. package/dist/server/homepage/index.js +14 -0
  133. package/dist/server/homepage/index.js.map +1 -0
  134. package/dist/server/homepage/index.mjs +12 -0
  135. package/dist/server/homepage/index.mjs.map +1 -0
  136. package/dist/server/homepage/routes/homepage.js +25 -0
  137. package/dist/server/homepage/routes/homepage.js.map +1 -0
  138. package/dist/server/homepage/routes/homepage.mjs +23 -0
  139. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  140. package/dist/server/homepage/routes/index.js +13 -0
  141. package/dist/server/homepage/routes/index.js.map +1 -0
  142. package/dist/server/homepage/routes/index.mjs +11 -0
  143. package/dist/server/homepage/routes/index.mjs.map +1 -0
  144. package/dist/server/homepage/services/homepage.js +157 -0
  145. package/dist/server/homepage/services/homepage.js.map +1 -0
  146. package/dist/server/homepage/services/homepage.mjs +155 -0
  147. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  148. package/dist/server/homepage/services/index.js +10 -0
  149. package/dist/server/homepage/services/index.js.map +1 -0
  150. package/dist/server/homepage/services/index.mjs +8 -0
  151. package/dist/server/homepage/services/index.mjs.map +1 -0
  152. package/dist/server/preview/services/preview.js +0 -1
  153. package/dist/server/preview/services/preview.js.map +1 -1
  154. package/dist/server/preview/services/preview.mjs +0 -1
  155. package/dist/server/preview/services/preview.mjs.map +1 -1
  156. package/dist/server/routes/index.js +3 -1
  157. package/dist/server/routes/index.js.map +1 -1
  158. package/dist/server/routes/index.mjs +3 -1
  159. package/dist/server/routes/index.mjs.map +1 -1
  160. package/dist/server/services/index.js +3 -1
  161. package/dist/server/services/index.js.map +1 -1
  162. package/dist/server/services/index.mjs +3 -1
  163. package/dist/server/services/index.mjs.map +1 -1
  164. package/dist/server/src/controllers/index.d.ts.map +1 -1
  165. package/dist/server/src/homepage/controllers/homepage.d.ts +7 -0
  166. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  167. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  168. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  169. package/dist/server/src/homepage/index.d.ts +16 -0
  170. package/dist/server/src/homepage/index.d.ts.map +1 -0
  171. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  172. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  173. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  174. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  175. package/dist/server/src/homepage/services/homepage.d.ts +11 -0
  176. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  177. package/dist/server/src/homepage/services/index.d.ts +9 -0
  178. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  179. package/dist/server/src/index.d.ts +7 -1
  180. package/dist/server/src/index.d.ts.map +1 -1
  181. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  182. package/dist/server/src/routes/index.d.ts +1 -0
  183. package/dist/server/src/routes/index.d.ts.map +1 -1
  184. package/dist/server/src/services/data-mapper.d.ts +0 -1
  185. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  186. package/dist/server/src/services/index.d.ts +6 -1
  187. package/dist/server/src/services/index.d.ts.map +1 -1
  188. package/dist/shared/contracts/homepage.d.ts +25 -0
  189. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  190. package/package.json +8 -8
  191. package/dist/admin/features/DocumentContext.js +0 -71
  192. package/dist/admin/features/DocumentContext.js.map +0 -1
  193. package/dist/admin/features/DocumentContext.mjs +0 -49
  194. package/dist/admin/features/DocumentContext.mjs.map +0 -1
  195. package/dist/admin/src/features/DocumentContext.d.ts +0 -53
@@ -6,19 +6,24 @@ var strapiAdmin = require('@strapi/admin/strapi-admin');
6
6
  var designSystem = require('@strapi/design-system');
7
7
  var Icons = require('@strapi/icons');
8
8
  var mapValues = require('lodash/fp/mapValues');
9
+ var get = require('lodash/get');
10
+ var merge = require('lodash/merge');
11
+ var set = require('lodash/set');
9
12
  var reactIntl = require('react-intl');
10
13
  var reactRouterDom = require('react-router-dom');
11
14
  var styledComponents = require('styled-components');
12
15
  var attributes = require('../../../constants/attributes.js');
13
16
  var collections = require('../../../constants/collections.js');
14
- var DocumentContext = require('../../../features/DocumentContext.js');
15
17
  var DocumentRBAC = require('../../../features/DocumentRBAC.js');
16
18
  var useDocument = require('../../../hooks/useDocument.js');
17
19
  var useDocumentActions = require('../../../hooks/useDocumentActions.js');
20
+ var useDocumentContext = require('../../../hooks/useDocumentContext.js');
21
+ var Preview = require('../../../preview/pages/Preview.js');
18
22
  var router = require('../../../router.js');
19
23
  var documents = require('../../../services/documents.js');
20
24
  var api = require('../../../utils/api.js');
21
25
  var translations = require('../../../utils/translations.js');
26
+ var RelationModal = require('./FormInputs/Relations/RelationModal.js');
22
27
 
23
28
  function _interopNamespaceDefault(e) {
24
29
  var n = Object.create(null);
@@ -39,6 +44,38 @@ function _interopNamespaceDefault(e) {
39
44
 
40
45
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
41
46
 
47
+ const connectRelationToParent = (parentDataToUpdate, fieldToConnect, data, fieldToConnectUID)=>{
48
+ /*
49
+ * Check if the fieldToConnect is already present in the parentDataToUpdate.
50
+ * This happens in particular when in the parentDocument you have created
51
+ * a new component without saving.
52
+ */ const isFieldPresent = !!get(parentDataToUpdate, fieldToConnect);
53
+ const fieldToConnectPath = isFieldPresent ? fieldToConnect : fieldToConnect.split('.').slice(0, -1).join('.');
54
+ const fieldToConnectValue = isFieldPresent ? {
55
+ connect: [
56
+ {
57
+ id: data.documentId,
58
+ documentId: data.documentId,
59
+ locale: data.locale
60
+ }
61
+ ]
62
+ } : {
63
+ [fieldToConnect.split('.').pop()]: {
64
+ connect: [
65
+ {
66
+ id: data.documentId,
67
+ documentId: data.documentId,
68
+ locale: data.locale
69
+ }
70
+ ],
71
+ disconnect: []
72
+ },
73
+ // In case the object was not present you need to pass the componentUID of the parent document
74
+ __component: fieldToConnectUID
75
+ };
76
+ const objectToConnect = set({}, fieldToConnectPath, fieldToConnectValue);
77
+ return merge(parentDataToUpdate, objectToConnect);
78
+ };
42
79
  const DocumentActions = ({ actions })=>{
43
80
  const { formatMessage } = reactIntl.useIntl();
44
81
  const [primaryAction, secondaryAction, ...restActions] = actions.filter((action)=>{
@@ -371,8 +408,8 @@ const transformData = (data)=>{
371
408
  };
372
409
  /* -------------------------------------------------------------------------------------------------
373
410
  * DocumentActionComponents
374
- * -----------------------------------------------------------------------------------------------*/ const PublishAction = ({ activeTab, documentId, model, collectionType, meta, document, onPreview, fromPreview = false, fromRelationModal = false })=>{
375
- const schema = DocumentContext.useDocumentContext('PublishAction', (state)=>state.document.schema);
411
+ * -----------------------------------------------------------------------------------------------*/ const PublishAction = ({ activeTab, documentId, model, collectionType, meta, document })=>{
412
+ const { currentDocument: { schema } } = useDocumentContext.useDocumentContext('PublishAction');
376
413
  const navigate = reactRouterDom.useNavigate();
377
414
  const { toggleNotification } = strapiAdmin.useNotification();
378
415
  const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
@@ -381,22 +418,31 @@ const transformData = (data)=>{
381
418
  const { id } = reactRouterDom.useParams();
382
419
  const { formatMessage } = reactIntl.useIntl();
383
420
  const canPublish = DocumentRBAC.useDocumentRBAC('PublishAction', ({ canPublish })=>canPublish);
384
- const { publish, isLoading } = useDocumentActions.useDocumentActions(fromPreview, fromRelationModal);
421
+ const { publish, isLoading } = useDocumentActions.useDocumentActions();
422
+ const onPreview = Preview.usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
385
423
  const [countDraftRelations, { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations }] = documents.useGetDraftRelationCountQuery();
386
424
  const [localCountOfDraftRelations, setLocalCountOfDraftRelations] = React__namespace.useState(0);
387
425
  const [serverCountOfDraftRelations, setServerCountOfDraftRelations] = React__namespace.useState(0);
388
- const [{ query, rawQuery }] = strapiAdmin.useQueryParams();
389
- const params = React__namespace.useMemo(()=>api.buildValidParams(query), [
390
- query
391
- ]);
426
+ const [{ rawQuery }] = strapiAdmin.useQueryParams();
392
427
  const modified = strapiAdmin.useForm('PublishAction', ({ modified })=>modified);
393
428
  const setSubmitting = strapiAdmin.useForm('PublishAction', ({ setSubmitting })=>setSubmitting);
394
429
  const isSubmitting = strapiAdmin.useForm('PublishAction', ({ isSubmitting })=>isSubmitting);
395
430
  const validate = strapiAdmin.useForm('PublishAction', (state)=>state.validate);
396
431
  const setErrors = strapiAdmin.useForm('PublishAction', (state)=>state.setErrors);
397
432
  const formValues = strapiAdmin.useForm('PublishAction', ({ values })=>values);
398
- const rootDocumentMeta = DocumentContext.useDocumentContext('PublishAction', (state)=>state.rootDocumentMeta);
399
- const currentDocumentMeta = DocumentContext.useDocumentContext('PublishAction', (state)=>state.meta);
433
+ const resetForm = strapiAdmin.useForm('PublishAction', ({ resetForm })=>resetForm);
434
+ // need to discriminate if the publish is coming from a relation modal or in the edit view
435
+ const relationContext = RelationModal.useRelationModal('PublishAction', ()=>true, false);
436
+ const fromRelationModal = relationContext != undefined;
437
+ const dispatch = RelationModal.useRelationModal('PublishAction', (state)=>state.dispatch);
438
+ const fieldToConnect = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnect, false);
439
+ const fieldToConnectUID = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
440
+ const documentHistory = RelationModal.useRelationModal('PublishAction', (state)=>state.state.documentHistory, false);
441
+ const rootDocumentMeta = RelationModal.useRelationModal('PublishAction', (state)=>state.rootDocumentMeta);
442
+ const { currentDocumentMeta } = useDocumentContext.useDocumentContext('PublishAction');
443
+ const [updateDocumentMutation] = documents.useUpdateDocumentMutation();
444
+ const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
445
+ const idToPublish = currentDocumentMeta.documentId || id;
400
446
  React__namespace.useEffect(()=>{
401
447
  if (isErrorDraftRelations) {
402
448
  toggleNotification({
@@ -460,7 +506,7 @@ const transformData = (data)=>{
460
506
  collectionType,
461
507
  model,
462
508
  documentId,
463
- params
509
+ params: currentDocumentMeta.params
464
510
  });
465
511
  if (error) {
466
512
  throw error;
@@ -477,8 +523,18 @@ const transformData = (data)=>{
477
523
  countDraftRelations,
478
524
  collectionType,
479
525
  model,
480
- params
526
+ currentDocumentMeta.params
481
527
  ]);
528
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
529
+ const parentDocumentData = useDocument.useDocument({
530
+ documentId: parentDocumentMetaToUpdate?.documentId,
531
+ model: parentDocumentMetaToUpdate?.model,
532
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
533
+ params: parentDocumentMetaToUpdate?.params
534
+ }, {
535
+ skip: !parentDocumentMetaToUpdate
536
+ });
537
+ const { getInitialFormValues } = useDocument.useDoc();
482
538
  const isDocumentPublished = (document?.[attributes.PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc)=>doc[attributes.PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== 'modified';
483
539
  if (!schema?.options?.draftAndPublish) {
484
540
  return null;
@@ -499,21 +555,72 @@ const transformData = (data)=>{
499
555
  });
500
556
  return;
501
557
  }
502
- const isPublishingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
503
558
  const res = await publish({
504
559
  collectionType,
505
560
  model,
506
561
  documentId,
507
- params: isPublishingRelation ? currentDocumentMeta.params : params
562
+ params: currentDocumentMeta.params
508
563
  }, transformData(formValues));
564
+ // Reset form if successful
565
+ if ('data' in res) {
566
+ resetForm();
567
+ }
509
568
  if ('data' in res && collectionType !== collections.SINGLE_TYPES) {
510
569
  /**
511
570
  * TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.
512
- */ if (id === 'create') {
571
+ */ if (idToPublish === 'create' && !fromRelationModal) {
513
572
  navigate({
514
573
  pathname: `../${collectionType}/${model}/${res.data.documentId}`,
515
574
  search: rawQuery
516
575
  });
576
+ } else if (fromRelationModal) {
577
+ const newRelation = {
578
+ documentId: res.data.documentId,
579
+ collectionType,
580
+ model,
581
+ params: currentDocumentMeta.params
582
+ };
583
+ /*
584
+ * Update, if needed, the parent relation with the newly published document.
585
+ * Check if in history we have the parent relation otherwise use the
586
+ * rootDocument
587
+ */ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === collections.SINGLE_TYPES)) {
588
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === collections.SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
589
+ const metaDocumentToUpdate = documentHistory.at(-2) ?? rootDocumentMeta;
590
+ const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
591
+ try {
592
+ const updateRes = await updateDocumentMutation({
593
+ collectionType: metaDocumentToUpdate.collectionType,
594
+ model: metaDocumentToUpdate.model,
595
+ documentId: metaDocumentToUpdate.collectionType !== collections.SINGLE_TYPES ? metaDocumentToUpdate.documentId : undefined,
596
+ params: metaDocumentToUpdate.params,
597
+ data: dataToUpdate
598
+ });
599
+ if ('error' in updateRes) {
600
+ toggleNotification({
601
+ type: 'danger',
602
+ message: formatAPIError(updateRes.error)
603
+ });
604
+ return;
605
+ }
606
+ } catch (err) {
607
+ toggleNotification({
608
+ type: 'danger',
609
+ message: formatMessage({
610
+ id: 'notification.error',
611
+ defaultMessage: 'An error occurred'
612
+ })
613
+ });
614
+ throw err;
615
+ }
616
+ }
617
+ dispatch({
618
+ type: 'GO_TO_CREATED_RELATION',
619
+ payload: {
620
+ document: newRelation,
621
+ shouldBypassConfirmation: true
622
+ }
623
+ });
517
624
  }
518
625
  } else if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
519
626
  setErrors(formatValidationErrors(res.error));
@@ -579,27 +686,44 @@ PublishAction.position = [
579
686
  'preview',
580
687
  'relation-modal'
581
688
  ];
582
- const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview, fromPreview = false, fromRelationModal = false })=>{
689
+ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
583
690
  const navigate = reactRouterDom.useNavigate();
584
691
  const { toggleNotification } = strapiAdmin.useNotification();
585
692
  const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
586
693
  const cloneMatch = reactRouterDom.useMatch(router.CLONE_PATH);
587
694
  const isCloning = cloneMatch !== null;
588
695
  const { formatMessage } = reactIntl.useIntl();
589
- const { create, update, clone, isLoading } = useDocumentActions.useDocumentActions(fromPreview, fromRelationModal);
590
- const [{ query, rawQuery }] = strapiAdmin.useQueryParams();
591
- const params = React__namespace.useMemo(()=>api.buildValidParams(query), [
592
- query
593
- ]);
696
+ const { create, update, clone, isLoading } = useDocumentActions.useDocumentActions();
697
+ const [{ rawQuery }] = strapiAdmin.useQueryParams();
698
+ const onPreview = Preview.usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
699
+ const { getInitialFormValues } = useDocument.useDoc();
594
700
  const isSubmitting = strapiAdmin.useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
595
701
  const modified = strapiAdmin.useForm('UpdateAction', ({ modified })=>modified);
596
702
  const setSubmitting = strapiAdmin.useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
597
703
  const document = strapiAdmin.useForm('UpdateAction', ({ values })=>values);
598
704
  const validate = strapiAdmin.useForm('UpdateAction', (state)=>state.validate);
599
705
  const setErrors = strapiAdmin.useForm('UpdateAction', (state)=>state.setErrors);
600
- const resetForm = strapiAdmin.useForm('PublishAction', ({ resetForm })=>resetForm);
601
- const rootDocumentMeta = DocumentContext.useDocumentContext('UpdateAction', (state)=>state.rootDocumentMeta);
602
- const currentDocumentMeta = DocumentContext.useDocumentContext('UpdateAction', (state)=>state.meta);
706
+ const resetForm = strapiAdmin.useForm('UpdateAction', ({ resetForm })=>resetForm);
707
+ const dispatch = RelationModal.useRelationModal('UpdateAction', (state)=>state.dispatch);
708
+ // need to discriminate if the update is coming from a relation modal or in the edit view
709
+ const relationContext = RelationModal.useRelationModal('UpdateAction', ()=>true, false);
710
+ const fieldToConnect = RelationModal.useRelationModal('UpdateAction', (state)=>state.state.fieldToConnect, false);
711
+ const fieldToConnectUID = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
712
+ const documentHistory = RelationModal.useRelationModal('UpdateAction', (state)=>state.state.documentHistory, false);
713
+ const rootDocumentMeta = RelationModal.useRelationModal('UpdateAction', (state)=>state.rootDocumentMeta);
714
+ const fromRelationModal = relationContext != undefined;
715
+ const { currentDocumentMeta } = useDocumentContext.useDocumentContext('UpdateAction');
716
+ const [updateDocumentMutation] = documents.useUpdateDocumentMutation();
717
+ const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
718
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
719
+ const parentDocumentData = useDocument.useDocument({
720
+ documentId: parentDocumentMetaToUpdate?.documentId,
721
+ model: parentDocumentMetaToUpdate?.model,
722
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
723
+ params: parentDocumentMetaToUpdate?.params
724
+ }, {
725
+ skip: !parentDocumentMetaToUpdate
726
+ });
603
727
  const handleUpdate = React__namespace.useCallback(async ()=>{
604
728
  setSubmitting(true);
605
729
  try {
@@ -623,7 +747,7 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
623
747
  const res = await clone({
624
748
  model,
625
749
  documentId: cloneMatch.params.origin,
626
- params
750
+ params: currentDocumentMeta.params
627
751
  }, transformData(document));
628
752
  if ('data' in res) {
629
753
  navigate({
@@ -636,12 +760,11 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
636
760
  setErrors(formatValidationErrors(res.error));
637
761
  }
638
762
  } else if (documentId || collectionType === collections.SINGLE_TYPES) {
639
- const isEditingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
640
763
  const res = await update({
641
764
  collectionType,
642
765
  model,
643
766
  documentId,
644
- params: isEditingRelation ? currentDocumentMeta.params : params
767
+ params: currentDocumentMeta.params
645
768
  }, transformData(document));
646
769
  if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
647
770
  setErrors(formatValidationErrors(res.error));
@@ -651,16 +774,67 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
651
774
  } else {
652
775
  const res = await create({
653
776
  model,
654
- params
777
+ params: currentDocumentMeta.params
655
778
  }, transformData(document));
656
779
  if ('data' in res && collectionType !== collections.SINGLE_TYPES) {
657
- navigate({
658
- pathname: `../${res.data.documentId}`,
659
- search: rawQuery
660
- }, {
661
- replace: true,
662
- relative: 'path'
663
- });
780
+ if (fromRelationModal) {
781
+ const createdRelation = {
782
+ documentId: res.data.documentId,
783
+ collectionType,
784
+ model,
785
+ params: currentDocumentMeta.params
786
+ };
787
+ /*
788
+ * Update, if needed, the parent relation with the newly published document.
789
+ * Check if in history we have the parent relation otherwise use the
790
+ * rootDocument
791
+ */ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === collections.SINGLE_TYPES)) {
792
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === collections.SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
793
+ const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
794
+ try {
795
+ const updateRes = await updateDocumentMutation({
796
+ collectionType: parentDocumentMetaToUpdate.collectionType,
797
+ model: parentDocumentMetaToUpdate.model,
798
+ documentId: parentDocumentMetaToUpdate.collectionType !== collections.SINGLE_TYPES ? parentDocumentMetaToUpdate.documentId : undefined,
799
+ params: parentDocumentMetaToUpdate.params,
800
+ data: {
801
+ ...dataToUpdate
802
+ }
803
+ });
804
+ if ('error' in updateRes) {
805
+ toggleNotification({
806
+ type: 'danger',
807
+ message: formatAPIError(updateRes.error)
808
+ });
809
+ return;
810
+ }
811
+ } catch (err) {
812
+ toggleNotification({
813
+ type: 'danger',
814
+ message: formatMessage({
815
+ id: 'notification.error',
816
+ defaultMessage: 'An error occurred'
817
+ })
818
+ });
819
+ throw err;
820
+ }
821
+ }
822
+ dispatch({
823
+ type: 'GO_TO_CREATED_RELATION',
824
+ payload: {
825
+ document: createdRelation,
826
+ shouldBypassConfirmation: true
827
+ }
828
+ });
829
+ } else {
830
+ navigate({
831
+ pathname: `../${res.data.documentId}`,
832
+ search: rawQuery
833
+ }, {
834
+ replace: true,
835
+ relative: 'path'
836
+ });
837
+ }
664
838
  } else if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
665
839
  setErrors(formatValidationErrors(res.error));
666
840
  }
@@ -672,30 +846,37 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
672
846
  }
673
847
  }
674
848
  }, [
849
+ setSubmitting,
850
+ modified,
851
+ validate,
852
+ isCloning,
853
+ documentId,
854
+ collectionType,
855
+ toggleNotification,
856
+ formatMessage,
675
857
  clone,
858
+ model,
676
859
  cloneMatch?.params.origin,
677
- collectionType,
678
- create,
679
- currentDocumentMeta.documentId,
680
860
  currentDocumentMeta.params,
681
861
  document,
682
- documentId,
683
- formatMessage,
684
- formatValidationErrors,
685
- isCloning,
686
- model,
687
- modified,
688
862
  navigate,
689
- onPreview,
690
- params,
691
863
  rawQuery,
692
- resetForm,
693
- rootDocumentMeta.documentId,
694
864
  setErrors,
695
- setSubmitting,
696
- toggleNotification,
865
+ formatValidationErrors,
697
866
  update,
698
- validate
867
+ resetForm,
868
+ create,
869
+ fromRelationModal,
870
+ fieldToConnect,
871
+ documentHistory,
872
+ parentDocumentMetaToUpdate,
873
+ dispatch,
874
+ getInitialFormValues,
875
+ parentDocumentData,
876
+ fieldToConnectUID,
877
+ updateDocumentMutation,
878
+ formatAPIError,
879
+ onPreview
699
880
  ]);
700
881
  // Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux
701
882
  React__namespace.useEffect(()=>{