@strapi/admin 4.12.0-beta.0 → 4.12.0-beta.3

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 (226) hide show
  1. package/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js +1 -3
  2. package/admin/src/content-manager/components/RelationInput/components/Option.js +6 -5
  3. package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +7 -7
  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 -23
  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/Body/index.js +191 -0
  12. package/admin/src/content-manager/pages/ListView/components/BulkActionButtons/ConfirmBulkActionDialog/index.js +164 -0
  13. package/admin/src/content-manager/pages/ListView/components/BulkActionButtons/SelectedEntriesModal/index.js +468 -0
  14. package/admin/src/content-manager/{components/DynamicTable/BulkActionsBar → pages/ListView/components/BulkActionButtons}/index.js +56 -132
  15. package/admin/src/content-manager/pages/ListView/components/CellContent/RelationMultiple/index.js +63 -69
  16. package/admin/src/content-manager/pages/ListView/components/CellContent/RepeatableComponent/index.js +28 -21
  17. package/admin/src/content-manager/pages/ListView/index.js +191 -132
  18. package/admin/src/hooks/useSettingsMenu/index.js +35 -21
  19. package/admin/src/layouts/UnauthenticatedLayout/LocaleToggle/index.js +7 -7
  20. package/admin/src/pages/AuthPage/components/Login/index.js +3 -5
  21. package/admin/src/pages/AuthPage/constants.js +3 -2
  22. package/admin/src/pages/AuthPage/index.js +18 -1
  23. package/admin/src/pages/HomePage/index.js +19 -7
  24. package/admin/src/pages/ProfilePage/index.js +6 -11
  25. package/admin/src/pages/SettingsPage/components/SettingsNav/index.js +13 -11
  26. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +17 -1
  27. package/admin/src/pages/SettingsPage/pages/Users/EditPage/index.js +15 -2
  28. package/admin/src/pages/SettingsPage/pages/Users/ListPage/CreateAction/index.js +2 -4
  29. package/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/index.js +15 -1
  30. package/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js +36 -5
  31. package/admin/src/pages/SettingsPage/pages/Users/components/MagicLink/index.js +3 -5
  32. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/EventTable/index.js +1 -3
  33. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/index.js +16 -1
  34. package/admin/src/translations/ca.json +4 -4
  35. package/admin/src/translations/de.json +4 -4
  36. package/admin/src/translations/dk.json +2 -2
  37. package/admin/src/translations/en.json +23 -4
  38. package/admin/src/translations/es.json +4 -4
  39. package/admin/src/translations/eu.json +4 -4
  40. package/admin/src/translations/fr.json +2 -2
  41. package/admin/src/translations/gu.json +4 -4
  42. package/admin/src/translations/hi.json +4 -4
  43. package/admin/src/translations/hu.json +4 -4
  44. package/admin/src/translations/ja.json +2 -2
  45. package/admin/src/translations/ko.json +2 -2
  46. package/admin/src/translations/ml.json +4 -4
  47. package/admin/src/translations/nl.json +4 -4
  48. package/admin/src/translations/pl.json +4 -4
  49. package/admin/src/translations/pt-BR.json +4 -4
  50. package/admin/src/translations/ru.json +4 -4
  51. package/admin/src/translations/sa.json +4 -4
  52. package/admin/src/translations/sk.json +4 -4
  53. package/admin/src/translations/sv.json +4 -4
  54. package/admin/src/translations/tr.json +4 -4
  55. package/admin/src/translations/zh-Hans.json +4 -4
  56. package/admin/src/translations/zh.json +4 -4
  57. package/build/1049.758a01f5.chunk.js +1 -0
  58. package/build/{3528.4845cf92.chunk.js → 1386.762d6eb8.chunk.js} +1 -1
  59. package/build/1727.b49f0713.chunk.js +1 -0
  60. package/build/{5563.a146acac.chunk.js → 2225.15d1df72.chunk.js} +2 -2
  61. package/build/2379.d33a2e16.chunk.js +1 -0
  62. package/build/2395.b0419a54.chunk.js +26 -0
  63. package/build/2801.18f38baf.chunk.js +1 -0
  64. package/build/{7394.423886bd.chunk.js → 3100.21c343fa.chunk.js} +1 -1
  65. package/build/311.cb0884bb.chunk.js +1 -0
  66. package/build/3483.ddd2d6df.chunk.js +1 -0
  67. package/build/{970.89601f27.chunk.js → 3739.63e352f1.chunk.js} +52 -20
  68. package/build/3984.ea7b8036.chunk.js +1 -0
  69. package/build/4546.ff9fdf30.chunk.js +1 -0
  70. package/build/502.ccb38223.chunk.js +1 -0
  71. package/build/5483.ed2c7efa.chunk.js +6 -0
  72. package/build/{5542.c62d0daf.chunk.js → 5542.2415a393.chunk.js} +6 -6
  73. package/build/6158.c974fd83.chunk.js +1 -0
  74. package/build/6691.f880a0b6.chunk.js +105 -0
  75. package/build/7030.b98dcedf.chunk.js +1 -0
  76. package/build/7464.c6d0565c.chunk.js +1 -0
  77. package/build/8276.23e0763b.chunk.js +26 -0
  78. package/build/8298.fd253c9f.chunk.js +117 -0
  79. package/build/918.54414509.chunk.js +1 -0
  80. package/build/{9932.7e2b71de.chunk.js → 9806.91360bb6.chunk.js} +79 -79
  81. package/build/{9944.29289a16.chunk.js → 9944.7af075a5.chunk.js} +1 -1
  82. package/build/{Admin-authenticatedApp.9d3afb79.chunk.js → Admin-authenticatedApp.36b3826c.chunk.js} +5 -5
  83. package/build/Admin_InternalErrorPage.f45f2462.chunk.js +1 -0
  84. package/build/{Admin_homePage.be30ef4e.chunk.js → Admin_homePage.ac9dfb86.chunk.js} +23 -15
  85. package/build/{Admin_marketplace.74a58e20.chunk.js → Admin_marketplace.f0b87fce.chunk.js} +1 -1
  86. package/build/{Admin_pluginsPage.ce464189.chunk.js → Admin_pluginsPage.8728ff6e.chunk.js} +1 -1
  87. package/build/{Admin_profilePage.2131eb68.chunk.js → Admin_profilePage.a968035f.chunk.js} +2 -2
  88. package/build/Admin_settingsPage.8c600d1a.chunk.js +111 -0
  89. package/build/Upload_ConfigureTheView.345ac1e0.chunk.js +1 -0
  90. package/build/admin-app.1c3f7fd6.chunk.js +36 -0
  91. package/build/{admin-edit-roles-page.3fdd6b9d.chunk.js → admin-edit-roles-page.a49b9f4f.chunk.js} +4 -4
  92. package/build/admin-edit-users.67704088.chunk.js +10 -0
  93. package/build/{admin-roles-list.e17b00d7.chunk.js → admin-roles-list.0c129e98.chunk.js} +1 -1
  94. package/build/admin-users.3279ffb0.chunk.js +11 -0
  95. package/build/api-tokens-create-page.46c2ea84.chunk.js +1 -0
  96. package/build/{api-tokens-edit-page.9a1dd2fa.chunk.js → api-tokens-edit-page.58139df9.chunk.js} +1 -1
  97. package/build/{api-tokens-list-page.a103f526.chunk.js → api-tokens-list-page.505bf7e0.chunk.js} +2 -2
  98. package/build/audit-logs-settings-page.4b422831.chunk.js +1 -0
  99. package/build/{ca-json.1fed5d8b.chunk.js → ca-json.a53c10b6.chunk.js} +1 -1
  100. package/build/content-manager.b8d593d4.chunk.js +1103 -0
  101. package/build/{content-type-builder-list-view.a200a358.chunk.js → content-type-builder-list-view.bf9be456.chunk.js} +9 -9
  102. package/build/{content-type-builder-translation-ar-json.56d8fcf4.chunk.js → content-type-builder-translation-ar-json.3e808e2f.chunk.js} +1 -1
  103. package/build/{content-type-builder-translation-cs-json.a5b299ca.chunk.js → content-type-builder-translation-cs-json.1ef9e106.chunk.js} +1 -1
  104. package/build/{content-type-builder-translation-de-json.393a76c0.chunk.js → content-type-builder-translation-de-json.63fcff7b.chunk.js} +1 -1
  105. package/build/{content-type-builder-translation-dk-json.fbd39bb7.chunk.js → content-type-builder-translation-dk-json.fd626b67.chunk.js} +1 -1
  106. package/build/{content-type-builder-translation-en-json.38e20391.chunk.js → content-type-builder-translation-en-json.ed29ff4d.chunk.js} +1 -1
  107. package/build/{content-type-builder-translation-es-json.9288474b.chunk.js → content-type-builder-translation-es-json.a4a361a9.chunk.js} +1 -1
  108. package/build/{content-type-builder-translation-fr-json.d35e269c.chunk.js → content-type-builder-translation-fr-json.499c3a46.chunk.js} +1 -1
  109. package/build/{content-type-builder-translation-id-json.f0513929.chunk.js → content-type-builder-translation-id-json.65255f93.chunk.js} +1 -1
  110. package/build/{content-type-builder-translation-it-json.aaf16753.chunk.js → content-type-builder-translation-it-json.e268ab74.chunk.js} +1 -1
  111. package/build/{content-type-builder-translation-ko-json.8fe21a7f.chunk.js → content-type-builder-translation-ko-json.04cb309d.chunk.js} +1 -1
  112. package/build/{content-type-builder-translation-ms-json.3b5d2d3e.chunk.js → content-type-builder-translation-ms-json.f6b743b9.chunk.js} +1 -1
  113. package/build/{content-type-builder-translation-nl-json.225ef5d3.chunk.js → content-type-builder-translation-nl-json.997fe8cc.chunk.js} +1 -1
  114. package/build/{content-type-builder-translation-pl-json.92f36be2.chunk.js → content-type-builder-translation-pl-json.634f638b.chunk.js} +1 -1
  115. package/build/{content-type-builder-translation-pt-BR-json.3bd10f89.chunk.js → content-type-builder-translation-pt-BR-json.6a95dc71.chunk.js} +1 -1
  116. package/build/{content-type-builder-translation-ru-json.9bfe47ce.chunk.js → content-type-builder-translation-ru-json.3af65503.chunk.js} +1 -1
  117. package/build/{content-type-builder-translation-sk-json.d03cc18a.chunk.js → content-type-builder-translation-sk-json.c6078082.chunk.js} +1 -1
  118. package/build/{content-type-builder-translation-sv-json.d23dcd32.chunk.js → content-type-builder-translation-sv-json.a6df2462.chunk.js} +1 -1
  119. package/build/{content-type-builder-translation-th-json.7ad256e2.chunk.js → content-type-builder-translation-th-json.122277cc.chunk.js} +1 -1
  120. package/build/{content-type-builder-translation-tr-json.926f6191.chunk.js → content-type-builder-translation-tr-json.41f44f77.chunk.js} +1 -1
  121. package/build/{content-type-builder-translation-uk-json.7bf19546.chunk.js → content-type-builder-translation-uk-json.e1315acd.chunk.js} +1 -1
  122. package/build/{content-type-builder-translation-zh-Hans-json.415577fb.chunk.js → content-type-builder-translation-zh-Hans-json.6ff57db6.chunk.js} +1 -1
  123. package/build/{content-type-builder-translation-zh-json.ad24dbeb.chunk.js → content-type-builder-translation-zh-json.3532b962.chunk.js} +1 -1
  124. package/build/content-type-builder.40534de5.chunk.js +170 -0
  125. package/build/{de-json.fcac7381.chunk.js → de-json.b3be02c7.chunk.js} +1 -1
  126. package/build/{dk-json.e34cad0d.chunk.js → dk-json.842aa391.chunk.js} +1 -1
  127. package/build/{email-settings-page.45695daa.chunk.js → email-settings-page.d494d1eb.chunk.js} +2 -2
  128. package/build/{en-json.fb9f6ddd.chunk.js → en-json.4c733bd1.chunk.js} +1 -1
  129. package/build/{es-json.42096084.chunk.js → es-json.f57b5335.chunk.js} +1 -1
  130. package/build/{eu-json.fb17c8f9.chunk.js → eu-json.633025f0.chunk.js} +1 -1
  131. package/build/{fr-json.69789980.chunk.js → fr-json.aa8839d2.chunk.js} +1 -1
  132. package/build/{gu-json.4d667d0c.chunk.js → gu-json.5bd62812.chunk.js} +1 -1
  133. package/build/{hi-json.323be97d.chunk.js → hi-json.9104eb78.chunk.js} +1 -1
  134. package/build/{hu-json.fe71e6c8.chunk.js → hu-json.9f4aae42.chunk.js} +1 -1
  135. package/build/{i18n-settings-page.29308d0b.chunk.js → i18n-settings-page.47f78016.chunk.js} +1 -1
  136. package/build/index.html +1 -1
  137. package/build/{ja-json.81b6d1e3.chunk.js → ja-json.91286391.chunk.js} +1 -1
  138. package/build/{ko-json.4539f4ba.chunk.js → ko-json.fcf3ec4b.chunk.js} +1 -1
  139. package/build/main.a12c4c0f.js +2856 -0
  140. package/build/{ml-json.8988e374.chunk.js → ml-json.557aa14c.chunk.js} +1 -1
  141. package/build/{nl-json.98345913.chunk.js → nl-json.b2b16eea.chunk.js} +1 -1
  142. package/build/{pl-json.59a5dab3.chunk.js → pl-json.f094a417.chunk.js} +1 -1
  143. package/build/{pt-BR-json.9410688b.chunk.js → pt-BR-json.dec7fb01.chunk.js} +1 -1
  144. package/build/review-workflows-settings-create-view.dfd87e1f.chunk.js +1 -0
  145. package/build/review-workflows-settings-edit-view.53c00afe.chunk.js +1 -0
  146. package/build/review-workflows-settings-list-view.a34be805.chunk.js +56 -0
  147. package/build/{ru-json.678cd48b.chunk.js → ru-json.8193d8c4.chunk.js} +1 -1
  148. package/build/{runtime~main.5e9bf4b3.js → runtime~main.d197f488.js} +2 -2
  149. package/build/{sa-json.6359a11c.chunk.js → sa-json.a56836f1.chunk.js} +1 -1
  150. package/build/{sk-json.2374f129.chunk.js → sk-json.bf2f057a.chunk.js} +1 -1
  151. package/build/sso-settings-page.ed6f3f15.chunk.js +1 -0
  152. package/build/{sv-json.ae6e71ea.chunk.js → sv-json.fd0e86c6.chunk.js} +1 -1
  153. package/build/{tr-json.bac5dbd3.chunk.js → tr-json.56c32cf6.chunk.js} +1 -1
  154. package/build/transfer-tokens-create-page.1597e6ab.chunk.js +1 -0
  155. package/build/transfer-tokens-edit-page.8741529f.chunk.js +1 -0
  156. package/build/{transfer-tokens-list-page.7237443d.chunk.js → transfer-tokens-list-page.22147d2c.chunk.js} +2 -2
  157. package/build/upload-settings.cac210a0.chunk.js +14 -0
  158. package/build/upload.cbfeefa5.chunk.js +58 -0
  159. package/build/{users-advanced-settings-page.750b1f76.chunk.js → users-advanced-settings-page.18379a56.chunk.js} +1 -1
  160. package/build/users-email-settings-page.a87978e5.chunk.js +9 -0
  161. package/build/users-providers-settings-page.8876c1ee.chunk.js +14 -0
  162. package/build/{users-roles-settings-page.d286426a.chunk.js → users-roles-settings-page.0431f48c.chunk.js} +2 -2
  163. package/build/webhook-edit-page.a91f27a1.chunk.js +33 -0
  164. package/build/{webhook-list-page.940a40f1.chunk.js → webhook-list-page.65e1b5bb.chunk.js} +1 -1
  165. package/build/{zh-Hans-json.fada6f40.chunk.js → zh-Hans-json.36d81cdc.chunk.js} +1 -1
  166. package/build/{zh-json.3529f1e5.chunk.js → zh-json.1cc86ff0.chunk.js} +1 -1
  167. package/ee/admin/content-manager/pages/EditView/InformationBox/InformationBoxEE.js +6 -3
  168. package/ee/admin/content-manager/pages/EditView/InformationBox/index.js +1 -3
  169. package/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/constants.js +2 -2
  170. package/ee/admin/pages/AuthPage/components/Login/index.js +3 -5
  171. package/ee/admin/pages/HomePage/index.js +11 -0
  172. package/ee/admin/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo/index.js +1 -3
  173. package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/ProtectedPage/ProtectedPage.js +1 -1
  174. package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/Stage.js +1 -1
  175. package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/CreateView/CreateView.js +38 -10
  176. package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/EditView.js +57 -8
  177. package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/ListView/ListView.js +3 -3
  178. package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/{getWorkflowValidationSchema.js → validateWorkflow.js} +33 -2
  179. package/ee/admin/pages/SettingsPage/pages/Users/ListPage/CreateAction/index.js +2 -4
  180. package/ee/admin/pages/SettingsPage/pages/Users/ListPage/index.js +13 -0
  181. package/ee/admin/pages/SettingsPage/pages/Users/components/MagicLink/index.js +3 -5
  182. package/ee/admin/pages/SettingsPage/pages/Webhooks/EditView/components/EventTable/index.js +1 -3
  183. package/ee/server/constants/default-stages.json +1 -1
  184. package/ee/server/constants/workflows.js +1 -0
  185. package/ee/server/services/review-workflows/validation.js +6 -0
  186. package/ee/server/validation/review-workflows.js +6 -2
  187. package/index.js +0 -14
  188. package/package.json +12 -20
  189. package/webpack.alias.js +0 -3
  190. package/webpack.config.js +1 -75
  191. package/admin/src/content-manager/pages/ListView/components/TableRows/index.js +0 -300
  192. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo/index.js +0 -5
  193. package/build/1386.3b2aa6a7.chunk.js +0 -3
  194. package/build/1970.39a2d75e.chunk.js +0 -1
  195. package/build/2799.cf9b491f.chunk.js +0 -1
  196. package/build/3269.1ea0f5a6.chunk.js +0 -1
  197. package/build/4485.d3c6dd1d.chunk.js +0 -6
  198. package/build/539.865446c0.chunk.js +0 -1
  199. package/build/6691.e6d5ac38.chunk.js +0 -105
  200. package/build/7018.f3dad3c1.chunk.js +0 -1
  201. package/build/7259.0e25ab5d.chunk.js +0 -1
  202. package/build/9465.d8fc1377.chunk.js +0 -112
  203. package/build/Admin_InternalErrorPage.8911cb49.chunk.js +0 -1
  204. package/build/Admin_settingsPage.074655f6.chunk.js +0 -79
  205. package/build/Upload_ConfigureTheView.7a1cb9c9.chunk.js +0 -1
  206. package/build/admin-app.3ede71ad.chunk.js +0 -61
  207. package/build/admin-edit-users.78552758.chunk.js +0 -10
  208. package/build/admin-users.c23322fc.chunk.js +0 -11
  209. package/build/api-tokens-create-page.3dd4e921.chunk.js +0 -1
  210. package/build/audit-logs-settings-page.37fe915c.chunk.js +0 -1
  211. package/build/content-manager.08541eeb.chunk.js +0 -1094
  212. package/build/content-type-builder.de22f7c9.chunk.js +0 -166
  213. package/build/main.a8ede50d.js +0 -2927
  214. package/build/review-workflows-settings-create-view.56f61e18.chunk.js +0 -1
  215. package/build/review-workflows-settings-edit-view.912bc9c0.chunk.js +0 -1
  216. package/build/review-workflows-settings-list-view.cf6a08d3.chunk.js +0 -56
  217. package/build/sso-settings-page.0cdb96a6.chunk.js +0 -1
  218. package/build/transfer-tokens-create-page.de14cad4.chunk.js +0 -1
  219. package/build/transfer-tokens-edit-page.4f5e39af.chunk.js +0 -1
  220. package/build/upload-settings.cb6c14c3.chunk.js +0 -14
  221. package/build/upload.7e629643.chunk.js +0 -26
  222. package/build/users-email-settings-page.e9bcd865.chunk.js +0 -9
  223. package/build/users-providers-settings-page.a94253e9.chunk.js +0 -14
  224. package/build/webhook-edit-page.77ef4f1a.chunk.js +0 -33
  225. /package/admin/src/content-manager/components/{DynamicTable → ListViewTable}/CellContent/PublicationState/PublicationState.js +0 -0
  226. /package/admin/src/content-manager/components/{DynamicTable → ListViewTable}/CellContent/PublicationState/index.js +0 -0
@@ -301,9 +301,7 @@ const CollectionTypeFormWrapper = ({ allLayoutData, children, slug, id, origin }
301
301
  try {
302
302
  trackUsageRef.current('willCheckDraftRelations');
303
303
 
304
- const endPoint = getRequestUrl(
305
- `collection-types/${slug}/${id}/actions/numberOfDraftRelations`
306
- );
304
+ const endPoint = getRequestUrl(`collection-types/${slug}/${id}/actions/countDraftRelations`);
307
305
  dispatch(setStatus('draft-relation-check-pending'));
308
306
 
309
307
  const numberOfDraftRelations = await fetchClient.get(endPoint);
@@ -20,6 +20,7 @@ const StyledBullet = styled.div`
20
20
 
21
21
  export const Option = ({ publicationState, mainField, id }) => {
22
22
  const { formatMessage } = useIntl();
23
+ const stringifiedDisplayValue = (mainField ?? id).toString();
23
24
 
24
25
  if (publicationState) {
25
26
  const isDraft = publicationState === 'draft';
@@ -34,18 +35,18 @@ export const Option = ({ publicationState, mainField, id }) => {
34
35
  const title = isDraft ? formatMessage(draftMessage) : formatMessage(publishedMessage);
35
36
 
36
37
  return (
37
- <ComboboxOption value={id} textValue={mainField ?? id}>
38
+ <ComboboxOption value={id} textValue={stringifiedDisplayValue}>
38
39
  <Flex>
39
40
  <StyledBullet title={title} isDraft={isDraft} />
40
- <Typography ellipsis>{mainField ?? id}</Typography>
41
+ <Typography ellipsis>{stringifiedDisplayValue}</Typography>
41
42
  </Flex>
42
43
  </ComboboxOption>
43
44
  );
44
45
  }
45
46
 
46
47
  return (
47
- <ComboboxOption value={id} textValue={mainField ?? id}>
48
- {mainField ?? id}
48
+ <ComboboxOption value={id} textValue={stringifiedDisplayValue}>
49
+ {stringifiedDisplayValue}
49
50
  </ComboboxOption>
50
51
  );
51
52
  };
@@ -57,6 +58,6 @@ Option.defaultProps = {
57
58
 
58
59
  Option.propTypes = {
59
60
  id: PropTypes.number.isRequired,
60
- mainField: PropTypes.string,
61
+ mainField: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
61
62
  publicationState: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),
62
63
  };
@@ -159,7 +159,7 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
159
159
  trackUsageRef.current('willDeleteEntry', trackerProperty);
160
160
 
161
161
  const { data } = await del(getRequestUrl(slug), {
162
- params: query,
162
+ params,
163
163
  });
164
164
 
165
165
  toggleNotification({
@@ -181,7 +181,7 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
181
181
  return Promise.reject(err);
182
182
  }
183
183
  },
184
- [del, slug, displayErrors, toggleNotification, query, dispatch, rawQuery]
184
+ [del, slug, params, toggleNotification, dispatch, rawQuery, displayErrors]
185
185
  );
186
186
 
187
187
  const onPost = useCallback(
@@ -237,7 +237,7 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
237
237
  try {
238
238
  trackUsageRef.current('willCheckDraftRelations');
239
239
 
240
- const endPoint = getRequestUrl(`${slug}/actions/numberOfDraftRelations`);
240
+ const endPoint = getRequestUrl(`${slug}/actions/countDraftRelations`);
241
241
  dispatch(setStatus('draft-relation-check-pending'));
242
242
 
243
243
  const numberOfDraftRelations = await fetchClient.get(endPoint);
@@ -265,7 +265,7 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
265
265
  endPoint,
266
266
  {},
267
267
  {
268
- params: query,
268
+ params,
269
269
  }
270
270
  );
271
271
 
@@ -287,7 +287,7 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
287
287
 
288
288
  return Promise.reject(err);
289
289
  }
290
- }, [post, cleanReceivedData, displayErrors, slug, query, dispatch, toggleNotification]);
290
+ }, [slug, dispatch, post, params, toggleNotification, cleanReceivedData, displayErrors]);
291
291
 
292
292
  const onPut = useCallback(
293
293
  async (body, trackerProperty) => {
@@ -341,7 +341,7 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
341
341
  endPoint,
342
342
  {},
343
343
  {
344
- params: query,
344
+ params,
345
345
  }
346
346
  );
347
347
 
@@ -358,7 +358,7 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
358
358
  dispatch(setStatus('resolved'));
359
359
  displayErrors(err);
360
360
  }
361
- }, [post, cleanReceivedData, toggleNotification, displayErrors, slug, dispatch, query]);
361
+ }, [slug, dispatch, post, params, toggleNotification, cleanReceivedData, displayErrors]);
362
362
 
363
363
  return children({
364
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>
@@ -105,32 +105,30 @@ const ModalForm = ({ onMetaChange, onSizeChange }) => {
105
105
  const { type, customField } = attributes[selectedField];
106
106
  const { isResizable } = fieldSizes[customField] ?? fieldSizes[type];
107
107
 
108
- const sizeField = (
109
- <GridItem col={6} key="size">
110
- <Select
111
- value={fieldForm?.size}
112
- name="size"
113
- onChange={(value) => {
114
- onSizeChange({ name: selectedField, value });
115
- }}
116
- label={formatMessage({
117
- id: getTrad('containers.SettingPage.editSettings.size.label'),
118
- defaultMessage: 'Size',
119
- })}
120
- >
121
- {FIELD_SIZES.map(([value, label]) => (
122
- <Option key={value} value={value}>
123
- {label}
124
- </Option>
125
- ))}
126
- </Select>
127
- </GridItem>
128
- );
129
-
130
108
  return (
131
109
  <>
132
110
  {metaFields}
133
- {isResizable && sizeField}
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
+ )}
134
132
  </>
135
133
  );
136
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
  );
@@ -0,0 +1,191 @@
1
+ import React from 'react';
2
+
3
+ import { BaseCheckbox, IconButton, Td, Flex } from '@strapi/design-system';
4
+ import { useTracking, useTableContext, Table } from '@strapi/helper-plugin';
5
+ import { Trash, Duplicate, Pencil } from '@strapi/icons';
6
+ import PropTypes from 'prop-types';
7
+ import { useIntl } from 'react-intl';
8
+ import { Link, useHistory } from 'react-router-dom';
9
+
10
+ import { usePluginsQueryParams } from '../../../../hooks';
11
+ import { ConfirmDialogDelete } from '../ConfirmDialogDelete';
12
+
13
+ const stopPropagation = (e) => e.stopPropagation();
14
+
15
+ /* -------------------------------------------------------------------------------------------------
16
+ * CheckboxDataCell
17
+ * -----------------------------------------------------------------------------------------------*/
18
+
19
+ const CheckboxDataCell = ({ rowId, index }) => {
20
+ const { selectedEntries, onSelectRow } = useTableContext();
21
+ const { formatMessage } = useIntl();
22
+ const isChecked = selectedEntries.findIndex((id) => id === rowId) !== -1;
23
+ const ariaLabel = formatMessage(
24
+ {
25
+ id: 'app.component.table.select.one-entry',
26
+ defaultMessage: `Select {target}`,
27
+ },
28
+ { target: index + 1 }
29
+ );
30
+
31
+ return (
32
+ <Td onClick={stopPropagation}>
33
+ <BaseCheckbox
34
+ aria-label={ariaLabel}
35
+ checked={isChecked}
36
+ onChange={() => {
37
+ onSelectRow({ name: rowId, value: !isChecked });
38
+ }}
39
+ />
40
+ </Td>
41
+ );
42
+ };
43
+
44
+ CheckboxDataCell.propTypes = {
45
+ rowId: PropTypes.number.isRequired,
46
+ index: PropTypes.number.isRequired,
47
+ };
48
+
49
+ /* -------------------------------------------------------------------------------------------------
50
+ * EntityActionsDataCell
51
+ * -----------------------------------------------------------------------------------------------*/
52
+
53
+ const EntityActionsDataCell = ({
54
+ rowId,
55
+ index,
56
+ canCreate,
57
+ canDelete,
58
+ setIsConfirmDeleteRowOpen,
59
+ handleCloneClick,
60
+ }) => {
61
+ const { formatMessage } = useIntl();
62
+ const { trackUsage } = useTracking();
63
+ const { setSelectedEntries } = useTableContext();
64
+ const pluginsQueryParams = usePluginsQueryParams();
65
+ const {
66
+ location: { pathname },
67
+ } = useHistory();
68
+
69
+ const itemLineText = formatMessage(
70
+ {
71
+ id: 'content-manager.components.ListViewTable.row-line',
72
+ defaultMessage: 'item line {number}',
73
+ },
74
+ { number: index + 1 }
75
+ );
76
+
77
+ return (
78
+ <Td>
79
+ <Flex gap={1} justifyContent="end" onClick={stopPropagation}>
80
+ <IconButton
81
+ forwardedAs={Link}
82
+ onClick={() => {
83
+ trackUsage('willEditEntryFromButton');
84
+ }}
85
+ to={{
86
+ pathname: `${pathname}/${rowId}`,
87
+ state: { from: pathname },
88
+ search: pluginsQueryParams,
89
+ }}
90
+ label={formatMessage(
91
+ { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },
92
+ { target: itemLineText }
93
+ )}
94
+ noBorder
95
+ >
96
+ <Pencil />
97
+ </IconButton>
98
+
99
+ {canCreate && (
100
+ <IconButton
101
+ onClick={handleCloneClick(rowId)}
102
+ label={formatMessage(
103
+ {
104
+ id: 'app.component.table.duplicate',
105
+ defaultMessage: 'Duplicate {target}',
106
+ },
107
+ { target: itemLineText }
108
+ )}
109
+ noBorder
110
+ >
111
+ <Duplicate />
112
+ </IconButton>
113
+ )}
114
+
115
+ {canDelete && (
116
+ <IconButton
117
+ onClick={() => {
118
+ trackUsage('willDeleteEntryFromList');
119
+ setSelectedEntries([rowId]);
120
+ setIsConfirmDeleteRowOpen(true);
121
+ }}
122
+ label={formatMessage(
123
+ { id: 'global.delete-target', defaultMessage: 'Delete {target}' },
124
+ { target: itemLineText }
125
+ )}
126
+ noBorder
127
+ >
128
+ <Trash />
129
+ </IconButton>
130
+ )}
131
+ </Flex>
132
+ </Td>
133
+ );
134
+ };
135
+
136
+ EntityActionsDataCell.defaultProps = {
137
+ canCreate: false,
138
+ canDelete: false,
139
+ };
140
+
141
+ EntityActionsDataCell.propTypes = {
142
+ rowId: PropTypes.number.isRequired,
143
+ index: PropTypes.number.isRequired,
144
+ setIsConfirmDeleteRowOpen: PropTypes.func.isRequired,
145
+ handleCloneClick: PropTypes.func.isRequired,
146
+ canCreate: PropTypes.bool,
147
+ canDelete: PropTypes.bool,
148
+ };
149
+
150
+ /* -------------------------------------------------------------------------------------------------
151
+ * Root
152
+ * -----------------------------------------------------------------------------------------------*/
153
+
154
+ const Root = ({ children, onConfirmDelete, isConfirmDeleteRowOpen, setIsConfirmDeleteRowOpen }) => {
155
+ const [isLoading, setIsLoading] = React.useState(false);
156
+ const { selectedEntries, setSelectedEntries } = useTableContext();
157
+
158
+ const handleConfirmDelete = async () => {
159
+ try {
160
+ setIsLoading(true);
161
+ await onConfirmDelete(selectedEntries[0]);
162
+ setIsConfirmDeleteRowOpen(false);
163
+ setIsLoading(false);
164
+ setSelectedEntries([]);
165
+ } catch (error) {
166
+ setIsLoading(false);
167
+ setIsConfirmDeleteRowOpen(false);
168
+ }
169
+ };
170
+
171
+ return (
172
+ <Table.Body>
173
+ {children}
174
+ <ConfirmDialogDelete
175
+ isConfirmButtonLoading={isLoading}
176
+ onConfirm={handleConfirmDelete}
177
+ onToggleDialog={() => setIsConfirmDeleteRowOpen(!isConfirmDeleteRowOpen)}
178
+ isOpen={isConfirmDeleteRowOpen}
179
+ />
180
+ </Table.Body>
181
+ );
182
+ };
183
+
184
+ Root.propTypes = {
185
+ children: PropTypes.node.isRequired,
186
+ onConfirmDelete: PropTypes.func.isRequired,
187
+ isConfirmDeleteRowOpen: PropTypes.bool.isRequired,
188
+ setIsConfirmDeleteRowOpen: PropTypes.func.isRequired,
189
+ };
190
+
191
+ export const Body = { CheckboxDataCell, EntityActionsDataCell, Root };