@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,82 @@
1
+ import React, { useState } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { useIntl } from 'react-intl';
4
+ import { Box } from '@strapi/design-system/Box';
5
+ import { Button } from '@strapi/design-system/Button';
6
+ import { TextInput } from '@strapi/design-system/TextInput';
7
+ import { ModalFooter } from '@strapi/design-system/ModalLayout';
8
+ import urlToFile from '../../utils/urlToFile';
9
+ import { parseFileMetadatas } from '../../utils/parseFileMetadatas';
10
+ import { SIZE, DIMENSION } from '../../utils/constants';
11
+
12
+ const FromUrlForm = ({ goTo, next, onClose, setLocalImage }) => {
13
+ const { formatMessage } = useIntl();
14
+ const [logoUrl, setLogoUrl] = useState('');
15
+ const [error, setError] = useState(null);
16
+
17
+ const handleChange = e => {
18
+ setLogoUrl(e.target.value);
19
+ };
20
+
21
+ const handleSubmit = async e => {
22
+ e.preventDefault();
23
+ try {
24
+ const file = await urlToFile(logoUrl);
25
+ const asset = await parseFileMetadatas(file);
26
+
27
+ setLocalImage(asset);
28
+ goTo(next);
29
+ } catch (err) {
30
+ if (err.displayMessage) {
31
+ setError(formatMessage(err.displayMessage, { size: SIZE, dimension: DIMENSION }));
32
+ } else {
33
+ throw err;
34
+ }
35
+ }
36
+ };
37
+
38
+ return (
39
+ <form onSubmit={handleSubmit}>
40
+ <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>
41
+ <TextInput
42
+ label={formatMessage({
43
+ id: 'Settings.application.customization.modal.upload.from-url.input-label',
44
+ defaultMessage: 'URL',
45
+ })}
46
+ error={error}
47
+ onChange={handleChange}
48
+ value={logoUrl}
49
+ name="logo-url"
50
+ />
51
+ </Box>
52
+ <ModalFooter
53
+ startActions={
54
+ <Button onClick={onClose} variant="tertiary">
55
+ {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}
56
+ </Button>
57
+ }
58
+ endActions={
59
+ <Button type="submit">
60
+ {formatMessage({
61
+ id: 'Settings.application.customization.modal.upload.next',
62
+ defaultMessage: 'Next',
63
+ })}
64
+ </Button>
65
+ }
66
+ />
67
+ </form>
68
+ );
69
+ };
70
+
71
+ FromUrlForm.defaultProps = {
72
+ next: null,
73
+ };
74
+
75
+ FromUrlForm.propTypes = {
76
+ goTo: PropTypes.func.isRequired,
77
+ next: PropTypes.string,
78
+ onClose: PropTypes.func.isRequired,
79
+ setLocalImage: PropTypes.func.isRequired,
80
+ };
81
+
82
+ export default FromUrlForm;
@@ -0,0 +1,51 @@
1
+ import React from 'react';
2
+ import { useIntl } from 'react-intl';
3
+ import PropTypes from 'prop-types';
4
+ import {
5
+ Card,
6
+ CardAsset,
7
+ CardBadge,
8
+ CardBody,
9
+ CardContent,
10
+ CardHeader,
11
+ CardTitle,
12
+ CardSubtitle,
13
+ } from '@strapi/design-system/Card';
14
+
15
+ const ImageCardAsset = ({ asset }) => {
16
+ const { formatMessage } = useIntl();
17
+
18
+ return (
19
+ <Card>
20
+ <CardHeader>
21
+ <CardAsset size="S" src={asset.url} />
22
+ </CardHeader>
23
+ <CardBody>
24
+ <CardContent>
25
+ <CardTitle>{asset.name}</CardTitle>
26
+ <CardSubtitle>
27
+ {`${asset.ext.toUpperCase()} - ${asset.width}✕${asset.height}`}
28
+ </CardSubtitle>
29
+ </CardContent>
30
+ <CardBadge>
31
+ {formatMessage({
32
+ id: 'Settings.application.customization.modal.pending.card-badge',
33
+ defaultMessage: 'image',
34
+ })}
35
+ </CardBadge>
36
+ </CardBody>
37
+ </Card>
38
+ );
39
+ };
40
+
41
+ ImageCardAsset.propTypes = {
42
+ asset: PropTypes.shape({
43
+ name: PropTypes.string,
44
+ url: PropTypes.string,
45
+ width: PropTypes.number,
46
+ height: PropTypes.number,
47
+ ext: PropTypes.string,
48
+ }).isRequired,
49
+ };
50
+
51
+ export default ImageCardAsset;
@@ -0,0 +1,97 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { useIntl } from 'react-intl';
4
+ import { pxToRem } from '@strapi/helper-plugin';
5
+ import { Box } from '@strapi/design-system/Box';
6
+ import { Flex } from '@strapi/design-system/Flex';
7
+ import { Button } from '@strapi/design-system/Button';
8
+ import { ModalFooter } from '@strapi/design-system/ModalLayout';
9
+ import { Typography } from '@strapi/design-system/Typography';
10
+ import ImageCardAsset from './ImageCardAsset';
11
+
12
+ const PendingLogoDialog = ({ onClose, asset, prev, next, goTo, setLocalImage, onChangeLogo }) => {
13
+ const { formatMessage } = useIntl();
14
+
15
+ const handleGoBack = () => {
16
+ setLocalImage(undefined);
17
+ goTo(prev);
18
+ };
19
+
20
+ const handleUpload = () => {
21
+ onChangeLogo(asset);
22
+ goTo(next);
23
+ };
24
+
25
+ return (
26
+ <>
27
+ <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>
28
+ <Flex justifyContent="space-between" paddingBottom={6}>
29
+ <Flex direction="column" alignItems="flex-start">
30
+ <Typography variant="pi" fontWeight="bold">
31
+ {formatMessage({
32
+ id: 'Settings.application.customization.modal.pending.title',
33
+ defaultMessage: 'Logo ready to upload',
34
+ })}
35
+ </Typography>
36
+ <Typography variant="pi" textColor="neutral500">
37
+ {formatMessage({
38
+ id: 'Settings.application.customization.modal.pending.subtitle',
39
+ defaultMessage: 'Manage the chosen logo before uploading it',
40
+ })}
41
+ </Typography>
42
+ </Flex>
43
+ <Button onClick={handleGoBack} variant="secondary">
44
+ {formatMessage({
45
+ id: 'Settings.application.customization.modal.pending.choose-another',
46
+ defaultMessage: 'Choose another logo',
47
+ })}
48
+ </Button>
49
+ </Flex>
50
+ <Box maxWidth={pxToRem(180)}>
51
+ <ImageCardAsset asset={asset} />
52
+ </Box>
53
+ </Box>
54
+ <ModalFooter
55
+ startActions={
56
+ <Button onClick={onClose} variant="tertiary">
57
+ {formatMessage({
58
+ id: 'Settings.application.customization.modal.cancel',
59
+ defaultMessage: 'Cancel',
60
+ })}
61
+ </Button>
62
+ }
63
+ endActions={
64
+ <Button onClick={handleUpload}>
65
+ {formatMessage({
66
+ id: 'Settings.application.customization.modal.pending.upload',
67
+ defaultMessage: 'Upload logo',
68
+ })}
69
+ </Button>
70
+ }
71
+ />
72
+ </>
73
+ );
74
+ };
75
+
76
+ PendingLogoDialog.defaultProps = {
77
+ next: null,
78
+ prev: null,
79
+ };
80
+
81
+ PendingLogoDialog.propTypes = {
82
+ goTo: PropTypes.func.isRequired,
83
+ asset: PropTypes.shape({
84
+ name: PropTypes.string,
85
+ url: PropTypes.string,
86
+ width: PropTypes.number,
87
+ height: PropTypes.number,
88
+ ext: PropTypes.string,
89
+ }).isRequired,
90
+ next: PropTypes.string,
91
+ onClose: PropTypes.func.isRequired,
92
+ onChangeLogo: PropTypes.func.isRequired,
93
+ prev: PropTypes.string,
94
+ setLocalImage: PropTypes.func.isRequired,
95
+ };
96
+
97
+ export default PendingLogoDialog;
@@ -0,0 +1,85 @@
1
+ import React, { useReducer } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { useIntl } from 'react-intl';
4
+ import { ModalLayout, ModalHeader } from '@strapi/design-system/ModalLayout';
5
+ import { Typography } from '@strapi/design-system/Typography';
6
+ import reducer, { initialState } from './reducer';
7
+
8
+ const LogoModalStepper = ({
9
+ onChangeLogo,
10
+ customLogo,
11
+ goTo,
12
+ Component,
13
+ modalTitle,
14
+ next,
15
+ prev,
16
+ currentStep,
17
+ }) => {
18
+ const [{ localImage }, dispatch] = useReducer(reducer, initialState);
19
+ const { formatMessage } = useIntl();
20
+
21
+ const setLocalImage = asset => {
22
+ dispatch({
23
+ type: 'SET_LOCAL_IMAGE',
24
+ value: asset,
25
+ });
26
+ };
27
+
28
+ const handleCloseModal = () => {
29
+ goTo(null);
30
+ };
31
+
32
+ if (!currentStep) {
33
+ return null;
34
+ }
35
+
36
+ return (
37
+ <ModalLayout labelledBy="modal" onClose={handleCloseModal}>
38
+ <ModalHeader>
39
+ <Typography fontWeight="bold" as="h2" id="modal">
40
+ {formatMessage(modalTitle)}
41
+ </Typography>
42
+ </ModalHeader>
43
+ <Component
44
+ setLocalImage={setLocalImage}
45
+ goTo={goTo}
46
+ next={next}
47
+ prev={prev}
48
+ onClose={handleCloseModal}
49
+ asset={localImage || customLogo}
50
+ onChangeLogo={onChangeLogo}
51
+ />
52
+ </ModalLayout>
53
+ );
54
+ };
55
+
56
+ LogoModalStepper.defaultProps = {
57
+ Component: undefined,
58
+ currentStep: undefined,
59
+ customLogo: undefined,
60
+ modalTitle: undefined,
61
+ next: null,
62
+ prev: null,
63
+ };
64
+
65
+ LogoModalStepper.propTypes = {
66
+ Component: PropTypes.elementType,
67
+ currentStep: PropTypes.string,
68
+ customLogo: PropTypes.shape({
69
+ name: PropTypes.string,
70
+ url: PropTypes.string,
71
+ width: PropTypes.number,
72
+ height: PropTypes.number,
73
+ ext: PropTypes.string,
74
+ }),
75
+ goTo: PropTypes.func.isRequired,
76
+ modalTitle: PropTypes.shape({
77
+ id: PropTypes.string,
78
+ defaultMessage: PropTypes.string,
79
+ }),
80
+ next: PropTypes.string,
81
+ onChangeLogo: PropTypes.func.isRequired,
82
+ prev: PropTypes.string,
83
+ };
84
+
85
+ export default LogoModalStepper;
@@ -0,0 +1,28 @@
1
+ /* eslint-disable consistent-return */
2
+ /*
3
+ *
4
+ * LogoModalStepper reducer
5
+ *
6
+ */
7
+
8
+ import produce from 'immer';
9
+
10
+ const initialState = {
11
+ localImage: undefined,
12
+ };
13
+
14
+ const reducer = (state = initialState, action) =>
15
+ produce(state, draftState => {
16
+ switch (action.type) {
17
+ case 'SET_LOCAL_IMAGE': {
18
+ draftState.localImage = action.value;
19
+ break;
20
+ }
21
+ default: {
22
+ return draftState;
23
+ }
24
+ }
25
+ });
26
+
27
+ export default reducer;
28
+ export { initialState };
@@ -1,26 +1,76 @@
1
- import React from 'react';
1
+ import React, { useRef } from 'react';
2
+ import { useQuery, useMutation, useQueryClient } from 'react-query';
2
3
  import { useIntl } from 'react-intl';
3
- import { useAppInfos, SettingsPageTitle, useFocusWhenNavigate } from '@strapi/helper-plugin';
4
+ import {
5
+ useAppInfos,
6
+ SettingsPageTitle,
7
+ useFocusWhenNavigate,
8
+ CheckPermissions,
9
+ useNotification,
10
+ useTracking,
11
+ } from '@strapi/helper-plugin';
4
12
  import { HeaderLayout, Layout, ContentLayout } from '@strapi/design-system/Layout';
5
13
  import { Main } from '@strapi/design-system/Main';
6
14
  import { Box } from '@strapi/design-system/Box';
7
15
  import { Grid, GridItem } from '@strapi/design-system/Grid';
8
16
  import { Typography } from '@strapi/design-system/Typography';
9
-
10
17
  import { Stack } from '@strapi/design-system/Stack';
11
18
  import { Link } from '@strapi/design-system/Link';
19
+ import { Button } from '@strapi/design-system/Button';
12
20
  import ExternalLink from '@strapi/icons/ExternalLink';
21
+ import Check from '@strapi/icons/Check';
22
+ import { useConfigurations } from '../../../../hooks';
23
+ import Form from './components/Form';
24
+ import { fetchProjectSettings, postProjectSettings } from './utils/api';
25
+ import getFormData from './utils/getFormData';
26
+
27
+ const permissions = [{ action: 'admin::project-settings.update', subject: null }];
13
28
 
14
29
  const ApplicationInfosPage = () => {
30
+ const inputsRef = useRef();
31
+ const toggleNotification = useNotification();
32
+ const { trackUsage } = useTracking();
15
33
  const { formatMessage } = useIntl();
34
+ const queryClient = useQueryClient();
16
35
  useFocusWhenNavigate();
17
36
  const appInfos = useAppInfos();
18
37
  const { shouldUpdateStrapi, latestStrapiReleaseTag, strapiVersion } = appInfos;
38
+ const { updateProjectSettings } = useConfigurations();
39
+
40
+ const { data } = useQuery('project-settings', fetchProjectSettings);
19
41
 
20
42
  const currentPlan = appInfos.communityEdition
21
43
  ? 'app.components.UpgradePlanModal.text-ce'
22
44
  : 'app.components.UpgradePlanModal.text-ee';
23
45
 
46
+ const submitMutation = useMutation(body => postProjectSettings(body), {
47
+ onSuccess: async ({ menuLogo }) => {
48
+ await queryClient.invalidateQueries('project-settings', { refetchActive: true });
49
+ updateProjectSettings({ menuLogo: menuLogo?.url });
50
+ },
51
+ });
52
+
53
+ const handleSubmit = () => {
54
+ const inputValues = inputsRef.current.getValues();
55
+ const formData = getFormData(inputValues);
56
+
57
+ submitMutation.mutate(formData, {
58
+ onSuccess: () => {
59
+ const { menuLogo } = inputValues;
60
+
61
+ if (menuLogo.rawFile) {
62
+ trackUsage('didChangeLogo');
63
+ }
64
+ },
65
+ onError: () => {
66
+ toggleNotification({
67
+ type: 'warning',
68
+ message: { id: 'notification.error', defaultMessage: 'An error occurred' },
69
+ });
70
+ },
71
+ });
72
+ };
73
+
24
74
  return (
25
75
  <Layout>
26
76
  <SettingsPageTitle name="Application" />
@@ -31,101 +81,113 @@ const ApplicationInfosPage = () => {
31
81
  id: 'Settings.application.description',
32
82
  defaultMessage: 'Administration panel’s global information',
33
83
  })}
84
+ primaryAction={
85
+ <Button onClick={handleSubmit} startIcon={<Check />}>
86
+ {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}
87
+ </Button>
88
+ }
34
89
  />
35
90
  <ContentLayout>
36
- <Box
37
- hasRadius
38
- background="neutral0"
39
- shadow="tableShadow"
40
- paddingTop={7}
41
- paddingBottom={7}
42
- paddingRight={6}
43
- paddingLeft={6}
44
- >
45
- <Stack spacing={5}>
46
- <Typography variant="delta" as="h3">
47
- {formatMessage({
48
- id: 'global.details',
49
- defaultMessage: 'Details',
50
- })}
51
- </Typography>
52
-
53
- <Grid paddingTop={1}>
54
- <GridItem col={6} s={12}>
55
- <Typography variant="sigma" textColor="neutral600">
56
- {formatMessage({
57
- id: 'Settings.application.strapiVersion',
58
- defaultMessage: 'strapi version',
59
- })}
60
- </Typography>
61
- <Typography as="p">v{strapiVersion}</Typography>
62
- <Link
63
- href={
64
- appInfos.communityEdition
65
- ? 'https://discord.strapi.io'
66
- : 'https://support.strapi.io/support/home'
67
- }
68
- endIcon={<ExternalLink />}
69
- >
70
- {formatMessage({
71
- id: 'Settings.application.get-help',
72
- defaultMessage: 'Get help',
73
- })}
74
- </Link>
75
- </GridItem>
76
- <GridItem col={6} s={12}>
77
- <Typography variant="sigma" textColor="neutral600">
78
- {formatMessage({
79
- id: 'Settings.application.edition-title',
80
- defaultMessage: 'current plan',
81
- })}
82
- </Typography>
83
- <Typography as="p">
84
- {formatMessage({
85
- id: currentPlan,
86
- defaultMessage: `${
87
- appInfos.communityEdition ? 'Community Edition' : 'Enterprise Edition'
88
- }`,
89
- })}
90
- </Typography>
91
- </GridItem>
92
- </Grid>
91
+ <Stack spacing={6}>
92
+ <Box
93
+ hasRadius
94
+ background="neutral0"
95
+ shadow="tableShadow"
96
+ paddingTop={6}
97
+ paddingBottom={6}
98
+ paddingRight={7}
99
+ paddingLeft={7}
100
+ >
101
+ <Stack spacing={5}>
102
+ <Typography variant="delta" as="h3">
103
+ {formatMessage({
104
+ id: 'global.details',
105
+ defaultMessage: 'Details',
106
+ })}
107
+ </Typography>
93
108
 
94
- <Grid paddingTop={1}>
95
- <GridItem col={6} s={12}>
96
- {shouldUpdateStrapi && (
109
+ <Grid paddingTop={1}>
110
+ <GridItem col={6} s={12}>
111
+ <Typography variant="sigma" textColor="neutral600">
112
+ {formatMessage({
113
+ id: 'Settings.application.strapiVersion',
114
+ defaultMessage: 'strapi version',
115
+ })}
116
+ </Typography>
117
+ <Typography as="p">v{strapiVersion}</Typography>
97
118
  <Link
98
- href={`https://github.com/strapi/strapi/releases/tag/${latestStrapiReleaseTag}`}
119
+ href={
120
+ appInfos.communityEdition
121
+ ? 'https://discord.strapi.io'
122
+ : 'https://support.strapi.io/support/home'
123
+ }
99
124
  endIcon={<ExternalLink />}
100
125
  >
101
126
  {formatMessage({
102
- id: 'Settings.application.link-upgrade',
103
- defaultMessage: 'Upgrade your admin panel',
127
+ id: 'Settings.application.get-help',
128
+ defaultMessage: 'Get help',
129
+ })}
130
+ </Link>
131
+ </GridItem>
132
+ <GridItem col={6} s={12}>
133
+ <Typography variant="sigma" textColor="neutral600">
134
+ {formatMessage({
135
+ id: 'Settings.application.edition-title',
136
+ defaultMessage: 'current plan',
137
+ })}
138
+ </Typography>
139
+ <Typography as="p">
140
+ {formatMessage({
141
+ id: currentPlan,
142
+ defaultMessage: `${
143
+ appInfos.communityEdition ? 'Community Edition' : 'Enterprise Edition'
144
+ }`,
145
+ })}
146
+ </Typography>
147
+ </GridItem>
148
+ </Grid>
149
+
150
+ <Grid paddingTop={1}>
151
+ <GridItem col={6} s={12}>
152
+ {shouldUpdateStrapi && (
153
+ <Link
154
+ href={`https://github.com/strapi/strapi/releases/tag/${latestStrapiReleaseTag}`}
155
+ endIcon={<ExternalLink />}
156
+ >
157
+ {formatMessage({
158
+ id: 'Settings.application.link-upgrade',
159
+ defaultMessage: 'Upgrade your admin panel',
160
+ })}
161
+ </Link>
162
+ )}
163
+ </GridItem>
164
+ <GridItem col={6} s={12}>
165
+ <Link href="https://strapi.io/pricing-self-hosted" endIcon={<ExternalLink />}>
166
+ {formatMessage({
167
+ id: 'Settings.application.link-pricing',
168
+ defaultMessage: 'See all pricing plans',
104
169
  })}
105
170
  </Link>
106
- )}
107
- </GridItem>
108
- <GridItem col={6} s={12}>
109
- <Link href="https://strapi.io/pricing-self-hosted" endIcon={<ExternalLink />}>
171
+ </GridItem>
172
+ </Grid>
173
+
174
+ <Box paddingTop={1}>
175
+ <Typography variant="sigma" textColor="neutral600">
110
176
  {formatMessage({
111
- id: 'Settings.application.link-pricing',
112
- defaultMessage: 'See all pricing plans',
177
+ id: 'Settings.application.node-version',
178
+ defaultMessage: 'node version',
113
179
  })}
114
- </Link>
115
- </GridItem>
116
- </Grid>
117
-
118
- <Box paddingTop={1}>
119
- <Typography variant="sigma" textColor="neutral600">
120
- {formatMessage({
121
- id: 'Settings.application.node-version',
122
- defaultMessage: 'node version',
123
- })}
124
- </Typography>
125
- <Typography as="p">{appInfos.nodeVersion}</Typography>
126
- </Box>
127
- </Stack>
128
- </Box>
180
+ </Typography>
181
+ <Typography as="p">{appInfos.nodeVersion}</Typography>
182
+ </Box>
183
+ </Stack>
184
+ </Box>
185
+ {data && (
186
+ <CheckPermissions permissions={permissions}>
187
+ <Form ref={inputsRef} projectSettingsStored={data} />
188
+ </CheckPermissions>
189
+ )}
190
+ </Stack>
129
191
  </ContentLayout>
130
192
  </Main>
131
193
  </Layout>
@@ -0,0 +1,16 @@
1
+ import { axiosInstance } from '../../../../../core/utils';
2
+ import prefixAllUrls from './prefixAllUrls';
3
+
4
+ const fetchProjectSettings = async () => {
5
+ const { data } = await axiosInstance.get('/admin/project-settings');
6
+
7
+ return prefixAllUrls(data);
8
+ };
9
+
10
+ const postProjectSettings = async body => {
11
+ const { data } = await axiosInstance.post('/admin/project-settings', body);
12
+
13
+ return prefixAllUrls(data);
14
+ };
15
+
16
+ export { fetchProjectSettings, postProjectSettings };
@@ -0,0 +1,3 @@
1
+ export const DIMENSION = 750;
2
+ export const SIZE = 100;
3
+ export const ACCEPTED_FORMAT = ['image/jpeg', 'image/png', 'image/svg+xml'];
@@ -0,0 +1,17 @@
1
+ const getFormData = data => {
2
+ const formData = new FormData();
3
+
4
+ Object.entries(data).forEach(([key, value]) => {
5
+ if (value && value.rawFile instanceof File) {
6
+ formData.append(key, value.rawFile);
7
+ }
8
+
9
+ if (value && value.isReset) {
10
+ formData.append(key, null);
11
+ }
12
+ });
13
+
14
+ return formData;
15
+ };
16
+
17
+ export default getFormData;