@strapi/content-manager 0.0.0-next.e21fe90bf2ab9906267ea6e6ca620bdcc729906c → 0.0.0-next.e3eb76a86aff89979cc9098aec129d2ffa600c56

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 (248) hide show
  1. package/dist/admin/components/ConfigurationForm/Fields.js +300 -204
  2. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  3. package/dist/admin/components/ConfigurationForm/Fields.mjs +304 -209
  4. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  5. package/dist/admin/components/LeftMenu.js +34 -30
  6. package/dist/admin/components/LeftMenu.js.map +1 -1
  7. package/dist/admin/components/LeftMenu.mjs +36 -32
  8. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  9. package/dist/admin/history/components/VersionHeader.js +6 -0
  10. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  11. package/dist/admin/history/components/VersionHeader.mjs +7 -1
  12. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  13. package/dist/admin/hooks/useDocumentActions.js +12 -4
  14. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  15. package/dist/admin/hooks/useDocumentActions.mjs +12 -4
  16. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  17. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  18. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -1
  19. package/dist/admin/index.js +1 -3
  20. package/dist/admin/index.js.map +1 -1
  21. package/dist/admin/pages/EditView/EditViewPage.js +81 -74
  22. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  23. package/dist/admin/pages/EditView/EditViewPage.mjs +82 -75
  24. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  25. package/dist/admin/pages/EditView/components/DocumentActions.js +235 -71
  26. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  27. package/dist/admin/pages/EditView/components/DocumentActions.mjs +238 -74
  28. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  30. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  32. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +61 -26
  34. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +63 -28
  36. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
  38. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  44. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -0
  46. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +2 -0
  48. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +2 -2
  50. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +3 -3
  52. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +128 -55
  54. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +128 -55
  56. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +120 -32
  58. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +124 -36
  60. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/UID.js +4 -2
  62. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +4 -2
  64. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  66. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  68. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  70. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  72. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  74. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  76. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormLayout.js +20 -24
  78. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormLayout.mjs +20 -24
  80. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  81. package/dist/admin/pages/ListView/ListViewPage.js +77 -0
  82. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  83. package/dist/admin/pages/ListView/ListViewPage.mjs +78 -1
  84. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  85. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
  86. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  87. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
  88. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  89. package/dist/admin/pages/ListView/components/Filters.js +1 -0
  90. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  91. package/dist/admin/pages/ListView/components/Filters.mjs +1 -0
  92. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  93. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  94. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  95. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  96. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  97. package/dist/admin/preview/components/PreviewHeader.js +1 -1
  98. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  99. package/dist/admin/preview/components/PreviewHeader.mjs +1 -1
  100. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  101. package/dist/admin/services/documents.js +2 -2
  102. package/dist/admin/services/documents.js.map +1 -1
  103. package/dist/admin/services/documents.mjs +2 -2
  104. package/dist/admin/services/documents.mjs.map +1 -1
  105. package/dist/admin/services/homepage.js +9 -5
  106. package/dist/admin/services/homepage.js.map +1 -1
  107. package/dist/admin/services/homepage.mjs +9 -5
  108. package/dist/admin/services/homepage.mjs.map +1 -1
  109. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  110. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  111. package/dist/admin/src/hooks/useDocumentContext.d.ts +1 -1
  112. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  113. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +26 -5
  114. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  115. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -8
  116. package/dist/admin/src/services/documents.d.ts +7 -1
  117. package/dist/admin/translations/en.json.js +3 -1
  118. package/dist/admin/translations/en.json.js.map +1 -1
  119. package/dist/admin/translations/en.json.mjs +3 -1
  120. package/dist/admin/translations/en.json.mjs.map +1 -1
  121. package/dist/admin/translations/ru.json.js +235 -226
  122. package/dist/admin/translations/ru.json.js.map +1 -1
  123. package/dist/admin/translations/ru.json.mjs +230 -226
  124. package/dist/admin/translations/ru.json.mjs.map +1 -1
  125. package/dist/admin/utils/validation.js +1 -1
  126. package/dist/admin/utils/validation.js.map +1 -1
  127. package/dist/admin/utils/validation.mjs +1 -1
  128. package/dist/admin/utils/validation.mjs.map +1 -1
  129. package/dist/server/controllers/content-types.js +11 -1
  130. package/dist/server/controllers/content-types.js.map +1 -1
  131. package/dist/server/controllers/content-types.mjs +11 -1
  132. package/dist/server/controllers/content-types.mjs.map +1 -1
  133. package/dist/server/controllers/index.js +3 -1
  134. package/dist/server/controllers/index.js.map +1 -1
  135. package/dist/server/controllers/index.mjs +3 -1
  136. package/dist/server/controllers/index.mjs.map +1 -1
  137. package/dist/server/controllers/validation/index.js +14 -2
  138. package/dist/server/controllers/validation/index.js.map +1 -1
  139. package/dist/server/controllers/validation/index.mjs +14 -2
  140. package/dist/server/controllers/validation/index.mjs.map +1 -1
  141. package/dist/server/history/services/lifecycles.js +3 -0
  142. package/dist/server/history/services/lifecycles.js.map +1 -1
  143. package/dist/server/history/services/lifecycles.mjs +3 -0
  144. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  145. package/dist/server/homepage/controllers/homepage.js +57 -0
  146. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  147. package/dist/server/homepage/controllers/homepage.mjs +36 -0
  148. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  149. package/dist/server/homepage/controllers/index.js +10 -0
  150. package/dist/server/homepage/controllers/index.js.map +1 -0
  151. package/dist/server/homepage/controllers/index.mjs +8 -0
  152. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  153. package/dist/server/homepage/index.js +14 -0
  154. package/dist/server/homepage/index.js.map +1 -0
  155. package/dist/server/homepage/index.mjs +12 -0
  156. package/dist/server/homepage/index.mjs.map +1 -0
  157. package/dist/server/homepage/routes/homepage.js +25 -0
  158. package/dist/server/homepage/routes/homepage.js.map +1 -0
  159. package/dist/server/homepage/routes/homepage.mjs +23 -0
  160. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  161. package/dist/server/homepage/routes/index.js +13 -0
  162. package/dist/server/homepage/routes/index.js.map +1 -0
  163. package/dist/server/homepage/routes/index.mjs +11 -0
  164. package/dist/server/homepage/routes/index.mjs.map +1 -0
  165. package/dist/server/homepage/services/homepage.js +157 -0
  166. package/dist/server/homepage/services/homepage.js.map +1 -0
  167. package/dist/server/homepage/services/homepage.mjs +155 -0
  168. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  169. package/dist/server/homepage/services/index.js +10 -0
  170. package/dist/server/homepage/services/index.js.map +1 -0
  171. package/dist/server/homepage/services/index.mjs +8 -0
  172. package/dist/server/homepage/services/index.mjs.map +1 -0
  173. package/dist/server/preview/services/preview.js +0 -1
  174. package/dist/server/preview/services/preview.js.map +1 -1
  175. package/dist/server/preview/services/preview.mjs +0 -1
  176. package/dist/server/preview/services/preview.mjs.map +1 -1
  177. package/dist/server/routes/index.js +3 -1
  178. package/dist/server/routes/index.js.map +1 -1
  179. package/dist/server/routes/index.mjs +3 -1
  180. package/dist/server/routes/index.mjs.map +1 -1
  181. package/dist/server/services/data-mapper.js +4 -1
  182. package/dist/server/services/data-mapper.js.map +1 -1
  183. package/dist/server/services/data-mapper.mjs +4 -1
  184. package/dist/server/services/data-mapper.mjs.map +1 -1
  185. package/dist/server/services/document-manager.js +8 -1
  186. package/dist/server/services/document-manager.js.map +1 -1
  187. package/dist/server/services/document-manager.mjs +8 -1
  188. package/dist/server/services/document-manager.mjs.map +1 -1
  189. package/dist/server/services/document-metadata.js +3 -1
  190. package/dist/server/services/document-metadata.js.map +1 -1
  191. package/dist/server/services/document-metadata.mjs +3 -1
  192. package/dist/server/services/document-metadata.mjs.map +1 -1
  193. package/dist/server/services/index.js +3 -1
  194. package/dist/server/services/index.js.map +1 -1
  195. package/dist/server/services/index.mjs +3 -1
  196. package/dist/server/services/index.mjs.map +1 -1
  197. package/dist/server/services/utils/configuration/attributes.js +1 -1
  198. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  199. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  200. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  201. package/dist/server/services/utils/configuration/layouts.js +1 -1
  202. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  203. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  204. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  205. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  206. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  207. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  208. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  209. package/dist/server/services/utils/populate.js +11 -0
  210. package/dist/server/services/utils/populate.js.map +1 -1
  211. package/dist/server/services/utils/populate.mjs +11 -0
  212. package/dist/server/services/utils/populate.mjs.map +1 -1
  213. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  214. package/dist/server/src/controllers/index.d.ts.map +1 -1
  215. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  216. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  217. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  218. package/dist/server/src/homepage/controllers/homepage.d.ts +7 -0
  219. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  220. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  221. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  222. package/dist/server/src/homepage/index.d.ts +16 -0
  223. package/dist/server/src/homepage/index.d.ts.map +1 -0
  224. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  225. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  226. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  227. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  228. package/dist/server/src/{services → homepage/services}/homepage.d.ts +1 -1
  229. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  230. package/dist/server/src/homepage/services/index.d.ts +9 -0
  231. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  232. package/dist/server/src/index.d.ts +8 -0
  233. package/dist/server/src/index.d.ts.map +1 -1
  234. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  235. package/dist/server/src/routes/index.d.ts +1 -0
  236. package/dist/server/src/routes/index.d.ts.map +1 -1
  237. package/dist/server/src/services/data-mapper.d.ts +1 -0
  238. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  239. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  240. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  241. package/dist/server/src/services/index.d.ts +7 -0
  242. package/dist/server/src/services/index.d.ts.map +1 -1
  243. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  244. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  245. package/dist/shared/contracts/collection-types.d.ts +0 -1
  246. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  247. package/package.json +11 -8
  248. package/dist/server/src/services/homepage.d.ts.map +0 -1
@@ -1,24 +1,59 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import { useNotification, useAPIErrorHandler, useQueryParams, useForm } from '@strapi/admin/strapi-admin';
4
- import { Menu, Flex, Button, VisuallyHidden, Dialog, Modal, Typography, Radio } from '@strapi/design-system';
4
+ import { Flex, Button, Menu, 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
- import { styled } from 'styled-components';
10
12
  import { PUBLISHED_AT_ATTRIBUTE_NAME } from '../../../constants/attributes.mjs';
11
13
  import { SINGLE_TYPES } from '../../../constants/collections.mjs';
12
14
  import { useDocumentRBAC } from '../../../features/DocumentRBAC.mjs';
13
- import { useDoc } from '../../../hooks/useDocument.mjs';
15
+ import { useDocument, useDoc } from '../../../hooks/useDocument.mjs';
14
16
  import { useDocumentActions } from '../../../hooks/useDocumentActions.mjs';
15
17
  import { useDocumentContext } from '../../../hooks/useDocumentContext.mjs';
16
18
  import { usePreviewContext } from '../../../preview/pages/Preview.mjs';
17
19
  import { LIST_PATH, CLONE_PATH } from '../../../router.mjs';
18
- import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery } from '../../../services/documents.mjs';
20
+ import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery, useUpdateDocumentMutation } from '../../../services/documents.mjs';
19
21
  import { isBaseQueryError, buildValidParams } from '../../../utils/api.mjs';
20
22
  import { getTranslation } from '../../../utils/translations.mjs';
23
+ import { useRelationModal } from './FormInputs/Relations/RelationModal.mjs';
21
24
 
25
+ const connectRelationToParent = (parentDataToUpdate, fieldToConnect, data, fieldToConnectUID)=>{
26
+ /*
27
+ * Check if the fieldToConnect is already present in the parentDataToUpdate.
28
+ * This happens in particular when in the parentDocument you have created
29
+ * a new component without saving.
30
+ */ const isFieldPresent = !!get(parentDataToUpdate, fieldToConnect);
31
+ const fieldToConnectPath = isFieldPresent ? fieldToConnect : fieldToConnect.split('.').slice(0, -1).join('.');
32
+ const fieldToConnectValue = isFieldPresent ? {
33
+ connect: [
34
+ {
35
+ id: data.documentId,
36
+ documentId: data.documentId,
37
+ locale: data.locale
38
+ }
39
+ ]
40
+ } : {
41
+ [fieldToConnect.split('.').pop()]: {
42
+ connect: [
43
+ {
44
+ id: data.documentId,
45
+ documentId: data.documentId,
46
+ locale: data.locale
47
+ }
48
+ ],
49
+ disconnect: []
50
+ },
51
+ // In case the object was not present you need to pass the componentUID of the parent document
52
+ __component: fieldToConnectUID
53
+ };
54
+ const objectToConnect = set({}, fieldToConnectPath, fieldToConnectValue);
55
+ return merge(parentDataToUpdate, objectToConnect);
56
+ };
22
57
  const DocumentActions = ({ actions })=>{
23
58
  const { formatMessage } = useIntl();
24
59
  const [primaryAction, secondaryAction, ...restActions] = actions.filter((action)=>{
@@ -117,11 +152,6 @@ const DocumentActionButton = (action)=>{
117
152
  ]
118
153
  });
119
154
  };
120
- const MenuItem = styled(Menu.Item)`
121
- &:hover {
122
- background: ${({ theme, isVariantDanger, isDisabled })=>isVariantDanger && !isDisabled ? theme.colors.danger100 : 'neutral'};
123
- }
124
- `;
125
155
  const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })=>{
126
156
  const [isOpen, setIsOpen] = React.useState(false);
127
157
  const [dialogId, setDialogId] = React.useState(null);
@@ -183,27 +213,19 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
183
213
  popoverPlacement: "bottom-end",
184
214
  children: [
185
215
  actions.map((action)=>{
186
- return /*#__PURE__*/ jsx(MenuItem, {
216
+ return /*#__PURE__*/ jsx(Menu.Item, {
187
217
  disabled: action.disabled,
188
218
  /* @ts-expect-error – TODO: this is an error in the DS where it is most likely a synthetic event, not regular. */ onSelect: handleClick(action),
189
219
  display: "block",
190
- isVariantDanger: action.variant === 'danger',
191
- isDisabled: action.disabled,
220
+ variant: action.variant === 'danger' ? action.variant : 'default',
221
+ startIcon: action.icon,
192
222
  children: /*#__PURE__*/ jsx(Flex, {
193
223
  justifyContent: "space-between",
194
224
  gap: 4,
195
- children: /*#__PURE__*/ jsxs(Flex, {
196
- color: !action.disabled ? convertActionVariantToColor(action.variant) : 'inherit',
225
+ children: /*#__PURE__*/ jsx(Flex, {
197
226
  gap: 2,
198
227
  tag: "span",
199
- children: [
200
- /*#__PURE__*/ jsx(Flex, {
201
- tag: "span",
202
- color: !action.disabled ? convertActionVariantToIconColor(action.variant) : 'inherit',
203
- children: action.icon
204
- }),
205
- action.label
206
- ]
228
+ children: action.label
207
229
  })
208
230
  })
209
231
  }, action.id);
@@ -231,30 +253,6 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
231
253
  ]
232
254
  });
233
255
  };
234
- const convertActionVariantToColor = (variant = 'secondary')=>{
235
- switch(variant){
236
- case 'danger':
237
- return 'danger600';
238
- case 'secondary':
239
- return undefined;
240
- case 'success':
241
- return 'success600';
242
- default:
243
- return 'primary600';
244
- }
245
- };
246
- const convertActionVariantToIconColor = (variant = 'secondary')=>{
247
- switch(variant){
248
- case 'danger':
249
- return 'danger600';
250
- case 'secondary':
251
- return 'neutral500';
252
- case 'success':
253
- return 'success600';
254
- default:
255
- return 'primary600';
256
- }
257
- };
258
256
  const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, content, isOpen, variant = 'secondary', loading })=>{
259
257
  const { formatMessage } = useIntl();
260
258
  const handleClose = async ()=>{
@@ -360,7 +358,10 @@ const transformData = (data)=>{
360
358
  const isCloning = useMatch(CLONE_PATH) !== null;
361
359
  const { id } = useParams();
362
360
  const { formatMessage } = useIntl();
363
- const canPublish = useDocumentRBAC('PublishAction', ({ canPublish })=>canPublish);
361
+ const { canPublish, canReadFields } = useDocumentRBAC('PublishAction', ({ canPublish, canReadFields })=>({
362
+ canPublish,
363
+ canReadFields
364
+ }));
364
365
  const { publish, isLoading } = useDocumentActions();
365
366
  const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
366
367
  const [countDraftRelations, { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations }] = useLazyGetDraftRelationCountQuery();
@@ -374,7 +375,17 @@ const transformData = (data)=>{
374
375
  const setErrors = useForm('PublishAction', (state)=>state.setErrors);
375
376
  const formValues = useForm('PublishAction', ({ values })=>values);
376
377
  const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
378
+ // need to discriminate if the publish is coming from a relation modal or in the edit view
379
+ const relationContext = useRelationModal('PublishAction', ()=>true, false);
380
+ const fromRelationModal = relationContext != undefined;
381
+ const dispatch = useRelationModal('PublishAction', (state)=>state.dispatch);
382
+ const fieldToConnect = useRelationModal('PublishAction', (state)=>state.state.fieldToConnect, false);
383
+ const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
384
+ const documentHistory = useRelationModal('PublishAction', (state)=>state.state.documentHistory, false);
385
+ const rootDocumentMeta = useRelationModal('PublishAction', (state)=>state.rootDocumentMeta);
377
386
  const { currentDocumentMeta } = useDocumentContext('PublishAction');
387
+ const [updateDocumentMutation] = useUpdateDocumentMutation();
388
+ const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
378
389
  const idToPublish = currentDocumentMeta.documentId || id;
379
390
  React.useEffect(()=>{
380
391
  if (isErrorDraftRelations) {
@@ -458,6 +469,16 @@ const transformData = (data)=>{
458
469
  model,
459
470
  currentDocumentMeta.params
460
471
  ]);
472
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
473
+ const parentDocumentData = useDocument({
474
+ documentId: parentDocumentMetaToUpdate?.documentId,
475
+ model: parentDocumentMetaToUpdate?.model,
476
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
477
+ params: parentDocumentMetaToUpdate?.params
478
+ }, {
479
+ skip: !parentDocumentMetaToUpdate
480
+ });
481
+ const { getInitialFormValues } = useDoc();
461
482
  const isDocumentPublished = (document?.[PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc)=>doc[PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== 'modified';
462
483
  if (!schema?.options?.draftAndPublish) {
463
484
  return null;
@@ -469,13 +490,27 @@ const transformData = (data)=>{
469
490
  status: 'published'
470
491
  });
471
492
  if (errors) {
472
- toggleNotification({
473
- type: 'danger',
474
- message: formatMessage({
475
- id: 'content-manager.validation.error',
476
- defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
477
- })
493
+ const hasUnreadableRequiredField = Object.keys(schema.attributes).some((fieldName)=>{
494
+ const attribute = schema.attributes[fieldName];
495
+ return attribute?.required && !(canReadFields ?? []).includes(fieldName);
478
496
  });
497
+ if (hasUnreadableRequiredField) {
498
+ toggleNotification({
499
+ type: 'danger',
500
+ message: formatMessage({
501
+ id: 'content-manager.validation.error.unreadable-required-field',
502
+ defaultMessage: 'Your current permissions prevent access to certain required fields. Please request access from an administrator to proceed.'
503
+ })
504
+ });
505
+ } else {
506
+ toggleNotification({
507
+ type: 'danger',
508
+ message: formatMessage({
509
+ id: 'content-manager.validation.error',
510
+ defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
511
+ })
512
+ });
513
+ }
479
514
  return;
480
515
  }
481
516
  const res = await publish({
@@ -491,11 +526,59 @@ const transformData = (data)=>{
491
526
  if ('data' in res && collectionType !== SINGLE_TYPES) {
492
527
  /**
493
528
  * TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.
494
- */ if (idToPublish === 'create') {
529
+ */ if (idToPublish === 'create' && !fromRelationModal) {
495
530
  navigate({
496
531
  pathname: `../${collectionType}/${model}/${res.data.documentId}`,
497
532
  search: rawQuery
498
533
  });
534
+ } else if (fromRelationModal) {
535
+ const newRelation = {
536
+ documentId: res.data.documentId,
537
+ collectionType,
538
+ model,
539
+ params: currentDocumentMeta.params
540
+ };
541
+ /*
542
+ * Update, if needed, the parent relation with the newly published document.
543
+ * Check if in history we have the parent relation otherwise use the
544
+ * rootDocument
545
+ */ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)) {
546
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
547
+ const metaDocumentToUpdate = documentHistory.at(-2) ?? rootDocumentMeta;
548
+ const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
549
+ try {
550
+ const updateRes = await updateDocumentMutation({
551
+ collectionType: metaDocumentToUpdate.collectionType,
552
+ model: metaDocumentToUpdate.model,
553
+ documentId: metaDocumentToUpdate.collectionType !== SINGLE_TYPES ? metaDocumentToUpdate.documentId : undefined,
554
+ params: metaDocumentToUpdate.params,
555
+ data: dataToUpdate
556
+ });
557
+ if ('error' in updateRes) {
558
+ toggleNotification({
559
+ type: 'danger',
560
+ message: formatAPIError(updateRes.error)
561
+ });
562
+ return;
563
+ }
564
+ } catch (err) {
565
+ toggleNotification({
566
+ type: 'danger',
567
+ message: formatMessage({
568
+ id: 'notification.error',
569
+ defaultMessage: 'An error occurred'
570
+ })
571
+ });
572
+ throw err;
573
+ }
574
+ }
575
+ dispatch({
576
+ type: 'GO_TO_CREATED_RELATION',
577
+ payload: {
578
+ document: newRelation,
579
+ shouldBypassConfirmation: true
580
+ }
581
+ });
499
582
  }
500
583
  } else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
501
584
  setErrors(formatValidationErrors(res.error));
@@ -571,14 +654,34 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
571
654
  const { create, update, clone, isLoading } = useDocumentActions();
572
655
  const [{ rawQuery }] = useQueryParams();
573
656
  const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
657
+ const { getInitialFormValues } = useDoc();
574
658
  const isSubmitting = useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
575
659
  const modified = useForm('UpdateAction', ({ modified })=>modified);
576
660
  const setSubmitting = useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
577
661
  const document = useForm('UpdateAction', ({ values })=>values);
578
662
  const validate = useForm('UpdateAction', (state)=>state.validate);
579
663
  const setErrors = useForm('UpdateAction', (state)=>state.setErrors);
580
- const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
664
+ const resetForm = useForm('UpdateAction', ({ resetForm })=>resetForm);
665
+ const dispatch = useRelationModal('UpdateAction', (state)=>state.dispatch);
666
+ // need to discriminate if the update is coming from a relation modal or in the edit view
667
+ const relationContext = useRelationModal('UpdateAction', ()=>true, false);
668
+ const fieldToConnect = useRelationModal('UpdateAction', (state)=>state.state.fieldToConnect, false);
669
+ const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
670
+ const documentHistory = useRelationModal('UpdateAction', (state)=>state.state.documentHistory, false);
671
+ const rootDocumentMeta = useRelationModal('UpdateAction', (state)=>state.rootDocumentMeta);
672
+ const fromRelationModal = relationContext != undefined;
581
673
  const { currentDocumentMeta } = useDocumentContext('UpdateAction');
674
+ const [updateDocumentMutation] = useUpdateDocumentMutation();
675
+ const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
676
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
677
+ const parentDocumentData = useDocument({
678
+ documentId: parentDocumentMetaToUpdate?.documentId,
679
+ model: parentDocumentMetaToUpdate?.model,
680
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
681
+ params: parentDocumentMetaToUpdate?.params
682
+ }, {
683
+ skip: !parentDocumentMetaToUpdate
684
+ });
582
685
  const handleUpdate = React.useCallback(async ()=>{
583
686
  setSubmitting(true);
584
687
  try {
@@ -632,13 +735,64 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
632
735
  params: currentDocumentMeta.params
633
736
  }, transformData(document));
634
737
  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
- });
738
+ if (fromRelationModal) {
739
+ const createdRelation = {
740
+ documentId: res.data.documentId,
741
+ collectionType,
742
+ model,
743
+ params: currentDocumentMeta.params
744
+ };
745
+ /*
746
+ * Update, if needed, the parent relation with the newly published document.
747
+ * Check if in history we have the parent relation otherwise use the
748
+ * rootDocument
749
+ */ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)) {
750
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
751
+ const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
752
+ try {
753
+ const updateRes = await updateDocumentMutation({
754
+ collectionType: parentDocumentMetaToUpdate.collectionType,
755
+ model: parentDocumentMetaToUpdate.model,
756
+ documentId: parentDocumentMetaToUpdate.collectionType !== SINGLE_TYPES ? parentDocumentMetaToUpdate.documentId : undefined,
757
+ params: parentDocumentMetaToUpdate.params,
758
+ data: {
759
+ ...dataToUpdate
760
+ }
761
+ });
762
+ if ('error' in updateRes) {
763
+ toggleNotification({
764
+ type: 'danger',
765
+ message: formatAPIError(updateRes.error)
766
+ });
767
+ return;
768
+ }
769
+ } catch (err) {
770
+ toggleNotification({
771
+ type: 'danger',
772
+ message: formatMessage({
773
+ id: 'notification.error',
774
+ defaultMessage: 'An error occurred'
775
+ })
776
+ });
777
+ throw err;
778
+ }
779
+ }
780
+ dispatch({
781
+ type: 'GO_TO_CREATED_RELATION',
782
+ payload: {
783
+ document: createdRelation,
784
+ shouldBypassConfirmation: true
785
+ }
786
+ });
787
+ } else {
788
+ navigate({
789
+ pathname: `../${res.data.documentId}`,
790
+ search: rawQuery
791
+ }, {
792
+ replace: true,
793
+ relative: 'path'
794
+ });
795
+ }
642
796
  } else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
643
797
  setErrors(formatValidationErrors(res.error));
644
798
  }
@@ -650,26 +804,36 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
650
804
  }
651
805
  }
652
806
  }, [
807
+ setSubmitting,
808
+ modified,
809
+ validate,
810
+ isCloning,
811
+ documentId,
812
+ collectionType,
813
+ toggleNotification,
814
+ formatMessage,
653
815
  clone,
816
+ model,
654
817
  cloneMatch?.params.origin,
655
- collectionType,
656
- create,
657
818
  currentDocumentMeta.params,
658
819
  document,
659
- documentId,
660
- formatMessage,
661
- formatValidationErrors,
662
- isCloning,
663
- model,
664
- modified,
665
820
  navigate,
666
821
  rawQuery,
667
- resetForm,
668
822
  setErrors,
669
- setSubmitting,
670
- toggleNotification,
823
+ formatValidationErrors,
671
824
  update,
672
- validate,
825
+ resetForm,
826
+ create,
827
+ fromRelationModal,
828
+ fieldToConnect,
829
+ documentHistory,
830
+ parentDocumentMetaToUpdate,
831
+ dispatch,
832
+ getInitialFormValues,
833
+ parentDocumentData,
834
+ fieldToConnectUID,
835
+ updateDocumentMutation,
836
+ formatAPIError,
673
837
  onPreview
674
838
  ]);
675
839
  // Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux