@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.
- package/dist/admin/components/LeftMenu.js +30 -34
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +32 -36
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/components/Widgets.js +161 -0
- package/dist/admin/components/Widgets.js.map +1 -0
- package/dist/admin/components/Widgets.mjs +158 -0
- package/dist/admin/components/Widgets.mjs.map +1 -0
- package/dist/admin/content-manager.js.map +1 -1
- package/dist/admin/content-manager.mjs.map +1 -1
- package/dist/admin/history/pages/History.js +1 -9
- package/dist/admin/history/pages/History.js.map +1 -1
- package/dist/admin/history/pages/History.mjs +1 -9
- package/dist/admin/history/pages/History.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentActions.js +13 -2
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs +13 -2
- package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentContext.js +57 -0
- package/dist/admin/hooks/useDocumentContext.js.map +1 -0
- package/dist/admin/hooks/useDocumentContext.mjs +36 -0
- package/dist/admin/hooks/useDocumentContext.mjs.map +1 -0
- package/dist/admin/index.js +42 -5
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +42 -3
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +85 -93
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +86 -94
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +232 -51
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +238 -57
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +7 -12
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +8 -13
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +4 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +4 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +5 -16
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +5 -16
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -3
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -3
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +495 -345
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +495 -347
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +143 -86
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +146 -89
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js +7 -7
- package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +7 -7
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +3 -10
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +3 -10
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +0 -77
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +1 -78
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/preview/components/PreviewHeader.js +3 -6
- package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
- package/dist/admin/preview/components/PreviewHeader.mjs +3 -6
- package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
- package/dist/admin/preview/pages/Preview.js +94 -102
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +94 -102
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/services/homepage.js +30 -0
- package/dist/admin/services/homepage.js.map +1 -0
- package/dist/admin/services/homepage.mjs +28 -0
- package/dist/admin/services/homepage.mjs.map +1 -0
- package/dist/admin/src/components/Widgets.d.ts +3 -0
- package/dist/admin/src/content-manager.d.ts +0 -3
- package/dist/admin/src/features/DocumentRBAC.d.ts +1 -1
- package/dist/admin/src/history/pages/History.d.ts +1 -1
- package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +73 -7
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -0
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
- package/dist/admin/src/preview/pages/Preview.d.ts +2 -1
- package/dist/admin/src/services/homepage.d.ts +5 -0
- package/dist/admin/translations/en.json.js +2 -1
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +2 -1
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/ru.json.js +235 -226
- package/dist/admin/translations/ru.json.js.map +1 -1
- package/dist/admin/translations/ru.json.mjs +230 -226
- package/dist/admin/translations/ru.json.mjs.map +1 -1
- package/dist/server/controllers/index.js +3 -1
- package/dist/server/controllers/index.js.map +1 -1
- package/dist/server/controllers/index.mjs +3 -1
- package/dist/server/controllers/index.mjs.map +1 -1
- package/dist/server/homepage/controllers/homepage.js +57 -0
- package/dist/server/homepage/controllers/homepage.js.map +1 -0
- package/dist/server/homepage/controllers/homepage.mjs +36 -0
- package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
- package/dist/server/homepage/controllers/index.js +10 -0
- package/dist/server/homepage/controllers/index.js.map +1 -0
- package/dist/server/homepage/controllers/index.mjs +8 -0
- package/dist/server/homepage/controllers/index.mjs.map +1 -0
- package/dist/server/homepage/index.js +14 -0
- package/dist/server/homepage/index.js.map +1 -0
- package/dist/server/homepage/index.mjs +12 -0
- package/dist/server/homepage/index.mjs.map +1 -0
- package/dist/server/homepage/routes/homepage.js +25 -0
- package/dist/server/homepage/routes/homepage.js.map +1 -0
- package/dist/server/homepage/routes/homepage.mjs +23 -0
- package/dist/server/homepage/routes/homepage.mjs.map +1 -0
- package/dist/server/homepage/routes/index.js +13 -0
- package/dist/server/homepage/routes/index.js.map +1 -0
- package/dist/server/homepage/routes/index.mjs +11 -0
- package/dist/server/homepage/routes/index.mjs.map +1 -0
- package/dist/server/homepage/services/homepage.js +157 -0
- package/dist/server/homepage/services/homepage.js.map +1 -0
- package/dist/server/homepage/services/homepage.mjs +155 -0
- package/dist/server/homepage/services/homepage.mjs.map +1 -0
- package/dist/server/homepage/services/index.js +10 -0
- package/dist/server/homepage/services/index.js.map +1 -0
- package/dist/server/homepage/services/index.mjs +8 -0
- package/dist/server/homepage/services/index.mjs.map +1 -0
- package/dist/server/preview/services/preview.js +0 -1
- package/dist/server/preview/services/preview.js.map +1 -1
- package/dist/server/preview/services/preview.mjs +0 -1
- package/dist/server/preview/services/preview.mjs.map +1 -1
- package/dist/server/routes/index.js +3 -1
- package/dist/server/routes/index.js.map +1 -1
- package/dist/server/routes/index.mjs +3 -1
- package/dist/server/routes/index.mjs.map +1 -1
- package/dist/server/services/index.js +3 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +3 -1
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/homepage/controllers/homepage.d.ts +7 -0
- package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
- package/dist/server/src/homepage/controllers/index.d.ts +2 -0
- package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
- package/dist/server/src/homepage/index.d.ts +16 -0
- package/dist/server/src/homepage/index.d.ts.map +1 -0
- package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
- package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
- package/dist/server/src/homepage/routes/index.d.ts +8 -0
- package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
- package/dist/server/src/homepage/services/homepage.d.ts +11 -0
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
- package/dist/server/src/homepage/services/index.d.ts +9 -0
- package/dist/server/src/homepage/services/index.d.ts.map +1 -0
- package/dist/server/src/index.d.ts +7 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts +1 -0
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/data-mapper.d.ts +0 -1
- package/dist/server/src/services/data-mapper.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +6 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/shared/contracts/homepage.d.ts +25 -0
- package/dist/shared/contracts/homepage.d.ts.map +1 -0
- package/package.json +8 -8
- package/dist/admin/features/DocumentContext.js +0 -71
- package/dist/admin/features/DocumentContext.js.map +0 -1
- package/dist/admin/features/DocumentContext.mjs +0 -49
- package/dist/admin/features/DocumentContext.mjs.map +0 -1
- 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 {
|
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 {
|
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'
|
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 :
|
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
|
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
|
-
|
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(
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
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
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
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
|
-
}
|
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
|
-
|
763
|
-
|
764
|
-
|
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, {
|