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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/dist/admin/components/LeftMenu.js +30 -34
  2. package/dist/admin/components/LeftMenu.js.map +1 -1
  3. package/dist/admin/components/LeftMenu.mjs +32 -36
  4. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  5. package/dist/admin/components/Widgets.js +161 -0
  6. package/dist/admin/components/Widgets.js.map +1 -0
  7. package/dist/admin/components/Widgets.mjs +158 -0
  8. package/dist/admin/components/Widgets.mjs.map +1 -0
  9. package/dist/admin/content-manager.js.map +1 -1
  10. package/dist/admin/content-manager.mjs.map +1 -1
  11. package/dist/admin/history/pages/History.js +1 -9
  12. package/dist/admin/history/pages/History.js.map +1 -1
  13. package/dist/admin/history/pages/History.mjs +1 -9
  14. package/dist/admin/history/pages/History.mjs.map +1 -1
  15. package/dist/admin/hooks/useDocumentActions.js +13 -2
  16. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  17. package/dist/admin/hooks/useDocumentActions.mjs +13 -2
  18. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  19. package/dist/admin/hooks/useDocumentContext.js +57 -0
  20. package/dist/admin/hooks/useDocumentContext.js.map +1 -0
  21. package/dist/admin/hooks/useDocumentContext.mjs +36 -0
  22. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -0
  23. package/dist/admin/index.js +42 -5
  24. package/dist/admin/index.js.map +1 -1
  25. package/dist/admin/index.mjs +42 -3
  26. package/dist/admin/index.mjs.map +1 -1
  27. package/dist/admin/pages/EditView/EditViewPage.js +85 -93
  28. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  29. package/dist/admin/pages/EditView/EditViewPage.mjs +86 -94
  30. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/DocumentActions.js +232 -51
  32. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/DocumentActions.mjs +238 -57
  34. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +7 -12
  36. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +8 -13
  38. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
  44. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
  46. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +2 -2
  48. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +2 -2
  50. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +4 -2
  52. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +4 -2
  54. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +5 -16
  56. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +5 -16
  58. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -3
  60. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -3
  62. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +495 -345
  64. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +495 -347
  66. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +143 -86
  68. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +146 -89
  70. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/UID.js +7 -7
  72. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +7 -7
  74. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  76. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  78. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/InputRenderer.js +3 -10
  80. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/InputRenderer.mjs +3 -10
  82. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  83. package/dist/admin/pages/ListView/ListViewPage.js +0 -77
  84. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  85. package/dist/admin/pages/ListView/ListViewPage.mjs +1 -78
  86. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  87. package/dist/admin/preview/components/PreviewHeader.js +3 -6
  88. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  89. package/dist/admin/preview/components/PreviewHeader.mjs +3 -6
  90. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  91. package/dist/admin/preview/pages/Preview.js +94 -102
  92. package/dist/admin/preview/pages/Preview.js.map +1 -1
  93. package/dist/admin/preview/pages/Preview.mjs +94 -102
  94. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  95. package/dist/admin/services/homepage.js +30 -0
  96. package/dist/admin/services/homepage.js.map +1 -0
  97. package/dist/admin/services/homepage.mjs +28 -0
  98. package/dist/admin/services/homepage.mjs.map +1 -0
  99. package/dist/admin/src/components/Widgets.d.ts +3 -0
  100. package/dist/admin/src/content-manager.d.ts +0 -3
  101. package/dist/admin/src/features/DocumentRBAC.d.ts +1 -1
  102. package/dist/admin/src/history/pages/History.d.ts +1 -1
  103. package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
  104. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  105. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
  106. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  107. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +73 -7
  108. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -0
  109. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  110. package/dist/admin/src/preview/pages/Preview.d.ts +2 -1
  111. package/dist/admin/src/services/homepage.d.ts +5 -0
  112. package/dist/admin/translations/en.json.js +2 -1
  113. package/dist/admin/translations/en.json.js.map +1 -1
  114. package/dist/admin/translations/en.json.mjs +2 -1
  115. package/dist/admin/translations/en.json.mjs.map +1 -1
  116. package/dist/admin/translations/ru.json.js +235 -226
  117. package/dist/admin/translations/ru.json.js.map +1 -1
  118. package/dist/admin/translations/ru.json.mjs +230 -226
  119. package/dist/admin/translations/ru.json.mjs.map +1 -1
  120. package/dist/server/controllers/index.js +3 -1
  121. package/dist/server/controllers/index.js.map +1 -1
  122. package/dist/server/controllers/index.mjs +3 -1
  123. package/dist/server/controllers/index.mjs.map +1 -1
  124. package/dist/server/homepage/controllers/homepage.js +57 -0
  125. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  126. package/dist/server/homepage/controllers/homepage.mjs +36 -0
  127. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  128. package/dist/server/homepage/controllers/index.js +10 -0
  129. package/dist/server/homepage/controllers/index.js.map +1 -0
  130. package/dist/server/homepage/controllers/index.mjs +8 -0
  131. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  132. package/dist/server/homepage/index.js +14 -0
  133. package/dist/server/homepage/index.js.map +1 -0
  134. package/dist/server/homepage/index.mjs +12 -0
  135. package/dist/server/homepage/index.mjs.map +1 -0
  136. package/dist/server/homepage/routes/homepage.js +25 -0
  137. package/dist/server/homepage/routes/homepage.js.map +1 -0
  138. package/dist/server/homepage/routes/homepage.mjs +23 -0
  139. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  140. package/dist/server/homepage/routes/index.js +13 -0
  141. package/dist/server/homepage/routes/index.js.map +1 -0
  142. package/dist/server/homepage/routes/index.mjs +11 -0
  143. package/dist/server/homepage/routes/index.mjs.map +1 -0
  144. package/dist/server/homepage/services/homepage.js +157 -0
  145. package/dist/server/homepage/services/homepage.js.map +1 -0
  146. package/dist/server/homepage/services/homepage.mjs +155 -0
  147. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  148. package/dist/server/homepage/services/index.js +10 -0
  149. package/dist/server/homepage/services/index.js.map +1 -0
  150. package/dist/server/homepage/services/index.mjs +8 -0
  151. package/dist/server/homepage/services/index.mjs.map +1 -0
  152. package/dist/server/preview/services/preview.js +0 -1
  153. package/dist/server/preview/services/preview.js.map +1 -1
  154. package/dist/server/preview/services/preview.mjs +0 -1
  155. package/dist/server/preview/services/preview.mjs.map +1 -1
  156. package/dist/server/routes/index.js +3 -1
  157. package/dist/server/routes/index.js.map +1 -1
  158. package/dist/server/routes/index.mjs +3 -1
  159. package/dist/server/routes/index.mjs.map +1 -1
  160. package/dist/server/services/index.js +3 -1
  161. package/dist/server/services/index.js.map +1 -1
  162. package/dist/server/services/index.mjs +3 -1
  163. package/dist/server/services/index.mjs.map +1 -1
  164. package/dist/server/src/controllers/index.d.ts.map +1 -1
  165. package/dist/server/src/homepage/controllers/homepage.d.ts +7 -0
  166. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  167. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  168. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  169. package/dist/server/src/homepage/index.d.ts +16 -0
  170. package/dist/server/src/homepage/index.d.ts.map +1 -0
  171. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  172. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  173. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  174. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  175. package/dist/server/src/homepage/services/homepage.d.ts +11 -0
  176. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  177. package/dist/server/src/homepage/services/index.d.ts +9 -0
  178. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  179. package/dist/server/src/index.d.ts +7 -1
  180. package/dist/server/src/index.d.ts.map +1 -1
  181. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  182. package/dist/server/src/routes/index.d.ts +1 -0
  183. package/dist/server/src/routes/index.d.ts.map +1 -1
  184. package/dist/server/src/services/data-mapper.d.ts +0 -1
  185. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  186. package/dist/server/src/services/index.d.ts +6 -1
  187. package/dist/server/src/services/index.d.ts.map +1 -1
  188. package/dist/shared/contracts/homepage.d.ts +25 -0
  189. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  190. package/package.json +8 -8
  191. package/dist/admin/features/DocumentContext.js +0 -71
  192. package/dist/admin/features/DocumentContext.js.map +0 -1
  193. package/dist/admin/features/DocumentContext.mjs +0 -49
  194. package/dist/admin/features/DocumentContext.mjs.map +0 -1
  195. package/dist/admin/src/features/DocumentContext.d.ts +0 -53
@@ -1,8 +1,8 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { useQueryParams, useForm, useField, useNotification, useFocusInputField } from '@strapi/admin/strapi-admin';
3
+ import { useForm, useField, useNotification, useFocusInputField } from '@strapi/admin/strapi-admin';
4
4
  import { Flex, Box, Link, TextButton, Field, Combobox, ComboboxOption, Typography, VisuallyHidden, useComposedRefs, IconButton } from '@strapi/design-system';
5
- import { ArrowClockwise, Drag, Cross } from '@strapi/icons';
5
+ import { ArrowClockwise, Plus, Link as Link$1, Drag, Cross } from '@strapi/icons';
6
6
  import { generateNKeysBetween } from 'fractional-indexing';
7
7
  import pipe from 'lodash/fp/pipe';
8
8
  import { getEmptyImage } from 'react-dnd-html5-backend';
@@ -11,16 +11,16 @@ import { FixedSizeList } from 'react-window';
11
11
  import { styled } from 'styled-components';
12
12
  import { COLLECTION_TYPES } from '../../../../../constants/collections.mjs';
13
13
  import { ItemTypes } from '../../../../../constants/dragAndDrop.mjs';
14
- import { useDocumentContext } from '../../../../../features/DocumentContext.mjs';
15
14
  import { useDebounce } from '../../../../../hooks/useDebounce.mjs';
15
+ import { useDocument } from '../../../../../hooks/useDocument.mjs';
16
+ import { useDocumentContext } from '../../../../../hooks/useDocumentContext.mjs';
16
17
  import { useDragAndDrop, DROP_SENSITIVITY } from '../../../../../hooks/useDragAndDrop.mjs';
17
18
  import { useGetRelationsQuery, useLazySearchRelationsQuery } from '../../../../../services/relations.mjs';
18
- import { buildValidParams } from '../../../../../utils/api.mjs';
19
19
  import { getRelationLabel } from '../../../../../utils/relations.mjs';
20
20
  import { getTranslation } from '../../../../../utils/translations.mjs';
21
21
  import { DocumentStatus } from '../../DocumentStatus.mjs';
22
22
  import { useComponent } from '../ComponentContext.mjs';
23
- import { RelationModalForm, getCollectionType } from './RelationModal.mjs';
23
+ import { RelationModalRenderer, getCollectionType } from './RelationModal.mjs';
24
24
 
25
25
  /**
26
26
  * Remove a relation, whether it's been already saved or not.
@@ -75,17 +75,11 @@ const ONE_WAY_RELATIONS = [
75
75
  * At present we do not expose this to plugin developers, however, they are able to overwrite it themselves should
76
76
  * they wish to do so.
77
77
  */ const RelationsField = /*#__PURE__*/ React.forwardRef(({ disabled, label, ...props }, ref)=>{
78
- const currentDocumentMeta = useDocumentContext('RelationsField', (state)=>state.meta);
79
- const currentDocument = useDocumentContext('RelationsField', (state)=>state.document);
80
- const rootDocumentMeta = useDocumentContext('RelationsField', (state)=>state.rootDocumentMeta);
78
+ const { currentDocument, currentDocumentMeta } = useDocumentContext('RelationsField');
81
79
  const [currentPage, setCurrentPage] = React.useState(1);
82
- const isRootDocument = rootDocumentMeta.documentId === currentDocumentMeta.documentId;
83
- const documentMeta = isRootDocument ? rootDocumentMeta : currentDocumentMeta;
84
80
  // Use the documentId from the actual document, not the params (meta)
85
81
  const documentId = currentDocument.document?.documentId;
86
82
  const { formatMessage } = useIntl();
87
- const [{ query }] = useQueryParams();
88
- const params = documentMeta.params ?? buildValidParams(query);
89
83
  const isMorph = props.attribute.relation.toLowerCase().includes('morph');
90
84
  const isDisabled = isMorph || disabled;
91
85
  const { componentId, componentUID } = useComponent('RelationsField', ({ uid, id })=>({
@@ -102,7 +96,7 @@ const ONE_WAY_RELATIONS = [
102
96
  /**
103
97
  * We'll always have a documentId in a created entry, so we look for a componentId first.
104
98
  * Same with `uid` and `documentModel`.
105
- */ const model = component ? component.uid : documentMeta.model;
99
+ */ const model = component ? component.uid : currentDocumentMeta.model;
106
100
  const id = component && componentId ? componentId.toString() : documentId;
107
101
  /**
108
102
  * The `name` prop is a complete path to the field, e.g. `field1.field2.field3`.
@@ -122,7 +116,7 @@ const ONE_WAY_RELATIONS = [
122
116
  // below we don't run the query if there is no id.
123
117
  id,
124
118
  params: {
125
- ...params,
119
+ ...currentDocumentMeta.params,
126
120
  pageSize: RELATIONS_TO_DISPLAY,
127
121
  page: currentPage
128
122
  }
@@ -194,7 +188,8 @@ const ONE_WAY_RELATIONS = [
194
188
  apiData: {
195
189
  id: relation.id,
196
190
  documentId: relation.documentId,
197
- locale: relation.locale
191
+ locale: relation.locale,
192
+ isTemporary: true
198
193
  },
199
194
  status: relation.status,
200
195
  /**
@@ -266,7 +261,8 @@ const ONE_WAY_RELATIONS = [
266
261
  isLoading: isFetchingMoreRelations,
267
262
  relationType: props.attribute.relation,
268
263
  // @ts-expect-error – targetModel does exist on the attribute. But it's not typed.
269
- targetModel: props.attribute.targetModel
264
+ targetModel: props.attribute.targetModel,
265
+ mainField: props.mainField
270
266
  })
271
267
  ]
272
268
  });
@@ -316,11 +312,7 @@ const ONE_WAY_RELATIONS = [
316
312
  page: 1
317
313
  });
318
314
  const { toggleNotification } = useNotification();
319
- const [{ query }] = useQueryParams();
320
- const currentDocumentMeta = useDocumentContext('RelationsInput', (state)=>state.meta);
321
- const rootDocumentMeta = useDocumentContext('RelationsInput', (state)=>state.rootDocumentMeta);
322
- const isRootDocument = rootDocumentMeta.documentId === currentDocumentMeta.documentId;
323
- const documentMeta = isRootDocument ? rootDocumentMeta : currentDocumentMeta;
315
+ const { currentDocumentMeta } = useDocumentContext('RelationsInput');
324
316
  const { formatMessage } = useIntl();
325
317
  const fieldRef = useFocusInputField(name);
326
318
  const field = useField(name);
@@ -340,12 +332,11 @@ const ONE_WAY_RELATIONS = [
340
332
  */ const [targetField] = name.split('.').slice(-1);
341
333
  // Return early if there is no relation to the document
342
334
  if (!isRelatedToCurrentDocument) return;
343
- const params = documentMeta.params ?? buildValidParams(query);
344
335
  searchForTrigger({
345
336
  model,
346
337
  targetField,
347
338
  params: {
348
- ...params,
339
+ ...currentDocumentMeta.params,
349
340
  id: id ?? '',
350
341
  pageSize: 10,
351
342
  idsToInclude: field.value?.disconnect?.map((rel)=>rel.id.toString()) ?? [],
@@ -359,11 +350,10 @@ const ONE_WAY_RELATIONS = [
359
350
  id,
360
351
  model,
361
352
  name,
362
- query,
363
353
  searchForTrigger,
364
354
  searchParamsDebounced,
365
355
  isRelatedToCurrentDocument,
366
- documentMeta
356
+ currentDocumentMeta.params
367
357
  ]);
368
358
  const handleSearch = async (search)=>{
369
359
  setSearchParams((s)=>({
@@ -414,6 +404,16 @@ const ONE_WAY_RELATIONS = [
414
404
  }, [
415
405
  field.value
416
406
  ]);
407
+ const relation = {
408
+ collectionType: COLLECTION_TYPES,
409
+ // @ts-expect-error – targetModel does exist on the attribute. But it's not typed.
410
+ model: props.attribute.targetModel,
411
+ documentId: '',
412
+ params: currentDocumentMeta.params
413
+ };
414
+ const { componentUID } = useComponent('RelationsField', ({ uid })=>({
415
+ componentUID: uid
416
+ }));
417
417
  return /*#__PURE__*/ jsxs(Field.Root, {
418
418
  error: field.error,
419
419
  hint: hint,
@@ -424,57 +424,86 @@ const ONE_WAY_RELATIONS = [
424
424
  action: labelAction,
425
425
  children: label
426
426
  }),
427
- /*#__PURE__*/ jsx(Combobox, {
428
- ref: fieldRef,
429
- name: name,
430
- autocomplete: "list",
431
- placeholder: placeholder || formatMessage({
432
- id: getTranslation('relation.add'),
433
- defaultMessage: 'Add relation'
434
- }),
435
- hasMoreItems: hasNextPage,
436
- loading: isLoading,
437
- onOpenChange: ()=>{
438
- handleSearch(textValue ?? '');
439
- },
440
- noOptionsMessage: ()=>formatMessage({
441
- id: getTranslation('relation.notAvailable'),
442
- defaultMessage: 'No relations available'
443
- }),
444
- loadingMessage: formatMessage({
445
- id: getTranslation('relation.isLoading'),
446
- defaultMessage: 'Relations are loading'
447
- }),
448
- onLoadMore: handleLoadMore,
449
- textValue: textValue,
450
- onChange: handleChange,
451
- onTextValueChange: (text)=>{
452
- setTextValue(text);
453
- },
454
- onInputChange: (event)=>{
455
- handleSearch(event.currentTarget.value);
456
- },
457
- ...props,
458
- children: options.map((opt)=>{
459
- const textValue = getRelationLabel(opt, mainField);
460
- return /*#__PURE__*/ jsx(ComboboxOption, {
461
- value: opt.id.toString(),
427
+ /*#__PURE__*/ jsx(RelationModalRenderer, {
428
+ children: ({ dispatch })=>/*#__PURE__*/ jsx(Combobox, {
429
+ ref: fieldRef,
430
+ creatable: "visible",
431
+ createMessage: ()=>formatMessage({
432
+ id: getTranslation('relation.create'),
433
+ defaultMessage: 'Create a relation'
434
+ }),
435
+ onCreateOption: ()=>{
436
+ dispatch({
437
+ type: 'GO_TO_RELATION',
438
+ payload: {
439
+ document: relation,
440
+ shouldBypassConfirmation: false,
441
+ fieldToConnect: name,
442
+ fieldToConnectUID: componentUID
443
+ }
444
+ });
445
+ },
446
+ creatableStartIcon: /*#__PURE__*/ jsx(Plus, {
447
+ fill: "neutral500"
448
+ }),
449
+ name: name,
450
+ autocomplete: "list",
451
+ placeholder: placeholder || formatMessage({
452
+ id: getTranslation('relation.add'),
453
+ defaultMessage: 'Add relation'
454
+ }),
455
+ hasMoreItems: hasNextPage,
456
+ loading: isLoading,
457
+ onOpenChange: ()=>{
458
+ handleSearch(textValue ?? '');
459
+ },
460
+ noOptionsMessage: ()=>formatMessage({
461
+ id: getTranslation('relation.notAvailable'),
462
+ defaultMessage: 'No relations available'
463
+ }),
464
+ loadingMessage: formatMessage({
465
+ id: getTranslation('relation.isLoading'),
466
+ defaultMessage: 'Relations are loading'
467
+ }),
468
+ onLoadMore: handleLoadMore,
462
469
  textValue: textValue,
463
- children: /*#__PURE__*/ jsxs(Flex, {
464
- gap: 2,
465
- justifyContent: "space-between",
466
- children: [
467
- /*#__PURE__*/ jsx(Typography, {
468
- ellipsis: true,
469
- children: textValue
470
- }),
471
- opt.status ? /*#__PURE__*/ jsx(DocumentStatus, {
472
- status: opt.status
473
- }) : null
474
- ]
470
+ onChange: handleChange,
471
+ onTextValueChange: (text)=>{
472
+ setTextValue(text);
473
+ },
474
+ onInputChange: (event)=>{
475
+ handleSearch(event.currentTarget.value);
476
+ },
477
+ ...props,
478
+ children: options.map((opt)=>{
479
+ const textValue = getRelationLabel(opt, mainField);
480
+ return /*#__PURE__*/ jsx(ComboboxOption, {
481
+ value: opt.id.toString(),
482
+ textValue: textValue,
483
+ children: /*#__PURE__*/ jsxs(Flex, {
484
+ gap: 2,
485
+ justifyContent: "space-between",
486
+ children: [
487
+ /*#__PURE__*/ jsxs(Flex, {
488
+ gap: 2,
489
+ children: [
490
+ /*#__PURE__*/ jsx(Link$1, {
491
+ fill: "neutral500"
492
+ }),
493
+ /*#__PURE__*/ jsx(Typography, {
494
+ ellipsis: true,
495
+ children: textValue
496
+ })
497
+ ]
498
+ }),
499
+ opt.status ? /*#__PURE__*/ jsx(DocumentStatus, {
500
+ status: opt.status
501
+ }) : null
502
+ ]
503
+ })
504
+ }, opt.id);
475
505
  })
476
- }, opt.id);
477
- })
506
+ })
478
507
  }),
479
508
  /*#__PURE__*/ jsx(Field.Error, {}),
480
509
  /*#__PURE__*/ jsx(Field.Hint, {})
@@ -485,7 +514,7 @@ const ONE_WAY_RELATIONS = [
485
514
  * RelationsList
486
515
  * -----------------------------------------------------------------------------------------------*/ const RELATION_ITEM_HEIGHT = 50;
487
516
  const RELATION_GUTTER = 4;
488
- const RelationsList = ({ data, serverData, disabled, name, isLoading, relationType, targetModel })=>{
517
+ const RelationsList = ({ data, serverData, disabled, name, isLoading, relationType, targetModel, mainField })=>{
489
518
  const ariaDescriptionId = React.useId();
490
519
  const { formatMessage } = useIntl();
491
520
  const listRef = React.useRef(null);
@@ -571,6 +600,7 @@ const RelationsList = ({ data, serverData, disabled, name, isLoading, relationTy
571
600
  id: relation.id,
572
601
  documentId: relation.documentId ?? relation.apiData?.documentId ?? '',
573
602
  locale: relation.locale || relation.apiData?.locale,
603
+ isTemporary: relation.apiData?.isTemporary,
574
604
  position
575
605
  }
576
606
  }
@@ -650,7 +680,8 @@ const RelationsList = ({ data, serverData, disabled, name, isLoading, relationTy
650
680
  name,
651
681
  handleDisconnect,
652
682
  relations: data,
653
- targetModel
683
+ targetModel,
684
+ mainField
654
685
  },
655
686
  itemKey: (index)=>data[index].id,
656
687
  innerElementType: "ol",
@@ -691,9 +722,26 @@ const ShadowBox = styled(Box)`
691
722
  }
692
723
  `;
693
724
  const ListItem = ({ data, index, style })=>{
694
- const { ariaDescribedBy, canDrag = false, disabled = false, handleCancel, handleDisconnect, handleDropItem, handleGrabItem, handleMoveItem, name, relations, targetModel } = data;
725
+ const { ariaDescribedBy, canDrag = false, disabled = false, handleCancel, handleDisconnect, handleDropItem, handleGrabItem, handleMoveItem, name, relations, targetModel, mainField } = data;
726
+ const { currentDocumentMeta } = useDocumentContext('RelationsField');
695
727
  const { formatMessage } = useIntl();
696
- const { href, id, label, status, documentId, apiData, locale } = relations[index];
728
+ const { href, id, label: originalLabel, status: originalStatus, documentId, apiData, locale } = relations[index];
729
+ /**
730
+ * The code above attempts to retrieve the updated value of a relation that has not yet been saved.
731
+ * This is necessary when a relation modal is opened, and the mainField or its status is updated.
732
+ * These changes need to be reflected in the initial relation field.
733
+ */ const collectionType = getCollectionType(href);
734
+ const isTemporary = apiData?.isTemporary ?? false;
735
+ const { document } = useDocument({
736
+ collectionType,
737
+ model: targetModel,
738
+ documentId: documentId ?? apiData?.documentId,
739
+ params: currentDocumentMeta.params
740
+ }, {
741
+ skip: !isTemporary
742
+ });
743
+ const label = isTemporary && document ? getRelationLabel(document, mainField) : originalLabel;
744
+ const status = isTemporary && document ? document?.status : originalStatus;
697
745
  const [{ handlerId, isDragging, handleKeyDown }, relationRef, dropRef, dragRef, dragPreviewRef] = useDragAndDrop(canDrag && !disabled, {
698
746
  type: `${ItemTypes.RELATION}_${name}`,
699
747
  index,
@@ -715,6 +763,21 @@ const ListItem = ({ data, index, style })=>{
715
763
  }, [
716
764
  dragPreviewRef
717
765
  ]);
766
+ const safeDocumentId = documentId ?? apiData?.documentId;
767
+ const safeLocale = locale ?? apiData?.locale ?? null;
768
+ const documentMeta = React.useMemo(()=>({
769
+ documentId: safeDocumentId,
770
+ model: targetModel,
771
+ collectionType: getCollectionType(href),
772
+ params: {
773
+ locale: safeLocale
774
+ }
775
+ }), [
776
+ safeDocumentId,
777
+ href,
778
+ safeLocale,
779
+ targetModel
780
+ ]);
718
781
  return /*#__PURE__*/ jsx(Box, {
719
782
  style: style,
720
783
  tag: "li",
@@ -753,23 +816,17 @@ const ListItem = ({ data, index, style })=>{
753
816
  /*#__PURE__*/ jsxs(Flex, {
754
817
  width: "100%",
755
818
  minWidth: 0,
819
+ gap: 4,
756
820
  justifyContent: "space-between",
757
821
  children: [
758
822
  /*#__PURE__*/ jsx(Box, {
823
+ flex: 1,
759
824
  minWidth: 0,
760
825
  paddingTop: 1,
761
826
  paddingBottom: 1,
762
- paddingRight: 4,
763
- children: /*#__PURE__*/ jsx(RelationModalForm, {
764
- triggerButtonLabel: label,
765
- relation: {
766
- documentId: documentId ?? apiData?.documentId,
767
- model: targetModel,
768
- collectionType: getCollectionType(href),
769
- params: {
770
- locale: locale || apiData?.locale || null
771
- }
772
- }
827
+ children: /*#__PURE__*/ jsx(RelationModalRenderer, {
828
+ relation: documentMeta,
829
+ children: label
773
830
  })
774
831
  }),
775
832
  status ? /*#__PURE__*/ jsx(DocumentStatus, {