@strapi/admin 4.11.4 → 4.11.6

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 (178) hide show
  1. package/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js +8 -5
  2. package/admin/src/content-manager/components/Inputs/index.js +3 -47
  3. package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +34 -37
  4. package/admin/src/content-manager/pages/EditSettingsView/components/DisplayedFields.js +23 -21
  5. package/admin/src/content-manager/pages/EditSettingsView/components/ModalForm.js +21 -50
  6. package/admin/src/content-manager/pages/EditView/Information/index.js +1 -1
  7. package/admin/src/content-manager/pages/EditView/InformationBox/InformationBoxCE.js +1 -2
  8. package/admin/src/content-manager/pages/EditView/InformationBox/index.js +1 -3
  9. package/admin/src/content-manager/pages/EditView/index.js +14 -2
  10. package/admin/src/content-manager/pages/ListSettingsView/components/SortDisplayedFields.js +24 -22
  11. package/admin/src/content-manager/pages/ListView/components/CellContent/RelationMultiple/index.js +61 -67
  12. package/admin/src/content-manager/pages/ListView/components/CellContent/RepeatableComponent/index.js +28 -21
  13. package/admin/src/content-manager/pages/ListView/components/TableRows/index.js +97 -14
  14. package/admin/src/content-manager/pages/ListView/index.js +65 -59
  15. package/admin/src/content-manager/pages/ListView/utils/buildValidGetParams.js +30 -0
  16. package/admin/src/content-manager/pages/ListView/utils/index.js +1 -1
  17. package/admin/src/hooks/useAdminUsers/useAdminUsers.js +3 -3
  18. package/admin/src/hooks/useEnterprise/useEnterprise.js +4 -4
  19. package/admin/src/hooks/useSettingsMenu/index.js +35 -21
  20. package/admin/src/layouts/UnauthenticatedLayout/LocaleToggle/index.js +7 -7
  21. package/admin/src/pages/App/index.js +0 -3
  22. package/admin/src/pages/AuthPage/components/Login/index.js +3 -5
  23. package/admin/src/pages/AuthPage/components/Register/index.js +5 -1
  24. package/admin/src/pages/AuthPage/constants.js +3 -2
  25. package/admin/src/pages/AuthPage/index.js +18 -1
  26. package/admin/src/pages/HomePage/index.js +19 -7
  27. package/admin/src/pages/ProfilePage/index.js +12 -12
  28. package/admin/src/pages/SettingsPage/components/SettingsNav/index.js +13 -11
  29. package/admin/src/pages/SettingsPage/components/Tokens/TokenBox/index.js +1 -1
  30. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +17 -1
  31. package/admin/src/pages/SettingsPage/pages/Users/EditPage/index.js +16 -3
  32. package/admin/src/pages/SettingsPage/pages/Users/ListPage/CreateAction/index.js +2 -4
  33. package/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/index.js +15 -1
  34. package/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js +36 -5
  35. package/admin/src/pages/SettingsPage/pages/Users/components/MagicLink/index.js +3 -5
  36. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/EventTable/index.js +1 -3
  37. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/index.js +16 -1
  38. package/admin/src/translations/zh-Hans.json +1 -1
  39. package/build/1049.758a01f5.chunk.js +1 -0
  40. package/build/{3528.4845cf92.chunk.js → 1386.762d6eb8.chunk.js} +1 -1
  41. package/build/1727.b49f0713.chunk.js +1 -0
  42. package/build/{5563.86f9aa9c.chunk.js → 2225.15d1df72.chunk.js} +3 -3
  43. package/build/2379.3ba39b61.chunk.js +1 -0
  44. package/build/2395.c27eb585.chunk.js +26 -0
  45. package/build/2801.93343c11.chunk.js +1 -0
  46. package/build/{7394.423886bd.chunk.js → 3100.21c343fa.chunk.js} +1 -1
  47. package/build/311.cb0884bb.chunk.js +1 -0
  48. package/build/3483.642d2321.chunk.js +1 -0
  49. package/build/{970.89601f27.chunk.js → 3739.63e352f1.chunk.js} +52 -20
  50. package/build/3984.298bdb66.chunk.js +1 -0
  51. package/build/4546.5aac90fe.chunk.js +1 -0
  52. package/build/502.f6b78f85.chunk.js +1 -0
  53. package/build/{5542.c62d0daf.chunk.js → 5542.2415a393.chunk.js} +6 -6
  54. package/build/6158.f9d82db9.chunk.js +1 -0
  55. package/build/7030.b98dcedf.chunk.js +1 -0
  56. package/build/7464.fe31804b.chunk.js +1 -0
  57. package/build/8276.d03dc679.chunk.js +26 -0
  58. package/build/918.54414509.chunk.js +1 -0
  59. package/build/978.bab58f0a.chunk.js +1 -0
  60. package/build/{9932.7e2b71de.chunk.js → 9932.b5a3bb3a.chunk.js} +81 -81
  61. package/build/9944.7af075a5.chunk.js +26 -0
  62. package/build/{Admin-authenticatedApp.cb649fc1.chunk.js → Admin-authenticatedApp.b3060bbe.chunk.js} +5 -5
  63. package/build/Admin_InternalErrorPage.f45f2462.chunk.js +1 -0
  64. package/build/{Admin_homePage.be30ef4e.chunk.js → Admin_homePage.ac9dfb86.chunk.js} +23 -15
  65. package/build/{Admin_marketplace.74a58e20.chunk.js → Admin_marketplace.f0b87fce.chunk.js} +1 -1
  66. package/build/{Admin_pluginsPage.ce464189.chunk.js → Admin_pluginsPage.8728ff6e.chunk.js} +1 -1
  67. package/build/{Admin_profilePage.2131eb68.chunk.js → Admin_profilePage.a968035f.chunk.js} +2 -2
  68. package/build/Admin_settingsPage.8c600d1a.chunk.js +111 -0
  69. package/build/Upload_ConfigureTheView.345ac1e0.chunk.js +1 -0
  70. package/build/admin-app.1c3f7fd6.chunk.js +36 -0
  71. package/build/{admin-edit-roles-page.3fdd6b9d.chunk.js → admin-edit-roles-page.a49b9f4f.chunk.js} +4 -4
  72. package/build/admin-edit-users.67704088.chunk.js +10 -0
  73. package/build/{admin-roles-list.e17b00d7.chunk.js → admin-roles-list.0c129e98.chunk.js} +1 -1
  74. package/build/admin-users.3279ffb0.chunk.js +11 -0
  75. package/build/api-tokens-create-page.46c2ea84.chunk.js +1 -0
  76. package/build/{api-tokens-edit-page.9a1dd2fa.chunk.js → api-tokens-edit-page.58139df9.chunk.js} +1 -1
  77. package/build/{api-tokens-list-page.a103f526.chunk.js → api-tokens-list-page.505bf7e0.chunk.js} +2 -2
  78. package/build/audit-logs-settings-page.4b422831.chunk.js +1 -0
  79. package/build/content-manager.9f7f0cb8.chunk.js +1101 -0
  80. package/build/{content-type-builder-list-view.a200a358.chunk.js → content-type-builder-list-view.bf9be456.chunk.js} +9 -9
  81. package/build/{content-type-builder-translation-ar-json.56d8fcf4.chunk.js → content-type-builder-translation-ar-json.3e808e2f.chunk.js} +1 -1
  82. package/build/{content-type-builder-translation-cs-json.a5b299ca.chunk.js → content-type-builder-translation-cs-json.1ef9e106.chunk.js} +1 -1
  83. package/build/{content-type-builder-translation-de-json.393a76c0.chunk.js → content-type-builder-translation-de-json.63fcff7b.chunk.js} +1 -1
  84. package/build/{content-type-builder-translation-dk-json.fbd39bb7.chunk.js → content-type-builder-translation-dk-json.fd626b67.chunk.js} +1 -1
  85. package/build/{content-type-builder-translation-en-json.f592325b.chunk.js → content-type-builder-translation-en-json.9f2b9c49.chunk.js} +1 -1
  86. package/build/{content-type-builder-translation-es-json.9288474b.chunk.js → content-type-builder-translation-es-json.a4a361a9.chunk.js} +1 -1
  87. package/build/{content-type-builder-translation-fr-json.d35e269c.chunk.js → content-type-builder-translation-fr-json.499c3a46.chunk.js} +1 -1
  88. package/build/{content-type-builder-translation-id-json.f0513929.chunk.js → content-type-builder-translation-id-json.65255f93.chunk.js} +1 -1
  89. package/build/{content-type-builder-translation-it-json.aaf16753.chunk.js → content-type-builder-translation-it-json.e268ab74.chunk.js} +1 -1
  90. package/build/{content-type-builder-translation-ko-json.8fe21a7f.chunk.js → content-type-builder-translation-ko-json.04cb309d.chunk.js} +1 -1
  91. package/build/{content-type-builder-translation-ms-json.3b5d2d3e.chunk.js → content-type-builder-translation-ms-json.f6b743b9.chunk.js} +1 -1
  92. package/build/{content-type-builder-translation-nl-json.225ef5d3.chunk.js → content-type-builder-translation-nl-json.997fe8cc.chunk.js} +1 -1
  93. package/build/{content-type-builder-translation-pl-json.92f36be2.chunk.js → content-type-builder-translation-pl-json.634f638b.chunk.js} +1 -1
  94. package/build/{content-type-builder-translation-pt-BR-json.3bd10f89.chunk.js → content-type-builder-translation-pt-BR-json.6a95dc71.chunk.js} +1 -1
  95. package/build/{content-type-builder-translation-ru-json.9bfe47ce.chunk.js → content-type-builder-translation-ru-json.3af65503.chunk.js} +1 -1
  96. package/build/{content-type-builder-translation-sk-json.d03cc18a.chunk.js → content-type-builder-translation-sk-json.c6078082.chunk.js} +1 -1
  97. package/build/{content-type-builder-translation-sv-json.d23dcd32.chunk.js → content-type-builder-translation-sv-json.a6df2462.chunk.js} +1 -1
  98. package/build/{content-type-builder-translation-th-json.7ad256e2.chunk.js → content-type-builder-translation-th-json.122277cc.chunk.js} +1 -1
  99. package/build/{content-type-builder-translation-tr-json.926f6191.chunk.js → content-type-builder-translation-tr-json.41f44f77.chunk.js} +1 -1
  100. package/build/{content-type-builder-translation-uk-json.7bf19546.chunk.js → content-type-builder-translation-uk-json.e1315acd.chunk.js} +1 -1
  101. package/build/{content-type-builder-translation-zh-Hans-json.415577fb.chunk.js → content-type-builder-translation-zh-Hans-json.6ff57db6.chunk.js} +1 -1
  102. package/build/{content-type-builder-translation-zh-json.ad24dbeb.chunk.js → content-type-builder-translation-zh-json.3532b962.chunk.js} +1 -1
  103. package/build/content-type-builder.7a90cece.chunk.js +170 -0
  104. package/build/{email-settings-page.45695daa.chunk.js → email-settings-page.d494d1eb.chunk.js} +2 -2
  105. package/build/{i18n-settings-page.29308d0b.chunk.js → i18n-settings-page.47f78016.chunk.js} +1 -1
  106. package/build/index.html +1 -1
  107. package/build/main.22e2d4ec.js +2856 -0
  108. package/build/review-workflows-settings.f1104fb9.chunk.js +110 -0
  109. package/build/{runtime~main.efd966f6.js → runtime~main.437fdcbb.js} +2 -2
  110. package/build/sso-settings-page.ed6f3f15.chunk.js +1 -0
  111. package/build/transfer-tokens-create-page.1597e6ab.chunk.js +1 -0
  112. package/build/transfer-tokens-edit-page.8741529f.chunk.js +1 -0
  113. package/build/{transfer-tokens-list-page.7237443d.chunk.js → transfer-tokens-list-page.22147d2c.chunk.js} +2 -2
  114. package/build/upload-settings.cac210a0.chunk.js +14 -0
  115. package/build/upload.cbfeefa5.chunk.js +58 -0
  116. package/build/{users-advanced-settings-page.750b1f76.chunk.js → users-advanced-settings-page.18379a56.chunk.js} +1 -1
  117. package/build/users-email-settings-page.a87978e5.chunk.js +9 -0
  118. package/build/users-providers-settings-page.8876c1ee.chunk.js +14 -0
  119. package/build/{users-roles-settings-page.1f505119.chunk.js → users-roles-settings-page.0431f48c.chunk.js} +2 -2
  120. package/build/webhook-edit-page.a91f27a1.chunk.js +33 -0
  121. package/build/{webhook-list-page.940a40f1.chunk.js → webhook-list-page.65e1b5bb.chunk.js} +1 -1
  122. package/build/{zh-Hans-json.4cfef87d.chunk.js → zh-Hans-json.fada6f40.chunk.js} +1 -1
  123. package/ee/admin/content-manager/pages/EditView/InformationBox/InformationBoxEE.js +1 -1
  124. package/ee/admin/content-manager/pages/EditView/InformationBox/index.js +1 -3
  125. package/ee/admin/content-manager/{components/DynamicTable/CellContent/ReviewWorkflowsStage → pages/ListView/ReviewWorkflowsColumn}/ReviewWorkflowsStageEE.js +7 -2
  126. package/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/constants.js +24 -0
  127. package/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/index.js +1 -0
  128. package/ee/admin/hooks/useLicenseLimitNotification/index.js +17 -6
  129. package/ee/admin/hooks/useLicenseLimits/index.js +1 -32
  130. package/ee/admin/hooks/useLicenseLimits/useLicenseLimits.js +44 -0
  131. package/ee/admin/pages/AuthPage/components/Login/index.js +3 -5
  132. package/ee/admin/pages/HomePage/index.js +11 -0
  133. package/ee/admin/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo/index.js +7 -7
  134. package/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/hooks/useAuditLogsData.js +6 -4
  135. package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/useReviewWorkflows.js +3 -5
  136. package/ee/admin/pages/SettingsPage/pages/Users/ListPage/CreateAction/index.js +11 -6
  137. package/ee/admin/pages/SettingsPage/pages/Users/ListPage/index.js +13 -0
  138. package/ee/admin/pages/SettingsPage/pages/Users/components/MagicLink/index.js +3 -5
  139. package/ee/admin/pages/SettingsPage/pages/Webhooks/EditView/components/EventTable/index.js +1 -3
  140. package/index.js +0 -14
  141. package/package.json +12 -21
  142. package/webpack.alias.js +0 -3
  143. package/webpack.config.js +1 -75
  144. package/admin/src/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumn.js +0 -2
  145. package/admin/src/content-manager/pages/ListView/utils/buildQueryString.js +0 -36
  146. package/admin/src/content-manager/pages/ListView/utils/createPluginsFilter.js +0 -4
  147. package/admin/src/pages/App/utils/index.js +0 -3
  148. package/admin/src/pages/App/utils/unique-identifier.js +0 -12
  149. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo/index.js +0 -5
  150. package/build/1386.3b2aa6a7.chunk.js +0 -3
  151. package/build/1799.44d2e264.chunk.js +0 -33
  152. package/build/1970.39a2d75e.chunk.js +0 -1
  153. package/build/3269.1ea0f5a6.chunk.js +0 -1
  154. package/build/5932.6a23b88c.chunk.js +0 -1
  155. package/build/7018.98feed67.chunk.js +0 -1
  156. package/build/7259.fb69d4bf.chunk.js +0 -1
  157. package/build/Admin_InternalErrorPage.8911cb49.chunk.js +0 -1
  158. package/build/Admin_settingsPage.4069bb8a.chunk.js +0 -79
  159. package/build/Upload_ConfigureTheView.7a1cb9c9.chunk.js +0 -1
  160. package/build/admin-app.fea867af.chunk.js +0 -61
  161. package/build/admin-edit-users.200551e3.chunk.js +0 -10
  162. package/build/admin-users.3b12dca2.chunk.js +0 -11
  163. package/build/api-tokens-create-page.3dd4e921.chunk.js +0 -1
  164. package/build/audit-logs-settings-page.f538490f.chunk.js +0 -1
  165. package/build/content-manager.c40f5ff9.chunk.js +0 -1088
  166. package/build/content-type-builder.bd1bbff1.chunk.js +0 -166
  167. package/build/main.ee36abd9.js +0 -2927
  168. package/build/review-workflows-settings.93808ae0.chunk.js +0 -110
  169. package/build/sso-settings-page.0cdb96a6.chunk.js +0 -1
  170. package/build/transfer-tokens-create-page.de14cad4.chunk.js +0 -1
  171. package/build/transfer-tokens-edit-page.4f5e39af.chunk.js +0 -1
  172. package/build/upload-settings.cb6c14c3.chunk.js +0 -14
  173. package/build/upload.7e629643.chunk.js +0 -26
  174. package/build/users-email-settings-page.e9bcd865.chunk.js +0 -9
  175. package/build/users-providers-settings-page.a94253e9.chunk.js +0 -14
  176. package/build/webhook-edit-page.77ef4f1a.chunk.js +0 -33
  177. package/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumn.js +0 -58
  178. package/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/index.js +0 -3
@@ -43,7 +43,7 @@ const CollectionTypeFormWrapper = ({ allLayoutData, children, slug, id, origin }
43
43
  const { setCurrentStep } = useGuidedTour();
44
44
  const { trackUsage } = useTracking();
45
45
  const { push, replace } = useHistory();
46
- const [{ rawQuery }] = useQueryParams();
46
+ const [{ query, rawQuery }] = useQueryParams();
47
47
  const dispatch = useDispatch();
48
48
  const { componentsDataStructure, contentTypeDataStructure, data, isLoading, status } =
49
49
  useSelector(selectCrudReducer);
@@ -244,13 +244,15 @@ const CollectionTypeFormWrapper = ({ allLayoutData, children, slug, id, origin }
244
244
  */
245
245
  const endPoint =
246
246
  typeof origin === 'string'
247
- ? `${getRequestUrl(`collection-types/${slug}/clone/${origin}`)}${rawQuery}`
248
- : `${getRequestUrl(`collection-types/${slug}`)}${rawQuery}`;
247
+ ? getRequestUrl(`collection-types/${slug}/clone/${origin}`)
248
+ : getRequestUrl(`collection-types/${slug}`);
249
249
  try {
250
250
  // Show a loading button in the EditView/Header.js && lock the app => no navigation
251
251
  dispatch(setStatus('submit-pending'));
252
252
 
253
- const { data } = await post(endPoint, body);
253
+ const { data } = await post(endPoint, body, {
254
+ params: query,
255
+ });
254
256
 
255
257
  trackUsageRef.current('didCreateEntry', trackerProperty);
256
258
  toggleNotification({
@@ -286,11 +288,12 @@ const CollectionTypeFormWrapper = ({ allLayoutData, children, slug, id, origin }
286
288
  replace,
287
289
  slug,
288
290
  dispatch,
289
- rawQuery,
291
+ query,
290
292
  toggleNotification,
291
293
  setCurrentStep,
292
294
  queryClient,
293
295
  post,
296
+ rawQuery,
294
297
  ]
295
298
  );
296
299
 
@@ -75,20 +75,9 @@ function Inputs({
75
75
  return foundAttributeType === 'dynamiczone';
76
76
  }, [currentContentTypeLayout, fieldName]);
77
77
 
78
- const inputType = useMemo(() => {
79
- return getInputType(type);
80
- }, [type]);
81
-
82
- const inputValue = useMemo(() => {
83
- // Fix for input file multipe
84
- if (type === 'media' && !value) {
85
- return [];
86
- }
87
-
88
- return value;
89
- }, [type, value]);
78
+ const inputType = getInputType(type);
90
79
 
91
- const step = getStep(type);
80
+ const inputValue = type === 'media' && !value ? [] : value;
92
81
 
93
82
  const isUserAllowedToEditField = useMemo(() => {
94
83
  const joinedName = fieldName.join('.');
@@ -159,36 +148,6 @@ function Inputs({
159
148
 
160
149
  const { label, description, placeholder, visible } = metadatas;
161
150
 
162
- /**
163
- * It decides whether using the default `step` accoding to its `inputType` or the one
164
- * obtained from `metadatas`.
165
- *
166
- * The `metadatas.step` is returned when the `inputValue` is divisible by it or when the
167
- * `inputValue` is empty, otherwise the default `step` is returned.
168
- */
169
- const inputStep = useMemo(() => {
170
- if (!metadatas.step || (inputType !== 'datetime' && inputType !== 'time')) {
171
- return step;
172
- }
173
-
174
- if (!inputValue) {
175
- return metadatas.step;
176
- }
177
-
178
- let minutes;
179
-
180
- /**
181
- * Wtf is this?
182
- */
183
- if (inputType === 'datetime') {
184
- minutes = parseInt(inputValue.substr(14, 2), 10);
185
- } else if (inputType === 'time') {
186
- minutes = parseInt(inputValue.slice(-2), 10);
187
- }
188
-
189
- return minutes % metadatas.step === 0 ? metadatas.step : step;
190
- }, [inputType, inputValue, metadatas.step, step]);
191
-
192
151
  if (visible === false) {
193
152
  return null;
194
153
  }
@@ -271,7 +230,7 @@ function Inputs({
271
230
  options={options}
272
231
  placeholder={placeholder ? { id: placeholder, defaultMessage: placeholder } : null}
273
232
  required={fieldSchema.required || false}
274
- step={inputStep}
233
+ step={getStep(type)}
275
234
  type={customFieldUid || inputType}
276
235
  // validations={validations}
277
236
  value={inputValue}
@@ -317,9 +276,6 @@ const getStep = (type) => {
317
276
  case 'float':
318
277
  case 'decimal':
319
278
  return 0.01;
320
- case 'time':
321
- case 'datetime':
322
- return 15;
323
279
  default:
324
280
  return 1;
325
281
  }
@@ -1,4 +1,4 @@
1
- import { memo, useCallback, useEffect, useRef, useState } from 'react';
1
+ import { memo, useCallback, useEffect, useRef, useState, useMemo } from 'react';
2
2
 
3
3
  import {
4
4
  formatContentTypeData,
@@ -16,7 +16,7 @@ import { useQueryClient } from 'react-query';
16
16
  import { useDispatch, useSelector } from 'react-redux';
17
17
  import { useHistory } from 'react-router-dom';
18
18
 
19
- import buildQueryString from '../../pages/ListView/utils/buildQueryString';
19
+ import { buildValidGetParams } from '../../pages/ListView/utils';
20
20
  import {
21
21
  getData,
22
22
  getDataSucceeded,
@@ -40,7 +40,7 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
40
40
  const trackUsageRef = useRef(trackUsage);
41
41
  const [isCreatingEntry, setIsCreatingEntry] = useState(true);
42
42
  const [{ query, rawQuery }] = useQueryParams();
43
- const searchToSend = buildQueryString(query);
43
+ const params = useMemo(() => buildValidGetParams(query), [query]);
44
44
  const toggleNotification = useNotification();
45
45
  const dispatch = useDispatch();
46
46
  const { formatAPIError } = useAPIErrorHandler(getTrad);
@@ -110,8 +110,9 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
110
110
  setIsCreatingEntry(true);
111
111
 
112
112
  try {
113
- const { data } = await fetchClient.get(getRequestUrl(`${slug}${searchToSend}`), {
113
+ const { data } = await fetchClient.get(getRequestUrl(slug), {
114
114
  cancelToken: source.token,
115
+ params,
115
116
  });
116
117
 
117
118
  dispatch(getDataSucceeded(cleanReceivedData(data)));
@@ -143,16 +144,7 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
143
144
  fetchData(source);
144
145
 
145
146
  return () => source.cancel('Operation canceled by the user.');
146
- }, [
147
- fetchClient,
148
- cleanReceivedData,
149
- push,
150
- slug,
151
- dispatch,
152
- searchToSend,
153
- rawQuery,
154
- toggleNotification,
155
- ]);
147
+ }, [fetchClient, cleanReceivedData, push, slug, dispatch, params, rawQuery, toggleNotification]);
156
148
 
157
149
  const displayErrors = useCallback(
158
150
  (err) => {
@@ -166,7 +158,9 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
166
158
  try {
167
159
  trackUsageRef.current('willDeleteEntry', trackerProperty);
168
160
 
169
- const { data } = await del(getRequestUrl(`${slug}${searchToSend}`));
161
+ const { data } = await del(getRequestUrl(slug), {
162
+ params,
163
+ });
170
164
 
171
165
  toggleNotification({
172
166
  type: 'success',
@@ -187,17 +181,17 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
187
181
  return Promise.reject(err);
188
182
  }
189
183
  },
190
- [del, slug, displayErrors, toggleNotification, searchToSend, dispatch, rawQuery]
184
+ [del, slug, params, toggleNotification, dispatch, rawQuery, displayErrors]
191
185
  );
192
186
 
193
187
  const onPost = useCallback(
194
188
  async (body, trackerProperty) => {
195
- const endPoint = getRequestUrl(`${slug}${rawQuery}`);
189
+ const endPoint = getRequestUrl(slug);
196
190
 
197
191
  try {
198
192
  dispatch(setStatus('submit-pending'));
199
193
 
200
- const { data } = await put(endPoint, body);
194
+ const { data } = await put(endPoint, body, { params: query });
201
195
 
202
196
  trackUsageRef.current('didCreateEntry', trackerProperty);
203
197
  toggleNotification({
@@ -232,7 +226,7 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
232
226
  displayErrors,
233
227
  slug,
234
228
  dispatch,
235
- rawQuery,
229
+ query,
236
230
  toggleNotification,
237
231
  setCurrentStep,
238
232
  queryClient,
@@ -263,11 +257,17 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
263
257
  const onPublish = useCallback(async () => {
264
258
  try {
265
259
  trackUsageRef.current('willPublishEntry');
266
- const endPoint = getRequestUrl(`${slug}/actions/publish${searchToSend}`);
260
+ const endPoint = getRequestUrl(`${slug}/actions/publish`);
267
261
 
268
262
  dispatch(setStatus('publish-pending'));
269
263
 
270
- const { data } = await post(endPoint);
264
+ const { data } = await post(
265
+ endPoint,
266
+ {},
267
+ {
268
+ params,
269
+ }
270
+ );
271
271
 
272
272
  trackUsageRef.current('didPublishEntry');
273
273
  toggleNotification({
@@ -287,18 +287,18 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
287
287
 
288
288
  return Promise.reject(err);
289
289
  }
290
- }, [post, cleanReceivedData, displayErrors, slug, searchToSend, dispatch, toggleNotification]);
290
+ }, [slug, dispatch, post, params, toggleNotification, cleanReceivedData, displayErrors]);
291
291
 
292
292
  const onPut = useCallback(
293
293
  async (body, trackerProperty) => {
294
- const endPoint = getRequestUrl(`${slug}${rawQuery}`);
294
+ const endPoint = getRequestUrl(slug);
295
295
 
296
296
  try {
297
297
  trackUsageRef.current('willEditEntry', trackerProperty);
298
298
 
299
299
  dispatch(setStatus('submit-pending'));
300
300
 
301
- const { data } = await put(endPoint, body);
301
+ const { data } = await put(endPoint, body, { params: query });
302
302
 
303
303
  toggleNotification({
304
304
  type: 'success',
@@ -325,28 +325,25 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
325
325
  return Promise.reject(err);
326
326
  }
327
327
  },
328
- [
329
- put,
330
- cleanReceivedData,
331
- displayErrors,
332
- slug,
333
- dispatch,
334
- rawQuery,
335
- toggleNotification,
336
- queryClient,
337
- ]
328
+ [put, cleanReceivedData, displayErrors, slug, dispatch, query, toggleNotification, queryClient]
338
329
  );
339
330
 
340
331
  // The publish and unpublish method could be refactored but let's leave the duplication for now
341
332
  const onUnpublish = useCallback(async () => {
342
- const endPoint = getRequestUrl(`${slug}/actions/unpublish${searchToSend}`);
333
+ const endPoint = getRequestUrl(`${slug}/actions/unpublish`);
343
334
 
344
335
  dispatch(setStatus('unpublish-pending'));
345
336
 
346
337
  try {
347
338
  trackUsageRef.current('willUnpublishEntry');
348
339
 
349
- const { data } = await post(endPoint);
340
+ const { data } = await post(
341
+ endPoint,
342
+ {},
343
+ {
344
+ params,
345
+ }
346
+ );
350
347
 
351
348
  trackUsageRef.current('didUnpublishEntry');
352
349
  toggleNotification({
@@ -361,7 +358,7 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
361
358
  dispatch(setStatus('resolved'));
362
359
  displayErrors(err);
363
360
  }
364
- }, [post, cleanReceivedData, toggleNotification, displayErrors, slug, dispatch, searchToSend]);
361
+ }, [slug, dispatch, post, params, toggleNotification, cleanReceivedData, displayErrors]);
365
362
 
366
363
  return children({
367
364
  componentsDataStructure,
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
 
3
- import { Box, Button, Flex, MenuItem, SimpleMenu, Typography } from '@strapi/design-system';
3
+ import { Box, Flex, Typography } from '@strapi/design-system';
4
+ import { Menu } from '@strapi/design-system/v2';
4
5
  import { Plus } from '@strapi/icons';
5
6
  import PropTypes from 'prop-types';
6
7
  import { useIntl } from 'react-intl';
@@ -41,26 +42,27 @@ const DisplayedFields = ({ editLayout, fields, onRemoveField, onAddField }) => {
41
42
  {editLayout.map((row, index) => (
42
43
  <RowsLayout key={row.rowId} row={row} rowIndex={index} onRemoveField={onRemoveField} />
43
44
  ))}
44
- <SimpleMenu
45
- id="label"
46
- label={formatMessage({
47
- id: getTrad('containers.SettingPage.add.field'),
48
- defaultMessage: 'Insert another field',
49
- })}
50
- as={Button}
51
- data-testid="add-field"
52
- fullWidth
53
- startIcon={<Plus />}
54
- endIcon={null}
55
- variant="secondary"
56
- disabled={fields.length === 0}
57
- >
58
- {fields.map((field) => (
59
- <MenuItem key={field} onClick={() => onAddField(field)}>
60
- {field}
61
- </MenuItem>
62
- ))}
63
- </SimpleMenu>
45
+ <Menu.Root>
46
+ <Menu.Trigger
47
+ startIcon={<Plus />}
48
+ endIcon={null}
49
+ disabled={fields.length === 0}
50
+ fullWidth
51
+ variant="secondary"
52
+ >
53
+ {formatMessage({
54
+ id: getTrad('containers.SettingPage.add.field'),
55
+ defaultMessage: 'Insert another field',
56
+ })}
57
+ </Menu.Trigger>
58
+ <Menu.Content>
59
+ {fields.map((field) => (
60
+ <Menu.Item key={field} onSelect={() => onAddField(field)}>
61
+ {field}
62
+ </Menu.Item>
63
+ ))}
64
+ </Menu.Content>
65
+ </Menu.Root>
64
66
  </Flex>
65
67
  </Box>
66
68
  </Flex>
@@ -20,10 +20,6 @@ const FIELD_SIZES = [
20
20
  [12, '100%'],
21
21
  ];
22
22
 
23
- const TIME_FIELD_OPTIONS = [1, 5, 10, 15, 30, 60];
24
-
25
- const TIME_FIELD_TYPES = ['datetime', 'time'];
26
-
27
23
  const ModalForm = ({ onMetaChange, onSizeChange }) => {
28
24
  const { formatMessage } = useIntl();
29
25
  const { modifiedData, selectedField, attributes, fieldForm } = useLayoutDnd();
@@ -109,55 +105,30 @@ const ModalForm = ({ onMetaChange, onSizeChange }) => {
109
105
  const { type, customField } = attributes[selectedField];
110
106
  const { isResizable } = fieldSizes[customField] ?? fieldSizes[type];
111
107
 
112
- const sizeField = (
113
- <GridItem col={6} key="size">
114
- <Select
115
- value={fieldForm?.size}
116
- name="size"
117
- onChange={(value) => {
118
- onSizeChange({ name: selectedField, value });
119
- }}
120
- label={formatMessage({
121
- id: getTrad('containers.SettingPage.editSettings.size.label'),
122
- defaultMessage: 'Size',
123
- })}
124
- >
125
- {FIELD_SIZES.map(([value, label]) => (
126
- <Option key={value} value={value}>
127
- {label}
128
- </Option>
129
- ))}
130
- </Select>
131
- </GridItem>
132
- );
133
-
134
- const hasTimePicker = TIME_FIELD_TYPES.includes(attributes[selectedField].type);
135
-
136
- const timeStepField = (
137
- <GridItem col={6} key="step">
138
- <Select
139
- value={get(fieldForm, ['metadata', 'step'], 1)}
140
- name="step"
141
- onChange={(value) => onMetaChange({ target: { name: 'step', value } })}
142
- label={formatMessage({
143
- id: getTrad('containers.SettingPage.editSettings.step.label'),
144
- defaultMessage: 'Time interval (minutes)',
145
- })}
146
- >
147
- {TIME_FIELD_OPTIONS.map((value) => (
148
- <Option key={value} value={value}>
149
- {value}
150
- </Option>
151
- ))}
152
- </Select>
153
- </GridItem>
154
- );
155
-
156
108
  return (
157
109
  <>
158
110
  {metaFields}
159
- {isResizable && sizeField}
160
- {hasTimePicker && timeStepField}
111
+ {isResizable && (
112
+ <GridItem col={6} key="size">
113
+ <Select
114
+ value={fieldForm?.size}
115
+ name="size"
116
+ onChange={(value) => {
117
+ onSizeChange({ name: selectedField, value });
118
+ }}
119
+ label={formatMessage({
120
+ id: getTrad('containers.SettingPage.editSettings.size.label'),
121
+ defaultMessage: 'Size',
122
+ })}
123
+ >
124
+ {FIELD_SIZES.map(([value, label]) => (
125
+ <Option key={value} value={value}>
126
+ {label}
127
+ </Option>
128
+ ))}
129
+ </Select>
130
+ </GridItem>
131
+ )}
161
132
  </>
162
133
  );
163
134
  };
@@ -124,7 +124,7 @@ Root.propTypes = {
124
124
  children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
125
125
  };
126
126
 
127
- export default {
127
+ export const Information = {
128
128
  Root,
129
129
  Title,
130
130
  Body,
@@ -1,8 +1,7 @@
1
1
  import React from 'react';
2
2
 
3
- import Information from '../Information';
3
+ import { Information } from '../Information';
4
4
 
5
- // This component is overwritten by the EE counterpart
6
5
  export function InformationBoxCE() {
7
6
  return (
8
7
  <Information.Root>
@@ -1,3 +1 @@
1
- import { InformationBoxCE } from './InformationBoxCE';
2
-
3
- export default InformationBoxCE;
1
+ export * from './InformationBoxCE';
@@ -9,12 +9,12 @@ import {
9
9
  useTracking,
10
10
  } from '@strapi/helper-plugin';
11
11
  import { Layer, Pencil } from '@strapi/icons';
12
- import InformationBox from 'ee_else_ce/content-manager/pages/EditView/InformationBox';
13
12
  import PropTypes from 'prop-types';
14
13
  import { useIntl } from 'react-intl';
15
14
  import { useSelector } from 'react-redux';
16
15
  import { useLocation } from 'react-router-dom';
17
16
 
17
+ import { useEnterprise } from '../../../hooks/useEnterprise';
18
18
  import { selectAdminPermissions } from '../../../pages/App/selectors';
19
19
  import { InjectionZone } from '../../../shared/components';
20
20
  import CollectionTypeFormWrapper from '../../components/CollectionTypeFormWrapper';
@@ -29,6 +29,7 @@ import DraftAndPublishBadge from './DraftAndPublishBadge';
29
29
  import GridRow from './GridRow';
30
30
  import Header from './Header';
31
31
  import { useOnce } from './hooks/useOnce';
32
+ import { InformationBoxCE } from './InformationBox';
32
33
  import { selectCurrentLayout, selectAttributesLayout, selectCustomFieldUids } from './selectors';
33
34
  import { getFieldsActionMatchingPermissions } from './utils';
34
35
 
@@ -42,6 +43,12 @@ const EditView = ({ allowedActions, isSingleType, goBack, slug, id, origin, user
42
43
  const permissions = useSelector(selectAdminPermissions);
43
44
  const location = useLocation();
44
45
  const toggleNotification = useNotification();
46
+ const Information = useEnterprise(
47
+ InformationBoxCE,
48
+ async () =>
49
+ (await import('../../../../../ee/admin/content-manager/pages/EditView/InformationBox'))
50
+ .InformationBoxEE
51
+ );
45
52
 
46
53
  useOnce(() => {
47
54
  /**
@@ -91,6 +98,11 @@ const EditView = ({ allowedActions, isSingleType, goBack, slug, id, origin, user
91
98
  return <LoadingIndicatorPage />;
92
99
  }
93
100
 
101
+ // wait until the EE component is fully loaded before rendering, to prevent flickering
102
+ if (!Information) {
103
+ return null;
104
+ }
105
+
94
106
  return (
95
107
  <DataManagementWrapper allLayoutData={layout} slug={slug} id={id} origin={origin}>
96
108
  {({
@@ -202,7 +214,7 @@ const EditView = ({ allowedActions, isSingleType, goBack, slug, id, origin, user
202
214
  paddingTop={6}
203
215
  shadow="tableShadow"
204
216
  >
205
- <InformationBox />
217
+ <Information />
206
218
  <InjectionZone area="contentManager.editView.informations" />
207
219
  </Box>
208
220
  <Box as="aside" aria-labelledby="links">
@@ -1,6 +1,7 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
2
 
3
- import { Box, Flex, IconButton, MenuItem, SimpleMenu, Typography } from '@strapi/design-system';
3
+ import { Box, Flex, VisuallyHidden, Typography } from '@strapi/design-system';
4
+ import { Menu } from '@strapi/design-system/v2';
4
5
  import { Plus } from '@strapi/icons';
5
6
  import { PropTypes } from 'prop-types';
6
7
  import { useIntl } from 'react-intl';
@@ -10,19 +11,12 @@ import { getTrad } from '../../../utils';
10
11
 
11
12
  import DraggableCard from './DraggableCard';
12
13
 
13
- const FlexWrapper = styled(Box)`
14
+ const ScrollableContainer = styled(Box)`
14
15
  flex: ${({ size }) => size};
15
- `;
16
-
17
- const ScrollableContainer = styled(FlexWrapper)`
18
16
  overflow-x: scroll;
19
17
  overflow-y: hidden;
20
18
  `;
21
19
 
22
- const SelectContainer = styled(FlexWrapper)`
23
- max-width: ${32 / 16}rem;
24
- `;
25
-
26
20
  const SortDisplayedFields = ({
27
21
  displayedFields,
28
22
  listRemainingFields,
@@ -89,24 +83,32 @@ const SortDisplayedFields = ({
89
83
  ))}
90
84
  </Flex>
91
85
  </ScrollableContainer>
92
- <SelectContainer size="auto" paddingBottom={4}>
93
- <SimpleMenu
94
- label={formatMessage({
95
- id: getTrad('components.FieldSelect.label'),
96
- defaultMessage: 'Add a field',
97
- })}
98
- as={IconButton}
99
- icon={<Plus />}
86
+ <Menu.Root>
87
+ <Menu.Trigger
88
+ paddingLeft={2}
89
+ paddingRight={2}
90
+ justifyContent="center"
91
+ endIcon={null}
100
92
  disabled={listRemainingFields.length <= 0}
101
- data-testid="add-field"
93
+ marginBottom={4}
94
+ variant="tertiary"
102
95
  >
96
+ <VisuallyHidden as="span">
97
+ {formatMessage({
98
+ id: getTrad('components.FieldSelect.label'),
99
+ defaultMessage: 'Add a field',
100
+ })}
101
+ </VisuallyHidden>
102
+ <Plus aria-hidden focusable={false} style={{ position: 'relative', top: 2 }} />
103
+ </Menu.Trigger>
104
+ <Menu.Content>
103
105
  {listRemainingFields.map((field) => (
104
- <MenuItem key={field} onClick={() => handleAddField(field)}>
106
+ <Menu.Item key={field} onSelect={() => handleAddField(field)}>
105
107
  {metadatas[field].list.label || field}
106
- </MenuItem>
108
+ </Menu.Item>
107
109
  ))}
108
- </SimpleMenu>
109
- </SelectContainer>
110
+ </Menu.Content>
111
+ </Menu.Root>
110
112
  </Flex>
111
113
  </>
112
114
  );