@strapi/content-manager 5.12.5 → 5.13.0-beta.0

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 (117) hide show
  1. package/dist/admin/hooks/useDocumentActions.js +5 -1
  2. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  3. package/dist/admin/hooks/useDocumentActions.mjs +5 -1
  4. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  5. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  6. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -1
  7. package/dist/admin/pages/EditView/components/DocumentActions.js +206 -21
  8. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  9. package/dist/admin/pages/EditView/components/DocumentActions.mjs +208 -23
  10. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  11. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +7 -12
  12. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  13. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +8 -13
  14. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  15. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  16. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  17. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  18. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  19. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -0
  20. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  21. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +2 -0
  22. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +199 -137
  24. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +199 -137
  26. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +89 -50
  28. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +91 -52
  30. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  32. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  34. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  35. package/dist/admin/preview/components/PreviewHeader.js +1 -1
  36. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  37. package/dist/admin/preview/components/PreviewHeader.mjs +1 -1
  38. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  39. package/dist/admin/services/homepage.js +9 -5
  40. package/dist/admin/services/homepage.js.map +1 -1
  41. package/dist/admin/services/homepage.mjs +9 -5
  42. package/dist/admin/services/homepage.mjs.map +1 -1
  43. package/dist/admin/src/hooks/useDocumentContext.d.ts +1 -1
  44. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  45. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +26 -5
  46. package/dist/admin/translations/en.json.js +2 -1
  47. package/dist/admin/translations/en.json.js.map +1 -1
  48. package/dist/admin/translations/en.json.mjs +2 -1
  49. package/dist/admin/translations/en.json.mjs.map +1 -1
  50. package/dist/server/controllers/index.js +3 -1
  51. package/dist/server/controllers/index.js.map +1 -1
  52. package/dist/server/controllers/index.mjs +3 -1
  53. package/dist/server/controllers/index.mjs.map +1 -1
  54. package/dist/server/homepage/controllers/homepage.js +57 -0
  55. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  56. package/dist/server/homepage/controllers/homepage.mjs +36 -0
  57. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  58. package/dist/server/homepage/controllers/index.js +10 -0
  59. package/dist/server/homepage/controllers/index.js.map +1 -0
  60. package/dist/server/homepage/controllers/index.mjs +8 -0
  61. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  62. package/dist/server/homepage/index.js +14 -0
  63. package/dist/server/homepage/index.js.map +1 -0
  64. package/dist/server/homepage/index.mjs +12 -0
  65. package/dist/server/homepage/index.mjs.map +1 -0
  66. package/dist/server/homepage/routes/homepage.js +25 -0
  67. package/dist/server/homepage/routes/homepage.js.map +1 -0
  68. package/dist/server/homepage/routes/homepage.mjs +23 -0
  69. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  70. package/dist/server/homepage/routes/index.js +13 -0
  71. package/dist/server/homepage/routes/index.js.map +1 -0
  72. package/dist/server/homepage/routes/index.mjs +11 -0
  73. package/dist/server/homepage/routes/index.mjs.map +1 -0
  74. package/dist/server/homepage/services/homepage.js +157 -0
  75. package/dist/server/homepage/services/homepage.js.map +1 -0
  76. package/dist/server/homepage/services/homepage.mjs +155 -0
  77. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  78. package/dist/server/homepage/services/index.js +10 -0
  79. package/dist/server/homepage/services/index.js.map +1 -0
  80. package/dist/server/homepage/services/index.mjs +8 -0
  81. package/dist/server/homepage/services/index.mjs.map +1 -0
  82. package/dist/server/preview/services/preview.js +0 -1
  83. package/dist/server/preview/services/preview.js.map +1 -1
  84. package/dist/server/preview/services/preview.mjs +0 -1
  85. package/dist/server/preview/services/preview.mjs.map +1 -1
  86. package/dist/server/routes/index.js +3 -1
  87. package/dist/server/routes/index.js.map +1 -1
  88. package/dist/server/routes/index.mjs +3 -1
  89. package/dist/server/routes/index.mjs.map +1 -1
  90. package/dist/server/services/index.js +3 -1
  91. package/dist/server/services/index.js.map +1 -1
  92. package/dist/server/services/index.mjs +3 -1
  93. package/dist/server/services/index.mjs.map +1 -1
  94. package/dist/server/src/controllers/index.d.ts.map +1 -1
  95. package/dist/server/src/homepage/controllers/homepage.d.ts +7 -0
  96. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  97. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  98. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  99. package/dist/server/src/homepage/index.d.ts +16 -0
  100. package/dist/server/src/homepage/index.d.ts.map +1 -0
  101. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  102. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  103. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  104. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  105. package/dist/server/src/{services → homepage/services}/homepage.d.ts +1 -1
  106. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  107. package/dist/server/src/homepage/services/index.d.ts +9 -0
  108. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  109. package/dist/server/src/index.d.ts +7 -0
  110. package/dist/server/src/index.d.ts.map +1 -1
  111. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  112. package/dist/server/src/routes/index.d.ts +1 -0
  113. package/dist/server/src/routes/index.d.ts.map +1 -1
  114. package/dist/server/src/services/index.d.ts +6 -0
  115. package/dist/server/src/services/index.d.ts.map +1 -1
  116. package/package.json +7 -7
  117. package/dist/server/src/services/homepage.d.ts.map +0 -1
@@ -4,21 +4,57 @@ import { useNotification, useAPIErrorHandler, useQueryParams, useForm } from '@s
4
4
  import { Menu, Flex, Button, VisuallyHidden, Dialog, Modal, Typography, Radio } from '@strapi/design-system';
5
5
  import { More, Cross, WarningCircle } from '@strapi/icons';
6
6
  import mapValues from 'lodash/fp/mapValues';
7
+ import get from 'lodash/get';
8
+ import merge from 'lodash/merge';
9
+ import set from 'lodash/set';
7
10
  import { useIntl } from 'react-intl';
8
11
  import { useNavigate, useMatch, useParams } from 'react-router-dom';
9
12
  import { styled } from 'styled-components';
10
13
  import { PUBLISHED_AT_ATTRIBUTE_NAME } from '../../../constants/attributes.mjs';
11
14
  import { SINGLE_TYPES } from '../../../constants/collections.mjs';
12
15
  import { useDocumentRBAC } from '../../../features/DocumentRBAC.mjs';
13
- import { useDoc } from '../../../hooks/useDocument.mjs';
16
+ import { useDocument, useDoc } from '../../../hooks/useDocument.mjs';
14
17
  import { useDocumentActions } from '../../../hooks/useDocumentActions.mjs';
15
18
  import { useDocumentContext } from '../../../hooks/useDocumentContext.mjs';
16
19
  import { usePreviewContext } from '../../../preview/pages/Preview.mjs';
17
20
  import { LIST_PATH, CLONE_PATH } from '../../../router.mjs';
18
- import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery } from '../../../services/documents.mjs';
21
+ import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery, useUpdateDocumentMutation } from '../../../services/documents.mjs';
19
22
  import { isBaseQueryError, buildValidParams } from '../../../utils/api.mjs';
20
23
  import { getTranslation } from '../../../utils/translations.mjs';
24
+ import { useRelationModal } from './FormInputs/Relations/RelationModal.mjs';
21
25
 
26
+ const connectRelationToParent = (parentDataToUpdate, fieldToConnect, data, fieldToConnectUID)=>{
27
+ /*
28
+ * Check if the fieldToConnect is already present in the parentDataToUpdate.
29
+ * This happens in particular when in the parentDocument you have created
30
+ * a new component without saving.
31
+ */ const isFieldPresent = !!get(parentDataToUpdate, fieldToConnect);
32
+ const fieldToConnectPath = isFieldPresent ? fieldToConnect : fieldToConnect.split('.').slice(0, -1).join('.');
33
+ const fieldToConnectValue = isFieldPresent ? {
34
+ connect: [
35
+ {
36
+ id: data.documentId,
37
+ documentId: data.documentId,
38
+ locale: data.locale
39
+ }
40
+ ]
41
+ } : {
42
+ [fieldToConnect.split('.').pop()]: {
43
+ connect: [
44
+ {
45
+ id: data.documentId,
46
+ documentId: data.documentId,
47
+ locale: data.locale
48
+ }
49
+ ],
50
+ disconnect: []
51
+ },
52
+ // In case the object was not present you need to pass the componentUID of the parent document
53
+ __component: fieldToConnectUID
54
+ };
55
+ const objectToConnect = set({}, fieldToConnectPath, fieldToConnectValue);
56
+ return merge(parentDataToUpdate, objectToConnect);
57
+ };
22
58
  const DocumentActions = ({ actions })=>{
23
59
  const { formatMessage } = useIntl();
24
60
  const [primaryAction, secondaryAction, ...restActions] = actions.filter((action)=>{
@@ -374,7 +410,17 @@ const transformData = (data)=>{
374
410
  const setErrors = useForm('PublishAction', (state)=>state.setErrors);
375
411
  const formValues = useForm('PublishAction', ({ values })=>values);
376
412
  const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
413
+ // need to discriminate if the publish is coming from a relation modal or in the edit view
414
+ const relationContext = useRelationModal('PublishAction', ()=>true, false);
415
+ const fromRelationModal = relationContext != undefined;
416
+ const dispatch = useRelationModal('PublishAction', (state)=>state.dispatch);
417
+ const fieldToConnect = useRelationModal('PublishAction', (state)=>state.state.fieldToConnect, false);
418
+ const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
419
+ const documentHistory = useRelationModal('PublishAction', (state)=>state.state.documentHistory, false);
420
+ const rootDocumentMeta = useRelationModal('PublishAction', (state)=>state.rootDocumentMeta);
377
421
  const { currentDocumentMeta } = useDocumentContext('PublishAction');
422
+ const [updateDocumentMutation] = useUpdateDocumentMutation();
423
+ const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
378
424
  const idToPublish = currentDocumentMeta.documentId || id;
379
425
  React.useEffect(()=>{
380
426
  if (isErrorDraftRelations) {
@@ -458,6 +504,16 @@ const transformData = (data)=>{
458
504
  model,
459
505
  currentDocumentMeta.params
460
506
  ]);
507
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
508
+ const parentDocumentData = useDocument({
509
+ documentId: parentDocumentMetaToUpdate?.documentId,
510
+ model: parentDocumentMetaToUpdate?.model,
511
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
512
+ params: parentDocumentMetaToUpdate?.params
513
+ }, {
514
+ skip: !parentDocumentMetaToUpdate
515
+ });
516
+ const { getInitialFormValues } = useDoc();
461
517
  const isDocumentPublished = (document?.[PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc)=>doc[PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== 'modified';
462
518
  if (!schema?.options?.draftAndPublish) {
463
519
  return null;
@@ -491,11 +547,59 @@ const transformData = (data)=>{
491
547
  if ('data' in res && collectionType !== SINGLE_TYPES) {
492
548
  /**
493
549
  * TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.
494
- */ if (idToPublish === 'create') {
550
+ */ if (idToPublish === 'create' && !fromRelationModal) {
495
551
  navigate({
496
552
  pathname: `../${collectionType}/${model}/${res.data.documentId}`,
497
553
  search: rawQuery
498
554
  });
555
+ } else if (fromRelationModal) {
556
+ const newRelation = {
557
+ documentId: res.data.documentId,
558
+ collectionType,
559
+ model,
560
+ params: currentDocumentMeta.params
561
+ };
562
+ /*
563
+ * Update, if needed, the parent relation with the newly published document.
564
+ * Check if in history we have the parent relation otherwise use the
565
+ * rootDocument
566
+ */ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)) {
567
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
568
+ const metaDocumentToUpdate = documentHistory.at(-2) ?? rootDocumentMeta;
569
+ const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
570
+ try {
571
+ const updateRes = await updateDocumentMutation({
572
+ collectionType: metaDocumentToUpdate.collectionType,
573
+ model: metaDocumentToUpdate.model,
574
+ documentId: metaDocumentToUpdate.collectionType !== SINGLE_TYPES ? metaDocumentToUpdate.documentId : undefined,
575
+ params: metaDocumentToUpdate.params,
576
+ data: dataToUpdate
577
+ });
578
+ if ('error' in updateRes) {
579
+ toggleNotification({
580
+ type: 'danger',
581
+ message: formatAPIError(updateRes.error)
582
+ });
583
+ return;
584
+ }
585
+ } catch (err) {
586
+ toggleNotification({
587
+ type: 'danger',
588
+ message: formatMessage({
589
+ id: 'notification.error',
590
+ defaultMessage: 'An error occurred'
591
+ })
592
+ });
593
+ throw err;
594
+ }
595
+ }
596
+ dispatch({
597
+ type: 'GO_TO_CREATED_RELATION',
598
+ payload: {
599
+ document: newRelation,
600
+ shouldBypassConfirmation: true
601
+ }
602
+ });
499
603
  }
500
604
  } else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
501
605
  setErrors(formatValidationErrors(res.error));
@@ -571,14 +675,34 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
571
675
  const { create, update, clone, isLoading } = useDocumentActions();
572
676
  const [{ rawQuery }] = useQueryParams();
573
677
  const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
678
+ const { getInitialFormValues } = useDoc();
574
679
  const isSubmitting = useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
575
680
  const modified = useForm('UpdateAction', ({ modified })=>modified);
576
681
  const setSubmitting = useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
577
682
  const document = useForm('UpdateAction', ({ values })=>values);
578
683
  const validate = useForm('UpdateAction', (state)=>state.validate);
579
684
  const setErrors = useForm('UpdateAction', (state)=>state.setErrors);
580
- const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
685
+ const resetForm = useForm('UpdateAction', ({ resetForm })=>resetForm);
686
+ const dispatch = useRelationModal('UpdateAction', (state)=>state.dispatch);
687
+ // need to discriminate if the update is coming from a relation modal or in the edit view
688
+ const relationContext = useRelationModal('UpdateAction', ()=>true, false);
689
+ const fieldToConnect = useRelationModal('UpdateAction', (state)=>state.state.fieldToConnect, false);
690
+ const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
691
+ const documentHistory = useRelationModal('UpdateAction', (state)=>state.state.documentHistory, false);
692
+ const rootDocumentMeta = useRelationModal('UpdateAction', (state)=>state.rootDocumentMeta);
693
+ const fromRelationModal = relationContext != undefined;
581
694
  const { currentDocumentMeta } = useDocumentContext('UpdateAction');
695
+ const [updateDocumentMutation] = useUpdateDocumentMutation();
696
+ const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
697
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
698
+ const parentDocumentData = useDocument({
699
+ documentId: parentDocumentMetaToUpdate?.documentId,
700
+ model: parentDocumentMetaToUpdate?.model,
701
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
702
+ params: parentDocumentMetaToUpdate?.params
703
+ }, {
704
+ skip: !parentDocumentMetaToUpdate
705
+ });
582
706
  const handleUpdate = React.useCallback(async ()=>{
583
707
  setSubmitting(true);
584
708
  try {
@@ -632,13 +756,64 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
632
756
  params: currentDocumentMeta.params
633
757
  }, transformData(document));
634
758
  if ('data' in res && collectionType !== SINGLE_TYPES) {
635
- navigate({
636
- pathname: `../${res.data.documentId}`,
637
- search: rawQuery
638
- }, {
639
- replace: true,
640
- relative: 'path'
641
- });
759
+ if (fromRelationModal) {
760
+ const createdRelation = {
761
+ documentId: res.data.documentId,
762
+ collectionType,
763
+ model,
764
+ params: currentDocumentMeta.params
765
+ };
766
+ /*
767
+ * Update, if needed, the parent relation with the newly published document.
768
+ * Check if in history we have the parent relation otherwise use the
769
+ * rootDocument
770
+ */ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)) {
771
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
772
+ const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
773
+ try {
774
+ const updateRes = await updateDocumentMutation({
775
+ collectionType: parentDocumentMetaToUpdate.collectionType,
776
+ model: parentDocumentMetaToUpdate.model,
777
+ documentId: parentDocumentMetaToUpdate.collectionType !== SINGLE_TYPES ? parentDocumentMetaToUpdate.documentId : undefined,
778
+ params: parentDocumentMetaToUpdate.params,
779
+ data: {
780
+ ...dataToUpdate
781
+ }
782
+ });
783
+ if ('error' in updateRes) {
784
+ toggleNotification({
785
+ type: 'danger',
786
+ message: formatAPIError(updateRes.error)
787
+ });
788
+ return;
789
+ }
790
+ } catch (err) {
791
+ toggleNotification({
792
+ type: 'danger',
793
+ message: formatMessage({
794
+ id: 'notification.error',
795
+ defaultMessage: 'An error occurred'
796
+ })
797
+ });
798
+ throw err;
799
+ }
800
+ }
801
+ dispatch({
802
+ type: 'GO_TO_CREATED_RELATION',
803
+ payload: {
804
+ document: createdRelation,
805
+ shouldBypassConfirmation: true
806
+ }
807
+ });
808
+ } else {
809
+ navigate({
810
+ pathname: `../${res.data.documentId}`,
811
+ search: rawQuery
812
+ }, {
813
+ replace: true,
814
+ relative: 'path'
815
+ });
816
+ }
642
817
  } else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
643
818
  setErrors(formatValidationErrors(res.error));
644
819
  }
@@ -650,26 +825,36 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
650
825
  }
651
826
  }
652
827
  }, [
828
+ setSubmitting,
829
+ modified,
830
+ validate,
831
+ isCloning,
832
+ documentId,
833
+ collectionType,
834
+ toggleNotification,
835
+ formatMessage,
653
836
  clone,
837
+ model,
654
838
  cloneMatch?.params.origin,
655
- collectionType,
656
- create,
657
839
  currentDocumentMeta.params,
658
840
  document,
659
- documentId,
660
- formatMessage,
661
- formatValidationErrors,
662
- isCloning,
663
- model,
664
- modified,
665
841
  navigate,
666
842
  rawQuery,
667
- resetForm,
668
843
  setErrors,
669
- setSubmitting,
670
- toggleNotification,
844
+ formatValidationErrors,
671
845
  update,
672
- validate,
846
+ resetForm,
847
+ create,
848
+ fromRelationModal,
849
+ fieldToConnect,
850
+ documentHistory,
851
+ parentDocumentMetaToUpdate,
852
+ dispatch,
853
+ getInitialFormValues,
854
+ parentDocumentData,
855
+ fieldToConnectUID,
856
+ updateDocumentMutation,
857
+ formatAPIError,
673
858
  onPreview
674
859
  ]);
675
860
  // Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux