@strapi/admin 4.1.7 → 4.1.10-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. package/admin/src/assets/images/icon_offline-cloud.svg +5 -0
  2. package/admin/src/components/ConfigurationsProvider/index.js +51 -0
  3. package/admin/src/components/ConfigurationsProvider/reducer.js +28 -0
  4. package/admin/src/components/LeftMenu/index.js +4 -2
  5. package/admin/src/components/Providers/index.js +8 -4
  6. package/admin/src/components/UnauthenticatedLogo/index.js +4 -2
  7. package/admin/src/content-manager/components/DynamicTable/CellContent/utils/hasContent.js +4 -0
  8. package/admin/src/content-manager/components/EditViewDataManagerProvider/index.js +5 -5
  9. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/schema.js +12 -12
  10. package/admin/src/content-manager/components/FieldComponent/index.js +0 -1
  11. package/admin/src/content-manager/components/Inputs/index.js +4 -4
  12. package/admin/src/content-manager/components/RepeatableComponent/index.js +2 -14
  13. package/admin/src/content-manager/components/RepeatableComponent/utils/getComponentErrorKeys.js +10 -0
  14. package/admin/src/content-manager/pages/EditSettingsView/index.js +1 -1
  15. package/admin/src/hooks/useNavigatorOnLine/index.js +31 -0
  16. package/admin/src/pages/App/index.js +7 -2
  17. package/admin/src/pages/MarketplacePage/components/MissingPluginBanner/index.js +40 -0
  18. package/admin/src/pages/MarketplacePage/components/PageHeader/index.js +46 -0
  19. package/admin/src/pages/MarketplacePage/index.js +48 -26
  20. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/Form/index.js +85 -0
  21. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/Form/init.js +13 -0
  22. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/Form/reducer.js +43 -0
  23. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/index.js +116 -0
  24. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/reducer.js +28 -0
  25. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/stepper.js +25 -0
  26. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/AddLogoDialog.js +67 -0
  27. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromComputerForm.js +176 -0
  28. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromUrlForm.js +82 -0
  29. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/ImageCardAsset.js +51 -0
  30. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/PendingLogoDialog.js +97 -0
  31. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/index.js +85 -0
  32. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/reducer.js +28 -0
  33. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +149 -87
  34. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/api.js +16 -0
  35. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/constants.js +3 -0
  36. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/getFormData.js +17 -0
  37. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/parseFileMetadatas.js +76 -0
  38. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/prefixAllUrls.js +17 -0
  39. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/urlToFile.js +21 -0
  40. package/admin/src/translations/de.json +244 -23
  41. package/admin/src/translations/en.json +29 -0
  42. package/build/1856.521a99fd.chunk.js +172 -0
  43. package/build/2481.7ba28142.chunk.js +184 -0
  44. package/build/2758.927ecb6d.chunk.js +162 -0
  45. package/build/2912.79c2b3c8.chunk.js +253 -0
  46. package/build/372.3720845e.chunk.js +899 -0
  47. package/build/4715.77e04177.chunk.js +385 -0
  48. package/build/4800.d3ebc81d.chunk.js +1 -0
  49. package/build/497.fbd75558.chunk.js +284 -0
  50. package/build/4982.f53b78a4.chunk.js +308 -0
  51. package/build/5289.0341db2d.chunk.js +336 -0
  52. package/build/6404.80bf5858.chunk.js +506 -0
  53. package/build/6925.fafef528.chunk.js +761 -0
  54. package/build/7197.959bbe97.chunk.js +113 -0
  55. package/build/7589.f3b26345.chunk.js +194 -0
  56. package/build/7841.f0e7d629.chunk.js +253 -0
  57. package/build/8469.3af1823d.chunk.js +1 -0
  58. package/build/9115.318a6841.chunk.js +1 -0
  59. package/build/9298.f97fcef0.chunk.js +334 -0
  60. package/build/948.d64fb515.chunk.js +2 -0
  61. package/build/9853.d96fbc67.chunk.js +356 -0
  62. package/build/Admin-authenticatedApp.d8767873.chunk.js +80 -0
  63. package/build/Admin_homePage.50b6c129.chunk.js +71 -0
  64. package/build/Admin_marketplace.514ace37.chunk.js +11 -0
  65. package/build/Admin_pluginsPage.e895d79f.chunk.js +1 -0
  66. package/build/Admin_profilePage.33cfed9b.chunk.js +15 -0
  67. package/build/Admin_settingsPage.0d94a598.chunk.js +180 -0
  68. package/build/a6b842e0b6d2b61135d1.svg +5 -0
  69. package/build/admin-edit-roles-page.06f3d288.chunk.js +1 -0
  70. package/build/admin-edit-users.6a325cca.chunk.js +11 -0
  71. package/build/admin-users.b89adf82.chunk.js +12 -0
  72. package/build/api-tokens-create-page.635e20c8.chunk.js +1 -0
  73. package/build/api-tokens-edit-page.db07253e.chunk.js +1 -0
  74. package/build/api-tokens-list-page.346c2149.chunk.js +15 -0
  75. package/build/ar-json.d4cb26d9.chunk.js +1 -0
  76. package/build/codemirror-addon-closebrackets.c0f97916.chunk.js +2 -0
  77. package/build/codemirror-addon-lint-js.7c35dcb0.chunk.js +1 -0
  78. package/build/codemirror-addon-lint.505ff1d4.chunk.js +1 -0
  79. package/build/codemirror-addon-mark-selection.653e904d.chunk.js +1 -0
  80. package/build/codemirror-css.98490df3.chunk.js +346 -0
  81. package/build/codemirror-javacript.cafbda9c.chunk.js +1 -0
  82. package/build/codemirror-theme.b3c64617.chunk.js +34 -0
  83. package/build/content-manager.78e3f35c.chunk.js +1204 -0
  84. package/build/content-type-builder-translation-ar-json.142327af.chunk.js +1 -0
  85. package/build/content-type-builder-translation-cs-json.4aafb972.chunk.js +1 -0
  86. package/build/content-type-builder-translation-de-json.0d7696b9.chunk.js +1 -0
  87. package/build/{content-type-builder-translation-dk-json.52805572.chunk.js → content-type-builder-translation-dk-json.4729f055.chunk.js} +1 -1
  88. package/build/content-type-builder-translation-en-json.e5110288.chunk.js +1 -0
  89. package/build/{content-type-builder-translation-es-json.5a362abf.chunk.js → content-type-builder-translation-es-json.333cf47f.chunk.js} +1 -1
  90. package/build/content-type-builder-translation-fr-json.aa6eeea8.chunk.js +1 -0
  91. package/build/{content-type-builder-translation-id-json.4a21dfab.chunk.js → content-type-builder-translation-id-json.7c00a32a.chunk.js} +1 -1
  92. package/build/content-type-builder-translation-it-json.a906b389.chunk.js +1 -0
  93. package/build/content-type-builder-translation-ja-json.87f71930.chunk.js +1 -0
  94. package/build/content-type-builder-translation-ko-json.51201b12.chunk.js +1 -0
  95. package/build/{content-type-builder-translation-ms-json.3755f8c8.chunk.js → content-type-builder-translation-ms-json.963a1a01.chunk.js} +1 -1
  96. package/build/{content-type-builder-translation-nl-json.6f8d924b.chunk.js → content-type-builder-translation-nl-json.c46c8f30.chunk.js} +1 -1
  97. package/build/{content-type-builder-translation-pl-json.fc0b0c20.chunk.js → content-type-builder-translation-pl-json.a866acda.chunk.js} +1 -1
  98. package/build/content-type-builder-translation-pt-BR-json.5739a2aa.chunk.js +1 -0
  99. package/build/content-type-builder-translation-pt-json.766bd747.chunk.js +1 -0
  100. package/build/content-type-builder-translation-ru-json.cf8d7c5c.chunk.js +1 -0
  101. package/build/content-type-builder-translation-sk-json.3a6defe0.chunk.js +1 -0
  102. package/build/content-type-builder-translation-th-json.c96a2d3f.chunk.js +1 -0
  103. package/build/content-type-builder-translation-tr-json.2e52bc60.chunk.js +1 -0
  104. package/build/content-type-builder-translation-uk-json.d8c0b6dd.chunk.js +1 -0
  105. package/build/content-type-builder-translation-zh-Hans-json.92a27f59.chunk.js +1 -0
  106. package/build/content-type-builder-translation-zh-json.2cc55621.chunk.js +1 -0
  107. package/build/content-type-builder.0d8729ad.chunk.js +141 -0
  108. package/build/cropper-css.0055cd53.chunk.js +306 -0
  109. package/build/cs-json.c8f28ba8.chunk.js +1 -0
  110. package/build/de-json.0b92acd2.chunk.js +1 -0
  111. package/build/{dk-json.fb9ee45a.chunk.js → dk-json.9f1bc016.chunk.js} +1 -1
  112. package/build/email-settings-page.fcc7e65d.chunk.js +103 -0
  113. package/build/{email-translation-de-json.559a7d5f.chunk.js → email-translation-ar-json.c624512d.chunk.js} +1 -1
  114. package/build/{email-translation-ar-json.95d90eb4.chunk.js → email-translation-cs-json.cb18caab.chunk.js} +1 -1
  115. package/build/{email-translation-it-json.3de61cb6.chunk.js → email-translation-de-json.54743260.chunk.js} +1 -1
  116. package/build/{email-translation-dk-json.f8a595bf.chunk.js → email-translation-dk-json.f323fe4e.chunk.js} +1 -1
  117. package/build/{email-translation-en-json.fa0dc92b.chunk.js → email-translation-en-json.6da7e388.chunk.js} +1 -1
  118. package/build/{email-translation-es-json.eb303dea.chunk.js → email-translation-es-json.9021417d.chunk.js} +1 -1
  119. package/build/{email-translation-fr-json.49c3c888.chunk.js → email-translation-fr-json.9f125db0.chunk.js} +1 -1
  120. package/build/email-translation-id-json.3bcae5f5.chunk.js +1 -0
  121. package/build/{email-translation-cs-json.dfd1f3f2.chunk.js → email-translation-it-json.6ffd1774.chunk.js} +1 -1
  122. package/build/email-translation-ja-json.72b3f73c.chunk.js +1 -0
  123. package/build/email-translation-ko-json.e61d4e7a.chunk.js +1 -0
  124. package/build/email-translation-ms-json.b2b11e05.chunk.js +1 -0
  125. package/build/email-translation-nl-json.5349635f.chunk.js +1 -0
  126. package/build/email-translation-pl-json.6da50d0f.chunk.js +1 -0
  127. package/build/email-translation-pt-BR-json.2c98ab20.chunk.js +1 -0
  128. package/build/email-translation-pt-json.959ea070.chunk.js +1 -0
  129. package/build/email-translation-ru-json.d508cf3e.chunk.js +1 -0
  130. package/build/email-translation-sk-json.fa1fd4b3.chunk.js +1 -0
  131. package/build/email-translation-th-json.989cfecc.chunk.js +1 -0
  132. package/build/email-translation-tr-json.87f2feb3.chunk.js +1 -0
  133. package/build/email-translation-uk-json.0396a803.chunk.js +1 -0
  134. package/build/email-translation-vi-json.c0d8c414.chunk.js +1 -0
  135. package/build/email-translation-zh-Hans-json.b463cb25.chunk.js +1 -0
  136. package/build/email-translation-zh-json.3455468b.chunk.js +1 -0
  137. package/build/en-json.ca572384.chunk.js +1 -0
  138. package/build/{es-json.8f4d89e2.chunk.js → es-json.2a5a9fc1.chunk.js} +1 -1
  139. package/build/fontawesome-css-all.b88d464e.chunk.js +4618 -0
  140. package/build/fontawesome-css.59dc4459.chunk.js +6 -0
  141. package/build/fontawesome-js.252cc5f3.chunk.js +7 -0
  142. package/build/fr-json.84064a0b.chunk.js +1 -0
  143. package/build/he-json.d40da459.chunk.js +1 -0
  144. package/build/highlight.js.9d8ef460.chunk.js +86 -0
  145. package/build/hu-json.c81ce352.chunk.js +1 -0
  146. package/build/i18n-settings-page.477ffac7.chunk.js +101 -0
  147. package/build/{i18n-translation-de-json.96ae1f68.chunk.js → i18n-translation-de-json.92534555.chunk.js} +1 -1
  148. package/build/{i18n-translation-dk-json.ecf02d28.chunk.js → i18n-translation-dk-json.54f410ca.chunk.js} +1 -1
  149. package/build/{i18n-translation-en-json.4d823f62.chunk.js → i18n-translation-en-json.85bc892c.chunk.js} +1 -1
  150. package/build/i18n-translation-es-json.488206ae.chunk.js +1 -0
  151. package/build/i18n-translation-fr-json.0839d68d.chunk.js +1 -0
  152. package/build/i18n-translation-ko-json.d0bc1203.chunk.js +1 -0
  153. package/build/i18n-translation-zh-Hans-json.560a98e3.chunk.js +1 -0
  154. package/build/{id-json.fef679cb.chunk.js → id-json.fad45d17.chunk.js} +1 -1
  155. package/build/index.html +1 -1
  156. package/build/it-json.12df4cdf.chunk.js +1 -0
  157. package/build/ja-json.850237e9.chunk.js +1 -0
  158. package/build/ko-json.2f3d256e.chunk.js +1 -0
  159. package/build/main.06f66609.js +7909 -0
  160. package/build/{ms-json.f46167ef.chunk.js → ms-json.836ed013.chunk.js} +1 -1
  161. package/build/nl-json.465b173f.chunk.js +1 -0
  162. package/build/{no-json.17ecda5d.chunk.js → no-json.e8749dd4.chunk.js} +1 -1
  163. package/build/{pl-json.0db77f2c.chunk.js → pl-json.94f05d2c.chunk.js} +1 -1
  164. package/build/{pt-BR-json.4c90cb2d.chunk.js → pt-BR-json.6301d49b.chunk.js} +1 -1
  165. package/build/pt-json.c23020ab.chunk.js +1 -0
  166. package/build/ru-json.4560906c.chunk.js +1 -0
  167. package/build/runtime~main.dc1c7ef6.js +2 -0
  168. package/build/sk-json.5b33afc2.chunk.js +1 -0
  169. package/build/sso-settings-page.0b4d2106.chunk.js +1 -0
  170. package/build/sv-json.cdcac02d.chunk.js +1 -0
  171. package/build/th-json.3aadaec6.chunk.js +1 -0
  172. package/build/tr-json.276e59fe.chunk.js +1 -0
  173. package/build/uk-json.5b5b9c27.chunk.js +1 -0
  174. package/build/upload-settings.1456cd65.chunk.js +101 -0
  175. package/build/upload-translation-de-json.b642da08.chunk.js +1 -0
  176. package/build/{upload-translation-dk-json.b74134c8.chunk.js → upload-translation-dk-json.fc61df13.chunk.js} +1 -1
  177. package/build/{upload-translation-en-json.c4e56528.chunk.js → upload-translation-en-json.59269508.chunk.js} +1 -1
  178. package/build/{upload-translation-es-json.15a3015f.chunk.js → upload-translation-es-json.8ec935ef.chunk.js} +1 -1
  179. package/build/upload-translation-fr-json.eb9b4f84.chunk.js +1 -0
  180. package/build/upload-translation-he-json.c226f2dc.chunk.js +1 -0
  181. package/build/upload-translation-it-json.8e58456e.chunk.js +1 -0
  182. package/build/upload-translation-ja-json.1378a2e7.chunk.js +1 -0
  183. package/build/upload-translation-ko-json.5e06e112.chunk.js +1 -0
  184. package/build/{upload-translation-ms-json.30974c82.chunk.js → upload-translation-ms-json.dc3bf0d7.chunk.js} +1 -1
  185. package/build/{upload-translation-pl-json.3740abed.chunk.js → upload-translation-pl-json.6071e38c.chunk.js} +1 -1
  186. package/build/upload-translation-pt-BR-json.7e8d9550.chunk.js +1 -0
  187. package/build/upload-translation-ru-json.da2529f3.chunk.js +1 -0
  188. package/build/upload-translation-sk-json.bfdf4f09.chunk.js +1 -0
  189. package/build/upload-translation-th-json.6a48b826.chunk.js +1 -0
  190. package/build/upload-translation-uk-json.6fb09148.chunk.js +1 -0
  191. package/build/upload-translation-zh-Hans-json.c9622577.chunk.js +1 -0
  192. package/build/upload-translation-zh-json.711f804b.chunk.js +1 -0
  193. package/build/upload.d45af2c9.chunk.js +105 -0
  194. package/build/users-advanced-settings-page.5aa21b84.chunk.js +101 -0
  195. package/build/users-email-settings-page.8b561ea3.chunk.js +1 -0
  196. package/build/users-permissions-translation-ar-json.e8123ed2.chunk.js +1 -0
  197. package/build/users-permissions-translation-cs-json.e6649c5f.chunk.js +1 -0
  198. package/build/{users-permissions-translation-de-json.a5c8db9c.chunk.js → users-permissions-translation-de-json.c3628843.chunk.js} +1 -1
  199. package/build/{users-permissions-translation-dk-json.1fe5e07a.chunk.js → users-permissions-translation-dk-json.fe39c74b.chunk.js} +1 -1
  200. package/build/users-permissions-translation-en-json.3fe86528.chunk.js +1 -0
  201. package/build/{users-permissions-translation-es-json.05669296.chunk.js → users-permissions-translation-es-json.1bb9cde2.chunk.js} +1 -1
  202. package/build/users-permissions-translation-fr-json.172aa69f.chunk.js +1 -0
  203. package/build/{users-permissions-translation-id-json.186a3f65.chunk.js → users-permissions-translation-id-json.5aadd143.chunk.js} +1 -1
  204. package/build/users-permissions-translation-it-json.7d377480.chunk.js +1 -0
  205. package/build/users-permissions-translation-ja-json.4967badf.chunk.js +1 -0
  206. package/build/users-permissions-translation-ko-json.3be77775.chunk.js +1 -0
  207. package/build/{users-permissions-translation-ms-json.3a128ff4.chunk.js → users-permissions-translation-ms-json.ea8a2baf.chunk.js} +1 -1
  208. package/build/{users-permissions-translation-nl-json.4146aed1.chunk.js → users-permissions-translation-nl-json.d638c4ce.chunk.js} +1 -1
  209. package/build/{users-permissions-translation-pl-json.a61de7ed.chunk.js → users-permissions-translation-pl-json.3c4fe81c.chunk.js} +1 -1
  210. package/build/users-permissions-translation-pt-BR-json.f6791a86.chunk.js +1 -0
  211. package/build/users-permissions-translation-pt-json.38afed04.chunk.js +1 -0
  212. package/build/users-permissions-translation-ru-json.319d51ef.chunk.js +1 -0
  213. package/build/users-permissions-translation-sk-json.ba1cd385.chunk.js +1 -0
  214. package/build/users-permissions-translation-sv-json.83c60841.chunk.js +1 -0
  215. package/build/users-permissions-translation-th-json.68873214.chunk.js +1 -0
  216. package/build/users-permissions-translation-tr-json.cdc49a3c.chunk.js +1 -0
  217. package/build/users-permissions-translation-uk-json.63eaa01c.chunk.js +1 -0
  218. package/build/users-permissions-translation-vi-json.dccc02fc.chunk.js +1 -0
  219. package/build/users-permissions-translation-zh-Hans-json.c3fd301b.chunk.js +1 -0
  220. package/build/users-permissions-translation-zh-json.e03ae2a4.chunk.js +1 -0
  221. package/build/users-providers-settings-page.82141ace.chunk.js +1 -0
  222. package/build/users-roles-settings-page.97d7092d.chunk.js +30 -0
  223. package/build/vi-json.3d14e91e.chunk.js +1 -0
  224. package/build/webhook-edit-page.2e6727ab.chunk.js +23 -0
  225. package/build/webhook-list-page.927257b5.chunk.js +133 -0
  226. package/build/zh-Hans-json.c84ce330.chunk.js +1 -0
  227. package/build/zh-json.96bf6019.chunk.js +1 -0
  228. package/package.json +10 -14
  229. package/scripts/build.js +1 -1
  230. package/server/bootstrap.js +3 -1
  231. package/server/config/admin-actions.js +14 -0
  232. package/server/config/index.js +0 -1
  233. package/server/controllers/admin.js +40 -2
  234. package/server/routes/admin.js +28 -0
  235. package/server/services/api-token.js +15 -14
  236. package/server/services/index.js +1 -0
  237. package/server/services/project-settings.js +173 -0
  238. package/server/services/token.js +13 -0
  239. package/server/utils/index.d.ts +2 -0
  240. package/server/validation/project-settings.js +39 -0
  241. package/webpack.config.js +78 -59
  242. package/build/1094.e1db3a1a.chunk.js +0 -1
  243. package/build/1454.f065d92a.chunk.js +0 -2
  244. package/build/1454.f065d92a.chunk.js.LICENSE.txt +0 -7
  245. package/build/1856.a30bd09b.chunk.js +0 -1
  246. package/build/2481.4eae9408.chunk.js +0 -1
  247. package/build/2912.c5f76e65.chunk.js +0 -1
  248. package/build/4362.d8299f0c.chunk.js +0 -1
  249. package/build/4715.8a2db02a.chunk.js +0 -1
  250. package/build/4800.f4a1384a.chunk.js +0 -1
  251. package/build/497.3fcf6196.chunk.js +0 -1
  252. package/build/4982.601f6196.chunk.js +0 -1
  253. package/build/6404.3c2d0a81.chunk.js +0 -1
  254. package/build/6925.bd694b04.chunk.js +0 -2
  255. package/build/6925.bd694b04.chunk.js.LICENSE.txt +0 -5
  256. package/build/7841.490dbbf1.chunk.js +0 -1
  257. package/build/8042.1d66811a.chunk.js +0 -2
  258. package/build/8042.1d66811a.chunk.js.LICENSE.txt +0 -4
  259. package/build/8469.8d819a3c.chunk.js +0 -1
  260. package/build/849.82c29ba7.chunk.js +0 -1
  261. package/build/9235.ced8aebf.chunk.js +0 -1
  262. package/build/9260.4233fae2.chunk.js +0 -2
  263. package/build/9260.4233fae2.chunk.js.LICENSE.txt +0 -15
  264. package/build/9853.6ff595fa.chunk.js +0 -1
  265. package/build/9988.fe838ba6.chunk.js +0 -2
  266. package/build/9988.fe838ba6.chunk.js.LICENSE.txt +0 -9
  267. package/build/Admin-authenticatedApp.61248de6.chunk.js +0 -1
  268. package/build/Admin_homePage.4a3aa22e.chunk.js +0 -1
  269. package/build/Admin_marketplace.4748c8f6.chunk.js +0 -1
  270. package/build/Admin_pluginsPage.89a96d29.chunk.js +0 -1
  271. package/build/Admin_profilePage.7869a07a.chunk.js +0 -1
  272. package/build/Admin_settingsPage.2763454c.chunk.js +0 -1
  273. package/build/admin-edit-roles-page.fbcc195d.chunk.js +0 -1
  274. package/build/admin-edit-users.91e8f5e4.chunk.js +0 -1
  275. package/build/admin-users.0a6acd73.chunk.js +0 -1
  276. package/build/api-tokens-create-page.76e13a35.chunk.js +0 -1
  277. package/build/api-tokens-edit-page.b3d48a7f.chunk.js +0 -1
  278. package/build/api-tokens-list-page.4e822ac8.chunk.js +0 -1
  279. package/build/ar-json.cc19c13c.chunk.js +0 -1
  280. package/build/codemirror-addon-closebrackets.0cfe64d0.chunk.js +0 -1
  281. package/build/codemirror-addon-lint-js.a6eeef9c.chunk.js +0 -1
  282. package/build/codemirror-addon-lint.91580cda.chunk.js +0 -1
  283. package/build/codemirror-addon-mark-selection.4dca121f.chunk.js +0 -1
  284. package/build/codemirror-css.48b438c9.chunk.js +0 -1
  285. package/build/codemirror-javacript.8c7c015d.chunk.js +0 -1
  286. package/build/codemirror-theme.b5559efc.chunk.js +0 -1
  287. package/build/content-manager.abde723b.chunk.js +0 -1
  288. package/build/content-type-builder-translation-ar-json.ab0a0caa.chunk.js +0 -1
  289. package/build/content-type-builder-translation-cs-json.e3913c9f.chunk.js +0 -1
  290. package/build/content-type-builder-translation-de-json.5eb3135d.chunk.js +0 -1
  291. package/build/content-type-builder-translation-en-json.e51b2ec3.chunk.js +0 -1
  292. package/build/content-type-builder-translation-fr-json.afd4a12f.chunk.js +0 -1
  293. package/build/content-type-builder-translation-it-json.4fa203b1.chunk.js +0 -1
  294. package/build/content-type-builder-translation-ja-json.cbb3b88a.chunk.js +0 -1
  295. package/build/content-type-builder-translation-ko-json.7daf86c3.chunk.js +0 -1
  296. package/build/content-type-builder-translation-pt-BR-json.86b192fa.chunk.js +0 -1
  297. package/build/content-type-builder-translation-pt-json.b584f79f.chunk.js +0 -1
  298. package/build/content-type-builder-translation-ru-json.7648049a.chunk.js +0 -1
  299. package/build/content-type-builder-translation-sk-json.c12a8dec.chunk.js +0 -1
  300. package/build/content-type-builder-translation-th-json.668cd5f5.chunk.js +0 -1
  301. package/build/content-type-builder-translation-tr-json.0f52e1e8.chunk.js +0 -1
  302. package/build/content-type-builder-translation-uk-json.4bf80448.chunk.js +0 -1
  303. package/build/content-type-builder-translation-zh-Hans-json.76e58138.chunk.js +0 -1
  304. package/build/content-type-builder-translation-zh-json.0bec81f1.chunk.js +0 -1
  305. package/build/content-type-builder.19ae7eef.chunk.js +0 -1
  306. package/build/cropper-css.ace19575.chunk.js +0 -1
  307. package/build/cs-json.ce6f2e52.chunk.js +0 -1
  308. package/build/de-json.2087d61e.chunk.js +0 -1
  309. package/build/email-settings-page.40ee2bda.chunk.js +0 -1
  310. package/build/email-translation-id-json.e3c2101d.chunk.js +0 -1
  311. package/build/email-translation-ja-json.66337e44.chunk.js +0 -1
  312. package/build/email-translation-ko-json.52bbd7b4.chunk.js +0 -1
  313. package/build/email-translation-ms-json.e39256df.chunk.js +0 -1
  314. package/build/email-translation-nl-json.12d28adb.chunk.js +0 -1
  315. package/build/email-translation-pl-json.9585a84e.chunk.js +0 -1
  316. package/build/email-translation-pt-BR-json.6c04b3ef.chunk.js +0 -1
  317. package/build/email-translation-pt-json.0239be04.chunk.js +0 -1
  318. package/build/email-translation-ru-json.f3b4fecc.chunk.js +0 -1
  319. package/build/email-translation-sk-json.76dbaaa6.chunk.js +0 -1
  320. package/build/email-translation-th-json.25ad73e7.chunk.js +0 -1
  321. package/build/email-translation-tr-json.ae04a9f2.chunk.js +0 -1
  322. package/build/email-translation-uk-json.03b27b08.chunk.js +0 -1
  323. package/build/email-translation-vi-json.3e1dd5b3.chunk.js +0 -1
  324. package/build/email-translation-zh-Hans-json.0df4ca59.chunk.js +0 -1
  325. package/build/email-translation-zh-json.82978eb0.chunk.js +0 -1
  326. package/build/en-json.94e6ed8a.chunk.js +0 -1
  327. package/build/fontawesome-css-all.3b89f909.chunk.js +0 -1
  328. package/build/fontawesome-css.36cff9ae.chunk.js +0 -1
  329. package/build/fontawesome-js.2639263c.chunk.js +0 -2
  330. package/build/fontawesome-js.2639263c.chunk.js.LICENSE.txt +0 -4
  331. package/build/fr-json.2a0b93ed.chunk.js +0 -1
  332. package/build/he-json.917d416c.chunk.js +0 -1
  333. package/build/highlight.js.6321cb45.chunk.js +0 -1
  334. package/build/hu-json.bee23c51.chunk.js +0 -1
  335. package/build/i18n-settings-page.1f6be747.chunk.js +0 -1
  336. package/build/i18n-translation-es-json.7049afa2.chunk.js +0 -1
  337. package/build/i18n-translation-fr-json.c6367bc9.chunk.js +0 -1
  338. package/build/i18n-translation-ko-json.aecb7e01.chunk.js +0 -1
  339. package/build/i18n-translation-zh-Hans-json.258b2e1a.chunk.js +0 -1
  340. package/build/it-json.937b2108.chunk.js +0 -1
  341. package/build/ja-json.b4818378.chunk.js +0 -1
  342. package/build/ko-json.8294a7fc.chunk.js +0 -1
  343. package/build/main.cd1c939f.js +0 -2
  344. package/build/main.cd1c939f.js.LICENSE.txt +0 -91
  345. package/build/nl-json.86eae27d.chunk.js +0 -1
  346. package/build/pt-json.ef0efd89.chunk.js +0 -1
  347. package/build/ru-json.da33236d.chunk.js +0 -1
  348. package/build/runtime~main.c5ab8a8f.js +0 -1
  349. package/build/sk-json.797e898f.chunk.js +0 -1
  350. package/build/sso-settings-page.c5dda65d.chunk.js +0 -1
  351. package/build/sv-json.5bbe6a4f.chunk.js +0 -1
  352. package/build/th-json.c1393c06.chunk.js +0 -1
  353. package/build/tr-json.57cde8b0.chunk.js +0 -1
  354. package/build/uk-json.c6df66d2.chunk.js +0 -1
  355. package/build/upload-settings.9d3231f4.chunk.js +0 -1
  356. package/build/upload-translation-de-json.55a7e43a.chunk.js +0 -1
  357. package/build/upload-translation-fr-json.b12f7247.chunk.js +0 -1
  358. package/build/upload-translation-he-json.bee013d1.chunk.js +0 -1
  359. package/build/upload-translation-it-json.43ec0a8d.chunk.js +0 -1
  360. package/build/upload-translation-ja-json.03f1af04.chunk.js +0 -1
  361. package/build/upload-translation-ko-json.08ad9013.chunk.js +0 -1
  362. package/build/upload-translation-pt-BR-json.c7656183.chunk.js +0 -1
  363. package/build/upload-translation-ru-json.0dd4f526.chunk.js +0 -1
  364. package/build/upload-translation-sk-json.55cacd22.chunk.js +0 -1
  365. package/build/upload-translation-th-json.f7aa9392.chunk.js +0 -1
  366. package/build/upload-translation-uk-json.696a16f3.chunk.js +0 -1
  367. package/build/upload-translation-zh-Hans-json.de7bc63f.chunk.js +0 -1
  368. package/build/upload-translation-zh-json.bbc1ed41.chunk.js +0 -1
  369. package/build/upload.8edef1ea.chunk.js +0 -1
  370. package/build/users-advanced-settings-page.48c437f0.chunk.js +0 -1
  371. package/build/users-email-settings-page.f39866d6.chunk.js +0 -1
  372. package/build/users-permissions-translation-ar-json.667e7eee.chunk.js +0 -1
  373. package/build/users-permissions-translation-cs-json.995b5d76.chunk.js +0 -1
  374. package/build/users-permissions-translation-en-json.0e0bc290.chunk.js +0 -1
  375. package/build/users-permissions-translation-fr-json.3e3522c3.chunk.js +0 -1
  376. package/build/users-permissions-translation-it-json.ee5742c4.chunk.js +0 -1
  377. package/build/users-permissions-translation-ja-json.c9cafa6e.chunk.js +0 -1
  378. package/build/users-permissions-translation-ko-json.170f89c2.chunk.js +0 -1
  379. package/build/users-permissions-translation-pt-BR-json.51b1cc15.chunk.js +0 -1
  380. package/build/users-permissions-translation-pt-json.85f0e0e1.chunk.js +0 -1
  381. package/build/users-permissions-translation-ru-json.a19b2400.chunk.js +0 -1
  382. package/build/users-permissions-translation-sk-json.27af7260.chunk.js +0 -1
  383. package/build/users-permissions-translation-sv-json.739657b9.chunk.js +0 -1
  384. package/build/users-permissions-translation-th-json.f001fff3.chunk.js +0 -1
  385. package/build/users-permissions-translation-tr-json.3aae5dda.chunk.js +0 -1
  386. package/build/users-permissions-translation-uk-json.a66c7a8c.chunk.js +0 -1
  387. package/build/users-permissions-translation-vi-json.685c65cc.chunk.js +0 -1
  388. package/build/users-permissions-translation-zh-Hans-json.2202741e.chunk.js +0 -1
  389. package/build/users-permissions-translation-zh-json.429a3190.chunk.js +0 -1
  390. package/build/users-providers-settings-page.574ed765.chunk.js +0 -1
  391. package/build/users-roles-settings-page.b836dc30.chunk.js +0 -1
  392. package/build/vi-json.104a6f3a.chunk.js +0 -1
  393. package/build/webhook-edit-page.b791c6f9.chunk.js +0 -1
  394. package/build/webhook-list-page.502d1236.chunk.js +0 -1
  395. package/build/zh-Hans-json.9afc1adf.chunk.js +0 -1
  396. package/build/zh-json.f36abb77.chunk.js +0 -1
  397. 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>
@@ -0,0 +1,51 @@
1
+ import React, { useReducer, useRef } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { ConfigurationsContext } from '../../contexts';
4
+ import reducer, { initialState } from './reducer';
5
+
6
+ const ConfigurationsProvider = ({
7
+ children,
8
+ authLogo,
9
+ menuLogo: defaultMenuLogo,
10
+ showReleaseNotification,
11
+ showTutorials,
12
+ }) => {
13
+ const [{ menuLogo }, dispatch] = useReducer(reducer, initialState);
14
+
15
+ const updateProjectSettings = ({ menuLogo }) => {
16
+ return dispatch({
17
+ type: 'UPDATE_PROJECT_SETTINGS',
18
+ values: {
19
+ menuLogo: menuLogo || defaultMenuLogo,
20
+ },
21
+ });
22
+ };
23
+
24
+ const updateProjectSettingsRef = useRef(updateProjectSettings);
25
+
26
+ return (
27
+ <ConfigurationsContext.Provider
28
+ value={{
29
+ logos: {
30
+ menu: { custom: menuLogo, default: defaultMenuLogo },
31
+ auth: { custom: null, default: authLogo },
32
+ },
33
+ updateProjectSettings: updateProjectSettingsRef.current,
34
+ showReleaseNotification,
35
+ showTutorials,
36
+ }}
37
+ >
38
+ {children}
39
+ </ConfigurationsContext.Provider>
40
+ );
41
+ };
42
+
43
+ ConfigurationsProvider.propTypes = {
44
+ authLogo: PropTypes.string.isRequired,
45
+ children: PropTypes.element.isRequired,
46
+ menuLogo: PropTypes.string.isRequired,
47
+ showReleaseNotification: PropTypes.bool.isRequired,
48
+ showTutorials: PropTypes.bool.isRequired,
49
+ };
50
+
51
+ export default ConfigurationsProvider;
@@ -0,0 +1,28 @@
1
+ /* eslint-disable consistent-return */
2
+ /*
3
+ *
4
+ * ConfigurationsProvider reducer
5
+ *
6
+ */
7
+
8
+ import produce from 'immer';
9
+
10
+ const initialState = {
11
+ menuLogo: null,
12
+ };
13
+
14
+ const reducer = (state = initialState, action) =>
15
+ produce(state, draftState => {
16
+ switch (action.type) {
17
+ case 'UPDATE_PROJECT_SETTINGS': {
18
+ Object.assign(draftState, action.values);
19
+ break;
20
+ }
21
+ default: {
22
+ return draftState;
23
+ }
24
+ }
25
+ });
26
+
27
+ export default reducer;
28
+ export { initialState };
@@ -53,7 +53,9 @@ const LinkUser = styled(Link)`
53
53
  const LeftMenu = ({ generalSectionLinks, pluginsSectionLinks }) => {
54
54
  const buttonRef = useRef();
55
55
  const [userLinksVisible, setUserLinksVisible] = useState(false);
56
- const { menuLogo } = useConfigurations();
56
+ const {
57
+ logos: { menu },
58
+ } = useConfigurations();
57
59
  const [condensed, setCondensed] = usePersistentState('navbar-condensed', false);
58
60
  const { userDisplayName } = useAppInfos();
59
61
  const { formatMessage } = useIntl();
@@ -93,7 +95,7 @@ const LeftMenu = ({ generalSectionLinks, pluginsSectionLinks }) => {
93
95
  defaultMessage: 'Workplace',
94
96
  })}
95
97
  title={menuTitle}
96
- icon={<img src={menuLogo} alt={menuTitle} />}
98
+ icon={<img src={menu.custom || menu.default} alt={menuTitle} />}
97
99
  />
98
100
 
99
101
  <Divider />
@@ -3,7 +3,8 @@ import PropTypes from 'prop-types';
3
3
  import { QueryClientProvider, QueryClient } from 'react-query';
4
4
  import { LibraryProvider, StrapiAppProvider } from '@strapi/helper-plugin';
5
5
  import { Provider } from 'react-redux';
6
- import { AdminContext, ConfigurationsContext } from '../../contexts';
6
+ import { AdminContext } from '../../contexts';
7
+ import ConfigurationsProvider from '../ConfigurationsProvider';
7
8
  import LanguageProvider from '../LanguageProvider';
8
9
  import GuidedTour from '../GuidedTour';
9
10
  import AutoReloadOverlayBlockerProvider from '../AutoReloadOverlayBlockerProvider';
@@ -47,8 +48,11 @@ const Providers = ({
47
48
  <QueryClientProvider client={queryClient}>
48
49
  <Provider store={store}>
49
50
  <AdminContext.Provider value={{ getAdminInjectedComponents }}>
50
- <ConfigurationsContext.Provider
51
- value={{ authLogo, menuLogo, showReleaseNotification, showTutorials }}
51
+ <ConfigurationsProvider
52
+ authLogo={authLogo}
53
+ menuLogo={menuLogo}
54
+ showReleaseNotification={showReleaseNotification}
55
+ showTutorials={showTutorials}
52
56
  >
53
57
  <StrapiAppProvider
54
58
  getPlugin={getPlugin}
@@ -71,7 +75,7 @@ const Providers = ({
71
75
  </LanguageProvider>
72
76
  </LibraryProvider>
73
77
  </StrapiAppProvider>
74
- </ConfigurationsContext.Provider>
78
+ </ConfigurationsProvider>
75
79
  </AdminContext.Provider>
76
80
  </Provider>
77
81
  </QueryClientProvider>
@@ -7,9 +7,11 @@ const Img = styled.img`
7
7
  `;
8
8
 
9
9
  const Logo = () => {
10
- const { authLogo } = useConfigurations();
10
+ const {
11
+ logos: { auth },
12
+ } = useConfigurations();
11
13
 
12
- return <Img src={authLogo} aria-hidden alt="" />;
14
+ return <Img src={auth.default} aria-hidden alt="" />;
13
15
  };
14
16
 
15
17
  export default Logo;
@@ -56,5 +56,9 @@ export default function hasContent(type, content, metadatas, fieldSchema) {
56
56
  return isNumber(content);
57
57
  }
58
58
 
59
+ if (type === 'boolean') {
60
+ return content !== null;
61
+ }
62
+
59
63
  return !isEmpty(content);
60
64
  }
@@ -269,7 +269,7 @@ const EditViewDataManagerProvider = ({
269
269
  );
270
270
 
271
271
  const createFormData = useCallback(
272
- (data) => {
272
+ data => {
273
273
  // First we need to remove the added keys needed for the dnd
274
274
  const preparedData = removeKeyInObject(cloneDeep(data), '__temp_key__');
275
275
  // Then we need to apply our helper
@@ -293,7 +293,7 @@ const EditViewDataManagerProvider = ({
293
293
  }, [hasDraftAndPublish, shouldNotRunValidations]);
294
294
 
295
295
  const handleSubmit = useCallback(
296
- async (e) => {
296
+ async e => {
297
297
  e.preventDefault();
298
298
  let errors = {};
299
299
 
@@ -363,8 +363,8 @@ const EditViewDataManagerProvider = ({
363
363
  }, [allLayoutData, currentContentTypeLayout, isCreatingEntry, modifiedData, onPublish]);
364
364
 
365
365
  const shouldCheckDZErrors = useCallback(
366
- (dzName) => {
367
- const doesDZHaveError = Object.keys(formErrors).some((key) => key.split('.')[0] === dzName);
366
+ dzName => {
367
+ const doesDZHaveError = Object.keys(formErrors).some(key => key.split('.')[0] === dzName);
368
368
  const shouldCheckErrors = !isEmpty(formErrors) && doesDZHaveError;
369
369
 
370
370
  return shouldCheckErrors;
@@ -418,7 +418,7 @@ const EditViewDataManagerProvider = ({
418
418
  });
419
419
  }, []);
420
420
 
421
- const onRemoveRelation = useCallback((keys) => {
421
+ const onRemoveRelation = useCallback(keys => {
422
422
  dispatch({
423
423
  type: 'REMOVE_RELATION',
424
424
  keys,
@@ -10,11 +10,11 @@ import { translatedErrors as errorsTrads } from '@strapi/helper-plugin';
10
10
  import isFieldTypeNumber from '../../../utils/isFieldTypeNumber';
11
11
 
12
12
  yup.addMethod(yup.mixed, 'defined', function() {
13
- return this.test('defined', errorsTrads.required, (value) => value !== undefined);
13
+ return this.test('defined', errorsTrads.required, value => value !== undefined);
14
14
  });
15
15
 
16
16
  yup.addMethod(yup.array, 'notEmptyMin', function(min) {
17
- return this.test('notEmptyMin', errorsTrads.min, (value) => {
17
+ return this.test('notEmptyMin', errorsTrads.min, value => {
18
18
  if (isEmpty(value)) {
19
19
  return true;
20
20
  }
@@ -51,7 +51,7 @@ yup.addMethod(yup.string, 'isSuperior', function(message, min) {
51
51
  });
52
52
  });
53
53
 
54
- const getAttributes = (data) => get(data, ['attributes'], {});
54
+ const getAttributes = data => get(data, ['attributes'], {});
55
55
 
56
56
  const createYupSchema = (
57
57
  model,
@@ -97,7 +97,7 @@ const createYupSchema = (
97
97
  if (attribute.repeatable === true) {
98
98
  const { min, max, required } = attribute;
99
99
 
100
- let componentSchema = yup.lazy((value) => {
100
+ let componentSchema = yup.lazy(value => {
101
101
  let baseSchema = yup.array().of(componentFieldSchema);
102
102
 
103
103
  if (min) {
@@ -123,7 +123,7 @@ const createYupSchema = (
123
123
 
124
124
  return acc;
125
125
  }
126
- const componentSchema = yup.lazy((obj) => {
126
+ const componentSchema = yup.lazy(obj => {
127
127
  if (obj !== undefined) {
128
128
  return attribute.required === true && !options.isDraft
129
129
  ? componentFieldSchema.defined()
@@ -154,7 +154,7 @@ const createYupSchema = (
154
154
  if (min) {
155
155
  if (attribute.required) {
156
156
  dynamicZoneSchema = dynamicZoneSchema
157
- .test('min', errorsTrads.min, (value) => {
157
+ .test('min', errorsTrads.min, value => {
158
158
  if (options.isCreatingEntry) {
159
159
  return value && value.length >= min;
160
160
  }
@@ -165,7 +165,7 @@ const createYupSchema = (
165
165
 
166
166
  return value !== null && value.length >= min;
167
167
  })
168
- .test('required', errorsTrads.required, (value) => {
168
+ .test('required', errorsTrads.required, value => {
169
169
  if (options.isCreatingEntry) {
170
170
  return value !== null || value !== undefined;
171
171
  }
@@ -180,7 +180,7 @@ const createYupSchema = (
180
180
  dynamicZoneSchema = dynamicZoneSchema.notEmptyMin(min);
181
181
  }
182
182
  } else if (attribute.required && !options.isDraft) {
183
- dynamicZoneSchema = dynamicZoneSchema.test('required', errorsTrads.required, (value) => {
183
+ dynamicZoneSchema = dynamicZoneSchema.test('required', errorsTrads.required, value => {
184
184
  if (options.isCreatingEntry) {
185
185
  return value !== null || value !== undefined;
186
186
  }
@@ -215,7 +215,7 @@ const createYupSchemaAttribute = (type, validations, options) => {
215
215
  if (type === 'json') {
216
216
  schema = yup
217
217
  .mixed(errorsTrads.json)
218
- .test('isJSON', errorsTrads.json, (value) => {
218
+ .test('isJSON', errorsTrads.json, value => {
219
219
  if (value === undefined) {
220
220
  return true;
221
221
  }
@@ -238,7 +238,7 @@ const createYupSchemaAttribute = (type, validations, options) => {
238
238
  if (['number', 'integer', 'float', 'decimal'].includes(type)) {
239
239
  schema = yup
240
240
  .number()
241
- .transform((cv) => (isNaN(cv) ? undefined : cv))
241
+ .transform(cv => (isNaN(cv) ? undefined : cv))
242
242
  .typeError();
243
243
  }
244
244
 
@@ -250,7 +250,7 @@ const createYupSchemaAttribute = (type, validations, options) => {
250
250
  schema = yup.date();
251
251
  }
252
252
 
253
- Object.keys(validations).forEach((validation) => {
253
+ Object.keys(validations).forEach(validation => {
254
254
  const validationValue = validations[validation];
255
255
 
256
256
  if (
@@ -269,7 +269,7 @@ const createYupSchemaAttribute = (type, validations, options) => {
269
269
  if (options.isCreatingEntry) {
270
270
  schema = schema.required(errorsTrads.required);
271
271
  } else {
272
- schema = schema.test('required', errorsTrads.required, (value) => {
272
+ schema = schema.test('required', errorsTrads.required, value => {
273
273
  // Field is not touched and the user is editing the entry
274
274
  if (value === undefined && !options.isFromComponent) {
275
275
  return true;
@@ -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}
@@ -157,10 +157,10 @@ function Inputs({
157
157
  return disabled;
158
158
  }, [disabled, isCreatingEntry, isUserAllowedToEditField, isUserAllowedToReadField]);
159
159
 
160
- const options = useMemo(
161
- () => generateOptions(fieldSchema.enum || [], isRequired),
162
- [fieldSchema, isRequired]
163
- );
160
+ const options = useMemo(() => generateOptions(fieldSchema.enum || [], isRequired), [
161
+ fieldSchema,
162
+ isRequired,
163
+ ]);
164
164
 
165
165
  const { label, description, placeholder, visible } = metadatas;
166
166
 
@@ -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,
@@ -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
+ }
@@ -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
@@ -0,0 +1,31 @@
1
+ import { useEffect, useState } from 'react';
2
+
3
+ /**
4
+ * For more details about this hook see:
5
+ * https://www.30secondsofcode.org/react/s/use-navigator-on-line
6
+ */
7
+ const useNavigatorOnLine = () => {
8
+ const onlineStatus =
9
+ typeof navigator !== 'undefined' && typeof navigator.onLine === 'boolean'
10
+ ? navigator.onLine
11
+ : true;
12
+
13
+ const [isOnline, setIsOnline] = useState(onlineStatus);
14
+
15
+ const setOnline = () => setIsOnline(true);
16
+ const setOffline = () => setIsOnline(false);
17
+
18
+ useEffect(() => {
19
+ window.addEventListener('online', setOnline);
20
+ window.addEventListener('offline', setOffline);
21
+
22
+ return () => {
23
+ window.removeEventListener('online', setOnline);
24
+ window.removeEventListener('offline', setOffline);
25
+ };
26
+ }, []);
27
+
28
+ return isOnline;
29
+ };
30
+
31
+ export default useNavigatorOnLine;
@@ -12,6 +12,7 @@ import {
12
12
  request,
13
13
  useNotification,
14
14
  TrackingContext,
15
+ prefixFileUrlWithBackendUrl,
15
16
  } from '@strapi/helper-plugin';
16
17
  import { SkipToContent } from '@strapi/design-system/Main';
17
18
  import { useIntl } from 'react-intl';
@@ -22,6 +23,7 @@ import NotFoundPage from '../NotFoundPage';
22
23
  import UseCasePage from '../UseCasePage';
23
24
  import { getUID } from './utils';
24
25
  import routes from './utils/routes';
26
+ import { useConfigurations } from '../../hooks';
25
27
 
26
28
  const AuthenticatedApp = lazy(() =>
27
29
  import(/* webpackChunkName: "Admin-authenticatedApp" */ '../../components/AuthenticatedApp')
@@ -29,6 +31,7 @@ const AuthenticatedApp = lazy(() =>
29
31
 
30
32
  function App() {
31
33
  const toggleNotification = useNotification();
34
+ const { updateProjectSettings } = useConfigurations();
32
35
  const { formatMessage } = useIntl();
33
36
  const [{ isLoading, hasAdmin, uuid }, setState] = useState({ isLoading: true, hasAdmin: false });
34
37
 
@@ -66,9 +69,11 @@ function App() {
66
69
  const getData = async () => {
67
70
  try {
68
71
  const {
69
- data: { hasAdmin, uuid },
72
+ data: { hasAdmin, uuid, menuLogo },
70
73
  } = await request('/admin/init', { method: 'GET' });
71
74
 
75
+ updateProjectSettings({ menuLogo: prefixFileUrlWithBackendUrl(menuLogo) });
76
+
72
77
  if (uuid) {
73
78
  try {
74
79
  const deviceId = await getUID();
@@ -99,7 +104,7 @@ function App() {
99
104
  };
100
105
 
101
106
  getData();
102
- }, [toggleNotification]);
107
+ }, [toggleNotification, updateProjectSettings]);
103
108
 
104
109
  const setHasAdmin = hasAdmin => setState(prev => ({ ...prev, hasAdmin }));
105
110
 
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+ import { useIntl } from 'react-intl';
3
+ import { ContentBox, useTracking } from '@strapi/helper-plugin';
4
+ import GlassesSquare from '@strapi/icons/GlassesSquare';
5
+ import ExternalLink from '@strapi/icons/ExternalLink';
6
+ import { Icon } from '@strapi/design-system/Icon';
7
+
8
+ const MissingPluginBanner = () => {
9
+ const { formatMessage } = useIntl();
10
+ const { trackUsage } = useTracking();
11
+
12
+ return (
13
+ <a
14
+ href="https://strapi.canny.io/plugin-requests"
15
+ target="_blank"
16
+ rel="noopener noreferrer nofollow"
17
+ style={{ textDecoration: 'none' }}
18
+ onClick={() => trackUsage('didMissMarketplacePlugin')}
19
+ >
20
+ <ContentBox
21
+ title={formatMessage({
22
+ id: 'admin.pages.MarketPlacePage.missingPlugin.title',
23
+ defaultMessage: 'Documentation',
24
+ })}
25
+ subtitle={formatMessage({
26
+ id: 'admin.pages.MarketPlacePage.missingPlugin.description',
27
+ defaultMessage:
28
+ "Tell us what plugin you are looking for and we'll let our community plugin developers know in case they are in search for inspiration!",
29
+ })}
30
+ icon={<GlassesSquare />}
31
+ iconBackground="alternative100"
32
+ endAction={
33
+ <Icon as={ExternalLink} color="neutral600" width={3} height={3} marginLeft={2} />
34
+ }
35
+ />
36
+ </a>
37
+ );
38
+ };
39
+
40
+ export default MissingPluginBanner;
@@ -0,0 +1,46 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { useIntl } from 'react-intl';
4
+ import { HeaderLayout } from '@strapi/design-system/Layout';
5
+ import { LinkButton } from '@strapi/design-system/LinkButton';
6
+ import Upload from '@strapi/icons/Upload';
7
+ import { useTracking } from '@strapi/helper-plugin';
8
+
9
+ const PageHeader = ({ isOnline }) => {
10
+ const { formatMessage } = useIntl();
11
+ const { trackUsage } = useTracking();
12
+
13
+ return (
14
+ <HeaderLayout
15
+ title={formatMessage({
16
+ id: 'global.marketplace',
17
+ defaultMessage: 'Marketplace',
18
+ })}
19
+ subtitle={formatMessage({
20
+ id: 'admin.pages.MarketPlacePage.subtitle',
21
+ defaultMessage: 'Get more out of Strapi',
22
+ })}
23
+ primaryAction={
24
+ isOnline && (
25
+ <LinkButton
26
+ startIcon={<Upload />}
27
+ variant="tertiary"
28
+ href="https://market.strapi.io/submit-plugin"
29
+ onClick={() => trackUsage('didSubmitPlugin')}
30
+ >
31
+ {formatMessage({
32
+ id: 'admin.pages.MarketPlacePage.submit.plugin.link',
33
+ defaultMessage: 'Submit your plugin',
34
+ })}
35
+ </LinkButton>
36
+ )
37
+ }
38
+ />
39
+ );
40
+ };
41
+
42
+ export default PageHeader;
43
+
44
+ PageHeader.propTypes = {
45
+ isOnline: PropTypes.bool.isRequired,
46
+ };