@strapi/admin 4.4.0-rc.1 → 4.5.0-alpha.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 (203) hide show
  1. package/admin/src/StrapiApp.js +12 -4
  2. package/admin/src/components/Providers/index.js +10 -14
  3. package/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js +11 -1
  4. package/admin/src/content-manager/components/DynamicTable/CellContent/RelationMultiple/index.js +11 -7
  5. package/admin/src/content-manager/components/DynamicTable/CellContent/index.js +6 -5
  6. package/admin/src/content-manager/components/DynamicTable/TableRows/index.js +5 -0
  7. package/admin/src/content-manager/components/DynamicTable/index.js +1 -1
  8. package/admin/src/content-manager/components/EditViewDataManagerProvider/index.js +23 -17
  9. package/admin/src/content-manager/components/EditViewDataManagerProvider/reducer.js +123 -24
  10. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/cleanData.js +17 -1
  11. package/admin/src/content-manager/components/FieldTypeIcon/index.js +1 -31
  12. package/admin/src/content-manager/components/Inputs/index.js +22 -36
  13. package/admin/src/content-manager/components/RelationInput/RelationInput.js +364 -0
  14. package/admin/src/content-manager/components/{SelectWrapper → RelationInput/components}/Option.js +15 -25
  15. package/admin/src/content-manager/components/RelationInput/components/Relation.js +48 -0
  16. package/admin/src/content-manager/components/RelationInput/components/RelationItem.js +52 -0
  17. package/admin/src/content-manager/components/RelationInput/components/RelationList.js +52 -0
  18. package/admin/src/content-manager/components/RelationInput/constants.js +1 -0
  19. package/admin/src/content-manager/components/RelationInput/index.js +1 -0
  20. package/admin/src/content-manager/components/RelationInputDataManager/RelationInputDataManager.js +250 -0
  21. package/admin/src/content-manager/components/RelationInputDataManager/constants.js +8 -0
  22. package/admin/src/content-manager/components/RelationInputDataManager/index.js +1 -0
  23. package/admin/src/content-manager/components/{SelectWrapper → RelationInputDataManager}/utils/connect.js +0 -1
  24. package/admin/src/content-manager/components/RelationInputDataManager/utils/getRelationLink.js +5 -0
  25. package/admin/src/content-manager/components/{SelectWrapper → RelationInputDataManager}/utils/index.js +1 -0
  26. package/admin/src/content-manager/components/RelationInputDataManager/utils/normalizeRelations.js +58 -0
  27. package/admin/src/content-manager/components/{SelectWrapper → RelationInputDataManager}/utils/select.js +31 -1
  28. package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +19 -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 +73 -0
  32. package/admin/src/content-manager/pages/EditSettingsView/components/DisplayedFields.js +4 -4
  33. package/admin/src/content-manager/pages/EditSettingsView/components/FormModal.js +2 -7
  34. package/admin/src/content-manager/pages/EditSettingsView/index.js +22 -51
  35. package/admin/src/content-manager/pages/EditSettingsView/reducer.js +0 -25
  36. package/admin/src/content-manager/pages/EditView/Header/index.js +3 -90
  37. package/admin/src/content-manager/pages/EditView/Header/utils/index.js +0 -1
  38. package/admin/src/content-manager/pages/EditView/Header/utils/select.js +0 -2
  39. package/admin/src/content-manager/pages/EditView/index.js +93 -155
  40. package/admin/src/content-manager/pages/ListView/FieldPicker/index.js +0 -1
  41. package/admin/src/content-manager/pages/ListView/index.js +0 -1
  42. package/admin/src/content-manager/pages/ListViewLayoutManager/index.js +0 -1
  43. package/admin/src/content-manager/utils/formatLayoutToApi.js +1 -3
  44. package/admin/src/core/apis/index.js +0 -1
  45. package/admin/src/hooks/index.js +0 -1
  46. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +197 -215
  47. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/schema.js +1 -2
  48. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/DeleteButton/index.js +0 -1
  49. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/UpdateButton/index.js +36 -3
  50. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/index.js +11 -13
  51. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js +2 -3
  52. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/utils/tableHeaders.js +8 -8
  53. package/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedEditView/index.js +1 -1
  54. package/admin/src/permissions/defaultPermissions.js +6 -2
  55. package/admin/src/translations/ar.json +0 -1
  56. package/admin/src/translations/ca.json +0 -9
  57. package/admin/src/translations/cs.json +0 -2
  58. package/admin/src/translations/de.json +0 -11
  59. package/admin/src/translations/dk.json +0 -11
  60. package/admin/src/translations/en.json +0 -28
  61. package/admin/src/translations/es.json +0 -11
  62. package/admin/src/translations/fr.json +0 -11
  63. package/admin/src/translations/gu.json +0 -11
  64. package/admin/src/translations/hi.json +0 -11
  65. package/admin/src/translations/hu.json +0 -10
  66. package/admin/src/translations/id.json +0 -10
  67. package/admin/src/translations/it.json +0 -10
  68. package/admin/src/translations/ja.json +0 -11
  69. package/admin/src/translations/ko.json +0 -11
  70. package/admin/src/translations/ml.json +0 -11
  71. package/admin/src/translations/ms.json +0 -2
  72. package/admin/src/translations/nl.json +0 -11
  73. package/admin/src/translations/pl.json +0 -11
  74. package/admin/src/translations/pt-BR.json +0 -11
  75. package/admin/src/translations/pt.json +0 -1
  76. package/admin/src/translations/ru.json +0 -10
  77. package/admin/src/translations/sa.json +0 -11
  78. package/admin/src/translations/sk.json +0 -10
  79. package/admin/src/translations/sv.json +0 -9
  80. package/admin/src/translations/th.json +0 -2
  81. package/admin/src/translations/tr.json +0 -1
  82. package/admin/src/translations/uk.json +0 -2
  83. package/admin/src/translations/vi.json +0 -1
  84. package/admin/src/translations/zh-Hans.json +0 -12
  85. package/admin/src/translations/zh.json +0 -11
  86. package/build/7098.40dcd7bf.chunk.js +1 -0
  87. package/build/8851.e4ac62f2.chunk.js +158 -0
  88. package/build/{8773.c06c24c0.chunk.js → 9311.7cc03f29.chunk.js} +291 -108
  89. package/build/{Admin-authenticatedApp.99b4868f.chunk.js → Admin-authenticatedApp.e39f36c9.chunk.js} +3 -3
  90. package/build/{Admin_homePage.6d5e3236.chunk.js → Admin_homePage.118926e0.chunk.js} +1 -1
  91. package/build/{Admin_profilePage.da32abbc.chunk.js → Admin_profilePage.9d50ac44.chunk.js} +1 -1
  92. package/build/{Admin_settingsPage.98e2a62b.chunk.js → Admin_settingsPage.98a711e5.chunk.js} +16 -16
  93. package/build/admin-app.4f7618a9.chunk.js +112 -0
  94. package/build/admin-edit-roles-page.554ba3fa.chunk.js +1 -0
  95. package/build/api-tokens-create-page.4c262d6e.chunk.js +1 -0
  96. package/build/api-tokens-edit-page.10a9d368.chunk.js +1 -0
  97. package/build/api-tokens-list-page.442c9f3c.chunk.js +15 -0
  98. package/build/{ar-json.d4cb26d9.chunk.js → ar-json.3489463d.chunk.js} +1 -1
  99. package/build/{ca-json.d16c1d28.chunk.js → ca-json.a16899ae.chunk.js} +1 -1
  100. package/build/content-manager.7d57c9d1.chunk.js +1200 -0
  101. package/build/content-type-builder-list-view.8cc534e0.chunk.js +194 -0
  102. package/build/content-type-builder-translation-en-json.201bfb78.chunk.js +1 -0
  103. package/build/content-type-builder.684df7a4.chunk.js +142 -0
  104. package/build/{cs-json.c8f28ba8.chunk.js → cs-json.ce49da5c.chunk.js} +1 -1
  105. package/build/{de-json.a9b514dc.chunk.js → de-json.aa6026b3.chunk.js} +1 -1
  106. package/build/{dk-json.09e8d145.chunk.js → dk-json.fac2bcfb.chunk.js} +1 -1
  107. package/build/en-json.0c69c7d7.chunk.js +1 -0
  108. package/build/{es-json.3a9c7c09.chunk.js → es-json.d672e181.chunk.js} +1 -1
  109. package/build/{fr-json.4ed1fc2c.chunk.js → fr-json.71a16175.chunk.js} +1 -1
  110. package/build/{gu-json.d8311297.chunk.js → gu-json.ca345cd1.chunk.js} +1 -1
  111. package/build/{hi-json.0edb8d29.chunk.js → hi-json.50c7e6d4.chunk.js} +1 -1
  112. package/build/{hu-json.7855529a.chunk.js → hu-json.e0521dcc.chunk.js} +1 -1
  113. package/build/{id-json.df9618f2.chunk.js → id-json.4b1ff8d6.chunk.js} +1 -1
  114. package/build/index.html +1 -1
  115. package/build/{it-json.a21bf078.chunk.js → it-json.86bac220.chunk.js} +1 -1
  116. package/build/{ja-json.7b0d9067.chunk.js → ja-json.4e44e36b.chunk.js} +1 -1
  117. package/build/{ko-json.983c1f8f.chunk.js → ko-json.1003756e.chunk.js} +1 -1
  118. package/build/main.b47db1a3.js +9337 -0
  119. package/build/{ml-json.8dd021c8.chunk.js → ml-json.c7774425.chunk.js} +1 -1
  120. package/build/{ms-json.836ed013.chunk.js → ms-json.ed51e902.chunk.js} +1 -1
  121. package/build/{nl-json.29d2eb37.chunk.js → nl-json.f58ea235.chunk.js} +1 -1
  122. package/build/{pl-json.1f04f00c.chunk.js → pl-json.fed96aba.chunk.js} +1 -1
  123. package/build/{pt-BR-json.b4bc8efe.chunk.js → pt-BR-json.073799ab.chunk.js} +1 -1
  124. package/build/{pt-json.c23020ab.chunk.js → pt-json.3161ca22.chunk.js} +1 -1
  125. package/build/{ru-json.7ab40ccf.chunk.js → ru-json.7ad2cbbf.chunk.js} +1 -1
  126. package/build/{runtime~main.4ee06902.js → runtime~main.feeac6d3.js} +1 -1
  127. package/build/{sa-json.c5a9f4ea.chunk.js → sa-json.f0f704f0.chunk.js} +1 -1
  128. package/build/{sk-json.e4c24c4e.chunk.js → sk-json.a848961b.chunk.js} +1 -1
  129. package/build/sso-settings-page.445184e0.chunk.js +1 -0
  130. package/build/{sv-json.c3f471ae.chunk.js → sv-json.b038acbe.chunk.js} +1 -1
  131. package/build/{th-json.a59ffb32.chunk.js → th-json.72e8de3d.chunk.js} +1 -1
  132. package/build/{tr-json.276e59fe.chunk.js → tr-json.9c44ea0c.chunk.js} +1 -1
  133. package/build/{uk-json.5b5b9c27.chunk.js → uk-json.c4cd2e24.chunk.js} +1 -1
  134. package/build/{vi-json.bf3424be.chunk.js → vi-json.f7890025.chunk.js} +1 -1
  135. package/build/{webhook-edit-page.9e46fc3f.chunk.js → webhook-edit-page.d2ea3351.chunk.js} +1 -1
  136. package/build/{zh-Hans-json.9c99f8d4.chunk.js → zh-Hans-json.03d2bda1.chunk.js} +1 -1
  137. package/build/{zh-json.451a0271.chunk.js → zh-json.3d0cc664.chunk.js} +1 -1
  138. package/package.json +7 -8
  139. package/server/bootstrap.js +1 -19
  140. package/server/config/admin-actions.js +0 -20
  141. package/server/content-types/api-token.js +1 -25
  142. package/server/content-types/index.js +0 -1
  143. package/server/controllers/api-token.js +1 -24
  144. package/server/controllers/index.js +0 -1
  145. package/server/routes/api-tokens.js +0 -11
  146. package/server/routes/index.js +0 -2
  147. package/server/services/api-token.js +29 -310
  148. package/server/services/constants.js +0 -10
  149. package/server/services/permission/engine-hooks.js +82 -0
  150. package/server/services/permission/engine.js +226 -36
  151. package/server/services/permission.js +1 -4
  152. package/server/strategies/admin.js +1 -7
  153. package/server/strategies/api-token.js +11 -71
  154. package/server/validation/api-tokens.js +2 -12
  155. package/admin/src/content-manager/components/SelectMany/ListItem.js +0 -102
  156. package/admin/src/content-manager/components/SelectMany/index.js +0 -148
  157. package/admin/src/content-manager/components/SelectOne/SingleValue.js +0 -67
  158. package/admin/src/content-manager/components/SelectOne/index.js +0 -97
  159. package/admin/src/content-manager/components/SelectWrapper/Label.js +0 -60
  160. package/admin/src/content-manager/components/SelectWrapper/index.js +0 -356
  161. package/admin/src/content-manager/pages/EditSettingsView/components/RelationalFieldButton.js +0 -135
  162. package/admin/src/content-manager/pages/EditSettingsView/components/RelationalFields.js +0 -103
  163. package/admin/src/content-manager/pages/EditView/Header/utils/getDraftRelations.js +0 -62
  164. package/admin/src/contexts/ApiTokenPermissions/index.js +0 -24
  165. package/admin/src/core/apis/CustomFields.js +0 -80
  166. package/admin/src/hooks/useRegenerate/index.js +0 -34
  167. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ActionBoundRoutes/index.js +0 -56
  168. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/BoundRoute/getMethodColor.js +0 -41
  169. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/BoundRoute/index.js +0 -72
  170. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/CheckBoxWrapper.js +0 -30
  171. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/index.js +0 -150
  172. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ContenTypesSection/index.js +0 -37
  173. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/FormApiTokenContainer/index.js +0 -254
  174. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/FormBody/index.js +0 -77
  175. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/FormHead/index.js +0 -85
  176. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Permissions/index.js +0 -40
  177. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Regenerate/index.js +0 -68
  178. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/init.js +0 -13
  179. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/reducer.js +0 -72
  180. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/getDateOfExpiration.js +0 -16
  181. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/index.js +0 -5
  182. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/transformPermissionsData.js +0 -36
  183. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/DefaultButton/index.js +0 -63
  184. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/ReadButton/index.js +0 -19
  185. package/build/1669.d1b29c28.chunk.js +0 -1
  186. package/build/4318.7d167b58.chunk.js +0 -30
  187. package/build/524.40377968.chunk.js +0 -644
  188. package/build/7379.d246dd38.chunk.js +0 -1
  189. package/build/admin-app.a61d5c2e.chunk.js +0 -112
  190. package/build/admin-edit-roles-page.4dd6bcb9.chunk.js +0 -1
  191. package/build/api-tokens-create-page.93dd0689.chunk.js +0 -1
  192. package/build/api-tokens-edit-page.b0adac81.chunk.js +0 -1
  193. package/build/api-tokens-list-page.bb36535f.chunk.js +0 -16
  194. package/build/content-manager.feb0d540.chunk.js +0 -1178
  195. package/build/content-type-builder-list-view.5b3cd768.chunk.js +0 -194
  196. package/build/content-type-builder-translation-en-json.f985c9c4.chunk.js +0 -1
  197. package/build/content-type-builder.a684b2e8.chunk.js +0 -145
  198. package/build/en-json.a9918c93.chunk.js +0 -1
  199. package/build/main.e4065f58.js +0 -9337
  200. package/build/sso-settings-page.9ceb0140.chunk.js +0 -1
  201. package/server/content-types/api-token-permission.js +0 -36
  202. package/server/controllers/content-api.js +0 -15
  203. package/server/routes/content-api.js +0 -20
@@ -0,0 +1,73 @@
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
+ const { data } = await axiosInstance.get(search.endpoint, {
26
+ params: {
27
+ ...(search.pageParams ?? {}),
28
+ ...searchParams,
29
+ page: pageParam,
30
+ },
31
+ });
32
+
33
+ return data;
34
+ };
35
+
36
+ const relationsRes = useInfiniteQuery(['relation', cacheKey], fetchRelations, {
37
+ enabled: relation.enabled,
38
+ getNextPageParam(lastPage) {
39
+ // the API may send an empty 204 response
40
+ if (!lastPage || lastPage.pagination.page >= lastPage.pagination.pageCount) {
41
+ return undefined;
42
+ }
43
+
44
+ // eslint-disable-next-line consistent-return
45
+ return lastPage.pagination.page + 1;
46
+ },
47
+ });
48
+
49
+ const searchRes = useInfiniteQuery(
50
+ ['relation', cacheKey, 'search', JSON.stringify(searchParams)],
51
+ fetchSearch,
52
+ {
53
+ enabled: Object.keys(searchParams).length > 0,
54
+ getNextPageParam(lastPage) {
55
+ if (lastPage.pagination.page >= lastPage.pagination.pageCount) {
56
+ return undefined;
57
+ }
58
+
59
+ // eslint-disable-next-line consistent-return
60
+ return lastPage.pagination.page + 1;
61
+ },
62
+ }
63
+ );
64
+
65
+ const searchFor = (term, options = {}) => {
66
+ setSearchParams({
67
+ ...options,
68
+ _q: encodeURIComponent(term),
69
+ });
70
+ };
71
+
72
+ return { relations: relationsRes, search: searchRes, searchFor };
73
+ };
@@ -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,7 @@ const HeaderContainer = styled(Flex)`
26
26
  }
27
27
  `;
28
28
 
29
- const FormModal = ({ onToggle, onMetaChange, onSizeChange, onSubmit, type, customFieldUid }) => {
29
+ const FormModal = ({ onToggle, onMetaChange, onSizeChange, onSubmit, type }) => {
30
30
  const { selectedField } = useLayoutDnd();
31
31
  const { formatMessage } = useIntl();
32
32
 
@@ -47,7 +47,7 @@ const FormModal = ({ onToggle, onMetaChange, onSizeChange, onSubmit, type, custo
47
47
  <form onSubmit={onSubmit}>
48
48
  <ModalHeader>
49
49
  <HeaderContainer>
50
- <FieldTypeIcon type={getAttrType()} customFieldUid={customFieldUid} />
50
+ <FieldTypeIcon type={getAttrType(type)} />
51
51
  <Typography fontWeight="bold" textColor="neutral800" as="h2" id="title">
52
52
  {formatMessage(
53
53
  {
@@ -81,12 +81,7 @@ const FormModal = ({ onToggle, onMetaChange, onSizeChange, onSubmit, type, custo
81
81
  );
82
82
  };
83
83
 
84
- FormModal.defaultProps = {
85
- customFieldUid: null,
86
- };
87
-
88
84
  FormModal.propTypes = {
89
- customFieldUid: PropTypes.string,
90
85
  onSubmit: PropTypes.func.isRequired,
91
86
  onToggle: PropTypes.func.isRequired,
92
87
  onMetaChange: PropTypes.func.isRequired,
@@ -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>
@@ -371,10 +344,9 @@ const EditSettingsView = ({ mainLayout, components, isContentTypeView, slug, upd
371
344
  <ModalForm
372
345
  onSubmit={handleMetaSubmit}
373
346
  onToggle={handleToggleModal}
347
+ type={get(attributes, [metaToEdit, 'type'], '')}
374
348
  onMetaChange={handleMetaChange}
375
349
  onSizeChange={handleSizeChange}
376
- type={get(attributes, [metaToEdit, 'type'], '')}
377
- customFieldUid={get(attributes, [metaToEdit, 'customField'], '')}
378
350
  />
379
351
  )}
380
352
  </Main>
@@ -395,7 +367,6 @@ EditSettingsView.propTypes = {
395
367
  info: PropTypes.object.isRequired,
396
368
  layouts: PropTypes.shape({
397
369
  list: PropTypes.array.isRequired,
398
- editRelations: PropTypes.array.isRequired,
399
370
  edit: PropTypes.array.isRequired,
400
371
  }).isRequired,
401
372
  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,
@@ -1,4 +1,4 @@
1
- import React, { memo, useRef, useState } from 'react';
1
+ import React, { memo, useState } from 'react';
2
2
  import { useIntl } from 'react-intl';
3
3
  import { useHistory } from 'react-router-dom';
4
4
  import PropTypes from 'prop-types';
@@ -18,11 +18,10 @@ import { Stack } from '@strapi/design-system/Stack';
18
18
  import ExclamationMarkCircle from '@strapi/icons/ExclamationMarkCircle';
19
19
  import Check from '@strapi/icons/Check';
20
20
  import { getTrad } from '../../../utils';
21
- import { connect, getDraftRelations, select } from './utils';
21
+ import { connect, select } from './utils';
22
22
 
23
23
  const Header = ({
24
24
  allowedActions: { canUpdate, canCreate, canPublish },
25
- componentLayouts,
26
25
  initialData,
27
26
  isCreatingEntry,
28
27
  isSingleType,
@@ -35,9 +34,7 @@ const Header = ({
35
34
  }) => {
36
35
  const { goBack } = useHistory();
37
36
  const [showWarningUnpublish, setWarningUnpublish] = useState(false);
38
- const [showWarningDraftRelation, setShowWarningDraftRelation] = useState(false);
39
37
  const { formatMessage } = useIntl();
40
- const draftRelationsCountRef = useRef(0);
41
38
 
42
39
  const currentContentTypeMainField = get(layout, ['settings', 'mainField'], 'id');
43
40
  const currentContentTypeName = get(layout, ['info', 'displayName'], 'NOT FOUND');
@@ -59,14 +56,6 @@ const Header = ({
59
56
  title = currentContentTypeName;
60
57
  }
61
58
 
62
- const checkIfHasDraftRelations = () => {
63
- const count = getDraftRelations(modifiedData, layout, componentLayouts);
64
-
65
- draftRelationsCountRef.current = count;
66
-
67
- return count;
68
- };
69
-
70
59
  let primaryAction = null;
71
60
 
72
61
  if (isCreatingEntry && canCreate) {
@@ -97,17 +86,7 @@ const Header = ({
97
86
  ? { id: 'app.utils.unpublish', defaultMessage: 'Unpublish' }
98
87
  : { id: 'app.utils.publish', defaultMessage: 'Publish' };
99
88
 
100
- /* eslint-disable indent */
101
- const onClick = isPublished
102
- ? () => setWarningUnpublish(true)
103
- : () => {
104
- if (checkIfHasDraftRelations() === 0) {
105
- onPublish();
106
- } else {
107
- setShowWarningDraftRelation(true);
108
- }
109
- };
110
- /* eslint-enable indent */
89
+ const onClick = isPublished ? () => setWarningUnpublish(true) : () => onPublish();
111
90
 
112
91
  primaryAction = (
113
92
  <Flex>
@@ -135,13 +114,6 @@ const Header = ({
135
114
  }
136
115
 
137
116
  const toggleWarningUnpublish = () => setWarningUnpublish((prevState) => !prevState);
138
- const toggleWarningDraftRelation = () => setShowWarningDraftRelation((prevState) => !prevState);
139
-
140
- const handlePublish = () => {
141
- toggleWarningDraftRelation();
142
- draftRelationsCountRef.current = 0;
143
- onPublish();
144
- };
145
117
 
146
118
  const handleUnpublish = () => {
147
119
  toggleWarningUnpublish();
@@ -232,64 +204,6 @@ const Header = ({
232
204
  />
233
205
  </Dialog>
234
206
  )}
235
-
236
- {showWarningDraftRelation && (
237
- <Dialog
238
- onClose={toggleWarningDraftRelation}
239
- title="Confirmation"
240
- labelledBy="confirmation"
241
- describedBy="confirm-description"
242
- isOpen={showWarningDraftRelation}
243
- >
244
- <DialogBody icon={<ExclamationMarkCircle />}>
245
- <Stack spacing={2}>
246
- <Flex justifyContent="center" style={{ textAlign: 'center' }}>
247
- <Typography id="confirm-description">
248
- {draftRelationsCountRef.current}
249
- {formatMessage(
250
- {
251
- id: getTrad(`popUpwarning.warning.has-draft-relations.message`),
252
- defaultMessage:
253
- '<b>{count, plural, =0 { of your content relations is} one { of your content relations is} other { of your content relations are}}</b> not published yet.<br></br>It might engender broken links and errors on your project.',
254
- },
255
- {
256
- br: () => <br />,
257
- b: (chunks) => <Typography fontWeight="bold">{chunks}</Typography>,
258
- count: draftRelationsCountRef.current,
259
- }
260
- )}
261
- </Typography>
262
- </Flex>
263
- <Flex justifyContent="center" style={{ textAlign: 'center' }}>
264
- <Typography id="confirm-description">
265
- {formatMessage({
266
- id: getTrad('popUpWarning.warning.publish-question'),
267
- defaultMessage: 'Do you still want to publish it?',
268
- })}
269
- </Typography>
270
- </Flex>
271
- </Stack>
272
- </DialogBody>
273
- <DialogFooter
274
- startAction={
275
- <Button onClick={toggleWarningDraftRelation} variant="tertiary">
276
- {formatMessage({
277
- id: 'components.popUpWarning.button.cancel',
278
- defaultMessage: 'No, cancel',
279
- })}
280
- </Button>
281
- }
282
- endAction={
283
- <Button variant="success" onClick={handlePublish}>
284
- {formatMessage({
285
- id: getTrad('popUpwarning.warning.has-draft-relations.button-confirm'),
286
- defaultMessage: 'Yes, publish',
287
- })}
288
- </Button>
289
- }
290
- />
291
- </Dialog>
292
- )}
293
207
  </>
294
208
  );
295
209
  };
@@ -300,7 +214,6 @@ Header.propTypes = {
300
214
  canCreate: PropTypes.bool.isRequired,
301
215
  canPublish: PropTypes.bool.isRequired,
302
216
  }).isRequired,
303
- componentLayouts: PropTypes.object.isRequired,
304
217
  initialData: PropTypes.object.isRequired,
305
218
  isCreatingEntry: PropTypes.bool.isRequired,
306
219
  isSingleType: PropTypes.bool.isRequired,
@@ -1,3 +1,2 @@
1
1
  export { default as connect } from './connect';
2
- export { default as getDraftRelations } from './getDraftRelations';
3
2
  export { default as select } from './select';
@@ -2,7 +2,6 @@ import { useCMEditViewDataManager } from '@strapi/helper-plugin';
2
2
 
3
3
  function useSelect() {
4
4
  const {
5
- allLayoutData,
6
5
  initialData,
7
6
  isCreatingEntry,
8
7
  isSingleType,
@@ -15,7 +14,6 @@ function useSelect() {
15
14
  } = useCMEditViewDataManager();
16
15
 
17
16
  return {
18
- componentLayouts: allLayoutData.components,
19
17
  initialData,
20
18
  isCreatingEntry,
21
19
  isSingleType,