@strapi/admin 4.15.5-alpha.0 → 4.15.5-alpha.2

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 (202) hide show
  1. package/dist/_chunks/{AuthenticatedApp-f7762ffc.js → AuthenticatedApp-4b160235.js} +21 -21
  2. package/dist/_chunks/{AuthenticatedApp-f7762ffc.js.map → AuthenticatedApp-4b160235.js.map} +1 -1
  3. package/dist/_chunks/{AuthenticatedApp-cdd2864d.mjs → AuthenticatedApp-fa931d1d.mjs} +21 -21
  4. package/dist/_chunks/{AuthenticatedApp-cdd2864d.mjs.map → AuthenticatedApp-fa931d1d.mjs.map} +1 -1
  5. package/dist/_chunks/{HomePage-b8295a09.mjs → HomePage-8e98be60.mjs} +4 -4
  6. package/dist/_chunks/{HomePage-b8295a09.mjs.map → HomePage-8e98be60.mjs.map} +1 -1
  7. package/dist/_chunks/{HomePage-b616b5dd.mjs → HomePage-9bda39b5.mjs} +4 -4
  8. package/dist/_chunks/{HomePage-b616b5dd.mjs.map → HomePage-9bda39b5.mjs.map} +1 -1
  9. package/dist/_chunks/{HomePage-1d4bec73.js → HomePage-b6967648.js} +4 -4
  10. package/dist/_chunks/{HomePage-1d4bec73.js.map → HomePage-b6967648.js.map} +1 -1
  11. package/dist/_chunks/{HomePage-71ca4441.js → HomePage-b91d1592.js} +4 -4
  12. package/dist/_chunks/{HomePage-71ca4441.js.map → HomePage-b91d1592.js.map} +1 -1
  13. package/dist/_chunks/{InstalledPluginsPage-38e390ab.js → InstalledPluginsPage-d4b90e9c.js} +3 -3
  14. package/dist/_chunks/{InstalledPluginsPage-38e390ab.js.map → InstalledPluginsPage-d4b90e9c.js.map} +1 -1
  15. package/dist/_chunks/{InstalledPluginsPage-b5010373.mjs → InstalledPluginsPage-ee6d69b0.mjs} +3 -3
  16. package/dist/_chunks/{InstalledPluginsPage-b5010373.mjs.map → InstalledPluginsPage-ee6d69b0.mjs.map} +1 -1
  17. package/dist/_chunks/{Login-37c8f863.mjs → Login-4fc5dcbb.mjs} +2 -2
  18. package/dist/_chunks/{Login-37c8f863.mjs.map → Login-4fc5dcbb.mjs.map} +1 -1
  19. package/dist/_chunks/{Login-6400aa3b.js → Login-5fbf37c3.js} +2 -2
  20. package/dist/_chunks/{Login-6400aa3b.js.map → Login-5fbf37c3.js.map} +1 -1
  21. package/dist/_chunks/{MarketplacePage-4c8d674b.mjs → MarketplacePage-ec9bf1db.mjs} +3 -3
  22. package/dist/_chunks/{MarketplacePage-4c8d674b.mjs.map → MarketplacePage-ec9bf1db.mjs.map} +1 -1
  23. package/dist/_chunks/{MarketplacePage-f01cf836.js → MarketplacePage-ff0d02c6.js} +3 -3
  24. package/dist/_chunks/{MarketplacePage-f01cf836.js.map → MarketplacePage-ff0d02c6.js.map} +1 -1
  25. package/dist/_chunks/{ProfilePage-a970034d.js → ProfilePage-96a8404e.js} +56 -8
  26. package/dist/_chunks/ProfilePage-96a8404e.js.map +1 -0
  27. package/dist/_chunks/{ProfilePage-7c3e5ad6.mjs → ProfilePage-caeace8c.mjs} +56 -8
  28. package/dist/_chunks/ProfilePage-caeace8c.mjs.map +1 -0
  29. package/dist/_chunks/{build-0fb2b1db.js → build-b285bccd.js} +2 -2
  30. package/dist/_chunks/{build-0fb2b1db.js.map → build-b285bccd.js.map} +1 -1
  31. package/dist/_chunks/{build-0a74f94d.mjs → build-f011d8dc.mjs} +2 -2
  32. package/dist/_chunks/{build-0a74f94d.mjs.map → build-f011d8dc.mjs.map} +1 -1
  33. package/dist/_chunks/{constants-8b2ba8d0.mjs → constants-129cf022.mjs} +6 -6
  34. package/dist/_chunks/{constants-8b2ba8d0.mjs.map → constants-129cf022.mjs.map} +1 -1
  35. package/dist/_chunks/{constants-91628e1e.js → constants-1bd1239d.js} +6 -6
  36. package/dist/_chunks/{constants-91628e1e.js.map → constants-1bd1239d.js.map} +1 -1
  37. package/dist/_chunks/{constants-8523a9f7.mjs → constants-39df4f04.mjs} +3 -3
  38. package/dist/_chunks/{constants-8523a9f7.mjs.map → constants-39df4f04.mjs.map} +1 -1
  39. package/dist/_chunks/{constants-a7b1c05e.mjs → constants-7bfc7134.mjs} +2 -2
  40. package/dist/_chunks/{constants-a7b1c05e.mjs.map → constants-7bfc7134.mjs.map} +1 -1
  41. package/dist/_chunks/{constants-b98f01f7.js → constants-86882708.js} +3 -3
  42. package/dist/_chunks/{constants-b98f01f7.js.map → constants-86882708.js.map} +1 -1
  43. package/dist/_chunks/{constants-643fcaf9.js → constants-916debf1.js} +2 -2
  44. package/dist/_chunks/{constants-643fcaf9.js.map → constants-916debf1.js.map} +1 -1
  45. package/dist/_chunks/{constants-dfdfded9.js → constants-cd5a4e71.js} +5 -5
  46. package/dist/_chunks/{constants-dfdfded9.js.map → constants-cd5a4e71.js.map} +1 -1
  47. package/dist/_chunks/{constants-65707dfb.mjs → constants-ffa23daa.mjs} +5 -5
  48. package/dist/_chunks/{constants-65707dfb.mjs.map → constants-ffa23daa.mjs.map} +1 -1
  49. package/dist/_chunks/{develop-5fd15ecf.mjs → develop-3c9f7452.mjs} +2 -2
  50. package/dist/_chunks/{develop-5fd15ecf.mjs.map → develop-3c9f7452.mjs.map} +1 -1
  51. package/dist/_chunks/{develop-ec19d09d.js → develop-9765d7ba.js} +2 -2
  52. package/dist/_chunks/{develop-ec19d09d.js.map → develop-9765d7ba.js.map} +1 -1
  53. package/dist/_chunks/{index-43b10023.js → index-006ef0ac.js} +3 -3
  54. package/dist/_chunks/{index-43b10023.js.map → index-006ef0ac.js.map} +1 -1
  55. package/dist/_chunks/{index-98a58f34.js → index-05001647.js} +8 -8
  56. package/dist/_chunks/{index-98a58f34.js.map → index-05001647.js.map} +1 -1
  57. package/dist/_chunks/{index-e78be262.js → index-05ada54b.js} +3 -3
  58. package/dist/_chunks/{index-e78be262.js.map → index-05ada54b.js.map} +1 -1
  59. package/dist/_chunks/{index-f1ace542.js → index-05f82f02.js} +3 -3
  60. package/dist/_chunks/{index-f1ace542.js.map → index-05f82f02.js.map} +1 -1
  61. package/dist/_chunks/{index-0b745772.js → index-09752dfe.js} +3 -3
  62. package/dist/_chunks/{index-0b745772.js.map → index-09752dfe.js.map} +1 -1
  63. package/dist/_chunks/{index-dd6de307.mjs → index-0bd0d840.mjs} +3 -3
  64. package/dist/_chunks/{index-dd6de307.mjs.map → index-0bd0d840.mjs.map} +1 -1
  65. package/dist/_chunks/{index-d75d8d15.js → index-0c5f6415.js} +5 -5
  66. package/dist/_chunks/{index-d75d8d15.js.map → index-0c5f6415.js.map} +1 -1
  67. package/dist/_chunks/{index-de552d3f.mjs → index-1bf08614.mjs} +3 -3
  68. package/dist/_chunks/{index-de552d3f.mjs.map → index-1bf08614.mjs.map} +1 -1
  69. package/dist/_chunks/{index-154451f2.js → index-1eaab33f.js} +4 -4
  70. package/dist/_chunks/{index-154451f2.js.map → index-1eaab33f.js.map} +1 -1
  71. package/dist/_chunks/{index-9e6e4c3f.mjs → index-234ed67d.mjs} +3 -3
  72. package/dist/_chunks/{index-9e6e4c3f.mjs.map → index-234ed67d.mjs.map} +1 -1
  73. package/dist/_chunks/{index-6431bc24.js → index-2ed87ac8.js} +3 -3
  74. package/dist/_chunks/{index-6431bc24.js.map → index-2ed87ac8.js.map} +1 -1
  75. package/dist/_chunks/{index-a2d01aca.mjs → index-326b9481.mjs} +4 -4
  76. package/dist/_chunks/{index-a2d01aca.mjs.map → index-326b9481.mjs.map} +1 -1
  77. package/dist/_chunks/{index-3fac3161.mjs → index-332b3702.mjs} +3 -3
  78. package/dist/_chunks/{index-3fac3161.mjs.map → index-332b3702.mjs.map} +1 -1
  79. package/dist/_chunks/{index-d9602c22.js → index-3fb94612.js} +4 -4
  80. package/dist/_chunks/{index-d9602c22.js.map → index-3fb94612.js.map} +1 -1
  81. package/dist/_chunks/{index-0d895d5c.mjs → index-4343f97f.mjs} +4 -4
  82. package/dist/_chunks/{index-0d895d5c.mjs.map → index-4343f97f.mjs.map} +1 -1
  83. package/dist/_chunks/{index-2503ccd8.mjs → index-43e86c36.mjs} +5 -5
  84. package/dist/_chunks/{index-2503ccd8.mjs.map → index-43e86c36.mjs.map} +1 -1
  85. package/dist/_chunks/{index-f90f4c5e.js → index-455d0b3e.js} +5 -5
  86. package/dist/_chunks/{index-f90f4c5e.js.map → index-455d0b3e.js.map} +1 -1
  87. package/dist/_chunks/{index-071e584f.js → index-4e8af716.js} +5 -5
  88. package/dist/_chunks/{index-071e584f.js.map → index-4e8af716.js.map} +1 -1
  89. package/dist/_chunks/{index-51c81518.js → index-539c5eac.js} +2 -2
  90. package/dist/_chunks/{index-51c81518.js.map → index-539c5eac.js.map} +1 -1
  91. package/dist/_chunks/{index-ceae3e82.js → index-54dc318d.js} +3 -3
  92. package/dist/_chunks/{index-ceae3e82.js.map → index-54dc318d.js.map} +1 -1
  93. package/dist/_chunks/{index-a5248bde.mjs → index-55a46be8.mjs} +3 -3
  94. package/dist/_chunks/{index-a5248bde.mjs.map → index-55a46be8.mjs.map} +1 -1
  95. package/dist/_chunks/{index-c1f8110c.js → index-55d6d65a.js} +3 -3
  96. package/dist/_chunks/{index-c1f8110c.js.map → index-55d6d65a.js.map} +1 -1
  97. package/dist/_chunks/{index-e8ddad38.mjs → index-57ae9065.mjs} +3 -3
  98. package/dist/_chunks/{index-e8ddad38.mjs.map → index-57ae9065.mjs.map} +1 -1
  99. package/dist/_chunks/{index-2772208e.js → index-62b7bdbe.js} +10 -9
  100. package/dist/_chunks/index-62b7bdbe.js.map +1 -0
  101. package/dist/_chunks/{index-330bae16.js → index-653e1ab3.js} +2 -2
  102. package/dist/_chunks/{index-330bae16.js.map → index-653e1ab3.js.map} +1 -1
  103. package/dist/_chunks/{index-6d864827.mjs → index-6861cd84.mjs} +3 -3
  104. package/dist/_chunks/{index-6d864827.mjs.map → index-6861cd84.mjs.map} +1 -1
  105. package/dist/_chunks/{index-db4e548d.js → index-6bfd0b33.js} +3 -3
  106. package/dist/_chunks/{index-db4e548d.js.map → index-6bfd0b33.js.map} +1 -1
  107. package/dist/_chunks/{index-0767a707.js → index-7028ad70.js} +4 -4
  108. package/dist/_chunks/{index-0767a707.js.map → index-7028ad70.js.map} +1 -1
  109. package/dist/_chunks/{index-30805cdb.js → index-706ae836.js} +4 -4
  110. package/dist/_chunks/{index-30805cdb.js.map → index-706ae836.js.map} +1 -1
  111. package/dist/_chunks/{index-d02782dc.mjs → index-77124563.mjs} +5 -5
  112. package/dist/_chunks/{index-d02782dc.mjs.map → index-77124563.mjs.map} +1 -1
  113. package/dist/_chunks/{index-c38703f5.mjs → index-782c0685.mjs} +2 -2
  114. package/dist/_chunks/{index-c38703f5.mjs.map → index-782c0685.mjs.map} +1 -1
  115. package/dist/_chunks/{index-98907333.js → index-7a956856.js} +4 -4
  116. package/dist/_chunks/{index-98907333.js.map → index-7a956856.js.map} +1 -1
  117. package/dist/_chunks/{index-0f8c5c53.js → index-7c0dcf2b.js} +4 -4
  118. package/dist/_chunks/{index-0f8c5c53.js.map → index-7c0dcf2b.js.map} +1 -1
  119. package/dist/_chunks/{index-cf1f4293.js → index-82f22c48.js} +3 -3
  120. package/dist/_chunks/{index-cf1f4293.js.map → index-82f22c48.js.map} +1 -1
  121. package/dist/_chunks/{index-d1583f5b.mjs → index-853bad50.mjs} +5 -5
  122. package/dist/_chunks/{index-d1583f5b.mjs.map → index-853bad50.mjs.map} +1 -1
  123. package/dist/_chunks/{index-e364920e.mjs → index-891d1527.mjs} +4 -4
  124. package/dist/_chunks/{index-e364920e.mjs.map → index-891d1527.mjs.map} +1 -1
  125. package/dist/_chunks/{index-83592788.js → index-8acbbabe.js} +6 -6
  126. package/dist/_chunks/{index-83592788.js.map → index-8acbbabe.js.map} +1 -1
  127. package/dist/_chunks/{index-7f99a8c0.mjs → index-8d895e56.mjs} +3 -3
  128. package/dist/_chunks/{index-7f99a8c0.mjs.map → index-8d895e56.mjs.map} +1 -1
  129. package/dist/_chunks/{index-854f0f9f.js → index-96af3a65.js} +5 -5
  130. package/dist/_chunks/{index-854f0f9f.js.map → index-96af3a65.js.map} +1 -1
  131. package/dist/_chunks/{index-3c50082a.mjs → index-9b3ff96c.mjs} +20 -20
  132. package/dist/_chunks/{index-3c50082a.mjs.map → index-9b3ff96c.mjs.map} +1 -1
  133. package/dist/_chunks/{index-f8139fa9.js → index-9c88e73f.js} +5 -5
  134. package/dist/_chunks/{index-f8139fa9.js.map → index-9c88e73f.js.map} +1 -1
  135. package/dist/_chunks/{index-dec0eba6.mjs → index-a220f0b2.mjs} +4 -4
  136. package/dist/_chunks/{index-dec0eba6.mjs.map → index-a220f0b2.mjs.map} +1 -1
  137. package/dist/_chunks/{index-6708aec7.mjs → index-a684490c.mjs} +3 -3
  138. package/dist/_chunks/{index-6708aec7.mjs.map → index-a684490c.mjs.map} +1 -1
  139. package/dist/_chunks/{index-aa8d6cd9.mjs → index-b593ff2a.mjs} +4 -4
  140. package/dist/_chunks/{index-aa8d6cd9.mjs.map → index-b593ff2a.mjs.map} +1 -1
  141. package/dist/_chunks/{index-22572721.js → index-b6c497e5.js} +20 -20
  142. package/dist/_chunks/{index-22572721.js.map → index-b6c497e5.js.map} +1 -1
  143. package/dist/_chunks/{index-f11d5a06.mjs → index-c075b5a1.mjs} +10 -9
  144. package/dist/_chunks/index-c075b5a1.mjs.map +1 -0
  145. package/dist/_chunks/{index-73f7ad03.mjs → index-c184f4d7.mjs} +5 -5
  146. package/dist/_chunks/{index-73f7ad03.mjs.map → index-c184f4d7.mjs.map} +1 -1
  147. package/dist/_chunks/{index-7a8208cf.mjs → index-c40ee26a.mjs} +4 -4
  148. package/dist/_chunks/{index-7a8208cf.mjs.map → index-c40ee26a.mjs.map} +1 -1
  149. package/dist/_chunks/{index-cdb822dc.mjs → index-cd2af4a0.mjs} +5 -5
  150. package/dist/_chunks/{index-cdb822dc.mjs.map → index-cd2af4a0.mjs.map} +1 -1
  151. package/dist/_chunks/{index-26633f85.js → index-cdc1221a.js} +3 -3
  152. package/dist/_chunks/{index-26633f85.js.map → index-cdc1221a.js.map} +1 -1
  153. package/dist/_chunks/{index-e1ee4796.js → index-d196ac50.js} +4 -4
  154. package/dist/_chunks/{index-e1ee4796.js.map → index-d196ac50.js.map} +1 -1
  155. package/dist/_chunks/{index-089af133.mjs → index-d33c8d9f.mjs} +8 -8
  156. package/dist/_chunks/{index-089af133.mjs.map → index-d33c8d9f.mjs.map} +1 -1
  157. package/dist/_chunks/{index-47b49cd4.js → index-d5711ebb.js} +5 -5
  158. package/dist/_chunks/{index-47b49cd4.js.map → index-d5711ebb.js.map} +1 -1
  159. package/dist/_chunks/{index-d05d2739.mjs → index-d80de23d.mjs} +3 -3
  160. package/dist/_chunks/{index-d05d2739.mjs.map → index-d80de23d.mjs.map} +1 -1
  161. package/dist/_chunks/{index-a422ec17.mjs → index-d9f9de85.mjs} +4 -4
  162. package/dist/_chunks/{index-a422ec17.mjs.map → index-d9f9de85.mjs.map} +1 -1
  163. package/dist/_chunks/{index-8a902627.mjs → index-de154c58.mjs} +3 -3
  164. package/dist/_chunks/{index-8a902627.mjs.map → index-de154c58.mjs.map} +1 -1
  165. package/dist/_chunks/{index-1f3328ca.mjs → index-df043af5.mjs} +3 -3
  166. package/dist/_chunks/{index-1f3328ca.mjs.map → index-df043af5.mjs.map} +1 -1
  167. package/dist/_chunks/{index-86fc0c9c.js → index-dff777b7.js} +3 -3
  168. package/dist/_chunks/{index-86fc0c9c.js.map → index-dff777b7.js.map} +1 -1
  169. package/dist/_chunks/{index-33bf61b3.js → index-e013fe86.js} +3 -3
  170. package/dist/_chunks/{index-33bf61b3.js.map → index-e013fe86.js.map} +1 -1
  171. package/dist/_chunks/{index-0b0a40c2.mjs → index-e2db7aa8.mjs} +6 -6
  172. package/dist/_chunks/{index-0b0a40c2.mjs.map → index-e2db7aa8.mjs.map} +1 -1
  173. package/dist/_chunks/{index-64c904e2.mjs → index-eea1e084.mjs} +3 -3
  174. package/dist/_chunks/{index-64c904e2.mjs.map → index-eea1e084.mjs.map} +1 -1
  175. package/dist/_chunks/{index-ee0697f5.mjs → index-f0f40db4.mjs} +5 -5
  176. package/dist/_chunks/{index-ee0697f5.mjs.map → index-f0f40db4.mjs.map} +1 -1
  177. package/dist/_chunks/{index-a0f622ec.js → index-f18d27fd.js} +3 -3
  178. package/dist/_chunks/{index-a0f622ec.js.map → index-f18d27fd.js.map} +1 -1
  179. package/dist/_chunks/{index-6b9ce159.js → index-f3c67f77.js} +2 -2
  180. package/dist/_chunks/{index-6b9ce159.js.map → index-f3c67f77.js.map} +1 -1
  181. package/dist/_chunks/{index-e309a639.mjs → index-f4a061be.mjs} +2 -2
  182. package/dist/_chunks/{index-e309a639.mjs.map → index-f4a061be.mjs.map} +1 -1
  183. package/dist/_chunks/{index-ddfb8187.mjs → index-f67d8e8d.mjs} +2 -2
  184. package/dist/_chunks/{index-ddfb8187.mjs.map → index-f67d8e8d.mjs.map} +1 -1
  185. package/dist/_chunks/{schema-f1cf6f90.mjs → schema-82ad2cb1.mjs} +2 -2
  186. package/dist/_chunks/{schema-f1cf6f90.mjs.map → schema-82ad2cb1.mjs.map} +1 -1
  187. package/dist/_chunks/{schema-c67fdb98.js → schema-8bb5b01b.js} +2 -2
  188. package/dist/_chunks/{schema-c67fdb98.js.map → schema-8bb5b01b.js.map} +1 -1
  189. package/dist/_chunks/{validateWorkflow-c7605fca.mjs → validateWorkflow-23b1ee38.mjs} +3 -3
  190. package/dist/_chunks/{validateWorkflow-c7605fca.mjs.map → validateWorkflow-23b1ee38.mjs.map} +1 -1
  191. package/dist/_chunks/{validateWorkflow-0ae76680.js → validateWorkflow-f5761727.js} +3 -3
  192. package/dist/_chunks/{validateWorkflow-0ae76680.js.map → validateWorkflow-f5761727.js.map} +1 -1
  193. package/dist/admin/index.js +1 -1
  194. package/dist/admin/index.mjs +1 -1
  195. package/dist/cli.js +1 -1
  196. package/dist/cli.mjs +1 -1
  197. package/dist/shared/contracts/users.d.ts +12 -9
  198. package/package.json +12 -12
  199. package/dist/_chunks/ProfilePage-7c3e5ad6.mjs.map +0 -1
  200. package/dist/_chunks/ProfilePage-a970034d.js.map +0 -1
  201. package/dist/_chunks/index-2772208e.js.map +0 -1
  202. package/dist/_chunks/index-f11d5a06.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index-ceae3e82.js","sources":["../../admin/src/pages/SettingsPage/pages/Roles/ListPage/components/EmptyRole/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/components/RoleRow/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/reducer.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ProtectedListPage/index.js"],"sourcesContent":["export default () => 'todo empty role';\n","import React from 'react';\n\nimport { Box, Flex, IconButton, Td, Tr, Typography } from '@strapi/design-system';\nimport { onRowClick, pxToRem, stopPropagation } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst RoleRow = ({ id, name, description, usersCount, icons, rowIndex, canUpdate }) => {\n const { formatMessage } = useIntl();\n const [, editObject] = icons;\n\n const usersCountText = formatMessage(\n {\n id: `Roles.RoleRow.user-count`,\n defaultMessage: '{number, plural, =0 {# user} one {# user} other {# users}}',\n },\n { number: usersCount }\n );\n\n return (\n <Tr\n aria-rowindex={rowIndex}\n key={id}\n {...(canUpdate\n ? onRowClick({\n fn: editObject.onClick,\n })\n : {})}\n >\n <Td maxWidth={pxToRem(130)}>\n <Typography ellipsis textColor=\"neutral800\">\n {name}\n </Typography>\n </Td>\n <Td maxWidth={pxToRem(250)}>\n <Typography ellipsis textColor=\"neutral800\">\n {description}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{usersCountText}</Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\" {...stopPropagation}>\n {icons.map((icon, i) =>\n icon ? (\n <Box key={icon.label} paddingLeft={i === 0 ? 0 : 1}>\n <IconButton onClick={icon.onClick} label={icon.label} noBorder icon={icon.icon} />\n </Box>\n ) : null\n )}\n </Flex>\n </Td>\n </Tr>\n );\n};\n\nRoleRow.propTypes = {\n id: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n description: PropTypes.string.isRequired,\n usersCount: PropTypes.number.isRequired,\n icons: PropTypes.array.isRequired,\n rowIndex: PropTypes.number.isRequired,\n canUpdate: PropTypes.bool,\n};\n\nRoleRow.defaultProps = {\n canUpdate: false,\n};\n\nexport default RoleRow;\n","/* eslint-disable consistent-return */\nimport produce from 'immer';\n\nexport const initialState = {\n roleToDelete: null,\n showModalConfirmButtonLoading: false,\n shouldRefetchData: false,\n};\n\nconst reducer = (state, 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\nexport default reducer;\n","import React, { useCallback, useReducer, useState } from 'react';\n\nimport {\n ActionLayout,\n Button,\n ContentLayout,\n HeaderLayout,\n Main,\n Table,\n Tbody,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport {\n ConfirmDialog,\n getFetchClient,\n LoadingIndicatorPage,\n SearchURLQuery,\n SettingsPageTitle,\n useAPIErrorHandler,\n useFocusWhenNavigate,\n useQueryParams,\n useNotification,\n useRBAC,\n} from '@strapi/helper-plugin';\nimport { Duplicate, Pencil, Plus, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../hooks/useAdminRoles';\nimport { selectAdminPermissions } from '../../../../../selectors';\n\nimport EmptyRole from './components/EmptyRole';\nimport BaseRoleRow from './components/RoleRow';\nimport reducer, { initialState } from './reducer';\n\nconst useRoleActions = ({ canCreate, canDelete, canUpdate, refetchRoles }) => {\n const { formatMessage } = useIntl();\n const { formatAPIError } = useAPIErrorHandler();\n const toggleNotification = useNotification();\n const [isWarningDeleteAllOpened, setIsWarningDeleteAllOpenend] = useState(false);\n const { push } = useHistory();\n const [{ selectedRoles, showModalConfirmButtonLoading, roleToDelete }, dispatch] = useReducer(\n reducer,\n initialState\n );\n\n const { post } = getFetchClient();\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 toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n }\n handleToggleModal();\n };\n\n const onRoleDuplicate = useCallback(\n (id) => {\n push(`/settings/roles/duplicate/${id}`);\n },\n [push]\n );\n\n const handleNewRoleClick = () => push('/settings/roles/new');\n\n const onRoleRemove = useCallback((roleId) => {\n dispatch({\n type: 'SET_ROLE_TO_DELETE',\n id: roleId,\n });\n\n handleToggleModal();\n }, []);\n\n const handleToggleModal = () => setIsWarningDeleteAllOpenend((prev) => !prev);\n\n const handleGoTo = useCallback(\n (id) => {\n push(`/settings/roles/${id}`);\n },\n [push]\n );\n\n const handleClickDelete = useCallback(\n (e, role) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (role.usersCount) {\n toggleNotification({\n type: 'info',\n message: { id: 'Roles.ListPage.notification.delete-not-allowed' },\n });\n } else {\n onRoleRemove(role.id);\n }\n },\n [toggleNotification, onRoleRemove]\n );\n\n const handleClickDuplicate = useCallback(\n (e, role) => {\n e.preventDefault();\n e.stopPropagation();\n onRoleDuplicate(role.id);\n },\n [onRoleDuplicate]\n );\n\n const getIcons = useCallback(\n (role) => [\n ...(canCreate\n ? [\n {\n onClick: (e) => handleClickDuplicate(e, role),\n label: formatMessage({ id: 'app.utils.duplicate', defaultMessage: 'Duplicate' }),\n icon: <Duplicate />,\n },\n ]\n : []),\n ...(canUpdate\n ? [\n {\n onClick: () => handleGoTo(role.id),\n label: formatMessage({ id: 'app.utils.edit', defaultMessage: 'Edit' }),\n icon: <Pencil />,\n },\n ]\n : []),\n ...(canDelete\n ? [\n {\n onClick: (e) => handleClickDelete(e, role),\n label: formatMessage({ id: 'global.delete', defaultMessage: 'Delete' }),\n icon: <Trash />,\n },\n ]\n : []),\n ],\n [\n formatMessage,\n handleClickDelete,\n handleClickDuplicate,\n handleGoTo,\n canCreate,\n canUpdate,\n canDelete,\n ]\n );\n\n return {\n handleNewRoleClick,\n getIcons,\n selectedRoles,\n isWarningDeleteAllOpened,\n showModalConfirmButtonLoading,\n handleToggleModal,\n handleDeleteData,\n };\n};\n\nconst RoleListPage = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n const permissions = useSelector(selectAdminPermissions);\n const [{ query }] = useQueryParams();\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canCreate, canDelete, canRead, canUpdate },\n } = useRBAC(permissions.settings.roles);\n\n const {\n roles,\n isLoading,\n refetch: refetchRoles,\n } = useAdminRoles(\n { filters: query?._q ? { name: { $containsi: query._q } } : undefined },\n {\n cacheTime: 0,\n enabled: !isLoadingForPermissions && canRead,\n }\n );\n\n const {\n handleNewRoleClick,\n getIcons,\n isWarningDeleteAllOpened,\n showModalConfirmButtonLoading,\n handleToggleModal,\n handleDeleteData,\n } = useRoleActions({ refetchRoles, canCreate, canDelete, canUpdate });\n\n // ! TODO - Show the search bar only if the user is allowed to read - add the search input\n // canRead\n\n const rowCount = roles.length + 1;\n const colCount = 6;\n\n if (isLoadingForPermissions) {\n return (\n <Main>\n <LoadingIndicatorPage />\n </Main>\n );\n }\n\n const title = formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n });\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <HeaderLayout\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={title}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n as=\"h2\"\n />\n {canRead && (\n <ActionLayout\n startActions={\n <SearchURLQuery\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: title }\n )}\n />\n }\n />\n )}\n {canRead && (\n <ContentLayout>\n <Table\n colCount={colCount}\n rowCount={rowCount}\n footer={\n canCreate ? (\n <TFooter 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 <BaseRoleRow\n key={role.id}\n id={role.id}\n name={role.name}\n description={role.description}\n usersCount={role.usersCount}\n icons={getIcons(role)}\n rowIndex={index + 2}\n canUpdate={canUpdate}\n />\n ))}\n </Tbody>\n </Table>\n {!rowCount && !isLoading && <EmptyRole />}\n </ContentLayout>\n )}\n <ConfirmDialog\n isOpen={isWarningDeleteAllOpened}\n onConfirm={handleDeleteData}\n isConfirmButtonLoading={showModalConfirmButtonLoading}\n onToggleDialog={handleToggleModal}\n />\n </Main>\n );\n};\n\nexport default RoleListPage;\n","import React from 'react';\n\nimport { CheckPagePermissions } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport ListPage from '../ListPage';\n\nconst ProtectedListPage = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings.roles.main}>\n <ListPage />\n </CheckPagePermissions>\n );\n};\n\nexport default ProtectedListPage;\n"],"names":["useIntl","jsxs","Tr","onRowClick","jsx","Td","pxToRem","Typography","Flex","stopPropagation","Box","IconButton","PropTypes","produce","useAPIErrorHandler","useNotification","useState","useHistory","useReducer","getFetchClient","useCallback","Duplicate","Pencil","Trash","useFocusWhenNavigate","useSelector","selectAdminPermissions","useQueryParams","useRBAC","useAdminRoles","Main","LoadingIndicatorPage","SettingsPageTitle","HeaderLayout","Button","Plus","ActionLayout","SearchURLQuery","ContentLayout","Table","TFooter","Thead","Th","VisuallyHidden","Tbody","BaseRoleRow","ConfirmDialog","CheckPagePermissions","ListPage"],"mappings":"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"}
1
+ {"version":3,"file":"index-54dc318d.js","sources":["../../admin/src/pages/SettingsPage/pages/Roles/ListPage/components/EmptyRole/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/components/RoleRow/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/reducer.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ProtectedListPage/index.js"],"sourcesContent":["export default () => 'todo empty role';\n","import React from 'react';\n\nimport { Box, Flex, IconButton, Td, Tr, Typography } from '@strapi/design-system';\nimport { onRowClick, pxToRem, stopPropagation } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst RoleRow = ({ id, name, description, usersCount, icons, rowIndex, canUpdate }) => {\n const { formatMessage } = useIntl();\n const [, editObject] = icons;\n\n const usersCountText = formatMessage(\n {\n id: `Roles.RoleRow.user-count`,\n defaultMessage: '{number, plural, =0 {# user} one {# user} other {# users}}',\n },\n { number: usersCount }\n );\n\n return (\n <Tr\n aria-rowindex={rowIndex}\n key={id}\n {...(canUpdate\n ? onRowClick({\n fn: editObject.onClick,\n })\n : {})}\n >\n <Td maxWidth={pxToRem(130)}>\n <Typography ellipsis textColor=\"neutral800\">\n {name}\n </Typography>\n </Td>\n <Td maxWidth={pxToRem(250)}>\n <Typography ellipsis textColor=\"neutral800\">\n {description}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{usersCountText}</Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\" {...stopPropagation}>\n {icons.map((icon, i) =>\n icon ? (\n <Box key={icon.label} paddingLeft={i === 0 ? 0 : 1}>\n <IconButton onClick={icon.onClick} label={icon.label} noBorder icon={icon.icon} />\n </Box>\n ) : null\n )}\n </Flex>\n </Td>\n </Tr>\n );\n};\n\nRoleRow.propTypes = {\n id: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n description: PropTypes.string.isRequired,\n usersCount: PropTypes.number.isRequired,\n icons: PropTypes.array.isRequired,\n rowIndex: PropTypes.number.isRequired,\n canUpdate: PropTypes.bool,\n};\n\nRoleRow.defaultProps = {\n canUpdate: false,\n};\n\nexport default RoleRow;\n","/* eslint-disable consistent-return */\nimport produce from 'immer';\n\nexport const initialState = {\n roleToDelete: null,\n showModalConfirmButtonLoading: false,\n shouldRefetchData: false,\n};\n\nconst reducer = (state, 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\nexport default reducer;\n","import React, { useCallback, useReducer, useState } from 'react';\n\nimport {\n ActionLayout,\n Button,\n ContentLayout,\n HeaderLayout,\n Main,\n Table,\n Tbody,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport {\n ConfirmDialog,\n getFetchClient,\n LoadingIndicatorPage,\n SearchURLQuery,\n SettingsPageTitle,\n useAPIErrorHandler,\n useFocusWhenNavigate,\n useQueryParams,\n useNotification,\n useRBAC,\n} from '@strapi/helper-plugin';\nimport { Duplicate, Pencil, Plus, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../hooks/useAdminRoles';\nimport { selectAdminPermissions } from '../../../../../selectors';\n\nimport EmptyRole from './components/EmptyRole';\nimport BaseRoleRow from './components/RoleRow';\nimport reducer, { initialState } from './reducer';\n\nconst useRoleActions = ({ canCreate, canDelete, canUpdate, refetchRoles }) => {\n const { formatMessage } = useIntl();\n const { formatAPIError } = useAPIErrorHandler();\n const toggleNotification = useNotification();\n const [isWarningDeleteAllOpened, setIsWarningDeleteAllOpenend] = useState(false);\n const { push } = useHistory();\n const [{ selectedRoles, showModalConfirmButtonLoading, roleToDelete }, dispatch] = useReducer(\n reducer,\n initialState\n );\n\n const { post } = getFetchClient();\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 toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n }\n handleToggleModal();\n };\n\n const onRoleDuplicate = useCallback(\n (id) => {\n push(`/settings/roles/duplicate/${id}`);\n },\n [push]\n );\n\n const handleNewRoleClick = () => push('/settings/roles/new');\n\n const onRoleRemove = useCallback((roleId) => {\n dispatch({\n type: 'SET_ROLE_TO_DELETE',\n id: roleId,\n });\n\n handleToggleModal();\n }, []);\n\n const handleToggleModal = () => setIsWarningDeleteAllOpenend((prev) => !prev);\n\n const handleGoTo = useCallback(\n (id) => {\n push(`/settings/roles/${id}`);\n },\n [push]\n );\n\n const handleClickDelete = useCallback(\n (e, role) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (role.usersCount) {\n toggleNotification({\n type: 'info',\n message: { id: 'Roles.ListPage.notification.delete-not-allowed' },\n });\n } else {\n onRoleRemove(role.id);\n }\n },\n [toggleNotification, onRoleRemove]\n );\n\n const handleClickDuplicate = useCallback(\n (e, role) => {\n e.preventDefault();\n e.stopPropagation();\n onRoleDuplicate(role.id);\n },\n [onRoleDuplicate]\n );\n\n const getIcons = useCallback(\n (role) => [\n ...(canCreate\n ? [\n {\n onClick: (e) => handleClickDuplicate(e, role),\n label: formatMessage({ id: 'app.utils.duplicate', defaultMessage: 'Duplicate' }),\n icon: <Duplicate />,\n },\n ]\n : []),\n ...(canUpdate\n ? [\n {\n onClick: () => handleGoTo(role.id),\n label: formatMessage({ id: 'app.utils.edit', defaultMessage: 'Edit' }),\n icon: <Pencil />,\n },\n ]\n : []),\n ...(canDelete\n ? [\n {\n onClick: (e) => handleClickDelete(e, role),\n label: formatMessage({ id: 'global.delete', defaultMessage: 'Delete' }),\n icon: <Trash />,\n },\n ]\n : []),\n ],\n [\n formatMessage,\n handleClickDelete,\n handleClickDuplicate,\n handleGoTo,\n canCreate,\n canUpdate,\n canDelete,\n ]\n );\n\n return {\n handleNewRoleClick,\n getIcons,\n selectedRoles,\n isWarningDeleteAllOpened,\n showModalConfirmButtonLoading,\n handleToggleModal,\n handleDeleteData,\n };\n};\n\nconst RoleListPage = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n const permissions = useSelector(selectAdminPermissions);\n const [{ query }] = useQueryParams();\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canCreate, canDelete, canRead, canUpdate },\n } = useRBAC(permissions.settings.roles);\n\n const {\n roles,\n isLoading,\n refetch: refetchRoles,\n } = useAdminRoles(\n { filters: query?._q ? { name: { $containsi: query._q } } : undefined },\n {\n cacheTime: 0,\n enabled: !isLoadingForPermissions && canRead,\n }\n );\n\n const {\n handleNewRoleClick,\n getIcons,\n isWarningDeleteAllOpened,\n showModalConfirmButtonLoading,\n handleToggleModal,\n handleDeleteData,\n } = useRoleActions({ refetchRoles, canCreate, canDelete, canUpdate });\n\n // ! TODO - Show the search bar only if the user is allowed to read - add the search input\n // canRead\n\n const rowCount = roles.length + 1;\n const colCount = 6;\n\n if (isLoadingForPermissions) {\n return (\n <Main>\n <LoadingIndicatorPage />\n </Main>\n );\n }\n\n const title = formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n });\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <HeaderLayout\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={title}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n as=\"h2\"\n />\n {canRead && (\n <ActionLayout\n startActions={\n <SearchURLQuery\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: title }\n )}\n />\n }\n />\n )}\n {canRead && (\n <ContentLayout>\n <Table\n colCount={colCount}\n rowCount={rowCount}\n footer={\n canCreate ? (\n <TFooter 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 <BaseRoleRow\n key={role.id}\n id={role.id}\n name={role.name}\n description={role.description}\n usersCount={role.usersCount}\n icons={getIcons(role)}\n rowIndex={index + 2}\n canUpdate={canUpdate}\n />\n ))}\n </Tbody>\n </Table>\n {!rowCount && !isLoading && <EmptyRole />}\n </ContentLayout>\n )}\n <ConfirmDialog\n isOpen={isWarningDeleteAllOpened}\n onConfirm={handleDeleteData}\n isConfirmButtonLoading={showModalConfirmButtonLoading}\n onToggleDialog={handleToggleModal}\n />\n </Main>\n );\n};\n\nexport default RoleListPage;\n","import React from 'react';\n\nimport { CheckPagePermissions } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport ListPage from '../ListPage';\n\nconst ProtectedListPage = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings.roles.main}>\n <ListPage />\n </CheckPagePermissions>\n );\n};\n\nexport default ProtectedListPage;\n"],"names":["useIntl","jsxs","Tr","onRowClick","jsx","Td","pxToRem","Typography","Flex","stopPropagation","Box","IconButton","PropTypes","produce","useAPIErrorHandler","useNotification","useState","useHistory","useReducer","getFetchClient","useCallback","Duplicate","Pencil","Trash","useFocusWhenNavigate","useSelector","selectAdminPermissions","useQueryParams","useRBAC","useAdminRoles","Main","LoadingIndicatorPage","SettingsPageTitle","HeaderLayout","Button","Plus","ActionLayout","SearchURLQuery","ContentLayout","Table","TFooter","Thead","Th","VisuallyHidden","Tbody","BaseRoleRow","ConfirmDialog","CheckPagePermissions","ListPage"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAA,YAAe,MAAM;ACOrB,MAAM,UAAU,CAAC,EAAE,IAAI,MAAM,aAAa,YAAY,OAAO,UAAU,gBAAgB;AAC/E,QAAA,EAAE,kBAAkBA,UAAAA;AACpB,QAAA,CAAG,EAAA,UAAU,IAAI;AAEvB,QAAM,iBAAiB;AAAA,IACrB;AAAA,MACE,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,EAAE,QAAQ,WAAW;AAAA,EAAA;AAIrB,SAAAC,2BAAA;AAAA,IAACC,aAAA;AAAA,IAAA;AAAA,MACC,iBAAe;AAAA,MAEd,GAAI,YACDC,aAAAA,WAAW;AAAA,QACT,IAAI,WAAW;AAAA,MAChB,CAAA,IACD,CAAC;AAAA,MAEL,UAAA;AAAA,QAAAC,2BAAA,IAACC,aAAG,IAAA,EAAA,UAAUC,aAAQ,QAAA,GAAG,GACvB,UAAAF,2BAAA,IAACG,aAAW,YAAA,EAAA,UAAQ,MAAC,WAAU,cAC5B,UAAA,KACH,CAAA,GACF;AAAA,QACCH,2BAAA,IAAAC,aAAA,IAAA,EAAG,UAAUC,aAAA,QAAQ,GAAG,GACvB,UAACF,2BAAA,IAAAG,aAAA,YAAA,EAAW,UAAQ,MAAC,WAAU,cAC5B,sBACH,CAAA,GACF;AAAA,uCACCF,aACC,IAAA,EAAA,UAAAD,2BAAA,IAACG,2BAAW,WAAU,cAAc,0BAAe,EACrD,CAAA;AAAA,QACAH,2BAAAA,IAACC,mBACC,UAACD,2BAAA,IAAAI,aAAA,MAAA,EAAK,gBAAe,YAAY,GAAGC,aAAAA,iBACjC,UAAM,MAAA;AAAA,UAAI,CAAC,MAAM,MAChB,OACEL,2BAAA,IAACM,aAAqB,KAAA,EAAA,aAAa,MAAM,IAAI,IAAI,GAC/C,UAACN,2BAAAA,IAAAO,aAAAA,YAAA,EAAW,SAAS,KAAK,SAAS,OAAO,KAAK,OAAO,UAAQ,MAAC,MAAM,KAAK,KAAM,CAAA,EAAA,GADxE,KAAK,KAEf,IACE;AAAA,WAER,EACF,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IA9BK;AAAA,EAAA;AAiCX;AAEA,QAAQ,YAAY;AAAA,EAClB,IAAIC,mBAAAA,QAAU,OAAO;AAAA,EACrB,MAAMA,mBAAAA,QAAU,OAAO;AAAA,EACvB,aAAaA,mBAAAA,QAAU,OAAO;AAAA,EAC9B,YAAYA,mBAAAA,QAAU,OAAO;AAAA,EAC7B,OAAOA,mBAAAA,QAAU,MAAM;AAAA,EACvB,UAAUA,mBAAAA,QAAU,OAAO;AAAA,EAC3B,WAAWA,mBAAU,QAAA;AACvB;AAEA,QAAQ,eAAe;AAAA,EACrB,WAAW;AACb;AClEO,MAAM,eAAe;AAAA,EAC1B,cAAc;AAAA,EACd,+BAA+B;AAAA,EAC/B,mBAAmB;AACrB;AAEA,MAAM,UAAU,CAAC,OAAO,WACtBC,iBAAAA,QAAQ,OAAO,CAAC,eAAe;AAC7B,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,mBAAmB;AACtB,iBAAW,gCAAgC;AAC3C;AAAA,IACF;AAAA,IACA,KAAK,6BAA6B;AAChC,iBAAW,oBAAoB;AAC/B,iBAAW,eAAe;AAC1B;AAAA,IACF;AAAA,IACA,KAAK,wBAAwB;AAC3B,iBAAW,oBAAoB;AAC/B,iBAAW,eAAe;AAC1B,iBAAW,gCAAgC;AAC3C;AAAA,IACF;AAAA,IACA,KAAK,sBAAsB;AACzB,iBAAW,eAAe,OAAO;AAEjC;AAAA,IACF;AAAA,IACA;AACS,aAAA;AAAA,EACX;AACF,CAAC;ACMH,MAAM,iBAAiB,CAAC,EAAE,WAAW,WAAW,WAAW,mBAAmB;AACtE,QAAA,EAAE,kBAAkBb,UAAAA;AACpB,QAAA,EAAE,mBAAmBc,aAAAA;AAC3B,QAAM,qBAAqBC,aAAAA;AAC3B,QAAM,CAAC,0BAA0B,4BAA4B,IAAIC,eAAS,KAAK;AACzE,QAAA,EAAE,SAASC,eAAAA;AACjB,QAAM,CAAC,EAAE,eAAe,+BAA+B,aAAa,GAAG,QAAQ,IAAIC,MAAA;AAAA,IACjF;AAAA,IACA;AAAA,EAAA;AAGI,QAAA,EAAE,SAASC,aAAAA;AAEjB,QAAM,mBAAmB,YAAY;AAC/B,QAAA;AACO,eAAA;AAAA,QACP,MAAM;AAAA,MAAA,CACP;AAED,YAAM,KAAK,6BAA6B;AAAA,QACtC,KAAK,CAAC,YAAY;AAAA,MAAA,CACnB;AAED,YAAM,aAAa;AAEV,eAAA;AAAA,QACP,MAAM;AAAA,MAAA,CACP;AAAA,aACM,OAAO;AACK,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,KAAK;AAAA,MAAA,CAC9B;AAAA,IACH;AACkB;EAAA;AAGpB,QAAM,kBAAkBC,MAAA;AAAA,IACtB,CAAC,OAAO;AACD,WAAA,6BAA6B,EAAE,EAAE;AAAA,IACxC;AAAA,IACA,CAAC,IAAI;AAAA,EAAA;AAGD,QAAA,qBAAqB,MAAM,KAAK,qBAAqB;AAErD,QAAA,eAAeA,kBAAY,CAAC,WAAW;AAClC,aAAA;AAAA,MACP,MAAM;AAAA,MACN,IAAI;AAAA,IAAA,CACL;AAEiB;EACpB,GAAG,CAAE,CAAA;AAEL,QAAM,oBAAoB,MAAM,6BAA6B,CAAC,SAAS,CAAC,IAAI;AAE5E,QAAM,aAAaA,MAAA;AAAA,IACjB,CAAC,OAAO;AACD,WAAA,mBAAmB,EAAE,EAAE;AAAA,IAC9B;AAAA,IACA,CAAC,IAAI;AAAA,EAAA;AAGP,QAAM,oBAAoBA,MAAA;AAAA,IACxB,CAAC,GAAG,SAAS;AACX,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAElB,UAAI,KAAK,YAAY;AACA,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,EAAE,IAAI,iDAAiD;AAAA,QAAA,CACjE;AAAA,MAAA,OACI;AACL,qBAAa,KAAK,EAAE;AAAA,MACtB;AAAA,IACF;AAAA,IACA,CAAC,oBAAoB,YAAY;AAAA,EAAA;AAGnC,QAAM,uBAAuBA,MAAA;AAAA,IAC3B,CAAC,GAAG,SAAS;AACX,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,sBAAgB,KAAK,EAAE;AAAA,IACzB;AAAA,IACA,CAAC,eAAe;AAAA,EAAA;AAGlB,QAAM,WAAWA,MAAA;AAAA,IACf,CAAC,SAAS;AAAA,MACR,GAAI,YACA;AAAA,QACE;AAAA,UACE,SAAS,CAAC,MAAM,qBAAqB,GAAG,IAAI;AAAA,UAC5C,OAAO,cAAc,EAAE,IAAI,uBAAuB,gBAAgB,aAAa;AAAA,UAC/E,qCAAOC,MAAU,WAAA,EAAA;AAAA,QACnB;AAAA,MAAA,IAEF,CAAC;AAAA,MACL,GAAI,YACA;AAAA,QACE;AAAA,UACE,SAAS,MAAM,WAAW,KAAK,EAAE;AAAA,UACjC,OAAO,cAAc,EAAE,IAAI,kBAAkB,gBAAgB,QAAQ;AAAA,UACrE,qCAAOC,MAAO,QAAA,EAAA;AAAA,QAChB;AAAA,MAAA,IAEF,CAAC;AAAA,MACL,GAAI,YACA;AAAA,QACE;AAAA,UACE,SAAS,CAAC,MAAM,kBAAkB,GAAG,IAAI;AAAA,UACzC,OAAO,cAAc,EAAE,IAAI,iBAAiB,gBAAgB,UAAU;AAAA,UACtE,qCAAOC,MAAM,OAAA,EAAA;AAAA,QACf;AAAA,MAAA,IAEF,CAAC;AAAA,IACP;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAGK,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,MAAM,eAAe,MAAM;AACnB,QAAA,EAAE,kBAAkBvB,UAAAA;AACLwB,eAAAA;AACf,QAAA,cAAcC,uBAAYC,iBAAAA,sBAAsB;AACtD,QAAM,CAAC,EAAE,OAAO,IAAIC,aAAe,eAAA;AAC7B,QAAA;AAAA,IACJ,WAAW;AAAA,IACX,gBAAgB,EAAE,WAAW,WAAW,SAAS,UAAU;AAAA,EACzD,IAAAC,qBAAQ,YAAY,SAAS,KAAK;AAEhC,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA,SAAS;AAAA,EAAA,IACPC,cAAA;AAAA,IACF,EAAE,SAAS,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,MAAM,KAAK,IAAI,OAAU;AAAA,IACtE;AAAA,MACE,WAAW;AAAA,MACX,SAAS,CAAC,2BAA2B;AAAA,IACvC;AAAA,EAAA;AAGI,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE,eAAe,EAAE,cAAc,WAAW,WAAW,WAAW;AAK9D,QAAA,WAAW,MAAM,SAAS;AAChC,QAAM,WAAW;AAEjB,MAAI,yBAAyB;AAC3B,WACGzB,2BAAA,IAAA0B,aAAA,MAAA,EACC,UAAC1B,2BAAA,IAAA2B,mCAAA,CAAA,CAAqB,EACxB,CAAA;AAAA,EAEJ;AAEA,QAAM,QAAQ,cAAc;AAAA,IAC1B,IAAI;AAAA,IACJ,gBAAgB;AAAA,EAAA,CACjB;AAED,yCACGD,mBACC,EAAA,UAAA;AAAA,IAAC1B,2BAAAA,IAAA4B,aAAA,mBAAA,EAAkB,MAAK,QAAQ,CAAA;AAAA,IAChC5B,2BAAA;AAAA,MAAC6B,aAAA;AAAA,MAAA;AAAA,QACC,eACE,YACG7B,2BAAA,IAAA8B,aAAA,QAAA,EAAO,SAAS,oBAAoB,WAAW9B,2BAAAA,IAAC+B,MAAAA,MAAK,CAAA,CAAA,GAAI,MAAK,KAC5D,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB,GACH,IACE;AAAA,QAEN;AAAA,QACA,UAAU,cAAc;AAAA,UACtB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,QACD,IAAG;AAAA,MAAA;AAAA,IACL;AAAA,IACC,WACC/B,2BAAA;AAAA,MAACgC,aAAA;AAAA,MAAA;AAAA,QACC,cACEhC,2BAAA;AAAA,UAACiC,aAAA;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,EAAE,IAAI,8BAA8B,gBAAgB,sBAAsB;AAAA,cAC1E,EAAE,QAAQ,MAAM;AAAA,YAClB;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ;AAAA,IAED,2CACEC,4BACC,EAAA,UAAA;AAAA,MAAArC,2BAAA;AAAA,QAACsC,aAAA;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,QACE,YACEnC,2BAAAA,IAACoC,aAAQ,SAAA,EAAA,SAAS,oBAAoB,MAAMpC,2BAAA,IAAC+B,MAAK,MAAA,CAAA,CAAA,GAC/C,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB,GACH,IACE;AAAA,UAGN,UAAA;AAAA,YAAA/B,+BAACqC,aAAAA,OACC,EAAA,UAAAxC,2BAAAA,KAACC,aAAAA,IAAG,EAAA,iBAAe,GACjB,UAAA;AAAA,cAAAE,2BAAAA,IAACsC,mBACC,UAACtC,2BAAA,IAAAG,aAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,cACnC,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB,GACH,EACF,CAAA;AAAA,cACAH,2BAAAA,IAACsC,mBACC,UAACtC,2BAAA,IAAAG,aAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,cACnC,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB,GACH,EACF,CAAA;AAAA,cACAH,2BAAAA,IAACsC,mBACC,UAACtC,2BAAA,IAAAG,aAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,cACnC,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB,GACH,EACF,CAAA;AAAA,cACCH,2BAAA,IAAAsC,aAAA,IAAA,EACC,UAACtC,2BAAA,IAAAuC,6BAAA,EACE,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB,GACH,EACF,CAAA;AAAA,YAAA,EAAA,CACF,EACF,CAAA;AAAA,2CACCC,aAAAA,OACE,EAAA,UAAA,OAAO,IAAI,CAAC,MAAM,UACjBxC,2BAAA;AAAA,cAACyC;AAAAA,cAAA;AAAA,gBAEC,IAAI,KAAK;AAAA,gBACT,MAAM,KAAK;AAAA,gBACX,aAAa,KAAK;AAAA,gBAClB,YAAY,KAAK;AAAA,gBACjB,OAAO,SAAS,IAAI;AAAA,gBACpB,UAAU,QAAQ;AAAA,gBAClB;AAAA,cAAA;AAAA,cAPK,KAAK;AAAA,YASb,CAAA,GACH;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,MACC,CAAC,YAAY,CAAC,4CAAc,WAAU,CAAA,CAAA;AAAA,IAAA,GACzC;AAAA,IAEFzC,2BAAA;AAAA,MAAC0C,aAAA;AAAA,MAAA;AAAA,QACC,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,wBAAwB;AAAA,QACxB,gBAAgB;AAAA,MAAA;AAAA,IAClB;AAAA,EACF,EAAA,CAAA;AAEJ;AChVA,MAAM,oBAAoB,MAAM;AACxB,QAAA,cAAcrB,uBAAYC,iBAAAA,sBAAsB;AAGpD,SAAAtB,2BAAA,IAAC2C,qCAAqB,aAAa,YAAY,SAAS,MAAM,MAC5D,UAAC3C,2BAAA,IAAA4C,cAAA,CAAS,CAAA,EACZ,CAAA;AAEJ;;"}
@@ -6,7 +6,7 @@ import isEqual from "lodash/isEqual";
6
6
  import { useIntl } from "react-intl";
7
7
  import { useSelector } from "react-redux";
8
8
  import { u as useAdminRoles } from "./useAdminRoles-7ab5d521.mjs";
9
- import { s as selectAdminPermissions } from "./AuthenticatedApp-cdd2864d.mjs";
9
+ import { s as selectAdminPermissions } from "./AuthenticatedApp-fa931d1d.mjs";
10
10
  import * as React from "react";
11
11
  import produce from "immer";
12
12
  import omit from "lodash/omit";
@@ -18,7 +18,7 @@ import { f as formatAPIErrors } from "./formatAPIErrors-db6ed675.mjs";
18
18
  import "react-query";
19
19
  import "semver/functions/lt";
20
20
  import "semver/functions/valid";
21
- import "./index-a2d01aca.mjs";
21
+ import "./index-326b9481.mjs";
22
22
  import "react-dom/client";
23
23
  import "invariant";
24
24
  import "lodash/isFunction";
@@ -390,4 +390,4 @@ export {
390
390
  SingleSignOn,
391
391
  ProtectedSSO as default
392
392
  };
393
- //# sourceMappingURL=index-a5248bde.mjs.map
393
+ //# sourceMappingURL=index-55a46be8.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-a5248bde.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/SingleSignOn/hooks/useSettingsForm.ts","../../ee/admin/src/pages/SettingsPage/pages/SingleSignOn/utils/schema.js","../../ee/admin/src/pages/SettingsPage/pages/SingleSignOn/index.js"],"sourcesContent":["import * as React from 'react';\n\nimport {\n getYupInnerErrors,\n useFetchClient,\n useNotification,\n useOverlayBlocker,\n} from '@strapi/helper-plugin';\nimport produce from 'immer';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport set from 'lodash/set';\nimport { ValidationError } from 'yup';\n\nimport { formatAPIErrors } from '../../../../../../../../admin/src/utils/formatAPIErrors';\n\ninterface GetDataSucceedAction {\n type: 'GET_DATA_SUCCEEDED';\n data: {\n [key: string]: unknown;\n };\n fieldsToPick: string[];\n}\n\ninterface OnCancelAction {\n type: 'ON_CANCEL';\n}\n\ninterface OnChangeAction {\n type: 'ON_CHANGE';\n keys: string;\n value: unknown;\n}\n\ninterface OnSubmitAction {\n type: 'ON_SUBMIT';\n}\n\ninterface OnSubmitSucceedAction {\n type: 'ON_SUBMIT_SUCCEEDED';\n data: {\n [key: string]: unknown;\n };\n}\n\ninterface SetErrorsAction {\n type: 'SET_ERRORS';\n errors: Record<string, unknown>;\n}\n\ninterface InitialState {\n fieldsToPick: string[];\n formErrors?: Record<string, unknown>;\n initialData: Record<string, unknown>;\n isLoading: boolean;\n modifiedData: Record<string, unknown>;\n showHeaderButtonLoader: boolean;\n showHeaderLoader: boolean;\n}\n\nconst initialState: InitialState = {\n fieldsToPick: [],\n formErrors: {},\n initialData: {},\n isLoading: true,\n modifiedData: {},\n showHeaderButtonLoader: false,\n showHeaderLoader: true,\n};\n\ntype Action =\n | GetDataSucceedAction\n | OnCancelAction\n | OnChangeAction\n | OnSubmitAction\n | OnSubmitSucceedAction\n | SetErrorsAction;\n\nconst reducer = (state: typeof initialState, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'GET_DATA_SUCCEEDED': {\n draftState.isLoading = false;\n draftState.showHeaderLoader = false;\n draftState.initialData = pick(action.data, state.fieldsToPick);\n draftState.modifiedData = pick(action.data, state.fieldsToPick);\n break;\n }\n case 'ON_CANCEL': {\n draftState.modifiedData = state.initialData;\n draftState.formErrors = {};\n break;\n }\n case 'ON_CHANGE': {\n if (action.keys.includes('username') && !action.value) {\n set(draftState.modifiedData, action.keys.split('.'), null);\n } else {\n set(draftState.modifiedData, action.keys.split('.'), action.value);\n }\n break;\n }\n case 'ON_SUBMIT': {\n draftState.showHeaderButtonLoader = true;\n break;\n }\n case 'ON_SUBMIT_SUCCEEDED': {\n draftState.initialData = pick(action.data, state.fieldsToPick);\n draftState.modifiedData = pick(action.data, state.fieldsToPick);\n draftState.showHeaderButtonLoader = false;\n break;\n }\n case 'SET_ERRORS': {\n draftState.formErrors = action.errors;\n draftState.showHeaderButtonLoader = false;\n break;\n }\n default:\n return draftState;\n }\n });\n\nconst checkFormValidity = async (data: Record<string, unknown>, schema: any) => {\n let errors = null;\n\n try {\n await schema.validate(data, { abortEarly: false });\n } catch (err) {\n if (err instanceof ValidationError) {\n errors = getYupInnerErrors(err);\n }\n }\n\n return errors;\n};\n\n/**\n * TODO: refactor this, it's confusing and hard to read.\n * It's also only used in `Settings/pages/SingleSignOn` so it can\n * probably be deleted and everything written there...\n */\nexport const useSettingsForm = (\n schema: Record<string, unknown>,\n cbSuccess: (data: any) => void,\n fieldsToPick: string[]\n) => {\n const [\n { formErrors, initialData, isLoading, modifiedData, showHeaderButtonLoader, showHeaderLoader },\n dispatch,\n ] = React.useReducer(reducer, { ...initialState, fieldsToPick });\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n\n const { get, put } = useFetchClient();\n\n React.useEffect(() => {\n const getData = async () => {\n try {\n const {\n data: { data },\n } = await get('/admin/providers/options');\n\n dispatch({\n type: 'GET_DATA_SUCCEEDED',\n data,\n fieldsToPick,\n });\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n }\n };\n\n getData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleCancel = () => {\n dispatch({\n type: 'ON_CANCEL',\n });\n };\n\n const handleChange = ({\n target: { name, value },\n }: {\n target: { name: string; value?: unknown };\n }) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: name,\n value,\n });\n };\n\n const setField = (fieldName: string, value: unknown) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: fieldName,\n value,\n });\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n\n const errors = await checkFormValidity(modifiedData, schema);\n\n dispatch({\n type: 'SET_ERRORS',\n errors: errors || {},\n });\n\n if (!errors) {\n try {\n // @ts-expect-error - context assertation\n lockApp();\n\n dispatch({\n type: 'ON_SUBMIT',\n });\n const cleanedData = omit(modifiedData, ['confirmPassword', 'registrationToken']);\n\n if (cleanedData.roles) {\n // @ts-expect-error hooks needs refactoring anyways\n cleanedData.roles = cleanedData.roles.map((role) => role.id);\n }\n if (cleanedData.ssoLockedRoles) {\n // @ts-expect-error hooks needs refactoring anyways\n cleanedData.ssoLockedRoles = [...new Set(cleanedData.ssoLockedRoles)];\n }\n\n const {\n data: { data },\n } = await put('/admin/providers/options', cleanedData);\n\n cbSuccess(data);\n\n dispatch({\n type: 'ON_SUBMIT_SUCCEEDED',\n data,\n });\n\n toggleNotification({\n type: 'success',\n message: { id: 'notification.success.saved' },\n });\n } catch (err) {\n // @ts-expect-error hooks needs refactoring anyways\n const data = err?.response?.payload ?? { data: {} };\n\n if (!!data?.data && typeof data.data === 'string') {\n toggleNotification({\n type: 'warning',\n message: data.data,\n });\n } else {\n toggleNotification({\n type: 'warning',\n message: data.message,\n });\n }\n\n const apiErrors = formatAPIErrors(data);\n\n dispatch({\n type: 'SET_ERRORS',\n errors: apiErrors,\n });\n } finally {\n // @ts-expect-error - context assertation\n unlockApp();\n }\n }\n };\n\n return [\n { formErrors, initialData, isLoading, modifiedData, showHeaderButtonLoader, showHeaderLoader },\n dispatch,\n { handleCancel, handleChange, handleSubmit, setField },\n ] as const;\n};\n","import { translatedErrors } from '@strapi/helper-plugin';\nimport * as yup from 'yup';\n\nconst schema = yup.object().shape({\n autoRegister: yup.bool().required(translatedErrors.required),\n defaultRole: yup.mixed().when('autoRegister', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n }),\n ssoLockedRoles: yup\n .array()\n .nullable()\n .of(\n yup.mixed().when('ssoLockedRoles', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n })\n ),\n});\n\nexport default schema;\n","import * as React from 'react';\n\nimport {\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Layout,\n Main,\n MultiSelect,\n MultiSelectOption,\n Option,\n Select,\n ToggleInput,\n Typography,\n} from '@strapi/design-system';\nimport {\n CheckPagePermissions,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useFocusWhenNavigate,\n useRBAC,\n} from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { useAdminRoles } from '../../../../../../../admin/src/hooks/useAdminRoles';\nimport { selectAdminPermissions } from '../../../../../../../admin/src/selectors';\n\nimport { useSettingsForm } from './hooks/useSettingsForm';\nimport schema from './utils/schema';\n\nexport const SingleSignOn = () => {\n useFocusWhenNavigate();\n\n const { formatMessage } = useIntl();\n const permissions = useSelector(selectAdminPermissions);\n\n const {\n isLoading: isLoadingPermissions,\n allowedActions: { canUpdate, canReadRoles },\n } = useRBAC({\n ...permissions.settings.sso,\n readRoles: permissions.settings.roles.read,\n });\n\n const [\n { formErrors, initialData, isLoading: isLoadingForm, modifiedData, showHeaderButtonLoader },\n ,\n { handleChange, handleSubmit },\n ] = useSettingsForm(schema, () => {}, ['autoRegister', 'defaultRole', 'ssoLockedRoles']);\n\n const { roles, isLoading: isLoadingRoles } = useAdminRoles(undefined, {\n enabled: canReadRoles,\n });\n\n const isLoading = isLoadingPermissions || isLoadingRoles || isLoadingForm;\n // TODO: focus() first error field, but it looks like that requires refactoring from useSettingsForm to Formik\n\n return (\n <Layout>\n <SettingsPageTitle name=\"SSO\" />\n <Main tabIndex={-1}>\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n primaryAction={\n <Button\n data-testid=\"save-button\"\n disabled={isEqual(initialData, modifiedData)}\n loading={showHeaderButtonLoader}\n startIcon={<Check />}\n type=\"submit\"\n size=\"L\"\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({ id: 'Settings.sso.title', defaultMessage: 'Single Sign-On' })}\n subtitle={formatMessage({\n id: 'Settings.sso.description',\n defaultMessage: 'Configure the settings for the Single Sign-On feature.',\n })}\n />\n <ContentLayout>\n {isLoading ? (\n <LoadingIndicatorPage />\n ) : (\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n background=\"neutral0\"\n padding={6}\n shadow=\"filterShadow\"\n hasRadius\n >\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid gap={4}>\n <GridItem col={6} m={6} s={12}>\n <ToggleInput\n aria-label=\"autoRegister\"\n data-testid=\"autoRegister\"\n disabled={!canUpdate}\n checked={modifiedData.autoRegister}\n hint={formatMessage({\n id: 'Settings.sso.form.registration.description',\n defaultMessage: 'Create new user on SSO login if no account exists',\n })}\n label={formatMessage({\n id: 'Settings.sso.form.registration.label',\n defaultMessage: 'Auto-registration',\n })}\n name=\"autoRegister\"\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'autoRegister', value: e.target.checked },\n });\n }}\n />\n </GridItem>\n <GridItem col={6} m={6} s={12}>\n <Select\n disabled={!canUpdate}\n hint={formatMessage({\n id: 'Settings.sso.form.defaultRole.description',\n defaultMessage:\n 'It will attach the new authenticated user to the selected role',\n })}\n error={\n formErrors.defaultRole\n ? formatMessage({\n id: formErrors.defaultRole.id,\n defaultMessage: formErrors.defaultRole.id,\n })\n : ''\n }\n label={formatMessage({\n id: 'Settings.sso.form.defaultRole.label',\n defaultMessage: 'Default role',\n })}\n name=\"defaultRole\"\n onChange={(value) => {\n handleChange({ target: { name: 'defaultRole', value } });\n }}\n placeholder={formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n })}\n value={modifiedData.defaultRole}\n >\n {roles.map(({ id, name }) => (\n <Option key={id} value={id.toString()}>\n {name}\n </Option>\n ))}\n </Select>\n </GridItem>\n <GridItem col={6} m={6} s={12}>\n <MultiSelect\n disabled={!canUpdate}\n hint={formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.description',\n defaultMessage:\n 'Select the roles for which you want to disable the local authentication',\n })}\n error={\n formErrors.ssoLockedRoles\n ? formatMessage({\n id: formErrors.ssoLockedRoles.id,\n defaultMessage: formErrors.ssoLockedRoles.id,\n })\n : ''\n }\n label={formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.label',\n defaultMessage: 'Local authentication lock-out',\n })}\n name=\"ssoLockedRoles\"\n onChange={(value) => {\n handleChange({ target: { name: 'ssoLockedRoles', value } });\n }}\n placeholder={formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n })}\n onClear={() => {\n handleChange({ target: { name: 'ssoLockedRoles' } });\n }}\n value={modifiedData.ssoLockedRoles || []}\n withTags\n >\n {roles.map(({ id, name }) => (\n <MultiSelectOption key={id} value={id.toString()}>\n {name}\n </MultiSelectOption>\n ))}\n </MultiSelect>\n </GridItem>\n </Grid>\n </Flex>\n )}\n </ContentLayout>\n </form>\n </Main>\n </Layout>\n );\n};\n\nconst ProtectedSSO = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings.sso.main}>\n <SingleSignOn />\n </CheckPagePermissions>\n );\n};\n\nexport default ProtectedSSO;\n"],"names":["schema"],"mappings":"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"}
1
+ {"version":3,"file":"index-55a46be8.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/SingleSignOn/hooks/useSettingsForm.ts","../../ee/admin/src/pages/SettingsPage/pages/SingleSignOn/utils/schema.js","../../ee/admin/src/pages/SettingsPage/pages/SingleSignOn/index.js"],"sourcesContent":["import * as React from 'react';\n\nimport {\n getYupInnerErrors,\n useFetchClient,\n useNotification,\n useOverlayBlocker,\n} from '@strapi/helper-plugin';\nimport produce from 'immer';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport set from 'lodash/set';\nimport { ValidationError } from 'yup';\n\nimport { formatAPIErrors } from '../../../../../../../../admin/src/utils/formatAPIErrors';\n\ninterface GetDataSucceedAction {\n type: 'GET_DATA_SUCCEEDED';\n data: {\n [key: string]: unknown;\n };\n fieldsToPick: string[];\n}\n\ninterface OnCancelAction {\n type: 'ON_CANCEL';\n}\n\ninterface OnChangeAction {\n type: 'ON_CHANGE';\n keys: string;\n value: unknown;\n}\n\ninterface OnSubmitAction {\n type: 'ON_SUBMIT';\n}\n\ninterface OnSubmitSucceedAction {\n type: 'ON_SUBMIT_SUCCEEDED';\n data: {\n [key: string]: unknown;\n };\n}\n\ninterface SetErrorsAction {\n type: 'SET_ERRORS';\n errors: Record<string, unknown>;\n}\n\ninterface InitialState {\n fieldsToPick: string[];\n formErrors?: Record<string, unknown>;\n initialData: Record<string, unknown>;\n isLoading: boolean;\n modifiedData: Record<string, unknown>;\n showHeaderButtonLoader: boolean;\n showHeaderLoader: boolean;\n}\n\nconst initialState: InitialState = {\n fieldsToPick: [],\n formErrors: {},\n initialData: {},\n isLoading: true,\n modifiedData: {},\n showHeaderButtonLoader: false,\n showHeaderLoader: true,\n};\n\ntype Action =\n | GetDataSucceedAction\n | OnCancelAction\n | OnChangeAction\n | OnSubmitAction\n | OnSubmitSucceedAction\n | SetErrorsAction;\n\nconst reducer = (state: typeof initialState, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'GET_DATA_SUCCEEDED': {\n draftState.isLoading = false;\n draftState.showHeaderLoader = false;\n draftState.initialData = pick(action.data, state.fieldsToPick);\n draftState.modifiedData = pick(action.data, state.fieldsToPick);\n break;\n }\n case 'ON_CANCEL': {\n draftState.modifiedData = state.initialData;\n draftState.formErrors = {};\n break;\n }\n case 'ON_CHANGE': {\n if (action.keys.includes('username') && !action.value) {\n set(draftState.modifiedData, action.keys.split('.'), null);\n } else {\n set(draftState.modifiedData, action.keys.split('.'), action.value);\n }\n break;\n }\n case 'ON_SUBMIT': {\n draftState.showHeaderButtonLoader = true;\n break;\n }\n case 'ON_SUBMIT_SUCCEEDED': {\n draftState.initialData = pick(action.data, state.fieldsToPick);\n draftState.modifiedData = pick(action.data, state.fieldsToPick);\n draftState.showHeaderButtonLoader = false;\n break;\n }\n case 'SET_ERRORS': {\n draftState.formErrors = action.errors;\n draftState.showHeaderButtonLoader = false;\n break;\n }\n default:\n return draftState;\n }\n });\n\nconst checkFormValidity = async (data: Record<string, unknown>, schema: any) => {\n let errors = null;\n\n try {\n await schema.validate(data, { abortEarly: false });\n } catch (err) {\n if (err instanceof ValidationError) {\n errors = getYupInnerErrors(err);\n }\n }\n\n return errors;\n};\n\n/**\n * TODO: refactor this, it's confusing and hard to read.\n * It's also only used in `Settings/pages/SingleSignOn` so it can\n * probably be deleted and everything written there...\n */\nexport const useSettingsForm = (\n schema: Record<string, unknown>,\n cbSuccess: (data: any) => void,\n fieldsToPick: string[]\n) => {\n const [\n { formErrors, initialData, isLoading, modifiedData, showHeaderButtonLoader, showHeaderLoader },\n dispatch,\n ] = React.useReducer(reducer, { ...initialState, fieldsToPick });\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n\n const { get, put } = useFetchClient();\n\n React.useEffect(() => {\n const getData = async () => {\n try {\n const {\n data: { data },\n } = await get('/admin/providers/options');\n\n dispatch({\n type: 'GET_DATA_SUCCEEDED',\n data,\n fieldsToPick,\n });\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n }\n };\n\n getData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleCancel = () => {\n dispatch({\n type: 'ON_CANCEL',\n });\n };\n\n const handleChange = ({\n target: { name, value },\n }: {\n target: { name: string; value?: unknown };\n }) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: name,\n value,\n });\n };\n\n const setField = (fieldName: string, value: unknown) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: fieldName,\n value,\n });\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n\n const errors = await checkFormValidity(modifiedData, schema);\n\n dispatch({\n type: 'SET_ERRORS',\n errors: errors || {},\n });\n\n if (!errors) {\n try {\n // @ts-expect-error - context assertation\n lockApp();\n\n dispatch({\n type: 'ON_SUBMIT',\n });\n const cleanedData = omit(modifiedData, ['confirmPassword', 'registrationToken']);\n\n if (cleanedData.roles) {\n // @ts-expect-error hooks needs refactoring anyways\n cleanedData.roles = cleanedData.roles.map((role) => role.id);\n }\n if (cleanedData.ssoLockedRoles) {\n // @ts-expect-error hooks needs refactoring anyways\n cleanedData.ssoLockedRoles = [...new Set(cleanedData.ssoLockedRoles)];\n }\n\n const {\n data: { data },\n } = await put('/admin/providers/options', cleanedData);\n\n cbSuccess(data);\n\n dispatch({\n type: 'ON_SUBMIT_SUCCEEDED',\n data,\n });\n\n toggleNotification({\n type: 'success',\n message: { id: 'notification.success.saved' },\n });\n } catch (err) {\n // @ts-expect-error hooks needs refactoring anyways\n const data = err?.response?.payload ?? { data: {} };\n\n if (!!data?.data && typeof data.data === 'string') {\n toggleNotification({\n type: 'warning',\n message: data.data,\n });\n } else {\n toggleNotification({\n type: 'warning',\n message: data.message,\n });\n }\n\n const apiErrors = formatAPIErrors(data);\n\n dispatch({\n type: 'SET_ERRORS',\n errors: apiErrors,\n });\n } finally {\n // @ts-expect-error - context assertation\n unlockApp();\n }\n }\n };\n\n return [\n { formErrors, initialData, isLoading, modifiedData, showHeaderButtonLoader, showHeaderLoader },\n dispatch,\n { handleCancel, handleChange, handleSubmit, setField },\n ] as const;\n};\n","import { translatedErrors } from '@strapi/helper-plugin';\nimport * as yup from 'yup';\n\nconst schema = yup.object().shape({\n autoRegister: yup.bool().required(translatedErrors.required),\n defaultRole: yup.mixed().when('autoRegister', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n }),\n ssoLockedRoles: yup\n .array()\n .nullable()\n .of(\n yup.mixed().when('ssoLockedRoles', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n })\n ),\n});\n\nexport default schema;\n","import * as React from 'react';\n\nimport {\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Layout,\n Main,\n MultiSelect,\n MultiSelectOption,\n Option,\n Select,\n ToggleInput,\n Typography,\n} from '@strapi/design-system';\nimport {\n CheckPagePermissions,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useFocusWhenNavigate,\n useRBAC,\n} from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { useAdminRoles } from '../../../../../../../admin/src/hooks/useAdminRoles';\nimport { selectAdminPermissions } from '../../../../../../../admin/src/selectors';\n\nimport { useSettingsForm } from './hooks/useSettingsForm';\nimport schema from './utils/schema';\n\nexport const SingleSignOn = () => {\n useFocusWhenNavigate();\n\n const { formatMessage } = useIntl();\n const permissions = useSelector(selectAdminPermissions);\n\n const {\n isLoading: isLoadingPermissions,\n allowedActions: { canUpdate, canReadRoles },\n } = useRBAC({\n ...permissions.settings.sso,\n readRoles: permissions.settings.roles.read,\n });\n\n const [\n { formErrors, initialData, isLoading: isLoadingForm, modifiedData, showHeaderButtonLoader },\n ,\n { handleChange, handleSubmit },\n ] = useSettingsForm(schema, () => {}, ['autoRegister', 'defaultRole', 'ssoLockedRoles']);\n\n const { roles, isLoading: isLoadingRoles } = useAdminRoles(undefined, {\n enabled: canReadRoles,\n });\n\n const isLoading = isLoadingPermissions || isLoadingRoles || isLoadingForm;\n // TODO: focus() first error field, but it looks like that requires refactoring from useSettingsForm to Formik\n\n return (\n <Layout>\n <SettingsPageTitle name=\"SSO\" />\n <Main tabIndex={-1}>\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n primaryAction={\n <Button\n data-testid=\"save-button\"\n disabled={isEqual(initialData, modifiedData)}\n loading={showHeaderButtonLoader}\n startIcon={<Check />}\n type=\"submit\"\n size=\"L\"\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({ id: 'Settings.sso.title', defaultMessage: 'Single Sign-On' })}\n subtitle={formatMessage({\n id: 'Settings.sso.description',\n defaultMessage: 'Configure the settings for the Single Sign-On feature.',\n })}\n />\n <ContentLayout>\n {isLoading ? (\n <LoadingIndicatorPage />\n ) : (\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n background=\"neutral0\"\n padding={6}\n shadow=\"filterShadow\"\n hasRadius\n >\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid gap={4}>\n <GridItem col={6} m={6} s={12}>\n <ToggleInput\n aria-label=\"autoRegister\"\n data-testid=\"autoRegister\"\n disabled={!canUpdate}\n checked={modifiedData.autoRegister}\n hint={formatMessage({\n id: 'Settings.sso.form.registration.description',\n defaultMessage: 'Create new user on SSO login if no account exists',\n })}\n label={formatMessage({\n id: 'Settings.sso.form.registration.label',\n defaultMessage: 'Auto-registration',\n })}\n name=\"autoRegister\"\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'autoRegister', value: e.target.checked },\n });\n }}\n />\n </GridItem>\n <GridItem col={6} m={6} s={12}>\n <Select\n disabled={!canUpdate}\n hint={formatMessage({\n id: 'Settings.sso.form.defaultRole.description',\n defaultMessage:\n 'It will attach the new authenticated user to the selected role',\n })}\n error={\n formErrors.defaultRole\n ? formatMessage({\n id: formErrors.defaultRole.id,\n defaultMessage: formErrors.defaultRole.id,\n })\n : ''\n }\n label={formatMessage({\n id: 'Settings.sso.form.defaultRole.label',\n defaultMessage: 'Default role',\n })}\n name=\"defaultRole\"\n onChange={(value) => {\n handleChange({ target: { name: 'defaultRole', value } });\n }}\n placeholder={formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n })}\n value={modifiedData.defaultRole}\n >\n {roles.map(({ id, name }) => (\n <Option key={id} value={id.toString()}>\n {name}\n </Option>\n ))}\n </Select>\n </GridItem>\n <GridItem col={6} m={6} s={12}>\n <MultiSelect\n disabled={!canUpdate}\n hint={formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.description',\n defaultMessage:\n 'Select the roles for which you want to disable the local authentication',\n })}\n error={\n formErrors.ssoLockedRoles\n ? formatMessage({\n id: formErrors.ssoLockedRoles.id,\n defaultMessage: formErrors.ssoLockedRoles.id,\n })\n : ''\n }\n label={formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.label',\n defaultMessage: 'Local authentication lock-out',\n })}\n name=\"ssoLockedRoles\"\n onChange={(value) => {\n handleChange({ target: { name: 'ssoLockedRoles', value } });\n }}\n placeholder={formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n })}\n onClear={() => {\n handleChange({ target: { name: 'ssoLockedRoles' } });\n }}\n value={modifiedData.ssoLockedRoles || []}\n withTags\n >\n {roles.map(({ id, name }) => (\n <MultiSelectOption key={id} value={id.toString()}>\n {name}\n </MultiSelectOption>\n ))}\n </MultiSelect>\n </GridItem>\n </Grid>\n </Flex>\n )}\n </ContentLayout>\n </form>\n </Main>\n </Layout>\n );\n};\n\nconst ProtectedSSO = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings.sso.main}>\n <SingleSignOn />\n </CheckPagePermissions>\n );\n};\n\nexport default ProtectedSSO;\n"],"names":["schema"],"mappings":"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"}
@@ -4,7 +4,7 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const helperPlugin = require("@strapi/helper-plugin");
5
5
  const reactRedux = require("react-redux");
6
6
  const reactRouterDom = require("react-router-dom");
7
- const AuthenticatedApp = require("./AuthenticatedApp-f7762ffc.js");
7
+ const AuthenticatedApp = require("./AuthenticatedApp-4b160235.js");
8
8
  const React = require("react");
9
9
  const designSystem = require("@strapi/design-system");
10
10
  const Icons = require("@strapi/icons");
@@ -17,7 +17,7 @@ const yup = require("yup");
17
17
  require("react-query");
18
18
  require("semver/functions/lt");
19
19
  require("semver/functions/valid");
20
- require("./index-0f8c5c53.js");
20
+ require("./index-7c0dcf2b.js");
21
21
  require("react-dom/client");
22
22
  require("invariant");
23
23
  require("lodash/isFunction");
@@ -291,4 +291,4 @@ const ProtectedEditPage = () => {
291
291
  return /* @__PURE__ */ jsxRuntime.jsx(EditPage, {});
292
292
  };
293
293
  exports.default = ProtectedEditPage;
294
- //# sourceMappingURL=index-c1f8110c.js.map
294
+ //# sourceMappingURL=index-55d6d65a.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-c1f8110c.js","sources":["../../admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RoleForm/index.js","../../admin/src/pages/SettingsPage/pages/Roles/EditPage/utils/schema.js","../../admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ProtectedEditPage/index.js"],"sourcesContent":["import React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n Grid,\n GridItem,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst RoleForm = ({ disabled, role, values, errors, onChange, onBlur }) => {\n const { formatMessage } = useIntl();\n\n return (\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 {role\n ? role.name\n : formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography textColor=\"neutral500\" variant=\"pi\">\n {role\n ? role.description\n : formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <Button disabled variant=\"secondary\">\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: role.usersCount }\n )}\n </Button>\n </Flex>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n disabled={disabled}\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n onChange={onChange}\n onBlur={onBlur}\n required\n value={values.name || ''}\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n disabled={disabled}\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n id=\"description\"\n error={errors.name && formatMessage({ id: errors.name })}\n onChange={onChange}\n onBlur={onBlur}\n >\n {values.description || ''}\n </Textarea>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\nRoleForm.defaultProps = {\n disabled: false,\n role: null,\n values: { name: '', description: '' },\n};\nRoleForm.propTypes = {\n disabled: PropTypes.bool,\n errors: PropTypes.object.isRequired,\n onBlur: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n role: PropTypes.object,\n values: PropTypes.object,\n};\n\nexport default RoleForm;\n","import { translatedErrors } from '@strapi/helper-plugin';\nimport * as yup from 'yup';\n\nconst schema = yup.object().shape({\n name: yup.string().required(translatedErrors.required),\n});\n\nexport default schema;\n","import React, { useRef, useState } from 'react';\n\nimport { Box, Button, ContentLayout, Flex, HeaderLayout, Main } from '@strapi/design-system';\nimport {\n Link,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useAPIErrorHandler,\n useFetchClient,\n useNotification,\n useOverlayBlocker,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft } from '@strapi/icons';\nimport { Formik } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useRouteMatch } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../hooks/useAdminRoles';\nimport { useAdminRolePermissionLayout } from '../hooks/useAdminRolePermissionLayout';\nimport { useAdminRolePermissions } from '../hooks/useAdminRolePermissions';\n\nimport { Permissions, RoleForm } from './components';\nimport schema from './utils/schema';\n\nconst EditPage = () => {\n const toggleNotification = useNotification();\n const { formatMessage } = useIntl();\n const {\n params: { id },\n } = useRouteMatch('/settings/roles/:id');\n const { put } = useFetchClient();\n const [isSubmitting, setIsSubmiting] = useState(false);\n const permissionsRef = useRef();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { trackUsage } = useTracking();\n const { formatAPIError } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useAdminRolePermissionLayout(id, {\n cacheTime: 0,\n });\n\n const {\n roles: [role = {}],\n isLoading: isRoleLoading,\n refetch: refetchRole,\n } = useAdminRoles(\n { id },\n {\n cacheTime: 0,\n }\n );\n\n const { permissions, isLoading: isLoadingPermissions } = useAdminRolePermissions(\n { id },\n {\n cacheTime: 0,\n }\n );\n\n // TODO: this should use a react-query mutation\n const handleEditRoleSubmit = async (data) => {\n try {\n lockApp();\n setIsSubmiting(true);\n\n const { permissionsToSend, didUpdateConditions } = permissionsRef.current.getPermissions();\n\n await put(`/admin/roles/${id}`, data);\n\n if (role.code !== 'strapi-super-admin') {\n await put(`/admin/roles/${id}/permissions`, {\n permissions: permissionsToSend,\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: { id: 'notification.success.saved' },\n });\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n } finally {\n setIsSubmiting(false);\n unlockApp();\n }\n };\n\n const isFormDisabled = !isRoleLoading && role.code === 'strapi-super-admin';\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <Formik\n enableReinitialize\n initialValues={{\n name: role.name,\n description: role.description,\n }}\n onSubmit={handleEditRoleSubmit}\n validationSchema={schema}\n validateOnChange={false}\n >\n {({ handleSubmit, values, errors, handleChange, handleBlur }) => (\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n primaryAction={\n <Flex gap={2}>\n <Button\n disabled={role.code === 'strapi-super-admin'}\n onClick={handleSubmit}\n loading={isSubmitting}\n size=\"L\"\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 <Link startIcon={<ArrowLeft />} to=\"/settings/roles\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <RoleForm\n isLoading={isRoleLoading || isLoadingPermissions}\n disabled={isFormDisabled}\n errors={errors}\n values={values}\n onChange={handleChange}\n onBlur={handleBlur}\n role={role}\n />\n {!isLoadingPermissionsLayout && !isRoleLoading && !isLoadingPermissions ? (\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={isFormDisabled}\n permissions={permissions}\n ref={permissionsRef}\n layout={permissionsLayout}\n />\n </Box>\n ) : (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <LoadingIndicatorPage />\n </Box>\n )}\n </Flex>\n </ContentLayout>\n </form>\n )}\n </Formik>\n </Main>\n );\n};\n\nexport default EditPage;\n","import React from 'react';\n\nimport { LoadingIndicatorPage, useRBAC } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\nimport { Redirect } from 'react-router-dom';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport EditPage from '../EditPage';\n\nconst ProtectedEditPage = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n const {\n isLoading,\n allowedActions: { canRead, canUpdate },\n } = useRBAC({\n read: permissions.settings.roles.read,\n update: permissions.settings.roles.update,\n });\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n if (!canRead && !canUpdate) {\n return <Redirect to=\"/\" />;\n }\n\n return <EditPage />;\n};\n\nexport default ProtectedEditPage;\n"],"names":["useIntl","Box","Flex","jsxs","jsx","Typography","Button","Grid","GridItem","TextInput","Textarea","PropTypes","yup","translatedErrors","useNotification","useRouteMatch","useFetchClient","useState","useRef","useOverlayBlocker","useTracking","useAPIErrorHandler","useAdminRolePermissionLayout","useAdminRoles","useAdminRolePermissions","Main","SettingsPageTitle","Formik","HeaderLayout","Link","ArrowLeft","ContentLayout","Permissions","LoadingIndicatorPage","useSelector","selectAdminPermissions","useRBAC","Redirect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,MAAM,WAAW,CAAC,EAAE,UAAU,MAAM,QAAQ,QAAQ,UAAU,aAAa;AACnE,QAAA,EAAE,kBAAkBA,UAAAA;AAE1B,wCACGC,kBAAI,EAAA,YAAW,YAAW,SAAS,GAAG,QAAO,gBAAe,WAAS,MACpE,0CAACC,mBAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,IAACC,2BAAAA,KAAAD,aAAAA,MAAA,EAAK,gBAAe,iBACnB,UAAA;AAAA,MAAAC,gCAACF,aAAAA,KACC,EAAA,UAAA;AAAA,QAACG,2BAAAA,IAAAH,aAAAA,KAAA,EACC,yCAACI,aAAAA,YAAW,EAAA,YAAW,QACpB,UACG,OAAA,KAAK,OACL,cAAc;AAAA,UACZ,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB,GACP,EACF,CAAA;AAAA,QACAD,2BAAA,IAACH,aACC,KAAA,EAAA,UAAAG,2BAAAA,IAACC,aAAAA,YAAW,EAAA,WAAU,cAAa,SAAQ,MACxC,UAAA,OACG,KAAK,cACL,cAAc;AAAA,UACZ,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB,GACP,EACF,CAAA;AAAA,MAAA,GACF;AAAA,MACCD,2BAAA,IAAAE,aAAA,QAAA,EAAO,UAAQ,MAAC,SAAQ,aACtB,UAAA;AAAA,QACC;AAAA,UACE,IAAI;AAAA,UACJ,gBACE;AAAA,QACJ;AAAA,QACA,EAAE,QAAQ,KAAK,WAAW;AAAA,MAAA,GAE9B;AAAA,IAAA,GACF;AAAA,IACAH,2BAAAA,KAACI,aAAAA,MAAK,EAAA,KAAK,GACT,UAAA;AAAA,MAACH,2BAAAA,IAAAI,aAAAA,UAAA,EAAS,KAAK,GACb,UAAAJ,2BAAA;AAAA,QAACK,aAAA;AAAA,QAAA;AAAA,UACC;AAAA,UACA,MAAK;AAAA,UACL,OAAO,OAAO,QAAQ,cAAc,EAAE,IAAI,OAAO,MAAM;AAAA,UACvD,OAAO,cAAc;AAAA,YACnB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD;AAAA,UACA;AAAA,UACA,UAAQ;AAAA,UACR,OAAO,OAAO,QAAQ;AAAA,QAAA;AAAA,MAAA,GAE1B;AAAA,MACAL,2BAAAA,IAACI,aAAAA,UAAS,EAAA,KAAK,GACb,UAAAJ,2BAAA;AAAA,QAACM,aAAA;AAAA,QAAA;AAAA,UACC;AAAA,UACA,OAAO,cAAc;AAAA,YACnB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,IAAG;AAAA,UACH,OAAO,OAAO,QAAQ,cAAc,EAAE,IAAI,OAAO,MAAM;AAAA,UACvD;AAAA,UACA;AAAA,UAEC,iBAAO,eAAe;AAAA,QAAA;AAAA,MAAA,GAE3B;AAAA,IAAA,GACF;AAAA,EAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB,UAAU;AAAA,EACV,MAAM;AAAA,EACN,QAAQ,EAAE,MAAM,IAAI,aAAa,GAAG;AACtC;AACA,SAAS,YAAY;AAAA,EACnB,UAAUC,mBAAU,QAAA;AAAA,EACpB,QAAQA,mBAAAA,QAAU,OAAO;AAAA,EACzB,QAAQA,mBAAAA,QAAU,KAAK;AAAA,EACvB,UAAUA,mBAAAA,QAAU,KAAK;AAAA,EACzB,MAAMA,mBAAU,QAAA;AAAA,EAChB,QAAQA,mBAAU,QAAA;AACpB;ACrGA,MAAM,SAASC,eAAI,OAAO,EAAE,MAAM;AAAA,EAChC,MAAMA,eAAI,OAAA,EAAS,SAASC,aAAAA,iBAAiB,QAAQ;AACvD,CAAC;ACoBD,MAAM,WAAW,MAAM;AACrB,QAAM,qBAAqBC,aAAAA;AACrB,QAAA,EAAE,kBAAkBd,UAAAA;AACpB,QAAA;AAAA,IACJ,QAAQ,EAAE,GAAG;AAAA,EAAA,IACXe,eAAAA,cAAc,qBAAqB;AACjC,QAAA,EAAE,QAAQC,aAAAA;AAChB,QAAM,CAAC,cAAc,cAAc,IAAIC,eAAS,KAAK;AACrD,QAAM,iBAAiBC,MAAAA;AACvB,QAAM,EAAE,SAAS,UAAU,IAAIC,aAAkB,kBAAA;AAC3C,QAAA,EAAE,eAAeC,aAAAA;AACjB,QAAA,EAAE,mBAAmBC,aAAAA;AAE3B,QAAM,EAAE,WAAW,4BAA4B,MAAM,kBAAkB,IACrEC,qDAA6B,IAAI;AAAA,IAC/B,WAAW;AAAA,EAAA,CACZ;AAEG,QAAA;AAAA,IACJ,OAAO,CAAC,OAAO,EAAE;AAAA,IACjB,WAAW;AAAA,IACX,SAAS;AAAA,EAAA,IACPC,cAAA;AAAA,IACF,EAAE,GAAG;AAAA,IACL;AAAA,MACE,WAAW;AAAA,IACb;AAAA,EAAA;AAGF,QAAM,EAAE,aAAa,WAAW,qBAAyB,IAAAC,wBAAA;AAAA,IACvD,EAAE,GAAG;AAAA,IACL;AAAA,MACE,WAAW;AAAA,IACb;AAAA,EAAA;AAII,QAAA,uBAAuB,OAAO,SAAS;AACvC,QAAA;AACM;AACR,qBAAe,IAAI;AAEnB,YAAM,EAAE,mBAAmB,oBAAA,IAAwB,eAAe,QAAQ;AAE1E,YAAM,IAAI,gBAAgB,EAAE,IAAI,IAAI;AAEhC,UAAA,KAAK,SAAS,sBAAsB;AAChC,cAAA,IAAI,gBAAgB,EAAE,gBAAgB;AAAA,UAC1C,aAAa;AAAA,QAAA,CACd;AAED,YAAI,qBAAqB;AACvB,qBAAW,qBAAqB;AAAA,QAClC;AAAA,MACF;AAEA,qBAAe,QAAQ;AAEvB,YAAM,YAAY;AAEC,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,EAAE,IAAI,6BAA6B;AAAA,MAAA,CAC7C;AAAA,aACM,OAAO;AACK,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,KAAK;AAAA,MAAA,CAC9B;AAAA,IAAA,UACD;AACA,qBAAe,KAAK;AACV;IACZ;AAAA,EAAA;AAGF,QAAM,iBAAiB,CAAC,iBAAiB,KAAK,SAAS;AAEvD,yCACGC,mBACC,EAAA,UAAA;AAAA,IAACrB,2BAAAA,IAAAsB,aAAA,mBAAA,EAAkB,MAAK,QAAQ,CAAA;AAAA,IAChCtB,2BAAA;AAAA,MAACuB,OAAA;AAAA,MAAA;AAAA,QACC,oBAAkB;AAAA,QAClB,eAAe;AAAA,UACb,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,QACpB;AAAA,QACA,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,kBAAkB;AAAA,QAEjB,UAAA,CAAC,EAAE,cAAc,QAAQ,QAAQ,cAAc,WAC9C,MAAAxB,2BAAA,KAAC,QAAK,EAAA,UAAU,cACd,UAAA;AAAA,UAAAC,2BAAA;AAAA,YAACwB,aAAA;AAAA,YAAA;AAAA,cACC,eACExB,2BAAA,IAACF,aAAK,MAAA,EAAA,KAAK,GACT,UAAAE,2BAAA;AAAA,gBAACE,aAAA;AAAA,gBAAA;AAAA,kBACC,UAAU,KAAK,SAAS;AAAA,kBACxB,SAAS;AAAA,kBACT,SAAS;AAAA,kBACT,MAAK;AAAA,kBAEJ,UAAc,cAAA;AAAA,oBACb,IAAI;AAAA,oBACJ,gBAAgB;AAAA,kBAAA,CACjB;AAAA,gBAAA;AAAA,cAAA,GAEL;AAAA,cAEF,OAAO,cAAc;AAAA,gBACnB,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB;AAAA,cACD,UAAU,cAAc;AAAA,gBACtB,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB;AAAA,cACD,iDACGuB,mBAAK,EAAA,0CAAYC,iBAAU,CAAA,CAAA,GAAI,IAAG,mBAChC,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cACjB,CAAA,GACH;AAAA,YAAA;AAAA,UAEJ;AAAA,UACA1B,2BAAAA,IAAC2B,aAAAA,iBACC,UAAC5B,2BAAAA,KAAAD,aAAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,YAAAE,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW,iBAAiB;AAAA,gBAC5B,UAAU;AAAA,gBACV;AAAA,gBACA;AAAA,gBACA,UAAU;AAAA,gBACV,QAAQ;AAAA,gBACR;AAAA,cAAA;AAAA,YACF;AAAA,YACC,CAAC,8BAA8B,CAAC,iBAAiB,CAAC,uBACjDA,2BAAAA,IAACH,aAAAA,KAAI,EAAA,QAAO,gBAAe,WAAS,MAClC,UAAAG,2BAAA;AAAA,cAAC4B,wBAAA;AAAA,cAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA,KAAK;AAAA,gBACL,QAAQ;AAAA,cAAA;AAAA,YAAA,EAEZ,CAAA,IAEC5B,2BAAAA,IAAAH,aAAA,KAAA,EAAI,YAAW,YAAW,SAAS,GAAG,QAAO,gBAAe,WAAS,MACpE,UAAAG,2BAAAA,IAAC6B,oCAAqB,CAAA,GACxB;AAAA,UAAA,EAAA,CAEJ,EACF,CAAA;AAAA,QAAA,GACF;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF,EAAA,CAAA;AAEJ;AC7KA,MAAM,oBAAoB,MAAM;AACxB,QAAA,cAAcC,uBAAYC,iBAAAA,sBAAsB;AAEhD,QAAA;AAAA,IACJ;AAAA,IACA,gBAAgB,EAAE,SAAS,UAAU;AAAA,MACnCC,qBAAQ;AAAA,IACV,MAAM,YAAY,SAAS,MAAM;AAAA,IACjC,QAAQ,YAAY,SAAS,MAAM;AAAA,EAAA,CACpC;AAED,MAAI,WAAW;AACb,0CAAQH,mCAAqB,CAAA,CAAA;AAAA,EAC/B;AAEI,MAAA,CAAC,WAAW,CAAC,WAAW;AACnB,WAAA7B,2BAAA,IAACiC,eAAS,UAAA,EAAA,IAAG,IAAI,CAAA;AAAA,EAC1B;AAEA,wCAAQ,UAAS,CAAA,CAAA;AACnB;;"}
1
+ {"version":3,"file":"index-55d6d65a.js","sources":["../../admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RoleForm/index.js","../../admin/src/pages/SettingsPage/pages/Roles/EditPage/utils/schema.js","../../admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ProtectedEditPage/index.js"],"sourcesContent":["import React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n Grid,\n GridItem,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst RoleForm = ({ disabled, role, values, errors, onChange, onBlur }) => {\n const { formatMessage } = useIntl();\n\n return (\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 {role\n ? role.name\n : formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography textColor=\"neutral500\" variant=\"pi\">\n {role\n ? role.description\n : formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <Button disabled variant=\"secondary\">\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: role.usersCount }\n )}\n </Button>\n </Flex>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n disabled={disabled}\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n onChange={onChange}\n onBlur={onBlur}\n required\n value={values.name || ''}\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n disabled={disabled}\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n id=\"description\"\n error={errors.name && formatMessage({ id: errors.name })}\n onChange={onChange}\n onBlur={onBlur}\n >\n {values.description || ''}\n </Textarea>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\nRoleForm.defaultProps = {\n disabled: false,\n role: null,\n values: { name: '', description: '' },\n};\nRoleForm.propTypes = {\n disabled: PropTypes.bool,\n errors: PropTypes.object.isRequired,\n onBlur: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n role: PropTypes.object,\n values: PropTypes.object,\n};\n\nexport default RoleForm;\n","import { translatedErrors } from '@strapi/helper-plugin';\nimport * as yup from 'yup';\n\nconst schema = yup.object().shape({\n name: yup.string().required(translatedErrors.required),\n});\n\nexport default schema;\n","import React, { useRef, useState } from 'react';\n\nimport { Box, Button, ContentLayout, Flex, HeaderLayout, Main } from '@strapi/design-system';\nimport {\n Link,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useAPIErrorHandler,\n useFetchClient,\n useNotification,\n useOverlayBlocker,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft } from '@strapi/icons';\nimport { Formik } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useRouteMatch } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../hooks/useAdminRoles';\nimport { useAdminRolePermissionLayout } from '../hooks/useAdminRolePermissionLayout';\nimport { useAdminRolePermissions } from '../hooks/useAdminRolePermissions';\n\nimport { Permissions, RoleForm } from './components';\nimport schema from './utils/schema';\n\nconst EditPage = () => {\n const toggleNotification = useNotification();\n const { formatMessage } = useIntl();\n const {\n params: { id },\n } = useRouteMatch('/settings/roles/:id');\n const { put } = useFetchClient();\n const [isSubmitting, setIsSubmiting] = useState(false);\n const permissionsRef = useRef();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { trackUsage } = useTracking();\n const { formatAPIError } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useAdminRolePermissionLayout(id, {\n cacheTime: 0,\n });\n\n const {\n roles: [role = {}],\n isLoading: isRoleLoading,\n refetch: refetchRole,\n } = useAdminRoles(\n { id },\n {\n cacheTime: 0,\n }\n );\n\n const { permissions, isLoading: isLoadingPermissions } = useAdminRolePermissions(\n { id },\n {\n cacheTime: 0,\n }\n );\n\n // TODO: this should use a react-query mutation\n const handleEditRoleSubmit = async (data) => {\n try {\n lockApp();\n setIsSubmiting(true);\n\n const { permissionsToSend, didUpdateConditions } = permissionsRef.current.getPermissions();\n\n await put(`/admin/roles/${id}`, data);\n\n if (role.code !== 'strapi-super-admin') {\n await put(`/admin/roles/${id}/permissions`, {\n permissions: permissionsToSend,\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: { id: 'notification.success.saved' },\n });\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n } finally {\n setIsSubmiting(false);\n unlockApp();\n }\n };\n\n const isFormDisabled = !isRoleLoading && role.code === 'strapi-super-admin';\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <Formik\n enableReinitialize\n initialValues={{\n name: role.name,\n description: role.description,\n }}\n onSubmit={handleEditRoleSubmit}\n validationSchema={schema}\n validateOnChange={false}\n >\n {({ handleSubmit, values, errors, handleChange, handleBlur }) => (\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n primaryAction={\n <Flex gap={2}>\n <Button\n disabled={role.code === 'strapi-super-admin'}\n onClick={handleSubmit}\n loading={isSubmitting}\n size=\"L\"\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 <Link startIcon={<ArrowLeft />} to=\"/settings/roles\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <RoleForm\n isLoading={isRoleLoading || isLoadingPermissions}\n disabled={isFormDisabled}\n errors={errors}\n values={values}\n onChange={handleChange}\n onBlur={handleBlur}\n role={role}\n />\n {!isLoadingPermissionsLayout && !isRoleLoading && !isLoadingPermissions ? (\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={isFormDisabled}\n permissions={permissions}\n ref={permissionsRef}\n layout={permissionsLayout}\n />\n </Box>\n ) : (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <LoadingIndicatorPage />\n </Box>\n )}\n </Flex>\n </ContentLayout>\n </form>\n )}\n </Formik>\n </Main>\n );\n};\n\nexport default EditPage;\n","import React from 'react';\n\nimport { LoadingIndicatorPage, useRBAC } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\nimport { Redirect } from 'react-router-dom';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport EditPage from '../EditPage';\n\nconst ProtectedEditPage = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n const {\n isLoading,\n allowedActions: { canRead, canUpdate },\n } = useRBAC({\n read: permissions.settings.roles.read,\n update: permissions.settings.roles.update,\n });\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n if (!canRead && !canUpdate) {\n return <Redirect to=\"/\" />;\n }\n\n return <EditPage />;\n};\n\nexport default ProtectedEditPage;\n"],"names":["useIntl","Box","Flex","jsxs","jsx","Typography","Button","Grid","GridItem","TextInput","Textarea","PropTypes","yup","translatedErrors","useNotification","useRouteMatch","useFetchClient","useState","useRef","useOverlayBlocker","useTracking","useAPIErrorHandler","useAdminRolePermissionLayout","useAdminRoles","useAdminRolePermissions","Main","SettingsPageTitle","Formik","HeaderLayout","Link","ArrowLeft","ContentLayout","Permissions","LoadingIndicatorPage","useSelector","selectAdminPermissions","useRBAC","Redirect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,MAAM,WAAW,CAAC,EAAE,UAAU,MAAM,QAAQ,QAAQ,UAAU,aAAa;AACnE,QAAA,EAAE,kBAAkBA,UAAAA;AAE1B,wCACGC,kBAAI,EAAA,YAAW,YAAW,SAAS,GAAG,QAAO,gBAAe,WAAS,MACpE,0CAACC,mBAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,IAACC,2BAAAA,KAAAD,aAAAA,MAAA,EAAK,gBAAe,iBACnB,UAAA;AAAA,MAAAC,gCAACF,aAAAA,KACC,EAAA,UAAA;AAAA,QAACG,2BAAAA,IAAAH,aAAAA,KAAA,EACC,yCAACI,aAAAA,YAAW,EAAA,YAAW,QACpB,UACG,OAAA,KAAK,OACL,cAAc;AAAA,UACZ,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB,GACP,EACF,CAAA;AAAA,QACAD,2BAAA,IAACH,aACC,KAAA,EAAA,UAAAG,2BAAAA,IAACC,aAAAA,YAAW,EAAA,WAAU,cAAa,SAAQ,MACxC,UAAA,OACG,KAAK,cACL,cAAc;AAAA,UACZ,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB,GACP,EACF,CAAA;AAAA,MAAA,GACF;AAAA,MACCD,2BAAA,IAAAE,aAAA,QAAA,EAAO,UAAQ,MAAC,SAAQ,aACtB,UAAA;AAAA,QACC;AAAA,UACE,IAAI;AAAA,UACJ,gBACE;AAAA,QACJ;AAAA,QACA,EAAE,QAAQ,KAAK,WAAW;AAAA,MAAA,GAE9B;AAAA,IAAA,GACF;AAAA,IACAH,2BAAAA,KAACI,aAAAA,MAAK,EAAA,KAAK,GACT,UAAA;AAAA,MAACH,2BAAAA,IAAAI,aAAAA,UAAA,EAAS,KAAK,GACb,UAAAJ,2BAAA;AAAA,QAACK,aAAA;AAAA,QAAA;AAAA,UACC;AAAA,UACA,MAAK;AAAA,UACL,OAAO,OAAO,QAAQ,cAAc,EAAE,IAAI,OAAO,MAAM;AAAA,UACvD,OAAO,cAAc;AAAA,YACnB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD;AAAA,UACA;AAAA,UACA,UAAQ;AAAA,UACR,OAAO,OAAO,QAAQ;AAAA,QAAA;AAAA,MAAA,GAE1B;AAAA,MACAL,2BAAAA,IAACI,aAAAA,UAAS,EAAA,KAAK,GACb,UAAAJ,2BAAA;AAAA,QAACM,aAAA;AAAA,QAAA;AAAA,UACC;AAAA,UACA,OAAO,cAAc;AAAA,YACnB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,IAAG;AAAA,UACH,OAAO,OAAO,QAAQ,cAAc,EAAE,IAAI,OAAO,MAAM;AAAA,UACvD;AAAA,UACA;AAAA,UAEC,iBAAO,eAAe;AAAA,QAAA;AAAA,MAAA,GAE3B;AAAA,IAAA,GACF;AAAA,EAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB,UAAU;AAAA,EACV,MAAM;AAAA,EACN,QAAQ,EAAE,MAAM,IAAI,aAAa,GAAG;AACtC;AACA,SAAS,YAAY;AAAA,EACnB,UAAUC,mBAAU,QAAA;AAAA,EACpB,QAAQA,mBAAAA,QAAU,OAAO;AAAA,EACzB,QAAQA,mBAAAA,QAAU,KAAK;AAAA,EACvB,UAAUA,mBAAAA,QAAU,KAAK;AAAA,EACzB,MAAMA,mBAAU,QAAA;AAAA,EAChB,QAAQA,mBAAU,QAAA;AACpB;ACrGA,MAAM,SAASC,eAAI,OAAO,EAAE,MAAM;AAAA,EAChC,MAAMA,eAAI,OAAA,EAAS,SAASC,aAAAA,iBAAiB,QAAQ;AACvD,CAAC;ACoBD,MAAM,WAAW,MAAM;AACrB,QAAM,qBAAqBC,aAAAA;AACrB,QAAA,EAAE,kBAAkBd,UAAAA;AACpB,QAAA;AAAA,IACJ,QAAQ,EAAE,GAAG;AAAA,EAAA,IACXe,eAAAA,cAAc,qBAAqB;AACjC,QAAA,EAAE,QAAQC,aAAAA;AAChB,QAAM,CAAC,cAAc,cAAc,IAAIC,eAAS,KAAK;AACrD,QAAM,iBAAiBC,MAAAA;AACvB,QAAM,EAAE,SAAS,UAAU,IAAIC,aAAkB,kBAAA;AAC3C,QAAA,EAAE,eAAeC,aAAAA;AACjB,QAAA,EAAE,mBAAmBC,aAAAA;AAE3B,QAAM,EAAE,WAAW,4BAA4B,MAAM,kBAAkB,IACrEC,qDAA6B,IAAI;AAAA,IAC/B,WAAW;AAAA,EAAA,CACZ;AAEG,QAAA;AAAA,IACJ,OAAO,CAAC,OAAO,EAAE;AAAA,IACjB,WAAW;AAAA,IACX,SAAS;AAAA,EAAA,IACPC,cAAA;AAAA,IACF,EAAE,GAAG;AAAA,IACL;AAAA,MACE,WAAW;AAAA,IACb;AAAA,EAAA;AAGF,QAAM,EAAE,aAAa,WAAW,qBAAyB,IAAAC,wBAAA;AAAA,IACvD,EAAE,GAAG;AAAA,IACL;AAAA,MACE,WAAW;AAAA,IACb;AAAA,EAAA;AAII,QAAA,uBAAuB,OAAO,SAAS;AACvC,QAAA;AACM;AACR,qBAAe,IAAI;AAEnB,YAAM,EAAE,mBAAmB,oBAAA,IAAwB,eAAe,QAAQ;AAE1E,YAAM,IAAI,gBAAgB,EAAE,IAAI,IAAI;AAEhC,UAAA,KAAK,SAAS,sBAAsB;AAChC,cAAA,IAAI,gBAAgB,EAAE,gBAAgB;AAAA,UAC1C,aAAa;AAAA,QAAA,CACd;AAED,YAAI,qBAAqB;AACvB,qBAAW,qBAAqB;AAAA,QAClC;AAAA,MACF;AAEA,qBAAe,QAAQ;AAEvB,YAAM,YAAY;AAEC,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,EAAE,IAAI,6BAA6B;AAAA,MAAA,CAC7C;AAAA,aACM,OAAO;AACK,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,KAAK;AAAA,MAAA,CAC9B;AAAA,IAAA,UACD;AACA,qBAAe,KAAK;AACV;IACZ;AAAA,EAAA;AAGF,QAAM,iBAAiB,CAAC,iBAAiB,KAAK,SAAS;AAEvD,yCACGC,mBACC,EAAA,UAAA;AAAA,IAACrB,2BAAAA,IAAAsB,aAAA,mBAAA,EAAkB,MAAK,QAAQ,CAAA;AAAA,IAChCtB,2BAAA;AAAA,MAACuB,OAAA;AAAA,MAAA;AAAA,QACC,oBAAkB;AAAA,QAClB,eAAe;AAAA,UACb,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,QACpB;AAAA,QACA,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,kBAAkB;AAAA,QAEjB,UAAA,CAAC,EAAE,cAAc,QAAQ,QAAQ,cAAc,WAC9C,MAAAxB,2BAAA,KAAC,QAAK,EAAA,UAAU,cACd,UAAA;AAAA,UAAAC,2BAAA;AAAA,YAACwB,aAAA;AAAA,YAAA;AAAA,cACC,eACExB,2BAAA,IAACF,aAAK,MAAA,EAAA,KAAK,GACT,UAAAE,2BAAA;AAAA,gBAACE,aAAA;AAAA,gBAAA;AAAA,kBACC,UAAU,KAAK,SAAS;AAAA,kBACxB,SAAS;AAAA,kBACT,SAAS;AAAA,kBACT,MAAK;AAAA,kBAEJ,UAAc,cAAA;AAAA,oBACb,IAAI;AAAA,oBACJ,gBAAgB;AAAA,kBAAA,CACjB;AAAA,gBAAA;AAAA,cAAA,GAEL;AAAA,cAEF,OAAO,cAAc;AAAA,gBACnB,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB;AAAA,cACD,UAAU,cAAc;AAAA,gBACtB,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB;AAAA,cACD,iDACGuB,mBAAK,EAAA,0CAAYC,iBAAU,CAAA,CAAA,GAAI,IAAG,mBAChC,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cACjB,CAAA,GACH;AAAA,YAAA;AAAA,UAEJ;AAAA,UACA1B,2BAAAA,IAAC2B,aAAAA,iBACC,UAAC5B,2BAAAA,KAAAD,aAAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,YAAAE,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW,iBAAiB;AAAA,gBAC5B,UAAU;AAAA,gBACV;AAAA,gBACA;AAAA,gBACA,UAAU;AAAA,gBACV,QAAQ;AAAA,gBACR;AAAA,cAAA;AAAA,YACF;AAAA,YACC,CAAC,8BAA8B,CAAC,iBAAiB,CAAC,uBACjDA,2BAAAA,IAACH,aAAAA,KAAI,EAAA,QAAO,gBAAe,WAAS,MAClC,UAAAG,2BAAA;AAAA,cAAC4B,wBAAA;AAAA,cAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA,KAAK;AAAA,gBACL,QAAQ;AAAA,cAAA;AAAA,YAAA,EAEZ,CAAA,IAEC5B,2BAAAA,IAAAH,aAAA,KAAA,EAAI,YAAW,YAAW,SAAS,GAAG,QAAO,gBAAe,WAAS,MACpE,UAAAG,2BAAAA,IAAC6B,oCAAqB,CAAA,GACxB;AAAA,UAAA,EAAA,CAEJ,EACF,CAAA;AAAA,QAAA,GACF;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF,EAAA,CAAA;AAEJ;AC7KA,MAAM,oBAAoB,MAAM;AACxB,QAAA,cAAcC,uBAAYC,iBAAAA,sBAAsB;AAEhD,QAAA;AAAA,IACJ;AAAA,IACA,gBAAgB,EAAE,SAAS,UAAU;AAAA,MACnCC,qBAAQ;AAAA,IACV,MAAM,YAAY,SAAS,MAAM;AAAA,IACjC,QAAQ,YAAY,SAAS,MAAM;AAAA,EAAA,CACpC;AAED,MAAI,WAAW;AACb,0CAAQH,mCAAqB,CAAA,CAAA;AAAA,EAC/B;AAEI,MAAA,CAAC,WAAW,CAAC,WAAW;AACnB,WAAA7B,2BAAA,IAACiC,eAAS,UAAA,EAAA,IAAG,IAAI,CAAA;AAAA,EAC1B;AAEA,wCAAQ,UAAS,CAAA,CAAA;AACnB;;"}
@@ -5,13 +5,13 @@ import { useRBAC, pxToRem } from "@strapi/helper-plugin";
5
5
  import { ExclamationMarkCircle, ExternalLink } from "@strapi/icons";
6
6
  import { useIntl } from "react-intl";
7
7
  import { useSelector } from "react-redux";
8
- import { s as selectAdminPermissions } from "./AuthenticatedApp-cdd2864d.mjs";
8
+ import { s as selectAdminPermissions } from "./AuthenticatedApp-fa931d1d.mjs";
9
9
  import { u as useLicenseLimits } from "./useLicenseLimits-13a102d3.mjs";
10
10
  import "react";
11
11
  import "react-query";
12
12
  import "semver/functions/lt";
13
13
  import "semver/functions/valid";
14
- import "./index-a2d01aca.mjs";
14
+ import "./index-326b9481.mjs";
15
15
  import "react-dom/client";
16
16
  import "invariant";
17
17
  import "lodash/isFunction";
@@ -122,4 +122,4 @@ const AdminSeatInfoEE = () => {
122
122
  export {
123
123
  AdminSeatInfoEE
124
124
  };
125
- //# sourceMappingURL=index-e8ddad38.mjs.map
125
+ //# sourceMappingURL=index-57ae9065.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-e8ddad38.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo/index.js"],"sourcesContent":["import React from 'react';\n\nimport { Flex, GridItem, Icon, Tooltip, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { pxToRem, useRBAC } from '@strapi/helper-plugin';\nimport { ExclamationMarkCircle, ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../../../../../admin/src/selectors';\nimport { useLicenseLimits } from '../../../../../../hooks/useLicenseLimits';\n\nconst BILLING_STRAPI_CLOUD_URL = 'https://cloud.strapi.io/profile/billing';\nconst BILLING_SELF_HOSTED_URL = 'https://strapi.io/billing/request-seats';\n\nexport const AdminSeatInfoEE = () => {\n const { formatMessage } = useIntl();\n const permissions = useSelector(selectAdminPermissions);\n const {\n isLoading: isRBACLoading,\n allowedActions: { canRead, canCreate, canUpdate, canDelete },\n } = useRBAC(permissions.settings.users);\n const {\n license: { licenseLimitStatus, enforcementUserCount, permittedSeats, isHostedOnStrapiCloud },\n isError,\n isLoading: isLicenseLoading,\n } = useLicenseLimits({\n // TODO: this creates a waterfall which we should avoid to render earlier, but for that\n // we will have to move away from data-fetching hooks to query functions.\n // Short-term we could at least implement a loader, for the user to have visual feedback\n // in case the requests take a while\n enabled: !isRBACLoading && canRead && canCreate && canUpdate && canDelete,\n });\n\n const isLoading = isRBACLoading || isLicenseLoading;\n\n if (isError || isLoading || !permittedSeats) {\n return null;\n }\n\n return (\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.application.admin-seats',\n defaultMessage: 'Admin seats',\n })}\n </Typography>\n <Flex gap={2}>\n <Flex>\n <Typography as=\"p\">\n {formatMessage(\n {\n id: 'Settings.application.ee.admin-seats.count',\n defaultMessage: '<text>{enforcementUserCount}</text>/{permittedSeats}',\n },\n {\n permittedSeats,\n enforcementUserCount,\n // eslint-disable-next-line react/no-unstable-nested-components\n text: (chunks) => (\n <Typography\n fontWeight=\"semiBold\"\n textColor={enforcementUserCount > permittedSeats ? 'danger500' : null}\n >\n {chunks}\n </Typography>\n ),\n }\n )}\n </Typography>\n </Flex>\n {licenseLimitStatus === 'OVER_LIMIT' && (\n <Tooltip\n description={formatMessage({\n id: 'Settings.application.ee.admin-seats.at-limit-tooltip',\n defaultMessage: 'At limit: add seats to invite more users',\n })}\n >\n <Icon\n width={`${pxToRem(14)}rem`}\n height={`${pxToRem(14)}rem`}\n color=\"danger500\"\n as={ExclamationMarkCircle}\n />\n </Tooltip>\n )}\n </Flex>\n <Link\n href={isHostedOnStrapiCloud ? BILLING_STRAPI_CLOUD_URL : BILLING_SELF_HOSTED_URL}\n isExternal\n endIcon={<ExternalLink />}\n >\n {formatMessage(\n {\n id: 'Settings.application.ee.admin-seats.add-seats',\n defaultMessage:\n '{isHostedOnStrapiCloud, select, true {Add seats} other {Contact sales}}',\n },\n { isHostedOnStrapiCloud }\n )}\n </Link>\n </GridItem>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,MAAM,2BAA2B;AACjC,MAAM,0BAA0B;AAEzB,MAAM,kBAAkB,MAAM;AAC7B,QAAA,EAAE,kBAAkB;AACpB,QAAA,cAAc,YAAY,sBAAsB;AAChD,QAAA;AAAA,IACJ,WAAW;AAAA,IACX,gBAAgB,EAAE,SAAS,WAAW,WAAW,UAAU;AAAA,EACzD,IAAA,QAAQ,YAAY,SAAS,KAAK;AAChC,QAAA;AAAA,IACJ,SAAS,EAAE,oBAAoB,sBAAsB,gBAAgB,sBAAsB;AAAA,IAC3F;AAAA,IACA,WAAW;AAAA,MACT,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,IAKnB,SAAS,CAAC,iBAAiB,WAAW,aAAa,aAAa;AAAA,EAAA,CACjE;AAED,QAAM,YAAY,iBAAiB;AAE/B,MAAA,WAAW,aAAa,CAAC,gBAAgB;AACpC,WAAA;AAAA,EACT;AAEA,SACG,qBAAA,UAAA,EAAS,KAAK,GAAG,GAAG,IACnB,UAAA;AAAA,IAAA,oBAAC,YAAW,EAAA,SAAQ,SAAQ,WAAU,cACnC,UAAc,cAAA;AAAA,MACb,IAAI;AAAA,MACJ,gBAAgB;AAAA,IACjB,CAAA,GACH;AAAA,IACA,qBAAC,MAAK,EAAA,KAAK,GACT,UAAA;AAAA,MAAA,oBAAC,MACC,EAAA,UAAA,oBAAC,YAAW,EAAA,IAAG,KACZ,UAAA;AAAA,QACC;AAAA,UACE,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA;AAAA,UAEA,MAAM,CAAC,WACL;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,YAAW;AAAA,cACX,WAAW,uBAAuB,iBAAiB,cAAc;AAAA,cAEhE,UAAA;AAAA,YAAA;AAAA,UACH;AAAA,QAEJ;AAAA,SAEJ,EACF,CAAA;AAAA,MACC,uBAAuB,gBACtB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,aAAa,cAAc;AAAA,YACzB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UAED,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO,GAAG,QAAQ,EAAE,CAAC;AAAA,cACrB,QAAQ,GAAG,QAAQ,EAAE,CAAC;AAAA,cACtB,OAAM;AAAA,cACN,IAAI;AAAA,YAAA;AAAA,UACN;AAAA,QAAA;AAAA,MACF;AAAA,IAAA,GAEJ;AAAA,IACA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAM,wBAAwB,2BAA2B;AAAA,QACzD,YAAU;AAAA,QACV,6BAAU,cAAa,EAAA;AAAA,QAEtB,UAAA;AAAA,UACC;AAAA,YACE,IAAI;AAAA,YACJ,gBACE;AAAA,UACJ;AAAA,UACA,EAAE,sBAAsB;AAAA,QAC1B;AAAA,MAAA;AAAA,IACF;AAAA,EACF,EAAA,CAAA;AAEJ;"}
1
+ {"version":3,"file":"index-57ae9065.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo/index.js"],"sourcesContent":["import React from 'react';\n\nimport { Flex, GridItem, Icon, Tooltip, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { pxToRem, useRBAC } from '@strapi/helper-plugin';\nimport { ExclamationMarkCircle, ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../../../../../admin/src/selectors';\nimport { useLicenseLimits } from '../../../../../../hooks/useLicenseLimits';\n\nconst BILLING_STRAPI_CLOUD_URL = 'https://cloud.strapi.io/profile/billing';\nconst BILLING_SELF_HOSTED_URL = 'https://strapi.io/billing/request-seats';\n\nexport const AdminSeatInfoEE = () => {\n const { formatMessage } = useIntl();\n const permissions = useSelector(selectAdminPermissions);\n const {\n isLoading: isRBACLoading,\n allowedActions: { canRead, canCreate, canUpdate, canDelete },\n } = useRBAC(permissions.settings.users);\n const {\n license: { licenseLimitStatus, enforcementUserCount, permittedSeats, isHostedOnStrapiCloud },\n isError,\n isLoading: isLicenseLoading,\n } = useLicenseLimits({\n // TODO: this creates a waterfall which we should avoid to render earlier, but for that\n // we will have to move away from data-fetching hooks to query functions.\n // Short-term we could at least implement a loader, for the user to have visual feedback\n // in case the requests take a while\n enabled: !isRBACLoading && canRead && canCreate && canUpdate && canDelete,\n });\n\n const isLoading = isRBACLoading || isLicenseLoading;\n\n if (isError || isLoading || !permittedSeats) {\n return null;\n }\n\n return (\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.application.admin-seats',\n defaultMessage: 'Admin seats',\n })}\n </Typography>\n <Flex gap={2}>\n <Flex>\n <Typography as=\"p\">\n {formatMessage(\n {\n id: 'Settings.application.ee.admin-seats.count',\n defaultMessage: '<text>{enforcementUserCount}</text>/{permittedSeats}',\n },\n {\n permittedSeats,\n enforcementUserCount,\n // eslint-disable-next-line react/no-unstable-nested-components\n text: (chunks) => (\n <Typography\n fontWeight=\"semiBold\"\n textColor={enforcementUserCount > permittedSeats ? 'danger500' : null}\n >\n {chunks}\n </Typography>\n ),\n }\n )}\n </Typography>\n </Flex>\n {licenseLimitStatus === 'OVER_LIMIT' && (\n <Tooltip\n description={formatMessage({\n id: 'Settings.application.ee.admin-seats.at-limit-tooltip',\n defaultMessage: 'At limit: add seats to invite more users',\n })}\n >\n <Icon\n width={`${pxToRem(14)}rem`}\n height={`${pxToRem(14)}rem`}\n color=\"danger500\"\n as={ExclamationMarkCircle}\n />\n </Tooltip>\n )}\n </Flex>\n <Link\n href={isHostedOnStrapiCloud ? BILLING_STRAPI_CLOUD_URL : BILLING_SELF_HOSTED_URL}\n isExternal\n endIcon={<ExternalLink />}\n >\n {formatMessage(\n {\n id: 'Settings.application.ee.admin-seats.add-seats',\n defaultMessage:\n '{isHostedOnStrapiCloud, select, true {Add seats} other {Contact sales}}',\n },\n { isHostedOnStrapiCloud }\n )}\n </Link>\n </GridItem>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,MAAM,2BAA2B;AACjC,MAAM,0BAA0B;AAEzB,MAAM,kBAAkB,MAAM;AAC7B,QAAA,EAAE,kBAAkB;AACpB,QAAA,cAAc,YAAY,sBAAsB;AAChD,QAAA;AAAA,IACJ,WAAW;AAAA,IACX,gBAAgB,EAAE,SAAS,WAAW,WAAW,UAAU;AAAA,EACzD,IAAA,QAAQ,YAAY,SAAS,KAAK;AAChC,QAAA;AAAA,IACJ,SAAS,EAAE,oBAAoB,sBAAsB,gBAAgB,sBAAsB;AAAA,IAC3F;AAAA,IACA,WAAW;AAAA,MACT,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,IAKnB,SAAS,CAAC,iBAAiB,WAAW,aAAa,aAAa;AAAA,EAAA,CACjE;AAED,QAAM,YAAY,iBAAiB;AAE/B,MAAA,WAAW,aAAa,CAAC,gBAAgB;AACpC,WAAA;AAAA,EACT;AAEA,SACG,qBAAA,UAAA,EAAS,KAAK,GAAG,GAAG,IACnB,UAAA;AAAA,IAAA,oBAAC,YAAW,EAAA,SAAQ,SAAQ,WAAU,cACnC,UAAc,cAAA;AAAA,MACb,IAAI;AAAA,MACJ,gBAAgB;AAAA,IACjB,CAAA,GACH;AAAA,IACA,qBAAC,MAAK,EAAA,KAAK,GACT,UAAA;AAAA,MAAA,oBAAC,MACC,EAAA,UAAA,oBAAC,YAAW,EAAA,IAAG,KACZ,UAAA;AAAA,QACC;AAAA,UACE,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA;AAAA,UAEA,MAAM,CAAC,WACL;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,YAAW;AAAA,cACX,WAAW,uBAAuB,iBAAiB,cAAc;AAAA,cAEhE,UAAA;AAAA,YAAA;AAAA,UACH;AAAA,QAEJ;AAAA,SAEJ,EACF,CAAA;AAAA,MACC,uBAAuB,gBACtB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,aAAa,cAAc;AAAA,YACzB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UAED,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO,GAAG,QAAQ,EAAE,CAAC;AAAA,cACrB,QAAQ,GAAG,QAAQ,EAAE,CAAC;AAAA,cACtB,OAAM;AAAA,cACN,IAAI;AAAA,YAAA;AAAA,UACN;AAAA,QAAA;AAAA,MACF;AAAA,IAAA,GAEJ;AAAA,IACA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAM,wBAAwB,2BAA2B;AAAA,QACzD,YAAU;AAAA,QACV,6BAAU,cAAa,EAAA;AAAA,QAEtB,UAAA;AAAA,UACC;AAAA,YACE,IAAI;AAAA,YACJ,gBACE;AAAA,UACJ;AAAA,UACA,EAAE,sBAAsB;AAAA,QAC1B;AAAA,MAAA;AAAA,IACF;AAAA,EACF,EAAA,CAAA;AAEJ;"}
@@ -114,7 +114,7 @@ const webpackDevMiddleware__default = /* @__PURE__ */ _interopDefault(webpackDev
114
114
  const webpackHotMiddleware__default = /* @__PURE__ */ _interopDefault(webpackHotMiddleware);
115
115
  const build$2 = ({ command, ctx }) => {
116
116
  command.command("build").option("-d, --debug", "Enable debugging mode with verbose logs", false).option("--ignore-prompts", "Ignore all prompts", false).option("--minify", "Minify the output", true).option("--no-optimization", "[deprecated]: use minify instead").option("--silent", "Don't log anything", false).option("--sourcemap", "Produce sourcemaps", false).option("--stats", "Print build statistics to the console", false).description("Build the strapi admin app").action(async (options) => {
117
- const { build: build2 } = await Promise.resolve().then(() => require("./build-0fb2b1db.js"));
117
+ const { build: build2 } = await Promise.resolve().then(() => require("./build-b285bccd.js"));
118
118
  return build2({ ...options, ...ctx });
119
119
  });
120
120
  };
@@ -126,7 +126,7 @@ const develop$1 = ({ command, ctx }) => {
126
126
  "--watch-admin",
127
127
  "[deprecated]: there is now middleware for watching, it is no longer a separate process"
128
128
  ).option("--browser <name>", "[deprecated]: use open instead").option("--open", "Open the admin in your browser", true).description("Start your Strapi application in development mode").action(async (options) => {
129
- const { develop: develop2 } = await Promise.resolve().then(() => require("./develop-ec19d09d.js"));
129
+ const { develop: develop2 } = await Promise.resolve().then(() => require("./develop-9765d7ba.js"));
130
130
  return develop2({ ...options, ...ctx });
131
131
  });
132
132
  };
@@ -367,12 +367,12 @@ const getEntryModule = (ctx) => {
367
367
  */
368
368
  ${pluginsImport}
369
369
  import { renderAdmin } from "@strapi/strapi/admin"
370
-
370
+
371
371
  ${ctx.customisations?.path ? `import customisations from '${path__default.default.relative(
372
372
  ctx.runtimeDir,
373
373
  ctx.customisations.path
374
374
  )}'` : ""}
375
-
375
+
376
376
  renderAdmin(
377
377
  document.getElementById("strapi"),
378
378
  {
@@ -501,7 +501,9 @@ const pathExists = async (path2) => {
501
501
  };
502
502
  const loadFile = async (path2) => {
503
503
  if (await pathExists(path2)) {
504
- const esbuildOptions = { extensions: [".js", ".mjs", ".ts"] };
504
+ const esbuildOptions = {
505
+ extensions: [".js", ".mjs", ".ts"]
506
+ };
505
507
  const { unregister } = node.register(esbuildOptions);
506
508
  const mod = require(path2);
507
509
  unregister();
@@ -865,9 +867,8 @@ const ADMIN_APP_FILES = ["app.js", "app.mjs", "app.ts", "app.jsx", "app.tsx"];
865
867
  const loadUserAppFile = async (appDir) => {
866
868
  for (const file of ADMIN_APP_FILES) {
867
869
  const filePath = path__default.default.join(appDir, "src", "admin", file);
868
- const configFile = await loadFile(filePath);
869
- if (configFile) {
870
- return { path: filePath, config: configFile };
870
+ if (fs__default$1.default.existsSync(filePath)) {
871
+ return { path: filePath };
871
872
  }
872
873
  }
873
874
  return void 0;
@@ -1271,4 +1272,4 @@ exports.build = build;
1271
1272
  exports.develop = develop;
1272
1273
  exports.handleUnexpectedError = handleUnexpectedError;
1273
1274
  exports.index = index;
1274
- //# sourceMappingURL=index-2772208e.js.map
1275
+ //# sourceMappingURL=index-62b7bdbe.js.map