@strapi/admin 4.0.0 → 4.0.4

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 (348) hide show
  1. package/admin/src/components/LeftMenu/index.js +13 -5
  2. package/admin/src/components/Notifications/Notification/index.js +3 -3
  3. package/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js +2 -2
  4. package/admin/src/content-manager/components/ComponentInitializer/index.js +4 -9
  5. package/admin/src/content-manager/components/DragLayer/index.js +1 -1
  6. package/admin/src/content-manager/components/DynamicTable/CellContent/CellValue.js +12 -2
  7. package/admin/src/content-manager/components/DynamicTable/CellContent/utils/getNumberOfDecimals.js +8 -0
  8. package/admin/src/content-manager/components/DynamicTable/index.js +7 -0
  9. package/admin/src/content-manager/components/DynamicZone/components/DzLabel/index.js +24 -7
  10. package/admin/src/content-manager/components/DynamicZone/index.js +31 -15
  11. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/schema.js +4 -1
  12. package/admin/src/content-manager/components/InputUID/index.js +4 -0
  13. package/admin/src/content-manager/components/PreviewWysiwyg/Wrapper.js +4 -0
  14. package/admin/src/content-manager/components/RepeatableComponent/AccordionGroupCustom/index.js +1 -3
  15. package/admin/src/content-manager/components/RepeatableComponent/DraggedItem/IconButtonCustoms.js +0 -4
  16. package/admin/src/content-manager/components/RepeatableComponent/DraggedItem/index.js +36 -14
  17. package/admin/src/content-manager/components/RepeatableComponent/index.js +2 -2
  18. package/admin/src/content-manager/components/SelectWrapper/index.js +15 -81
  19. package/admin/src/content-manager/components/Wysiwyg/Editor.js +2 -3
  20. package/admin/src/content-manager/components/Wysiwyg/EditorLayout.js +2 -0
  21. package/admin/src/content-manager/components/Wysiwyg/WysiwygFooter.js +2 -4
  22. package/admin/src/content-manager/components/Wysiwyg/WysiwygNav.js +67 -62
  23. package/admin/src/content-manager/components/Wysiwyg/index.js +13 -4
  24. package/admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/formatLayouts.js +2 -2
  25. package/admin/src/content-manager/pages/App/LeftMenu/index.js +5 -7
  26. package/admin/src/content-manager/pages/App/index.js +12 -4
  27. package/admin/src/content-manager/pages/EditSettingsView/components/DisplayedFieldButton.js +1 -1
  28. package/admin/src/content-manager/pages/EditSettingsView/components/FieldButtonContent.js +1 -1
  29. package/admin/src/content-manager/pages/EditSettingsView/components/RelationalFieldButton.js +1 -1
  30. package/admin/src/content-manager/pages/EditSettingsView/index.js +1 -1
  31. package/admin/src/content-manager/pages/EditView/Informations/index.js +37 -13
  32. package/admin/src/content-manager/pages/ListSettingsView/components/CardPreview.js +19 -8
  33. package/admin/src/content-manager/pages/ListSettingsView/components/DraggableCard.js +124 -67
  34. package/admin/src/content-manager/pages/ListSettingsView/components/SortDisplayedFields.js +4 -1
  35. package/admin/src/content-manager/pages/ListSettingsView/index.js +1 -1
  36. package/admin/src/content-manager/pages/ListView/index.js +37 -20
  37. package/admin/src/hooks/useSettingsMenu/utils/defaultGlobalLinks.js +1 -1
  38. package/admin/src/pages/App/utils/unique-identifier.js +3 -1
  39. package/admin/src/pages/AuthPage/components/Register/index.js +4 -1
  40. package/admin/src/pages/AuthPage/index.js +8 -2
  41. package/admin/src/pages/AuthPage/utils/forms.js +2 -0
  42. package/admin/src/pages/ProfilePage/index.js +34 -6
  43. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +3 -2
  44. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +20 -7
  45. package/admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js +1 -1
  46. package/admin/src/pages/SettingsPage/pages/Users/EditPage/index.js +3 -3
  47. package/admin/src/pages/SettingsPage/pages/Users/EditPage/utils/layout.js +2 -0
  48. package/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/index.js +3 -3
  49. package/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/layout.js +2 -0
  50. package/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/stepper.js +1 -1
  51. package/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js +5 -11
  52. package/admin/src/pages/SettingsPage/pages/Users/ListPage/utils/tableHeaders.js +1 -1
  53. package/admin/src/pages/SettingsPage/pages/Users/components/MagicLink/index.js +1 -1
  54. package/admin/src/pages/SettingsPage/pages/Users/components/SelectRoles/index.js +2 -1
  55. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/EventInput/index.js +1 -1
  56. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/HeadersInput/index.js +1 -1
  57. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/index.js +3 -1
  58. package/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js +5 -5
  59. package/admin/src/translations/en.json +32 -23
  60. package/admin/src/translations/fr.json +315 -6
  61. package/admin/src/translations/ko.json +670 -263
  62. package/admin/src/translations/nl.json +1 -1
  63. package/admin/src/translations/zh-Hans.json +554 -204
  64. package/admin/src/translations/zh.json +482 -41
  65. package/build/{01a600d9e6e0dea21e33017a97bdf431.png → 01a600d9e6e0dea21e33.png} +0 -0
  66. package/build/{15026a3d58aeb282813457f060f2d6ac.png → 15026a3d58aeb2828134.png} +0 -0
  67. package/build/{1551f4f60c37af51121f106501f69b80.woff2 → 1551f4f60c37af51121f.woff2} +0 -0
  68. package/build/{1e59d2330b4c6deb84b340635ed36249.ttf → 1e59d2330b4c6deb84b3.ttf} +0 -0
  69. package/build/{20fd1704ea223900efa9fd4e869efb08.woff2 → 20fd1704ea223900efa9.woff2} +0 -0
  70. package/build/{2285773e6b4b172f07d9b777c81b0775.woff → 2285773e6b4b172f07d9.woff} +0 -0
  71. package/build/{23f19bb08961f37aaf692ff943823453.eot → 23f19bb08961f37aaf69.eot} +0 -0
  72. package/build/{2a9e9ef5c4c775bb7c7b3625041b1354.png → 2a9e9ef5c4c775bb7c7b.png} +0 -0
  73. package/build/{2f517e09eb2ca6650ff5bec5a95157ab.svg → 2f517e09eb2ca6650ff5.svg} +0 -0
  74. package/build/3742.2281afd7.chunk.js +1 -0
  75. package/build/4045.0b43d55e.chunk.js +1 -0
  76. package/build/4261.061aed35.chunk.js +1 -0
  77. package/build/4672.7ad6782a.chunk.js +1 -0
  78. package/build/{4689f52cc96215721344e51e5831eec1.svg → 4689f52cc96215721344.svg} +0 -0
  79. package/build/{4715.35096dd7.chunk.js → 4715.f134f37a.chunk.js} +1 -1
  80. package/build/{491974d108fe4002b2aaf7ffc48249a0.ttf → 491974d108fe4002b2aa.ttf} +0 -0
  81. package/build/{527940b104eb2ea366c8630f3f038603.ttf → 527940b104eb2ea366c8.ttf} +0 -0
  82. package/build/6060.3af8877e.chunk.js +2 -0
  83. package/build/{3226.0dc582b2.chunk.js.LICENSE.txt → 6060.3af8877e.chunk.js.LICENSE.txt} +1 -1
  84. package/build/{6250.11ba8b50.chunk.js → 6250.7b4872b1.chunk.js} +1 -1
  85. package/build/{5881.deb18c91.chunk.js → 6354.48168bc8.chunk.js} +2 -2
  86. package/build/{5881.deb18c91.chunk.js.LICENSE.txt → 6354.48168bc8.chunk.js.LICENSE.txt} +0 -0
  87. package/build/{77206a6bb316fa0aded5083cc57f92b9.eot → 77206a6bb316fa0aded5.eot} +0 -0
  88. package/build/{7a3337626410ca2f40718481c755640f.woff2 → 7a3337626410ca2f4071.woff2} +0 -0
  89. package/build/{7a8b4f130182d19a2d7c67d80c090397.svg → 7a8b4f130182d19a2d7c.svg} +0 -0
  90. package/build/8530.a978bde6.chunk.js +2 -0
  91. package/build/8530.a978bde6.chunk.js.LICENSE.txt +7 -0
  92. package/build/{8b43027f47b20503057dfbbaa9401fef.eot → 8b43027f47b20503057d.eot} +0 -0
  93. package/build/{9bbb245e67a133f6e486d8d2545e14a5.eot → 9bbb245e67a133f6e486.eot} +0 -0
  94. package/build/Admin-authenticatedApp.8c375af0.chunk.js +1 -0
  95. package/build/{Admin_homePage.31e37124.chunk.js → Admin_homePage.f9cdd615.chunk.js} +1 -1
  96. package/build/Admin_marketplace.4f6c77f2.chunk.js +1 -0
  97. package/build/Admin_pluginsPage.cd9a871c.chunk.js +1 -0
  98. package/build/Admin_profilePage.077e17a5.chunk.js +1 -0
  99. package/build/Admin_settingsPage.9752ef85.chunk.js +1 -0
  100. package/build/admin-edit-roles-page.27b047fc.chunk.js +1 -0
  101. package/build/admin-edit-users.a0dede23.chunk.js +1 -0
  102. package/build/admin-users.a11177c1.chunk.js +1 -0
  103. package/build/{api-tokens-create-page.ac4285ba.chunk.js → api-tokens-create-page.07be3e07.chunk.js} +1 -1
  104. package/build/{api-tokens-edit-page.b8900ddd.chunk.js → api-tokens-edit-page.d6afc60e.chunk.js} +1 -1
  105. package/build/api-tokens-list-page.da9714d8.chunk.js +1 -0
  106. package/build/{ar-json.9805489e.chunk.js → ar-json.d79e4709.chunk.js} +1 -1
  107. package/build/{b997a22a2e0b87ef1fa23258f14f3b27.ico → b997a22a2e0b87ef1fa2.ico} +0 -0
  108. package/build/{bb58e57c48a3e911f15fa834ff00d44a.woff → bb58e57c48a3e911f15f.woff} +0 -0
  109. package/build/{bd81ba6c07827282255d031b2a6f4fe4.png → bd81ba6c07827282255d.png} +0 -0
  110. package/build/{be9ee23c0c6390141475d519c2c5fb8f.ttf → be9ee23c0c6390141475.ttf} +0 -0
  111. package/build/{c1e38fd9e0e74ba58f7a2b77ef29fdd3.svg → c1e38fd9e0e74ba58f7a.svg} +0 -0
  112. package/build/{c3de6118ef47086ad05c83a1c78f006d.png → c3de6118ef47086ad05c.png} +0 -0
  113. package/build/codemirror-css.f9701755.chunk.js +1 -0
  114. package/build/codemirror-theme.1563c1c2.chunk.js +1 -0
  115. package/build/content-manager.51651b3b.chunk.js +1 -0
  116. package/build/{content-type-builder-translation-ar-json.bce4d624.chunk.js → content-type-builder-translation-ar-json.f1fedc12.chunk.js} +1 -1
  117. package/build/{content-type-builder-translation-cs-json.785866b6.chunk.js → content-type-builder-translation-cs-json.2f7e2289.chunk.js} +1 -1
  118. package/build/{content-type-builder-translation-de-json.6faa019a.chunk.js → content-type-builder-translation-de-json.46017754.chunk.js} +1 -1
  119. package/build/content-type-builder-translation-dk-json.5c6344f9.chunk.js +1 -0
  120. package/build/{content-type-builder-translation-en-json.d860718a.chunk.js → content-type-builder-translation-en-json.d70fc3af.chunk.js} +1 -1
  121. package/build/{content-type-builder-translation-es-json.5a4f519b.chunk.js → content-type-builder-translation-es-json.7e2055ad.chunk.js} +1 -1
  122. package/build/{content-type-builder-translation-fr-json.2156f48c.chunk.js → content-type-builder-translation-fr-json.8f66eb66.chunk.js} +1 -1
  123. package/build/content-type-builder-translation-id-json.aab2f426.chunk.js +1 -0
  124. package/build/{content-type-builder-translation-it-json.dc154c62.chunk.js → content-type-builder-translation-it-json.4c91e895.chunk.js} +1 -1
  125. package/build/{content-type-builder-translation-ja-json.9f8695a0.chunk.js → content-type-builder-translation-ja-json.c239ba90.chunk.js} +1 -1
  126. package/build/content-type-builder-translation-ko-json.2a5e0769.chunk.js +1 -0
  127. package/build/{content-type-builder-translation-ms-json.cfc21fb6.chunk.js → content-type-builder-translation-ms-json.124be88c.chunk.js} +1 -1
  128. package/build/{content-type-builder-translation-nl-json.4d742025.chunk.js → content-type-builder-translation-nl-json.98a240b8.chunk.js} +1 -1
  129. package/build/{content-type-builder-translation-pl-json.1b701a76.chunk.js → content-type-builder-translation-pl-json.2abc61bd.chunk.js} +1 -1
  130. package/build/{content-type-builder-translation-pt-BR-json.2c514ada.chunk.js → content-type-builder-translation-pt-BR-json.c0415545.chunk.js} +1 -1
  131. package/build/{content-type-builder-translation-pt-json.a3c4315c.chunk.js → content-type-builder-translation-pt-json.ab3e086d.chunk.js} +1 -1
  132. package/build/{content-type-builder-translation-ru-json.72173619.chunk.js → content-type-builder-translation-ru-json.1a6779fd.chunk.js} +1 -1
  133. package/build/{content-type-builder-translation-sk-json.e654be3b.chunk.js → content-type-builder-translation-sk-json.5c82f020.chunk.js} +1 -1
  134. package/build/{content-type-builder-translation-th-json.403aa6a4.chunk.js → content-type-builder-translation-th-json.24ee19eb.chunk.js} +1 -1
  135. package/build/{content-type-builder-translation-tr-json.72027971.chunk.js → content-type-builder-translation-tr-json.30434835.chunk.js} +1 -1
  136. package/build/{content-type-builder-translation-uk-json.a1b9f71b.chunk.js → content-type-builder-translation-uk-json.771662ef.chunk.js} +1 -1
  137. package/build/{content-type-builder-translation-zh-Hans-json.4c242866.chunk.js → content-type-builder-translation-zh-Hans-json.070020ae.chunk.js} +1 -1
  138. package/build/{content-type-builder-translation-zh-json.3b3eb4e8.chunk.js → content-type-builder-translation-zh-json.9708310d.chunk.js} +1 -1
  139. package/build/content-type-builder.c815d0c6.chunk.js +1 -0
  140. package/build/cropper-css.45c47fe3.chunk.js +1 -0
  141. package/build/{cs-json.ff08076e.chunk.js → cs-json.b8ba75b8.chunk.js} +1 -1
  142. package/build/{d878b0a6a1144760244ff0665888404c.woff2 → d878b0a6a1144760244f.woff2} +0 -0
  143. package/build/de-json.e01bdeae.chunk.js +1 -0
  144. package/build/dk-json.9516eb08.chunk.js +1 -0
  145. package/build/{eeccf4f66002c6f2ba24d3d22f2434c2.woff → eeccf4f66002c6f2ba24.woff} +0 -0
  146. package/build/email-settings-page.03e18bb2.chunk.js +1 -0
  147. package/build/email-translation-ar-json.95d90eb4.chunk.js +1 -0
  148. package/build/email-translation-cs-json.dfd1f3f2.chunk.js +1 -0
  149. package/build/email-translation-de-json.559a7d5f.chunk.js +1 -0
  150. package/build/email-translation-dk-json.e1480892.chunk.js +1 -0
  151. package/build/email-translation-en-json.fa0dc92b.chunk.js +1 -0
  152. package/build/email-translation-es-json.abbba8e3.chunk.js +1 -0
  153. package/build/email-translation-fr-json.49c3c888.chunk.js +1 -0
  154. package/build/email-translation-id-json.e3c2101d.chunk.js +1 -0
  155. package/build/email-translation-it-json.3de61cb6.chunk.js +1 -0
  156. package/build/email-translation-ja-json.66337e44.chunk.js +1 -0
  157. package/build/email-translation-ko-json.52bbd7b4.chunk.js +1 -0
  158. package/build/email-translation-ms-json.e39256df.chunk.js +1 -0
  159. package/build/email-translation-nl-json.12d28adb.chunk.js +1 -0
  160. package/build/email-translation-pl-json.9585a84e.chunk.js +1 -0
  161. package/build/email-translation-pt-BR-json.6c04b3ef.chunk.js +1 -0
  162. package/build/email-translation-pt-json.0239be04.chunk.js +1 -0
  163. package/build/email-translation-ru-json.f3b4fecc.chunk.js +1 -0
  164. package/build/email-translation-sk-json.76dbaaa6.chunk.js +1 -0
  165. package/build/email-translation-th-json.25ad73e7.chunk.js +1 -0
  166. package/build/email-translation-tr-json.ae04a9f2.chunk.js +1 -0
  167. package/build/email-translation-uk-json.03b27b08.chunk.js +1 -0
  168. package/build/email-translation-vi-json.3e1dd5b3.chunk.js +1 -0
  169. package/build/email-translation-zh-Hans-json.0df4ca59.chunk.js +1 -0
  170. package/build/email-translation-zh-json.82978eb0.chunk.js +1 -0
  171. package/build/en-json.9e3c8615.chunk.js +1 -0
  172. package/build/{es-json.060b658c.chunk.js → es-json.fa8ddd1d.chunk.js} +1 -1
  173. package/build/{f691f37e57f04c152e2315ab7dbad881.woff → f691f37e57f04c152e23.woff} +0 -0
  174. package/build/{fde9b1ad0670d29a251605a5e8eef02b.png → fde9b1ad0670d29a2516.png} +0 -0
  175. package/build/fontawesome-css-all.9c41f1d7.chunk.js +1 -0
  176. package/build/fontawesome-css.24c8dbfc.chunk.js +1 -0
  177. package/build/fr-json.bae03a2c.chunk.js +1 -0
  178. package/build/{he-json.fafa8569.chunk.js → he-json.86f9e663.chunk.js} +1 -1
  179. package/build/highlight.js.90b600ee.chunk.js +1 -0
  180. package/build/i18n-settings-page.89d1776c.chunk.js +1 -0
  181. package/build/i18n-translation-en-json.239b740f.chunk.js +1 -0
  182. package/build/i18n-translation-fr-json.b52474fc.chunk.js +1 -0
  183. package/build/i18n-translation-ko-json.e88e11ef.chunk.js +1 -0
  184. package/build/{i18n-translation-zh-Hans-json.670b4940.chunk.js → i18n-translation-zh-Hans-json.4c17fed0.chunk.js} +1 -1
  185. package/build/{id-json.3372dadc.chunk.js → id-json.0b0c9731.chunk.js} +1 -1
  186. package/build/index.html +1 -1
  187. package/build/{it-json.0e5d5fdb.chunk.js → it-json.939916bc.chunk.js} +1 -1
  188. package/build/{ja-json.14eaee93.chunk.js → ja-json.57abaacb.chunk.js} +1 -1
  189. package/build/ko-json.29633034.chunk.js +1 -0
  190. package/build/main.ca080a1e.js +2 -0
  191. package/build/{main.a5bd9650.js.LICENSE.txt → main.ca080a1e.js.LICENSE.txt} +0 -0
  192. package/build/{ms-json.a66beabc.chunk.js → ms-json.5e5d12f9.chunk.js} +1 -1
  193. package/build/nl-json.d757328d.chunk.js +1 -0
  194. package/build/{no-json.25f63ee7.chunk.js → no-json.ff46b126.chunk.js} +1 -1
  195. package/build/{pl-json.3d7884e1.chunk.js → pl-json.6bff1d54.chunk.js} +1 -1
  196. package/build/{pt-BR-json.e21cd994.chunk.js → pt-BR-json.6d1cfdb2.chunk.js} +1 -1
  197. package/build/{pt-json.21a66a61.chunk.js → pt-json.b23d9a79.chunk.js} +1 -1
  198. package/build/{ru-json.ca2b6c3c.chunk.js → ru-json.bff93229.chunk.js} +1 -1
  199. package/build/runtime~main.6f530910.js +1 -0
  200. package/build/{sk-json.7f750e28.chunk.js → sk-json.2eb1ec0d.chunk.js} +1 -1
  201. package/build/sso-settings-page.d4ab164b.chunk.js +1 -0
  202. package/build/{sv-json.3b5cc7f9.chunk.js → sv-json.8ac61ecf.chunk.js} +1 -1
  203. package/build/{th-json.694b4038.chunk.js → th-json.6e4502a3.chunk.js} +1 -1
  204. package/build/{tr-json.a842843a.chunk.js → tr-json.eaca955b.chunk.js} +1 -1
  205. package/build/uk-json.c50ad2a8.chunk.js +1 -0
  206. package/build/{upload-settings.8a380d3d.chunk.js → upload-settings.aa148b01.chunk.js} +1 -1
  207. package/build/{upload-translation-de-json.b4ff3c56.chunk.js → upload-translation-de-json.00f90715.chunk.js} +1 -1
  208. package/build/{upload-translation-dk-json.f37ae5c0.chunk.js → upload-translation-dk-json.e8c0a891.chunk.js} +1 -1
  209. package/build/{upload-translation-en-json.58d8ce44.chunk.js → upload-translation-en-json.31ea0622.chunk.js} +1 -1
  210. package/build/upload-translation-es-json.42b5c758.chunk.js +1 -0
  211. package/build/{upload-translation-fr-json.0f4b3839.chunk.js → upload-translation-fr-json.ccb4ad8b.chunk.js} +1 -1
  212. package/build/{upload-translation-he-json.4b5e48bc.chunk.js → upload-translation-he-json.5dc34ea8.chunk.js} +1 -1
  213. package/build/upload-translation-it-json.c1809a47.chunk.js +1 -0
  214. package/build/{upload-translation-ja-json.9e1193c7.chunk.js → upload-translation-ja-json.568f097e.chunk.js} +1 -1
  215. package/build/upload-translation-ko-json.da369eef.chunk.js +1 -0
  216. package/build/{upload-translation-ms-json.bfb86c2e.chunk.js → upload-translation-ms-json.be669f81.chunk.js} +1 -1
  217. package/build/{upload-translation-pl-json.e0282fa4.chunk.js → upload-translation-pl-json.67685825.chunk.js} +1 -1
  218. package/build/{upload-translation-pt-BR-json.ad6bb9f8.chunk.js → upload-translation-pt-BR-json.f7b1133d.chunk.js} +1 -1
  219. package/build/{upload-translation-ru-json.4303b6a0.chunk.js → upload-translation-ru-json.54c031aa.chunk.js} +1 -1
  220. package/build/{upload-translation-sk-json.90a0bc6c.chunk.js → upload-translation-sk-json.f643dfc2.chunk.js} +1 -1
  221. package/build/{upload-translation-th-json.cf0d62e0.chunk.js → upload-translation-th-json.88ee2090.chunk.js} +1 -1
  222. package/build/{upload-translation-uk-json.ec345d61.chunk.js → upload-translation-uk-json.1a90e73c.chunk.js} +1 -1
  223. package/build/{upload-translation-zh-Hans-json.f320fa39.chunk.js → upload-translation-zh-Hans-json.ac1dc0b9.chunk.js} +1 -1
  224. package/build/{upload-translation-zh-json.9ad30216.chunk.js → upload-translation-zh-json.164ac601.chunk.js} +1 -1
  225. package/build/{upload.1e3e2685.chunk.js → upload.1991e997.chunk.js} +1 -1
  226. package/build/{users-advanced-settings-page.bda19eae.chunk.js → users-advanced-settings-page.23ed7ee9.chunk.js} +1 -1
  227. package/build/users-email-settings-page.64dc429a.chunk.js +1 -0
  228. package/build/{users-permissions-translation-ar-json.6fe0dcf5.chunk.js → users-permissions-translation-ar-json.bdddd0d7.chunk.js} +1 -1
  229. package/build/{users-permissions-translation-cs-json.dd4bb452.chunk.js → users-permissions-translation-cs-json.7881d3ff.chunk.js} +1 -1
  230. package/build/{users-permissions-translation-de-json.1505b462.chunk.js → users-permissions-translation-de-json.8d53c619.chunk.js} +1 -1
  231. package/build/{users-permissions-translation-dk-json.6b47229f.chunk.js → users-permissions-translation-dk-json.a36b323b.chunk.js} +1 -1
  232. package/build/{users-permissions-translation-en-json.3e650c44.chunk.js → users-permissions-translation-en-json.1993655e.chunk.js} +1 -1
  233. package/build/{users-permissions-translation-es-json.768cc00e.chunk.js → users-permissions-translation-es-json.c8ef51bd.chunk.js} +1 -1
  234. package/build/users-permissions-translation-fr-json.a2172545.chunk.js +1 -0
  235. package/build/users-permissions-translation-id-json.8f17982a.chunk.js +1 -0
  236. package/build/{users-permissions-translation-it-json.baa4f859.chunk.js → users-permissions-translation-it-json.87952a24.chunk.js} +1 -1
  237. package/build/{users-permissions-translation-ja-json.3ddd4418.chunk.js → users-permissions-translation-ja-json.5915d9ef.chunk.js} +1 -1
  238. package/build/users-permissions-translation-ko-json.f1ca6cc4.chunk.js +1 -0
  239. package/build/{users-permissions-translation-ms-json.dc405667.chunk.js → users-permissions-translation-ms-json.2268324c.chunk.js} +1 -1
  240. package/build/{users-permissions-translation-nl-json.2d8e847a.chunk.js → users-permissions-translation-nl-json.4e1231dd.chunk.js} +1 -1
  241. package/build/{users-permissions-translation-pl-json.b150dfb0.chunk.js → users-permissions-translation-pl-json.107638b5.chunk.js} +1 -1
  242. package/build/{users-permissions-translation-pt-BR-json.0c494c69.chunk.js → users-permissions-translation-pt-BR-json.8dafc053.chunk.js} +1 -1
  243. package/build/{users-permissions-translation-pt-json.0fccc389.chunk.js → users-permissions-translation-pt-json.3322464f.chunk.js} +1 -1
  244. package/build/users-permissions-translation-ru-json.44dd1f10.chunk.js +1 -0
  245. package/build/{users-permissions-translation-sk-json.2602e768.chunk.js → users-permissions-translation-sk-json.fe7cc044.chunk.js} +1 -1
  246. package/build/users-permissions-translation-sv-json.e7e1684b.chunk.js +1 -0
  247. package/build/{users-permissions-translation-th-json.abe0558b.chunk.js → users-permissions-translation-th-json.bb544ee3.chunk.js} +1 -1
  248. package/build/{users-permissions-translation-tr-json.269ee593.chunk.js → users-permissions-translation-tr-json.30f3ca90.chunk.js} +1 -1
  249. package/build/{users-permissions-translation-uk-json.ffd9a4ee.chunk.js → users-permissions-translation-uk-json.634f2569.chunk.js} +1 -1
  250. package/build/{users-permissions-translation-vi-json.c2cd19d5.chunk.js → users-permissions-translation-vi-json.605d88bc.chunk.js} +1 -1
  251. package/build/{users-permissions-translation-zh-Hans-json.2d909528.chunk.js → users-permissions-translation-zh-Hans-json.85480dab.chunk.js} +1 -1
  252. package/build/{users-permissions-translation-zh-json.7f3027c5.chunk.js → users-permissions-translation-zh-json.99932731.chunk.js} +1 -1
  253. package/build/users-providers-settings-page.329f102a.chunk.js +1 -0
  254. package/build/users-roles-settings-page.e28982b6.chunk.js +1 -0
  255. package/build/{vi-json.c25f42fe.chunk.js → vi-json.e993857a.chunk.js} +1 -1
  256. package/build/webhook-edit-page.678af4e2.chunk.js +1 -0
  257. package/build/{webhook-list-page.aae66737.chunk.js → webhook-list-page.5abda9c2.chunk.js} +1 -1
  258. package/build/zh-Hans-json.fcc53388.chunk.js +1 -0
  259. package/build/zh-json.496bd6c4.chunk.js +1 -0
  260. package/ee/admin/pages/SettingsPage/pages/Roles/CreatePage/index.js +1 -1
  261. package/ee/admin/pages/SettingsPage/pages/Users/components/MagicLink/index.js +1 -1
  262. package/index.html +1 -1
  263. package/index.js +40 -1
  264. package/jest.config.front.js +10 -0
  265. package/package.json +36 -38
  266. package/server/register.js +5 -0
  267. package/server/routes/serve-admin-panel.js +59 -0
  268. package/server/strategies/api-token.js +2 -1
  269. package/webpack.alias.js +0 -6
  270. package/webpack.config.js +12 -10
  271. package/build/3226.0dc582b2.chunk.js +0 -2
  272. package/build/4261.b7b7ac00.chunk.js +0 -1
  273. package/build/4362.e71cf036.chunk.js +0 -1
  274. package/build/8447.32ee17be.chunk.js +0 -2
  275. package/build/8447.32ee17be.chunk.js.LICENSE.txt +0 -22
  276. package/build/849.fc26299c.chunk.js +0 -1
  277. package/build/9238.f112d6c9.chunk.js +0 -1
  278. package/build/Admin-authenticatedApp.0298a225.chunk.js +0 -1
  279. package/build/Admin_marketplace.201373e2.chunk.js +0 -1
  280. package/build/Admin_pluginsPage.22390055.chunk.js +0 -1
  281. package/build/Admin_profilePage.3aa61921.chunk.js +0 -1
  282. package/build/Admin_settingsPage.363ad01d.chunk.js +0 -1
  283. package/build/admin-edit-roles-page.e91bd9e5.chunk.js +0 -1
  284. package/build/admin-edit-users.bcdd2e4d.chunk.js +0 -1
  285. package/build/admin-users.a2d08780.chunk.js +0 -1
  286. package/build/api-tokens-list-page.d451255e.chunk.js +0 -1
  287. package/build/codemirror-css.7b034e03.chunk.js +0 -1
  288. package/build/codemirror-theme.4a209ed5.chunk.js +0 -1
  289. package/build/content-manager.4a449a52.chunk.js +0 -1
  290. package/build/content-type-builder-translation-dk-json.215eca36.chunk.js +0 -1
  291. package/build/content-type-builder-translation-id-json.e66f4e0a.chunk.js +0 -1
  292. package/build/content-type-builder-translation-ko-json.20ad3eac.chunk.js +0 -1
  293. package/build/content-type-builder.eeae4ee8.chunk.js +0 -1
  294. package/build/cropper-css.b71d1229.chunk.js +0 -1
  295. package/build/de-json.93987708.chunk.js +0 -1
  296. package/build/dk-json.97f8f309.chunk.js +0 -1
  297. package/build/email-settings-page.def5ceaf.chunk.js +0 -1
  298. package/build/email-translation-ar-json.536b0217.chunk.js +0 -1
  299. package/build/email-translation-cs-json.8f533c9b.chunk.js +0 -1
  300. package/build/email-translation-de-json.89f5373e.chunk.js +0 -1
  301. package/build/email-translation-dk-json.9c95cf96.chunk.js +0 -1
  302. package/build/email-translation-en-json.5ec38fe9.chunk.js +0 -1
  303. package/build/email-translation-es-json.fec78330.chunk.js +0 -1
  304. package/build/email-translation-fr-json.76afb1c3.chunk.js +0 -1
  305. package/build/email-translation-id-json.1b3e055a.chunk.js +0 -1
  306. package/build/email-translation-it-json.7273fee2.chunk.js +0 -1
  307. package/build/email-translation-ja-json.b75afc52.chunk.js +0 -1
  308. package/build/email-translation-ko-json.eb9a23cd.chunk.js +0 -1
  309. package/build/email-translation-ms-json.af7c5861.chunk.js +0 -1
  310. package/build/email-translation-nl-json.10fec023.chunk.js +0 -1
  311. package/build/email-translation-pl-json.ebda42d5.chunk.js +0 -1
  312. package/build/email-translation-pt-BR-json.338d8b7c.chunk.js +0 -1
  313. package/build/email-translation-pt-json.1cd0fedf.chunk.js +0 -1
  314. package/build/email-translation-ru-json.2c369331.chunk.js +0 -1
  315. package/build/email-translation-sk-json.ba2e026d.chunk.js +0 -1
  316. package/build/email-translation-th-json.16457076.chunk.js +0 -1
  317. package/build/email-translation-tr-json.92e0a5d9.chunk.js +0 -1
  318. package/build/email-translation-uk-json.d00dd5b1.chunk.js +0 -1
  319. package/build/email-translation-vi-json.ed425dde.chunk.js +0 -1
  320. package/build/email-translation-zh-Hans-json.e2c630b6.chunk.js +0 -1
  321. package/build/email-translation-zh-json.2a06ebac.chunk.js +0 -1
  322. package/build/en-json.6282a00f.chunk.js +0 -1
  323. package/build/fontawesome-css-all.162c8569.chunk.js +0 -1
  324. package/build/fontawesome-css.b1736497.chunk.js +0 -1
  325. package/build/fr-json.f7d484a8.chunk.js +0 -1
  326. package/build/highlight.js.3f31aed7.chunk.js +0 -1
  327. package/build/i18n-settings-page.00c74503.chunk.js +0 -1
  328. package/build/i18n-translation-en-json.17af559c.chunk.js +0 -1
  329. package/build/i18n-translation-fr-json.482f6933.chunk.js +0 -1
  330. package/build/ko-json.7203b08b.chunk.js +0 -1
  331. package/build/main.a5bd9650.js +0 -2
  332. package/build/nl-json.9c7f83db.chunk.js +0 -1
  333. package/build/runtime~main.bddfe3c6.js +0 -1
  334. package/build/sso-settings-page.bd7a8fd7.chunk.js +0 -1
  335. package/build/uk-json.3b8f967b.chunk.js +0 -1
  336. package/build/upload-translation-es-json.f9e9ffdf.chunk.js +0 -1
  337. package/build/upload-translation-it-json.fb24c332.chunk.js +0 -1
  338. package/build/users-email-settings-page.b1d1f551.chunk.js +0 -1
  339. package/build/users-permissions-translation-fr-json.12f3c930.chunk.js +0 -1
  340. package/build/users-permissions-translation-id-json.ec3deaf0.chunk.js +0 -1
  341. package/build/users-permissions-translation-ko-json.90c2d129.chunk.js +0 -1
  342. package/build/users-permissions-translation-ru-json.4389c542.chunk.js +0 -1
  343. package/build/users-permissions-translation-sv-json.438e46f7.chunk.js +0 -1
  344. package/build/users-providers-settings-page.733a51ec.chunk.js +0 -1
  345. package/build/users-roles-settings-page.0eb926e7.chunk.js +0 -1
  346. package/build/webhook-edit-page.634e50da.chunk.js +0 -1
  347. package/build/zh-Hans-json.e5041b18.chunk.js +0 -1
  348. package/build/zh-json.414d826f.chunk.js +0 -1
@@ -31,36 +31,40 @@ const DragButton = styled(ActionBox)`
31
31
  const FieldContainer = styled(Flex)`
32
32
  display: inline-flex;
33
33
  max-height: ${32 / 16}rem;
34
- background-color: ${({ theme }) => theme.colors.primary100};
35
- border-color: ${({ theme }) => theme.colors.primary200};
34
+ opacity: ${({ transparent }) => (transparent ? 0 : 1)};
35
+ background-color: ${({ theme, isSibling }) =>
36
+ isSibling ? theme.colors.neutral100 : theme.colors.primary100};
37
+ border: 1px solid
38
+ ${({ theme, isSibling }) => (isSibling ? theme.colors.neutral150 : theme.colors.primary200)};
36
39
 
37
40
  svg {
38
41
  width: ${10 / 16}rem;
39
42
  height: ${10 / 16}rem;
40
43
 
41
44
  path {
42
- fill: ${({ theme }) => theme.colors.primary600};
45
+ fill: ${({ theme, isSibling }) => (isSibling ? undefined : theme.colors.primary600)};
43
46
  }
44
47
  }
45
48
 
46
49
  ${Typography} {
47
- color: ${({ theme }) => theme.colors.primary600};
50
+ color: ${({ theme, isSibling }) => (isSibling ? undefined : theme.colors.primary600)};
48
51
  }
49
52
 
50
53
  ${DragButton} {
51
- border-right: 1px solid ${({ theme }) => theme.colors.primary200};
54
+ border-right: 1px solid
55
+ ${({ theme, isSibling }) => (isSibling ? theme.colors.neutral150 : theme.colors.primary200)};
52
56
  }
53
57
  `;
54
58
 
55
- const CardPreview = ({ labelField }) => {
59
+ const CardPreview = ({ labelField, transparent, isSibling }) => {
56
60
  const cardEllipsisTitle = ellipsisCardTitle(labelField);
57
61
 
58
62
  return (
59
63
  <FieldContainer
60
- borderColor="neutral150"
61
- background="neutral100"
62
64
  hasRadius
63
65
  justifyContent="space-between"
66
+ transparent={transparent}
67
+ isSibling={isSibling}
64
68
  >
65
69
  <Stack horizontal size={3}>
66
70
  <DragButton alignItems="center">
@@ -80,8 +84,15 @@ const CardPreview = ({ labelField }) => {
80
84
  );
81
85
  };
82
86
 
87
+ CardPreview.defaultProps = {
88
+ isSibling: false,
89
+ transparent: false,
90
+ };
91
+
83
92
  CardPreview.propTypes = {
93
+ isSibling: PropTypes.bool,
84
94
  labelField: PropTypes.string.isRequired,
95
+ transparent: PropTypes.bool,
85
96
  };
86
97
 
87
98
  export default CardPreview;
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useRef } from 'react';
1
+ import React, { useEffect, useRef, useState } from 'react';
2
2
  import styled from 'styled-components';
3
3
  import PropTypes from 'prop-types';
4
4
  import { useDrag, useDrop } from 'react-dnd';
@@ -11,6 +11,7 @@ import { Stack } from '@strapi/design-system/Stack';
11
11
  import Pencil from '@strapi/icons/Pencil';
12
12
  import Cross from '@strapi/icons/Cross';
13
13
  import Drag from '@strapi/icons/Drag';
14
+ import CardPreview from './CardPreview';
14
15
  import ellipsisCardTitle from '../utils/ellipsisCardTitle';
15
16
  import { getTrad, ItemTypes } from '../../../utils';
16
17
 
@@ -38,7 +39,6 @@ const DragButton = styled(ActionButton)`
38
39
  const FieldContainer = styled(Flex)`
39
40
  max-height: ${32 / 16}rem;
40
41
  cursor: pointer;
41
- opacity: ${({ isDragging }) => (isDragging ? 0 : 1)};
42
42
 
43
43
  svg {
44
44
  width: ${10 / 16}rem;
@@ -77,14 +77,18 @@ const FieldWrapper = styled(Box)`
77
77
 
78
78
  const DraggableCard = ({
79
79
  index,
80
+ isDraggingSibling,
80
81
  labelField,
81
82
  onClickEditField,
82
83
  onMoveField,
83
84
  onRemoveField,
84
85
  name,
86
+ setIsDraggingSibling,
85
87
  }) => {
86
88
  const { formatMessage } = useIntl();
87
- const ref = useRef(null);
89
+ const dragRef = useRef(null);
90
+ const dropRef = useRef(null);
91
+ const [, forceRerenderAfterDnd] = useState(false);
88
92
  const editButtonRef = useRef();
89
93
  const cardEllipsisTitle = ellipsisCardTitle(labelField);
90
94
 
@@ -96,8 +100,8 @@ const DraggableCard = ({
96
100
 
97
101
  const [, drop] = useDrop({
98
102
  accept: ItemTypes.FIELD,
99
- hover(item) {
100
- if (!ref.current) {
103
+ hover(item, monitor) {
104
+ if (!dropRef.current) {
101
105
  return;
102
106
  }
103
107
  const dragIndex = item.index;
@@ -108,6 +112,27 @@ const DraggableCard = ({
108
112
  return;
109
113
  }
110
114
 
115
+ // Determine rectangle on screen
116
+ const hoverBoundingRect = dropRef.current.getBoundingClientRect();
117
+ // Get vertical middle
118
+ const hoverMiddleX = (hoverBoundingRect.right - hoverBoundingRect.left) / 2;
119
+ // Determine mouse position
120
+ const clientOffset = monitor.getClientOffset();
121
+ // Get pixels to the top
122
+ const hoverClientX = clientOffset.x - hoverBoundingRect.left;
123
+
124
+ // Only perform the move when the mouse has crossed half of the items height
125
+ // When dragging downwards, only move when the cursor is below 50%
126
+ // When dragging upwards, only move when the cursor is above 50%
127
+ // Dragging downwards
128
+ if (dragIndex > hoverIndex && hoverClientX > hoverMiddleX) {
129
+ return;
130
+ }
131
+ // Dragging upwards
132
+ if (dragIndex < hoverIndex && hoverClientX < hoverMiddleX) {
133
+ return;
134
+ }
135
+
111
136
  onMoveField(dragIndex, hoverIndex);
112
137
 
113
138
  item.index = hoverIndex;
@@ -122,86 +147,118 @@ const DraggableCard = ({
122
147
  collect: monitor => ({
123
148
  isDragging: monitor.isDragging(),
124
149
  }),
150
+ end: () => {
151
+ setIsDraggingSibling(false);
152
+ },
125
153
  });
126
154
 
127
155
  useEffect(() => {
128
- preview(getEmptyImage(), { captureDraggingState: true });
156
+ preview(getEmptyImage(), { captureDraggingState: false });
129
157
  }, [preview]);
130
158
 
131
- drag(drop(ref));
159
+ useEffect(() => {
160
+ if (isDragging) {
161
+ setIsDraggingSibling(true);
162
+ }
163
+ }, [isDragging, setIsDraggingSibling]);
164
+
165
+ // Effect in order to force a rerender after reordering the components
166
+ // Since we are removing the Accordion when doing the DnD we are losing the dragRef, therefore the replaced element cannot be dragged
167
+ // anymore, this hack forces a rerender in order to apply the dragRef
168
+ useEffect(() => {
169
+ if (!isDraggingSibling) {
170
+ forceRerenderAfterDnd(prev => !prev);
171
+ }
172
+ }, [isDraggingSibling]);
173
+
174
+ // Create the refs
175
+ // We need 1 for the drop target
176
+ // 1 for the drag target
177
+ const refs = {
178
+ dragRef: drag(dragRef),
179
+ dropRef: drop(dropRef),
180
+ };
132
181
 
133
182
  return (
134
- <FieldWrapper>
135
- <FieldContainer
136
- borderColor="neutral150"
137
- background="neutral100"
138
- hasRadius
139
- justifyContent="space-between"
140
- onClick={handleClickEditRow}
141
- isDragging={isDragging}
142
- >
143
- <Stack horizontal size={3}>
144
- <DragButton
145
- aria-label={formatMessage(
146
- {
147
- id: getTrad('components.DraggableCard.move.field'),
148
- defaultMessage: 'Move {item}',
149
- },
150
- { item: name }
151
- )}
152
- onClick={e => e.stopPropagation()}
153
- ref={ref}
154
- type="button"
155
- >
156
- <Drag />
157
- </DragButton>
158
- <Typography fontWeight="bold">{cardEllipsisTitle}</Typography>
159
- </Stack>
160
- <Flex paddingLeft={3}>
161
- <ActionButton
162
- ref={editButtonRef}
163
- onClick={e => {
164
- e.stopPropagation();
165
- onClickEditField(name);
166
- }}
167
- aria-label={formatMessage(
168
- {
169
- id: getTrad('components.DraggableCard.edit.field'),
170
- defaultMessage: 'Edit {item}',
171
- },
172
- { item: name }
173
- )}
174
- type="button"
175
- >
176
- <Pencil />
177
- </ActionButton>
178
- <ActionButton
179
- onClick={onRemoveField}
180
- data-testid={`delete-${name}`}
181
- aria-label={formatMessage(
182
- {
183
- id: getTrad('components.DraggableCard.delete.field'),
184
- defaultMessage: 'Delete {item}',
185
- },
186
- { item: name }
187
- )}
188
- type="button"
189
- >
190
- <Cross />
191
- </ActionButton>
192
- </Flex>
193
- </FieldContainer>
183
+ <FieldWrapper ref={refs ? refs.dropRef : null}>
184
+ {isDragging && <CardPreview transparent labelField={cardEllipsisTitle} />}
185
+ {!isDragging && isDraggingSibling && <CardPreview isSibling labelField={cardEllipsisTitle} />}
186
+
187
+ {!isDragging && !isDraggingSibling && (
188
+ <FieldContainer
189
+ borderColor="neutral150"
190
+ background="neutral100"
191
+ hasRadius
192
+ justifyContent="space-between"
193
+ onClick={handleClickEditRow}
194
+ isDragging={isDragging}
195
+ >
196
+ <Stack horizontal size={3}>
197
+ <DragButton
198
+ as='span'
199
+ aria-label={formatMessage(
200
+ {
201
+ id: getTrad('components.DraggableCard.move.field'),
202
+ defaultMessage: 'Move {item}',
203
+ },
204
+ { item: name }
205
+ )}
206
+ onClick={e => e.stopPropagation()}
207
+ ref={refs.dragRef}
208
+ type="button"
209
+ >
210
+ <Drag />
211
+ </DragButton>
212
+ <Typography fontWeight="bold">{cardEllipsisTitle}</Typography>
213
+ </Stack>
214
+ <Flex paddingLeft={3}>
215
+ <ActionButton
216
+ ref={editButtonRef}
217
+ onClick={e => {
218
+ e.stopPropagation();
219
+ onClickEditField(name);
220
+ }}
221
+ aria-label={formatMessage(
222
+ {
223
+ id: getTrad('components.DraggableCard.edit.field'),
224
+ defaultMessage: 'Edit {item}',
225
+ },
226
+ { item: name }
227
+ )}
228
+ type="button"
229
+ >
230
+ <Pencil />
231
+ </ActionButton>
232
+ <ActionButton
233
+ onClick={onRemoveField}
234
+ data-testid={`delete-${name}`}
235
+ aria-label={formatMessage(
236
+ {
237
+ id: getTrad('components.DraggableCard.delete.field'),
238
+ defaultMessage: 'Delete {item}',
239
+ },
240
+ { item: name }
241
+ )}
242
+ type="button"
243
+ >
244
+ <Cross />
245
+ </ActionButton>
246
+ </Flex>
247
+ </FieldContainer>
248
+ )}
194
249
  </FieldWrapper>
195
250
  );
196
251
  };
197
252
 
198
253
  DraggableCard.propTypes = {
199
254
  index: PropTypes.number.isRequired,
255
+ isDraggingSibling: PropTypes.bool.isRequired,
200
256
  labelField: PropTypes.string.isRequired,
201
257
  name: PropTypes.string.isRequired,
202
258
  onClickEditField: PropTypes.func.isRequired,
203
259
  onMoveField: PropTypes.func.isRequired,
204
260
  onRemoveField: PropTypes.func.isRequired,
261
+ setIsDraggingSibling: PropTypes.func.isRequired,
205
262
  };
206
263
 
207
264
  export default DraggableCard;
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { useState } from 'react';
2
2
  import styled from 'styled-components';
3
3
  import { PropTypes } from 'prop-types';
4
4
  import { useIntl } from 'react-intl';
@@ -35,6 +35,7 @@ const SortDisplayedFields = ({
35
35
  onRemoveField,
36
36
  }) => {
37
37
  const { formatMessage } = useIntl();
38
+ const [isDraggingSibling, setIsDraggingSibling] = useState(false);
38
39
 
39
40
  return (
40
41
  <>
@@ -61,11 +62,13 @@ const SortDisplayedFields = ({
61
62
  <DraggableCard
62
63
  key={field}
63
64
  index={index}
65
+ isDraggingSibling={isDraggingSibling}
64
66
  onMoveField={onMoveField}
65
67
  onClickEditField={onClickEditField}
66
68
  onRemoveField={e => onRemoveField(e, index)}
67
69
  name={field}
68
70
  labelField={metadatas[field].list.label || field}
71
+ setIsDraggingSibling={setIsDraggingSibling}
69
72
  />
70
73
  ))}
71
74
  </Stack>
@@ -191,7 +191,7 @@ const ListSettingsView = ({ layout, slug }) => {
191
191
  <HeaderLayout
192
192
  navigationAction={
193
193
  <Link startIcon={<ArrowLeft />} to={goBackUrl} id="go-back">
194
- {formatMessage({ id: 'app.components.go-back', defaultMessage: 'Go back' })}
194
+ {formatMessage({ id: 'app.components.go-back', defaultMessage: 'Back' })}
195
195
  </Link>
196
196
  }
197
197
  primaryAction={
@@ -24,6 +24,8 @@ import { Box } from '@strapi/design-system/Box';
24
24
  import { ActionLayout, ContentLayout, HeaderLayout } from '@strapi/design-system/Layout';
25
25
  import { useNotifyAT } from '@strapi/design-system/LiveRegions';
26
26
  import { Button } from '@strapi/design-system/Button';
27
+ import { Link } from '@strapi/design-system/Link';
28
+ import ArrowLeft from '@strapi/icons/ArrowLeft';
27
29
  import Plus from '@strapi/icons/Plus';
28
30
  import Cog from '@strapi/icons/Cog';
29
31
  import axios from 'axios';
@@ -234,29 +236,43 @@ function ListView({
234
236
  )
235
237
  : null;
236
238
 
237
- const createAction = canCreate ? (
238
- <Button
239
- onClick={() => {
240
- const trackerProperty = hasDraftAndPublish ? { status: 'draft' } : {};
241
-
242
- trackUsageRef.current('willCreateEntry', trackerProperty);
243
- push({
244
- pathname: `${pathname}/create`,
245
- search: query.plugins ? pluginsQueryParams : '',
246
- });
247
- }}
248
- startIcon={<Plus />}
249
- >
250
- {formatMessage({
251
- id: getTrad('HeaderLayout.button.label-add-entry'),
252
- defaultMessage: 'Add new entry',
253
- })}
254
- </Button>
255
- ) : null;
239
+ const getCreateAction = props =>
240
+ canCreate ? (
241
+ <Button
242
+ {...props}
243
+ onClick={() => {
244
+ const trackerProperty = hasDraftAndPublish ? { status: 'draft' } : {};
245
+
246
+ trackUsageRef.current('willCreateEntry', trackerProperty);
247
+ push({
248
+ pathname: `${pathname}/create`,
249
+ search: query.plugins ? pluginsQueryParams : '',
250
+ });
251
+ }}
252
+ startIcon={<Plus />}
253
+ >
254
+ {formatMessage({
255
+ id: getTrad('HeaderLayout.button.label-add-entry'),
256
+ defaultMessage: 'Create new entry',
257
+ })}
258
+ </Button>
259
+ ) : null;
256
260
 
257
261
  return (
258
262
  <Main aria-busy={isLoading}>
259
- <HeaderLayout primaryAction={createAction} subtitle={subtitle} title={headerLayoutTitle} />
263
+ <HeaderLayout
264
+ primaryAction={getCreateAction()}
265
+ subtitle={subtitle}
266
+ title={headerLayoutTitle}
267
+ navigationAction={
268
+ <Link startIcon={<ArrowLeft />} to="/content-manager/">
269
+ {formatMessage({
270
+ id: 'app.components.HeaderLayout.link.go-back',
271
+ defaultMessage: 'Back',
272
+ })}
273
+ </Link>
274
+ }
275
+ />
260
276
  {!canRead && (
261
277
  <ActionLayout endActions={<InjectionZone area="contentManager.listView.actions" />} />
262
278
  )}
@@ -320,6 +336,7 @@ function ListView({
320
336
  // FIXME: remove the layout props drilling
321
337
  layout={layout}
322
338
  rows={data}
339
+ action={getCreateAction({ variant: 'secondary' })}
323
340
  />
324
341
  <PaginationFooter pagination={{ pageCount: pagination?.pageCount || 1 }} />
325
342
  </>
@@ -2,7 +2,7 @@ import adminPermissions from '../../../permissions';
2
2
 
3
3
  const defaultGlobalLinks = [
4
4
  {
5
- intlLabel: { id: 'Settings.application.title', defaultMessage: 'Application' },
5
+ intlLabel: { id: 'Settings.application.title', defaultMessage: 'Overview' },
6
6
  to: '/settings/application-infos',
7
7
  id: '000-application-infos',
8
8
  isDisplayed: false,
@@ -4,7 +4,9 @@ const getUniqueIdentifier = async () => {
4
4
  const fp = await FingerprintJS.load();
5
5
  const result = await fp.get();
6
6
 
7
- return result.visitorId;
7
+ const deviceId = `web-fingerprint-${result.visitorId}`;
8
+
9
+ return deviceId;
8
10
  };
9
11
 
10
12
  export default getUniqueIdentifier;
@@ -178,7 +178,10 @@ const Register = ({ fieldsToDisable, noSignin, onSubmit, schema }) => {
178
178
  : undefined
179
179
  }
180
180
  required
181
- label={formatMessage({ id: 'Auth.form.email.label', defaultMessage: 'Email' })}
181
+ label={formatMessage({
182
+ id: 'Auth.form.email.label',
183
+ defaultMessage: 'Email',
184
+ })}
182
185
  type="email"
183
186
  />
184
187
  <PasswordInput
@@ -1,6 +1,8 @@
1
1
  import React, { useEffect, useReducer } from 'react';
2
2
  import axios from 'axios';
3
- import { camelCase, get, omit } from 'lodash';
3
+ import camelCase from 'lodash/camelCase';
4
+ import get from 'lodash/get';
5
+ import omit from 'lodash/omit';
4
6
  import { Redirect, useRouteMatch, useHistory } from 'react-router-dom';
5
7
  import { auth, useQuery } from '@strapi/helper-plugin';
6
8
  import PropTypes from 'prop-types';
@@ -117,7 +119,11 @@ const AuthPage = ({ hasAdmin, setHasAdmin }) => {
117
119
  push('/');
118
120
  } catch (err) {
119
121
  if (err.response) {
120
- const errorMessage = get(err, ['response', 'data', 'message'], 'Something went wrong');
122
+ const errorMessage = get(
123
+ err,
124
+ ['response', 'data', 'error', 'message'],
125
+ 'Something went wrong'
126
+ );
121
127
 
122
128
  if (camelCase(errorMessage).toLowerCase() === 'usernotactive') {
123
129
  push('/auth/oops');
@@ -94,6 +94,8 @@ const forms = {
94
94
  email: yup
95
95
  .string()
96
96
  .email(translatedErrors.email)
97
+ .strict()
98
+ .lowercase(translatedErrors.lowercase)
97
99
  .required(translatedErrors.required),
98
100
  confirmPassword: yup
99
101
  .string()
@@ -211,6 +211,7 @@ const ProfilePage = () => {
211
211
  value={values.firstname || ''}
212
212
  type="text"
213
213
  name="firstname"
214
+ required
214
215
  />
215
216
  </GridItem>
216
217
  <GridItem s={12} col={6}>
@@ -234,6 +235,7 @@ const ProfilePage = () => {
234
235
  value={values.email || ''}
235
236
  type="email"
236
237
  name="email"
238
+ required
237
239
  />
238
240
  </GridItem>
239
241
  <GridItem s={12} col={6}>
@@ -409,12 +411,38 @@ const ProfilePage = () => {
409
411
  paddingRight={7}
410
412
  >
411
413
  <Stack size={4}>
412
- <Typography variant="delta" as="h2">
413
- {formatMessage({
414
- id: 'Settings.profile.form.section.experience.title',
415
- defaultMessage: 'Experience',
416
- })}
417
- </Typography>
414
+ <Stack size={1}>
415
+ <Typography variant="delta" as="h2">
416
+ {formatMessage({
417
+ id: 'Settings.profile.form.section.experience.title',
418
+ defaultMessage: 'Experience',
419
+ })}
420
+ </Typography>
421
+ <Typography>
422
+ {formatMessage(
423
+ {
424
+ id:
425
+ 'Settings.profile.form.section.experience.interfaceLanguageHelp',
426
+ defaultMessage:
427
+ 'Selection will change the interface language only for you. Please refer to this {documentation} to make other languages available for your team.',
428
+ },
429
+ {
430
+ documentation: (
431
+ <a
432
+ target="_blank"
433
+ rel="noopener noreferrer"
434
+ href="https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#locales"
435
+ >
436
+ {formatMessage({
437
+ id: 'Settings.profile.form.section.experience.documentation',
438
+ defaultMessage: 'documentation',
439
+ })}
440
+ </a>
441
+ ),
442
+ }
443
+ )}
444
+ </Typography>
445
+ </Stack>
418
446
  <Grid gap={5}>
419
447
  <GridItem s={12} col={6}>
420
448
  <Select
@@ -165,7 +165,7 @@ const ApiTokenCreateView = () => {
165
165
  <Link startIcon={<ArrowLeft />} to="/settings/api-tokens">
166
166
  {formatMessage({
167
167
  id: 'app.components.go-back',
168
- defaultMessage: 'Go back',
168
+ defaultMessage: 'Back',
169
169
  })}
170
170
  </Link>
171
171
  }
@@ -185,7 +185,7 @@ const ApiTokenCreateView = () => {
185
185
  <Stack size={4}>
186
186
  <Typography variant="delta" as="h2">
187
187
  {formatMessage({
188
- id: 'app.components.Users.ModalCreateBody.block-title.details',
188
+ id: 'Settings.apiTokens.details',
189
189
  defaultMessage: 'Details',
190
190
  })}
191
191
  </Typography>
@@ -208,6 +208,7 @@ const ApiTokenCreateView = () => {
208
208
  })}
209
209
  onChange={handleChange}
210
210
  value={values.name}
211
+ required
211
212
  />
212
213
  </GridItem>
213
214
  <GridItem key="description" col={6} xs={12}>
@@ -26,10 +26,10 @@ const ApplicationInfosPage = () => {
26
26
  <SettingsPageTitle name="Application" />
27
27
  <Main>
28
28
  <HeaderLayout
29
- title={formatMessage({ id: 'Settings.application.title', defaultMessage: 'Application' })}
29
+ title={formatMessage({ id: 'Settings.application.title', defaultMessage: 'Overview' })}
30
30
  subtitle={formatMessage({
31
31
  id: 'Settings.application.description',
32
- defaultMessage: "See your project's details",
32
+ defaultMessage: 'Administration panel’s global information',
33
33
  })}
34
34
  />
35
35
  <ContentLayout>
@@ -45,8 +45,8 @@ const ApplicationInfosPage = () => {
45
45
  <Stack size={5}>
46
46
  <Typography variant="delta" as="h3">
47
47
  {formatMessage({
48
- id: 'Settings.application.information',
49
- defaultMessage: 'Information',
48
+ id: 'Settings.application.details',
49
+ defaultMessage: 'Details',
50
50
  })}
51
51
  </Typography>
52
52
 
@@ -54,11 +54,24 @@ const ApplicationInfosPage = () => {
54
54
  <GridItem col={6} s={12}>
55
55
  <Typography variant="sigma" textColor="neutral600">
56
56
  {formatMessage({
57
- id: 'Settings.application.details',
58
- defaultMessage: 'details',
57
+ id: 'Settings.application.strapiVersion',
58
+ defaultMessage: 'strapi version',
59
59
  })}
60
60
  </Typography>
61
61
  <Typography as="p">v{strapiVersion}</Typography>
62
+ <Link
63
+ href={
64
+ appInfos.communityEdition
65
+ ? 'https://discord.strapi.io'
66
+ : 'https://support.strapi.io/support/home'
67
+ }
68
+ endIcon={<ExternalLink />}
69
+ >
70
+ {formatMessage({
71
+ id: 'Settings.application.get-help',
72
+ defaultMessage: 'Get help',
73
+ })}
74
+ </Link>
62
75
  </GridItem>
63
76
  <GridItem col={6} s={12}>
64
77
  <Typography variant="sigma" textColor="neutral600">
@@ -96,7 +109,7 @@ const ApplicationInfosPage = () => {
96
109
  <Link href="https://strapi.io/pricing-self-hosted" endIcon={<ExternalLink />}>
97
110
  {formatMessage({
98
111
  id: 'Settings.application.link-pricing',
99
- defaultMessage: 'See all pricing',
112
+ defaultMessage: 'See all pricing plans',
100
113
  })}
101
114
  </Link>
102
115
  </GridItem>