@strapi/admin 4.15.1 → 4.15.3-alpha.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 (267) hide show
  1. package/dist/_chunks/{AuthenticatedApp-092ef2be.js → AuthenticatedApp-26a57d48.js} +30 -30
  2. package/dist/_chunks/{AuthenticatedApp-092ef2be.js.map → AuthenticatedApp-26a57d48.js.map} +1 -1
  3. package/dist/_chunks/{AuthenticatedApp-b0ada7e9.mjs → AuthenticatedApp-332b40a8.mjs} +30 -30
  4. package/dist/_chunks/{AuthenticatedApp-b0ada7e9.mjs.map → AuthenticatedApp-332b40a8.mjs.map} +1 -1
  5. package/dist/_chunks/{HomePage-5798ba6f.mjs → HomePage-332764b2.mjs} +7 -8
  6. package/dist/_chunks/{HomePage-5798ba6f.mjs.map → HomePage-332764b2.mjs.map} +1 -1
  7. package/dist/_chunks/{HomePage-bdcb51be.js → HomePage-74c5c19b.js} +12 -13
  8. package/dist/_chunks/HomePage-74c5c19b.js.map +1 -0
  9. package/dist/_chunks/{HomePage-5ae473e6.js → HomePage-8022e4f9.js} +7 -8
  10. package/dist/_chunks/{HomePage-5ae473e6.js.map → HomePage-8022e4f9.js.map} +1 -1
  11. package/dist/_chunks/{HomePage-a3cc32d2.mjs → HomePage-ebb9bd4d.mjs} +12 -13
  12. package/dist/_chunks/HomePage-ebb9bd4d.mjs.map +1 -0
  13. package/dist/_chunks/{InstalledPluginsPage-cc2d6a36.js → InstalledPluginsPage-08915bd0.js} +10 -12
  14. package/dist/_chunks/{InstalledPluginsPage-cc2d6a36.js.map → InstalledPluginsPage-08915bd0.js.map} +1 -1
  15. package/dist/_chunks/{InstalledPluginsPage-6284aaff.mjs → InstalledPluginsPage-33ed21ac.mjs} +10 -12
  16. package/dist/_chunks/{InstalledPluginsPage-6284aaff.mjs.map → InstalledPluginsPage-33ed21ac.mjs.map} +1 -1
  17. package/dist/_chunks/{index-305a03f4.mjs → Login-4e7ab11a.mjs} +25 -29
  18. package/dist/_chunks/Login-4e7ab11a.mjs.map +1 -0
  19. package/dist/_chunks/{index-137490ba.js → Login-7c938e98.js} +25 -30
  20. package/dist/_chunks/Login-7c938e98.js.map +1 -0
  21. package/dist/_chunks/{MarketplacePage-209ec658.js → MarketplacePage-3c080568.js} +6 -8
  22. package/dist/_chunks/{MarketplacePage-209ec658.js.map → MarketplacePage-3c080568.js.map} +1 -1
  23. package/dist/_chunks/{MarketplacePage-7dee72f5.mjs → MarketplacePage-b82389f1.mjs} +6 -8
  24. package/dist/_chunks/{MarketplacePage-7dee72f5.mjs.map → MarketplacePage-b82389f1.mjs.map} +1 -1
  25. package/dist/_chunks/{ProfilePage-26c14ba4.mjs → ProfilePage-2f0d41e0.mjs} +7 -9
  26. package/dist/_chunks/{ProfilePage-26c14ba4.mjs.map → ProfilePage-2f0d41e0.mjs.map} +1 -1
  27. package/dist/_chunks/{ProfilePage-4f8c127b.js → ProfilePage-9911a1aa.js} +7 -9
  28. package/dist/_chunks/{ProfilePage-4f8c127b.js.map → ProfilePage-9911a1aa.js.map} +1 -1
  29. package/dist/_chunks/{SSOProviders-1d062c95.mjs → SSOProviders-62bfad92.mjs} +29 -61
  30. package/dist/_chunks/SSOProviders-62bfad92.mjs.map +1 -0
  31. package/dist/_chunks/{SSOProviders-1ef0a89e.js → SSOProviders-b395a4e6.js} +28 -80
  32. package/dist/_chunks/SSOProviders-b395a4e6.js.map +1 -0
  33. package/dist/_chunks/{build-f36bfc97.js → build-55ba3e68.js} +4 -2
  34. package/dist/_chunks/{build-f36bfc97.js.map → build-55ba3e68.js.map} +1 -1
  35. package/dist/_chunks/{build-e1ca35da.mjs → build-b67ecc59.mjs} +4 -2
  36. package/dist/_chunks/{build-e1ca35da.mjs.map → build-b67ecc59.mjs.map} +1 -1
  37. package/dist/_chunks/{constants-a773ff9b.js → constants-2bd3e15b.js} +13 -12
  38. package/dist/_chunks/{constants-a773ff9b.js.map → constants-2bd3e15b.js.map} +1 -1
  39. package/dist/_chunks/{constants-90c20a6f.mjs → constants-6082c0ef.mjs} +11 -12
  40. package/dist/_chunks/{constants-90c20a6f.mjs.map → constants-6082c0ef.mjs.map} +1 -1
  41. package/dist/_chunks/{constants-921eda17.mjs → constants-6ecddc43.mjs} +43 -15
  42. package/dist/_chunks/constants-6ecddc43.mjs.map +1 -0
  43. package/dist/_chunks/{constants-86aa3e70.js → constants-7596f6f3.js} +60 -13
  44. package/dist/_chunks/constants-7596f6f3.js.map +1 -0
  45. package/dist/_chunks/{constants-9de7641c.mjs → constants-889d52fe.mjs} +28 -28
  46. package/dist/_chunks/constants-889d52fe.mjs.map +1 -0
  47. package/dist/_chunks/{constants-70e05152.js → constants-9d60a039.js} +6 -6
  48. package/dist/_chunks/{constants-70e05152.js.map → constants-9d60a039.js.map} +1 -1
  49. package/dist/_chunks/{constants-6157f648.mjs → constants-b9efe215.mjs} +6 -6
  50. package/dist/_chunks/{constants-6157f648.mjs.map → constants-b9efe215.mjs.map} +1 -1
  51. package/dist/_chunks/{constants-27319180.mjs → constants-c5bbe308.mjs} +13 -12
  52. package/dist/_chunks/{constants-27319180.mjs.map → constants-c5bbe308.mjs.map} +1 -1
  53. package/dist/_chunks/{constants-32975b2e.js → constants-df81febb.js} +11 -12
  54. package/dist/_chunks/{constants-32975b2e.js.map → constants-df81febb.js.map} +1 -1
  55. package/dist/_chunks/{constants-727a113c.js → constants-efc88bf2.js} +26 -26
  56. package/dist/_chunks/constants-efc88bf2.js.map +1 -0
  57. package/dist/_chunks/{develop-513c9644.js → develop-69e28e61.js} +4 -2
  58. package/dist/_chunks/{develop-513c9644.js.map → develop-69e28e61.js.map} +1 -1
  59. package/dist/_chunks/{develop-e45b460e.mjs → develop-d97e7494.mjs} +4 -2
  60. package/dist/_chunks/{develop-e45b460e.mjs.map → develop-d97e7494.mjs.map} +1 -1
  61. package/dist/_chunks/formatAPIErrors-b599cf27.js +20 -0
  62. package/dist/_chunks/formatAPIErrors-b599cf27.js.map +1 -0
  63. package/dist/_chunks/formatAPIErrors-db6ed675.mjs +21 -0
  64. package/dist/_chunks/formatAPIErrors-db6ed675.mjs.map +1 -0
  65. package/dist/_chunks/{index-edc9bb0b.js → index-0134922e.js} +673 -811
  66. package/dist/_chunks/index-0134922e.js.map +1 -0
  67. package/dist/_chunks/{index-6a512cec.js → index-01a3932c.js} +8 -9
  68. package/dist/_chunks/{index-6a512cec.js.map → index-01a3932c.js.map} +1 -1
  69. package/dist/_chunks/{index-284c5926.js → index-13a08117.js} +33 -47
  70. package/dist/_chunks/index-13a08117.js.map +1 -0
  71. package/dist/_chunks/{index-1b7e986c.mjs → index-14462502.mjs} +14 -13
  72. package/dist/_chunks/{index-1b7e986c.mjs.map → index-14462502.mjs.map} +1 -1
  73. package/dist/_chunks/{index-85069cac.mjs → index-22fbd8cc.mjs} +9 -10
  74. package/dist/_chunks/{index-85069cac.mjs.map → index-22fbd8cc.mjs.map} +1 -1
  75. package/dist/_chunks/{index-73ba6bdd.mjs → index-259a5ab3.mjs} +3 -3
  76. package/dist/_chunks/{index-73ba6bdd.mjs.map → index-259a5ab3.mjs.map} +1 -1
  77. package/dist/_chunks/{index-7d40adea.mjs → index-287b49b0.mjs} +8 -7
  78. package/dist/_chunks/{index-7d40adea.mjs.map → index-287b49b0.mjs.map} +1 -1
  79. package/dist/_chunks/{index-77e0e5d7.js → index-293f112c.js} +8 -7
  80. package/dist/_chunks/{index-77e0e5d7.js.map → index-293f112c.js.map} +1 -1
  81. package/dist/_chunks/{index-0af587c3.js → index-2ca9ffb3.js} +78 -147
  82. package/dist/_chunks/index-2ca9ffb3.js.map +1 -0
  83. package/dist/_chunks/{index-4c5acc70.js → index-2e47d9aa.js} +9 -10
  84. package/dist/_chunks/{index-4c5acc70.js.map → index-2e47d9aa.js.map} +1 -1
  85. package/dist/_chunks/{index-59d22949.mjs → index-3d323e1b.mjs} +8 -9
  86. package/dist/_chunks/{index-59d22949.mjs.map → index-3d323e1b.mjs.map} +1 -1
  87. package/dist/_chunks/{index-5752584c.mjs → index-44360544.mjs} +182 -76
  88. package/dist/_chunks/index-44360544.mjs.map +1 -0
  89. package/dist/_chunks/{index-34a2909e.mjs → index-46245c2d.mjs} +12 -12
  90. package/dist/_chunks/{index-34a2909e.mjs.map → index-46245c2d.mjs.map} +1 -1
  91. package/dist/_chunks/{index-5ad8482b.mjs → index-486f5166.mjs} +7 -7
  92. package/dist/_chunks/{index-5ad8482b.mjs.map → index-486f5166.mjs.map} +1 -1
  93. package/dist/_chunks/{index-58db145d.mjs → index-49b41e57.mjs} +3 -3
  94. package/dist/_chunks/{index-58db145d.mjs.map → index-49b41e57.mjs.map} +1 -1
  95. package/dist/_chunks/{index-da04b144.js → index-4bdd41f2.js} +14 -13
  96. package/dist/_chunks/{index-da04b144.js.map → index-4bdd41f2.js.map} +1 -1
  97. package/dist/_chunks/{index-7aed99db.js → index-4ff5f2a8.js} +12 -12
  98. package/dist/_chunks/{index-7aed99db.js.map → index-4ff5f2a8.js.map} +1 -1
  99. package/dist/_chunks/{index-56ced4ab.mjs → index-5221021e.mjs} +8 -7
  100. package/dist/_chunks/{index-56ced4ab.mjs.map → index-5221021e.mjs.map} +1 -1
  101. package/dist/_chunks/{index-a4348f3b.js → index-54a7f1f4.js} +12 -12
  102. package/dist/_chunks/index-54a7f1f4.js.map +1 -0
  103. package/dist/_chunks/{index-1da8c640.mjs → index-5502f0f9.mjs} +9 -10
  104. package/dist/_chunks/{index-1da8c640.mjs.map → index-5502f0f9.mjs.map} +1 -1
  105. package/dist/_chunks/{index-36e0d449.mjs → index-5af78a9d.mjs} +32 -45
  106. package/dist/_chunks/index-5af78a9d.mjs.map +1 -0
  107. package/dist/_chunks/{index-1f1e2465.js → index-5be49e36.js} +9 -11
  108. package/dist/_chunks/{index-1f1e2465.js.map → index-5be49e36.js.map} +1 -1
  109. package/dist/_chunks/{index-4565fcbd.js → index-5bf8300a.js} +3 -3
  110. package/dist/_chunks/{index-4565fcbd.js.map → index-5bf8300a.js.map} +1 -1
  111. package/dist/_chunks/{index-48322669.mjs → index-663f37fb.mjs} +3 -3
  112. package/dist/_chunks/index-663f37fb.mjs.map +1 -0
  113. package/dist/_chunks/{index-35e4bad6.mjs → index-6999385d.mjs} +8 -9
  114. package/dist/_chunks/{index-35e4bad6.mjs.map → index-6999385d.mjs.map} +1 -1
  115. package/dist/_chunks/{index-928b18d2.mjs → index-70ad05e1.mjs} +3 -3
  116. package/dist/_chunks/{index-928b18d2.mjs.map → index-70ad05e1.mjs.map} +1 -1
  117. package/dist/_chunks/{index-e22d1a84.mjs → index-72195b26.mjs} +14 -13
  118. package/dist/_chunks/{index-e22d1a84.mjs.map → index-72195b26.mjs.map} +1 -1
  119. package/dist/_chunks/{index-c604806d.js → index-73b1ca6d.js} +12 -12
  120. package/dist/_chunks/{index-c604806d.js.map → index-73b1ca6d.js.map} +1 -1
  121. package/dist/_chunks/{index-62b4b3fc.js → index-76459a60.js} +11 -11
  122. package/dist/_chunks/{index-62b4b3fc.js.map → index-76459a60.js.map} +1 -1
  123. package/dist/_chunks/{index-6b9e3d60.js → index-77b91009.js} +9 -10
  124. package/dist/_chunks/{index-6b9e3d60.js.map → index-77b91009.js.map} +1 -1
  125. package/dist/_chunks/{index-24189ec9.js → index-84321b2e.js} +6 -6
  126. package/dist/_chunks/{index-24189ec9.js.map → index-84321b2e.js.map} +1 -1
  127. package/dist/_chunks/{index-b2257157.js → index-866d1aaf.js} +49 -12
  128. package/dist/_chunks/index-866d1aaf.js.map +1 -0
  129. package/dist/_chunks/{index-066ee02e.js → index-891738bc.js} +8 -10
  130. package/dist/_chunks/{index-066ee02e.js.map → index-891738bc.js.map} +1 -1
  131. package/dist/_chunks/{index-cadd3ee0.js → index-89cb437c.js} +4 -4
  132. package/dist/_chunks/{index-cadd3ee0.js.map → index-89cb437c.js.map} +1 -1
  133. package/dist/_chunks/{index-8ea5a488.js → index-901d8afc.js} +9 -10
  134. package/dist/_chunks/{index-8ea5a488.js.map → index-901d8afc.js.map} +1 -1
  135. package/dist/_chunks/{index-d1620260.js → index-9c56225f.js} +13 -14
  136. package/dist/_chunks/{index-d1620260.js.map → index-9c56225f.js.map} +1 -1
  137. package/dist/_chunks/{index-6dbc94a9.mjs → index-9e3fc4fe.mjs} +6 -6
  138. package/dist/_chunks/{index-6dbc94a9.mjs.map → index-9e3fc4fe.mjs.map} +1 -1
  139. package/dist/_chunks/{index-bdfc1149.mjs → index-a16075f2.mjs} +49 -12
  140. package/dist/_chunks/index-a16075f2.mjs.map +1 -0
  141. package/dist/_chunks/{index-6cc54f3b.mjs → index-a1c1b833.mjs} +8 -9
  142. package/dist/_chunks/{index-6cc54f3b.mjs.map → index-a1c1b833.mjs.map} +1 -1
  143. package/dist/_chunks/{index-acd6d64f.js → index-aaffa28c.js} +8 -7
  144. package/dist/_chunks/{index-acd6d64f.js.map → index-aaffa28c.js.map} +1 -1
  145. package/dist/_chunks/{index-be2ca313.mjs → index-abcea3d3.mjs} +13 -13
  146. package/dist/_chunks/{index-be2ca313.mjs.map → index-abcea3d3.mjs.map} +1 -1
  147. package/dist/_chunks/{index-af69bc98.mjs → index-acdd9b71.mjs} +11 -11
  148. package/dist/_chunks/{index-af69bc98.mjs.map → index-acdd9b71.mjs.map} +1 -1
  149. package/dist/_chunks/{index-89d27faa.js → index-adc85ed8.js} +14 -13
  150. package/dist/_chunks/{index-89d27faa.js.map → index-adc85ed8.js.map} +1 -1
  151. package/dist/_chunks/{index-f448aed2.js → index-af5e137f.js} +13 -12
  152. package/dist/_chunks/{index-f448aed2.js.map → index-af5e137f.js.map} +1 -1
  153. package/dist/_chunks/{index-16030b74.js → index-b11e88f3.js} +3 -3
  154. package/dist/_chunks/index-b11e88f3.js.map +1 -0
  155. package/dist/_chunks/{index-e414353b.js → index-b47862fc.js} +8 -8
  156. package/dist/_chunks/{index-e414353b.js.map → index-b47862fc.js.map} +1 -1
  157. package/dist/_chunks/{index-51a15b27.js → index-bea39602.js} +4 -4
  158. package/dist/_chunks/{index-51a15b27.js.map → index-bea39602.js.map} +1 -1
  159. package/dist/_chunks/{index-53ba81f9.mjs → index-c202e78f.mjs} +9 -10
  160. package/dist/_chunks/{index-53ba81f9.mjs.map → index-c202e78f.mjs.map} +1 -1
  161. package/dist/_chunks/{index-8d4d361d.mjs → index-c9f9b444.mjs} +13 -13
  162. package/dist/_chunks/{index-8d4d361d.mjs.map → index-c9f9b444.mjs.map} +1 -1
  163. package/dist/_chunks/{index-ea23ee9f.mjs → index-caecca36.mjs} +9 -11
  164. package/dist/_chunks/{index-ea23ee9f.mjs.map → index-caecca36.mjs.map} +1 -1
  165. package/dist/_chunks/{index-86dfbe3a.js → index-cce8ecb6.js} +178 -72
  166. package/dist/_chunks/index-cce8ecb6.js.map +1 -0
  167. package/dist/_chunks/{index-34de382e.mjs → index-cd461a87.mjs} +688 -824
  168. package/dist/_chunks/index-cd461a87.mjs.map +1 -0
  169. package/dist/_chunks/{index-5d8d89a7.js → index-cdfb1568.js} +13 -13
  170. package/dist/_chunks/{index-5d8d89a7.js.map → index-cdfb1568.js.map} +1 -1
  171. package/dist/_chunks/{index-1763a04f.js → index-cf87a6f0.js} +8 -9
  172. package/dist/_chunks/{index-1763a04f.js.map → index-cf87a6f0.js.map} +1 -1
  173. package/dist/_chunks/{index-b81f7273.mjs → index-d33930a8.mjs} +78 -147
  174. package/dist/_chunks/index-d33930a8.mjs.map +1 -0
  175. package/dist/_chunks/{index-fcd5bc14.mjs → index-d4473456.mjs} +14 -13
  176. package/dist/_chunks/{index-fcd5bc14.mjs.map → index-d4473456.mjs.map} +1 -1
  177. package/dist/_chunks/{index-3c58de6f.js → index-d74efba3.js} +14 -13
  178. package/dist/_chunks/{index-3c58de6f.js.map → index-d74efba3.js.map} +1 -1
  179. package/dist/_chunks/{index-1e973c03.mjs → index-d7bc095b.mjs} +14 -13
  180. package/dist/_chunks/{index-1e973c03.mjs.map → index-d7bc095b.mjs.map} +1 -1
  181. package/dist/_chunks/{index-00202c8a.mjs → index-dbbda762.mjs} +13 -12
  182. package/dist/_chunks/{index-00202c8a.mjs.map → index-dbbda762.mjs.map} +1 -1
  183. package/dist/_chunks/{index-f5342ea5.js → index-dfb03b19.js} +14 -13
  184. package/dist/_chunks/{index-f5342ea5.js.map → index-dfb03b19.js.map} +1 -1
  185. package/dist/_chunks/{index-bb8093ea.mjs → index-e10dd15d.mjs} +12 -12
  186. package/dist/_chunks/{index-bb8093ea.mjs.map → index-e10dd15d.mjs.map} +1 -1
  187. package/dist/_chunks/{index-370a4ee8.mjs → index-e4f7fa95.mjs} +12 -12
  188. package/dist/_chunks/index-e4f7fa95.mjs.map +1 -0
  189. package/dist/_chunks/{index-b98ea3ce.mjs → index-e749e6ef.mjs} +13 -14
  190. package/dist/_chunks/{index-b98ea3ce.mjs.map → index-e749e6ef.mjs.map} +1 -1
  191. package/dist/_chunks/{index-332f319e.mjs → index-ef5a0b8f.mjs} +8 -10
  192. package/dist/_chunks/{index-332f319e.mjs.map → index-ef5a0b8f.mjs.map} +1 -1
  193. package/dist/_chunks/{index-f179c7ea.js → index-f03c4e70.js} +13 -13
  194. package/dist/_chunks/{index-f179c7ea.js.map → index-f03c4e70.js.map} +1 -1
  195. package/dist/_chunks/{index-52b5db8a.js → index-fc0191f3.js} +8 -9
  196. package/dist/_chunks/{index-52b5db8a.js.map → index-fc0191f3.js.map} +1 -1
  197. package/dist/_chunks/{schema-a95f2514.mjs → schema-4d12cff6.mjs} +2 -2
  198. package/dist/_chunks/{schema-a95f2514.mjs.map → schema-4d12cff6.mjs.map} +1 -1
  199. package/dist/_chunks/{schema-f49c76d7.js → schema-c6ce9e01.js} +2 -2
  200. package/dist/_chunks/{schema-f49c76d7.js.map → schema-c6ce9e01.js.map} +1 -1
  201. package/dist/_chunks/{validateWorkflow-e66d7d2e.js → validateWorkflow-155f5778.js} +3 -3
  202. package/dist/_chunks/{validateWorkflow-e66d7d2e.js.map → validateWorkflow-155f5778.js.map} +1 -1
  203. package/dist/_chunks/{validateWorkflow-d051b610.mjs → validateWorkflow-e0166061.mjs} +3 -3
  204. package/dist/_chunks/{validateWorkflow-d051b610.mjs.map → validateWorkflow-e0166061.mjs.map} +1 -1
  205. package/dist/admin/index.js +9 -10
  206. package/dist/admin/index.js.map +1 -1
  207. package/dist/admin/index.mjs +9 -10
  208. package/dist/admin/index.mjs.map +1 -1
  209. package/dist/admin/src/constants.d.ts +10 -0
  210. package/dist/admin/src/contexts/admin.d.ts +2 -2
  211. package/dist/admin/src/hooks/__mocks__/useSettingsMenu.d.ts +2 -0
  212. package/dist/admin/src/hooks/useEnterprise.d.ts +6 -4
  213. package/dist/admin/src/hooks/useSettingsMenu.d.ts +24 -0
  214. package/dist/admin/src/pages/Auth/AuthPage.d.ts +6 -0
  215. package/dist/admin/src/pages/Auth/components/FieldActionWrapper.d.ts +3 -0
  216. package/dist/admin/src/pages/Auth/components/ForgotPassword.d.ts +3 -0
  217. package/dist/admin/src/pages/Auth/components/ForgotPasswordSuccess.d.ts +2 -0
  218. package/dist/admin/src/pages/Auth/components/Login.d.ts +8 -0
  219. package/dist/admin/src/pages/Auth/components/Oops.d.ts +2 -0
  220. package/dist/admin/src/pages/Auth/components/Register.d.ts +7 -0
  221. package/dist/admin/src/pages/Auth/components/ResetPassword.d.ts +3 -0
  222. package/dist/admin/src/pages/Auth/constants.d.ts +14 -0
  223. package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +2 -2
  224. package/dist/admin/src/types/permissions.d.ts +10 -0
  225. package/dist/cli.js +3 -1
  226. package/dist/cli.js.map +1 -1
  227. package/dist/cli.mjs +3 -1
  228. package/dist/cli.mjs.map +1 -1
  229. package/dist/ee/admin/src/constants.d.ts +3 -1
  230. package/dist/ee/admin/src/pages/AuthPage/components/Login.d.ts +3 -0
  231. package/dist/ee/admin/src/pages/AuthPage/components/Providers.d.ts +2 -0
  232. package/dist/ee/admin/src/pages/AuthPage/components/SSOProviders.d.ts +8 -0
  233. package/dist/ee/admin/src/pages/AuthPage/constants.d.ts +3 -0
  234. package/dist/ee/admin/src/pages/AuthResponse.d.ts +2 -0
  235. package/dist/ee/admin/src/pages/HomePage.d.ts +1 -1
  236. package/dist/shared/contracts/authentication.d.ts +126 -0
  237. package/dist/shared/contracts/providers.d.ts +18 -0
  238. package/ee/LICENSE +1 -0
  239. package/package.json +21 -21
  240. package/dist/_chunks/HomePage-a3cc32d2.mjs.map +0 -1
  241. package/dist/_chunks/HomePage-bdcb51be.js.map +0 -1
  242. package/dist/_chunks/SSOProviders-1d062c95.mjs.map +0 -1
  243. package/dist/_chunks/SSOProviders-1ef0a89e.js.map +0 -1
  244. package/dist/_chunks/constants-12dfb222.mjs +0 -34
  245. package/dist/_chunks/constants-12dfb222.mjs.map +0 -1
  246. package/dist/_chunks/constants-1aea1185.js +0 -34
  247. package/dist/_chunks/constants-1aea1185.js.map +0 -1
  248. package/dist/_chunks/constants-727a113c.js.map +0 -1
  249. package/dist/_chunks/constants-86aa3e70.js.map +0 -1
  250. package/dist/_chunks/constants-921eda17.mjs.map +0 -1
  251. package/dist/_chunks/constants-9de7641c.mjs.map +0 -1
  252. package/dist/_chunks/index-0af587c3.js.map +0 -1
  253. package/dist/_chunks/index-137490ba.js.map +0 -1
  254. package/dist/_chunks/index-16030b74.js.map +0 -1
  255. package/dist/_chunks/index-284c5926.js.map +0 -1
  256. package/dist/_chunks/index-305a03f4.mjs.map +0 -1
  257. package/dist/_chunks/index-34de382e.mjs.map +0 -1
  258. package/dist/_chunks/index-36e0d449.mjs.map +0 -1
  259. package/dist/_chunks/index-370a4ee8.mjs.map +0 -1
  260. package/dist/_chunks/index-48322669.mjs.map +0 -1
  261. package/dist/_chunks/index-5752584c.mjs.map +0 -1
  262. package/dist/_chunks/index-86dfbe3a.js.map +0 -1
  263. package/dist/_chunks/index-a4348f3b.js.map +0 -1
  264. package/dist/_chunks/index-b2257157.js.map +0 -1
  265. package/dist/_chunks/index-b81f7273.mjs.map +0 -1
  266. package/dist/_chunks/index-bdfc1149.mjs.map +0 -1
  267. package/dist/_chunks/index-edc9bb0b.js.map +0 -1
@@ -7,38 +7,36 @@ const helperPlugin = require("@strapi/helper-plugin");
7
7
  const reactHelmet = require("react-helmet");
8
8
  const reactIntl = require("react-intl");
9
9
  const reactRouterDom = require("react-router-dom");
10
- require("lodash/omit");
11
- const produce = require("immer");
12
- require("lodash/pick");
13
- require("lodash/set");
14
- require("lodash/unset");
15
- const reactRedux = require("react-redux");
16
- const AuthenticatedApp = require("./AuthenticatedApp-092ef2be.js");
17
- const index = require("./index-edc9bb0b.js");
10
+ const index = require("./index-0134922e.js");
18
11
  const sortBy = require("lodash/sortBy");
12
+ const reactRedux = require("react-redux");
13
+ const AuthenticatedApp = require("./AuthenticatedApp-26a57d48.js");
19
14
  const v2 = require("@strapi/design-system/v2");
20
15
  const Icons = require("@strapi/icons");
21
16
  const PropTypes = require("prop-types");
22
17
  const styled = require("styled-components");
23
18
  const reactQuery = require("react-query");
19
+ const produce = require("immer");
24
20
  const merge = require("lodash/merge");
25
- require("semver/functions/lt");
26
- require("semver/functions/valid");
27
- require("react-dnd");
28
- require("react-dnd-html5-backend");
29
- require("lodash/get");
30
- require("lodash/cloneDeep");
31
21
  require("react-dom/client");
32
22
  require("invariant");
33
23
  require("lodash/isFunction");
24
+ require("lodash/pick");
34
25
  require("@radix-ui/react-context");
35
- require("axios");
36
- require("lodash/camelCase");
37
- require("lodash/defaultsDeep");
38
26
  require("formik");
27
+ require("lodash/camelCase");
39
28
  require("yup");
29
+ require("lodash/defaultsDeep");
30
+ require("lodash/omit");
40
31
  require("qs");
32
+ require("lodash/get");
33
+ require("lodash/set");
41
34
  require("@reduxjs/toolkit");
35
+ require("semver/functions/lt");
36
+ require("semver/functions/valid");
37
+ require("react-dnd");
38
+ require("react-dnd-html5-backend");
39
+ require("lodash/cloneDeep");
42
40
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
43
41
  function _interopNamespace(e) {
44
42
  if (e && e.__esModule)
@@ -59,90 +57,20 @@ function _interopNamespace(e) {
59
57
  return Object.freeze(n);
60
58
  }
61
59
  const React__namespace = /* @__PURE__ */ _interopNamespace(React);
62
- const produce__default = /* @__PURE__ */ _interopDefault(produce);
63
60
  const sortBy__default = /* @__PURE__ */ _interopDefault(sortBy);
64
61
  const PropTypes__default = /* @__PURE__ */ _interopDefault(PropTypes);
65
62
  const styled__default = /* @__PURE__ */ _interopDefault(styled);
63
+ const produce__default = /* @__PURE__ */ _interopDefault(produce);
66
64
  const merge__default = /* @__PURE__ */ _interopDefault(merge);
67
- const LINKS_CE = {
68
- global: [
69
- {
70
- intlLabel: { id: "Settings.application.title", defaultMessage: "Overview" },
71
- to: "/settings/application-infos",
72
- id: "000-application-infos",
73
- permissions: []
74
- },
75
- {
76
- intlLabel: { id: "Settings.webhooks.title", defaultMessage: "Webhooks" },
77
- to: "/settings/webhooks",
78
- id: "webhooks"
79
- },
80
- {
81
- intlLabel: { id: "Settings.apiTokens.title", defaultMessage: "API Tokens" },
82
- to: "/settings/api-tokens?sort=name:ASC",
83
- id: "api-tokens"
84
- },
85
- {
86
- intlLabel: { id: "Settings.transferTokens.title", defaultMessage: "Transfer Tokens" },
87
- to: "/settings/transfer-tokens?sort=name:ASC",
88
- id: "transfer-tokens"
89
- },
90
- // If the Enterprise feature is not enabled and if the config doesn't disable it, we promote the Enterprise feature by displaying them in the settings menu.
91
- // Disable this by adding "promoteEE: false" to your `./config/admin.js` file
92
- ...!window.strapi.features.isEnabled(window.strapi.features.SSO) && window.strapi?.flags?.promoteEE ? [
93
- {
94
- intlLabel: { id: "Settings.sso.title", defaultMessage: "Single Sign-On" },
95
- to: "/settings/purchase-single-sign-on",
96
- id: "sso",
97
- lockIcon: true
98
- }
99
- ] : [],
100
- ...!window.strapi.features.isEnabled(window.strapi.features.REVIEW_WORKFLOWS) && window.strapi?.flags?.promoteEE ? [
101
- {
102
- intlLabel: {
103
- id: "Settings.review-workflows.page.title",
104
- defaultMessage: "Review Workflows"
105
- },
106
- to: "/settings/purchase-review-workflows",
107
- id: "review-workflows",
108
- lockIcon: true
109
- }
110
- ] : []
111
- ],
112
- admin: [
113
- {
114
- intlLabel: { id: "global.roles", defaultMessage: "Roles" },
115
- to: "/settings/roles",
116
- id: "roles"
117
- },
118
- {
119
- intlLabel: { id: "global.users" },
120
- // Init the search params directly
121
- to: "/settings/users?pageSize=10&page=1&sort=firstname",
122
- id: "users"
123
- },
124
- ...!window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS) && window.strapi?.flags?.promoteEE ? [
125
- {
126
- intlLabel: { id: "global.auditLogs", defaultMessage: "Audit Logs" },
127
- to: "/settings/purchase-audit-logs",
128
- id: "auditLogs",
129
- lockIcon: true
130
- }
131
- ] : []
132
- ]
133
- };
134
- const formatLinks = (menu) => {
135
- return menu.map((menuSection) => {
136
- const formattedLinks = menuSection.links.map((link) => ({
137
- ...link,
138
- isDisplayed: false
139
- }));
140
- return { ...menuSection, links: formattedLinks };
141
- });
142
- };
143
- const sortLinks = (links) => sortBy__default.default(links, (link) => link.id);
65
+ const formatLinks = (menu) => menu.map((menuSection) => {
66
+ const formattedLinks = menuSection.links.map((link) => ({
67
+ ...link,
68
+ isDisplayed: false
69
+ }));
70
+ return { ...menuSection, links: formattedLinks };
71
+ });
144
72
  const useSettingsMenu = () => {
145
- const [{ isLoading, menu }, setData] = React.useState({
73
+ const [{ isLoading, menu }, setData] = React__namespace.useState({
146
74
  isLoading: true,
147
75
  menu: []
148
76
  });
@@ -150,14 +78,15 @@ const useSettingsMenu = () => {
150
78
  const { shouldUpdateStrapi } = helperPlugin.useAppInfo();
151
79
  const { settings } = helperPlugin.useStrapiApp();
152
80
  const permissions = reactRedux.useSelector(AuthenticatedApp.selectAdminPermissions);
153
- const { global: globalLinks, admin: adminLinks } = index.useEnterprise(
154
- LINKS_CE,
155
- async () => (await Promise.resolve().then(() => require("./constants-1aea1185.js"))).LINKS_EE,
81
+ const ceLinks = React__namespace.useMemo(() => index.SETTINGS_LINKS_CE(), []);
82
+ const { admin: adminLinks, global: globalLinks } = index.useEnterprise(
83
+ ceLinks,
84
+ async () => (await Promise.resolve().then(() => require("./constants-7596f6f3.js"))).SETTINGS_LINKS_EE(),
156
85
  {
157
- combine(ceLinks, eeLinks) {
86
+ combine(ceLinks2, eeLinks) {
158
87
  return {
159
- admin: [...eeLinks.admin, ...ceLinks.admin],
160
- global: [...ceLinks.global, ...eeLinks.global]
88
+ admin: [...eeLinks.admin, ...ceLinks2.admin],
89
+ global: [...ceLinks2.global, ...eeLinks.global]
161
90
  };
162
91
  },
163
92
  defaultValue: {
@@ -166,53 +95,55 @@ const useSettingsMenu = () => {
166
95
  }
167
96
  }
168
97
  );
169
- const addPermissions = React.useCallback(
98
+ const addPermissions = React__namespace.useCallback(
170
99
  (link) => {
171
100
  if (!link.id) {
172
101
  throw new Error("The settings menu item must have an id attribute.");
173
102
  }
174
103
  return {
175
104
  ...link,
176
- permissions: permissions.settings?.[link.id]?.main
105
+ permissions: permissions.settings?.[link.id]?.main ?? []
177
106
  };
178
107
  },
179
108
  [permissions.settings]
180
109
  );
181
- React.useEffect(() => {
110
+ React__namespace.useEffect(() => {
182
111
  const getData = async () => {
183
112
  const buildMenuPermissions = (sections2) => Promise.all(
184
113
  sections2.reduce((acc, section, sectionIndex) => {
185
- const buildMenuPermissions2 = (links) => links.map(async (link, linkIndex) => ({
114
+ const linksWithPermissions = section.links.map(async (link, linkIndex) => ({
186
115
  hasPermission: await helperPlugin.hasPermissions(userPermissions, link.permissions),
187
116
  sectionIndex,
188
117
  linkIndex
189
118
  }));
190
- return [...acc, ...buildMenuPermissions2(section.links)];
119
+ return [...acc, ...linksWithPermissions];
191
120
  }, [])
192
121
  );
193
122
  const menuPermissions = await buildMenuPermissions(sections);
194
- setData((prev) => ({
195
- ...prev,
196
- isLoading: false,
197
- menu: sections.map((section, sectionIndex) => ({
198
- ...section,
199
- links: section.links.map((link, linkIndex) => {
200
- const permission = menuPermissions.find(
201
- (permission2) => permission2.sectionIndex === sectionIndex && permission2.linkIndex === linkIndex
202
- );
203
- return {
204
- ...link,
205
- isDisplayed: Boolean(permission.hasPermission)
206
- };
207
- })
208
- }))
209
- }));
123
+ setData((prev) => {
124
+ return {
125
+ ...prev,
126
+ isLoading: false,
127
+ menu: sections.map((section, sectionIndex) => ({
128
+ ...section,
129
+ links: section.links.map((link, linkIndex) => {
130
+ const permission = menuPermissions.find(
131
+ (permission2) => permission2.sectionIndex === sectionIndex && permission2.linkIndex === linkIndex
132
+ );
133
+ return {
134
+ ...link,
135
+ isDisplayed: Boolean(permission?.hasPermission)
136
+ };
137
+ })
138
+ }))
139
+ };
140
+ });
210
141
  };
211
142
  const { global, ...otherSections } = settings;
212
143
  const sections = formatLinks([
213
144
  {
214
- ...settings.global,
215
- links: sortLinks([...settings.global.links, ...globalLinks.map(addPermissions)]).map(
145
+ ...global,
146
+ links: sortBy__default.default([...global.links, ...globalLinks.map(addPermissions)], (link) => link.id).map(
216
147
  (link) => ({
217
148
  ...link,
218
149
  hasNotification: link.id === "000-application-infos" && shouldUpdateStrapi
@@ -228,13 +159,13 @@ const useSettingsMenu = () => {
228
159
  ]);
229
160
  getData();
230
161
  }, [adminLinks, globalLinks, userPermissions, settings, shouldUpdateStrapi, addPermissions]);
231
- const filterMenu = (menuItem) => {
232
- return {
162
+ return {
163
+ isLoading,
164
+ menu: menu.map((menuItem) => ({
233
165
  ...menuItem,
234
166
  links: menuItem.links.filter((link) => link.isDisplayed)
235
- };
167
+ }))
236
168
  };
237
- return { isLoading, menu: menu.map(filterMenu) };
238
169
  };
239
170
  const CustomIcon = styled__default.default(designSystem.Icon)`
240
171
  right: 15px;
@@ -293,7 +224,7 @@ SettingsNav.propTypes = {
293
224
  const ROUTES_CE = [
294
225
  {
295
226
  async Component() {
296
- const component = await Promise.resolve().then(() => require("./index-8ea5a488.js"));
227
+ const component = await Promise.resolve().then(() => require("./index-901d8afc.js"));
297
228
  return component;
298
229
  },
299
230
  to: "/settings/roles",
@@ -301,7 +232,7 @@ const ROUTES_CE = [
301
232
  },
302
233
  {
303
234
  async Component() {
304
- const component = await Promise.resolve().then(() => require("./index-52b5db8a.js"));
235
+ const component = await Promise.resolve().then(() => require("./index-fc0191f3.js"));
305
236
  return component;
306
237
  },
307
238
  to: "/settings/roles/duplicate/:id",
@@ -309,7 +240,7 @@ const ROUTES_CE = [
309
240
  },
310
241
  {
311
242
  async Component() {
312
- const component = await Promise.resolve().then(() => require("./index-52b5db8a.js"));
243
+ const component = await Promise.resolve().then(() => require("./index-fc0191f3.js"));
313
244
  return component;
314
245
  },
315
246
  to: "/settings/roles/new",
@@ -317,7 +248,7 @@ const ROUTES_CE = [
317
248
  },
318
249
  {
319
250
  async Component() {
320
- const component = await Promise.resolve().then(() => require("./index-6a512cec.js"));
251
+ const component = await Promise.resolve().then(() => require("./index-01a3932c.js"));
321
252
  return component;
322
253
  },
323
254
  to: "/settings/roles/:id",
@@ -325,7 +256,7 @@ const ROUTES_CE = [
325
256
  },
326
257
  {
327
258
  async Component() {
328
- const component = await Promise.resolve().then(() => require("./index-24189ec9.js")).then((n) => n.index);
259
+ const component = await Promise.resolve().then(() => require("./index-84321b2e.js")).then((n) => n.index);
329
260
  return component;
330
261
  },
331
262
  to: "/settings/users",
@@ -333,7 +264,7 @@ const ROUTES_CE = [
333
264
  },
334
265
  {
335
266
  async Component() {
336
- const component = await Promise.resolve().then(() => require("./index-e414353b.js"));
267
+ const component = await Promise.resolve().then(() => require("./index-b47862fc.js"));
337
268
  return component;
338
269
  },
339
270
  to: "/settings/users/:id",
@@ -341,7 +272,7 @@ const ROUTES_CE = [
341
272
  },
342
273
  {
343
274
  async Component() {
344
- const component = await Promise.resolve().then(() => require("./index-f179c7ea.js"));
275
+ const component = await Promise.resolve().then(() => require("./index-f03c4e70.js"));
345
276
  return component;
346
277
  },
347
278
  to: "/settings/webhooks/create",
@@ -349,7 +280,7 @@ const ROUTES_CE = [
349
280
  },
350
281
  {
351
282
  async Component() {
352
- const component = await Promise.resolve().then(() => require("./index-5d8d89a7.js"));
283
+ const component = await Promise.resolve().then(() => require("./index-cdfb1568.js"));
353
284
  return component;
354
285
  },
355
286
  to: "/settings/webhooks/:id",
@@ -357,7 +288,7 @@ const ROUTES_CE = [
357
288
  },
358
289
  {
359
290
  async Component() {
360
- const component = await Promise.resolve().then(() => require("./index-1f1e2465.js"));
291
+ const component = await Promise.resolve().then(() => require("./index-5be49e36.js"));
361
292
  return component;
362
293
  },
363
294
  to: "/settings/webhooks",
@@ -365,7 +296,7 @@ const ROUTES_CE = [
365
296
  },
366
297
  {
367
298
  async Component() {
368
- const component = await Promise.resolve().then(() => require("./index-4c5acc70.js"));
299
+ const component = await Promise.resolve().then(() => require("./index-2e47d9aa.js"));
369
300
  return component;
370
301
  },
371
302
  to: "/settings/api-tokens",
@@ -373,7 +304,7 @@ const ROUTES_CE = [
373
304
  },
374
305
  {
375
306
  async Component() {
376
- const component = await Promise.resolve().then(() => require("./index-f5342ea5.js"));
307
+ const component = await Promise.resolve().then(() => require("./index-dfb03b19.js"));
377
308
  return component;
378
309
  },
379
310
  to: "/settings/api-tokens/create",
@@ -381,7 +312,7 @@ const ROUTES_CE = [
381
312
  },
382
313
  {
383
314
  async Component() {
384
- const component = await Promise.resolve().then(() => require("./index-89d27faa.js"));
315
+ const component = await Promise.resolve().then(() => require("./index-adc85ed8.js"));
385
316
  return component;
386
317
  },
387
318
  to: "/settings/api-tokens/:id",
@@ -389,7 +320,7 @@ const ROUTES_CE = [
389
320
  },
390
321
  {
391
322
  async Component() {
392
- const component = await Promise.resolve().then(() => require("./index-da04b144.js"));
323
+ const component = await Promise.resolve().then(() => require("./index-4bdd41f2.js"));
393
324
  return component;
394
325
  },
395
326
  to: "/settings/transfer-tokens/create",
@@ -397,7 +328,7 @@ const ROUTES_CE = [
397
328
  },
398
329
  {
399
330
  async Component() {
400
- const component = await Promise.resolve().then(() => require("./index-6b9e3d60.js"));
331
+ const component = await Promise.resolve().then(() => require("./index-77b91009.js"));
401
332
  return component;
402
333
  },
403
334
  to: "/settings/transfer-tokens",
@@ -405,7 +336,7 @@ const ROUTES_CE = [
405
336
  },
406
337
  {
407
338
  async Component() {
408
- const component = await Promise.resolve().then(() => require("./index-3c58de6f.js"));
339
+ const component = await Promise.resolve().then(() => require("./index-d74efba3.js"));
409
340
  return component;
410
341
  },
411
342
  to: "/settings/transfer-tokens/:id",
@@ -1284,7 +1215,7 @@ const ApplicationInfosPage = () => {
1284
1215
  } = helperPlugin.useAppInfo();
1285
1216
  const AdminSeatInfo = index.useEnterprise(
1286
1217
  AdminSeatInfoCE,
1287
- async () => (await Promise.resolve().then(() => require("./index-066ee02e.js"))).AdminSeatInfoEE
1218
+ async () => (await Promise.resolve().then(() => require("./index-891738bc.js"))).AdminSeatInfoEE
1288
1219
  );
1289
1220
  const {
1290
1221
  allowedActions: { canRead, canUpdate }
@@ -1481,7 +1412,7 @@ function SettingsPage() {
1481
1412
  const { isLoading, menu } = useSettingsMenu();
1482
1413
  const routes = index.useEnterprise(
1483
1414
  ROUTES_CE,
1484
- async () => (await Promise.resolve().then(() => require("./constants-70e05152.js"))).ROUTES_EE,
1415
+ async () => (await Promise.resolve().then(() => require("./constants-9d60a039.js"))).ROUTES_EE,
1485
1416
  {
1486
1417
  combine(ceRoutes, eeRoutes) {
1487
1418
  return [...ceRoutes, ...eeRoutes];
@@ -1522,4 +1453,4 @@ function SettingsPage() {
1522
1453
  ] });
1523
1454
  }
1524
1455
  exports.SettingsPage = SettingsPage;
1525
- //# sourceMappingURL=index-0af587c3.js.map
1456
+ //# sourceMappingURL=index-2ca9ffb3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-2ca9ffb3.js","sources":["../../admin/src/hooks/useSettingsMenu.ts","../../admin/src/pages/SettingsPage/components/SettingsNav/index.js","../../admin/src/pages/SettingsPage/constants.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/constants.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/reducer.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/index.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/reducer.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/parseFileMetadatas.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromComputerForm.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/urlToFile.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromUrlForm.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/AddLogoDialog.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/ImageCardAsset.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/PendingLogoDialog.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/stepper.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/index.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/init.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/reducer.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/index.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/getFormData.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js","../../admin/src/pages/SettingsPage/utils/makeUniqueRoutes.ts","../../admin/src/pages/SettingsPage/index.js"],"sourcesContent":["import * as React from 'react';\n\nimport {\n hasPermissions,\n StrapiAppSetting,\n StrapiAppSettingLink,\n useRBACProvider,\n useStrapiApp,\n useAppInfo,\n} from '@strapi/helper-plugin';\nimport sortBy from 'lodash/sortBy';\nimport { useSelector } from 'react-redux';\n\nimport { SETTINGS_LINKS_CE, SettingsMenuLink } from '../constants';\nimport { selectAdminPermissions } from '../selectors';\n\nimport { useEnterprise } from './useEnterprise';\n\nconst formatLinks = (menu: SettingsMenuSection[]): SettingsMenuSectionWithDisplayedLinks[] =>\n menu.map((menuSection) => {\n const formattedLinks = menuSection.links.map((link) => ({\n ...link,\n isDisplayed: false,\n }));\n\n return { ...menuSection, links: formattedLinks };\n });\n\ninterface SettingsMenuLinkWithPermissions extends SettingsMenuLink {\n permissions: StrapiAppSettingLink['permissions'];\n}\n\ninterface SettingsMenuSection extends Omit<StrapiAppSetting, 'links'> {\n links: Array<SettingsMenuLinkWithPermissions | StrapiAppSettingLink>;\n}\n\ninterface SettingsMenuLinkWithPermissionsAndDisplayed extends SettingsMenuLinkWithPermissions {\n isDisplayed: boolean;\n}\n\ninterface StrapiAppSettingLinkWithDisplayed extends StrapiAppSettingLink {\n isDisplayed: boolean;\n}\n\ninterface SettingsMenuSectionWithDisplayedLinks extends Omit<SettingsMenuSection, 'links'> {\n links: Array<SettingsMenuLinkWithPermissionsAndDisplayed | StrapiAppSettingLinkWithDisplayed>;\n}\n\ntype SettingsMenu = SettingsMenuSectionWithDisplayedLinks[];\n\nconst useSettingsMenu = (): {\n isLoading: boolean;\n menu: SettingsMenu;\n} => {\n const [{ isLoading, menu }, setData] = React.useState<{\n isLoading: boolean;\n menu: SettingsMenu;\n }>({\n isLoading: true,\n menu: [],\n });\n const { allPermissions: userPermissions } = useRBACProvider();\n const { shouldUpdateStrapi } = useAppInfo();\n const { settings } = useStrapiApp();\n const permissions = useSelector(selectAdminPermissions);\n\n /**\n * memoize the return value of this function to avoid re-computing it on every render\n * because it's used in an effect it ends up re-running recursively.\n */\n const ceLinks = React.useMemo(() => SETTINGS_LINKS_CE(), []);\n\n const { admin: adminLinks, global: globalLinks } = useEnterprise(\n ceLinks,\n async () => (await import('../../../ee/admin/src/constants')).SETTINGS_LINKS_EE(),\n {\n combine(ceLinks, eeLinks) {\n return {\n admin: [...eeLinks.admin, ...ceLinks.admin],\n global: [...ceLinks.global, ...eeLinks.global],\n };\n },\n defaultValue: {\n admin: [],\n global: [],\n },\n }\n );\n\n const addPermissions = React.useCallback(\n (link: SettingsMenuLink) => {\n if (!link.id) {\n throw new Error('The settings menu item must have an id attribute.');\n }\n\n return {\n ...link,\n permissions: permissions.settings?.[link.id]?.main ?? [],\n } satisfies SettingsMenuLinkWithPermissions;\n },\n [permissions.settings]\n );\n\n React.useEffect(() => {\n const getData = async () => {\n interface MenuLinkPermission {\n hasPermission: boolean;\n sectionIndex: number;\n linkIndex: number;\n }\n\n const buildMenuPermissions = (sections: SettingsMenuSectionWithDisplayedLinks[]) =>\n Promise.all(\n sections.reduce<Promise<MenuLinkPermission>[]>((acc, section, sectionIndex) => {\n const linksWithPermissions = section.links.map(async (link, linkIndex) => ({\n hasPermission: await hasPermissions(userPermissions, link.permissions),\n sectionIndex,\n linkIndex,\n }));\n\n return [...acc, ...linksWithPermissions];\n }, [])\n );\n\n const menuPermissions = await buildMenuPermissions(sections);\n\n setData((prev) => {\n return {\n ...prev,\n isLoading: false,\n menu: sections.map((section, sectionIndex) => ({\n ...section,\n links: section.links.map((link, linkIndex) => {\n const permission = menuPermissions.find(\n (permission) =>\n permission.sectionIndex === sectionIndex && permission.linkIndex === linkIndex\n );\n\n return {\n ...link,\n isDisplayed: Boolean(permission?.hasPermission),\n };\n }),\n })),\n };\n });\n };\n\n const { global, ...otherSections } = settings;\n const sections = formatLinks([\n {\n ...global,\n links: sortBy([...global.links, ...globalLinks.map(addPermissions)], (link) => link.id).map(\n (link) => ({\n ...link,\n hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi,\n })\n ),\n },\n {\n id: 'permissions',\n intlLabel: { id: 'Settings.permissions', defaultMessage: 'Administration Panel' },\n links: adminLinks.map(addPermissions),\n },\n ...Object.values(otherSections),\n ]);\n\n getData();\n }, [adminLinks, globalLinks, userPermissions, settings, shouldUpdateStrapi, addPermissions]);\n\n return {\n isLoading,\n menu: menu.map((menuItem) => ({\n ...menuItem,\n links: menuItem.links.filter((link) => link.isDisplayed),\n })),\n };\n};\n\nexport { useSettingsMenu };\nexport type { SettingsMenu };\n","import React from 'react';\n\nimport { Icon } from '@strapi/design-system';\nimport {\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system/v2';\nimport { useTracking } from '@strapi/helper-plugin';\nimport { Lock } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useLocation } from 'react-router-dom';\nimport styled from 'styled-components';\n\n/**\n * TODO: refactor the SubNav entirely, we shouldn't have\n * to do this hack to work a lock at the end. It's a bit hacky.\n */\n\nconst CustomIcon = styled(Icon)`\n right: 15px;\n position: absolute;\n`;\n\nconst SettingsNav = ({ menu }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n\n const filteredMenu = menu.filter(\n (section) => !section.links.every((link) => link.isDisplayed === false)\n );\n\n const sections = filteredMenu.map((section) => {\n return {\n ...section,\n title: section.intlLabel,\n links: section.links.map((link) => {\n return {\n ...link,\n title: link.intlLabel,\n name: link.id,\n };\n }),\n };\n });\n\n const label = formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n });\n\n const handleClickOnLink = (destination = null) => {\n trackUsage('willNavigate', { from: pathname, to: destination });\n };\n\n return (\n <SubNav ariaLabel={label}>\n <SubNavHeader label={label} />\n <SubNavSections>\n {sections.map((section) => (\n <SubNavSection key={section.id} label={formatMessage(section.intlLabel)}>\n {section.links.map((link) => {\n return (\n <SubNavLink\n as={NavLink}\n withBullet={link.hasNotification}\n to={link.to}\n onClick={() => handleClickOnLink(link.to)}\n key={link.id}\n >\n {formatMessage(link.intlLabel)}\n {link?.lockIcon && (\n <CustomIcon width={`${15 / 16}rem`} height={`${15 / 16}rem`} as={Lock} />\n )}\n </SubNavLink>\n );\n })}\n </SubNavSection>\n ))}\n </SubNavSections>\n </SubNav>\n );\n};\n\nSettingsNav.propTypes = {\n menu: PropTypes.array.isRequired,\n};\n\nexport default SettingsNav;\n","export const ROUTES_CE = [\n {\n async Component() {\n const component = await import('./pages/Roles/ProtectedListPage');\n\n return component;\n },\n to: '/settings/roles',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Roles/CreatePage');\n\n return component;\n },\n to: '/settings/roles/duplicate/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Roles/CreatePage');\n\n return component;\n },\n to: '/settings/roles/new',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Roles/ProtectedEditPage');\n\n return component;\n },\n to: '/settings/roles/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Users/ProtectedListPage');\n\n return component;\n },\n to: '/settings/users',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Users/ProtectedEditPage');\n\n return component;\n },\n to: '/settings/users/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Webhooks/ProtectedCreateView');\n\n return component;\n },\n to: '/settings/webhooks/create',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Webhooks/ProtectedEditView');\n\n return component;\n },\n to: '/settings/webhooks/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Webhooks/ProtectedListView');\n\n return component;\n },\n to: '/settings/webhooks',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/ApiTokens/ProtectedListView');\n\n return component;\n },\n to: '/settings/api-tokens',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/ApiTokens/ProtectedCreateView');\n\n return component;\n },\n to: '/settings/api-tokens/create',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/ApiTokens/ProtectedEditView');\n\n return component;\n },\n to: '/settings/api-tokens/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/TransferTokens/ProtectedCreateView');\n\n return component;\n },\n to: '/settings/transfer-tokens/create',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/TransferTokens/ProtectedListView');\n\n return component;\n },\n to: '/settings/transfer-tokens',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/TransferTokens/ProtectedEditView');\n\n return component;\n },\n to: '/settings/transfer-tokens/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/AuditLogs/SalesPage');\n\n return component;\n },\n to: '/settings/purchase-audit-logs',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/ReviewWorkflows/SalesPage');\n\n return component;\n },\n to: '/settings/purchase-review-workflows',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/SingleSignOn/SalesPage');\n\n return component;\n },\n to: '/settings/purchase-single-sign-on',\n exact: true,\n },\n];\n","export const DIMENSION = 750;\nexport const SIZE = 100;\nexport const ACCEPTED_FORMAT = ['image/jpeg', 'image/png', 'image/svg+xml'];\n","/* eslint-disable consistent-return */\n/*\n *\n * LogoModalStepper reducer\n *\n */\n\nimport produce from 'immer';\n\nconst initialState = {\n localImage: undefined,\n};\n\nconst reducer = (state = initialState, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'SET_LOCAL_IMAGE': {\n draftState.localImage = action.value;\n break;\n }\n default: {\n return draftState;\n }\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import React, { useReducer } from 'react';\n\nimport { ModalHeader, ModalLayout, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport reducer, { initialState } from './reducer';\n\nconst LogoModalStepper = ({\n onChangeLogo,\n customLogo,\n goTo,\n Component,\n modalTitle,\n next,\n prev,\n currentStep,\n}) => {\n const [{ localImage }, dispatch] = useReducer(reducer, initialState);\n const { formatMessage } = useIntl();\n\n const setLocalImage = (asset) => {\n dispatch({\n type: 'SET_LOCAL_IMAGE',\n value: asset,\n });\n };\n\n const handleCloseModal = () => {\n goTo(null);\n };\n\n if (!currentStep) {\n return null;\n }\n\n return (\n <ModalLayout labelledBy=\"modal\" onClose={handleCloseModal}>\n <ModalHeader>\n <Typography fontWeight=\"bold\" as=\"h2\" id=\"modal\">\n {formatMessage(modalTitle)}\n </Typography>\n </ModalHeader>\n <Component\n setLocalImage={setLocalImage}\n goTo={goTo}\n next={next}\n prev={prev}\n onClose={handleCloseModal}\n asset={localImage || customLogo}\n onChangeLogo={onChangeLogo}\n />\n </ModalLayout>\n );\n};\n\nLogoModalStepper.defaultProps = {\n Component: undefined,\n currentStep: undefined,\n customLogo: undefined,\n modalTitle: undefined,\n next: null,\n prev: null,\n};\n\nLogoModalStepper.propTypes = {\n Component: PropTypes.elementType,\n currentStep: PropTypes.string,\n customLogo: PropTypes.shape({\n name: PropTypes.string,\n url: PropTypes.string,\n width: PropTypes.number,\n height: PropTypes.number,\n ext: PropTypes.string,\n }),\n goTo: PropTypes.func.isRequired,\n modalTitle: PropTypes.shape({\n id: PropTypes.string,\n defaultMessage: PropTypes.string,\n }),\n next: PropTypes.string,\n onChangeLogo: PropTypes.func.isRequired,\n prev: PropTypes.string,\n};\n\nexport default LogoModalStepper;\n","/* eslint-disable consistent-return */\n/*\n *\n * LogoInput reducer\n *\n */\n\nimport produce from 'immer';\n\nconst initialState = {\n currentStep: undefined,\n};\n\nconst reducer = (state = initialState, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'GO_TO': {\n draftState.currentStep = action.to;\n break;\n }\n default: {\n return draftState;\n }\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import { ACCEPTED_FORMAT, DIMENSION, SIZE } from './constants';\n\nconst FILE_FORMAT_ERROR_MESSAGE = {\n id: 'Settings.application.customization.modal.upload.error-format',\n defaultMessage: 'Wrong format uploaded (accepted formats only: jpeg, jpg, png, svg).',\n};\n\nconst FILE_SIZING_ERROR_MESSAGE = {\n id: 'Settings.application.customization.modal.upload.error-size',\n defaultMessage:\n 'The file uploaded is too large (max dimension: {dimension}x{dimension}, max file size: {size}KB)',\n};\n\nconst getFileDimensions = (file) => {\n return new Promise((resolve) => {\n const reader = new FileReader();\n reader.onload = () => {\n const img = new Image();\n img.onload = function () {\n resolve({ width: img.width, height: img.height });\n };\n img.src = reader.result;\n };\n reader.readAsDataURL(file);\n });\n};\n\nconst rawFileToAsset = (rawFile, fileDimensions) => {\n return {\n ext: rawFile.name.split('.').pop(),\n size: rawFile.size / 1000,\n name: rawFile.name,\n url: URL.createObjectURL(rawFile),\n rawFile,\n width: fileDimensions.width,\n height: fileDimensions.height,\n };\n};\n\nexport const parseFileMetadatas = async (file) => {\n let error;\n\n const isFormatAuthorized = ACCEPTED_FORMAT.includes(file.type);\n\n if (!isFormatAuthorized) {\n error = new Error('File format');\n error.displayMessage = FILE_FORMAT_ERROR_MESSAGE;\n\n throw error;\n }\n\n const fileDimensions = await getFileDimensions(file);\n\n const areDimensionsAuthorized =\n fileDimensions.width <= DIMENSION && fileDimensions.height <= DIMENSION;\n\n if (!areDimensionsAuthorized) {\n error = new Error('File sizing');\n error.displayMessage = FILE_SIZING_ERROR_MESSAGE;\n\n throw error;\n }\n\n const asset = rawFileToAsset(file, fileDimensions);\n\n const isSizeAuthorized = asset.size <= SIZE;\n\n if (!isSizeAuthorized) {\n error = new Error('File sizing');\n error.displayMessage = FILE_SIZING_ERROR_MESSAGE;\n\n throw error;\n }\n\n return asset;\n};\n","import React, { useRef, useState } from 'react';\n\nimport {\n Box,\n Button,\n Field,\n FieldError,\n FieldInput,\n Flex,\n Icon,\n ModalFooter,\n Typography,\n} from '@strapi/design-system';\nimport { PicturePlus } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { ACCEPTED_FORMAT, DIMENSION, SIZE } from '../../utils/constants';\nimport { parseFileMetadatas } from '../../utils/parseFileMetadatas';\n\nconst FileInput = styled(FieldInput)`\n opacity: 0;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1;\n`;\n\nconst FromComputerForm = ({ setLocalImage, goTo, next, onClose }) => {\n const { formatMessage } = useIntl();\n const [dragOver, setDragOver] = useState(false);\n const [fileError, setFileError] = useState(undefined);\n const inputRef = useRef(null);\n\n const handleDragEnter = () => setDragOver(true);\n const handleDragLeave = () => setDragOver(false);\n\n const handleClick = (e) => {\n e.preventDefault();\n inputRef.current.click();\n };\n\n const handleChange = async () => {\n handleDragLeave();\n const file = inputRef.current.files[0];\n\n if (!file) {\n return;\n }\n\n try {\n const asset = await parseFileMetadatas(file);\n setLocalImage(asset);\n goTo(next);\n } catch (err) {\n if (err.displayMessage) {\n setFileError(formatMessage(err.displayMessage, { size: SIZE, dimension: DIMENSION }));\n inputRef.current.focus();\n } else {\n throw err;\n }\n }\n };\n\n const getBorderColor = () => {\n if (dragOver) {\n return 'primary500';\n }\n if (fileError) {\n return 'danger600';\n }\n\n return 'neutral300';\n };\n\n return (\n <>\n <form>\n <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>\n <Field name=\"logo-upload\" error={fileError}>\n <label htmlFor=\"logo-upload\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex\n paddingTop={9}\n paddingBottom={7}\n hasRadius\n justifyContent=\"center\"\n direction=\"column\"\n background={dragOver ? 'primary100' : 'neutral100'}\n borderColor={getBorderColor()}\n borderStyle=\"dashed\"\n borderWidth=\"1px\"\n position=\"relative\"\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n >\n <Icon\n color=\"primary600\"\n width={`${60 / 16}rem`}\n height={`${60 / 16}rem`}\n as={PicturePlus}\n aria-hidden\n />\n\n <Box paddingTop={3} paddingBottom={5}>\n <Typography variant=\"delta\" as=\"span\">\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.drag-drop',\n defaultMessage: 'Drag and Drop here or',\n })}\n </Typography>\n </Box>\n\n <FileInput\n accept={ACCEPTED_FORMAT}\n cursor=\"pointer\"\n as=\"input\"\n type=\"file\"\n name=\"files\"\n tabIndex={-1}\n zIndex={1}\n onChange={handleChange}\n ref={inputRef}\n id=\"logo-upload\"\n />\n\n <Button type=\"button\" onClick={handleClick}>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.cta.browse',\n defaultMessage: 'Browse files',\n })}\n </Button>\n\n <Box paddingTop={6}>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.application.customization.modal.upload.file-validation',\n defaultMessage:\n 'Max dimension: {dimension}x{dimension}, Max size: {size}KB',\n },\n { size: SIZE, dimension: DIMENSION }\n )}\n </Typography>\n </Box>\n </Flex>\n <FieldError />\n </Flex>\n </label>\n </Field>\n </Box>\n </form>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'Settings.application.customization.modal.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n />\n </>\n );\n};\n\nFromComputerForm.defaultProps = {\n next: null,\n};\n\nFromComputerForm.propTypes = {\n goTo: PropTypes.func.isRequired,\n next: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n setLocalImage: PropTypes.func.isRequired,\n};\n\nexport default FromComputerForm;\n","import { getFetchClient } from '@strapi/helper-plugin';\n\nconst urlToFile = async (url) => {\n try {\n const { get } = getFetchClient();\n const res = await get(url, { responseType: 'blob', timeout: 8000 });\n const loadedFile = new File([res.data], res.config.url, {\n type: res.headers['content-type'],\n });\n\n return loadedFile;\n } catch (err) {\n err.displayMessage = {\n id: 'Settings.application.customization.modal.upload.error-network',\n defaultMessage: 'Network error',\n };\n\n throw err;\n }\n};\n\nexport default urlToFile;\n","import React, { useState } from 'react';\n\nimport { Box, Button, ModalFooter, TextInput } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { DIMENSION, SIZE } from '../../utils/constants';\nimport { parseFileMetadatas } from '../../utils/parseFileMetadatas';\nimport urlToFile from '../../utils/urlToFile';\n\nconst FromUrlForm = ({ goTo, next, onClose, setLocalImage }) => {\n const { formatMessage } = useIntl();\n const [logoUrl, setLogoUrl] = useState('');\n const [error, setError] = useState(null);\n\n const handleChange = (e) => {\n setLogoUrl(e.target.value);\n };\n\n const handleSubmit = async () => {\n try {\n const file = await urlToFile(logoUrl);\n const asset = await parseFileMetadatas(file);\n\n setLocalImage(asset);\n goTo(next);\n } catch (err) {\n if (err.displayMessage) {\n setError(formatMessage(err.displayMessage, { size: SIZE, dimension: DIMENSION }));\n } else {\n throw err;\n }\n }\n };\n\n return (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n handleSubmit();\n }}\n >\n <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>\n <TextInput\n label={formatMessage({\n id: 'Settings.application.customization.modal.upload.from-url.input-label',\n defaultMessage: 'URL',\n })}\n error={error}\n onChange={handleChange}\n value={logoUrl}\n name=\"logo-url\"\n />\n </Box>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n }\n endActions={\n <Button type=\"submit\">\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.next',\n defaultMessage: 'Next',\n })}\n </Button>\n }\n />\n </form>\n );\n};\n\nFromUrlForm.defaultProps = {\n next: null,\n};\n\nFromUrlForm.propTypes = {\n goTo: PropTypes.func.isRequired,\n next: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n setLocalImage: PropTypes.func.isRequired,\n};\n\nexport default FromUrlForm;\n","import React from 'react';\n\nimport { Box, Divider, Tab, TabGroup, TabPanel, TabPanels, Tabs } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport FromComputerForm from './FromComputerForm';\nimport FromUrlForm from './FromUrlForm';\n\nconst AddLogoDialog = ({ setLocalImage, goTo, next, onClose }) => {\n const { formatMessage } = useIntl();\n\n return (\n <TabGroup\n label={formatMessage({\n id: 'Settings.application.customization.modal.tab.label',\n defaultMessage: 'How do you want to upload your assets?',\n })}\n variant=\"simple\"\n >\n <Box paddingLeft={8} paddingRight={8}>\n <Tabs>\n <Tab>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.from-computer',\n defaultMessage: 'From computer',\n })}\n </Tab>\n <Tab>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.from-url',\n defaultMessage: 'From url',\n })}\n </Tab>\n </Tabs>\n\n <Divider />\n </Box>\n <TabPanels>\n <TabPanel>\n <FromComputerForm\n onClose={onClose}\n setLocalImage={setLocalImage}\n goTo={goTo}\n next={next}\n />\n </TabPanel>\n <TabPanel>\n <FromUrlForm onClose={onClose} setLocalImage={setLocalImage} goTo={goTo} next={next} />\n </TabPanel>\n </TabPanels>\n </TabGroup>\n );\n};\n\nAddLogoDialog.defaultProps = {\n next: null,\n};\n\nAddLogoDialog.propTypes = {\n goTo: PropTypes.func.isRequired,\n next: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n setLocalImage: PropTypes.func.isRequired,\n};\n\nexport default AddLogoDialog;\n","import React from 'react';\n\nimport {\n Card,\n CardAsset,\n CardBadge,\n CardBody,\n CardContent,\n CardHeader,\n CardSubtitle,\n CardTitle,\n} from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst ImageCardAsset = ({ asset }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Card>\n <CardHeader>\n <CardAsset size=\"S\" src={asset.url} />\n </CardHeader>\n <CardBody>\n <CardContent>\n <CardTitle>{asset.name}</CardTitle>\n <CardSubtitle>\n {`${asset.ext.toUpperCase()} - ${asset.width}✕${asset.height}`}\n </CardSubtitle>\n </CardContent>\n <CardBadge>\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.card-badge',\n defaultMessage: 'image',\n })}\n </CardBadge>\n </CardBody>\n </Card>\n );\n};\n\nImageCardAsset.propTypes = {\n asset: PropTypes.shape({\n name: PropTypes.string,\n url: PropTypes.string,\n width: PropTypes.number,\n height: PropTypes.number,\n ext: PropTypes.string,\n }).isRequired,\n};\n\nexport default ImageCardAsset;\n","import React from 'react';\n\nimport { Box, Button, Flex, ModalFooter, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport ImageCardAsset from './ImageCardAsset';\n\nconst PendingLogoDialog = ({ onClose, asset, prev, next, goTo, setLocalImage, onChangeLogo }) => {\n const { formatMessage } = useIntl();\n\n const handleGoBack = () => {\n setLocalImage(undefined);\n goTo(prev);\n };\n\n const handleUpload = () => {\n onChangeLogo(asset);\n goTo(next);\n };\n\n return (\n <>\n <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>\n <Flex justifyContent=\"space-between\" paddingBottom={6}>\n <Flex direction=\"column\" alignItems=\"flex-start\">\n <Typography variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.title',\n defaultMessage: 'Logo ready to upload',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral500\">\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.subtitle',\n defaultMessage: 'Manage the chosen logo before uploading it',\n })}\n </Typography>\n </Flex>\n <Button onClick={handleGoBack} variant=\"secondary\">\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.choose-another',\n defaultMessage: 'Choose another logo',\n })}\n </Button>\n </Flex>\n <Box maxWidth={pxToRem(180)}>{asset.url ? <ImageCardAsset asset={asset} /> : null}</Box>\n </Box>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'Settings.application.customization.modal.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endActions={\n <Button onClick={handleUpload}>\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.upload',\n defaultMessage: 'Upload logo',\n })}\n </Button>\n }\n />\n </>\n );\n};\n\nPendingLogoDialog.defaultProps = {\n next: null,\n prev: null,\n};\n\nPendingLogoDialog.propTypes = {\n goTo: PropTypes.func.isRequired,\n asset: PropTypes.shape({\n name: PropTypes.string,\n url: PropTypes.string,\n width: PropTypes.number,\n height: PropTypes.number,\n ext: PropTypes.string,\n }).isRequired,\n next: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n onChangeLogo: PropTypes.func.isRequired,\n prev: PropTypes.string,\n setLocalImage: PropTypes.func.isRequired,\n};\n\nexport default PendingLogoDialog;\n","import AddLogoDialog from '../LogoModalStepper/AddLogoDialog';\nimport PendingLogoDialog from '../LogoModalStepper/PendingLogoDialog';\n\nconst stepper = {\n upload: {\n Component: AddLogoDialog,\n modalTitle: {\n id: 'Settings.application.customization.modal.upload',\n defaultMessage: 'Upload logo',\n },\n next: 'pending',\n prev: null,\n },\n pending: {\n Component: PendingLogoDialog,\n modalTitle: {\n id: 'Settings.application.customization.modal.pending',\n defaultMessage: 'Pending logo',\n },\n next: null,\n prev: 'upload',\n },\n};\n\nexport default stepper;\n","import React, { useReducer } from 'react';\n\nimport {\n Box,\n CarouselActions,\n CarouselInput,\n CarouselSlide,\n IconButton,\n} from '@strapi/design-system';\nimport { Plus, Refresh } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport LogoModalStepper from '../LogoModalStepper';\n\nimport reducer, { initialState } from './reducer';\nimport stepper from './stepper';\n\nconst LogoInput = ({\n canUpdate,\n customLogo,\n defaultLogo,\n hint,\n label,\n onChangeLogo,\n onResetLogo,\n}) => {\n const [{ currentStep }, dispatch] = useReducer(reducer, initialState);\n const { Component, next, prev, modalTitle } = stepper[currentStep] || {};\n const { formatMessage } = useIntl();\n\n const goTo = (to) => {\n dispatch({\n type: 'GO_TO',\n to,\n });\n };\n\n return (\n <>\n <CarouselInput\n label={label}\n selectedSlide={0}\n hint={hint}\n // Carousel is used here for a single media,\n // we don't need previous and next labels but these props are required\n previousLabel=\"\"\n nextLabel=\"\"\n onNext={() => {}}\n onPrevious={() => {}}\n secondaryLabel={customLogo?.name || 'logo.png'}\n actions={\n <CarouselActions>\n <IconButton\n disabled={!canUpdate}\n onClick={() => goTo(customLogo ? 'pending' : 'upload')}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.change-action',\n defaultMessage: 'Change logo',\n })}\n icon={<Plus />}\n />\n {customLogo && (\n <IconButton\n disabled={!canUpdate}\n onClick={onResetLogo}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.reset-action',\n defaultMessage: 'Reset logo',\n })}\n icon={<Refresh />}\n />\n )}\n </CarouselActions>\n }\n >\n <CarouselSlide\n label={formatMessage({\n id: 'Settings.application.customization.carousel-slide.label',\n defaultMessage: 'Logo slide',\n })}\n >\n <Box\n maxHeight=\"40%\"\n maxWidth=\"40%\"\n as=\"img\"\n src={customLogo?.url || defaultLogo}\n alt={formatMessage({\n id: 'Settings.application.customization.carousel.title',\n defaultMessage: 'Logo',\n })}\n />\n </CarouselSlide>\n </CarouselInput>\n <LogoModalStepper\n Component={Component}\n currentStep={currentStep}\n onChangeLogo={onChangeLogo}\n customLogo={customLogo}\n goTo={goTo}\n next={next}\n prev={prev}\n modalTitle={modalTitle}\n />\n </>\n );\n};\n\nLogoInput.defaultProps = {\n canUpdate: false,\n customLogo: null,\n hint: null,\n};\n\nLogoInput.propTypes = {\n canUpdate: PropTypes.bool,\n customLogo: PropTypes.shape({\n url: PropTypes.string,\n name: PropTypes.string,\n }),\n label: PropTypes.string.isRequired,\n hint: PropTypes.string,\n defaultLogo: PropTypes.string.isRequired,\n onChangeLogo: PropTypes.func.isRequired,\n onResetLogo: PropTypes.func.isRequired,\n};\n\nexport default LogoInput;\n","import merge from 'lodash/merge';\n\nconst init = (initialState, projectSettingsStored) => {\n const copyInitialState = merge(initialState, {\n menuLogo: {\n display: projectSettingsStored.menuLogo,\n },\n authLogo: {\n display: projectSettingsStored.authLogo,\n },\n });\n\n return copyInitialState;\n};\n\nexport default init;\n","/* eslint-disable consistent-return */\n/*\n *\n * ApplicationInfosPage Form reducer\n *\n */\n\nimport produce from 'immer';\n\nconst initialState = {\n menuLogo: {\n display: null,\n submit: {\n rawFile: null,\n isReset: false,\n },\n },\n authLogo: {\n display: null,\n submit: {\n rawFile: null,\n isReset: false,\n },\n },\n};\n\nconst reducer = (state = initialState, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'SET_CUSTOM_MENU_LOGO': {\n draftState.menuLogo.display = action.value;\n draftState.menuLogo.submit.rawFile = action.value.rawFile;\n break;\n }\n case 'SET_CUSTOM_AUTH_LOGO': {\n draftState.authLogo.display = action.value;\n draftState.authLogo.submit.rawFile = action.value.rawFile;\n break;\n }\n case 'RESET_CUSTOM_MENU_LOGO': {\n draftState.menuLogo.display = null;\n draftState.menuLogo.submit = {\n rawFile: null,\n isReset: true,\n };\n break;\n }\n case 'RESET_CUSTOM_AUTH_LOGO': {\n draftState.authLogo.display = null;\n draftState.authLogo.submit = {\n rawFile: null,\n isReset: true,\n };\n break;\n }\n default: {\n return draftState;\n }\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import React, { forwardRef, useImperativeHandle, useReducer } from 'react';\n\nimport { Box, Grid, GridItem, Typography } from '@strapi/design-system';\nimport { useTracking } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useConfiguration } from '../../../../../../contexts/configuration';\nimport { DIMENSION, SIZE } from '../../utils/constants';\nimport LogoInput from '../LogoInput';\n\nimport init from './init';\nimport reducer, { initialState } from './reducer';\n\nconst CustomizationInfos = forwardRef(({ canUpdate, projectSettingsStored }, ref) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const {\n logos: { menu, auth },\n } = useConfiguration();\n const [{ menuLogo, authLogo }, dispatch] = useReducer(reducer, initialState, () =>\n init(initialState, projectSettingsStored)\n );\n\n const handleChangeMenuLogo = (asset) => {\n dispatch({\n type: 'SET_CUSTOM_MENU_LOGO',\n value: asset,\n });\n };\n\n const handleResetMenuLogo = () => {\n trackUsage('didClickResetLogo', {\n logo: 'menu',\n });\n\n dispatch({\n type: 'RESET_CUSTOM_MENU_LOGO',\n });\n };\n\n const handleChangeAuthLogo = (asset) => {\n dispatch({\n type: 'SET_CUSTOM_AUTH_LOGO',\n value: asset,\n });\n };\n\n const handleResetAuthLogo = () => {\n trackUsage('didClickResetLogo', {\n logo: 'auth',\n });\n\n dispatch({\n type: 'RESET_CUSTOM_AUTH_LOGO',\n });\n };\n\n useImperativeHandle(ref, () => ({\n getValues: () => ({ menuLogo: menuLogo.submit, authLogo: authLogo.submit }),\n }));\n\n return (\n <Box\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'Settings.application.customization',\n defaultMessage: 'Customization',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.application.customization.size-details',\n defaultMessage: 'Max dimension: {dimension}×{dimension}, Max file size: {size}KB',\n },\n { dimension: DIMENSION, size: SIZE }\n )}\n </Typography>\n <Grid paddingTop={4} gap={4}>\n <GridItem col={6} s={12}>\n <LogoInput\n canUpdate={canUpdate}\n customLogo={menuLogo.display}\n defaultLogo={menu.default}\n hint={formatMessage({\n id: 'Settings.application.customization.menu-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the main navigation',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.menu-logo.title',\n defaultMessage: 'Menu logo',\n })}\n onChangeLogo={handleChangeMenuLogo}\n onResetLogo={handleResetMenuLogo}\n />\n </GridItem>\n <GridItem col={6} s={12}>\n <LogoInput\n canUpdate={canUpdate}\n customLogo={authLogo.display}\n defaultLogo={auth.default}\n hint={formatMessage({\n id: 'Settings.application.customization.auth-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the authentication pages',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.auth-logo.title',\n defaultMessage: 'Auth logo',\n })}\n onChangeLogo={handleChangeAuthLogo}\n onResetLogo={handleResetAuthLogo}\n />\n </GridItem>\n </Grid>\n </Box>\n );\n});\n\nCustomizationInfos.defaultProps = {\n canUpdate: false,\n projectSettingsStored: null,\n};\n\nCustomizationInfos.propTypes = {\n canUpdate: PropTypes.bool,\n projectSettingsStored: PropTypes.shape({\n menuLogo: PropTypes.shape({\n url: PropTypes.string,\n name: PropTypes.string,\n }),\n }),\n};\n\nexport default CustomizationInfos;\n","const getFormData = (data) => {\n const formData = new FormData();\n\n Object.entries(data).forEach(([key, value]) => {\n if (value && value.rawFile instanceof File) {\n formData.append(key, value.rawFile);\n }\n\n if (value && value.isReset) {\n formData.append(key, null);\n }\n });\n\n return formData;\n};\n\nexport default getFormData;\n","import * as React from 'react';\n\nimport {\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Layout,\n Link,\n Loader,\n Main,\n Typography,\n} from '@strapi/design-system';\nimport {\n prefixFileUrlWithBackendUrl,\n SettingsPageTitle,\n useAPIErrorHandler,\n useAppInfo,\n useFetchClient,\n useFocusWhenNavigate,\n useNotification,\n useRBAC,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Check, ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\nimport { useSelector } from 'react-redux';\n\nimport { useConfiguration } from '../../../../contexts/configuration';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport CustomizationInfos from './components/CustomizationInfos';\nimport getFormData from './utils/getFormData';\n\nconst AdminSeatInfoCE = () => null;\n\nconst ApplicationInfosPage = () => {\n const inputsRef = React.useRef();\n const toggleNotification = useNotification();\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { get, post } = useFetchClient();\n const { updateProjectSettings } = useConfiguration();\n const permissions = useSelector(selectAdminPermissions);\n const { formatAPIError } = useAPIErrorHandler();\n\n const {\n communityEdition,\n latestStrapiReleaseTag,\n nodeVersion,\n shouldUpdateStrapi,\n strapiVersion,\n } = useAppInfo();\n\n const AdminSeatInfo = useEnterprise(\n AdminSeatInfoCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo'\n )\n ).AdminSeatInfoEE\n );\n\n const {\n allowedActions: { canRead, canUpdate },\n } = useRBAC(permissions.settings['project-settings']);\n\n useFocusWhenNavigate();\n\n const { data, isLoading } = useQuery(\n ['project-settings'],\n async () => {\n const { data } = await get('/admin/project-settings');\n\n return data;\n },\n {\n cacheTime: 0,\n enabled: canRead,\n select(data) {\n return {\n ...data,\n\n authLogo: data.authLogo\n ? {\n ...data.authLogo,\n url: prefixFileUrlWithBackendUrl(data.authLogo.url),\n }\n : data.authLogo,\n\n menuLogo: data.menuLogo\n ? {\n ...data.menuLogo,\n url: prefixFileUrlWithBackendUrl(data.menuLogo.url),\n }\n : data.menuLogo,\n };\n },\n }\n );\n\n const submitMutation = useMutation(\n (body) =>\n post('/admin/project-settings', body, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n }),\n {\n onError(error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n },\n\n async onSuccess(data) {\n const { menuLogo, authLogo } = data;\n\n updateProjectSettings({ menuLogo: menuLogo?.url, authLogo: authLogo?.url });\n\n if (menuLogo?.rawFile) {\n trackUsage('didChangeLogo', {\n logo: 'menu',\n });\n }\n\n if (authLogo?.rawFile) {\n trackUsage('didChangeLogo', {\n logo: 'auth',\n });\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'app', defaultMessage: 'Saved' }),\n });\n },\n }\n );\n\n const handleSubmit = (e) => {\n e.preventDefault();\n\n submitMutation.mutate(getFormData(inputsRef.current.getValues()));\n };\n\n // block rendering until the EE component is fully loaded\n if (!AdminSeatInfo) {\n return null;\n }\n\n return (\n <Layout>\n {/* TODO: Add missing translation */}\n <SettingsPageTitle name=\"Application\" />\n <Main>\n {isLoading ? (\n <Loader>\n {formatMessage({\n id: 'Settings.application.isLoading',\n defaultMessage: 'Loading',\n })}\n </Loader>\n ) : (\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n title={formatMessage({\n id: 'Settings.application.title',\n defaultMessage: 'Overview',\n })}\n subtitle={formatMessage({\n id: 'Settings.application.description',\n defaultMessage: 'Administration panel’s global information',\n })}\n primaryAction={\n canUpdate && (\n <Button type=\"submit\" startIcon={<Check />}>\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n )\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n\n <Grid gap={5} as=\"dl\">\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" as=\"dt\">\n {formatMessage({\n id: 'Settings.application.strapiVersion',\n defaultMessage: 'strapi version',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" as=\"dd\">\n <Typography>v{strapiVersion}</Typography>\n {shouldUpdateStrapi && (\n <Link\n href={`https://github.com/strapi/strapi/releases/tag/${latestStrapiReleaseTag}`}\n isExternal\n endIcon={<ExternalLink />}\n >\n {formatMessage({\n id: 'Settings.application.link-upgrade',\n defaultMessage: 'Upgrade your admin panel',\n })}\n </Link>\n )}\n </Flex>\n </GridItem>\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" as=\"dt\">\n {formatMessage({\n id: 'Settings.application.edition-title',\n defaultMessage: 'current plan',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" as=\"dd\">\n <Typography>\n {formatMessage(\n {\n id: 'Settings.application.ee-or-ce',\n defaultMessage:\n '{communityEdition, select, true {Community Edition} other {Enterprise Edition}}',\n },\n { communityEdition }\n )}\n </Typography>\n <Link\n href=\"https://strapi.io/pricing-self-hosted\"\n isExternal\n endIcon={<ExternalLink />}\n >\n {formatMessage({\n id: 'Settings.application.link-pricing',\n defaultMessage: 'See all pricing plans',\n })}\n </Link>\n </Flex>\n </GridItem>\n\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" as=\"dt\">\n {formatMessage({\n id: 'Settings.application.node-version',\n defaultMessage: 'node version',\n })}\n </Typography>\n <Typography as=\"dd\">{nodeVersion}</Typography>\n </GridItem>\n <AdminSeatInfo />\n </Grid>\n </Flex>\n {canRead && data && (\n <CustomizationInfos\n canUpdate={canUpdate}\n ref={inputsRef}\n projectSettingsStored={data}\n />\n )}\n </Flex>\n </ContentLayout>\n </form>\n )}\n </Main>\n </Layout>\n );\n};\n\nexport default ApplicationInfosPage;\n","import { MenuItem } from '@strapi/helper-plugin';\n\ninterface UniqueRouteProps\n extends Pick<MenuItem, 'to' | 'exact'>,\n Required<Pick<MenuItem, 'Component'>> {\n key: string;\n}\n\nexport function makeUniqueRoutes(routes: UniqueRouteProps[]) {\n return routes.filter(\n (route, index, refArray) => refArray.findIndex((obj) => obj.key === route.key) === index\n );\n}\n","import * as React from 'react';\n\nimport { Layout } from '@strapi/design-system';\nimport { LoadingIndicatorPage, useStrapiApp } from '@strapi/helper-plugin';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { Redirect, Route, Switch, useParams } from 'react-router-dom';\n\nimport { useEnterprise } from '../../hooks/useEnterprise';\nimport { useSettingsMenu } from '../../hooks/useSettingsMenu';\nimport { createRoute } from '../../utils/createRoute';\n\nimport SettingsNav from './components/SettingsNav';\nimport { ROUTES_CE } from './constants';\nimport ApplicationInfosPage from './pages/ApplicationInfosPage';\n// TODO: inline utility once the file is converted to TypeScript\nimport { makeUniqueRoutes } from './utils/makeUniqueRoutes';\n\nexport function SettingsPage() {\n const { settingId } = useParams();\n const { settings } = useStrapiApp();\n const { formatMessage } = useIntl();\n const { isLoading, menu } = useSettingsMenu();\n const routes = useEnterprise(\n ROUTES_CE,\n async () => (await import('../../../../ee/admin/src/pages/SettingsPage/constants')).ROUTES_EE,\n {\n combine(ceRoutes, eeRoutes) {\n return [...ceRoutes, ...eeRoutes];\n },\n defaultValue: [],\n }\n );\n\n // Creates the admin routes\n const adminRoutes = React.useMemo(() => {\n return makeUniqueRoutes(\n routes.map(({ to, Component, exact }) => createRoute(Component, to, exact))\n );\n }, [routes]);\n\n const pluginsRoutes = Object.values(settings).flatMap((section) => {\n const { links } = section;\n\n return links.map((link) => createRoute(link.Component, link.to, link.exact || false));\n });\n\n // Since the useSettingsMenu hook can make API calls in order to check the links permissions\n // We need to add a loading state to prevent redirecting the user while permissions are being checked\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n if (!settingId) {\n return <Redirect to=\"/settings/application-infos\" />;\n }\n\n return (\n <Layout sideNav={<SettingsNav menu={menu} />}>\n <Helmet\n title={formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n />\n\n <Switch>\n <Route path=\"/settings/application-infos\" component={ApplicationInfosPage} exact />\n {adminRoutes}\n {pluginsRoutes}\n </Switch>\n </Layout>\n );\n}\n"],"names":["React","useRBACProvider","useAppInfo","useStrapiApp","useSelector","selectAdminPermissions","SETTINGS_LINKS_CE","useEnterprise","ceLinks","sections","hasPermissions","permission","sortBy","styled","Icon","useIntl","useTracking","useLocation","jsxs","SubNav","jsx","SubNavHeader","SubNavSections","SubNavSection","SubNavLink","NavLink","Lock","PropTypes","initialState","reducer","produce","useReducer","ModalLayout","ModalHeader","Typography","FieldInput","useState","useRef","Fragment","Box","Field","Flex","PicturePlus","Button","FieldError","ModalFooter","getFetchClient","TextInput","TabGroup","Tabs","Tab","Divider","TabPanels","TabPanel","Card","CardHeader","CardAsset","CardBody","CardContent","CardTitle","CardSubtitle","CardBadge","pxToRem","CarouselInput","CarouselActions","IconButton","Plus","Refresh","CarouselSlide","merge","forwardRef","useConfiguration","useImperativeHandle","Grid","GridItem","useNotification","useFetchClient","useAPIErrorHandler","useRBAC","useFocusWhenNavigate","useQuery","data","prefixFileUrlWithBackendUrl","useMutation","Layout","SettingsPageTitle","Main","Loader","HeaderLayout","Check","ContentLayout","Link","ExternalLink","index","useParams","createRoute","LoadingIndicatorPage","Redirect","Helmet","Switch","Route"],"mappings":"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"}