@strapi/admin 4.4.3 → 4.5.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js +35 -1
  2. package/admin/src/content-manager/components/DynamicTable/CellContent/RelationMultiple/index.js +11 -7
  3. package/admin/src/content-manager/components/DynamicTable/CellContent/index.js +6 -5
  4. package/admin/src/content-manager/components/DynamicTable/TableRows/index.js +5 -0
  5. package/admin/src/content-manager/components/DynamicTable/index.js +1 -1
  6. package/admin/src/content-manager/components/EditViewDataManagerProvider/index.js +73 -20
  7. package/admin/src/content-manager/components/EditViewDataManagerProvider/reducer.js +166 -26
  8. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/cleanData.js +17 -1
  9. package/admin/src/content-manager/components/Inputs/index.js +12 -4
  10. package/admin/src/content-manager/components/NonRepeatableComponent/index.js +2 -0
  11. package/admin/src/content-manager/components/RelationInput/RelationInput.js +427 -0
  12. package/admin/src/content-manager/components/{SelectWrapper → RelationInput/components}/Option.js +15 -25
  13. package/admin/src/content-manager/components/RelationInput/components/Relation.js +48 -0
  14. package/admin/src/content-manager/components/RelationInput/components/RelationItem.js +52 -0
  15. package/admin/src/content-manager/components/RelationInput/components/RelationList.js +52 -0
  16. package/admin/src/content-manager/components/RelationInput/constants.js +1 -0
  17. package/admin/src/content-manager/components/RelationInput/index.js +1 -0
  18. package/admin/src/content-manager/components/RelationInputDataManager/RelationInputDataManager.js +261 -0
  19. package/admin/src/content-manager/components/RelationInputDataManager/constants.js +8 -0
  20. package/admin/src/content-manager/components/RelationInputDataManager/index.js +1 -0
  21. package/admin/src/content-manager/components/{SelectWrapper → RelationInputDataManager}/utils/connect.js +0 -1
  22. package/admin/src/content-manager/components/RelationInputDataManager/utils/getRelationLink.js +5 -0
  23. package/admin/src/content-manager/components/RelationInputDataManager/utils/index.js +4 -0
  24. package/admin/src/content-manager/components/RelationInputDataManager/utils/normalizeRelations.js +65 -0
  25. package/admin/src/content-manager/components/RelationInputDataManager/utils/normalizeSearchResults.js +12 -0
  26. package/admin/src/content-manager/components/RelationInputDataManager/utils/select.js +98 -0
  27. package/admin/src/content-manager/components/RepeatableComponent/DraggedItem/index.js +5 -0
  28. package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +42 -2
  29. package/admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/formatLayouts.js +7 -69
  30. package/admin/src/content-manager/hooks/useRelation/index.js +1 -0
  31. package/admin/src/content-manager/hooks/useRelation/useRelation.js +81 -0
  32. package/admin/src/content-manager/pages/EditSettingsView/components/DisplayedFields.js +4 -4
  33. package/admin/src/content-manager/pages/EditSettingsView/index.js +21 -49
  34. package/admin/src/content-manager/pages/EditSettingsView/reducer.js +0 -25
  35. package/admin/src/content-manager/pages/EditView/Header/index.js +121 -140
  36. package/admin/src/content-manager/pages/EditView/Header/utils/index.js +0 -1
  37. package/admin/src/content-manager/pages/EditView/Header/utils/select.js +4 -2
  38. package/admin/src/content-manager/pages/EditView/index.js +12 -65
  39. package/admin/src/content-manager/pages/ListView/FieldPicker/index.js +0 -1
  40. package/admin/src/content-manager/pages/ListView/index.js +0 -1
  41. package/admin/src/content-manager/pages/ListViewLayoutManager/index.js +0 -1
  42. package/admin/src/content-manager/utils/formatLayoutToApi.js +1 -3
  43. package/admin/src/pages/HomePage/SocialLinks.js +1 -1
  44. package/admin/src/translations/ar.json +0 -1
  45. package/admin/src/translations/ca.json +1 -8
  46. package/admin/src/translations/cs.json +0 -2
  47. package/admin/src/translations/de.json +4 -12
  48. package/admin/src/translations/dk.json +3 -11
  49. package/admin/src/translations/en.json +4 -11
  50. package/admin/src/translations/es.json +156 -168
  51. package/admin/src/translations/fr.json +3 -11
  52. package/admin/src/translations/gu.json +608 -617
  53. package/admin/src/translations/hi.json +689 -698
  54. package/admin/src/translations/hu.json +2 -10
  55. package/admin/src/translations/id.json +2 -10
  56. package/admin/src/translations/it.json +2 -10
  57. package/admin/src/translations/ja.json +2 -11
  58. package/admin/src/translations/ko.json +2 -11
  59. package/admin/src/translations/ml.json +689 -698
  60. package/admin/src/translations/ms.json +0 -2
  61. package/admin/src/translations/nl.json +3 -11
  62. package/admin/src/translations/pl.json +2 -11
  63. package/admin/src/translations/pt-BR.json +3 -11
  64. package/admin/src/translations/pt.json +0 -1
  65. package/admin/src/translations/ru.json +489 -501
  66. package/admin/src/translations/sa.json +85 -93
  67. package/admin/src/translations/sk.json +3 -10
  68. package/admin/src/translations/sv.json +3 -9
  69. package/admin/src/translations/th.json +0 -2
  70. package/admin/src/translations/tr.json +0 -1
  71. package/admin/src/translations/uk.json +0 -2
  72. package/admin/src/translations/vi.json +0 -1
  73. package/admin/src/translations/zh-Hans.json +4 -13
  74. package/admin/src/translations/zh.json +3 -11
  75. package/build/{8773.51992277.chunk.js → 1939.e3c87653.chunk.js} +50 -50
  76. package/build/8738.a30a2160.chunk.js +461 -0
  77. package/build/962.8651ba3f.chunk.js +184 -0
  78. package/build/Admin-authenticatedApp.883449a5.chunk.js +80 -0
  79. package/build/{Admin_homePage.6d5e3236.chunk.js → Admin_homePage.4b2be829.chunk.js} +1 -1
  80. package/build/{ar-json.d4cb26d9.chunk.js → ar-json.3489463d.chunk.js} +1 -1
  81. package/build/{ca-json.d16c1d28.chunk.js → ca-json.82df6eab.chunk.js} +1 -1
  82. package/build/content-manager.933dc286.chunk.js +1201 -0
  83. package/build/{cs-json.c8f28ba8.chunk.js → cs-json.ce49da5c.chunk.js} +1 -1
  84. package/build/{de-json.a9b514dc.chunk.js → de-json.0ad554eb.chunk.js} +1 -1
  85. package/build/{dk-json.09e8d145.chunk.js → dk-json.e195ea1a.chunk.js} +1 -1
  86. package/build/{en-json.e936d40e.chunk.js → en-json.1889403c.chunk.js} +1 -1
  87. package/build/{es-json.3a9c7c09.chunk.js → es-json.09f80f6e.chunk.js} +1 -1
  88. package/build/{fr-json.4ed1fc2c.chunk.js → fr-json.606d056b.chunk.js} +1 -1
  89. package/build/{gu-json.d8311297.chunk.js → gu-json.9881264f.chunk.js} +1 -1
  90. package/build/{hi-json.0edb8d29.chunk.js → hi-json.83dcf48f.chunk.js} +1 -1
  91. package/build/{hu-json.7855529a.chunk.js → hu-json.6f328bce.chunk.js} +1 -1
  92. package/build/{id-json.df9618f2.chunk.js → id-json.1f3c4303.chunk.js} +1 -1
  93. package/build/index.html +1 -1
  94. package/build/{it-json.a21bf078.chunk.js → it-json.494ac432.chunk.js} +1 -1
  95. package/build/{ja-json.7b0d9067.chunk.js → ja-json.6f262117.chunk.js} +1 -1
  96. package/build/{ko-json.983c1f8f.chunk.js → ko-json.36dc3b9a.chunk.js} +1 -1
  97. package/build/main.63e7ea0a.js +9338 -0
  98. package/build/{ml-json.8dd021c8.chunk.js → ml-json.9566bf9a.chunk.js} +1 -1
  99. package/build/{ms-json.836ed013.chunk.js → ms-json.ed51e902.chunk.js} +1 -1
  100. package/build/{nl-json.29d2eb37.chunk.js → nl-json.94c3a289.chunk.js} +1 -1
  101. package/build/{pl-json.1f04f00c.chunk.js → pl-json.ccc6ef23.chunk.js} +1 -1
  102. package/build/{pt-BR-json.b4bc8efe.chunk.js → pt-BR-json.744f024d.chunk.js} +1 -1
  103. package/build/{pt-json.c23020ab.chunk.js → pt-json.3161ca22.chunk.js} +1 -1
  104. package/build/{ru-json.7ab40ccf.chunk.js → ru-json.d22ea13c.chunk.js} +1 -1
  105. package/build/{runtime~main.7faf633a.js → runtime~main.3a5e1b07.js} +1 -1
  106. package/build/{sa-json.c5a9f4ea.chunk.js → sa-json.8fb1c04d.chunk.js} +1 -1
  107. package/build/{sk-json.e4c24c4e.chunk.js → sk-json.6c7335d4.chunk.js} +1 -1
  108. package/build/{sv-json.c3f471ae.chunk.js → sv-json.2e589a7d.chunk.js} +1 -1
  109. package/build/{th-json.a59ffb32.chunk.js → th-json.72e8de3d.chunk.js} +1 -1
  110. package/build/{tr-json.276e59fe.chunk.js → tr-json.9c44ea0c.chunk.js} +1 -1
  111. package/build/{uk-json.5b5b9c27.chunk.js → uk-json.c4cd2e24.chunk.js} +1 -1
  112. package/build/{upload-translation-en-json.004a86c1.chunk.js → upload-translation-en-json.86da7b0a.chunk.js} +1 -1
  113. package/build/{vi-json.bf3424be.chunk.js → vi-json.f7890025.chunk.js} +1 -1
  114. package/build/{zh-Hans-json.9c99f8d4.chunk.js → zh-Hans-json.a4d7dc69.chunk.js} +1 -1
  115. package/build/{zh-json.451a0271.chunk.js → zh-json.66aa2ae1.chunk.js} +1 -1
  116. package/package.json +7 -7
  117. package/admin/src/content-manager/components/SelectMany/ListItem.js +0 -102
  118. package/admin/src/content-manager/components/SelectMany/index.js +0 -148
  119. package/admin/src/content-manager/components/SelectOne/SingleValue.js +0 -67
  120. package/admin/src/content-manager/components/SelectOne/index.js +0 -97
  121. package/admin/src/content-manager/components/SelectWrapper/Label.js +0 -60
  122. package/admin/src/content-manager/components/SelectWrapper/index.js +0 -356
  123. package/admin/src/content-manager/components/SelectWrapper/utils/index.js +0 -2
  124. package/admin/src/content-manager/components/SelectWrapper/utils/select.js +0 -45
  125. package/admin/src/content-manager/pages/EditSettingsView/components/RelationalFieldButton.js +0 -135
  126. package/admin/src/content-manager/pages/EditSettingsView/components/RelationalFields.js +0 -103
  127. package/admin/src/content-manager/pages/EditView/Header/utils/getDraftRelations.js +0 -62
  128. package/build/1669.d1b29c28.chunk.js +0 -1
  129. package/build/524.8a540ac1.chunk.js +0 -644
  130. package/build/Admin-authenticatedApp.88fa40ac.chunk.js +0 -80
  131. package/build/content-manager.8bddf2e6.chunk.js +0 -1178
  132. package/build/main.6650d2e7.js +0 -9338
@@ -1,49 +1,16 @@
1
1
  import { cloneDeep, get, set } from 'lodash';
2
- import { getRequestUrl, mergeMetasWithSchema } from '../../../utils';
2
+ import { mergeMetasWithSchema } from '../../../utils';
3
3
 
4
4
  const getRelationModel = (targetModel, models) => models.find((model) => model.uid === targetModel);
5
5
 
6
- // editRelations is an array of strings...
7
- const formatEditRelationsLayoutWithMetas = (contentTypeConfiguration, models) => {
8
- const formatted = contentTypeConfiguration.layouts.editRelations.reduce((acc, current) => {
9
- const fieldSchema = get(contentTypeConfiguration, ['attributes', current], {});
10
- const targetModelUID = get(
11
- contentTypeConfiguration,
12
- ['attributes', current, 'targetModel'],
13
- null
14
- );
15
- const targetModelSchema = getRelationModel(targetModelUID, models);
16
- const targetModelPluginOptions = targetModelSchema.pluginOptions || {};
17
- const metadatas = get(contentTypeConfiguration, ['metadatas', current, 'edit'], {});
18
- const size = 6;
19
-
20
- const queryInfos = generateRelationQueryInfos(contentTypeConfiguration, current, models);
21
-
22
- acc.push({
23
- name: current,
24
- size,
25
- fieldSchema,
26
- metadatas,
27
- queryInfos,
28
- targetModelPluginOptions,
29
- });
30
-
31
- return acc;
32
- }, []);
33
-
34
- return formatted;
35
- };
36
-
37
6
  const formatLayouts = (initialData, models) => {
38
7
  const data = createMetasSchema(initialData, models);
39
8
 
40
9
  const formattedCTEditLayout = formatLayoutWithMetas(data.contentType, null, models);
41
10
  const ctUid = data.contentType.uid;
42
- const formattedEditRelationsLayout = formatEditRelationsLayoutWithMetas(data.contentType, models);
43
11
  const formattedListLayout = formatListLayoutWithMetas(data.contentType, data.components);
44
12
 
45
13
  set(data, ['contentType', 'layouts', 'edit'], formattedCTEditLayout);
46
- set(data, ['contentType', 'layouts', 'editRelations'], formattedEditRelationsLayout);
47
14
  set(data, ['contentType', 'layouts', 'list'], formattedListLayout);
48
15
 
49
16
  Object.keys(data.components).forEach((compoUID) => {
@@ -126,7 +93,6 @@ const formatLayoutWithMetas = (contentTypeConfiguration, ctUid, models) => {
126
93
  ? generateRelationQueryInfosForComponents(
127
94
  contentTypeConfiguration,
128
95
  attribute.name,
129
- ctUid,
130
96
  models
131
97
  )
132
98
  : generateRelationQueryInfos(contentTypeConfiguration, attribute.name, models);
@@ -155,7 +121,6 @@ const formatListLayoutWithMetas = (contentTypeConfiguration, components) => {
155
121
 
156
122
  if (type === 'relation') {
157
123
  const queryInfos = {
158
- endPoint: `collection-types/${contentTypeConfiguration.uid}`,
159
124
  defaultParams: {},
160
125
  };
161
126
 
@@ -194,51 +159,25 @@ const formatListLayoutWithMetas = (contentTypeConfiguration, components) => {
194
159
  };
195
160
 
196
161
  const generateRelationQueryInfos = (contentTypeConfiguration, fieldName, models) => {
197
- const uid = contentTypeConfiguration.uid;
198
- const endPoint = getRequestUrl(`relations/${uid}/${fieldName}`);
199
- const mainField = get(
200
- contentTypeConfiguration,
201
- ['metadatas', fieldName, 'edit', 'mainField', 'name'],
202
- ''
203
- );
204
162
  const targetModel = get(contentTypeConfiguration, ['attributes', fieldName, 'targetModel'], '');
205
- const shouldDisplayRelationLink = getDisplayedModels(models).indexOf(targetModel) !== -1;
163
+ const shouldDisplayRelationLink = getDisplayedModels(models).includes(targetModel);
206
164
 
207
- const queryInfos = {
208
- endPoint,
209
- containsKey: `${mainField}`,
165
+ return {
210
166
  defaultParams: {},
211
167
  shouldDisplayRelationLink,
212
168
  };
213
-
214
- return queryInfos;
215
169
  };
216
170
 
217
- const generateRelationQueryInfosForComponents = (
218
- contentTypeConfiguration,
219
- fieldName,
220
- ctUid,
221
- models
222
- ) => {
223
- const endPoint = getRequestUrl(`relations/${ctUid}/${fieldName}`);
224
- const mainField = get(
225
- contentTypeConfiguration,
226
- ['metadatas', fieldName, 'edit', 'mainField', 'name'],
227
- ''
228
- );
171
+ const generateRelationQueryInfosForComponents = (contentTypeConfiguration, fieldName, models) => {
229
172
  const targetModel = get(contentTypeConfiguration, ['attributes', fieldName, 'targetModel'], '');
230
- const shouldDisplayRelationLink = getDisplayedModels(models).indexOf(targetModel) !== -1;
173
+ const shouldDisplayRelationLink = getDisplayedModels(models).includes(targetModel);
231
174
 
232
- const queryInfos = {
233
- endPoint,
234
- containsKey: `${mainField}`,
175
+ return {
235
176
  defaultParams: {
236
- _component: contentTypeConfiguration.uid,
177
+ component: contentTypeConfiguration.uid,
237
178
  },
238
179
  shouldDisplayRelationLink,
239
180
  };
240
-
241
- return queryInfos;
242
181
  };
243
182
 
244
183
  const getDisplayedModels = (models) =>
@@ -246,7 +185,6 @@ const getDisplayedModels = (models) =>
246
185
 
247
186
  export default formatLayouts;
248
187
  export {
249
- formatEditRelationsLayoutWithMetas,
250
188
  formatLayoutWithMetas,
251
189
  formatListLayoutWithMetas,
252
190
  generateRelationQueryInfos,
@@ -0,0 +1 @@
1
+ export { useRelation } from './useRelation';
@@ -0,0 +1,81 @@
1
+ import { useState } from 'react';
2
+ import { useInfiniteQuery } from 'react-query';
3
+
4
+ import { axiosInstance } from '../../../core/utils';
5
+
6
+ export const useRelation = (cacheKey, { relation, search }) => {
7
+ const [searchParams, setSearchParams] = useState({});
8
+
9
+ const fetchRelations = async ({ pageParam = 1 }) => {
10
+ try {
11
+ const { data } = await axiosInstance.get(relation?.endpoint, {
12
+ params: {
13
+ ...(relation.pageParams ?? {}),
14
+ page: pageParam,
15
+ },
16
+ });
17
+
18
+ return data;
19
+ } catch (err) {
20
+ return null;
21
+ }
22
+ };
23
+
24
+ const fetchSearch = async ({ pageParam = 1 }) => {
25
+ try {
26
+ const { data } = await axiosInstance.get(search.endpoint, {
27
+ params: {
28
+ ...(search.pageParams ?? {}),
29
+ ...searchParams,
30
+ page: pageParam,
31
+ },
32
+ });
33
+
34
+ return data;
35
+ } catch (err) {
36
+ return null;
37
+ }
38
+ };
39
+
40
+ const relationsRes = useInfiniteQuery(['relation', cacheKey], fetchRelations, {
41
+ cacheTime: 0,
42
+ enabled: relation.enabled,
43
+ getNextPageParam(lastPage) {
44
+ // the API may send an empty 204 response
45
+ if (!lastPage || lastPage.pagination.page >= lastPage.pagination.pageCount) {
46
+ return undefined;
47
+ }
48
+
49
+ // eslint-disable-next-line consistent-return
50
+ return lastPage.pagination.page + 1;
51
+ },
52
+ select: (data) => ({
53
+ pages: data.pages.map((page) => ({ ...page, results: [...(page.results ?? [])].reverse() })),
54
+ }),
55
+ });
56
+
57
+ const searchRes = useInfiniteQuery(
58
+ ['relation', cacheKey, 'search', JSON.stringify(searchParams)],
59
+ fetchSearch,
60
+ {
61
+ enabled: Object.keys(searchParams).length > 0,
62
+ getNextPageParam(lastPage) {
63
+ if (lastPage.pagination.page >= lastPage.pagination.pageCount) {
64
+ return undefined;
65
+ }
66
+
67
+ // eslint-disable-next-line consistent-return
68
+ return lastPage.pagination.page + 1;
69
+ },
70
+ }
71
+ );
72
+
73
+ const searchFor = (term, options = {}) => {
74
+ setSearchParams({
75
+ ...options,
76
+ _q: term,
77
+ });
78
+ };
79
+
80
+ return { relations: relationsRes, search: searchRes, searchFor };
81
+ };
@@ -12,7 +12,7 @@ import { getTrad } from '../../../utils';
12
12
  import RowsLayout from './RowsLayout';
13
13
  import LinkToCTB from './LinkToCTB';
14
14
 
15
- const DisplayedFields = ({ editLayout, editLayoutRemainingFields, onRemoveField, onAddField }) => {
15
+ const DisplayedFields = ({ editLayout, fields, onRemoveField, onAddField }) => {
16
16
  const { formatMessage } = useIntl();
17
17
 
18
18
  return (
@@ -55,9 +55,9 @@ const DisplayedFields = ({ editLayout, editLayoutRemainingFields, onRemoveField,
55
55
  startIcon={<Plus />}
56
56
  endIcon={null}
57
57
  variant="secondary"
58
- disabled={editLayoutRemainingFields.length === 0}
58
+ disabled={fields.length === 0}
59
59
  >
60
- {editLayoutRemainingFields.map((field) => (
60
+ {fields.map((field) => (
61
61
  <MenuItem key={field} onClick={() => onAddField(field)}>
62
62
  {field}
63
63
  </MenuItem>
@@ -71,7 +71,7 @@ const DisplayedFields = ({ editLayout, editLayoutRemainingFields, onRemoveField,
71
71
 
72
72
  DisplayedFields.propTypes = {
73
73
  editLayout: PropTypes.array.isRequired,
74
- editLayoutRemainingFields: PropTypes.array.isRequired,
74
+ fields: PropTypes.array.isRequired,
75
75
  onAddField: PropTypes.func.isRequired,
76
76
  onRemoveField: PropTypes.func.isRequired,
77
77
  };
@@ -26,7 +26,6 @@ import { getTrad } from '../../utils';
26
26
  import reducer, { initialState } from './reducer';
27
27
  import init from './init';
28
28
  import DisplayedFields from './components/DisplayedFields';
29
- import RelationalFields from './components/RelationalFields';
30
29
  import ModalForm from './components/FormModal';
31
30
  import LayoutDndProvider from '../../components/LayoutDndProvider';
32
31
  import { unformatLayout } from './utils/layout';
@@ -67,23 +66,10 @@ const EditSettingsView = ({ mainLayout, components, isContentTypeView, slug, upd
67
66
  });
68
67
  const editLayout = get(modifiedData, ['layouts', 'edit'], []);
69
68
  const displayedFields = flatMap(editLayout, 'rowContent');
70
- const editLayoutRemainingFields = Object.keys(modifiedData.attributes)
71
- .filter((attr) => {
72
- if (!isContentTypeView) {
73
- return true;
74
- }
75
-
76
- return get(modifiedData, ['attributes', attr, 'type'], '') !== 'relation';
77
- })
69
+ const editLayoutFields = Object.keys(modifiedData.attributes)
78
70
  .filter((attr) => get(modifiedData, ['metadatas', attr, 'edit', 'visible'], false) === true)
79
- .filter((attr) => {
80
- return displayedFields.findIndex((el) => el.name === attr) === -1;
81
- })
71
+ .filter((attr) => displayedFields.findIndex((el) => el.name === attr) === -1)
82
72
  .sort();
83
- const relationsLayout = get(modifiedData, ['layouts', 'editRelations'], []);
84
- const editRelationsLayoutRemainingFields = Object.keys(attributes)
85
- .filter((attr) => attributes[attr].type === 'relation')
86
- .filter((attr) => relationsLayout.indexOf(attr) === -1);
87
73
 
88
74
  const handleChange = ({ target: { name, value } }) => {
89
75
  dispatch({
@@ -319,38 +305,25 @@ const EditSettingsView = ({ mainLayout, components, isContentTypeView, slug, upd
319
305
  defaultMessage: 'View',
320
306
  })}
321
307
  </Typography>
322
- <Grid gap={4}>
323
- <GridItem col={isContentTypeView ? 8 : 12} s={12}>
324
- <DisplayedFields
325
- attributes={attributes}
326
- editLayout={editLayout}
327
- editLayoutRemainingFields={editLayoutRemainingFields}
328
- onAddField={(field) => {
329
- dispatch({
330
- type: 'ON_ADD_FIELD',
331
- name: field,
332
- });
333
- }}
334
- onRemoveField={(rowId, index) => {
335
- dispatch({
336
- type: 'REMOVE_FIELD',
337
- rowIndex: rowId,
338
- fieldIndex: index,
339
- });
340
- }}
341
- />
342
- </GridItem>
343
- {isContentTypeView && (
344
- <GridItem col={4} s={12}>
345
- <RelationalFields
346
- editRelationsLayoutRemainingFields={editRelationsLayoutRemainingFields}
347
- relationsLayout={relationsLayout}
348
- onAddField={(name) => dispatch({ type: 'ADD_RELATION', name })}
349
- onRemoveField={(index) => dispatch({ type: 'REMOVE_RELATION', index })}
350
- />
351
- </GridItem>
352
- )}
353
- </Grid>
308
+
309
+ <DisplayedFields
310
+ attributes={attributes}
311
+ editLayout={editLayout}
312
+ fields={editLayoutFields}
313
+ onAddField={(field) => {
314
+ dispatch({
315
+ type: 'ON_ADD_FIELD',
316
+ name: field,
317
+ });
318
+ }}
319
+ onRemoveField={(rowId, index) => {
320
+ dispatch({
321
+ type: 'REMOVE_FIELD',
322
+ rowIndex: rowId,
323
+ fieldIndex: index,
324
+ });
325
+ }}
326
+ />
354
327
  </Stack>
355
328
  </Box>
356
329
  </ContentLayout>
@@ -395,7 +368,6 @@ EditSettingsView.propTypes = {
395
368
  info: PropTypes.object.isRequired,
396
369
  layouts: PropTypes.shape({
397
370
  list: PropTypes.array.isRequired,
398
- editRelations: PropTypes.array.isRequired,
399
371
  edit: PropTypes.array.isRequired,
400
372
  }).isRequired,
401
373
  metadatas: PropTypes.object.isRequired,
@@ -19,24 +19,8 @@ const reducer = (state = initialState, action) =>
19
19
  // eslint-disable-next-line consistent-return
20
20
  produce(state, (draftState) => {
21
21
  const layoutPathEdit = ['modifiedData', 'layouts', 'edit'];
22
- const layoutPathRelations = ['modifiedData', 'layouts', 'editRelations'];
23
22
 
24
23
  switch (action.type) {
25
- case 'ADD_RELATION': {
26
- const editRelationLayoutValue = get(state, layoutPathRelations, []);
27
- set(draftState, layoutPathRelations, [...editRelationLayoutValue, action.name]);
28
- break;
29
- }
30
- case 'MOVE_RELATION': {
31
- const editRelationLayoutValue = get(state, layoutPathRelations, []);
32
- const { fromIndex, toIndex } = action;
33
- set(
34
- draftState,
35
- layoutPathRelations,
36
- arrayMoveItem(editRelationLayoutValue, fromIndex, toIndex)
37
- );
38
- break;
39
- }
40
24
  case 'MOVE_ROW': {
41
25
  const editFieldLayoutValue = get(state, layoutPathEdit, []);
42
26
  const { fromIndex, toIndex } = action;
@@ -109,15 +93,6 @@ const reducer = (state = initialState, action) =>
109
93
  set(draftState, layoutPathEdit, updatedList);
110
94
  break;
111
95
  }
112
- case 'REMOVE_RELATION': {
113
- const relationList = get(state, layoutPathRelations, []);
114
- set(
115
- draftState,
116
- layoutPathRelations,
117
- relationList.filter((_, index) => action.index !== index)
118
- );
119
- break;
120
- }
121
96
  case 'REORDER_DIFF_ROW': {
122
97
  const actualRowContent = get(
123
98
  state,