@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
@@ -6,9 +6,11 @@ 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
- var styledComponents = require('styled-components');
12
14
  var attributes = require('../../../constants/attributes.js');
13
15
  var collections = require('../../../constants/collections.js');
14
16
  var DocumentRBAC = require('../../../features/DocumentRBAC.js');
@@ -20,6 +22,7 @@ var router = require('../../../router.js');
20
22
  var documents = require('../../../services/documents.js');
21
23
  var api = require('../../../utils/api.js');
22
24
  var translations = require('../../../utils/translations.js');
25
+ var RelationModal = require('./FormInputs/Relations/RelationModal.js');
23
26
 
24
27
  function _interopNamespaceDefault(e) {
25
28
  var n = Object.create(null);
@@ -40,6 +43,38 @@ function _interopNamespaceDefault(e) {
40
43
 
41
44
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
42
45
 
46
+ const connectRelationToParent = (parentDataToUpdate, fieldToConnect, data, fieldToConnectUID)=>{
47
+ /*
48
+ * Check if the fieldToConnect is already present in the parentDataToUpdate.
49
+ * This happens in particular when in the parentDocument you have created
50
+ * a new component without saving.
51
+ */ const isFieldPresent = !!get(parentDataToUpdate, fieldToConnect);
52
+ const fieldToConnectPath = isFieldPresent ? fieldToConnect : fieldToConnect.split('.').slice(0, -1).join('.');
53
+ const fieldToConnectValue = isFieldPresent ? {
54
+ connect: [
55
+ {
56
+ id: data.documentId,
57
+ documentId: data.documentId,
58
+ locale: data.locale
59
+ }
60
+ ]
61
+ } : {
62
+ [fieldToConnect.split('.').pop()]: {
63
+ connect: [
64
+ {
65
+ id: data.documentId,
66
+ documentId: data.documentId,
67
+ locale: data.locale
68
+ }
69
+ ],
70
+ disconnect: []
71
+ },
72
+ // In case the object was not present you need to pass the componentUID of the parent document
73
+ __component: fieldToConnectUID
74
+ };
75
+ const objectToConnect = set({}, fieldToConnectPath, fieldToConnectValue);
76
+ return merge(parentDataToUpdate, objectToConnect);
77
+ };
43
78
  const DocumentActions = ({ actions })=>{
44
79
  const { formatMessage } = reactIntl.useIntl();
45
80
  const [primaryAction, secondaryAction, ...restActions] = actions.filter((action)=>{
@@ -138,11 +173,6 @@ const DocumentActionButton = (action)=>{
138
173
  ]
139
174
  });
140
175
  };
141
- const MenuItem = styledComponents.styled(designSystem.Menu.Item)`
142
- &:hover {
143
- background: ${({ theme, isVariantDanger, isDisabled })=>isVariantDanger && !isDisabled ? theme.colors.danger100 : 'neutral'};
144
- }
145
- `;
146
176
  const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })=>{
147
177
  const [isOpen, setIsOpen] = React__namespace.useState(false);
148
178
  const [dialogId, setDialogId] = React__namespace.useState(null);
@@ -204,27 +234,19 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
204
234
  popoverPlacement: "bottom-end",
205
235
  children: [
206
236
  actions.map((action)=>{
207
- return /*#__PURE__*/ jsxRuntime.jsx(MenuItem, {
237
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
208
238
  disabled: action.disabled,
209
239
  /* @ts-expect-error – TODO: this is an error in the DS where it is most likely a synthetic event, not regular. */ onSelect: handleClick(action),
210
240
  display: "block",
211
- isVariantDanger: action.variant === 'danger',
212
- isDisabled: action.disabled,
241
+ variant: action.variant === 'danger' ? action.variant : 'default',
242
+ startIcon: action.icon,
213
243
  children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
214
244
  justifyContent: "space-between",
215
245
  gap: 4,
216
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
217
- color: !action.disabled ? convertActionVariantToColor(action.variant) : 'inherit',
246
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
218
247
  gap: 2,
219
248
  tag: "span",
220
- children: [
221
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
222
- tag: "span",
223
- color: !action.disabled ? convertActionVariantToIconColor(action.variant) : 'inherit',
224
- children: action.icon
225
- }),
226
- action.label
227
- ]
249
+ children: action.label
228
250
  })
229
251
  })
230
252
  }, action.id);
@@ -252,30 +274,6 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
252
274
  ]
253
275
  });
254
276
  };
255
- const convertActionVariantToColor = (variant = 'secondary')=>{
256
- switch(variant){
257
- case 'danger':
258
- return 'danger600';
259
- case 'secondary':
260
- return undefined;
261
- case 'success':
262
- return 'success600';
263
- default:
264
- return 'primary600';
265
- }
266
- };
267
- const convertActionVariantToIconColor = (variant = 'secondary')=>{
268
- switch(variant){
269
- case 'danger':
270
- return 'danger600';
271
- case 'secondary':
272
- return 'neutral500';
273
- case 'success':
274
- return 'success600';
275
- default:
276
- return 'primary600';
277
- }
278
- };
279
277
  const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, content, isOpen, variant = 'secondary', loading })=>{
280
278
  const { formatMessage } = reactIntl.useIntl();
281
279
  const handleClose = async ()=>{
@@ -381,7 +379,10 @@ const transformData = (data)=>{
381
379
  const isCloning = reactRouterDom.useMatch(router.CLONE_PATH) !== null;
382
380
  const { id } = reactRouterDom.useParams();
383
381
  const { formatMessage } = reactIntl.useIntl();
384
- const canPublish = DocumentRBAC.useDocumentRBAC('PublishAction', ({ canPublish })=>canPublish);
382
+ const { canPublish, canReadFields } = DocumentRBAC.useDocumentRBAC('PublishAction', ({ canPublish, canReadFields })=>({
383
+ canPublish,
384
+ canReadFields
385
+ }));
385
386
  const { publish, isLoading } = useDocumentActions.useDocumentActions();
386
387
  const onPreview = Preview.usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
387
388
  const [countDraftRelations, { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations }] = documents.useGetDraftRelationCountQuery();
@@ -395,7 +396,17 @@ const transformData = (data)=>{
395
396
  const setErrors = strapiAdmin.useForm('PublishAction', (state)=>state.setErrors);
396
397
  const formValues = strapiAdmin.useForm('PublishAction', ({ values })=>values);
397
398
  const resetForm = strapiAdmin.useForm('PublishAction', ({ resetForm })=>resetForm);
399
+ // need to discriminate if the publish is coming from a relation modal or in the edit view
400
+ const relationContext = RelationModal.useRelationModal('PublishAction', ()=>true, false);
401
+ const fromRelationModal = relationContext != undefined;
402
+ const dispatch = RelationModal.useRelationModal('PublishAction', (state)=>state.dispatch);
403
+ const fieldToConnect = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnect, false);
404
+ const fieldToConnectUID = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
405
+ const documentHistory = RelationModal.useRelationModal('PublishAction', (state)=>state.state.documentHistory, false);
406
+ const rootDocumentMeta = RelationModal.useRelationModal('PublishAction', (state)=>state.rootDocumentMeta);
398
407
  const { currentDocumentMeta } = useDocumentContext.useDocumentContext('PublishAction');
408
+ const [updateDocumentMutation] = documents.useUpdateDocumentMutation();
409
+ const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
399
410
  const idToPublish = currentDocumentMeta.documentId || id;
400
411
  React__namespace.useEffect(()=>{
401
412
  if (isErrorDraftRelations) {
@@ -479,6 +490,16 @@ const transformData = (data)=>{
479
490
  model,
480
491
  currentDocumentMeta.params
481
492
  ]);
493
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
494
+ const parentDocumentData = useDocument.useDocument({
495
+ documentId: parentDocumentMetaToUpdate?.documentId,
496
+ model: parentDocumentMetaToUpdate?.model,
497
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
498
+ params: parentDocumentMetaToUpdate?.params
499
+ }, {
500
+ skip: !parentDocumentMetaToUpdate
501
+ });
502
+ const { getInitialFormValues } = useDocument.useDoc();
482
503
  const isDocumentPublished = (document?.[attributes.PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc)=>doc[attributes.PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== 'modified';
483
504
  if (!schema?.options?.draftAndPublish) {
484
505
  return null;
@@ -490,13 +511,27 @@ const transformData = (data)=>{
490
511
  status: 'published'
491
512
  });
492
513
  if (errors) {
493
- toggleNotification({
494
- type: 'danger',
495
- message: formatMessage({
496
- id: 'content-manager.validation.error',
497
- defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
498
- })
514
+ const hasUnreadableRequiredField = Object.keys(schema.attributes).some((fieldName)=>{
515
+ const attribute = schema.attributes[fieldName];
516
+ return attribute?.required && !(canReadFields ?? []).includes(fieldName);
499
517
  });
518
+ if (hasUnreadableRequiredField) {
519
+ toggleNotification({
520
+ type: 'danger',
521
+ message: formatMessage({
522
+ id: 'content-manager.validation.error.unreadable-required-field',
523
+ defaultMessage: 'Your current permissions prevent access to certain required fields. Please request access from an administrator to proceed.'
524
+ })
525
+ });
526
+ } else {
527
+ toggleNotification({
528
+ type: 'danger',
529
+ message: formatMessage({
530
+ id: 'content-manager.validation.error',
531
+ defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
532
+ })
533
+ });
534
+ }
500
535
  return;
501
536
  }
502
537
  const res = await publish({
@@ -512,11 +547,59 @@ const transformData = (data)=>{
512
547
  if ('data' in res && collectionType !== collections.SINGLE_TYPES) {
513
548
  /**
514
549
  * TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.
515
- */ if (idToPublish === 'create') {
550
+ */ if (idToPublish === 'create' && !fromRelationModal) {
516
551
  navigate({
517
552
  pathname: `../${collectionType}/${model}/${res.data.documentId}`,
518
553
  search: rawQuery
519
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 === collections.SINGLE_TYPES)) {
567
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === collections.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 !== collections.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
+ });
520
603
  }
521
604
  } else if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
522
605
  setErrors(formatValidationErrors(res.error));
@@ -592,14 +675,34 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
592
675
  const { create, update, clone, isLoading } = useDocumentActions.useDocumentActions();
593
676
  const [{ rawQuery }] = strapiAdmin.useQueryParams();
594
677
  const onPreview = Preview.usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
678
+ const { getInitialFormValues } = useDocument.useDoc();
595
679
  const isSubmitting = strapiAdmin.useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
596
680
  const modified = strapiAdmin.useForm('UpdateAction', ({ modified })=>modified);
597
681
  const setSubmitting = strapiAdmin.useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
598
682
  const document = strapiAdmin.useForm('UpdateAction', ({ values })=>values);
599
683
  const validate = strapiAdmin.useForm('UpdateAction', (state)=>state.validate);
600
684
  const setErrors = strapiAdmin.useForm('UpdateAction', (state)=>state.setErrors);
601
- const resetForm = strapiAdmin.useForm('PublishAction', ({ resetForm })=>resetForm);
685
+ const resetForm = strapiAdmin.useForm('UpdateAction', ({ resetForm })=>resetForm);
686
+ const dispatch = RelationModal.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 = RelationModal.useRelationModal('UpdateAction', ()=>true, false);
689
+ const fieldToConnect = RelationModal.useRelationModal('UpdateAction', (state)=>state.state.fieldToConnect, false);
690
+ const fieldToConnectUID = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
691
+ const documentHistory = RelationModal.useRelationModal('UpdateAction', (state)=>state.state.documentHistory, false);
692
+ const rootDocumentMeta = RelationModal.useRelationModal('UpdateAction', (state)=>state.rootDocumentMeta);
693
+ const fromRelationModal = relationContext != undefined;
602
694
  const { currentDocumentMeta } = useDocumentContext.useDocumentContext('UpdateAction');
695
+ const [updateDocumentMutation] = documents.useUpdateDocumentMutation();
696
+ const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
697
+ const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
698
+ const parentDocumentData = useDocument.useDocument({
699
+ documentId: parentDocumentMetaToUpdate?.documentId,
700
+ model: parentDocumentMetaToUpdate?.model,
701
+ collectionType: parentDocumentMetaToUpdate?.collectionType,
702
+ params: parentDocumentMetaToUpdate?.params
703
+ }, {
704
+ skip: !parentDocumentMetaToUpdate
705
+ });
603
706
  const handleUpdate = React__namespace.useCallback(async ()=>{
604
707
  setSubmitting(true);
605
708
  try {
@@ -653,13 +756,64 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
653
756
  params: currentDocumentMeta.params
654
757
  }, transformData(document));
655
758
  if ('data' in res && collectionType !== collections.SINGLE_TYPES) {
656
- navigate({
657
- pathname: `../${res.data.documentId}`,
658
- search: rawQuery
659
- }, {
660
- replace: true,
661
- relative: 'path'
662
- });
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 === collections.SINGLE_TYPES)) {
771
+ const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === collections.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 !== collections.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
+ }
663
817
  } else if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
664
818
  setErrors(formatValidationErrors(res.error));
665
819
  }
@@ -671,26 +825,36 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
671
825
  }
672
826
  }
673
827
  }, [
828
+ setSubmitting,
829
+ modified,
830
+ validate,
831
+ isCloning,
832
+ documentId,
833
+ collectionType,
834
+ toggleNotification,
835
+ formatMessage,
674
836
  clone,
837
+ model,
675
838
  cloneMatch?.params.origin,
676
- collectionType,
677
- create,
678
839
  currentDocumentMeta.params,
679
840
  document,
680
- documentId,
681
- formatMessage,
682
- formatValidationErrors,
683
- isCloning,
684
- model,
685
- modified,
686
841
  navigate,
687
842
  rawQuery,
688
- resetForm,
689
843
  setErrors,
690
- setSubmitting,
691
- toggleNotification,
844
+ formatValidationErrors,
692
845
  update,
693
- 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,
694
858
  onPreview
695
859
  ]);
696
860
  // Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux