@strapi/admin 5.30.0 → 5.30.1

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 (342) hide show
  1. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  2. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  3. package/dist/admin/admin/src/components/ContentBox.js.map +1 -1
  4. package/dist/admin/admin/src/components/ContentBox.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/DescriptionComponentRenderer.js.map +1 -1
  6. package/dist/admin/admin/src/components/DescriptionComponentRenderer.mjs.map +1 -1
  7. package/dist/admin/admin/src/components/Filters.js +1 -1
  8. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  9. package/dist/admin/admin/src/components/Filters.mjs +1 -1
  10. package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
  11. package/dist/admin/admin/src/components/Form.js +8 -3
  12. package/dist/admin/admin/src/components/Form.js.map +1 -1
  13. package/dist/admin/admin/src/components/Form.mjs +8 -3
  14. package/dist/admin/admin/src/components/Form.mjs.map +1 -1
  15. package/dist/admin/admin/src/components/FormInputs/Enumeration.js +1 -1
  16. package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
  17. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +1 -1
  18. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
  19. package/dist/admin/admin/src/components/FormInputs/Number.js +1 -1
  20. package/dist/admin/admin/src/components/FormInputs/Number.js.map +1 -1
  21. package/dist/admin/admin/src/components/FormInputs/Number.mjs +1 -1
  22. package/dist/admin/admin/src/components/FormInputs/Number.mjs.map +1 -1
  23. package/dist/admin/admin/src/components/FormInputs/Renderer.js.map +1 -1
  24. package/dist/admin/admin/src/components/FormInputs/Renderer.mjs.map +1 -1
  25. package/dist/admin/admin/src/components/FormInputs/Time.js.map +1 -1
  26. package/dist/admin/admin/src/components/FormInputs/Time.mjs.map +1 -1
  27. package/dist/admin/admin/src/components/GapDropZone.js.map +1 -1
  28. package/dist/admin/admin/src/components/GapDropZone.mjs.map +1 -1
  29. package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -1
  30. package/dist/admin/admin/src/components/GuidedTour/Overview.mjs.map +1 -1
  31. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js.map +1 -1
  32. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs.map +1 -1
  33. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -1
  34. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs.map +1 -1
  35. package/dist/admin/admin/src/components/Layouts/GridLayout.js.map +1 -1
  36. package/dist/admin/admin/src/components/Layouts/GridLayout.mjs.map +1 -1
  37. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +8 -4
  38. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
  39. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +8 -4
  40. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
  41. package/dist/admin/admin/src/components/NpsSurvey.js +5 -3
  42. package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
  43. package/dist/admin/admin/src/components/NpsSurvey.mjs +5 -3
  44. package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
  45. package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
  46. package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
  47. package/dist/admin/admin/src/components/PrivateRoute.js.map +1 -1
  48. package/dist/admin/admin/src/components/PrivateRoute.mjs.map +1 -1
  49. package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
  50. package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
  51. package/dist/admin/admin/src/components/ResizeIndicator.js.map +1 -1
  52. package/dist/admin/admin/src/components/ResizeIndicator.mjs.map +1 -1
  53. package/dist/admin/admin/src/components/Table.js +1 -1
  54. package/dist/admin/admin/src/components/Table.js.map +1 -1
  55. package/dist/admin/admin/src/components/Table.mjs +1 -1
  56. package/dist/admin/admin/src/components/Table.mjs.map +1 -1
  57. package/dist/admin/admin/src/components/Widgets.js.map +1 -1
  58. package/dist/admin/admin/src/components/Widgets.mjs.map +1 -1
  59. package/dist/admin/admin/src/core/apis/CustomFields.js.map +1 -1
  60. package/dist/admin/admin/src/core/apis/CustomFields.mjs.map +1 -1
  61. package/dist/admin/admin/src/core/apis/Plugin.js +0 -1
  62. package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
  63. package/dist/admin/admin/src/core/apis/Plugin.mjs +0 -1
  64. package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
  65. package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
  66. package/dist/admin/admin/src/core/apis/Widgets.mjs.map +1 -1
  67. package/dist/admin/admin/src/core/apis/rbac.js.map +1 -1
  68. package/dist/admin/admin/src/core/apis/rbac.mjs.map +1 -1
  69. package/dist/admin/admin/src/core/apis/router.js.map +1 -1
  70. package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
  71. package/dist/admin/admin/src/features/BackButton.js.map +1 -1
  72. package/dist/admin/admin/src/features/BackButton.mjs.map +1 -1
  73. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  74. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  75. package/dist/admin/admin/src/features/Widgets.js.map +1 -1
  76. package/dist/admin/admin/src/features/Widgets.mjs.map +1 -1
  77. package/dist/admin/admin/src/hooks/usePersistentState.js.map +1 -1
  78. package/dist/admin/admin/src/hooks/usePersistentState.mjs.map +1 -1
  79. package/dist/admin/admin/src/hooks/useRBAC.js.map +1 -1
  80. package/dist/admin/admin/src/hooks/useRBAC.mjs.map +1 -1
  81. package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
  82. package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
  83. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  84. package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
  85. package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.js +2 -2
  86. package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.js.map +1 -1
  87. package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs +2 -2
  88. package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs.map +1 -1
  89. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.js.map +1 -1
  90. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.mjs.map +1 -1
  91. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.js.map +1 -1
  92. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.mjs.map +1 -1
  93. package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.js.map +1 -1
  94. package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.mjs.map +1 -1
  95. package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.js.map +1 -1
  96. package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.mjs.map +1 -1
  97. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
  98. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
  99. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +8 -1
  100. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
  101. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +9 -2
  102. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
  103. package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.js.map +1 -1
  104. package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.mjs.map +1 -1
  105. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  106. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
  107. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
  108. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
  109. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
  110. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
  111. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js.map +1 -1
  112. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs.map +1 -1
  113. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +2 -0
  114. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
  115. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +2 -0
  116. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
  117. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  118. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  119. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
  120. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs.map +1 -1
  121. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/utils/files.js.map +1 -1
  122. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/utils/files.mjs.map +1 -1
  123. package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js.map +1 -1
  124. package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.mjs.map +1 -1
  125. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +9 -2
  126. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
  127. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs +9 -2
  128. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs.map +1 -1
  129. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +9 -2
  130. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
  131. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs +9 -2
  132. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs.map +1 -1
  133. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js.map +1 -1
  134. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.mjs.map +1 -1
  135. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
  136. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs.map +1 -1
  137. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
  138. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs.map +1 -1
  139. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
  140. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs.map +1 -1
  141. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
  142. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs.map +1 -1
  143. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
  144. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
  145. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
  146. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
  147. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js.map +1 -1
  148. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.mjs.map +1 -1
  149. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/permissions.js.map +1 -1
  150. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/permissions.mjs.map +1 -1
  151. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
  152. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
  153. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js +2 -0
  154. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js.map +1 -1
  155. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.mjs +2 -0
  156. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.mjs.map +1 -1
  157. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js +9 -2
  158. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
  159. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs +9 -2
  160. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
  161. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +3 -1
  162. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  163. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs +3 -1
  164. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
  165. package/dist/admin/admin/src/pages/Settings/pages/Users/components/MagicLinkCE.js.map +1 -1
  166. package/dist/admin/admin/src/pages/Settings/pages/Users/components/MagicLinkCE.mjs.map +1 -1
  167. package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.js.map +1 -1
  168. package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.mjs.map +1 -1
  169. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.js.map +1 -1
  170. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.mjs.map +1 -1
  171. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js.map +1 -1
  172. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.mjs.map +1 -1
  173. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
  174. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs.map +1 -1
  175. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js +9 -2
  176. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
  177. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs +9 -2
  178. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
  179. package/dist/admin/admin/src/pages/UseCasePage.js.map +1 -1
  180. package/dist/admin/admin/src/pages/UseCasePage.mjs.map +1 -1
  181. package/dist/admin/admin/src/services/api.js +2 -1
  182. package/dist/admin/admin/src/services/api.js.map +1 -1
  183. package/dist/admin/admin/src/services/api.mjs +2 -1
  184. package/dist/admin/admin/src/services/api.mjs.map +1 -1
  185. package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
  186. package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
  187. package/dist/admin/admin/src/services/transferTokens.js.map +1 -1
  188. package/dist/admin/admin/src/services/transferTokens.mjs.map +1 -1
  189. package/dist/admin/admin/src/services/users.js.map +1 -1
  190. package/dist/admin/admin/src/services/users.mjs.map +1 -1
  191. package/dist/admin/admin/src/services/webhooks.js.map +1 -1
  192. package/dist/admin/admin/src/services/webhooks.mjs.map +1 -1
  193. package/dist/admin/admin/src/utils/cookies.js.map +1 -1
  194. package/dist/admin/admin/src/utils/cookies.mjs.map +1 -1
  195. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  196. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  197. package/dist/admin/admin/src/utils/getPrefixedId.js.map +1 -1
  198. package/dist/admin/admin/src/utils/getPrefixedId.mjs.map +1 -1
  199. package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
  200. package/dist/admin/admin/src/utils/rulesEngine.mjs.map +1 -1
  201. package/dist/admin/admin/src/utils/urls.js.map +1 -1
  202. package/dist/admin/admin/src/utils/urls.mjs.map +1 -1
  203. package/dist/admin/admin/src/utils/users.js.map +1 -1
  204. package/dist/admin/admin/src/utils/users.mjs.map +1 -1
  205. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js.map +1 -1
  206. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.mjs.map +1 -1
  207. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js.map +1 -1
  208. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.mjs.map +1 -1
  209. package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.js.map +1 -1
  210. package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.mjs.map +1 -1
  211. package/dist/admin/ee/admin/src/pages/AuthResponse.js.map +1 -1
  212. package/dist/admin/ee/admin/src/pages/AuthResponse.mjs.map +1 -1
  213. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
  214. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
  215. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +3 -3
  216. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
  217. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs +3 -3
  218. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
  219. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js.map +1 -1
  220. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.mjs.map +1 -1
  221. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.js.map +1 -1
  222. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.mjs.map +1 -1
  223. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js.map +1 -1
  224. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs.map +1 -1
  225. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/MagicLinkEE.js.map +1 -1
  226. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/MagicLinkEE.mjs.map +1 -1
  227. package/dist/admin/ee/admin/src/services/ai.js +14 -1
  228. package/dist/admin/ee/admin/src/services/ai.js.map +1 -1
  229. package/dist/admin/ee/admin/src/services/ai.mjs +14 -2
  230. package/dist/admin/ee/admin/src/services/ai.mjs.map +1 -1
  231. package/dist/admin/ee/admin/src/services/auditLogs.js.map +1 -1
  232. package/dist/admin/ee/admin/src/services/auditLogs.mjs.map +1 -1
  233. package/dist/admin/ee.js +1 -0
  234. package/dist/admin/ee.js.map +1 -1
  235. package/dist/admin/ee.mjs +1 -1
  236. package/dist/admin/src/components/Form.d.ts +1 -1
  237. package/dist/admin/src/core/store/configure.d.ts +2 -2
  238. package/dist/admin/src/core/store/hooks.d.ts +2 -2
  239. package/dist/admin/src/ee.d.ts +1 -1
  240. package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
  241. package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +4 -4
  242. package/dist/admin/src/selectors.d.ts +2 -2
  243. package/dist/admin/src/services/admin.d.ts +6 -6
  244. package/dist/admin/src/services/api.d.ts +1 -1
  245. package/dist/admin/src/services/apiTokens.d.ts +1 -1
  246. package/dist/admin/src/services/auth.d.ts +13 -13
  247. package/dist/admin/src/services/contentApi.d.ts +1 -1
  248. package/dist/admin/src/services/contentManager.d.ts +1 -1
  249. package/dist/admin/src/services/homepage.d.ts +3 -3
  250. package/dist/admin/src/services/transferTokens.d.ts +1 -1
  251. package/dist/admin/src/services/users.d.ts +8 -8
  252. package/dist/admin/src/services/webhooks.d.ts +2 -2
  253. package/dist/admin/tests/utils.d.ts +1 -1
  254. package/dist/ee/admin/src/services/ai.d.ts +6 -3
  255. package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
  256. package/dist/ee/server/src/ai/containers/ai.d.ts +11 -0
  257. package/dist/ee/server/src/ai/containers/ai.d.ts.map +1 -0
  258. package/dist/ee/server/src/ai/controllers/ai.d.ts +1 -0
  259. package/dist/ee/server/src/ai/controllers/ai.d.ts.map +1 -1
  260. package/dist/ee/server/src/ai/routes/ai.d.ts.map +1 -1
  261. package/dist/ee/server/src/index.d.ts +1 -0
  262. package/dist/ee/server/src/index.d.ts.map +1 -1
  263. package/dist/server/ee/server/src/ai/containers/ai.js +18 -0
  264. package/dist/server/ee/server/src/ai/containers/ai.js.map +1 -0
  265. package/dist/server/ee/server/src/ai/containers/ai.mjs +16 -0
  266. package/dist/server/ee/server/src/ai/containers/ai.mjs.map +1 -0
  267. package/dist/server/ee/server/src/ai/controllers/ai.js +6 -0
  268. package/dist/server/ee/server/src/ai/controllers/ai.js.map +1 -1
  269. package/dist/server/ee/server/src/ai/controllers/ai.mjs +6 -0
  270. package/dist/server/ee/server/src/ai/controllers/ai.mjs.map +1 -1
  271. package/dist/server/ee/server/src/ai/routes/ai.js +11 -0
  272. package/dist/server/ee/server/src/ai/routes/ai.js.map +1 -1
  273. package/dist/server/ee/server/src/ai/routes/ai.mjs +11 -0
  274. package/dist/server/ee/server/src/ai/routes/ai.mjs.map +1 -1
  275. package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
  276. package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
  277. package/dist/server/ee/server/src/controllers/authentication-utils/constants.js.map +1 -1
  278. package/dist/server/ee/server/src/controllers/authentication-utils/constants.mjs.map +1 -1
  279. package/dist/server/ee/server/src/controllers/authentication-utils/utils.js.map +1 -1
  280. package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs.map +1 -1
  281. package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
  282. package/dist/server/ee/server/src/controllers/authentication.mjs.map +1 -1
  283. package/dist/server/ee/server/src/controllers/user.js.map +1 -1
  284. package/dist/server/ee/server/src/controllers/user.mjs.map +1 -1
  285. package/dist/server/ee/server/src/index.js +7 -0
  286. package/dist/server/ee/server/src/index.js.map +1 -1
  287. package/dist/server/ee/server/src/index.mjs +7 -0
  288. package/dist/server/ee/server/src/index.mjs.map +1 -1
  289. package/dist/server/ee/server/src/services/auth.js.map +1 -1
  290. package/dist/server/ee/server/src/services/auth.mjs.map +1 -1
  291. package/dist/server/ee/server/src/services/passport/sso.js.map +1 -1
  292. package/dist/server/ee/server/src/services/passport/sso.mjs.map +1 -1
  293. package/dist/server/ee/server/src/utils/index.js.map +1 -1
  294. package/dist/server/ee/server/src/utils/index.mjs.map +1 -1
  295. package/dist/server/server/src/controllers/transfer/index.js.map +1 -1
  296. package/dist/server/server/src/controllers/transfer/index.mjs.map +1 -1
  297. package/dist/server/server/src/controllers/user.js +10 -0
  298. package/dist/server/server/src/controllers/user.js.map +1 -1
  299. package/dist/server/server/src/controllers/user.mjs +10 -0
  300. package/dist/server/server/src/controllers/user.mjs.map +1 -1
  301. package/dist/server/server/src/domain/action/index.js.map +1 -1
  302. package/dist/server/server/src/domain/action/index.mjs.map +1 -1
  303. package/dist/server/server/src/domain/condition/index.js.map +1 -1
  304. package/dist/server/server/src/domain/condition/index.mjs.map +1 -1
  305. package/dist/server/server/src/domain/permission/index.js.map +1 -1
  306. package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
  307. package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
  308. package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
  309. package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
  310. package/dist/server/server/src/routes/serve-admin-panel.mjs.map +1 -1
  311. package/dist/server/server/src/services/api-token.js.map +1 -1
  312. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  313. package/dist/server/server/src/services/auth.js.map +1 -1
  314. package/dist/server/server/src/services/auth.mjs.map +1 -1
  315. package/dist/server/server/src/services/content-type.js.map +1 -1
  316. package/dist/server/server/src/services/content-type.mjs.map +1 -1
  317. package/dist/server/server/src/services/encryption.js.map +1 -1
  318. package/dist/server/server/src/services/encryption.mjs.map +1 -1
  319. package/dist/server/server/src/services/homepage.js.map +1 -1
  320. package/dist/server/server/src/services/homepage.mjs.map +1 -1
  321. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js.map +1 -1
  322. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs.map +1 -1
  323. package/dist/server/server/src/services/permission/permissions-manager/validate.js.map +1 -1
  324. package/dist/server/server/src/services/permission/permissions-manager/validate.mjs.map +1 -1
  325. package/dist/server/server/src/services/role.js.map +1 -1
  326. package/dist/server/server/src/services/role.mjs.map +1 -1
  327. package/dist/server/server/src/services/transfer/token.js.map +1 -1
  328. package/dist/server/server/src/services/transfer/token.mjs.map +1 -1
  329. package/dist/server/server/src/services/user.js.map +1 -1
  330. package/dist/server/server/src/services/user.mjs.map +1 -1
  331. package/dist/server/server/src/utils/index.js.map +1 -1
  332. package/dist/server/server/src/utils/index.mjs.map +1 -1
  333. package/dist/server/server/src/validation/action-provider.js.map +1 -1
  334. package/dist/server/server/src/validation/action-provider.mjs.map +1 -1
  335. package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.js.map +1 -1
  336. package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.mjs.map +1 -1
  337. package/dist/server/server/src/validation/common-validators.js.map +1 -1
  338. package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
  339. package/dist/server/src/controllers/user.d.ts.map +1 -1
  340. package/dist/shared/contracts/ai.d.ts +16 -0
  341. package/dist/shared/contracts/ai.d.ts.map +1 -1
  342. package/package.json +7 -7
@@ -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 gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} startIcon={<Check />}>\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={<BackButton fallback=\"../roles\" />}\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 col={6} 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 col={6} 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","gap","Button","variant","onClick","resetForm","loading","startIcon","Check","title","subtitle","navigationAction","BackButton","fallback","Content","direction","alignItems","Box","background","padding","shadow","hasRadius","justifyContent","Typography","fontWeight","textColor","UsersRoleNumber","number","Grid","Root","Item","col","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 { 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 gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} startIcon={<Check />}>\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 col={6} 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 col={6} 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","gap","Button","variant","onClick","resetForm","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","col","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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"}
@@ -172,8 +172,15 @@ import { Permissions } from './components/Permissions.mjs';
172
172
  id: 'Settings.roles.create.description',
173
173
  defaultMessage: 'Define the rights given to the role'
174
174
  }),
175
- navigationAction: /*#__PURE__*/ jsx(BackButton, {
176
- fallback: "../roles"
175
+ navigationAction: // The back link for mobile works differently; it is placed higher up in the DOM.
176
+ /*#__PURE__*/ jsx(Box, {
177
+ display: {
178
+ initial: 'none',
179
+ medium: 'block'
180
+ },
181
+ children: /*#__PURE__*/ jsx(BackButton, {
182
+ fallback: "../roles"
183
+ })
177
184
  })
178
185
  }),
179
186
  /*#__PURE__*/ jsx(Layouts.Content, {
@@ -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 gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} startIcon={<Check />}>\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={<BackButton fallback=\"../roles\" />}\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 col={6} 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 col={6} 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","gap","Button","variant","onClick","resetForm","loading","startIcon","Check","title","subtitle","navigationAction","BackButton","fallback","Content","direction","alignItems","Box","background","padding","shadow","hasRadius","justifyContent","Typography","fontWeight","textColor","UsersRoleNumber","number","Grid","Root","Item","col","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.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 gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} startIcon={<Check />}>\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 col={6} 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 col={6} 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","gap","Button","variant","onClick","resetForm","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","col","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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"}
@@ -183,8 +183,15 @@ const EditPage = ()=>{
183
183
  id: 'Settings.roles.create.description',
184
184
  defaultMessage: 'Define the rights given to the role'
185
185
  }),
186
- navigationAction: /*#__PURE__*/ jsxRuntime.jsx(BackButton.BackButton, {
187
- fallback: "../roles"
186
+ navigationAction: // The back link for mobile works differently; it is placed higher up in the DOM.
187
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
188
+ display: {
189
+ initial: 'none',
190
+ medium: 'block'
191
+ },
192
+ children: /*#__PURE__*/ jsxRuntime.jsx(BackButton.BackButton, {
193
+ fallback: "../roles"
194
+ })
188
195
  })
189
196
  }),
190
197
  /*#__PURE__*/ jsxRuntime.jsx(Layout.Layouts.Content, {
@@ -1 +1 @@
1
- {"version":3,"file":"EditPage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useMatch } from 'react-router-dom';\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 { useAdminRoles } from '../../../../hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRoleMutation,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\nimport { RoleForm } from './components/RoleForm';\n\nconst EDIT_ROLE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().optional(),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface EditRoleFormValues {\n name: string;\n description: string;\n}\n\nconst EditPage = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const match = useMatch('/settings/roles/:id');\n const id = match?.params.id;\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, data: 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 const {\n roles,\n isLoading: isRoleLoading,\n refetch: refetchRole,\n } = useAdminRoles(\n { id },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n const role = roles[0] ?? {};\n\n const { data: permissions, isLoading: isLoadingPermissions } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [updateRole] = useUpdateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n if (!id) {\n return <Navigate to=\"/settings/roles\" />;\n }\n\n const handleEditRoleSubmit = async (\n data: EditRoleFormValues,\n formik: FormikHelpers<EditRoleFormValues>\n ) => {\n try {\n const { permissionsToSend, didUpdateConditions } =\n permissionsRef.current?.getPermissions() ?? {};\n\n const res = await updateRole({\n id,\n ...data,\n });\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 if (role.code !== 'strapi-super-admin' && permissionsToSend) {\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 if (didUpdateConditions) {\n trackUsage('didUpdateConditions');\n }\n }\n\n permissionsRef.current?.setFormAfterSubmit();\n\n await refetchRole();\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const isFormDisabled = !isRoleLoading && role.code === 'strapi-super-admin';\n\n if (isLoadingPermissionsLayout || isRoleLoading || isLoadingPermissions || !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 enableReinitialize\n initialValues={\n {\n name: role.name ?? '',\n description: role.description ?? '',\n } satisfies EditRoleFormValues\n }\n onSubmit={handleEditRoleSubmit}\n validationSchema={EDIT_ROLE_SCHEMA}\n validateOnChange={false}\n >\n {({ handleSubmit, values, errors, handleChange, handleBlur, isSubmitting }) => (\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n primaryAction={\n <Flex gap={2}>\n <Button\n type=\"submit\"\n startIcon={<Check />}\n disabled={role.code === 'strapi-super-admin'}\n loading={isSubmitting}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.edit.title',\n defaultMessage: 'Edit a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={<BackButton fallback=\"../roles\" />}\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <RoleForm\n disabled={isFormDisabled}\n errors={errors}\n values={values}\n onChange={handleChange}\n onBlur={handleBlur}\n role={role}\n />\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={isFormDisabled}\n permissions={permissions}\n ref={permissionsRef}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst ProtectedEditPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.update\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditPage />\n </Page.Protect>\n );\n};\n\nexport { EditPage, ProtectedEditPage };\nexport type { EditRoleFormValues };\n"],"names":["EDIT_ROLE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","optional","EditPage","toggleNotification","useNotification","formatMessage","useIntl","match","useMatch","params","permissionsRef","React","useRef","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","data","permissionsLayout","useGetRolePermissionLayoutQuery","role","roles","isRoleLoading","refetch","refetchRole","useAdminRoles","refetchOnMountOrArgChange","permissions","isLoadingPermissions","useGetRolePermissionsQuery","skip","updateRole","useUpdateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","_jsx","Navigate","to","handleEditRoleSubmit","formik","permissionsToSend","didUpdateConditions","current","getPermissions","res","isBaseQueryError","error","setErrors","type","message","code","updateRes","setFormAfterSubmit","defaultMessage","isFormDisabled","Page","Loading","_jsxs","Main","Title","Formik","enableReinitialize","initialValues","onSubmit","validationSchema","validateOnChange","handleSubmit","values","errors","handleChange","handleBlur","isSubmitting","form","Layouts","Header","primaryAction","Flex","gap","Button","startIcon","Check","disabled","loading","title","subtitle","navigationAction","BackButton","fallback","Content","direction","alignItems","RoleForm","onChange","onBlur","Box","shadow","hasRadius","Permissions","ref","layout","ProtectedEditPage","useTypedSelector","state","admin_app","settings","update","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"EditPage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useMatch } from 'react-router-dom';\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 { useAdminRoles } from '../../../../hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRoleMutation,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\nimport { RoleForm } from './components/RoleForm';\n\nconst EDIT_ROLE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().optional(),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface EditRoleFormValues {\n name: string;\n description: string;\n}\n\nconst EditPage = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const match = useMatch('/settings/roles/:id');\n const id = match?.params.id;\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, data: 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 const {\n roles,\n isLoading: isRoleLoading,\n refetch: refetchRole,\n } = useAdminRoles(\n { id },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n const role = roles[0] ?? {};\n\n const { data: permissions, isLoading: isLoadingPermissions } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [updateRole] = useUpdateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n if (!id) {\n return <Navigate to=\"/settings/roles\" />;\n }\n\n const handleEditRoleSubmit = async (\n data: EditRoleFormValues,\n formik: FormikHelpers<EditRoleFormValues>\n ) => {\n try {\n const { permissionsToSend, didUpdateConditions } =\n permissionsRef.current?.getPermissions() ?? {};\n\n const res = await updateRole({\n id,\n ...data,\n });\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 if (role.code !== 'strapi-super-admin' && permissionsToSend) {\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 if (didUpdateConditions) {\n trackUsage('didUpdateConditions');\n }\n }\n\n permissionsRef.current?.setFormAfterSubmit();\n\n await refetchRole();\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const isFormDisabled = !isRoleLoading && role.code === 'strapi-super-admin';\n\n if (isLoadingPermissionsLayout || isRoleLoading || isLoadingPermissions || !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 enableReinitialize\n initialValues={\n {\n name: role.name ?? '',\n description: role.description ?? '',\n } satisfies EditRoleFormValues\n }\n onSubmit={handleEditRoleSubmit}\n validationSchema={EDIT_ROLE_SCHEMA}\n validateOnChange={false}\n >\n {({ handleSubmit, values, errors, handleChange, handleBlur, isSubmitting }) => (\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n primaryAction={\n <Flex gap={2}>\n <Button\n type=\"submit\"\n startIcon={<Check />}\n disabled={role.code === 'strapi-super-admin'}\n loading={isSubmitting}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.edit.title',\n defaultMessage: 'Edit 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 <RoleForm\n disabled={isFormDisabled}\n errors={errors}\n values={values}\n onChange={handleChange}\n onBlur={handleBlur}\n role={role}\n />\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={isFormDisabled}\n permissions={permissions}\n ref={permissionsRef}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst ProtectedEditPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.update\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditPage />\n </Page.Protect>\n );\n};\n\nexport { EditPage, ProtectedEditPage };\nexport type { EditRoleFormValues };\n"],"names":["EDIT_ROLE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","optional","EditPage","toggleNotification","useNotification","formatMessage","useIntl","match","useMatch","params","permissionsRef","React","useRef","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","data","permissionsLayout","useGetRolePermissionLayoutQuery","role","roles","isRoleLoading","refetch","refetchRole","useAdminRoles","refetchOnMountOrArgChange","permissions","isLoadingPermissions","useGetRolePermissionsQuery","skip","updateRole","useUpdateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","_jsx","Navigate","to","handleEditRoleSubmit","formik","permissionsToSend","didUpdateConditions","current","getPermissions","res","isBaseQueryError","error","setErrors","type","message","code","updateRes","setFormAfterSubmit","defaultMessage","isFormDisabled","Page","Loading","_jsxs","Main","Title","Formik","enableReinitialize","initialValues","onSubmit","validationSchema","validateOnChange","handleSubmit","values","errors","handleChange","handleBlur","isSubmitting","form","Layouts","Header","primaryAction","Flex","gap","Button","startIcon","Check","disabled","loading","title","subtitle","navigationAction","Box","display","initial","medium","BackButton","fallback","Content","direction","alignItems","RoleForm","onChange","onBlur","shadow","hasRadius","Permissions","ref","layout","ProtectedEditPage","useTypedSelector","state","admin_app","settings","update","Protect"],"mappings":"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"}
@@ -161,8 +161,15 @@ const EditPage = ()=>{
161
161
  id: 'Settings.roles.create.description',
162
162
  defaultMessage: 'Define the rights given to the role'
163
163
  }),
164
- navigationAction: /*#__PURE__*/ jsx(BackButton, {
165
- fallback: "../roles"
164
+ navigationAction: // The back link for mobile works differently; it is placed higher up in the DOM.
165
+ /*#__PURE__*/ jsx(Box, {
166
+ display: {
167
+ initial: 'none',
168
+ medium: 'block'
169
+ },
170
+ children: /*#__PURE__*/ jsx(BackButton, {
171
+ fallback: "../roles"
172
+ })
166
173
  })
167
174
  }),
168
175
  /*#__PURE__*/ jsx(Layouts.Content, {
@@ -1 +1 @@
1
- {"version":3,"file":"EditPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useMatch } from 'react-router-dom';\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 { useAdminRoles } from '../../../../hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRoleMutation,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\nimport { RoleForm } from './components/RoleForm';\n\nconst EDIT_ROLE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().optional(),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface EditRoleFormValues {\n name: string;\n description: string;\n}\n\nconst EditPage = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const match = useMatch('/settings/roles/:id');\n const id = match?.params.id;\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, data: 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 const {\n roles,\n isLoading: isRoleLoading,\n refetch: refetchRole,\n } = useAdminRoles(\n { id },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n const role = roles[0] ?? {};\n\n const { data: permissions, isLoading: isLoadingPermissions } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [updateRole] = useUpdateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n if (!id) {\n return <Navigate to=\"/settings/roles\" />;\n }\n\n const handleEditRoleSubmit = async (\n data: EditRoleFormValues,\n formik: FormikHelpers<EditRoleFormValues>\n ) => {\n try {\n const { permissionsToSend, didUpdateConditions } =\n permissionsRef.current?.getPermissions() ?? {};\n\n const res = await updateRole({\n id,\n ...data,\n });\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 if (role.code !== 'strapi-super-admin' && permissionsToSend) {\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 if (didUpdateConditions) {\n trackUsage('didUpdateConditions');\n }\n }\n\n permissionsRef.current?.setFormAfterSubmit();\n\n await refetchRole();\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const isFormDisabled = !isRoleLoading && role.code === 'strapi-super-admin';\n\n if (isLoadingPermissionsLayout || isRoleLoading || isLoadingPermissions || !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 enableReinitialize\n initialValues={\n {\n name: role.name ?? '',\n description: role.description ?? '',\n } satisfies EditRoleFormValues\n }\n onSubmit={handleEditRoleSubmit}\n validationSchema={EDIT_ROLE_SCHEMA}\n validateOnChange={false}\n >\n {({ handleSubmit, values, errors, handleChange, handleBlur, isSubmitting }) => (\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n primaryAction={\n <Flex gap={2}>\n <Button\n type=\"submit\"\n startIcon={<Check />}\n disabled={role.code === 'strapi-super-admin'}\n loading={isSubmitting}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.edit.title',\n defaultMessage: 'Edit a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={<BackButton fallback=\"../roles\" />}\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <RoleForm\n disabled={isFormDisabled}\n errors={errors}\n values={values}\n onChange={handleChange}\n onBlur={handleBlur}\n role={role}\n />\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={isFormDisabled}\n permissions={permissions}\n ref={permissionsRef}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst ProtectedEditPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.update\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditPage />\n </Page.Protect>\n );\n};\n\nexport { EditPage, ProtectedEditPage };\nexport type { EditRoleFormValues };\n"],"names":["EDIT_ROLE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","optional","EditPage","toggleNotification","useNotification","formatMessage","useIntl","match","useMatch","params","permissionsRef","React","useRef","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","data","permissionsLayout","useGetRolePermissionLayoutQuery","role","roles","isRoleLoading","refetch","refetchRole","useAdminRoles","refetchOnMountOrArgChange","permissions","isLoadingPermissions","useGetRolePermissionsQuery","skip","updateRole","useUpdateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","_jsx","Navigate","to","handleEditRoleSubmit","formik","permissionsToSend","didUpdateConditions","current","getPermissions","res","isBaseQueryError","error","setErrors","type","message","code","updateRes","setFormAfterSubmit","defaultMessage","isFormDisabled","Page","Loading","_jsxs","Main","Title","Formik","enableReinitialize","initialValues","onSubmit","validationSchema","validateOnChange","handleSubmit","values","errors","handleChange","handleBlur","isSubmitting","form","Layouts","Header","primaryAction","Flex","gap","Button","startIcon","Check","disabled","loading","title","subtitle","navigationAction","BackButton","fallback","Content","direction","alignItems","RoleForm","onChange","onBlur","Box","shadow","hasRadius","Permissions","ref","layout","ProtectedEditPage","useTypedSelector","state","admin_app","settings","update","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"EditPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useMatch } from 'react-router-dom';\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 { useAdminRoles } from '../../../../hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRoleMutation,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\nimport { RoleForm } from './components/RoleForm';\n\nconst EDIT_ROLE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().optional(),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface EditRoleFormValues {\n name: string;\n description: string;\n}\n\nconst EditPage = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const match = useMatch('/settings/roles/:id');\n const id = match?.params.id;\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, data: 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 const {\n roles,\n isLoading: isRoleLoading,\n refetch: refetchRole,\n } = useAdminRoles(\n { id },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n const role = roles[0] ?? {};\n\n const { data: permissions, isLoading: isLoadingPermissions } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [updateRole] = useUpdateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n if (!id) {\n return <Navigate to=\"/settings/roles\" />;\n }\n\n const handleEditRoleSubmit = async (\n data: EditRoleFormValues,\n formik: FormikHelpers<EditRoleFormValues>\n ) => {\n try {\n const { permissionsToSend, didUpdateConditions } =\n permissionsRef.current?.getPermissions() ?? {};\n\n const res = await updateRole({\n id,\n ...data,\n });\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 if (role.code !== 'strapi-super-admin' && permissionsToSend) {\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 if (didUpdateConditions) {\n trackUsage('didUpdateConditions');\n }\n }\n\n permissionsRef.current?.setFormAfterSubmit();\n\n await refetchRole();\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const isFormDisabled = !isRoleLoading && role.code === 'strapi-super-admin';\n\n if (isLoadingPermissionsLayout || isRoleLoading || isLoadingPermissions || !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 enableReinitialize\n initialValues={\n {\n name: role.name ?? '',\n description: role.description ?? '',\n } satisfies EditRoleFormValues\n }\n onSubmit={handleEditRoleSubmit}\n validationSchema={EDIT_ROLE_SCHEMA}\n validateOnChange={false}\n >\n {({ handleSubmit, values, errors, handleChange, handleBlur, isSubmitting }) => (\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n primaryAction={\n <Flex gap={2}>\n <Button\n type=\"submit\"\n startIcon={<Check />}\n disabled={role.code === 'strapi-super-admin'}\n loading={isSubmitting}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.edit.title',\n defaultMessage: 'Edit 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 <RoleForm\n disabled={isFormDisabled}\n errors={errors}\n values={values}\n onChange={handleChange}\n onBlur={handleBlur}\n role={role}\n />\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={isFormDisabled}\n permissions={permissions}\n ref={permissionsRef}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst ProtectedEditPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.update\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditPage />\n </Page.Protect>\n );\n};\n\nexport { EditPage, ProtectedEditPage };\nexport type { EditRoleFormValues };\n"],"names":["EDIT_ROLE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","optional","EditPage","toggleNotification","useNotification","formatMessage","useIntl","match","useMatch","params","permissionsRef","React","useRef","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","data","permissionsLayout","useGetRolePermissionLayoutQuery","role","roles","isRoleLoading","refetch","refetchRole","useAdminRoles","refetchOnMountOrArgChange","permissions","isLoadingPermissions","useGetRolePermissionsQuery","skip","updateRole","useUpdateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","_jsx","Navigate","to","handleEditRoleSubmit","formik","permissionsToSend","didUpdateConditions","current","getPermissions","res","isBaseQueryError","error","setErrors","type","message","code","updateRes","setFormAfterSubmit","defaultMessage","isFormDisabled","Page","Loading","_jsxs","Main","Title","Formik","enableReinitialize","initialValues","onSubmit","validationSchema","validateOnChange","handleSubmit","values","errors","handleChange","handleBlur","isSubmitting","form","Layouts","Header","primaryAction","Flex","gap","Button","startIcon","Check","disabled","loading","title","subtitle","navigationAction","Box","display","initial","medium","BackButton","fallback","Content","direction","alignItems","RoleForm","onChange","onBlur","shadow","hasRadius","Permissions","ref","layout","ProtectedEditPage","useTypedSelector","state","admin_app","settings","update","Protect"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ListPage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Button,\n Dialog,\n Table,\n Tbody,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Duplicate, Pencil, Plus, Trash } from '@strapi/icons';\nimport { produce } from 'immer';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { SearchInput } from '../../../../components/SearchInput';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAdminRoles, AdminRole } from '../../../../hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useFetchClient } from '../../../../hooks/useFetchClient';\nimport { useQueryParams } from '../../../../hooks/useQueryParams';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { selectAdminPermissions } from '../../../../selectors';\nimport { isFetchError } from '../../../../utils/getFetchClient';\n\nimport { RoleRow, RoleRowProps } from './components/RoleRow';\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector(selectAdminPermissions);\n const { formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const [isWarningDeleteAllOpened, setIsWarningDeleteAllOpenend] = React.useState(false);\n const [{ query }] = useQueryParams<{ _q?: string }>();\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canCreate, canDelete, canRead, canUpdate },\n } = useRBAC(permissions.settings?.roles);\n\n const { roles, refetch: refetchRoles } = useAdminRoles(\n { filters: query?._q ? { name: { $containsi: query._q } } : undefined },\n {\n refetchOnMountOrArgChange: true,\n skip: isLoadingForPermissions || !canRead,\n }\n );\n\n const navigate = useNavigate();\n const [{ roleToDelete }, dispatch] = React.useReducer(reducer, initialState);\n const { post } = useFetchClient();\n\n const handleDeleteData = async () => {\n try {\n dispatch({\n type: 'ON_REMOVE_ROLES',\n });\n\n await post('/admin/roles/batch-delete', {\n ids: [roleToDelete],\n });\n\n await refetchRoles();\n\n dispatch({\n type: 'RESET_DATA_TO_DELETE',\n });\n } catch (error) {\n if (isFetchError(error)) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }\n };\n\n const handleNewRoleClick = () => navigate('new');\n\n const handleToggleModal = () => setIsWarningDeleteAllOpenend((prev) => !prev);\n\n const handleClickDelete = (role: AdminRole) => (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (role.usersCount) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: 'Roles.ListPage.notification.delete-not-allowed' }),\n });\n } else {\n dispatch({\n type: 'SET_ROLE_TO_DELETE',\n id: role.id,\n });\n\n handleToggleModal();\n }\n };\n\n const handleClickDuplicate = (role: AdminRole) => (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n navigate(`duplicate/${role.id}`);\n };\n\n const rowCount = roles.length + 1;\n const colCount = 6;\n\n if (isLoadingForPermissions) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Layouts.Header\n primaryAction={\n canCreate ? (\n <Button onClick={handleNewRoleClick} startIcon={<Plus />} size=\"S\">\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </Button>\n ) : null\n }\n title={formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n />\n {canRead && (\n <Layouts.Action\n startActions={\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n {\n target: formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n }),\n }\n )}\n />\n }\n />\n )}\n {canRead && (\n <Layouts.Content>\n <Table\n colCount={colCount}\n rowCount={rowCount}\n footer={\n canCreate ? (\n <TFooter cursor=\"pointer\" onClick={handleNewRoleClick} icon={<Plus />}>\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </TFooter>\n ) : null\n }\n >\n <Thead>\n <Tr aria-rowindex={1}>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'global.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {roles?.map((role, index) => (\n <RoleRow\n cursor=\"pointer\"\n key={role.id}\n id={role.id}\n name={role.name}\n description={role.description}\n usersCount={role.usersCount}\n icons={\n [\n canCreate &&\n ({\n onClick: handleClickDuplicate(role),\n label: formatMessage({\n id: 'app.utils.duplicate',\n defaultMessage: 'Duplicate',\n }),\n children: <Duplicate />,\n } satisfies RoleRowProps['icons'][number]),\n canUpdate &&\n ({\n onClick: () => navigate(role.id.toString()),\n label: formatMessage({ id: 'app.utils.edit', defaultMessage: 'Edit' }),\n children: <Pencil />,\n } satisfies RoleRowProps['icons'][number]),\n canDelete &&\n ({\n onClick: handleClickDelete(role),\n label: formatMessage({ id: 'global.delete', defaultMessage: 'Delete' }),\n children: <Trash />,\n } satisfies RoleRowProps['icons'][number]),\n ].filter(Boolean) as RoleRowProps['icons']\n }\n rowIndex={index + 2}\n canUpdate={canUpdate}\n />\n ))}\n </Tbody>\n </Table>\n </Layouts.Content>\n )}\n <Dialog.Root open={isWarningDeleteAllOpened} onOpenChange={handleToggleModal}>\n <ConfirmDialog onConfirm={handleDeleteData} />\n </Dialog.Root>\n </Page.Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Reducer\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * TODO: do we actually need this reducer? It's not doing a lot...\n */\n\ninterface State {\n roleToDelete: null | AdminRole['id'];\n showModalConfirmButtonLoading: boolean;\n shouldRefetchData: boolean;\n}\n\nconst initialState = {\n roleToDelete: null,\n showModalConfirmButtonLoading: false,\n shouldRefetchData: false,\n} satisfies State;\n\ninterface SetRoleToDeleteAction extends Pick<AdminRole, 'id'> {\n type: 'SET_ROLE_TO_DELETE';\n}\n\ninterface ResetDataToDeleteAction {\n type: 'RESET_DATA_TO_DELETE';\n}\n\ninterface OnRemoveRolesAction {\n type: 'ON_REMOVE_ROLES';\n}\n\ninterface OnRemoveRolesSucceededAction {\n type: 'ON_REMOVE_ROLES_SUCCEEDED';\n}\n\ntype Action =\n | SetRoleToDeleteAction\n | ResetDataToDeleteAction\n | OnRemoveRolesAction\n | OnRemoveRolesSucceededAction;\n\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_REMOVE_ROLES': {\n draftState.showModalConfirmButtonLoading = true;\n break;\n }\n case 'ON_REMOVE_ROLES_SUCCEEDED': {\n draftState.shouldRefetchData = true;\n draftState.roleToDelete = null;\n break;\n }\n case 'RESET_DATA_TO_DELETE': {\n draftState.shouldRefetchData = false;\n draftState.roleToDelete = null;\n draftState.showModalConfirmButtonLoading = false;\n break;\n }\n case 'SET_ROLE_TO_DELETE': {\n draftState.roleToDelete = action.id;\n\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.roles.read);\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage, ListPage };\n"],"names":["ListPage","formatMessage","useIntl","permissions","useTypedSelector","selectAdminPermissions","formatAPIError","useAPIErrorHandler","toggleNotification","useNotification","isWarningDeleteAllOpened","setIsWarningDeleteAllOpenend","React","useState","query","useQueryParams","isLoading","isLoadingForPermissions","allowedActions","canCreate","canDelete","canRead","canUpdate","useRBAC","settings","roles","refetch","refetchRoles","useAdminRoles","filters","_q","name","$containsi","undefined","refetchOnMountOrArgChange","skip","navigate","useNavigate","roleToDelete","dispatch","useReducer","reducer","initialState","post","useFetchClient","handleDeleteData","type","ids","error","isFetchError","message","handleNewRoleClick","handleToggleModal","prev","handleClickDelete","role","e","preventDefault","stopPropagation","usersCount","id","handleClickDuplicate","rowCount","length","colCount","_jsx","Page","Loading","_jsxs","Main","Title","defaultMessage","Layouts","Header","primaryAction","Button","onClick","startIcon","Plus","size","title","subtitle","Action","startActions","SearchInput","label","target","Content","Table","footer","TFooter","cursor","icon","Thead","Tr","aria-rowindex","Th","Typography","variant","textColor","VisuallyHidden","Tbody","map","index","RoleRow","description","icons","children","Duplicate","toString","Pencil","Trash","filter","Boolean","rowIndex","Dialog","Root","open","onOpenChange","ConfirmDialog","onConfirm","showModalConfirmButtonLoading","shouldRefetchData","state","action","produce","draftState","ProtectedListPage","admin_app","read","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"ListPage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Button,\n Dialog,\n Table,\n Tbody,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Duplicate, Pencil, Plus, Trash } from '@strapi/icons';\nimport { produce } from 'immer';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { SearchInput } from '../../../../components/SearchInput';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAdminRoles, AdminRole } from '../../../../hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useFetchClient } from '../../../../hooks/useFetchClient';\nimport { useQueryParams } from '../../../../hooks/useQueryParams';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { selectAdminPermissions } from '../../../../selectors';\nimport { isFetchError } from '../../../../utils/getFetchClient';\n\nimport { RoleRow, RoleRowProps } from './components/RoleRow';\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector(selectAdminPermissions);\n const { formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const [isWarningDeleteAllOpened, setIsWarningDeleteAllOpenend] = React.useState(false);\n const [{ query }] = useQueryParams<{ _q?: string }>();\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canCreate, canDelete, canRead, canUpdate },\n } = useRBAC(permissions.settings?.roles);\n\n const { roles, refetch: refetchRoles } = useAdminRoles(\n { filters: query?._q ? { name: { $containsi: query._q } } : undefined },\n {\n refetchOnMountOrArgChange: true,\n skip: isLoadingForPermissions || !canRead,\n }\n );\n\n const navigate = useNavigate();\n const [{ roleToDelete }, dispatch] = React.useReducer(reducer, initialState);\n const { post } = useFetchClient();\n\n const handleDeleteData = async () => {\n try {\n dispatch({\n type: 'ON_REMOVE_ROLES',\n });\n\n await post('/admin/roles/batch-delete', {\n ids: [roleToDelete],\n });\n\n await refetchRoles();\n\n dispatch({\n type: 'RESET_DATA_TO_DELETE',\n });\n } catch (error) {\n if (isFetchError(error)) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }\n };\n\n const handleNewRoleClick = () => navigate('new');\n\n const handleToggleModal = () => setIsWarningDeleteAllOpenend((prev) => !prev);\n\n const handleClickDelete = (role: AdminRole) => (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (role.usersCount) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: 'Roles.ListPage.notification.delete-not-allowed' }),\n });\n } else {\n dispatch({\n type: 'SET_ROLE_TO_DELETE',\n id: role.id,\n });\n\n handleToggleModal();\n }\n };\n\n const handleClickDuplicate = (role: AdminRole) => (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n navigate(`duplicate/${role.id}`);\n };\n\n const rowCount = roles.length + 1;\n const colCount = 6;\n\n if (isLoadingForPermissions) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Layouts.Header\n primaryAction={\n canCreate ? (\n <Button onClick={handleNewRoleClick} startIcon={<Plus />} size=\"S\">\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </Button>\n ) : null\n }\n title={formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n />\n {canRead && (\n <Layouts.Action\n startActions={\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n {\n target: formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n }),\n }\n )}\n />\n }\n />\n )}\n {canRead && (\n <Layouts.Content>\n <Table\n colCount={colCount}\n rowCount={rowCount}\n footer={\n canCreate ? (\n <TFooter cursor=\"pointer\" onClick={handleNewRoleClick} icon={<Plus />}>\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </TFooter>\n ) : null\n }\n >\n <Thead>\n <Tr aria-rowindex={1}>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'global.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {roles?.map((role, index) => (\n <RoleRow\n cursor=\"pointer\"\n key={role.id}\n id={role.id}\n name={role.name}\n description={role.description}\n usersCount={role.usersCount}\n icons={\n [\n canCreate &&\n ({\n onClick: handleClickDuplicate(role),\n label: formatMessage({\n id: 'app.utils.duplicate',\n defaultMessage: 'Duplicate',\n }),\n children: <Duplicate />,\n } satisfies RoleRowProps['icons'][number]),\n canUpdate &&\n ({\n onClick: () => navigate(role.id.toString()),\n label: formatMessage({ id: 'app.utils.edit', defaultMessage: 'Edit' }),\n children: <Pencil />,\n } satisfies RoleRowProps['icons'][number]),\n canDelete &&\n ({\n onClick: handleClickDelete(role),\n label: formatMessage({ id: 'global.delete', defaultMessage: 'Delete' }),\n children: <Trash />,\n } satisfies RoleRowProps['icons'][number]),\n ].filter(Boolean) as RoleRowProps['icons']\n }\n rowIndex={index + 2}\n canUpdate={canUpdate}\n />\n ))}\n </Tbody>\n </Table>\n </Layouts.Content>\n )}\n <Dialog.Root open={isWarningDeleteAllOpened} onOpenChange={handleToggleModal}>\n <ConfirmDialog onConfirm={handleDeleteData} />\n </Dialog.Root>\n </Page.Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Reducer\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * TODO: do we actually need this reducer? It's not doing a lot...\n */\n\ninterface State {\n roleToDelete: null | AdminRole['id'];\n showModalConfirmButtonLoading: boolean;\n shouldRefetchData: boolean;\n}\n\nconst initialState = {\n roleToDelete: null,\n showModalConfirmButtonLoading: false,\n shouldRefetchData: false,\n} satisfies State;\n\ninterface SetRoleToDeleteAction extends Pick<AdminRole, 'id'> {\n type: 'SET_ROLE_TO_DELETE';\n}\n\ninterface ResetDataToDeleteAction {\n type: 'RESET_DATA_TO_DELETE';\n}\n\ninterface OnRemoveRolesAction {\n type: 'ON_REMOVE_ROLES';\n}\n\ninterface OnRemoveRolesSucceededAction {\n type: 'ON_REMOVE_ROLES_SUCCEEDED';\n}\n\ntype Action =\n | SetRoleToDeleteAction\n | ResetDataToDeleteAction\n | OnRemoveRolesAction\n | OnRemoveRolesSucceededAction;\n\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_REMOVE_ROLES': {\n draftState.showModalConfirmButtonLoading = true;\n break;\n }\n case 'ON_REMOVE_ROLES_SUCCEEDED': {\n draftState.shouldRefetchData = true;\n draftState.roleToDelete = null;\n break;\n }\n case 'RESET_DATA_TO_DELETE': {\n draftState.shouldRefetchData = false;\n draftState.roleToDelete = null;\n draftState.showModalConfirmButtonLoading = false;\n break;\n }\n case 'SET_ROLE_TO_DELETE': {\n draftState.roleToDelete = action.id;\n\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.roles.read);\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage, ListPage };\n"],"names":["ListPage","formatMessage","useIntl","permissions","useTypedSelector","selectAdminPermissions","formatAPIError","useAPIErrorHandler","toggleNotification","useNotification","isWarningDeleteAllOpened","setIsWarningDeleteAllOpenend","React","useState","query","useQueryParams","isLoading","isLoadingForPermissions","allowedActions","canCreate","canDelete","canRead","canUpdate","useRBAC","settings","roles","refetch","refetchRoles","useAdminRoles","filters","_q","name","$containsi","undefined","refetchOnMountOrArgChange","skip","navigate","useNavigate","roleToDelete","dispatch","useReducer","reducer","initialState","post","useFetchClient","handleDeleteData","type","ids","error","isFetchError","message","handleNewRoleClick","handleToggleModal","prev","handleClickDelete","role","e","preventDefault","stopPropagation","usersCount","id","handleClickDuplicate","rowCount","length","colCount","_jsx","Page","Loading","_jsxs","Main","Title","defaultMessage","Layouts","Header","primaryAction","Button","onClick","startIcon","Plus","size","title","subtitle","Action","startActions","SearchInput","label","target","Content","Table","footer","TFooter","cursor","icon","Thead","Tr","aria-rowindex","Th","Typography","variant","textColor","VisuallyHidden","Tbody","map","index","RoleRow","description","icons","children","Duplicate","toString","Pencil","Trash","filter","Boolean","rowIndex","Dialog","Root","open","onOpenChange","ConfirmDialog","onConfirm","showModalConfirmButtonLoading","shouldRefetchData","state","action","produce","draftState","ProtectedListPage","admin_app","read","Protect"],"mappings":"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"}