@strapi/admin 5.49.0 → 5.50.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 (369) hide show
  1. package/dist/admin/admin/src/components/ErrorElement.js +97 -2
  2. package/dist/admin/admin/src/components/ErrorElement.js.map +1 -1
  3. package/dist/admin/admin/src/components/ErrorElement.mjs +99 -4
  4. package/dist/admin/admin/src/components/ErrorElement.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/FormInputs/Boolean.js +3 -2
  6. package/dist/admin/admin/src/components/FormInputs/Boolean.js.map +1 -1
  7. package/dist/admin/admin/src/components/FormInputs/Boolean.mjs +3 -2
  8. package/dist/admin/admin/src/components/FormInputs/Boolean.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/LazyOutlet.js +57 -0
  10. package/dist/admin/admin/src/components/LazyOutlet.js.map +1 -0
  11. package/dist/admin/admin/src/components/LazyOutlet.mjs +35 -0
  12. package/dist/admin/admin/src/components/LazyOutlet.mjs.map +1 -0
  13. package/dist/admin/admin/src/components/MainNav/NavUser.js +10 -0
  14. package/dist/admin/admin/src/components/MainNav/NavUser.js.map +1 -1
  15. package/dist/admin/admin/src/components/MainNav/NavUser.mjs +10 -0
  16. package/dist/admin/admin/src/components/MainNav/NavUser.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/RelativeTime.js +3 -2
  18. package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
  19. package/dist/admin/admin/src/components/RelativeTime.mjs +3 -2
  20. package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
  21. package/dist/admin/admin/src/core/apis/router.js +19 -17
  22. package/dist/admin/admin/src/core/apis/router.js.map +1 -1
  23. package/dist/admin/admin/src/core/apis/router.mjs +19 -17
  24. package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
  25. package/dist/admin/admin/src/hooks/useQueryParams.js +0 -1
  26. package/dist/admin/admin/src/hooks/useQueryParams.js.map +1 -1
  27. package/dist/admin/admin/src/hooks/useQueryParams.mjs +0 -1
  28. package/dist/admin/admin/src/hooks/useQueryParams.mjs.map +1 -1
  29. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +4 -2
  30. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  31. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +4 -2
  32. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
  33. package/dist/admin/admin/src/pages/Auth/AuthPage.js +3 -2
  34. package/dist/admin/admin/src/pages/Auth/AuthPage.js.map +1 -1
  35. package/dist/admin/admin/src/pages/Auth/AuthPage.mjs +3 -2
  36. package/dist/admin/admin/src/pages/Auth/AuthPage.mjs.map +1 -1
  37. package/dist/admin/admin/src/pages/SessionsPage.js +318 -0
  38. package/dist/admin/admin/src/pages/SessionsPage.js.map +1 -0
  39. package/dist/admin/admin/src/pages/SessionsPage.mjs +296 -0
  40. package/dist/admin/admin/src/pages/SessionsPage.mjs.map +1 -0
  41. package/dist/admin/admin/src/pages/Settings/Layout.js +4 -1
  42. package/dist/admin/admin/src/pages/Settings/Layout.js.map +1 -1
  43. package/dist/admin/admin/src/pages/Settings/Layout.mjs +5 -2
  44. package/dist/admin/admin/src/pages/Settings/Layout.mjs.map +1 -1
  45. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +1 -0
  46. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  47. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +1 -0
  48. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  49. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +7 -0
  50. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
  51. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs +7 -0
  52. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs.map +1 -1
  53. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +7 -1
  54. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
  55. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs +7 -1
  56. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs.map +1 -1
  57. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +34 -0
  58. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
  59. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs +34 -0
  60. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs.map +1 -1
  61. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +38 -2
  62. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
  63. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +38 -2
  64. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
  65. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js +18 -1
  66. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js.map +1 -1
  67. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.mjs +18 -1
  68. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.mjs.map +1 -1
  69. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/localePermissionValidation.js +59 -0
  70. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/localePermissionValidation.js.map +1 -0
  71. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/localePermissionValidation.mjs +52 -0
  72. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/localePermissionValidation.mjs.map +1 -0
  73. package/dist/admin/admin/src/router.js +9 -0
  74. package/dist/admin/admin/src/router.js.map +1 -1
  75. package/dist/admin/admin/src/router.mjs +9 -0
  76. package/dist/admin/admin/src/router.mjs.map +1 -1
  77. package/dist/admin/admin/src/services/auth.js +43 -2
  78. package/dist/admin/admin/src/services/auth.js.map +1 -1
  79. package/dist/admin/admin/src/services/auth.mjs +41 -3
  80. package/dist/admin/admin/src/services/auth.mjs.map +1 -1
  81. package/dist/admin/admin/src/translations/en.json.js +22 -0
  82. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  83. package/dist/admin/admin/src/translations/en.json.mjs +22 -0
  84. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  85. package/dist/admin/admin/src/translations/ja.json.js +748 -265
  86. package/dist/admin/admin/src/translations/ja.json.js.map +1 -1
  87. package/dist/admin/admin/src/translations/ja.json.mjs +745 -266
  88. package/dist/admin/admin/src/translations/ja.json.mjs.map +1 -1
  89. package/dist/admin/admin/src/translations/languageNativeNames.js +1 -0
  90. package/dist/admin/admin/src/translations/languageNativeNames.js.map +1 -1
  91. package/dist/admin/admin/src/translations/languageNativeNames.mjs +1 -0
  92. package/dist/admin/admin/src/translations/languageNativeNames.mjs.map +1 -1
  93. package/dist/admin/admin/src/utils/retryDynamicImport.js +85 -0
  94. package/dist/admin/admin/src/utils/retryDynamicImport.js.map +1 -0
  95. package/dist/admin/admin/src/utils/retryDynamicImport.mjs +80 -0
  96. package/dist/admin/admin/src/utils/retryDynamicImport.mjs.map +1 -0
  97. package/dist/admin/admin/tests/server.js +25 -0
  98. package/dist/admin/admin/tests/server.js.map +1 -1
  99. package/dist/admin/admin/tests/server.mjs +25 -0
  100. package/dist/admin/admin/tests/server.mjs.map +1 -1
  101. package/dist/admin/index.js +2 -0
  102. package/dist/admin/index.js.map +1 -1
  103. package/dist/admin/index.mjs +1 -0
  104. package/dist/admin/index.mjs.map +1 -1
  105. package/dist/admin/src/StrapiApp.d.ts +5 -5
  106. package/dist/admin/src/components/FormInputs/Boolean.d.ts +0 -1
  107. package/dist/admin/src/components/FormInputs/Checkbox.d.ts +0 -1
  108. package/dist/admin/src/components/FormInputs/DateTime.d.ts +0 -1
  109. package/dist/admin/src/components/FormInputs/Email.d.ts +0 -1
  110. package/dist/admin/src/components/FormInputs/Enumeration.d.ts +0 -1
  111. package/dist/admin/src/components/FormInputs/Number.d.ts +0 -1
  112. package/dist/admin/src/components/FormInputs/Password.d.ts +0 -1
  113. package/dist/admin/src/components/FormInputs/Renderer.d.ts +0 -1
  114. package/dist/admin/src/components/FormInputs/String.d.ts +0 -1
  115. package/dist/admin/src/components/FormInputs/Textarea.d.ts +0 -1
  116. package/dist/admin/src/components/FormInputs/Time.d.ts +0 -1
  117. package/dist/admin/src/components/GuidedTour/GuidedTourProvider.d.ts +0 -1
  118. package/dist/admin/src/components/LazyOutlet.d.ts +20 -0
  119. package/dist/admin/src/components/MainNav/MainNav.d.ts +1 -1
  120. package/dist/admin/src/components/MainNav/NavUser.d.ts +0 -1
  121. package/dist/admin/src/components/SubNav.d.ts +5 -6
  122. package/dist/admin/src/core/apis/Plugin.d.ts +1 -1
  123. package/dist/admin/src/core/apis/Widgets.d.ts +0 -1
  124. package/dist/admin/src/core/apis/router.d.ts +1 -1
  125. package/dist/admin/src/core/store/configure.d.ts +2 -2
  126. package/dist/admin/src/core/utils/createHook.d.ts +4 -4
  127. package/dist/admin/src/features/AppInfo.d.ts +1 -2
  128. package/dist/admin/src/features/StrapiApp.d.ts +1 -2
  129. package/dist/admin/src/hooks/useAPIErrorHandler.d.ts +1 -1
  130. package/dist/admin/src/hooks/useAdminRoles.d.ts +2 -2
  131. package/dist/admin/src/hooks/useFetchClient.d.ts +1 -1
  132. package/dist/admin/src/hooks/usePersistentState.d.ts +0 -1
  133. package/dist/admin/src/hooks/useQueryParams.d.ts +1 -1
  134. package/dist/admin/src/hooks/useThrottledCallback.d.ts +0 -1
  135. package/dist/admin/src/index.d.ts +1 -0
  136. package/dist/admin/src/layouts/UnauthenticatedLayout.d.ts +2 -2
  137. package/dist/admin/src/pages/SessionsPage.d.ts +2 -0
  138. package/dist/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.d.ts +2 -3
  139. package/dist/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.d.ts +2 -2
  140. package/dist/admin/src/pages/Settings/pages/Roles/components/HiddenAction.d.ts +0 -1
  141. package/dist/admin/src/pages/Settings/pages/Roles/components/Permissions.d.ts +2 -0
  142. package/dist/admin/src/pages/Settings/pages/Roles/utils/forms.d.ts +1 -1
  143. package/dist/admin/src/pages/Settings/pages/Roles/utils/localePermissionValidation.d.ts +5 -0
  144. package/dist/admin/src/pages/Settings/pages/Roles/utils/permissions.d.ts +3 -1
  145. package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +8 -8
  146. package/dist/admin/src/reducer.d.ts +1 -1
  147. package/dist/admin/src/services/admin.d.ts +2 -2
  148. package/dist/admin/src/services/api.d.ts +1 -1
  149. package/dist/admin/src/services/apiTokens.d.ts +1 -1
  150. package/dist/admin/src/services/auth.d.ts +29 -27
  151. package/dist/admin/src/services/contentApi.d.ts +1 -1
  152. package/dist/admin/src/services/users.d.ts +7 -7
  153. package/dist/admin/src/services/webhooks.d.ts +2 -2
  154. package/dist/admin/src/translations/languageNativeNames.d.ts +1 -0
  155. package/dist/admin/src/utils/locales.d.ts +0 -1
  156. package/dist/admin/src/utils/retryDynamicImport.d.ts +19 -0
  157. package/dist/admin/src/utils/shims.d.ts +1 -1
  158. package/dist/admin/tests/store.d.ts +4 -4
  159. package/dist/admin/tests/utils.d.ts +5 -5
  160. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.d.ts +1 -1
  161. package/dist/ee/admin/src/services/ai.d.ts +2 -2
  162. package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts +1 -1
  163. package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts.map +1 -1
  164. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +3 -3
  165. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
  166. package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts +2 -2
  167. package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts.map +1 -1
  168. package/dist/ee/server/src/bootstrap.d.ts.map +1 -1
  169. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts +30 -31
  170. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts.map +1 -1
  171. package/dist/ee/server/src/controllers/index.d.ts +1 -2
  172. package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
  173. package/dist/ee/server/src/controllers/user.d.ts +1 -1
  174. package/dist/ee/server/src/destroy.d.ts.map +1 -1
  175. package/dist/ee/server/src/index.d.ts +2 -3
  176. package/dist/ee/server/src/index.d.ts.map +1 -1
  177. package/dist/ee/server/src/register.d.ts.map +1 -1
  178. package/dist/ee/server/src/routes/utils.d.ts.map +1 -1
  179. package/dist/ee/server/src/services/auth.d.ts.map +1 -1
  180. package/dist/ee/server/src/services/index.d.ts +1 -1
  181. package/dist/ee/server/src/services/metrics.d.ts.map +1 -1
  182. package/dist/ee/server/src/services/passport/sso.d.ts.map +1 -1
  183. package/dist/ee/server/src/services/persist-tables.d.ts +1 -1
  184. package/dist/ee/server/src/services/persist-tables.d.ts.map +1 -1
  185. package/dist/ee/server/src/services/role.d.ts.map +1 -1
  186. package/dist/ee/server/src/services/user.d.ts.map +1 -1
  187. package/dist/ee/server/src/utils/index.d.ts.map +1 -1
  188. package/dist/ee/server/src/utils/sso-lock.d.ts.map +1 -1
  189. package/dist/ee/server/src/validation/authentication.d.ts +2 -2
  190. package/dist/ee/server/src/validation/role.d.ts +6 -6
  191. package/dist/ee/server/src/validation/role.d.ts.map +1 -1
  192. package/dist/ee/server/src/validation/user.d.ts.map +1 -1
  193. package/dist/server/server/src/content-types/session.js +6 -0
  194. package/dist/server/server/src/content-types/session.js.map +1 -1
  195. package/dist/server/server/src/content-types/session.mjs +6 -0
  196. package/dist/server/server/src/content-types/session.mjs.map +1 -1
  197. package/dist/server/server/src/controllers/admin.js.map +1 -1
  198. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  199. package/dist/server/server/src/controllers/authenticated-session.js +61 -0
  200. package/dist/server/server/src/controllers/authenticated-session.js.map +1 -0
  201. package/dist/server/server/src/controllers/authenticated-session.mjs +59 -0
  202. package/dist/server/server/src/controllers/authenticated-session.mjs.map +1 -0
  203. package/dist/server/server/src/controllers/authentication.js +11 -4
  204. package/dist/server/server/src/controllers/authentication.js.map +1 -1
  205. package/dist/server/server/src/controllers/authentication.mjs +12 -5
  206. package/dist/server/server/src/controllers/authentication.mjs.map +1 -1
  207. package/dist/server/server/src/controllers/index.js +2 -0
  208. package/dist/server/server/src/controllers/index.js.map +1 -1
  209. package/dist/server/server/src/controllers/index.mjs +2 -0
  210. package/dist/server/server/src/controllers/index.mjs.map +1 -1
  211. package/dist/server/server/src/controllers/role.js +2 -4
  212. package/dist/server/server/src/controllers/role.js.map +1 -1
  213. package/dist/server/server/src/controllers/role.mjs +2 -4
  214. package/dist/server/server/src/controllers/role.mjs.map +1 -1
  215. package/dist/server/server/src/routes/serve-admin-panel.js +1 -1
  216. package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
  217. package/dist/server/server/src/routes/serve-admin-panel.mjs +1 -1
  218. package/dist/server/server/src/routes/serve-admin-panel.mjs.map +1 -1
  219. package/dist/server/server/src/routes/users.js +12 -26
  220. package/dist/server/server/src/routes/users.js.map +1 -1
  221. package/dist/server/server/src/routes/users.mjs +12 -26
  222. package/dist/server/server/src/routes/users.mjs.map +1 -1
  223. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js +0 -2
  224. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js.map +1 -1
  225. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs +0 -2
  226. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs.map +1 -1
  227. package/dist/server/server/src/services/role.js +2 -1
  228. package/dist/server/server/src/services/role.js.map +1 -1
  229. package/dist/server/server/src/services/role.mjs +2 -1
  230. package/dist/server/server/src/services/role.mjs.map +1 -1
  231. package/dist/server/server/src/strategies/admin.js +4 -0
  232. package/dist/server/server/src/strategies/admin.js.map +1 -1
  233. package/dist/server/server/src/strategies/admin.mjs +4 -0
  234. package/dist/server/server/src/strategies/admin.mjs.map +1 -1
  235. package/dist/server/src/ai/controllers/ai.d.ts +3 -3
  236. package/dist/server/src/ai/services/ai.d.ts.map +1 -1
  237. package/dist/server/src/bootstrap.d.ts.map +1 -1
  238. package/dist/server/src/config/admin-conditions.d.ts +2 -2
  239. package/dist/server/src/config/admin-conditions.d.ts.map +1 -1
  240. package/dist/server/src/content-types/index.d.ts +6 -0
  241. package/dist/server/src/content-types/index.d.ts.map +1 -1
  242. package/dist/server/src/content-types/session.d.ts +6 -0
  243. package/dist/server/src/content-types/session.d.ts.map +1 -1
  244. package/dist/server/src/controllers/admin-token.d.ts +5 -5
  245. package/dist/server/src/controllers/api-token.d.ts +1 -1
  246. package/dist/server/src/controllers/authenticated-session.d.ts +8 -0
  247. package/dist/server/src/controllers/authenticated-session.d.ts.map +1 -0
  248. package/dist/server/src/controllers/authenticated-user.d.ts +1 -1
  249. package/dist/server/src/controllers/authentication.d.ts +4 -4
  250. package/dist/server/src/controllers/authentication.d.ts.map +1 -1
  251. package/dist/server/src/controllers/formatters/conditions.d.ts +0 -1
  252. package/dist/server/src/controllers/formatters/conditions.d.ts.map +1 -1
  253. package/dist/server/src/controllers/formatters/format-actions-by-sections.d.ts.map +1 -1
  254. package/dist/server/src/controllers/homepage.d.ts +2 -2
  255. package/dist/server/src/controllers/homepage.d.ts.map +1 -1
  256. package/dist/server/src/controllers/index.d.ts +33 -43
  257. package/dist/server/src/controllers/index.d.ts.map +1 -1
  258. package/dist/server/src/controllers/role.d.ts +4 -4
  259. package/dist/server/src/controllers/transfer/runner.d.ts +4 -4
  260. package/dist/server/src/controllers/transfer/runner.d.ts.map +1 -1
  261. package/dist/server/src/controllers/transfer/token.d.ts +1 -1
  262. package/dist/server/src/controllers/user.d.ts +2 -2
  263. package/dist/server/src/controllers/webhooks.d.ts +4 -4
  264. package/dist/server/src/domain/action/index.d.ts +4 -65
  265. package/dist/server/src/domain/action/index.d.ts.map +1 -1
  266. package/dist/server/src/domain/action/provider.d.ts +30 -3
  267. package/dist/server/src/domain/action/provider.d.ts.map +1 -1
  268. package/dist/server/src/domain/condition/index.d.ts.map +1 -1
  269. package/dist/server/src/domain/condition/provider.d.ts +19 -2
  270. package/dist/server/src/domain/condition/provider.d.ts.map +1 -1
  271. package/dist/server/src/domain/permission/index.d.ts +0 -1
  272. package/dist/server/src/domain/permission/index.d.ts.map +1 -1
  273. package/dist/server/src/domain/user.d.ts.map +1 -1
  274. package/dist/server/src/index.d.ts +51 -63
  275. package/dist/server/src/index.d.ts.map +1 -1
  276. package/dist/server/src/middlewares/data-transfer.d.ts.map +1 -1
  277. package/dist/server/src/middlewares/index.d.ts +0 -1
  278. package/dist/server/src/middlewares/index.d.ts.map +1 -1
  279. package/dist/server/src/middlewares/rateLimit.d.ts.map +1 -1
  280. package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
  281. package/dist/server/src/policies/index.d.ts.map +1 -1
  282. package/dist/server/src/policies/isAuthenticatedAdmin.d.ts.map +1 -1
  283. package/dist/server/src/policies/isTelemetryEnabled.d.ts.map +1 -1
  284. package/dist/server/src/register.d.ts.map +1 -1
  285. package/dist/server/src/routes/index.d.ts +0 -1
  286. package/dist/server/src/routes/index.d.ts.map +1 -1
  287. package/dist/server/src/routes/serve-admin-panel.d.ts.map +1 -1
  288. package/dist/server/src/routes/transfer.d.ts +0 -1
  289. package/dist/server/src/routes/transfer.d.ts.map +1 -1
  290. package/dist/server/src/routes/users.d.ts.map +1 -1
  291. package/dist/server/src/services/action.d.ts.map +1 -1
  292. package/dist/server/src/services/api-token.d.ts +5 -6
  293. package/dist/server/src/services/api-token.d.ts.map +1 -1
  294. package/dist/server/src/services/auth.d.ts.map +1 -1
  295. package/dist/server/src/services/condition.d.ts.map +1 -1
  296. package/dist/server/src/services/content-type.d.ts.map +1 -1
  297. package/dist/server/src/services/encryption.d.ts.map +1 -1
  298. package/dist/server/src/services/homepage.d.ts.map +1 -1
  299. package/dist/server/src/services/index.d.ts +12 -21
  300. package/dist/server/src/services/index.d.ts.map +1 -1
  301. package/dist/server/src/services/metrics.d.ts.map +1 -1
  302. package/dist/server/src/services/passport/local-strategy.d.ts.map +1 -1
  303. package/dist/server/src/services/passport.d.ts +0 -1
  304. package/dist/server/src/services/passport.d.ts.map +1 -1
  305. package/dist/server/src/services/permission/engine.d.ts +1 -2
  306. package/dist/server/src/services/permission/engine.d.ts.map +1 -1
  307. package/dist/server/src/services/permission/permissions-manager/index.d.ts +5 -5
  308. package/dist/server/src/services/permission/permissions-manager/index.d.ts.map +1 -1
  309. package/dist/server/src/services/permission/permissions-manager/permission-fields.d.ts.map +1 -1
  310. package/dist/server/src/services/permission/permissions-manager/query-builders.d.ts.map +1 -1
  311. package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts +3 -3
  312. package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
  313. package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
  314. package/dist/server/src/services/permission/queries.d.ts.map +1 -1
  315. package/dist/server/src/services/permission/sections-builder/builder.d.ts +4 -4
  316. package/dist/server/src/services/permission/sections-builder/builder.d.ts.map +1 -1
  317. package/dist/server/src/services/permission/sections-builder/handlers.d.ts.map +1 -1
  318. package/dist/server/src/services/permission/sections-builder/index.d.ts +4 -4
  319. package/dist/server/src/services/permission/sections-builder/section.d.ts.map +1 -1
  320. package/dist/server/src/services/permission/sections-builder/utils.d.ts +0 -1
  321. package/dist/server/src/services/permission/sections-builder/utils.d.ts.map +1 -1
  322. package/dist/server/src/services/permission.d.ts +13 -38
  323. package/dist/server/src/services/permission.d.ts.map +1 -1
  324. package/dist/server/src/services/project-settings.d.ts +2 -4
  325. package/dist/server/src/services/project-settings.d.ts.map +1 -1
  326. package/dist/server/src/services/role.d.ts +7 -1
  327. package/dist/server/src/services/role.d.ts.map +1 -1
  328. package/dist/server/src/services/token.d.ts +1 -1
  329. package/dist/server/src/services/token.d.ts.map +1 -1
  330. package/dist/server/src/services/transfer/token.d.ts +11 -11
  331. package/dist/server/src/services/transfer/token.d.ts.map +1 -1
  332. package/dist/server/src/services/user.d.ts +3 -3
  333. package/dist/server/src/services/user.d.ts.map +1 -1
  334. package/dist/server/src/strategies/admin-token.d.ts +4 -4
  335. package/dist/server/src/strategies/admin-token.d.ts.map +1 -1
  336. package/dist/server/src/strategies/admin.d.ts.map +1 -1
  337. package/dist/server/src/strategies/api-token-utils.d.ts.map +1 -1
  338. package/dist/server/src/strategies/content-api-token.d.ts.map +1 -1
  339. package/dist/server/src/strategies/data-transfer.d.ts.map +1 -1
  340. package/dist/server/src/utils/normalize-email.d.ts.map +1 -1
  341. package/dist/server/src/validation/action-provider.d.ts +2 -2
  342. package/dist/server/src/validation/action-provider.d.ts.map +1 -1
  343. package/dist/server/src/validation/admin-tokens.d.ts +2 -2
  344. package/dist/server/src/validation/api-tokens.d.ts +4 -4
  345. package/dist/server/src/validation/authentication/forgot-password.d.ts +1 -1
  346. package/dist/server/src/validation/authentication/login.d.ts +1 -1
  347. package/dist/server/src/validation/authentication/register.d.ts +6 -6
  348. package/dist/server/src/validation/authentication/register.d.ts.map +1 -1
  349. package/dist/server/src/validation/authentication/reset-password.d.ts +1 -1
  350. package/dist/server/src/validation/common-functions/check-fields-are-correctly-nested.d.ts.map +1 -1
  351. package/dist/server/src/validation/common-functions/check-fields-dont-have-duplicates.d.ts.map +1 -1
  352. package/dist/server/src/validation/common-validators.d.ts.map +1 -1
  353. package/dist/server/src/validation/permission.d.ts +6 -6
  354. package/dist/server/src/validation/permission.d.ts.map +1 -1
  355. package/dist/server/src/validation/policies/hasPermissions.d.ts +2 -2
  356. package/dist/server/src/validation/project-settings.d.ts +6 -6
  357. package/dist/server/src/validation/role.d.ts +8 -8
  358. package/dist/server/src/validation/role.d.ts.map +1 -1
  359. package/dist/server/src/validation/transfer/token.d.ts +4 -4
  360. package/dist/server/src/validation/user.d.ts +8 -8
  361. package/dist/shared/contracts/permissions.d.ts +1 -0
  362. package/dist/shared/contracts/permissions.d.ts.map +1 -1
  363. package/dist/shared/contracts/sessions.d.ts +62 -0
  364. package/dist/shared/contracts/sessions.d.ts.map +1 -0
  365. package/dist/shared/contracts/shared.d.ts +1 -1
  366. package/dist/shared/contracts/shared.d.ts.map +1 -1
  367. package/dist/shared/utils/session-auth.d.ts +1 -1
  368. package/dist/shared/utils/session-auth.d.ts.map +1 -1
  369. package/package.json +11 -11
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationInfoPage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Link, Typography } from '@strapi/design-system';\nimport { Check, ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useAppInfo } from '../../../../features/AppInfo';\nimport { useConfiguration } from '../../../../features/Configuration';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useFetchClient } from '../../../../hooks/useFetchClient';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { LogoInput, LogoInputProps } from './components/LogoInput';\nimport { DIMENSION, SIZE } from './utils/constants';\n\nconst AdminSeatInfoCE = () => null;\nconst AIUageDataCE = () => null;\n\n/* -------------------------------------------------------------------------------------------------\n * ApplicationInfoPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ApplicationInfoPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { get } = useFetchClient();\n const { logos: serverLogos, updateProjectSettings } = useConfiguration('ApplicationInfoPage');\n const [logos, setLogos] = React.useState({ menu: serverLogos.menu, auth: serverLogos.auth });\n const { settings } = useSelector(selectAdminPermissions);\n\n const communityEdition = useAppInfo('ApplicationInfoPage', (state) => state.communityEdition);\n const latestStrapiReleaseTag = useAppInfo(\n 'ApplicationInfoPage',\n (state) => state.latestStrapiReleaseTag\n );\n const nodeVersion = useAppInfo('ApplicationInfoPage', (state) => state.nodeVersion);\n const shouldUpdateStrapi = useAppInfo('ApplicationInfoPage', (state) => state.shouldUpdateStrapi);\n const strapiVersion = useAppInfo('ApplicationInfoPage', (state) => state.strapiVersion);\n\n const AdminSeatInfo = useEnterprise(\n AdminSeatInfoCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo'\n )\n ).AdminSeatInfoEE\n );\n const isAiEnabled = window.strapi.ai?.enabled !== false;\n const AIUsageData = useEnterprise(\n AIUageDataCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage'\n )\n ).AIUsage,\n {\n enabled: isAiEnabled,\n }\n );\n\n const {\n allowedActions: { canRead, canUpdate },\n } = useRBAC(settings ? settings['project-settings'] : {});\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = (e) => {\n e.preventDefault();\n\n updateProjectSettings({\n authLogo: logos.auth.custom ?? null,\n menuLogo: logos.menu.custom ?? null,\n });\n };\n\n const handleChangeLogo =\n (logo: 'menu' | 'auth'): LogoInputProps['onChangeLogo'] =>\n (newLogo) => {\n /**\n * If there's no newLogo value we can assume we're reseting.\n */\n if (newLogo === null) {\n trackUsage('didClickResetLogo', {\n logo,\n });\n }\n\n setLogos((prev) => ({\n ...prev,\n [logo]: {\n ...prev[logo],\n custom: newLogo,\n },\n }));\n };\n\n React.useEffect(() => {\n setLogos({\n menu: serverLogos.menu,\n auth: serverLogos.auth,\n });\n }, [serverLogos]);\n\n // block rendering until the EE component is fully loaded\n if (!AdminSeatInfo) {\n return null;\n }\n\n if (!AIUsageData) {\n return null;\n }\n\n const isSaveDisabled =\n logos.auth.custom === serverLogos.auth.custom && logos.menu.custom === serverLogos.menu.custom;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'Settings.application.header',\n defaultMessage: 'Application',\n }),\n }\n )}\n </Page.Title>\n <Page.Main>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\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 disabled={isSaveDisabled} type=\"submit\" startIcon={<Check />} fullWidth>\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n )\n }\n />\n <Layouts.Content>\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\" tag=\"h3\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n\n <Grid.Root gap={5} tag=\"dl\">\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.strapiVersion',\n defaultMessage: 'strapi version',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" tag=\"dd\">\n <Typography>v{strapiVersion}</Typography>\n {shouldUpdateStrapi && (\n <Link\n href={`https://github.com/strapi/strapi/releases/tag/${latestStrapiReleaseTag}`}\n endIcon={<ExternalLink />}\n target=\"_blank\"\n >\n {formatMessage({\n id: 'Settings.application.link-upgrade',\n defaultMessage: 'Upgrade your admin panel',\n })}\n </Link>\n )}\n </Flex>\n </Grid.Item>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.edition-title',\n defaultMessage: 'current edition',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" tag=\"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 endIcon={<ExternalLink />}\n target=\"_blank\"\n >\n {formatMessage({\n id: 'Settings.application.link-pricing',\n defaultMessage: 'See all pricing plans',\n })}\n </Link>\n </Flex>\n </Grid.Item>\n\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.node-version',\n defaultMessage: 'node version',\n })}\n </Typography>\n <Typography tag=\"dd\">{nodeVersion}</Typography>\n </Grid.Item>\n <AdminSeatInfo />\n <AIUsageData />\n </Grid.Root>\n </Flex>\n {canRead && (\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\" tag=\"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:\n 'Max dimension: {dimension}×{dimension}, Max file size: {size}KB',\n },\n { dimension: DIMENSION, size: SIZE }\n )}\n </Typography>\n <Grid.Root paddingTop={4} gap={4}>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.menu.custom}\n defaultLogo={logos.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={handleChangeLogo('menu')}\n />\n </Grid.Item>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.auth.custom}\n defaultLogo={logos.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={handleChangeLogo('auth')}\n />\n </Grid.Item>\n </Grid.Root>\n </Box>\n )}\n </Flex>\n </Layouts.Content>\n </form>\n </Page.Main>\n </>\n );\n};\n\nexport { ApplicationInfoPage };\n"],"names":["AdminSeatInfoCE","AIUageDataCE","ApplicationInfoPage","trackUsage","useTracking","formatMessage","useIntl","get","useFetchClient","logos","serverLogos","updateProjectSettings","useConfiguration","setLogos","React","useState","menu","auth","settings","useSelector","selectAdminPermissions","communityEdition","useAppInfo","state","latestStrapiReleaseTag","nodeVersion","shouldUpdateStrapi","strapiVersion","AdminSeatInfo","useEnterprise","AdminSeatInfoEE","isAiEnabled","window","strapi","ai","enabled","AIUsageData","AIUsage","allowedActions","canRead","canUpdate","useRBAC","handleSubmit","e","preventDefault","authLogo","custom","menuLogo","handleChangeLogo","logo","newLogo","prev","useEffect","isSaveDisabled","_jsxs","_Fragment","_jsx","Page","Title","id","defaultMessage","name","Main","form","onSubmit","Layouts","Header","title","subtitle","primaryAction","Button","disabled","type","startIcon","Check","fullWidth","Content","Flex","direction","alignItems","gap","hasRadius","background","shadow","paddingTop","paddingBottom","paddingRight","paddingLeft","Typography","variant","tag","Grid","Root","Item","col","xs","textColor","Link","href","endIcon","ExternalLink","target","Box","dimension","DIMENSION","size","SIZE","LogoInput","customLogo","defaultLogo","default","hint","label","onChangeLogo"],"mappings":"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"}
1
+ {"version":3,"file":"ApplicationInfoPage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Link, Typography } from '@strapi/design-system';\nimport { Check, ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useAppInfo } from '../../../../features/AppInfo';\nimport { useConfiguration } from '../../../../features/Configuration';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useFetchClient } from '../../../../hooks/useFetchClient';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { LogoInput, LogoInputProps } from './components/LogoInput';\nimport { DIMENSION, SIZE } from './utils/constants';\n\nconst AdminSeatInfoCE = () => null;\nconst AIUageDataCE = () => null;\n\n/* -------------------------------------------------------------------------------------------------\n * ApplicationInfoPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ApplicationInfoPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { get } = useFetchClient();\n const { logos: serverLogos, updateProjectSettings } = useConfiguration('ApplicationInfoPage');\n const [logos, setLogos] = React.useState({ menu: serverLogos.menu, auth: serverLogos.auth });\n const { settings } = useSelector(selectAdminPermissions);\n\n const communityEdition = useAppInfo('ApplicationInfoPage', (state) => state.communityEdition);\n const latestStrapiReleaseTag = useAppInfo(\n 'ApplicationInfoPage',\n (state) => state.latestStrapiReleaseTag\n );\n const nodeVersion = useAppInfo('ApplicationInfoPage', (state) => state.nodeVersion);\n const shouldUpdateStrapi = useAppInfo('ApplicationInfoPage', (state) => state.shouldUpdateStrapi);\n const strapiVersion = useAppInfo('ApplicationInfoPage', (state) => state.strapiVersion);\n\n const AdminSeatInfo = useEnterprise(\n AdminSeatInfoCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo'\n )\n ).AdminSeatInfoEE\n );\n const isAiEnabled = window.strapi.ai?.enabled !== false;\n const AIUsageData = useEnterprise(\n AIUageDataCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage'\n )\n ).AIUsage,\n {\n enabled: isAiEnabled,\n }\n );\n\n const {\n allowedActions: { canRead, canUpdate },\n } = useRBAC(settings ? settings['project-settings'] : {});\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = (e) => {\n e.preventDefault();\n\n updateProjectSettings({\n authLogo: logos.auth.custom ?? null,\n menuLogo: logos.menu.custom ?? null,\n });\n };\n\n const handleChangeLogo =\n (logo: 'menu' | 'auth'): LogoInputProps['onChangeLogo'] =>\n (newLogo) => {\n /**\n * If there's no newLogo value we can assume we're reseting.\n */\n if (newLogo === null) {\n trackUsage('didClickResetLogo', {\n logo,\n });\n }\n\n setLogos((prev) => ({\n ...prev,\n [logo]: {\n ...prev[logo],\n custom: newLogo,\n },\n }));\n };\n\n React.useEffect(() => {\n setLogos({\n menu: serverLogos.menu,\n auth: serverLogos.auth,\n });\n }, [serverLogos]);\n\n // block rendering until the EE component is fully loaded\n if (!AdminSeatInfo) {\n return null;\n }\n\n if (!AIUsageData) {\n return null;\n }\n\n const isSaveDisabled =\n logos.auth.custom === serverLogos.auth.custom && logos.menu.custom === serverLogos.menu.custom;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'Settings.application.header',\n defaultMessage: 'Application',\n }),\n }\n )}\n </Page.Title>\n <Page.Main>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\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 disabled={isSaveDisabled} type=\"submit\" startIcon={<Check />} fullWidth>\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n )\n }\n />\n <Layouts.Content>\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\" tag=\"h3\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n\n <Grid.Root gap={5} tag=\"dl\">\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.strapiVersion',\n defaultMessage: 'strapi version',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" tag=\"dd\">\n <Typography>v{strapiVersion}</Typography>\n {shouldUpdateStrapi && (\n <Link\n href={`https://github.com/strapi/strapi/releases/tag/${latestStrapiReleaseTag}`}\n endIcon={<ExternalLink />}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {formatMessage({\n id: 'Settings.application.link-upgrade',\n defaultMessage: 'Upgrade your admin panel',\n })}\n </Link>\n )}\n </Flex>\n </Grid.Item>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.edition-title',\n defaultMessage: 'current edition',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" tag=\"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 endIcon={<ExternalLink />}\n target=\"_blank\"\n >\n {formatMessage({\n id: 'Settings.application.link-pricing',\n defaultMessage: 'See all pricing plans',\n })}\n </Link>\n </Flex>\n </Grid.Item>\n\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.node-version',\n defaultMessage: 'node version',\n })}\n </Typography>\n <Typography tag=\"dd\">{nodeVersion}</Typography>\n </Grid.Item>\n <AdminSeatInfo />\n <AIUsageData />\n </Grid.Root>\n </Flex>\n {canRead && (\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\" tag=\"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:\n 'Max dimension: {dimension}×{dimension}, Max file size: {size}KB',\n },\n { dimension: DIMENSION, size: SIZE }\n )}\n </Typography>\n <Grid.Root paddingTop={4} gap={4}>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.menu.custom}\n defaultLogo={logos.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={handleChangeLogo('menu')}\n />\n </Grid.Item>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.auth.custom}\n defaultLogo={logos.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={handleChangeLogo('auth')}\n />\n </Grid.Item>\n </Grid.Root>\n </Box>\n )}\n </Flex>\n </Layouts.Content>\n </form>\n </Page.Main>\n </>\n );\n};\n\nexport { ApplicationInfoPage };\n"],"names":["AdminSeatInfoCE","AIUageDataCE","ApplicationInfoPage","trackUsage","useTracking","formatMessage","useIntl","get","useFetchClient","logos","serverLogos","updateProjectSettings","useConfiguration","setLogos","React","useState","menu","auth","settings","useSelector","selectAdminPermissions","communityEdition","useAppInfo","state","latestStrapiReleaseTag","nodeVersion","shouldUpdateStrapi","strapiVersion","AdminSeatInfo","useEnterprise","AdminSeatInfoEE","isAiEnabled","window","strapi","ai","enabled","AIUsageData","AIUsage","allowedActions","canRead","canUpdate","useRBAC","handleSubmit","e","preventDefault","authLogo","custom","menuLogo","handleChangeLogo","logo","newLogo","prev","useEffect","isSaveDisabled","_jsxs","_Fragment","_jsx","Page","Title","id","defaultMessage","name","Main","form","onSubmit","Layouts","Header","title","subtitle","primaryAction","Button","disabled","type","startIcon","Check","fullWidth","Content","Flex","direction","alignItems","gap","hasRadius","background","shadow","paddingTop","paddingBottom","paddingRight","paddingLeft","Typography","variant","tag","Grid","Root","Item","col","xs","textColor","Link","href","endIcon","ExternalLink","target","rel","Box","dimension","DIMENSION","size","SIZE","LogoInput","customLogo","defaultLogo","default","hint","label","onChangeLogo"],"mappings":"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"}
@@ -178,6 +178,7 @@ const AIUageDataCE = ()=>null;
178
178
  href: `https://github.com/strapi/strapi/releases/tag/${latestStrapiReleaseTag}`,
179
179
  endIcon: /*#__PURE__*/ jsx(ExternalLink, {}),
180
180
  target: "_blank",
181
+ rel: "noopener noreferrer",
181
182
  children: formatMessage({
182
183
  id: 'Settings.application.link-upgrade',
183
184
  defaultMessage: 'Upgrade your admin panel'
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationInfoPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Link, Typography } from '@strapi/design-system';\nimport { Check, ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useAppInfo } from '../../../../features/AppInfo';\nimport { useConfiguration } from '../../../../features/Configuration';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useFetchClient } from '../../../../hooks/useFetchClient';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { LogoInput, LogoInputProps } from './components/LogoInput';\nimport { DIMENSION, SIZE } from './utils/constants';\n\nconst AdminSeatInfoCE = () => null;\nconst AIUageDataCE = () => null;\n\n/* -------------------------------------------------------------------------------------------------\n * ApplicationInfoPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ApplicationInfoPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { get } = useFetchClient();\n const { logos: serverLogos, updateProjectSettings } = useConfiguration('ApplicationInfoPage');\n const [logos, setLogos] = React.useState({ menu: serverLogos.menu, auth: serverLogos.auth });\n const { settings } = useSelector(selectAdminPermissions);\n\n const communityEdition = useAppInfo('ApplicationInfoPage', (state) => state.communityEdition);\n const latestStrapiReleaseTag = useAppInfo(\n 'ApplicationInfoPage',\n (state) => state.latestStrapiReleaseTag\n );\n const nodeVersion = useAppInfo('ApplicationInfoPage', (state) => state.nodeVersion);\n const shouldUpdateStrapi = useAppInfo('ApplicationInfoPage', (state) => state.shouldUpdateStrapi);\n const strapiVersion = useAppInfo('ApplicationInfoPage', (state) => state.strapiVersion);\n\n const AdminSeatInfo = useEnterprise(\n AdminSeatInfoCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo'\n )\n ).AdminSeatInfoEE\n );\n const isAiEnabled = window.strapi.ai?.enabled !== false;\n const AIUsageData = useEnterprise(\n AIUageDataCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage'\n )\n ).AIUsage,\n {\n enabled: isAiEnabled,\n }\n );\n\n const {\n allowedActions: { canRead, canUpdate },\n } = useRBAC(settings ? settings['project-settings'] : {});\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = (e) => {\n e.preventDefault();\n\n updateProjectSettings({\n authLogo: logos.auth.custom ?? null,\n menuLogo: logos.menu.custom ?? null,\n });\n };\n\n const handleChangeLogo =\n (logo: 'menu' | 'auth'): LogoInputProps['onChangeLogo'] =>\n (newLogo) => {\n /**\n * If there's no newLogo value we can assume we're reseting.\n */\n if (newLogo === null) {\n trackUsage('didClickResetLogo', {\n logo,\n });\n }\n\n setLogos((prev) => ({\n ...prev,\n [logo]: {\n ...prev[logo],\n custom: newLogo,\n },\n }));\n };\n\n React.useEffect(() => {\n setLogos({\n menu: serverLogos.menu,\n auth: serverLogos.auth,\n });\n }, [serverLogos]);\n\n // block rendering until the EE component is fully loaded\n if (!AdminSeatInfo) {\n return null;\n }\n\n if (!AIUsageData) {\n return null;\n }\n\n const isSaveDisabled =\n logos.auth.custom === serverLogos.auth.custom && logos.menu.custom === serverLogos.menu.custom;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'Settings.application.header',\n defaultMessage: 'Application',\n }),\n }\n )}\n </Page.Title>\n <Page.Main>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\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 disabled={isSaveDisabled} type=\"submit\" startIcon={<Check />} fullWidth>\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n )\n }\n />\n <Layouts.Content>\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\" tag=\"h3\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n\n <Grid.Root gap={5} tag=\"dl\">\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.strapiVersion',\n defaultMessage: 'strapi version',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" tag=\"dd\">\n <Typography>v{strapiVersion}</Typography>\n {shouldUpdateStrapi && (\n <Link\n href={`https://github.com/strapi/strapi/releases/tag/${latestStrapiReleaseTag}`}\n endIcon={<ExternalLink />}\n target=\"_blank\"\n >\n {formatMessage({\n id: 'Settings.application.link-upgrade',\n defaultMessage: 'Upgrade your admin panel',\n })}\n </Link>\n )}\n </Flex>\n </Grid.Item>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.edition-title',\n defaultMessage: 'current edition',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" tag=\"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 endIcon={<ExternalLink />}\n target=\"_blank\"\n >\n {formatMessage({\n id: 'Settings.application.link-pricing',\n defaultMessage: 'See all pricing plans',\n })}\n </Link>\n </Flex>\n </Grid.Item>\n\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.node-version',\n defaultMessage: 'node version',\n })}\n </Typography>\n <Typography tag=\"dd\">{nodeVersion}</Typography>\n </Grid.Item>\n <AdminSeatInfo />\n <AIUsageData />\n </Grid.Root>\n </Flex>\n {canRead && (\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\" tag=\"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:\n 'Max dimension: {dimension}×{dimension}, Max file size: {size}KB',\n },\n { dimension: DIMENSION, size: SIZE }\n )}\n </Typography>\n <Grid.Root paddingTop={4} gap={4}>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.menu.custom}\n defaultLogo={logos.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={handleChangeLogo('menu')}\n />\n </Grid.Item>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.auth.custom}\n defaultLogo={logos.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={handleChangeLogo('auth')}\n />\n </Grid.Item>\n </Grid.Root>\n </Box>\n )}\n </Flex>\n </Layouts.Content>\n </form>\n </Page.Main>\n </>\n );\n};\n\nexport { ApplicationInfoPage };\n"],"names":["AdminSeatInfoCE","AIUageDataCE","ApplicationInfoPage","trackUsage","useTracking","formatMessage","useIntl","get","useFetchClient","logos","serverLogos","updateProjectSettings","useConfiguration","setLogos","React","useState","menu","auth","settings","useSelector","selectAdminPermissions","communityEdition","useAppInfo","state","latestStrapiReleaseTag","nodeVersion","shouldUpdateStrapi","strapiVersion","AdminSeatInfo","useEnterprise","AdminSeatInfoEE","isAiEnabled","window","strapi","ai","enabled","AIUsageData","AIUsage","allowedActions","canRead","canUpdate","useRBAC","handleSubmit","e","preventDefault","authLogo","custom","menuLogo","handleChangeLogo","logo","newLogo","prev","useEffect","isSaveDisabled","_jsxs","_Fragment","_jsx","Page","Title","id","defaultMessage","name","Main","form","onSubmit","Layouts","Header","title","subtitle","primaryAction","Button","disabled","type","startIcon","Check","fullWidth","Content","Flex","direction","alignItems","gap","hasRadius","background","shadow","paddingTop","paddingBottom","paddingRight","paddingLeft","Typography","variant","tag","Grid","Root","Item","col","xs","textColor","Link","href","endIcon","ExternalLink","target","Box","dimension","DIMENSION","size","SIZE","LogoInput","customLogo","defaultLogo","default","hint","label","onChangeLogo"],"mappings":"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"}
1
+ {"version":3,"file":"ApplicationInfoPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Link, Typography } from '@strapi/design-system';\nimport { Check, ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useAppInfo } from '../../../../features/AppInfo';\nimport { useConfiguration } from '../../../../features/Configuration';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useFetchClient } from '../../../../hooks/useFetchClient';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { LogoInput, LogoInputProps } from './components/LogoInput';\nimport { DIMENSION, SIZE } from './utils/constants';\n\nconst AdminSeatInfoCE = () => null;\nconst AIUageDataCE = () => null;\n\n/* -------------------------------------------------------------------------------------------------\n * ApplicationInfoPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ApplicationInfoPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { get } = useFetchClient();\n const { logos: serverLogos, updateProjectSettings } = useConfiguration('ApplicationInfoPage');\n const [logos, setLogos] = React.useState({ menu: serverLogos.menu, auth: serverLogos.auth });\n const { settings } = useSelector(selectAdminPermissions);\n\n const communityEdition = useAppInfo('ApplicationInfoPage', (state) => state.communityEdition);\n const latestStrapiReleaseTag = useAppInfo(\n 'ApplicationInfoPage',\n (state) => state.latestStrapiReleaseTag\n );\n const nodeVersion = useAppInfo('ApplicationInfoPage', (state) => state.nodeVersion);\n const shouldUpdateStrapi = useAppInfo('ApplicationInfoPage', (state) => state.shouldUpdateStrapi);\n const strapiVersion = useAppInfo('ApplicationInfoPage', (state) => state.strapiVersion);\n\n const AdminSeatInfo = useEnterprise(\n AdminSeatInfoCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo'\n )\n ).AdminSeatInfoEE\n );\n const isAiEnabled = window.strapi.ai?.enabled !== false;\n const AIUsageData = useEnterprise(\n AIUageDataCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage'\n )\n ).AIUsage,\n {\n enabled: isAiEnabled,\n }\n );\n\n const {\n allowedActions: { canRead, canUpdate },\n } = useRBAC(settings ? settings['project-settings'] : {});\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = (e) => {\n e.preventDefault();\n\n updateProjectSettings({\n authLogo: logos.auth.custom ?? null,\n menuLogo: logos.menu.custom ?? null,\n });\n };\n\n const handleChangeLogo =\n (logo: 'menu' | 'auth'): LogoInputProps['onChangeLogo'] =>\n (newLogo) => {\n /**\n * If there's no newLogo value we can assume we're reseting.\n */\n if (newLogo === null) {\n trackUsage('didClickResetLogo', {\n logo,\n });\n }\n\n setLogos((prev) => ({\n ...prev,\n [logo]: {\n ...prev[logo],\n custom: newLogo,\n },\n }));\n };\n\n React.useEffect(() => {\n setLogos({\n menu: serverLogos.menu,\n auth: serverLogos.auth,\n });\n }, [serverLogos]);\n\n // block rendering until the EE component is fully loaded\n if (!AdminSeatInfo) {\n return null;\n }\n\n if (!AIUsageData) {\n return null;\n }\n\n const isSaveDisabled =\n logos.auth.custom === serverLogos.auth.custom && logos.menu.custom === serverLogos.menu.custom;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'Settings.application.header',\n defaultMessage: 'Application',\n }),\n }\n )}\n </Page.Title>\n <Page.Main>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\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 disabled={isSaveDisabled} type=\"submit\" startIcon={<Check />} fullWidth>\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n )\n }\n />\n <Layouts.Content>\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\" tag=\"h3\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n\n <Grid.Root gap={5} tag=\"dl\">\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.strapiVersion',\n defaultMessage: 'strapi version',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" tag=\"dd\">\n <Typography>v{strapiVersion}</Typography>\n {shouldUpdateStrapi && (\n <Link\n href={`https://github.com/strapi/strapi/releases/tag/${latestStrapiReleaseTag}`}\n endIcon={<ExternalLink />}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {formatMessage({\n id: 'Settings.application.link-upgrade',\n defaultMessage: 'Upgrade your admin panel',\n })}\n </Link>\n )}\n </Flex>\n </Grid.Item>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.edition-title',\n defaultMessage: 'current edition',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" tag=\"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 endIcon={<ExternalLink />}\n target=\"_blank\"\n >\n {formatMessage({\n id: 'Settings.application.link-pricing',\n defaultMessage: 'See all pricing plans',\n })}\n </Link>\n </Flex>\n </Grid.Item>\n\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.node-version',\n defaultMessage: 'node version',\n })}\n </Typography>\n <Typography tag=\"dd\">{nodeVersion}</Typography>\n </Grid.Item>\n <AdminSeatInfo />\n <AIUsageData />\n </Grid.Root>\n </Flex>\n {canRead && (\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\" tag=\"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:\n 'Max dimension: {dimension}×{dimension}, Max file size: {size}KB',\n },\n { dimension: DIMENSION, size: SIZE }\n )}\n </Typography>\n <Grid.Root paddingTop={4} gap={4}>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.menu.custom}\n defaultLogo={logos.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={handleChangeLogo('menu')}\n />\n </Grid.Item>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.auth.custom}\n defaultLogo={logos.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={handleChangeLogo('auth')}\n />\n </Grid.Item>\n </Grid.Root>\n </Box>\n )}\n </Flex>\n </Layouts.Content>\n </form>\n </Page.Main>\n </>\n );\n};\n\nexport { ApplicationInfoPage };\n"],"names":["AdminSeatInfoCE","AIUageDataCE","ApplicationInfoPage","trackUsage","useTracking","formatMessage","useIntl","get","useFetchClient","logos","serverLogos","updateProjectSettings","useConfiguration","setLogos","React","useState","menu","auth","settings","useSelector","selectAdminPermissions","communityEdition","useAppInfo","state","latestStrapiReleaseTag","nodeVersion","shouldUpdateStrapi","strapiVersion","AdminSeatInfo","useEnterprise","AdminSeatInfoEE","isAiEnabled","window","strapi","ai","enabled","AIUsageData","AIUsage","allowedActions","canRead","canUpdate","useRBAC","handleSubmit","e","preventDefault","authLogo","custom","menuLogo","handleChangeLogo","logo","newLogo","prev","useEffect","isSaveDisabled","_jsxs","_Fragment","_jsx","Page","Title","id","defaultMessage","name","Main","form","onSubmit","Layouts","Header","title","subtitle","primaryAction","Button","disabled","type","startIcon","Check","fullWidth","Content","Flex","direction","alignItems","gap","hasRadius","background","shadow","paddingTop","paddingBottom","paddingRight","paddingLeft","Typography","variant","tag","Grid","Root","Item","col","xs","textColor","Link","href","endIcon","ExternalLink","target","rel","Box","dimension","DIMENSION","size","SIZE","LogoInput","customLogo","defaultLogo","default","hint","label","onChangeLogo"],"mappings":"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"}
@@ -58,6 +58,7 @@ var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
58
58
  const { formatMessage } = reactIntl.useIntl();
59
59
  const navigate = reactRouterDom.useNavigate();
60
60
  const permissionsRef = React__namespace.useRef(null);
61
+ const [hasLocaleValidationErrors, setHasLocaleValidationErrors] = React__namespace.useState(false);
61
62
  const { trackUsage } = Tracking.useTracking();
62
63
  const { _unstableFormatAPIError: formatAPIError, _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler.useAPIErrorHandler();
63
64
  const { isLoading: isLoadingPermissionsLayout, currentData: permissionsLayout } = users.useGetRolePermissionLayoutQuery({
@@ -78,6 +79,10 @@ var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
78
79
  const [createRole] = users.useCreateRoleMutation();
79
80
  const [updateRolePermissions] = users.useUpdateRolePermissionsMutation();
80
81
  const handleCreateRoleSubmit = async (data, formik)=>{
82
+ // Re-check via ref on submit: state may lag behind the latest matrix edits when save is clicked quickly
83
+ if (permissionsRef.current?.hasLocaleValidationErrors()) {
84
+ return;
85
+ }
81
86
  try {
82
87
  if (id) {
83
88
  trackUsage('willDuplicateRole');
@@ -181,6 +186,7 @@ var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
181
186
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
182
187
  type: "submit",
183
188
  loading: isSubmitting,
189
+ disabled: hasLocaleValidationErrors,
184
190
  startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Check, {}),
185
191
  fullWidth: true,
186
192
  children: formatMessage({
@@ -325,6 +331,7 @@ var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
325
331
  hasRadius: true,
326
332
  children: /*#__PURE__*/ jsxRuntime.jsx(Permissions.Permissions, {
327
333
  isFormDisabled: false,
334
+ onLocaleValidationChange: setHasLocaleValidationErrors,
328
335
  ref: permissionsRef,
329
336
  permissions: rolePermissions,
330
337
  layout: permissionsLayout
@@ -1 +1 @@
1
- {"version":3,"file":"CreatePage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Field,\n Flex,\n Grid,\n Main,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useCreateRoleMutation,\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\n\n/* -------------------------------------------------------------------------------------------------\n * CreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst CREATE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().required(translatedErrors.required.id),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface CreateRoleFormValues {\n name: string;\n description: string;\n}\n\n/**\n * TODO: this whole section of the app needs refactoring. Using a ref to\n * manage the state of the child is nonsensical.\n */\nconst CreatePage = () => {\n const { id } = useParams();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, currentData: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n /**\n * We need this so if we're cloning a role, we can fetch\n * the current permissions that role has.\n */\n const { currentData: rolePermissions, isLoading: isLoadingRole } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [createRole] = useCreateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n const handleCreateRoleSubmit = async (\n data: CreateRoleFormValues,\n formik: FormikHelpers<CreateRoleFormValues>\n ) => {\n try {\n if (id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n const res = await createRole(data);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n const { permissionsToSend } = permissionsRef.current?.getPermissions() ?? {};\n\n if (res.data.id && Array.isArray(permissionsToSend) && permissionsToSend.length > 0) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.roles.created', defaultMessage: 'created' }),\n });\n\n navigate(`../roles/${res.data.id.toString()}`, { replace: true });\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n if ((isLoadingPermissionsLayout && isLoadingRole) || !permissionsLayout) {\n return <Page.Loading />;\n }\n\n return (\n <Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Formik\n initialValues={\n {\n name: '',\n description: `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`,\n } satisfies CreateRoleFormValues\n }\n onSubmit={handleCreateRoleSubmit}\n validationSchema={CREATE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleReset, handleChange, isSubmitting }) => (\n <Form>\n <>\n <Layouts.Header\n primaryAction={\n <Flex width=\"100%\" gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n fullWidth\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} startIcon={<Check />} fullWidth>\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"../roles\" />\n </Box>\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid.Root gap={4}>\n <Grid.Item m={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <TextInput type=\"text\" onChange={handleChange} value={values.name} />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n <Grid.Item m={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n >\n <Field.Label>\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Field.Label>\n <Textarea onChange={handleChange} value={values.description} />\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: 1.2rem;\n font-weight: bold;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedCreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.create\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <CreatePage />\n </Page.Protect>\n );\n};\n\nexport { CreatePage, ProtectedCreatePage };\n"],"names":["CREATE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","CreatePage","useParams","toggleNotification","useNotification","formatMessage","useIntl","navigate","useNavigate","permissionsRef","React","useRef","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","currentData","permissionsLayout","useGetRolePermissionLayoutQuery","role","rolePermissions","isLoadingRole","useGetRolePermissionsQuery","skip","refetchOnMountOrArgChange","createRole","useCreateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","handleCreateRoleSubmit","data","formik","res","isBaseQueryError","error","setErrors","type","message","permissionsToSend","current","getPermissions","Array","isArray","length","updateRes","permissions","defaultMessage","toString","replace","err","_jsx","Page","Loading","_jsxs","Main","Title","Formik","initialValues","format","Date","onSubmit","validationSchema","validateOnChange","values","errors","handleReset","handleChange","isSubmitting","Form","_Fragment","Layouts","Header","primaryAction","Flex","width","gap","Button","variant","onClick","resetForm","fullWidth","loading","startIcon","Check","title","subtitle","navigationAction","Box","display","initial","medium","BackButton","fallback","Content","direction","alignItems","background","padding","shadow","hasRadius","justifyContent","Typography","fontWeight","textColor","UsersRoleNumber","number","Grid","Root","Item","m","xs","Field","Label","TextInput","onChange","value","Error","Textarea","Permissions","isFormDisabled","ref","layout","styled","div","theme","colors","primary200","primary100","spaces","primary600","borderRadius","ProtectedCreatePage","useTypedSelector","state","admin_app","settings","roles","create","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"CreatePage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Field,\n Flex,\n Grid,\n Main,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useCreateRoleMutation,\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\n\n/* -------------------------------------------------------------------------------------------------\n * CreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst CREATE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().required(translatedErrors.required.id),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface CreateRoleFormValues {\n name: string;\n description: string;\n}\n\n/**\n * TODO: this whole section of the app needs refactoring. Using a ref to\n * manage the state of the child is nonsensical.\n */\nconst CreatePage = () => {\n const { id } = useParams();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const [hasLocaleValidationErrors, setHasLocaleValidationErrors] = React.useState(false);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, currentData: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n /**\n * We need this so if we're cloning a role, we can fetch\n * the current permissions that role has.\n */\n const { currentData: rolePermissions, isLoading: isLoadingRole } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [createRole] = useCreateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n const handleCreateRoleSubmit = async (\n data: CreateRoleFormValues,\n formik: FormikHelpers<CreateRoleFormValues>\n ) => {\n // Re-check via ref on submit: state may lag behind the latest matrix edits when save is clicked quickly\n if (permissionsRef.current?.hasLocaleValidationErrors()) {\n return;\n }\n\n try {\n if (id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n const res = await createRole(data);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n const { permissionsToSend } = permissionsRef.current?.getPermissions() ?? {};\n\n if (res.data.id && Array.isArray(permissionsToSend) && permissionsToSend.length > 0) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.roles.created', defaultMessage: 'created' }),\n });\n\n navigate(`../roles/${res.data.id.toString()}`, { replace: true });\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n if ((isLoadingPermissionsLayout && isLoadingRole) || !permissionsLayout) {\n return <Page.Loading />;\n }\n\n return (\n <Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Formik\n initialValues={\n {\n name: '',\n description: `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`,\n } satisfies CreateRoleFormValues\n }\n onSubmit={handleCreateRoleSubmit}\n validationSchema={CREATE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleReset, handleChange, isSubmitting }) => (\n <Form>\n <>\n <Layouts.Header\n primaryAction={\n <Flex width=\"100%\" gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n fullWidth\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button\n type=\"submit\"\n loading={isSubmitting}\n disabled={hasLocaleValidationErrors}\n startIcon={<Check />}\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"../roles\" />\n </Box>\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid.Root gap={4}>\n <Grid.Item m={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <TextInput type=\"text\" onChange={handleChange} value={values.name} />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n <Grid.Item m={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n >\n <Field.Label>\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Field.Label>\n <Textarea onChange={handleChange} value={values.description} />\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n onLocaleValidationChange={setHasLocaleValidationErrors}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: 1.2rem;\n font-weight: bold;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedCreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.create\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <CreatePage />\n </Page.Protect>\n );\n};\n\nexport { CreatePage, ProtectedCreatePage };\n"],"names":["CREATE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","CreatePage","useParams","toggleNotification","useNotification","formatMessage","useIntl","navigate","useNavigate","permissionsRef","React","useRef","hasLocaleValidationErrors","setHasLocaleValidationErrors","useState","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","currentData","permissionsLayout","useGetRolePermissionLayoutQuery","role","rolePermissions","isLoadingRole","useGetRolePermissionsQuery","skip","refetchOnMountOrArgChange","createRole","useCreateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","handleCreateRoleSubmit","data","formik","current","res","isBaseQueryError","error","setErrors","type","message","permissionsToSend","getPermissions","Array","isArray","length","updateRes","permissions","defaultMessage","toString","replace","err","_jsx","Page","Loading","_jsxs","Main","Title","Formik","initialValues","format","Date","onSubmit","validationSchema","validateOnChange","values","errors","handleReset","handleChange","isSubmitting","Form","_Fragment","Layouts","Header","primaryAction","Flex","width","gap","Button","variant","onClick","resetForm","fullWidth","loading","disabled","startIcon","Check","title","subtitle","navigationAction","Box","display","initial","medium","BackButton","fallback","Content","direction","alignItems","background","padding","shadow","hasRadius","justifyContent","Typography","fontWeight","textColor","UsersRoleNumber","number","Grid","Root","Item","m","xs","Field","Label","TextInput","onChange","value","Error","Textarea","Permissions","isFormDisabled","onLocaleValidationChange","ref","layout","styled","div","theme","colors","primary200","primary100","spaces","primary600","borderRadius","ProtectedCreatePage","useTypedSelector","state","admin_app","settings","roles","create","Protect"],"mappings":"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"}
@@ -35,6 +35,7 @@ import { Permissions } from './components/Permissions.mjs';
35
35
  const { formatMessage } = useIntl();
36
36
  const navigate = useNavigate();
37
37
  const permissionsRef = React.useRef(null);
38
+ const [hasLocaleValidationErrors, setHasLocaleValidationErrors] = React.useState(false);
38
39
  const { trackUsage } = useTracking();
39
40
  const { _unstableFormatAPIError: formatAPIError, _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
40
41
  const { isLoading: isLoadingPermissionsLayout, currentData: permissionsLayout } = useGetRolePermissionLayoutQuery({
@@ -55,6 +56,10 @@ import { Permissions } from './components/Permissions.mjs';
55
56
  const [createRole] = useCreateRoleMutation();
56
57
  const [updateRolePermissions] = useUpdateRolePermissionsMutation();
57
58
  const handleCreateRoleSubmit = async (data, formik)=>{
59
+ // Re-check via ref on submit: state may lag behind the latest matrix edits when save is clicked quickly
60
+ if (permissionsRef.current?.hasLocaleValidationErrors()) {
61
+ return;
62
+ }
58
63
  try {
59
64
  if (id) {
60
65
  trackUsage('willDuplicateRole');
@@ -158,6 +163,7 @@ import { Permissions } from './components/Permissions.mjs';
158
163
  /*#__PURE__*/ jsx(Button, {
159
164
  type: "submit",
160
165
  loading: isSubmitting,
166
+ disabled: hasLocaleValidationErrors,
161
167
  startIcon: /*#__PURE__*/ jsx(Check, {}),
162
168
  fullWidth: true,
163
169
  children: formatMessage({
@@ -302,6 +308,7 @@ import { Permissions } from './components/Permissions.mjs';
302
308
  hasRadius: true,
303
309
  children: /*#__PURE__*/ jsx(Permissions, {
304
310
  isFormDisabled: false,
311
+ onLocaleValidationChange: setHasLocaleValidationErrors,
305
312
  ref: permissionsRef,
306
313
  permissions: rolePermissions,
307
314
  layout: permissionsLayout
@@ -1 +1 @@
1
- {"version":3,"file":"CreatePage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Field,\n Flex,\n Grid,\n Main,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useCreateRoleMutation,\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\n\n/* -------------------------------------------------------------------------------------------------\n * CreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst CREATE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().required(translatedErrors.required.id),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface CreateRoleFormValues {\n name: string;\n description: string;\n}\n\n/**\n * TODO: this whole section of the app needs refactoring. Using a ref to\n * manage the state of the child is nonsensical.\n */\nconst CreatePage = () => {\n const { id } = useParams();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, currentData: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n /**\n * We need this so if we're cloning a role, we can fetch\n * the current permissions that role has.\n */\n const { currentData: rolePermissions, isLoading: isLoadingRole } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [createRole] = useCreateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n const handleCreateRoleSubmit = async (\n data: CreateRoleFormValues,\n formik: FormikHelpers<CreateRoleFormValues>\n ) => {\n try {\n if (id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n const res = await createRole(data);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n const { permissionsToSend } = permissionsRef.current?.getPermissions() ?? {};\n\n if (res.data.id && Array.isArray(permissionsToSend) && permissionsToSend.length > 0) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.roles.created', defaultMessage: 'created' }),\n });\n\n navigate(`../roles/${res.data.id.toString()}`, { replace: true });\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n if ((isLoadingPermissionsLayout && isLoadingRole) || !permissionsLayout) {\n return <Page.Loading />;\n }\n\n return (\n <Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Formik\n initialValues={\n {\n name: '',\n description: `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`,\n } satisfies CreateRoleFormValues\n }\n onSubmit={handleCreateRoleSubmit}\n validationSchema={CREATE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleReset, handleChange, isSubmitting }) => (\n <Form>\n <>\n <Layouts.Header\n primaryAction={\n <Flex width=\"100%\" gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n fullWidth\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} startIcon={<Check />} fullWidth>\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"../roles\" />\n </Box>\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid.Root gap={4}>\n <Grid.Item m={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <TextInput type=\"text\" onChange={handleChange} value={values.name} />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n <Grid.Item m={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n >\n <Field.Label>\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Field.Label>\n <Textarea onChange={handleChange} value={values.description} />\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: 1.2rem;\n font-weight: bold;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedCreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.create\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <CreatePage />\n </Page.Protect>\n );\n};\n\nexport { CreatePage, ProtectedCreatePage };\n"],"names":["CREATE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","CreatePage","useParams","toggleNotification","useNotification","formatMessage","useIntl","navigate","useNavigate","permissionsRef","React","useRef","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","currentData","permissionsLayout","useGetRolePermissionLayoutQuery","role","rolePermissions","isLoadingRole","useGetRolePermissionsQuery","skip","refetchOnMountOrArgChange","createRole","useCreateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","handleCreateRoleSubmit","data","formik","res","isBaseQueryError","error","setErrors","type","message","permissionsToSend","current","getPermissions","Array","isArray","length","updateRes","permissions","defaultMessage","toString","replace","err","_jsx","Page","Loading","_jsxs","Main","Title","Formik","initialValues","format","Date","onSubmit","validationSchema","validateOnChange","values","errors","handleReset","handleChange","isSubmitting","Form","_Fragment","Layouts","Header","primaryAction","Flex","width","gap","Button","variant","onClick","resetForm","fullWidth","loading","startIcon","Check","title","subtitle","navigationAction","Box","display","initial","medium","BackButton","fallback","Content","direction","alignItems","background","padding","shadow","hasRadius","justifyContent","Typography","fontWeight","textColor","UsersRoleNumber","number","Grid","Root","Item","m","xs","Field","Label","TextInput","onChange","value","Error","Textarea","Permissions","isFormDisabled","ref","layout","styled","div","theme","colors","primary200","primary100","spaces","primary600","borderRadius","ProtectedCreatePage","useTypedSelector","state","admin_app","settings","roles","create","Protect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAuCA;;AAEkG,qGAElG,MAAMA,aAAAA,GAAgBC,GAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;IACvCC,IAAAA,EAAMH,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,CAACC,WAAAA,CAAiBD,QAAQ,CAACE,EAAE,CAAA;IACxDC,WAAAA,EAAaR,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,CAACC,WAAAA,CAAiBD,QAAQ,CAACE,EAAE;AACjE,CAAA,CAAA;AAUA;;;AAGC,UACKE,UAAAA,GAAa,IAAA;IACjB,MAAM,EAAEF,EAAE,EAAE,GAAGG,SAAAA,EAAAA;IACf,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,QAAAA,GAAWC,WAAAA,EAAAA;IACjB,MAAMC,cAAAA,GAAiBC,KAAAA,CAAMC,MAAM,CAAiB,IAAA,CAAA;IACpD,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;AACvB,IAAA,MAAM,EACJC,uBAAAA,EAAyBC,cAAc,EACvCC,+BAAAA,EAAiCC,sBAAsB,EACxD,GAAGC,kBAAAA,EAAAA;IAEJ,MAAM,EAAEC,WAAWC,0BAA0B,EAAEC,aAAaC,iBAAiB,EAAE,GAC7EC,+BAAAA,CAAgC;AAC9B;;;AAGC,UACDC,MAAMzB,EAAAA,IAAM;AACd,KAAA,CAAA;AAEF;;;MAIA,MAAM,EAAEsB,WAAAA,EAAaI,eAAe,EAAEN,SAAAA,EAAWO,aAAa,EAAE,GAAGC,0BAAAA,CACjE;QACE5B,EAAAA,EAAIA;KACN,EACA;AACE6B,QAAAA,IAAAA,EAAM,CAAC7B,EAAAA;QACP8B,yBAAAA,EAA2B;AAC7B,KAAA,CAAA;IAGF,MAAM,CAACC,WAAW,GAAGC,qBAAAA,EAAAA;IACrB,MAAM,CAACC,sBAAsB,GAAGC,gCAAAA,EAAAA;IAEhC,MAAMC,sBAAAA,GAAyB,OAC7BC,IAAAA,EACAC,MAAAA,GAAAA;QAEA,IAAI;AACF,YAAA,IAAIrC,EAAAA,EAAI;gBACNa,UAAAA,CAAW,mBAAA,CAAA;YACb,CAAA,MAAO;gBACLA,UAAAA,CAAW,mBAAA,CAAA;AACb,YAAA;YAEA,MAAMyB,GAAAA,GAAM,MAAMP,UAAAA,CAAWK,IAAAA,CAAAA;AAE7B,YAAA,IAAI,WAAWE,GAAAA,EAAK;gBAClB,IAAIC,gBAAAA,CAAiBD,IAAIE,KAAK,CAAA,IAAKF,IAAIE,KAAK,CAAC5C,IAAI,KAAK,iBAAA,EAAmB;AACvEyC,oBAAAA,MAAAA,CAAOI,SAAS,CAACvB,sBAAAA,CAAuBoB,GAAAA,CAAIE,KAAK,CAAA,CAAA;gBACnD,CAAA,MAAO;oBACLpC,kBAAAA,CAAmB;wBACjBsC,IAAAA,EAAM,QAAA;wBACNC,OAAAA,EAAS3B,cAAAA,CAAesB,IAAIE,KAAK;AACnC,qBAAA,CAAA;AACF,gBAAA;AAEA,gBAAA;AACF,YAAA;YAEA,MAAM,EAAEI,iBAAiB,EAAE,GAAGlC,eAAemC,OAAO,EAAEC,oBAAoB,EAAC;AAE3E,YAAA,IAAIR,GAAAA,CAAIF,IAAI,CAACpC,EAAE,IAAI+C,KAAAA,CAAMC,OAAO,CAACJ,iBAAAA,CAAAA,IAAsBA,iBAAAA,CAAkBK,MAAM,GAAG,CAAA,EAAG;gBACnF,MAAMC,SAAAA,GAAY,MAAMjB,qBAAAA,CAAsB;oBAC5CjC,EAAAA,EAAIsC,GAAAA,CAAIF,IAAI,CAACpC,EAAE;oBACfmD,WAAAA,EAAaP;AACf,iBAAA,CAAA;AAEA,gBAAA,IAAI,WAAWM,SAAAA,EAAW;oBACxB,IAAIX,gBAAAA,CAAiBW,UAAUV,KAAK,CAAA,IAAKU,UAAUV,KAAK,CAAC5C,IAAI,KAAK,iBAAA,EAAmB;AACnFyC,wBAAAA,MAAAA,CAAOI,SAAS,CAACvB,sBAAAA,CAAuBgC,SAAAA,CAAUV,KAAK,CAAA,CAAA;oBACzD,CAAA,MAAO;wBACLpC,kBAAAA,CAAmB;4BACjBsC,IAAAA,EAAM,QAAA;4BACNC,OAAAA,EAAS3B,cAAAA,CAAekC,UAAUV,KAAK;AACzC,yBAAA,CAAA;AACF,oBAAA;AAEA,oBAAA;AACF,gBAAA;AACF,YAAA;YAEApC,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAc;oBAAEN,EAAAA,EAAI,wBAAA;oBAA0BoD,cAAAA,EAAgB;AAAU,iBAAA;AACnF,aAAA,CAAA;YAEA5C,QAAAA,CAAS,CAAC,SAAS,EAAE8B,GAAAA,CAAIF,IAAI,CAACpC,EAAE,CAACqD,QAAQ,EAAA,CAAA,CAAI,EAAE;gBAAEC,OAAAA,EAAS;AAAK,aAAA,CAAA;AACjE,QAAA,CAAA,CAAE,OAAOC,GAAAA,EAAK;YACZnD,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAc;oBAAEN,EAAAA,EAAI,oBAAA;oBAAsBoD,cAAAA,EAAgB;AAAoB,iBAAA;AACzF,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,IAAI,0BAAC/B,IAA8BM,aAAAA,IAAkB,CAACJ,iBAAAA,EAAmB;QACvE,qBAAOiC,GAAA,CAACC,KAAKC,OAAO,EAAA,EAAA,CAAA;AACtB,IAAA;AAEA,IAAA,qBACEC,IAAA,CAACC,IAAAA,EAAAA;;AACC,0BAAAJ,GAAA,CAACC,KAAKI,KAAK,EAAA;0BACRvD,aAAAA,CACC;oBAAEN,EAAAA,EAAI,oBAAA;oBAAsBoD,cAAAA,EAAgB;iBAAoB,EAChE;oBACExD,IAAAA,EAAM;AACR,iBAAA;;0BAGJ4D,GAAA,CAACM,MAAAA,EAAAA;gBACCC,aAAAA,EACE;oBACEnE,IAAAA,EAAM,EAAA;AACNK,oBAAAA,WAAAA,EAAa,GAAGK,aAAAA,CAAc;wBAC5BN,EAAAA,EAAI,6BAAA;wBACJoD,cAAAA,EAAgB;AAClB,qBAAA,CAAA,CAAG,CAAC,EAAEY,MAAAA,CAAO,IAAIC,QAAQ,KAAA,CAAA,CAAA;AAC3B,iBAAA;gBAEFC,QAAAA,EAAU/B,sBAAAA;gBACVgC,gBAAAA,EAAkB3E,aAAAA;gBAClB4E,gBAAAA,EAAkB,KAAA;AAEjB,gBAAA,QAAA,EAAA,CAAC,EAAEC,MAAM,EAAEC,MAAM,EAAEC,WAAW,EAAEC,YAAY,EAAEC,YAAY,EAAE,iBAC3DjB,GAAA,CAACkB,IAAAA,EAAAA;gDACCf,IAAA,CAAAgB,QAAA,EAAA;;AACE,8CAAAnB,GAAA,CAACoB,QAAQC,MAAM,EAAA;AACbC,oCAAAA,aAAAA,gBACEnB,IAAA,CAACoB,IAAAA,EAAAA;wCAAKC,KAAAA,EAAM,MAAA;wCAAOC,GAAAA,EAAK,CAAA;;0DACtBzB,GAAA,CAAC0B,MAAAA,EAAAA;gDACCC,OAAAA,EAAQ,WAAA;gDACRC,OAAAA,EAAS,IAAA;AACPb,oDAAAA,WAAAA,EAAAA;AACA7D,oDAAAA,cAAAA,CAAemC,OAAO,EAAEwC,SAAAA,EAAAA;AAC1B,gDAAA,CAAA;gDACAC,SAAS,EAAA,IAAA;0DAERhF,aAAAA,CAAc;oDACbN,EAAAA,EAAI,6BAAA;oDACJoD,cAAAA,EAAgB;AAClB,iDAAA;;0DAEFI,GAAA,CAAC0B,MAAAA,EAAAA;gDAAOxC,IAAAA,EAAK,QAAA;gDAAS6C,OAAAA,EAASd,YAAAA;AAAce,gDAAAA,SAAAA,gBAAWhC,GAAA,CAACiC,KAAAA,EAAAA,EAAAA,CAAAA;gDAAUH,SAAS,EAAA,IAAA;0DACzEhF,aAAAA,CAAc;oDACbN,EAAAA,EAAI,aAAA;oDACJoD,cAAAA,EAAgB;AAClB,iDAAA;;;;AAINsC,oCAAAA,KAAAA,EAAOpF,aAAAA,CAAc;wCACnBN,EAAAA,EAAI,6BAAA;wCACJoD,cAAAA,EAAgB;AAClB,qCAAA,CAAA;AACAuC,oCAAAA,QAAAA,EAAUrF,aAAAA,CAAc;wCACtBN,EAAAA,EAAI,mCAAA;wCACJoD,cAAAA,EAAgB;AAClB,qCAAA,CAAA;AACAwC,oCAAAA,gBAAAA;kDAEEpC,GAAA,CAACqC,GAAAA,EAAAA;wCAAIC,OAAAA,EAAS;4CAAEC,OAAAA,EAAS,MAAA;4CAAQC,MAAAA,EAAQ;AAAQ,yCAAA;AAC/C,wCAAA,QAAA,gBAAAxC,GAAA,CAACyC,UAAAA,EAAAA;4CAAWC,QAAAA,EAAS;;;;AAI3B,8CAAA1C,GAAA,CAACoB,QAAQuB,OAAO,EAAA;AACd,oCAAA,QAAA,gBAAAxC,IAAA,CAACoB,IAAAA,EAAAA;wCAAKqB,SAAAA,EAAU,QAAA;wCAASC,UAAAA,EAAW,SAAA;wCAAUpB,GAAAA,EAAK,CAAA;;0DACjDzB,GAAA,CAACqC,GAAAA,EAAAA;gDAAIS,UAAAA,EAAW,UAAA;gDAAWC,OAAAA,EAAS,CAAA;gDAAGC,MAAAA,EAAO,cAAA;gDAAeC,SAAS,EAAA,IAAA;AACpE,gDAAA,QAAA,gBAAA9C,IAAA,CAACoB,IAAAA,EAAAA;oDAAKqB,SAAAA,EAAU,QAAA;oDAASC,UAAAA,EAAW,SAAA;oDAAUpB,GAAAA,EAAK,CAAA;;sEACjDtB,IAAA,CAACoB,IAAAA,EAAAA;4DAAK2B,cAAAA,EAAe,eAAA;;8EACnB/C,IAAA,CAACkC,GAAAA,EAAAA;;sFACCrC,GAAA,CAACqC,GAAAA,EAAAA;AACC,4EAAA,QAAA,gBAAArC,GAAA,CAACmD,UAAAA,EAAAA;gFAAWC,UAAAA,EAAW,MAAA;0FACpBtG,aAAAA,CAAc;oFACbN,EAAAA,EAAI,gBAAA;oFACJoD,cAAAA,EAAgB;AAClB,iFAAA;;;sFAGJI,GAAA,CAACqC,GAAAA,EAAAA;AACC,4EAAA,QAAA,gBAAArC,GAAA,CAACmD,UAAAA,EAAAA;gFAAWxB,OAAAA,EAAQ,IAAA;gFAAK0B,SAAAA,EAAU,YAAA;0FAChCvG,aAAAA,CAAc;oFACbN,EAAAA,EAAI,iCAAA;oFACJoD,cAAAA,EAAgB;AAClB,iFAAA;;;;;8EAINI,GAAA,CAACsD,eAAAA,EAAAA;8EACExG,aAAAA,CACC;wEACEN,EAAAA,EAAI,4CAAA;wEACJoD,cAAAA,EACE;qEACJ,EACA;wEAAE2D,MAAAA,EAAQ;AAAE,qEAAA;;;;AAIlB,sEAAApD,IAAA,CAACqD,KAAKC,IAAI,EAAA;4DAAChC,GAAAA,EAAK,CAAA;;AACd,8EAAAzB,GAAA,CAACwD,KAAKE,IAAI,EAAA;oEAACC,CAAAA,EAAG,CAAA;oEAAGC,EAAAA,EAAI,EAAA;oEAAIhB,SAAAA,EAAU,QAAA;oEAASC,UAAAA,EAAW,SAAA;4FACrD1C,IAAA,CAAC0D,MAAMJ,IAAI,EAAA;wEACTrH,IAAAA,EAAK,MAAA;wEACL4C,KAAAA,EAAO8B,MAAAA,CAAO1E,IAAI,IAAIU,aAAAA,CAAc;AAAEN,4EAAAA,EAAAA,EAAIsE,OAAO1E;AAAK,yEAAA,CAAA;wEACtDE,QAAQ,EAAA,IAAA;;AAER,0FAAA0D,GAAA,CAAC6D,MAAMC,KAAK,EAAA;0FACThH,aAAAA,CAAc;oFACbN,EAAAA,EAAI,aAAA;oFACJoD,cAAAA,EAAgB;AAClB,iFAAA;;0FAEFI,GAAA,CAAC+D,SAAAA,EAAAA;gFAAU7E,IAAAA,EAAK,MAAA;gFAAO8E,QAAAA,EAAUhD,YAAAA;AAAciD,gFAAAA,KAAAA,EAAOpD,OAAOzE;;AAC7D,0FAAA4D,GAAA,CAAC6D,MAAMK,KAAK,EAAA,EAAA;;;;AAGhB,8EAAAlE,GAAA,CAACwD,KAAKE,IAAI,EAAA;oEAACC,CAAAA,EAAG,CAAA;oEAAGC,EAAAA,EAAI,EAAA;oEAAIhB,SAAAA,EAAU,QAAA;oEAASC,UAAAA,EAAW,SAAA;4FACrD1C,IAAA,CAAC0D,MAAMJ,IAAI,EAAA;wEACTrH,IAAAA,EAAK,aAAA;wEACL4C,KAAAA,EAAO8B,MAAAA,CAAOrE,WAAW,IAAIK,aAAAA,CAAc;AAAEN,4EAAAA,EAAAA,EAAIsE,OAAOrE;AAAY,yEAAA,CAAA;;AAEpE,0FAAAuD,GAAA,CAAC6D,MAAMC,KAAK,EAAA;0FACThH,aAAAA,CAAc;oFACbN,EAAAA,EAAI,oBAAA;oFACJoD,cAAAA,EAAgB;AAClB,iFAAA;;0FAEFI,GAAA,CAACmE,QAAAA,EAAAA;gFAASH,QAAAA,EAAUhD,YAAAA;AAAciD,gFAAAA,KAAAA,EAAOpD,OAAOpE;;;;;;;;;;0DAM1DuD,GAAA,CAACqC,GAAAA,EAAAA;gDAAIW,MAAAA,EAAO,cAAA;gDAAeC,SAAS,EAAA,IAAA;AAClC,gDAAA,QAAA,gBAAAjD,GAAA,CAACoE,WAAAA,EAAAA;oDACCC,cAAAA,EAAgB,KAAA;oDAChBC,GAAAA,EAAKpH,cAAAA;oDACLyC,WAAAA,EAAazB,eAAAA;oDACbqG,MAAAA,EAAQxG;;;;;;;;;;;;AAW9B;AAEA,MAAMuF,eAAAA,GAAkBkB,MAAAA,CAAOC,GAAG;oBACd,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;cAC/C,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACE,UAAU,CAAC;AAC5C,WAAA,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAK,CAAA,EAAGA,MAAMI,MAAM,CAAC,CAAA,CAAE,CAAC,CAAC,EAAEJ,KAAAA,CAAMI,MAAM,CAAC,CAAA,CAAE,EAAE,CAAC;SAC3D,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACI,UAAU,CAAC;AACjC,iBAAA,EAAE,CAAC,EAAEL,KAAK,EAAE,GAAKA,KAAAA,CAAMM,YAAY,CAAC;;;AAGrD,CAAC;AAED;;AAEkG,2GAE5FC,mBAAAA,GAAsB,IAAA;IAC1B,MAAMtF,WAAAA,GAAcuF,gBAAAA,CAClB,CAACC,KAAAA,GAAUA,KAAAA,CAAMC,SAAS,CAACzF,WAAW,CAAC0F,QAAQ,EAAEC,KAAAA,CAAMC,MAAAA,CAAAA;IAGzD,qBACEvF,GAAA,CAACC,KAAKuF,OAAO,EAAA;QAAC7F,WAAAA,EAAaA,WAAAA;AACzB,QAAA,QAAA,gBAAAK,GAAA,CAACtD,UAAAA,EAAAA,EAAAA;;AAGP;;;;"}
1
+ {"version":3,"file":"CreatePage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Field,\n Flex,\n Grid,\n Main,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useCreateRoleMutation,\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\n\n/* -------------------------------------------------------------------------------------------------\n * CreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst CREATE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().required(translatedErrors.required.id),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface CreateRoleFormValues {\n name: string;\n description: string;\n}\n\n/**\n * TODO: this whole section of the app needs refactoring. Using a ref to\n * manage the state of the child is nonsensical.\n */\nconst CreatePage = () => {\n const { id } = useParams();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const [hasLocaleValidationErrors, setHasLocaleValidationErrors] = React.useState(false);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, currentData: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n /**\n * We need this so if we're cloning a role, we can fetch\n * the current permissions that role has.\n */\n const { currentData: rolePermissions, isLoading: isLoadingRole } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [createRole] = useCreateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n const handleCreateRoleSubmit = async (\n data: CreateRoleFormValues,\n formik: FormikHelpers<CreateRoleFormValues>\n ) => {\n // Re-check via ref on submit: state may lag behind the latest matrix edits when save is clicked quickly\n if (permissionsRef.current?.hasLocaleValidationErrors()) {\n return;\n }\n\n try {\n if (id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n const res = await createRole(data);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n const { permissionsToSend } = permissionsRef.current?.getPermissions() ?? {};\n\n if (res.data.id && Array.isArray(permissionsToSend) && permissionsToSend.length > 0) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.roles.created', defaultMessage: 'created' }),\n });\n\n navigate(`../roles/${res.data.id.toString()}`, { replace: true });\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n if ((isLoadingPermissionsLayout && isLoadingRole) || !permissionsLayout) {\n return <Page.Loading />;\n }\n\n return (\n <Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Formik\n initialValues={\n {\n name: '',\n description: `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`,\n } satisfies CreateRoleFormValues\n }\n onSubmit={handleCreateRoleSubmit}\n validationSchema={CREATE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleReset, handleChange, isSubmitting }) => (\n <Form>\n <>\n <Layouts.Header\n primaryAction={\n <Flex width=\"100%\" gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n fullWidth\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button\n type=\"submit\"\n loading={isSubmitting}\n disabled={hasLocaleValidationErrors}\n startIcon={<Check />}\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"../roles\" />\n </Box>\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid.Root gap={4}>\n <Grid.Item m={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <TextInput type=\"text\" onChange={handleChange} value={values.name} />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n <Grid.Item m={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n >\n <Field.Label>\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Field.Label>\n <Textarea onChange={handleChange} value={values.description} />\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n onLocaleValidationChange={setHasLocaleValidationErrors}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: 1.2rem;\n font-weight: bold;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedCreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.create\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <CreatePage />\n </Page.Protect>\n );\n};\n\nexport { CreatePage, ProtectedCreatePage };\n"],"names":["CREATE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","CreatePage","useParams","toggleNotification","useNotification","formatMessage","useIntl","navigate","useNavigate","permissionsRef","React","useRef","hasLocaleValidationErrors","setHasLocaleValidationErrors","useState","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","currentData","permissionsLayout","useGetRolePermissionLayoutQuery","role","rolePermissions","isLoadingRole","useGetRolePermissionsQuery","skip","refetchOnMountOrArgChange","createRole","useCreateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","handleCreateRoleSubmit","data","formik","current","res","isBaseQueryError","error","setErrors","type","message","permissionsToSend","getPermissions","Array","isArray","length","updateRes","permissions","defaultMessage","toString","replace","err","_jsx","Page","Loading","_jsxs","Main","Title","Formik","initialValues","format","Date","onSubmit","validationSchema","validateOnChange","values","errors","handleReset","handleChange","isSubmitting","Form","_Fragment","Layouts","Header","primaryAction","Flex","width","gap","Button","variant","onClick","resetForm","fullWidth","loading","disabled","startIcon","Check","title","subtitle","navigationAction","Box","display","initial","medium","BackButton","fallback","Content","direction","alignItems","background","padding","shadow","hasRadius","justifyContent","Typography","fontWeight","textColor","UsersRoleNumber","number","Grid","Root","Item","m","xs","Field","Label","TextInput","onChange","value","Error","Textarea","Permissions","isFormDisabled","onLocaleValidationChange","ref","layout","styled","div","theme","colors","primary200","primary100","spaces","primary600","borderRadius","ProtectedCreatePage","useTypedSelector","state","admin_app","settings","roles","create","Protect"],"mappings":"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"}