@strapi/admin 4.1.6-alpha.1 → 4.1.8

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 (381) hide show
  1. package/admin/src/assets/images/icon_offline-cloud.svg +5 -0
  2. package/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js +17 -3
  3. package/admin/src/content-manager/components/DynamicTable/CellContent/utils/hasContent.js +37 -2
  4. package/admin/src/content-manager/components/EditViewDataManagerProvider/index.js +37 -37
  5. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/getAPIInnerError.js +18 -0
  6. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/handleAPIError.js +15 -0
  7. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/index.js +0 -1
  8. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/schema.js +9 -7
  9. package/admin/src/content-manager/components/FieldComponent/index.js +0 -1
  10. package/admin/src/content-manager/components/InputUID/index.js +1 -5
  11. package/admin/src/content-manager/components/Inputs/index.js +4 -6
  12. package/admin/src/content-manager/components/RepeatableComponent/index.js +3 -18
  13. package/admin/src/content-manager/components/RepeatableComponent/utils/getComponentErrorKeys.js +10 -0
  14. package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +15 -3
  15. package/admin/src/content-manager/components/Wysiwyg/index.js +3 -4
  16. package/admin/src/content-manager/pages/EditSettingsView/components/ModalForm.js +6 -1
  17. package/admin/src/content-manager/pages/EditSettingsView/index.js +1 -1
  18. package/admin/src/content-manager/pages/EditSettingsView/utils/layout.js +7 -1
  19. package/admin/src/content-manager/pages/EditView/DeleteLink/index.js +1 -4
  20. package/admin/src/content-manager/pages/EditView/DraftAndPublishBadge/index.js +1 -4
  21. package/admin/src/content-manager/pages/ListView/selectors.js +3 -6
  22. package/admin/src/content-manager/testUtils/data.js +5 -1
  23. package/admin/src/content-manager/utils/isFieldTypeNumber.js +3 -0
  24. package/admin/src/hooks/useNavigatorOnLine/index.js +31 -0
  25. package/admin/src/pages/MarketplacePage/components/MissingPluginBanner/index.js +40 -0
  26. package/admin/src/pages/MarketplacePage/components/PageHeader/index.js +46 -0
  27. package/admin/src/pages/MarketplacePage/index.js +48 -26
  28. package/admin/src/translations/de.json +244 -23
  29. package/admin/src/translations/en.json +6 -0
  30. package/build/1856.e2bce2e8.chunk.js +171 -0
  31. package/build/2481.5fe150c7.chunk.js +184 -0
  32. package/build/2758.19d211ea.chunk.js +161 -0
  33. package/build/2912.5a7b0406.chunk.js +252 -0
  34. package/build/372.f3b7829c.chunk.js +896 -0
  35. package/build/4715.7f616cf6.chunk.js +387 -0
  36. package/build/4800.d3ebc81d.chunk.js +1 -0
  37. package/build/497.2ba35e90.chunk.js +284 -0
  38. package/build/4982.91235074.chunk.js +310 -0
  39. package/build/5289.ef1a4517.chunk.js +349 -0
  40. package/build/6404.25d0f0d8.chunk.js +508 -0
  41. package/build/6706.b0b5124d.chunk.js +113 -0
  42. package/build/6925.fafef528.chunk.js +761 -0
  43. package/build/7589.f3b26345.chunk.js +194 -0
  44. package/build/7841.0d73dde1.chunk.js +252 -0
  45. package/build/8469.3af1823d.chunk.js +1 -0
  46. package/build/9115.318a6841.chunk.js +1 -0
  47. package/build/9298.22f09063.chunk.js +345 -0
  48. package/build/948.d64fb515.chunk.js +2 -0
  49. package/build/9853.b7d6aba5.chunk.js +354 -0
  50. package/build/Admin-authenticatedApp.f7b81029.chunk.js +80 -0
  51. package/build/Admin_homePage.50b6c129.chunk.js +71 -0
  52. package/build/Admin_marketplace.514ace37.chunk.js +11 -0
  53. package/build/Admin_pluginsPage.e895d79f.chunk.js +1 -0
  54. package/build/Admin_profilePage.33cfed9b.chunk.js +15 -0
  55. package/build/Admin_settingsPage.f83a7c21.chunk.js +172 -0
  56. package/build/a6b842e0b6d2b61135d1.svg +5 -0
  57. package/build/admin-edit-roles-page.06f3d288.chunk.js +1 -0
  58. package/build/admin-edit-users.6a325cca.chunk.js +11 -0
  59. package/build/admin-users.b89adf82.chunk.js +12 -0
  60. package/build/api-tokens-create-page.635e20c8.chunk.js +1 -0
  61. package/build/api-tokens-edit-page.db07253e.chunk.js +1 -0
  62. package/build/api-tokens-list-page.346c2149.chunk.js +15 -0
  63. package/build/ar-json.d4cb26d9.chunk.js +1 -0
  64. package/build/codemirror-addon-closebrackets.c0f97916.chunk.js +2 -0
  65. package/build/codemirror-addon-lint-js.7c35dcb0.chunk.js +1 -0
  66. package/build/codemirror-addon-lint.505ff1d4.chunk.js +1 -0
  67. package/build/codemirror-addon-mark-selection.653e904d.chunk.js +1 -0
  68. package/build/codemirror-css.98490df3.chunk.js +346 -0
  69. package/build/codemirror-javacript.cafbda9c.chunk.js +1 -0
  70. package/build/codemirror-theme.b3c64617.chunk.js +34 -0
  71. package/build/content-manager.78e3f35c.chunk.js +1204 -0
  72. package/build/content-type-builder-translation-ar-json.142327af.chunk.js +1 -0
  73. package/build/content-type-builder-translation-cs-json.4aafb972.chunk.js +1 -0
  74. package/build/content-type-builder-translation-de-json.0d7696b9.chunk.js +1 -0
  75. package/build/{content-type-builder-translation-dk-json.52805572.chunk.js → content-type-builder-translation-dk-json.4729f055.chunk.js} +1 -1
  76. package/build/content-type-builder-translation-en-json.e5110288.chunk.js +1 -0
  77. package/build/{content-type-builder-translation-es-json.5a362abf.chunk.js → content-type-builder-translation-es-json.333cf47f.chunk.js} +1 -1
  78. package/build/content-type-builder-translation-fr-json.aa6eeea8.chunk.js +1 -0
  79. package/build/{content-type-builder-translation-id-json.4a21dfab.chunk.js → content-type-builder-translation-id-json.7c00a32a.chunk.js} +1 -1
  80. package/build/content-type-builder-translation-it-json.a906b389.chunk.js +1 -0
  81. package/build/content-type-builder-translation-ja-json.87f71930.chunk.js +1 -0
  82. package/build/content-type-builder-translation-ko-json.51201b12.chunk.js +1 -0
  83. package/build/{content-type-builder-translation-ms-json.3755f8c8.chunk.js → content-type-builder-translation-ms-json.963a1a01.chunk.js} +1 -1
  84. package/build/{content-type-builder-translation-nl-json.6f8d924b.chunk.js → content-type-builder-translation-nl-json.c46c8f30.chunk.js} +1 -1
  85. package/build/{content-type-builder-translation-pl-json.fc0b0c20.chunk.js → content-type-builder-translation-pl-json.a866acda.chunk.js} +1 -1
  86. package/build/content-type-builder-translation-pt-BR-json.5739a2aa.chunk.js +1 -0
  87. package/build/content-type-builder-translation-pt-json.766bd747.chunk.js +1 -0
  88. package/build/content-type-builder-translation-ru-json.cf8d7c5c.chunk.js +1 -0
  89. package/build/content-type-builder-translation-sk-json.3a6defe0.chunk.js +1 -0
  90. package/build/content-type-builder-translation-th-json.c96a2d3f.chunk.js +1 -0
  91. package/build/content-type-builder-translation-tr-json.2e52bc60.chunk.js +1 -0
  92. package/build/content-type-builder-translation-uk-json.d8c0b6dd.chunk.js +1 -0
  93. package/build/content-type-builder-translation-zh-Hans-json.92a27f59.chunk.js +1 -0
  94. package/build/content-type-builder-translation-zh-json.2cc55621.chunk.js +1 -0
  95. package/build/content-type-builder.0d8729ad.chunk.js +141 -0
  96. package/build/cropper-css.0055cd53.chunk.js +306 -0
  97. package/build/cs-json.c8f28ba8.chunk.js +1 -0
  98. package/build/de-json.0b92acd2.chunk.js +1 -0
  99. package/build/{dk-json.fb9ee45a.chunk.js → dk-json.9f1bc016.chunk.js} +1 -1
  100. package/build/email-settings-page.c520fd0d.chunk.js +103 -0
  101. package/build/{email-translation-de-json.559a7d5f.chunk.js → email-translation-ar-json.c624512d.chunk.js} +1 -1
  102. package/build/{email-translation-ar-json.95d90eb4.chunk.js → email-translation-cs-json.cb18caab.chunk.js} +1 -1
  103. package/build/{email-translation-it-json.3de61cb6.chunk.js → email-translation-de-json.54743260.chunk.js} +1 -1
  104. package/build/{email-translation-dk-json.f8a595bf.chunk.js → email-translation-dk-json.f323fe4e.chunk.js} +1 -1
  105. package/build/{email-translation-en-json.fa0dc92b.chunk.js → email-translation-en-json.6da7e388.chunk.js} +1 -1
  106. package/build/{email-translation-es-json.eb303dea.chunk.js → email-translation-es-json.9021417d.chunk.js} +1 -1
  107. package/build/{email-translation-fr-json.49c3c888.chunk.js → email-translation-fr-json.9f125db0.chunk.js} +1 -1
  108. package/build/email-translation-id-json.3bcae5f5.chunk.js +1 -0
  109. package/build/{email-translation-cs-json.dfd1f3f2.chunk.js → email-translation-it-json.6ffd1774.chunk.js} +1 -1
  110. package/build/email-translation-ja-json.72b3f73c.chunk.js +1 -0
  111. package/build/email-translation-ko-json.e61d4e7a.chunk.js +1 -0
  112. package/build/email-translation-ms-json.b2b11e05.chunk.js +1 -0
  113. package/build/email-translation-nl-json.5349635f.chunk.js +1 -0
  114. package/build/email-translation-pl-json.6da50d0f.chunk.js +1 -0
  115. package/build/email-translation-pt-BR-json.2c98ab20.chunk.js +1 -0
  116. package/build/email-translation-pt-json.959ea070.chunk.js +1 -0
  117. package/build/email-translation-ru-json.d508cf3e.chunk.js +1 -0
  118. package/build/email-translation-sk-json.fa1fd4b3.chunk.js +1 -0
  119. package/build/email-translation-th-json.989cfecc.chunk.js +1 -0
  120. package/build/email-translation-tr-json.87f2feb3.chunk.js +1 -0
  121. package/build/email-translation-uk-json.0396a803.chunk.js +1 -0
  122. package/build/email-translation-vi-json.c0d8c414.chunk.js +1 -0
  123. package/build/email-translation-zh-Hans-json.b463cb25.chunk.js +1 -0
  124. package/build/email-translation-zh-json.3455468b.chunk.js +1 -0
  125. package/build/en-json.3e1a222e.chunk.js +1 -0
  126. package/build/{es-json.8f4d89e2.chunk.js → es-json.2a5a9fc1.chunk.js} +1 -1
  127. package/build/fontawesome-css-all.b88d464e.chunk.js +4618 -0
  128. package/build/fontawesome-css.59dc4459.chunk.js +6 -0
  129. package/build/fontawesome-js.252cc5f3.chunk.js +7 -0
  130. package/build/fr-json.84064a0b.chunk.js +1 -0
  131. package/build/he-json.d40da459.chunk.js +1 -0
  132. package/build/highlight.js.9d8ef460.chunk.js +86 -0
  133. package/build/hu-json.c81ce352.chunk.js +1 -0
  134. package/build/i18n-settings-page.24c106d4.chunk.js +101 -0
  135. package/build/{i18n-translation-de-json.96ae1f68.chunk.js → i18n-translation-de-json.92534555.chunk.js} +1 -1
  136. package/build/{i18n-translation-dk-json.ecf02d28.chunk.js → i18n-translation-dk-json.54f410ca.chunk.js} +1 -1
  137. package/build/{i18n-translation-en-json.4d823f62.chunk.js → i18n-translation-en-json.85bc892c.chunk.js} +1 -1
  138. package/build/i18n-translation-es-json.488206ae.chunk.js +1 -0
  139. package/build/i18n-translation-fr-json.0839d68d.chunk.js +1 -0
  140. package/build/i18n-translation-ko-json.d0bc1203.chunk.js +1 -0
  141. package/build/i18n-translation-zh-Hans-json.560a98e3.chunk.js +1 -0
  142. package/build/{id-json.fef679cb.chunk.js → id-json.fad45d17.chunk.js} +1 -1
  143. package/build/index.html +1 -1
  144. package/build/it-json.12df4cdf.chunk.js +1 -0
  145. package/build/ja-json.850237e9.chunk.js +1 -0
  146. package/build/ko-json.2f3d256e.chunk.js +1 -0
  147. package/build/main.3ca0e44c.js +7918 -0
  148. package/build/{ms-json.f46167ef.chunk.js → ms-json.836ed013.chunk.js} +1 -1
  149. package/build/nl-json.465b173f.chunk.js +1 -0
  150. package/build/{no-json.17ecda5d.chunk.js → no-json.e8749dd4.chunk.js} +1 -1
  151. package/build/{pl-json.0db77f2c.chunk.js → pl-json.94f05d2c.chunk.js} +1 -1
  152. package/build/{pt-BR-json.4c90cb2d.chunk.js → pt-BR-json.6301d49b.chunk.js} +1 -1
  153. package/build/pt-json.c23020ab.chunk.js +1 -0
  154. package/build/ru-json.4560906c.chunk.js +1 -0
  155. package/build/runtime~main.fcd5a5b5.js +2 -0
  156. package/build/sk-json.5b33afc2.chunk.js +1 -0
  157. package/build/sso-settings-page.0b4d2106.chunk.js +1 -0
  158. package/build/sv-json.cdcac02d.chunk.js +1 -0
  159. package/build/th-json.3aadaec6.chunk.js +1 -0
  160. package/build/tr-json.276e59fe.chunk.js +1 -0
  161. package/build/uk-json.5b5b9c27.chunk.js +1 -0
  162. package/build/upload-settings.4fcb502d.chunk.js +101 -0
  163. package/build/upload-translation-de-json.b642da08.chunk.js +1 -0
  164. package/build/{upload-translation-dk-json.b74134c8.chunk.js → upload-translation-dk-json.fc61df13.chunk.js} +1 -1
  165. package/build/{upload-translation-en-json.c4e56528.chunk.js → upload-translation-en-json.59269508.chunk.js} +1 -1
  166. package/build/{upload-translation-es-json.15a3015f.chunk.js → upload-translation-es-json.8ec935ef.chunk.js} +1 -1
  167. package/build/upload-translation-fr-json.eb9b4f84.chunk.js +1 -0
  168. package/build/upload-translation-he-json.c226f2dc.chunk.js +1 -0
  169. package/build/upload-translation-it-json.8e58456e.chunk.js +1 -0
  170. package/build/upload-translation-ja-json.1378a2e7.chunk.js +1 -0
  171. package/build/upload-translation-ko-json.5e06e112.chunk.js +1 -0
  172. package/build/{upload-translation-ms-json.30974c82.chunk.js → upload-translation-ms-json.dc3bf0d7.chunk.js} +1 -1
  173. package/build/{upload-translation-pl-json.3740abed.chunk.js → upload-translation-pl-json.6071e38c.chunk.js} +1 -1
  174. package/build/upload-translation-pt-BR-json.7e8d9550.chunk.js +1 -0
  175. package/build/upload-translation-ru-json.da2529f3.chunk.js +1 -0
  176. package/build/upload-translation-sk-json.bfdf4f09.chunk.js +1 -0
  177. package/build/upload-translation-th-json.6a48b826.chunk.js +1 -0
  178. package/build/upload-translation-uk-json.6fb09148.chunk.js +1 -0
  179. package/build/upload-translation-zh-Hans-json.c9622577.chunk.js +1 -0
  180. package/build/upload-translation-zh-json.711f804b.chunk.js +1 -0
  181. package/build/upload.0ca61128.chunk.js +105 -0
  182. package/build/users-advanced-settings-page.a8c38517.chunk.js +101 -0
  183. package/build/users-email-settings-page.8b561ea3.chunk.js +1 -0
  184. package/build/users-permissions-translation-ar-json.e8123ed2.chunk.js +1 -0
  185. package/build/users-permissions-translation-cs-json.e6649c5f.chunk.js +1 -0
  186. package/build/{users-permissions-translation-de-json.a5c8db9c.chunk.js → users-permissions-translation-de-json.c3628843.chunk.js} +1 -1
  187. package/build/{users-permissions-translation-dk-json.1fe5e07a.chunk.js → users-permissions-translation-dk-json.fe39c74b.chunk.js} +1 -1
  188. package/build/users-permissions-translation-en-json.3fe86528.chunk.js +1 -0
  189. package/build/{users-permissions-translation-es-json.05669296.chunk.js → users-permissions-translation-es-json.1bb9cde2.chunk.js} +1 -1
  190. package/build/users-permissions-translation-fr-json.172aa69f.chunk.js +1 -0
  191. package/build/{users-permissions-translation-id-json.186a3f65.chunk.js → users-permissions-translation-id-json.5aadd143.chunk.js} +1 -1
  192. package/build/users-permissions-translation-it-json.7d377480.chunk.js +1 -0
  193. package/build/users-permissions-translation-ja-json.4967badf.chunk.js +1 -0
  194. package/build/users-permissions-translation-ko-json.3be77775.chunk.js +1 -0
  195. package/build/{users-permissions-translation-ms-json.3a128ff4.chunk.js → users-permissions-translation-ms-json.ea8a2baf.chunk.js} +1 -1
  196. package/build/{users-permissions-translation-nl-json.4146aed1.chunk.js → users-permissions-translation-nl-json.d638c4ce.chunk.js} +1 -1
  197. package/build/{users-permissions-translation-pl-json.a61de7ed.chunk.js → users-permissions-translation-pl-json.3c4fe81c.chunk.js} +1 -1
  198. package/build/users-permissions-translation-pt-BR-json.f6791a86.chunk.js +1 -0
  199. package/build/users-permissions-translation-pt-json.38afed04.chunk.js +1 -0
  200. package/build/users-permissions-translation-ru-json.319d51ef.chunk.js +1 -0
  201. package/build/users-permissions-translation-sk-json.ba1cd385.chunk.js +1 -0
  202. package/build/users-permissions-translation-sv-json.83c60841.chunk.js +1 -0
  203. package/build/users-permissions-translation-th-json.68873214.chunk.js +1 -0
  204. package/build/users-permissions-translation-tr-json.cdc49a3c.chunk.js +1 -0
  205. package/build/users-permissions-translation-uk-json.63eaa01c.chunk.js +1 -0
  206. package/build/users-permissions-translation-vi-json.dccc02fc.chunk.js +1 -0
  207. package/build/users-permissions-translation-zh-Hans-json.c3fd301b.chunk.js +1 -0
  208. package/build/users-permissions-translation-zh-json.e03ae2a4.chunk.js +1 -0
  209. package/build/users-providers-settings-page.82141ace.chunk.js +1 -0
  210. package/build/users-roles-settings-page.97d7092d.chunk.js +30 -0
  211. package/build/vi-json.3d14e91e.chunk.js +1 -0
  212. package/build/webhook-edit-page.2e6727ab.chunk.js +23 -0
  213. package/build/webhook-list-page.d893312b.chunk.js +132 -0
  214. package/build/zh-Hans-json.c84ce330.chunk.js +1 -0
  215. package/build/zh-json.96bf6019.chunk.js +1 -0
  216. package/package.json +8 -12
  217. package/scripts/build.js +1 -1
  218. package/server/bootstrap.js +3 -1
  219. package/server/config/index.js +0 -1
  220. package/server/controllers/admin.js +7 -1
  221. package/server/services/api-token.js +15 -14
  222. package/server/services/token.js +13 -0
  223. package/server/validation/permission.js +5 -1
  224. package/webpack.config.js +77 -58
  225. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/getYupInnerErrors.js +0 -17
  226. package/build/1094.e1db3a1a.chunk.js +0 -1
  227. package/build/1454.f065d92a.chunk.js +0 -2
  228. package/build/1454.f065d92a.chunk.js.LICENSE.txt +0 -7
  229. package/build/1856.a30bd09b.chunk.js +0 -1
  230. package/build/2481.4eae9408.chunk.js +0 -1
  231. package/build/2912.c5f76e65.chunk.js +0 -1
  232. package/build/4362.d8299f0c.chunk.js +0 -1
  233. package/build/4715.8a2db02a.chunk.js +0 -1
  234. package/build/4800.f4a1384a.chunk.js +0 -1
  235. package/build/497.3fcf6196.chunk.js +0 -1
  236. package/build/4982.601f6196.chunk.js +0 -1
  237. package/build/6404.3c2d0a81.chunk.js +0 -1
  238. package/build/6925.bd694b04.chunk.js +0 -2
  239. package/build/6925.bd694b04.chunk.js.LICENSE.txt +0 -5
  240. package/build/7841.490dbbf1.chunk.js +0 -1
  241. package/build/8042.1d66811a.chunk.js +0 -2
  242. package/build/8042.1d66811a.chunk.js.LICENSE.txt +0 -4
  243. package/build/8469.8d819a3c.chunk.js +0 -1
  244. package/build/849.82c29ba7.chunk.js +0 -1
  245. package/build/9235.ced8aebf.chunk.js +0 -1
  246. package/build/9260.4233fae2.chunk.js +0 -2
  247. package/build/9260.4233fae2.chunk.js.LICENSE.txt +0 -15
  248. package/build/9853.6ff595fa.chunk.js +0 -1
  249. package/build/9988.fe838ba6.chunk.js +0 -2
  250. package/build/9988.fe838ba6.chunk.js.LICENSE.txt +0 -9
  251. package/build/Admin-authenticatedApp.cf7104f9.chunk.js +0 -1
  252. package/build/Admin_homePage.4a3aa22e.chunk.js +0 -1
  253. package/build/Admin_marketplace.4748c8f6.chunk.js +0 -1
  254. package/build/Admin_pluginsPage.89a96d29.chunk.js +0 -1
  255. package/build/Admin_profilePage.7869a07a.chunk.js +0 -1
  256. package/build/Admin_settingsPage.2763454c.chunk.js +0 -1
  257. package/build/admin-edit-roles-page.fbcc195d.chunk.js +0 -1
  258. package/build/admin-edit-users.91e8f5e4.chunk.js +0 -1
  259. package/build/admin-users.0a6acd73.chunk.js +0 -1
  260. package/build/api-tokens-create-page.76e13a35.chunk.js +0 -1
  261. package/build/api-tokens-edit-page.b3d48a7f.chunk.js +0 -1
  262. package/build/api-tokens-list-page.4e822ac8.chunk.js +0 -1
  263. package/build/ar-json.cc19c13c.chunk.js +0 -1
  264. package/build/codemirror-addon-closebrackets.0cfe64d0.chunk.js +0 -1
  265. package/build/codemirror-addon-lint-js.a6eeef9c.chunk.js +0 -1
  266. package/build/codemirror-addon-lint.91580cda.chunk.js +0 -1
  267. package/build/codemirror-addon-mark-selection.4dca121f.chunk.js +0 -1
  268. package/build/codemirror-css.48b438c9.chunk.js +0 -1
  269. package/build/codemirror-javacript.8c7c015d.chunk.js +0 -1
  270. package/build/codemirror-theme.b5559efc.chunk.js +0 -1
  271. package/build/content-manager.2f6a2082.chunk.js +0 -1
  272. package/build/content-type-builder-translation-ar-json.ab0a0caa.chunk.js +0 -1
  273. package/build/content-type-builder-translation-cs-json.e3913c9f.chunk.js +0 -1
  274. package/build/content-type-builder-translation-de-json.5eb3135d.chunk.js +0 -1
  275. package/build/content-type-builder-translation-en-json.e51b2ec3.chunk.js +0 -1
  276. package/build/content-type-builder-translation-fr-json.afd4a12f.chunk.js +0 -1
  277. package/build/content-type-builder-translation-it-json.4fa203b1.chunk.js +0 -1
  278. package/build/content-type-builder-translation-ja-json.cbb3b88a.chunk.js +0 -1
  279. package/build/content-type-builder-translation-ko-json.7daf86c3.chunk.js +0 -1
  280. package/build/content-type-builder-translation-pt-BR-json.86b192fa.chunk.js +0 -1
  281. package/build/content-type-builder-translation-pt-json.b584f79f.chunk.js +0 -1
  282. package/build/content-type-builder-translation-ru-json.7648049a.chunk.js +0 -1
  283. package/build/content-type-builder-translation-sk-json.c12a8dec.chunk.js +0 -1
  284. package/build/content-type-builder-translation-th-json.668cd5f5.chunk.js +0 -1
  285. package/build/content-type-builder-translation-tr-json.0f52e1e8.chunk.js +0 -1
  286. package/build/content-type-builder-translation-uk-json.4bf80448.chunk.js +0 -1
  287. package/build/content-type-builder-translation-zh-Hans-json.76e58138.chunk.js +0 -1
  288. package/build/content-type-builder-translation-zh-json.0bec81f1.chunk.js +0 -1
  289. package/build/content-type-builder.19ae7eef.chunk.js +0 -1
  290. package/build/cropper-css.ace19575.chunk.js +0 -1
  291. package/build/cs-json.ce6f2e52.chunk.js +0 -1
  292. package/build/de-json.2087d61e.chunk.js +0 -1
  293. package/build/email-settings-page.40ee2bda.chunk.js +0 -1
  294. package/build/email-translation-id-json.e3c2101d.chunk.js +0 -1
  295. package/build/email-translation-ja-json.66337e44.chunk.js +0 -1
  296. package/build/email-translation-ko-json.52bbd7b4.chunk.js +0 -1
  297. package/build/email-translation-ms-json.e39256df.chunk.js +0 -1
  298. package/build/email-translation-nl-json.12d28adb.chunk.js +0 -1
  299. package/build/email-translation-pl-json.9585a84e.chunk.js +0 -1
  300. package/build/email-translation-pt-BR-json.6c04b3ef.chunk.js +0 -1
  301. package/build/email-translation-pt-json.0239be04.chunk.js +0 -1
  302. package/build/email-translation-ru-json.f3b4fecc.chunk.js +0 -1
  303. package/build/email-translation-sk-json.76dbaaa6.chunk.js +0 -1
  304. package/build/email-translation-th-json.25ad73e7.chunk.js +0 -1
  305. package/build/email-translation-tr-json.ae04a9f2.chunk.js +0 -1
  306. package/build/email-translation-uk-json.03b27b08.chunk.js +0 -1
  307. package/build/email-translation-vi-json.3e1dd5b3.chunk.js +0 -1
  308. package/build/email-translation-zh-Hans-json.0df4ca59.chunk.js +0 -1
  309. package/build/email-translation-zh-json.82978eb0.chunk.js +0 -1
  310. package/build/en-json.c55e5344.chunk.js +0 -1
  311. package/build/fontawesome-css-all.3b89f909.chunk.js +0 -1
  312. package/build/fontawesome-css.36cff9ae.chunk.js +0 -1
  313. package/build/fontawesome-js.2639263c.chunk.js +0 -2
  314. package/build/fontawesome-js.2639263c.chunk.js.LICENSE.txt +0 -4
  315. package/build/fr-json.2a0b93ed.chunk.js +0 -1
  316. package/build/he-json.917d416c.chunk.js +0 -1
  317. package/build/highlight.js.6321cb45.chunk.js +0 -1
  318. package/build/hu-json.bee23c51.chunk.js +0 -1
  319. package/build/i18n-settings-page.1f6be747.chunk.js +0 -1
  320. package/build/i18n-translation-es-json.7049afa2.chunk.js +0 -1
  321. package/build/i18n-translation-fr-json.c6367bc9.chunk.js +0 -1
  322. package/build/i18n-translation-ko-json.aecb7e01.chunk.js +0 -1
  323. package/build/i18n-translation-zh-Hans-json.258b2e1a.chunk.js +0 -1
  324. package/build/it-json.937b2108.chunk.js +0 -1
  325. package/build/ja-json.b4818378.chunk.js +0 -1
  326. package/build/ko-json.8294a7fc.chunk.js +0 -1
  327. package/build/main.06e1a4bf.js +0 -2
  328. package/build/main.06e1a4bf.js.LICENSE.txt +0 -91
  329. package/build/nl-json.86eae27d.chunk.js +0 -1
  330. package/build/pt-json.ef0efd89.chunk.js +0 -1
  331. package/build/ru-json.da33236d.chunk.js +0 -1
  332. package/build/runtime~main.b090a1bb.js +0 -1
  333. package/build/sk-json.797e898f.chunk.js +0 -1
  334. package/build/sso-settings-page.c5dda65d.chunk.js +0 -1
  335. package/build/sv-json.5bbe6a4f.chunk.js +0 -1
  336. package/build/th-json.c1393c06.chunk.js +0 -1
  337. package/build/tr-json.57cde8b0.chunk.js +0 -1
  338. package/build/uk-json.c6df66d2.chunk.js +0 -1
  339. package/build/upload-settings.9d3231f4.chunk.js +0 -1
  340. package/build/upload-translation-de-json.55a7e43a.chunk.js +0 -1
  341. package/build/upload-translation-fr-json.b12f7247.chunk.js +0 -1
  342. package/build/upload-translation-he-json.bee013d1.chunk.js +0 -1
  343. package/build/upload-translation-it-json.43ec0a8d.chunk.js +0 -1
  344. package/build/upload-translation-ja-json.03f1af04.chunk.js +0 -1
  345. package/build/upload-translation-ko-json.08ad9013.chunk.js +0 -1
  346. package/build/upload-translation-pt-BR-json.c7656183.chunk.js +0 -1
  347. package/build/upload-translation-ru-json.0dd4f526.chunk.js +0 -1
  348. package/build/upload-translation-sk-json.55cacd22.chunk.js +0 -1
  349. package/build/upload-translation-th-json.f7aa9392.chunk.js +0 -1
  350. package/build/upload-translation-uk-json.696a16f3.chunk.js +0 -1
  351. package/build/upload-translation-zh-Hans-json.de7bc63f.chunk.js +0 -1
  352. package/build/upload-translation-zh-json.bbc1ed41.chunk.js +0 -1
  353. package/build/upload.8edef1ea.chunk.js +0 -1
  354. package/build/users-advanced-settings-page.48c437f0.chunk.js +0 -1
  355. package/build/users-email-settings-page.f39866d6.chunk.js +0 -1
  356. package/build/users-permissions-translation-ar-json.667e7eee.chunk.js +0 -1
  357. package/build/users-permissions-translation-cs-json.995b5d76.chunk.js +0 -1
  358. package/build/users-permissions-translation-en-json.0e0bc290.chunk.js +0 -1
  359. package/build/users-permissions-translation-fr-json.3e3522c3.chunk.js +0 -1
  360. package/build/users-permissions-translation-it-json.ee5742c4.chunk.js +0 -1
  361. package/build/users-permissions-translation-ja-json.c9cafa6e.chunk.js +0 -1
  362. package/build/users-permissions-translation-ko-json.170f89c2.chunk.js +0 -1
  363. package/build/users-permissions-translation-pt-BR-json.51b1cc15.chunk.js +0 -1
  364. package/build/users-permissions-translation-pt-json.85f0e0e1.chunk.js +0 -1
  365. package/build/users-permissions-translation-ru-json.a19b2400.chunk.js +0 -1
  366. package/build/users-permissions-translation-sk-json.27af7260.chunk.js +0 -1
  367. package/build/users-permissions-translation-sv-json.739657b9.chunk.js +0 -1
  368. package/build/users-permissions-translation-th-json.f001fff3.chunk.js +0 -1
  369. package/build/users-permissions-translation-tr-json.3aae5dda.chunk.js +0 -1
  370. package/build/users-permissions-translation-uk-json.a66c7a8c.chunk.js +0 -1
  371. package/build/users-permissions-translation-vi-json.685c65cc.chunk.js +0 -1
  372. package/build/users-permissions-translation-zh-Hans-json.2202741e.chunk.js +0 -1
  373. package/build/users-permissions-translation-zh-json.429a3190.chunk.js +0 -1
  374. package/build/users-providers-settings-page.574ed765.chunk.js +0 -1
  375. package/build/users-roles-settings-page.b836dc30.chunk.js +0 -1
  376. package/build/vi-json.104a6f3a.chunk.js +0 -1
  377. package/build/webhook-edit-page.b791c6f9.chunk.js +0 -1
  378. package/build/webhook-list-page.502d1236.chunk.js +0 -1
  379. package/build/zh-Hans-json.9afc1adf.chunk.js +0 -1
  380. package/build/zh-json.f36abb77.chunk.js +0 -1
  381. package/server/config/api-token.js +0 -7
@@ -0,0 +1,5 @@
1
+ <svg width="88" height="88" viewBox="0 0 88 88" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="0.5" y="0.5" width="87" height="87" rx="43.5" fill="#F0F0FF"/>
3
+ <path d="M34.0469 39.2969H30C27.4479 39.2969 25.2604 40.2448 23.4375 42.1406C21.6146 43.9635 20.7031 46.151 20.7031 48.7031C20.7031 51.2552 21.6146 53.4427 23.4375 55.2656C25.2604 57.0885 27.4479 58 30 58H52.75L34.0469 39.2969ZM23 28.25L25.9531 25.2969L65 64.3438L62.0469 67.2969L57.3438 62.7031H30C26.1354 62.7031 22.8177 61.3542 20.0469 58.6562C17.349 55.8854 16 52.5677 16 48.7031C16 44.9115 17.3125 41.6667 19.9375 38.9688C22.5625 36.2708 25.7344 34.849 29.4531 34.7031L23 28.25ZM61.1719 39.4062C64.1615 39.625 66.7135 40.8646 68.8281 43.125C70.9427 45.3125 72 47.9375 72 51C72 55.0104 70.3594 58.1823 67.0781 60.5156L63.6875 57.125C66.0938 55.8125 67.2969 53.7708 67.2969 51C67.2969 49.1042 66.6042 47.4635 65.2188 46.0781C63.8333 44.6927 62.1927 44 60.2969 44H56.7969V42.7969C56.7969 39.224 55.5573 36.1979 53.0781 33.7188C50.599 31.2396 47.5729 30 44 30C41.9583 30 39.9896 30.474 38.0938 31.4219L34.5938 28.0312C37.4375 26.2083 40.5729 25.2969 44 25.2969C47.9375 25.2969 51.5833 26.6823 54.9375 29.4531C58.3646 32.224 60.4427 35.5417 61.1719 39.4062Z" fill="#4945FF"/>
4
+ <rect x="0.5" y="0.5" width="87" height="87" rx="43.5" stroke="#D9D8FF"/>
5
+ </svg>
@@ -203,8 +203,6 @@ const CollectionTypeFormWrapper = ({ allLayoutData, children, slug, id, origin }
203
203
  const displayErrors = useCallback(
204
204
  err => {
205
205
  const errorPayload = err.response.data;
206
- console.error(errorPayload);
207
-
208
206
  let errorMessage = get(errorPayload, ['error', 'message'], 'Bad Request');
209
207
 
210
208
  // TODO handle errors correctly when back-end ready
@@ -272,10 +270,14 @@ const CollectionTypeFormWrapper = ({ allLayoutData, children, slug, id, origin }
272
270
  dispatch(setStatus('resolved'));
273
271
 
274
272
  replace(`/content-manager/collectionType/${slug}/${data.id}${rawQuery}`);
273
+
274
+ return Promise.resolve(data);
275
275
  } catch (err) {
276
- trackUsageRef.current('didNotCreateEntry', { error: err, trackerProperty });
277
276
  displayErrors(err);
277
+ trackUsageRef.current('didNotCreateEntry', { error: err, trackerProperty });
278
278
  dispatch(setStatus('resolved'));
279
+
280
+ return Promise.reject(err);
279
281
  }
280
282
  },
281
283
  [
@@ -308,9 +310,13 @@ const CollectionTypeFormWrapper = ({ allLayoutData, children, slug, id, origin }
308
310
  type: 'success',
309
311
  message: { id: getTrad('success.record.publish') },
310
312
  });
313
+
314
+ return Promise.resolve(data);
311
315
  } catch (err) {
312
316
  displayErrors(err);
313
317
  dispatch(setStatus('resolved'));
318
+
319
+ return Promise.reject(err);
314
320
  }
315
321
  }, [cleanReceivedData, displayErrors, id, slug, dispatch, toggleNotification]);
316
322
 
@@ -334,11 +340,15 @@ const CollectionTypeFormWrapper = ({ allLayoutData, children, slug, id, origin }
334
340
  dispatch(submitSucceeded(cleanReceivedData(data)));
335
341
 
336
342
  dispatch(setStatus('resolved'));
343
+
344
+ return Promise.resolve(data);
337
345
  } catch (err) {
338
346
  trackUsageRef.current('didNotEditEntry', { error: err, trackerProperty });
339
347
  displayErrors(err);
340
348
 
341
349
  dispatch(setStatus('resolved'));
350
+
351
+ return Promise.reject(err);
342
352
  }
343
353
  },
344
354
  [cleanReceivedData, displayErrors, slug, id, dispatch, toggleNotification]
@@ -362,9 +372,13 @@ const CollectionTypeFormWrapper = ({ allLayoutData, children, slug, id, origin }
362
372
 
363
373
  dispatch(submitSucceeded(cleanReceivedData(data)));
364
374
  dispatch(setStatus('resolved'));
375
+
376
+ return Promise.resolve(data);
365
377
  } catch (err) {
366
378
  dispatch(setStatus('resolved'));
367
379
  displayErrors(err);
380
+
381
+ return Promise.reject(err);
368
382
  }
369
383
  }, [cleanReceivedData, displayErrors, id, slug, dispatch, toggleNotification]);
370
384
 
@@ -1,11 +1,13 @@
1
1
  import isEmpty from 'lodash/isEmpty';
2
+ import isNumber from 'lodash/isNumber';
2
3
 
3
4
  import isSingleRelation from './isSingleRelation';
5
+ import isFieldTypeNumber from '../../../../utils/isFieldTypeNumber';
4
6
 
5
7
  export default function hasContent(type, content, metadatas, fieldSchema) {
6
8
  if (type === 'component') {
7
9
  const {
8
- mainField: { name: mainFieldName },
10
+ mainField: { name: mainFieldName, type: mainFieldType },
9
11
  } = metadatas;
10
12
 
11
13
  // Repeatable fields show the ID as fallback, in case the mainField
@@ -14,7 +16,28 @@ export default function hasContent(type, content, metadatas, fieldSchema) {
14
16
  return content.length > 0;
15
17
  }
16
18
 
17
- return !isEmpty(content[mainFieldName]);
19
+ const value = content?.[mainFieldName];
20
+
21
+ // relations, media ... show the id as fallback
22
+ if (mainFieldName === 'id' && ![undefined, null].includes(value)) {
23
+ return true;
24
+ }
25
+
26
+ /* The ID field reports itself as type `integer`, which makes it
27
+ impossible to distinguish it from other number fields.
28
+
29
+ Biginteger fields need to be treated as strings, as `isNumber`
30
+ doesn't deal with them.
31
+ */
32
+ if (
33
+ isFieldTypeNumber(mainFieldType) &&
34
+ mainFieldType !== 'biginteger' &&
35
+ mainFieldName !== 'id'
36
+ ) {
37
+ return isNumber(value);
38
+ }
39
+
40
+ return !isEmpty(value);
18
41
  }
19
42
 
20
43
  if (type === 'relation') {
@@ -25,5 +48,17 @@ export default function hasContent(type, content, metadatas, fieldSchema) {
25
48
  return content.count > 0;
26
49
  }
27
50
 
51
+ /*
52
+ Biginteger fields need to be treated as strings, as `isNumber`
53
+ doesn't deal with them.
54
+ */
55
+ if (isFieldTypeNumber(type) && type !== 'biginteger') {
56
+ return isNumber(content);
57
+ }
58
+
59
+ if (type === 'boolean') {
60
+ return content !== null;
61
+ }
62
+
28
63
  return !isEmpty(content);
29
64
  }
@@ -1,5 +1,9 @@
1
1
  import React, { useCallback, useEffect, useMemo, useRef, useReducer } from 'react';
2
- import { cloneDeep, get, isEmpty, isEqual, set } from 'lodash';
2
+ import isEmpty from 'lodash/isEmpty';
3
+ import cloneDeep from 'lodash/cloneDeep';
4
+ import get from 'lodash/get';
5
+ import isEqual from 'lodash/isEqual';
6
+ import set from 'lodash/set';
3
7
  import PropTypes from 'prop-types';
4
8
  import { useIntl } from 'react-intl';
5
9
  import { Prompt, Redirect } from 'react-router-dom';
@@ -10,10 +14,13 @@ import {
10
14
  useNotification,
11
15
  useOverlayBlocker,
12
16
  useTracking,
17
+ getYupInnerErrors,
13
18
  } from '@strapi/helper-plugin';
19
+
14
20
  import { getTrad, removeKeyInObject } from '../../utils';
15
21
  import reducer, { initialState } from './reducer';
16
- import { cleanData, createYupSchema, getYupInnerErrors } from './utils';
22
+ import { cleanData, createYupSchema } from './utils';
23
+ import { getAPIInnerError } from './utils/getAPIInnerError';
17
24
 
18
25
  const EditViewDataManagerProvider = ({
19
26
  allLayoutData,
@@ -290,30 +297,27 @@ const EditViewDataManagerProvider = ({
290
297
  e.preventDefault();
291
298
  let errors = {};
292
299
 
293
- // First validate the form
294
300
  try {
295
301
  await yupSchema.validate(modifiedData, { abortEarly: false });
296
-
297
- const formData = createFormData(modifiedData);
298
-
299
- if (isCreatingEntry) {
300
- onPost(formData, trackerProperty);
301
- } else {
302
- onPut(formData, trackerProperty);
303
- }
304
302
  } catch (err) {
305
- console.log('ValidationError');
306
- console.log(err);
307
-
308
303
  errors = getYupInnerErrors(err);
304
+ }
309
305
 
310
- toggleNotification({
311
- type: 'warning',
312
- message: {
313
- id: getTrad('containers.EditView.notification.errors'),
314
- defaultMessage: 'The form contains some errors',
315
- },
316
- });
306
+ try {
307
+ if (isEmpty(errors)) {
308
+ const formData = createFormData(modifiedData);
309
+
310
+ if (isCreatingEntry) {
311
+ await onPost(formData, trackerProperty);
312
+ } else {
313
+ await onPut(formData, trackerProperty);
314
+ }
315
+ }
316
+ } catch (err) {
317
+ errors = {
318
+ ...errors,
319
+ ...getAPIInnerError(err),
320
+ };
317
321
  }
318
322
 
319
323
  dispatch({
@@ -321,16 +325,7 @@ const EditViewDataManagerProvider = ({
321
325
  errors,
322
326
  });
323
327
  },
324
- [
325
- createFormData,
326
- isCreatingEntry,
327
- modifiedData,
328
- onPost,
329
- onPut,
330
- toggleNotification,
331
- trackerProperty,
332
- yupSchema,
333
- ]
328
+ [createFormData, isCreatingEntry, modifiedData, onPost, onPut, trackerProperty, yupSchema]
334
329
  );
335
330
 
336
331
  const handlePublish = useCallback(async () => {
@@ -345,17 +340,22 @@ const EditViewDataManagerProvider = ({
345
340
  let errors = {};
346
341
 
347
342
  try {
348
- // Validate the form using yup
349
343
  await schema.validate(modifiedData, { abortEarly: false });
350
-
351
- onPublish();
352
344
  } catch (err) {
353
- console.error('ValidationError');
354
- console.error(err);
355
-
356
345
  errors = getYupInnerErrors(err);
357
346
  }
358
347
 
348
+ try {
349
+ if (isEmpty(errors)) {
350
+ await onPublish();
351
+ }
352
+ } catch (err) {
353
+ errors = {
354
+ ...errors,
355
+ ...getAPIInnerError(err),
356
+ };
357
+ }
358
+
359
359
  dispatch({
360
360
  type: 'SET_FORM_ERRORS',
361
361
  errors,
@@ -0,0 +1,18 @@
1
+ import { getTrad } from '../../../utils';
2
+
3
+ export function getAPIInnerError(error) {
4
+ const errorPayload = error.response.data.error.details.errors;
5
+ const validationErrors = errorPayload.reduce((acc, err) => {
6
+ acc[err.path.join('.')] = {
7
+ id: getTrad(`apiError.${err.message}`),
8
+ defaultMessage: err.message,
9
+ values: {
10
+ field: err.path[err.path.length - 1],
11
+ },
12
+ };
13
+
14
+ return acc;
15
+ }, {});
16
+
17
+ return validationErrors;
18
+ }
@@ -0,0 +1,15 @@
1
+ import { getTrad } from '../../../utils';
2
+
3
+ export function handleAPIError(error) {
4
+ const errorPayload = error.response.data.error.details.errors;
5
+ const validationErrors = errorPayload.reduce((acc, err) => {
6
+ acc[err.path.join('.')] = {
7
+ id: getTrad(`apiError.${err.message}`),
8
+ defaultMessage: err.message,
9
+ };
10
+
11
+ return acc;
12
+ }, {});
13
+
14
+ return validationErrors;
15
+ }
@@ -1,4 +1,3 @@
1
1
  export { default as moveFields } from './moveFields';
2
2
  export { default as cleanData } from './cleanData';
3
- export { default as getYupInnerErrors } from './getYupInnerErrors';
4
3
  export { default as createYupSchema } from './schema';
@@ -7,6 +7,8 @@ import toNumber from 'lodash/toNumber';
7
7
  import * as yup from 'yup';
8
8
  import { translatedErrors as errorsTrads } from '@strapi/helper-plugin';
9
9
 
10
+ import isFieldTypeNumber from '../../../utils/isFieldTypeNumber';
11
+
10
12
  yup.addMethod(yup.mixed, 'defined', function() {
11
13
  return this.test('defined', errorsTrads.required, value => value !== undefined);
12
14
  });
@@ -240,14 +242,14 @@ const createYupSchemaAttribute = (type, validations, options) => {
240
242
  .typeError();
241
243
  }
242
244
 
243
- if (['date', 'datetime'].includes(type)) {
244
- schema = yup.date();
245
- }
246
-
247
245
  if (type === 'biginteger') {
248
246
  schema = yup.string().matches(/^-?\d*$/);
249
247
  }
250
248
 
249
+ if (['date', 'datetime'].includes(type)) {
250
+ schema = yup.date();
251
+ }
252
+
251
253
  Object.keys(validations).forEach(validation => {
252
254
  const validationValue = validations[validation];
253
255
 
@@ -273,7 +275,7 @@ const createYupSchemaAttribute = (type, validations, options) => {
273
275
  return true;
274
276
  }
275
277
 
276
- if (['number', 'integer', 'biginteger', 'float', 'decimal'].includes(type)) {
278
+ if (isFieldTypeNumber(type)) {
277
279
  if (value === 0) {
278
280
  return true;
279
281
  }
@@ -344,12 +346,12 @@ const createYupSchemaAttribute = (type, validations, options) => {
344
346
  }
345
347
  break;
346
348
  case 'positive':
347
- if (['number', 'integer', 'bigint', 'float', 'decimal'].includes(type)) {
349
+ if (isFieldTypeNumber(type)) {
348
350
  schema = schema.positive();
349
351
  }
350
352
  break;
351
353
  case 'negative':
352
- if (['number', 'integer', 'bigint', 'float', 'decimal'].includes(type)) {
354
+ if (isFieldTypeNumber(type)) {
353
355
  schema = schema.negative();
354
356
  }
355
357
  break;
@@ -106,7 +106,6 @@ const FieldComponent = ({
106
106
  componentValue={componentValue}
107
107
  componentValueLength={componentValueLength}
108
108
  componentUid={componentUid}
109
- isNested={isNested}
110
109
  isReadOnly={isReadOnly}
111
110
  max={max}
112
111
  min={min}
@@ -82,7 +82,6 @@ const InputUID = ({
82
82
  onChange({ target: { name, value: data, type: 'text' } }, shouldSetInitialValue);
83
83
  setIsLoading(false);
84
84
  } catch (err) {
85
- console.error({ err });
86
85
  setIsLoading(false);
87
86
  }
88
87
  };
@@ -107,7 +106,6 @@ const InputUID = ({
107
106
 
108
107
  setIsLoading(false);
109
108
  } catch (err) {
110
- console.error({ err });
111
109
  setIsLoading(false);
112
110
  }
113
111
  };
@@ -184,12 +182,10 @@ const InputUID = ({
184
182
  onChange(e);
185
183
  };
186
184
 
187
- const formattedError = error ? formatMessage({ id: error, defaultMessage: error }) : undefined;
188
-
189
185
  return (
190
186
  <TextInput
191
187
  disabled={disabled}
192
- error={formattedError}
188
+ error={error}
193
189
  endAction={
194
190
  <EndActionWrapper>
195
191
  {availability && availability.isAvailable && !regenerateLabel && (
@@ -42,10 +42,7 @@ function Inputs({
42
42
 
43
43
  const disabled = useMemo(() => !get(metadatas, 'editable', true), [metadatas]);
44
44
  const type = fieldSchema.type;
45
-
46
- const errorId = useMemo(() => {
47
- return get(formErrors, [keys, 'id'], null);
48
- }, [formErrors, keys]);
45
+ const error = get(formErrors, [keys], null);
49
46
 
50
47
  const fieldName = useMemo(() => {
51
48
  return getFieldName(keys);
@@ -177,7 +174,7 @@ function Inputs({
177
174
  description={description ? { id: description, defaultMessage: description } : null}
178
175
  intlLabel={{ id: label, defaultMessage: label }}
179
176
  labelAction={labelAction}
180
- error={errorId}
177
+ error={error && formatMessage(error)}
181
178
  name={keys}
182
179
  required={isRequired}
183
180
  />
@@ -215,6 +212,7 @@ function Inputs({
215
212
  }
216
213
  queryInfos={queryInfos}
217
214
  value={value}
215
+ error={error && formatMessage(error)}
218
216
  />
219
217
  );
220
218
  }
@@ -228,7 +226,7 @@ function Inputs({
228
226
  isNullable={inputType === 'bool' && [null, undefined].includes(fieldSchema.default)}
229
227
  description={description ? { id: description, defaultMessage: description } : null}
230
228
  disabled={shouldDisableField}
231
- error={errorId}
229
+ error={error}
232
230
  labelAction={labelAction}
233
231
  contentTypeUID={currentContentTypeLayout.uid}
234
232
  customInputs={{
@@ -5,7 +5,6 @@ import { useIntl } from 'react-intl';
5
5
  import styled from 'styled-components';
6
6
  import PropTypes from 'prop-types';
7
7
  import get from 'lodash/get';
8
- import take from 'lodash/take';
9
8
  import { useNotification } from '@strapi/helper-plugin';
10
9
  import { Box } from '@strapi/design-system/Box';
11
10
  import { Flex } from '@strapi/design-system/Flex';
@@ -17,6 +16,7 @@ import ItemTypes from '../../utils/ItemTypes';
17
16
  import ComponentInitializer from '../ComponentInitializer';
18
17
  import connect from './utils/connect';
19
18
  import select from './utils/select';
19
+ import getComponentErrorKeys from './utils/getComponentErrorKeys';
20
20
  import DraggedItem from './DraggedItem';
21
21
  import AccordionGroupCustom from './AccordionGroupCustom';
22
22
 
@@ -38,7 +38,6 @@ const RepeatableComponent = ({
38
38
  componentUid,
39
39
  componentValue,
40
40
  componentValueLength,
41
- isNested,
42
41
  isReadOnly,
43
42
  max,
44
43
  min,
@@ -59,16 +58,7 @@ const RepeatableComponent = ({
59
58
  return getMaxTempKey(componentValue || []) + 1;
60
59
  }, [componentValue]);
61
60
 
62
- const componentErrorKeys = Object.keys(formErrors)
63
- .filter(errorKey => {
64
- return take(errorKey.split('.'), isNested ? 3 : 1).join('.') === name;
65
- })
66
- .map(errorKey => {
67
- return errorKey
68
- .split('.')
69
- .slice(0, name.split('.').length + 1)
70
- .join('.');
71
- });
61
+ const componentErrorKeys = getComponentErrorKeys(name, formErrors);
72
62
 
73
63
  const toggleCollapses = () => {
74
64
  setCollapseToOpen('');
@@ -187,7 +177,6 @@ RepeatableComponent.defaultProps = {
187
177
  componentValue: null,
188
178
  componentValueLength: 0,
189
179
  formErrors: {},
190
- isNested: false,
191
180
  max: Infinity,
192
181
  min: 0,
193
182
  };
@@ -198,7 +187,6 @@ RepeatableComponent.propTypes = {
198
187
  componentValue: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),
199
188
  componentValueLength: PropTypes.number,
200
189
  formErrors: PropTypes.object,
201
- isNested: PropTypes.bool,
202
190
  isReadOnly: PropTypes.bool.isRequired,
203
191
  max: PropTypes.number,
204
192
  min: PropTypes.number,
@@ -207,9 +195,6 @@ RepeatableComponent.propTypes = {
207
195
 
208
196
  const Memoized = memo(RepeatableComponent);
209
197
 
210
- export default connect(
211
- Memoized,
212
- select
213
- );
198
+ export default connect(Memoized, select);
214
199
 
215
200
  export { RepeatableComponent };
@@ -0,0 +1,10 @@
1
+ export default function getComponentErrorKeys(name, formErrors) {
2
+ return Object.keys(formErrors)
3
+ .filter(errorKey => errorKey.startsWith(name))
4
+ .map(errorKey =>
5
+ errorKey
6
+ .split('.')
7
+ .slice(0, name.split('.').length + 1)
8
+ .join('.')
9
+ );
10
+ }
@@ -144,8 +144,6 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
144
144
  const displayErrors = useCallback(
145
145
  err => {
146
146
  const errorPayload = err.response.payload;
147
- console.error(errorPayload);
148
-
149
147
  let errorMessage = get(errorPayload, ['message'], 'Bad Request');
150
148
 
151
149
  // TODO handle errors correctly when back-end ready
@@ -178,10 +176,12 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
178
176
  } catch (err) {
179
177
  trackUsageRef.current('didNotDeleteEntry', { error: err, ...trackerProperty });
180
178
 
179
+ displayErrors(err);
180
+
181
181
  return Promise.reject(err);
182
182
  }
183
183
  },
184
- [slug, toggleNotification, searchToSend]
184
+ [slug, displayErrors, toggleNotification, searchToSend]
185
185
  );
186
186
 
187
187
  const onDeleteSucceeded = useCallback(() => {
@@ -211,12 +211,16 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
211
211
  setIsCreatingEntry(false);
212
212
 
213
213
  dispatch(setStatus('resolved'));
214
+
215
+ return Promise.resolve(data);
214
216
  } catch (err) {
215
217
  trackUsageRef.current('didNotCreateEntry', { error: err, trackerProperty });
216
218
 
217
219
  displayErrors(err);
218
220
 
219
221
  dispatch(setStatus('resolved'));
222
+
223
+ return Promise.reject(err);
220
224
  }
221
225
  },
222
226
  [cleanReceivedData, displayErrors, slug, dispatch, rawQuery, toggleNotification, setCurrentStep]
@@ -239,10 +243,14 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
239
243
  dispatch(submitSucceeded(cleanReceivedData(data)));
240
244
 
241
245
  dispatch(setStatus('resolved'));
246
+
247
+ return Promise.resolve(data);
242
248
  } catch (err) {
243
249
  displayErrors(err);
244
250
 
245
251
  dispatch(setStatus('resolved'));
252
+
253
+ return Promise.reject(err);
246
254
  }
247
255
  }, [cleanReceivedData, displayErrors, slug, searchToSend, dispatch, toggleNotification]);
248
256
 
@@ -267,12 +275,16 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
267
275
  dispatch(submitSucceeded(cleanReceivedData(data)));
268
276
 
269
277
  dispatch(setStatus('resolved'));
278
+
279
+ return Promise.resolve(data);
270
280
  } catch (err) {
271
281
  displayErrors(err);
272
282
 
273
283
  trackUsageRef.current('didNotEditEntry', { error: err, trackerProperty });
274
284
 
275
285
  dispatch(setStatus('resolved'));
286
+
287
+ return Promise.reject(err);
276
288
  }
277
289
  },
278
290
  [cleanReceivedData, displayErrors, slug, dispatch, rawQuery, toggleNotification]
@@ -118,7 +118,6 @@ const Wysiwyg = ({
118
118
  )
119
119
  : '';
120
120
 
121
- const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';
122
121
  const label = intlLabel.id
123
122
  ? formatMessage(
124
123
  { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },
@@ -157,7 +156,7 @@ const Wysiwyg = ({
157
156
  disabled={disabled}
158
157
  isExpandMode={isExpandMode}
159
158
  editorRef={editorRef}
160
- error={errorMessage}
159
+ error={error}
161
160
  isPreviewMode={isPreviewMode}
162
161
  name={name}
163
162
  onChange={onChange}
@@ -171,10 +170,10 @@ const Wysiwyg = ({
171
170
  <Hint description={description} name={name} error={error} />
172
171
  </Stack>
173
172
 
174
- {errorMessage && (
173
+ {error && (
175
174
  <Box paddingTop={1}>
176
175
  <Typography variant="pi" textColor="danger600" data-strapi-field-error>
177
- {errorMessage}
176
+ {error}
178
177
  </Typography>
179
178
  </Box>
180
179
  )}
@@ -11,7 +11,12 @@ import { makeSelectModelAndComponentSchemas } from '../../App/selectors';
11
11
  import getTrad from '../../../utils/getTrad';
12
12
  import GenericInput from './GenericInput';
13
13
 
14
- const FIELD_SIZES = [[4, '33%'], [6, '50%'], [8, '66%'], [12, '100%']];
14
+ const FIELD_SIZES = [
15
+ [4, '33%'],
16
+ [6, '50%'],
17
+ [8, '66%'],
18
+ [12, '100%'],
19
+ ];
15
20
 
16
21
  const NON_RESIZABLE_FIELD_TYPES = ['dynamiczone', 'component', 'json', 'richtext'];
17
22
 
@@ -59,8 +59,8 @@ const EditSettingsView = ({ mainLayout, components, isContentTypeView, slug, upd
59
59
  'relation',
60
60
  'component',
61
61
  'boolean',
62
- 'date',
63
62
  'media',
63
+ 'password',
64
64
  'richtext',
65
65
  'timestamp',
66
66
  ].includes(type) && !!type
@@ -28,7 +28,13 @@ const formatLayout = arr => {
28
28
 
29
29
  return acc2;
30
30
  }, []);
31
- const rowId = acc.length === 0 ? 0 : Math.max.apply(Math, acc.map(o => o.rowId)) + 1;
31
+ const rowId =
32
+ acc.length === 0
33
+ ? 0
34
+ : Math.max.apply(
35
+ Math,
36
+ acc.map(o => o.rowId)
37
+ ) + 1;
32
38
 
33
39
  const currentRowSize = getRowSize(currentRow);
34
40
 
@@ -71,7 +71,4 @@ DeleteLink.propTypes = {
71
71
 
72
72
  const Memoized = memo(DeleteLink, isEqual);
73
73
 
74
- export default connect(
75
- Memoized,
76
- select
77
- );
74
+ export default connect(Memoized, select);
@@ -88,8 +88,5 @@ DraftAndPublishBadge.propTypes = {
88
88
  isPublished: PropTypes.bool.isRequired,
89
89
  };
90
90
 
91
- export default connect(
92
- DraftAndPublishBadge,
93
- select
94
- );
91
+ export default connect(DraftAndPublishBadge, select);
95
92
  export { DraftAndPublishBadge };