@thunderid/react 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/dist/cjs/components/admin/AgentCreate/AgentCreate.cjs +15 -4
  2. package/dist/cjs/components/admin/AgentCreate/AgentCreate.cjs.map +1 -1
  3. package/dist/cjs/components/admin/AgentDetails/AgentDetails.cjs +36 -8
  4. package/dist/cjs/components/admin/AgentDetails/AgentDetails.cjs.map +1 -1
  5. package/dist/cjs/components/admin/AgentList/AgentList.cjs +13 -4
  6. package/dist/cjs/components/admin/AgentList/AgentList.cjs.map +1 -1
  7. package/dist/cjs/components/admin/ApplicationCreate/ApplicationCreate.cjs +70 -0
  8. package/dist/cjs/components/admin/ApplicationCreate/ApplicationCreate.cjs.map +1 -0
  9. package/dist/cjs/components/admin/ApplicationCreate/BaseApplicationCreate.cjs +135 -0
  10. package/dist/cjs/components/admin/ApplicationCreate/BaseApplicationCreate.cjs.map +1 -0
  11. package/dist/cjs/components/admin/ApplicationDetails/ApplicationDetails.cjs +82 -0
  12. package/dist/cjs/components/admin/ApplicationDetails/ApplicationDetails.cjs.map +1 -0
  13. package/dist/cjs/components/admin/ApplicationDetails/BaseApplicationDetails.cjs +238 -0
  14. package/dist/cjs/components/admin/ApplicationDetails/BaseApplicationDetails.cjs.map +1 -0
  15. package/dist/cjs/components/admin/ApplicationList/ApplicationList.cjs +55 -0
  16. package/dist/cjs/components/admin/ApplicationList/ApplicationList.cjs.map +1 -0
  17. package/dist/cjs/components/admin/ApplicationList/BaseApplicationList.cjs +95 -0
  18. package/dist/cjs/components/admin/ApplicationList/BaseApplicationList.cjs.map +1 -0
  19. package/dist/cjs/components/admin/GroupCreate/GroupCreate.cjs +8 -2
  20. package/dist/cjs/components/admin/GroupCreate/GroupCreate.cjs.map +1 -1
  21. package/dist/cjs/components/admin/GroupList/GroupList.cjs +10 -3
  22. package/dist/cjs/components/admin/GroupList/GroupList.cjs.map +1 -1
  23. package/dist/cjs/components/admin/GroupMembers/GroupMembers.cjs +47 -10
  24. package/dist/cjs/components/admin/GroupMembers/GroupMembers.cjs.map +1 -1
  25. package/dist/cjs/components/admin/RoleAssignments/RoleAssignments.cjs +48 -14
  26. package/dist/cjs/components/admin/RoleAssignments/RoleAssignments.cjs.map +1 -1
  27. package/dist/cjs/components/admin/RoleCreate/RoleCreate.cjs +8 -2
  28. package/dist/cjs/components/admin/RoleCreate/RoleCreate.cjs.map +1 -1
  29. package/dist/cjs/components/admin/RoleList/RoleList.cjs +10 -3
  30. package/dist/cjs/components/admin/RoleList/RoleList.cjs.map +1 -1
  31. package/dist/cjs/components/admin/RolePermissions/RolePermissions.cjs +8 -2
  32. package/dist/cjs/components/admin/RolePermissions/RolePermissions.cjs.map +1 -1
  33. package/dist/cjs/components/admin/UserCreate/UserCreate.cjs +15 -4
  34. package/dist/cjs/components/admin/UserCreate/UserCreate.cjs.map +1 -1
  35. package/dist/cjs/components/admin/UserDetails/UserDetails.cjs +31 -8
  36. package/dist/cjs/components/admin/UserDetails/UserDetails.cjs.map +1 -1
  37. package/dist/cjs/components/admin/UserList/UserList.cjs +13 -4
  38. package/dist/cjs/components/admin/UserList/UserList.cjs.map +1 -1
  39. package/dist/cjs/components/admin/shared/ApplicationFormFields.cjs +62 -0
  40. package/dist/cjs/components/admin/shared/ApplicationFormFields.cjs.map +1 -0
  41. package/dist/cjs/components/admin/shared/ClientSecretNotice.cjs +49 -0
  42. package/dist/cjs/components/admin/shared/ClientSecretNotice.cjs.map +1 -0
  43. package/dist/cjs/components/auth/InviteUser/InviteUser.cjs +1 -1
  44. package/dist/cjs/components/auth/flow/Consent.cjs +93 -73
  45. package/dist/cjs/components/auth/flow/Consent.cjs.map +1 -1
  46. package/dist/cjs/hooks/management/useManagementEndpoint.cjs.map +1 -1
  47. package/dist/cjs/hooks/management/useManagementRequestConfig.cjs +41 -0
  48. package/dist/cjs/hooks/management/useManagementRequestConfig.cjs.map +1 -0
  49. package/dist/cjs/index.cjs +1066 -188
  50. package/dist/components/admin/AgentCreate/AgentCreate.d.ts.map +1 -1
  51. package/dist/components/admin/AgentCreate/AgentCreate.js +16 -5
  52. package/dist/components/admin/AgentCreate/AgentCreate.js.map +1 -1
  53. package/dist/components/admin/AgentDetails/AgentDetails.d.ts.map +1 -1
  54. package/dist/components/admin/AgentDetails/AgentDetails.js +37 -9
  55. package/dist/components/admin/AgentDetails/AgentDetails.js.map +1 -1
  56. package/dist/components/admin/AgentList/AgentList.d.ts.map +1 -1
  57. package/dist/components/admin/AgentList/AgentList.js +14 -5
  58. package/dist/components/admin/AgentList/AgentList.js.map +1 -1
  59. package/dist/components/admin/ApplicationCreate/ApplicationCreate.d.ts +30 -0
  60. package/dist/components/admin/ApplicationCreate/ApplicationCreate.d.ts.map +1 -0
  61. package/dist/components/admin/ApplicationCreate/ApplicationCreate.js +66 -0
  62. package/dist/components/admin/ApplicationCreate/ApplicationCreate.js.map +1 -0
  63. package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.d.ts +80 -0
  64. package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.d.ts.map +1 -0
  65. package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.js +131 -0
  66. package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.js.map +1 -0
  67. package/dist/components/admin/ApplicationDetails/ApplicationDetails.d.ts +50 -0
  68. package/dist/components/admin/ApplicationDetails/ApplicationDetails.d.ts.map +1 -0
  69. package/dist/components/admin/ApplicationDetails/ApplicationDetails.js +79 -0
  70. package/dist/components/admin/ApplicationDetails/ApplicationDetails.js.map +1 -0
  71. package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.d.ts +92 -0
  72. package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.d.ts.map +1 -0
  73. package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.js +234 -0
  74. package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.js.map +1 -0
  75. package/dist/components/admin/ApplicationList/ApplicationList.d.ts +18 -0
  76. package/dist/components/admin/ApplicationList/ApplicationList.d.ts.map +1 -0
  77. package/dist/components/admin/ApplicationList/ApplicationList.js +51 -0
  78. package/dist/components/admin/ApplicationList/ApplicationList.js.map +1 -0
  79. package/dist/components/admin/ApplicationList/BaseApplicationList.d.ts +55 -0
  80. package/dist/components/admin/ApplicationList/BaseApplicationList.d.ts.map +1 -0
  81. package/dist/components/admin/ApplicationList/BaseApplicationList.js +93 -0
  82. package/dist/components/admin/ApplicationList/BaseApplicationList.js.map +1 -0
  83. package/dist/components/admin/GroupCreate/GroupCreate.d.ts.map +1 -1
  84. package/dist/components/admin/GroupCreate/GroupCreate.js +9 -3
  85. package/dist/components/admin/GroupCreate/GroupCreate.js.map +1 -1
  86. package/dist/components/admin/GroupList/GroupList.d.ts.map +1 -1
  87. package/dist/components/admin/GroupList/GroupList.js +11 -4
  88. package/dist/components/admin/GroupList/GroupList.js.map +1 -1
  89. package/dist/components/admin/GroupMembers/GroupMembers.d.ts.map +1 -1
  90. package/dist/components/admin/GroupMembers/GroupMembers.js +48 -11
  91. package/dist/components/admin/GroupMembers/GroupMembers.js.map +1 -1
  92. package/dist/components/admin/RoleAssignments/RoleAssignments.d.ts.map +1 -1
  93. package/dist/components/admin/RoleAssignments/RoleAssignments.js +49 -15
  94. package/dist/components/admin/RoleAssignments/RoleAssignments.js.map +1 -1
  95. package/dist/components/admin/RoleCreate/RoleCreate.d.ts.map +1 -1
  96. package/dist/components/admin/RoleCreate/RoleCreate.js +9 -3
  97. package/dist/components/admin/RoleCreate/RoleCreate.js.map +1 -1
  98. package/dist/components/admin/RoleList/RoleList.d.ts.map +1 -1
  99. package/dist/components/admin/RoleList/RoleList.js +11 -4
  100. package/dist/components/admin/RoleList/RoleList.js.map +1 -1
  101. package/dist/components/admin/RolePermissions/RolePermissions.d.ts.map +1 -1
  102. package/dist/components/admin/RolePermissions/RolePermissions.js +9 -3
  103. package/dist/components/admin/RolePermissions/RolePermissions.js.map +1 -1
  104. package/dist/components/admin/UserCreate/UserCreate.d.ts.map +1 -1
  105. package/dist/components/admin/UserCreate/UserCreate.js +16 -5
  106. package/dist/components/admin/UserCreate/UserCreate.js.map +1 -1
  107. package/dist/components/admin/UserDetails/UserDetails.d.ts.map +1 -1
  108. package/dist/components/admin/UserDetails/UserDetails.js +32 -9
  109. package/dist/components/admin/UserDetails/UserDetails.js.map +1 -1
  110. package/dist/components/admin/UserList/UserList.d.ts.map +1 -1
  111. package/dist/components/admin/UserList/UserList.js +14 -5
  112. package/dist/components/admin/UserList/UserList.js.map +1 -1
  113. package/dist/components/admin/shared/ApplicationFormFields.d.ts +35 -0
  114. package/dist/components/admin/shared/ApplicationFormFields.d.ts.map +1 -0
  115. package/dist/components/admin/shared/ApplicationFormFields.js +59 -0
  116. package/dist/components/admin/shared/ApplicationFormFields.js.map +1 -0
  117. package/dist/components/admin/shared/ClientSecretNotice.d.ts +16 -0
  118. package/dist/components/admin/shared/ClientSecretNotice.d.ts.map +1 -0
  119. package/dist/components/admin/shared/ClientSecretNotice.js +47 -0
  120. package/dist/components/admin/shared/ClientSecretNotice.js.map +1 -0
  121. package/dist/components/auth/InviteUser/InviteUser.js +1 -1
  122. package/dist/components/auth/flow/Consent.d.ts.map +1 -1
  123. package/dist/components/auth/flow/Consent.js +94 -75
  124. package/dist/components/auth/flow/Consent.js.map +1 -1
  125. package/dist/hooks/management/useManagementEndpoint.d.ts +5 -1
  126. package/dist/hooks/management/useManagementEndpoint.d.ts.map +1 -1
  127. package/dist/hooks/management/useManagementEndpoint.js.map +1 -1
  128. package/dist/hooks/management/useManagementRequestConfig.d.ts +22 -0
  129. package/dist/hooks/management/useManagementRequestConfig.d.ts.map +1 -0
  130. package/dist/hooks/management/useManagementRequestConfig.js +39 -0
  131. package/dist/hooks/management/useManagementRequestConfig.js.map +1 -0
  132. package/dist/index.d.ts +22 -55
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +12 -41
  135. package/dist/models/config.d.ts +3 -4
  136. package/dist/models/config.d.ts.map +1 -1
  137. package/package.json +2 -2
  138. package/dist/cjs/hooks/management/agents/useCreateAgent.cjs +0 -26
  139. package/dist/cjs/hooks/management/agents/useCreateAgent.cjs.map +0 -1
  140. package/dist/cjs/hooks/management/agents/useDeleteAgent.cjs +0 -26
  141. package/dist/cjs/hooks/management/agents/useDeleteAgent.cjs.map +0 -1
  142. package/dist/cjs/hooks/management/agents/useGetAgent.cjs +0 -30
  143. package/dist/cjs/hooks/management/agents/useGetAgent.cjs.map +0 -1
  144. package/dist/cjs/hooks/management/agents/useGetAgentGroups.cjs +0 -41
  145. package/dist/cjs/hooks/management/agents/useGetAgentGroups.cjs.map +0 -1
  146. package/dist/cjs/hooks/management/agents/useGetAgentRoles.cjs +0 -42
  147. package/dist/cjs/hooks/management/agents/useGetAgentRoles.cjs.map +0 -1
  148. package/dist/cjs/hooks/management/agents/useGetAgentTypes.cjs +0 -31
  149. package/dist/cjs/hooks/management/agents/useGetAgentTypes.cjs.map +0 -1
  150. package/dist/cjs/hooks/management/agents/useGetAgents.cjs +0 -33
  151. package/dist/cjs/hooks/management/agents/useGetAgents.cjs.map +0 -1
  152. package/dist/cjs/hooks/management/agents/useUpdateAgent.cjs +0 -27
  153. package/dist/cjs/hooks/management/agents/useUpdateAgent.cjs.map +0 -1
  154. package/dist/cjs/hooks/management/applications/useCreateApplication.cjs +0 -31
  155. package/dist/cjs/hooks/management/applications/useCreateApplication.cjs.map +0 -1
  156. package/dist/cjs/hooks/management/applications/useDeleteApplication.cjs +0 -26
  157. package/dist/cjs/hooks/management/applications/useDeleteApplication.cjs.map +0 -1
  158. package/dist/cjs/hooks/management/applications/useGetApplication.cjs +0 -35
  159. package/dist/cjs/hooks/management/applications/useGetApplication.cjs.map +0 -1
  160. package/dist/cjs/hooks/management/applications/useGetApplications.cjs +0 -36
  161. package/dist/cjs/hooks/management/applications/useGetApplications.cjs.map +0 -1
  162. package/dist/cjs/hooks/management/applications/useUpdateApplication.cjs +0 -27
  163. package/dist/cjs/hooks/management/applications/useUpdateApplication.cjs.map +0 -1
  164. package/dist/cjs/hooks/management/groups/useAddGroupMembers.cjs +0 -32
  165. package/dist/cjs/hooks/management/groups/useAddGroupMembers.cjs.map +0 -1
  166. package/dist/cjs/hooks/management/groups/useCreateGroup.cjs +0 -26
  167. package/dist/cjs/hooks/management/groups/useCreateGroup.cjs.map +0 -1
  168. package/dist/cjs/hooks/management/groups/useDeleteGroup.cjs +0 -30
  169. package/dist/cjs/hooks/management/groups/useDeleteGroup.cjs.map +0 -1
  170. package/dist/cjs/hooks/management/groups/useGetGroup.cjs +0 -30
  171. package/dist/cjs/hooks/management/groups/useGetGroup.cjs.map +0 -1
  172. package/dist/cjs/hooks/management/groups/useGetGroupMembers.cjs +0 -40
  173. package/dist/cjs/hooks/management/groups/useGetGroupMembers.cjs.map +0 -1
  174. package/dist/cjs/hooks/management/groups/useGetGroups.cjs +0 -31
  175. package/dist/cjs/hooks/management/groups/useGetGroups.cjs.map +0 -1
  176. package/dist/cjs/hooks/management/groups/useRemoveGroupMembers.cjs +0 -32
  177. package/dist/cjs/hooks/management/groups/useRemoveGroupMembers.cjs.map +0 -1
  178. package/dist/cjs/hooks/management/groups/useUpdateGroup.cjs +0 -31
  179. package/dist/cjs/hooks/management/groups/useUpdateGroup.cjs.map +0 -1
  180. package/dist/cjs/hooks/management/roles/useAddRoleAssignments.cjs +0 -27
  181. package/dist/cjs/hooks/management/roles/useAddRoleAssignments.cjs.map +0 -1
  182. package/dist/cjs/hooks/management/roles/useCreateRole.cjs +0 -26
  183. package/dist/cjs/hooks/management/roles/useCreateRole.cjs.map +0 -1
  184. package/dist/cjs/hooks/management/roles/useDeleteRole.cjs +0 -26
  185. package/dist/cjs/hooks/management/roles/useDeleteRole.cjs.map +0 -1
  186. package/dist/cjs/hooks/management/roles/useGetRole.cjs +0 -30
  187. package/dist/cjs/hooks/management/roles/useGetRole.cjs.map +0 -1
  188. package/dist/cjs/hooks/management/roles/useGetRoleAssignments.cjs +0 -42
  189. package/dist/cjs/hooks/management/roles/useGetRoleAssignments.cjs.map +0 -1
  190. package/dist/cjs/hooks/management/roles/useGetRoles.cjs +0 -31
  191. package/dist/cjs/hooks/management/roles/useGetRoles.cjs.map +0 -1
  192. package/dist/cjs/hooks/management/roles/useRemoveRoleAssignments.cjs +0 -27
  193. package/dist/cjs/hooks/management/roles/useRemoveRoleAssignments.cjs.map +0 -1
  194. package/dist/cjs/hooks/management/roles/useUpdateRole.cjs +0 -27
  195. package/dist/cjs/hooks/management/roles/useUpdateRole.cjs.map +0 -1
  196. package/dist/cjs/hooks/management/users/useCreateUser.cjs +0 -26
  197. package/dist/cjs/hooks/management/users/useCreateUser.cjs.map +0 -1
  198. package/dist/cjs/hooks/management/users/useDeleteUser.cjs +0 -26
  199. package/dist/cjs/hooks/management/users/useDeleteUser.cjs.map +0 -1
  200. package/dist/cjs/hooks/management/users/useGetUser.cjs +0 -30
  201. package/dist/cjs/hooks/management/users/useGetUser.cjs.map +0 -1
  202. package/dist/cjs/hooks/management/users/useGetUserGroups.cjs +0 -41
  203. package/dist/cjs/hooks/management/users/useGetUserGroups.cjs.map +0 -1
  204. package/dist/cjs/hooks/management/users/useGetUserTypes.cjs +0 -31
  205. package/dist/cjs/hooks/management/users/useGetUserTypes.cjs.map +0 -1
  206. package/dist/cjs/hooks/management/users/useGetUsers.cjs +0 -38
  207. package/dist/cjs/hooks/management/users/useGetUsers.cjs.map +0 -1
  208. package/dist/cjs/hooks/management/users/useUpdateUser.cjs +0 -27
  209. package/dist/cjs/hooks/management/users/useUpdateUser.cjs.map +0 -1
  210. package/dist/hooks/management/agents/useCreateAgent.d.ts +0 -11
  211. package/dist/hooks/management/agents/useCreateAgent.d.ts.map +0 -1
  212. package/dist/hooks/management/agents/useCreateAgent.js +0 -24
  213. package/dist/hooks/management/agents/useCreateAgent.js.map +0 -1
  214. package/dist/hooks/management/agents/useDeleteAgent.d.ts +0 -10
  215. package/dist/hooks/management/agents/useDeleteAgent.d.ts.map +0 -1
  216. package/dist/hooks/management/agents/useDeleteAgent.js +0 -24
  217. package/dist/hooks/management/agents/useDeleteAgent.js.map +0 -1
  218. package/dist/hooks/management/agents/useGetAgent.d.ts +0 -12
  219. package/dist/hooks/management/agents/useGetAgent.d.ts.map +0 -1
  220. package/dist/hooks/management/agents/useGetAgent.js +0 -28
  221. package/dist/hooks/management/agents/useGetAgent.js.map +0 -1
  222. package/dist/hooks/management/agents/useGetAgentGroups.d.ts +0 -16
  223. package/dist/hooks/management/agents/useGetAgentGroups.d.ts.map +0 -1
  224. package/dist/hooks/management/agents/useGetAgentGroups.js +0 -39
  225. package/dist/hooks/management/agents/useGetAgentGroups.js.map +0 -1
  226. package/dist/hooks/management/agents/useGetAgentRoles.d.ts +0 -17
  227. package/dist/hooks/management/agents/useGetAgentRoles.d.ts.map +0 -1
  228. package/dist/hooks/management/agents/useGetAgentRoles.js +0 -40
  229. package/dist/hooks/management/agents/useGetAgentRoles.js.map +0 -1
  230. package/dist/hooks/management/agents/useGetAgentTypes.d.ts +0 -15
  231. package/dist/hooks/management/agents/useGetAgentTypes.d.ts.map +0 -1
  232. package/dist/hooks/management/agents/useGetAgentTypes.js +0 -29
  233. package/dist/hooks/management/agents/useGetAgentTypes.js.map +0 -1
  234. package/dist/hooks/management/agents/useGetAgents.d.ts +0 -23
  235. package/dist/hooks/management/agents/useGetAgents.d.ts.map +0 -1
  236. package/dist/hooks/management/agents/useGetAgents.js +0 -31
  237. package/dist/hooks/management/agents/useGetAgents.js.map +0 -1
  238. package/dist/hooks/management/agents/useUpdateAgent.d.ts +0 -18
  239. package/dist/hooks/management/agents/useUpdateAgent.d.ts.map +0 -1
  240. package/dist/hooks/management/agents/useUpdateAgent.js +0 -25
  241. package/dist/hooks/management/agents/useUpdateAgent.js.map +0 -1
  242. package/dist/hooks/management/applications/useCreateApplication.d.ts +0 -16
  243. package/dist/hooks/management/applications/useCreateApplication.d.ts.map +0 -1
  244. package/dist/hooks/management/applications/useCreateApplication.js +0 -29
  245. package/dist/hooks/management/applications/useCreateApplication.js.map +0 -1
  246. package/dist/hooks/management/applications/useDeleteApplication.d.ts +0 -10
  247. package/dist/hooks/management/applications/useDeleteApplication.d.ts.map +0 -1
  248. package/dist/hooks/management/applications/useDeleteApplication.js +0 -24
  249. package/dist/hooks/management/applications/useDeleteApplication.js.map +0 -1
  250. package/dist/hooks/management/applications/useGetApplication.d.ts +0 -17
  251. package/dist/hooks/management/applications/useGetApplication.d.ts.map +0 -1
  252. package/dist/hooks/management/applications/useGetApplication.js +0 -33
  253. package/dist/hooks/management/applications/useGetApplication.js.map +0 -1
  254. package/dist/hooks/management/applications/useGetApplications.d.ts +0 -24
  255. package/dist/hooks/management/applications/useGetApplications.d.ts.map +0 -1
  256. package/dist/hooks/management/applications/useGetApplications.js +0 -34
  257. package/dist/hooks/management/applications/useGetApplications.js.map +0 -1
  258. package/dist/hooks/management/applications/useUpdateApplication.d.ts +0 -18
  259. package/dist/hooks/management/applications/useUpdateApplication.d.ts.map +0 -1
  260. package/dist/hooks/management/applications/useUpdateApplication.js +0 -25
  261. package/dist/hooks/management/applications/useUpdateApplication.js.map +0 -1
  262. package/dist/hooks/management/groups/useAddGroupMembers.d.ts +0 -24
  263. package/dist/hooks/management/groups/useAddGroupMembers.d.ts.map +0 -1
  264. package/dist/hooks/management/groups/useAddGroupMembers.js +0 -30
  265. package/dist/hooks/management/groups/useAddGroupMembers.js.map +0 -1
  266. package/dist/hooks/management/groups/useCreateGroup.d.ts +0 -11
  267. package/dist/hooks/management/groups/useCreateGroup.d.ts.map +0 -1
  268. package/dist/hooks/management/groups/useCreateGroup.js +0 -24
  269. package/dist/hooks/management/groups/useCreateGroup.js.map +0 -1
  270. package/dist/hooks/management/groups/useDeleteGroup.d.ts +0 -10
  271. package/dist/hooks/management/groups/useDeleteGroup.d.ts.map +0 -1
  272. package/dist/hooks/management/groups/useDeleteGroup.js +0 -28
  273. package/dist/hooks/management/groups/useDeleteGroup.js.map +0 -1
  274. package/dist/hooks/management/groups/useGetGroup.d.ts +0 -12
  275. package/dist/hooks/management/groups/useGetGroup.d.ts.map +0 -1
  276. package/dist/hooks/management/groups/useGetGroup.js +0 -28
  277. package/dist/hooks/management/groups/useGetGroup.js.map +0 -1
  278. package/dist/hooks/management/groups/useGetGroupMembers.d.ts +0 -20
  279. package/dist/hooks/management/groups/useGetGroupMembers.d.ts.map +0 -1
  280. package/dist/hooks/management/groups/useGetGroupMembers.js +0 -38
  281. package/dist/hooks/management/groups/useGetGroupMembers.js.map +0 -1
  282. package/dist/hooks/management/groups/useGetGroups.d.ts +0 -19
  283. package/dist/hooks/management/groups/useGetGroups.d.ts.map +0 -1
  284. package/dist/hooks/management/groups/useGetGroups.js +0 -29
  285. package/dist/hooks/management/groups/useGetGroups.js.map +0 -1
  286. package/dist/hooks/management/groups/useRemoveGroupMembers.d.ts +0 -12
  287. package/dist/hooks/management/groups/useRemoveGroupMembers.d.ts.map +0 -1
  288. package/dist/hooks/management/groups/useRemoveGroupMembers.js +0 -30
  289. package/dist/hooks/management/groups/useRemoveGroupMembers.js.map +0 -1
  290. package/dist/hooks/management/groups/useUpdateGroup.d.ts +0 -24
  291. package/dist/hooks/management/groups/useUpdateGroup.d.ts.map +0 -1
  292. package/dist/hooks/management/groups/useUpdateGroup.js +0 -29
  293. package/dist/hooks/management/groups/useUpdateGroup.js.map +0 -1
  294. package/dist/hooks/management/roles/useAddRoleAssignments.d.ts +0 -24
  295. package/dist/hooks/management/roles/useAddRoleAssignments.d.ts.map +0 -1
  296. package/dist/hooks/management/roles/useAddRoleAssignments.js +0 -25
  297. package/dist/hooks/management/roles/useAddRoleAssignments.js.map +0 -1
  298. package/dist/hooks/management/roles/useCreateRole.d.ts +0 -11
  299. package/dist/hooks/management/roles/useCreateRole.d.ts.map +0 -1
  300. package/dist/hooks/management/roles/useCreateRole.js +0 -24
  301. package/dist/hooks/management/roles/useCreateRole.js.map +0 -1
  302. package/dist/hooks/management/roles/useDeleteRole.d.ts +0 -10
  303. package/dist/hooks/management/roles/useDeleteRole.d.ts.map +0 -1
  304. package/dist/hooks/management/roles/useDeleteRole.js +0 -24
  305. package/dist/hooks/management/roles/useDeleteRole.js.map +0 -1
  306. package/dist/hooks/management/roles/useGetRole.d.ts +0 -12
  307. package/dist/hooks/management/roles/useGetRole.d.ts.map +0 -1
  308. package/dist/hooks/management/roles/useGetRole.js +0 -28
  309. package/dist/hooks/management/roles/useGetRole.js.map +0 -1
  310. package/dist/hooks/management/roles/useGetRoleAssignments.d.ts +0 -24
  311. package/dist/hooks/management/roles/useGetRoleAssignments.d.ts.map +0 -1
  312. package/dist/hooks/management/roles/useGetRoleAssignments.js +0 -40
  313. package/dist/hooks/management/roles/useGetRoleAssignments.js.map +0 -1
  314. package/dist/hooks/management/roles/useGetRoles.d.ts +0 -19
  315. package/dist/hooks/management/roles/useGetRoles.d.ts.map +0 -1
  316. package/dist/hooks/management/roles/useGetRoles.js +0 -29
  317. package/dist/hooks/management/roles/useGetRoles.js.map +0 -1
  318. package/dist/hooks/management/roles/useRemoveRoleAssignments.d.ts +0 -11
  319. package/dist/hooks/management/roles/useRemoveRoleAssignments.d.ts.map +0 -1
  320. package/dist/hooks/management/roles/useRemoveRoleAssignments.js +0 -25
  321. package/dist/hooks/management/roles/useRemoveRoleAssignments.js.map +0 -1
  322. package/dist/hooks/management/roles/useUpdateRole.d.ts +0 -24
  323. package/dist/hooks/management/roles/useUpdateRole.d.ts.map +0 -1
  324. package/dist/hooks/management/roles/useUpdateRole.js +0 -25
  325. package/dist/hooks/management/roles/useUpdateRole.js.map +0 -1
  326. package/dist/hooks/management/users/useCreateUser.d.ts +0 -11
  327. package/dist/hooks/management/users/useCreateUser.d.ts.map +0 -1
  328. package/dist/hooks/management/users/useCreateUser.js +0 -24
  329. package/dist/hooks/management/users/useCreateUser.js.map +0 -1
  330. package/dist/hooks/management/users/useDeleteUser.d.ts +0 -10
  331. package/dist/hooks/management/users/useDeleteUser.d.ts.map +0 -1
  332. package/dist/hooks/management/users/useDeleteUser.js +0 -24
  333. package/dist/hooks/management/users/useDeleteUser.js.map +0 -1
  334. package/dist/hooks/management/users/useGetUser.d.ts +0 -12
  335. package/dist/hooks/management/users/useGetUser.d.ts.map +0 -1
  336. package/dist/hooks/management/users/useGetUser.js +0 -28
  337. package/dist/hooks/management/users/useGetUser.js.map +0 -1
  338. package/dist/hooks/management/users/useGetUserGroups.d.ts +0 -16
  339. package/dist/hooks/management/users/useGetUserGroups.d.ts.map +0 -1
  340. package/dist/hooks/management/users/useGetUserGroups.js +0 -39
  341. package/dist/hooks/management/users/useGetUserGroups.js.map +0 -1
  342. package/dist/hooks/management/users/useGetUserTypes.d.ts +0 -15
  343. package/dist/hooks/management/users/useGetUserTypes.d.ts.map +0 -1
  344. package/dist/hooks/management/users/useGetUserTypes.js +0 -29
  345. package/dist/hooks/management/users/useGetUserTypes.js.map +0 -1
  346. package/dist/hooks/management/users/useGetUsers.d.ts +0 -17
  347. package/dist/hooks/management/users/useGetUsers.d.ts.map +0 -1
  348. package/dist/hooks/management/users/useGetUsers.js +0 -36
  349. package/dist/hooks/management/users/useGetUsers.js.map +0 -1
  350. package/dist/hooks/management/users/useUpdateUser.d.ts +0 -18
  351. package/dist/hooks/management/users/useUpdateUser.d.ts.map +0 -1
  352. package/dist/hooks/management/users/useUpdateUser.js +0 -25
  353. package/dist/hooks/management/users/useUpdateUser.js.map +0 -1
@@ -0,0 +1,93 @@
1
+ import useTranslation_default from "../../../hooks/useTranslation.js";
2
+ import DataTable_default from "../../primitives/DataTable/DataTable.js";
3
+ import AdminSection_default from "../shared/AdminSection.js";
4
+ import { jsx } from "react/jsx-runtime";
5
+
6
+ //#region src/components/admin/ApplicationList/BaseApplicationList.tsx
7
+ /**
8
+ * The translated access status of an application, or its raw value when the status is one this SDK
9
+ * does not know.
10
+ */
11
+ const getStatusLabel = (application, t) => {
12
+ const value = application.status?.value;
13
+ switch (value?.toUpperCase()) {
14
+ case "ACTIVE": return t("admin.applications.status.active");
15
+ case "SUSPENDED": return t("admin.applications.status.suspended");
16
+ default: return value ?? "";
17
+ }
18
+ };
19
+ /**
20
+ * Lists applications with their client identifier, type and, when the server reports it, access status. Holds no data of its own: pass the page
21
+ * of applications and handle selection and pagination.
22
+ */
23
+ const BaseApplicationList = ({ actions, applications, children, className, description, error = null, isLoading = false, limit = 20, offset = 0, onPageChange, onSelect, preferences, selectedApplicationId, title, totalResults }) => {
24
+ const { t } = useTranslation_default(preferences?.i18n);
25
+ const columns = [
26
+ {
27
+ header: t("admin.applications.list.columns.name"),
28
+ id: "name",
29
+ render: (application) => application.name
30
+ },
31
+ {
32
+ header: t("admin.applications.list.columns.client_id"),
33
+ id: "clientId",
34
+ render: (application) => application.clientId ? /* @__PURE__ */ jsx("code", { children: application.clientId }) : null
35
+ },
36
+ {
37
+ header: t("admin.applications.list.columns.type"),
38
+ id: "type",
39
+ render: (application) => application.type ?? application.template ?? ""
40
+ },
41
+ ...applications.some((application) => application.status?.value) ? [{
42
+ header: t("admin.applications.list.columns.status"),
43
+ id: "status",
44
+ render: (application) => getStatusLabel(application, t)
45
+ }] : []
46
+ ];
47
+ if (children) return /* @__PURE__ */ jsx("div", {
48
+ className,
49
+ children: children({
50
+ applications,
51
+ columns,
52
+ error,
53
+ isLoading,
54
+ limit,
55
+ offset,
56
+ onPageChange,
57
+ onSelect,
58
+ rows: applications,
59
+ selectedRowId: selectedApplicationId,
60
+ totalResults: totalResults ?? applications.length
61
+ })
62
+ });
63
+ return /* @__PURE__ */ jsx(AdminSection_default, {
64
+ block: "application-list",
65
+ className,
66
+ title: title ?? t("admin.applications.list.title"),
67
+ description,
68
+ actions,
69
+ preferences,
70
+ children: /* @__PURE__ */ jsx(DataTable_default, {
71
+ caption: title?.length ? title : t("admin.applications.list.title"),
72
+ columns,
73
+ rows: applications,
74
+ getRowId: (application) => application.id,
75
+ isLoading,
76
+ error,
77
+ emptyText: t("admin.applications.list.empty"),
78
+ onRowClick: onSelect,
79
+ selectedRowId: selectedApplicationId,
80
+ pagination: onPageChange ? {
81
+ limit,
82
+ offset,
83
+ onChange: onPageChange,
84
+ total: totalResults ?? applications.length
85
+ } : void 0
86
+ })
87
+ });
88
+ };
89
+ var BaseApplicationList_default = BaseApplicationList;
90
+
91
+ //#endregion
92
+ export { BaseApplicationList_default as default };
93
+ //# sourceMappingURL=BaseApplicationList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseApplicationList.js","names":["value: string | undefined","BaseApplicationList: FC<BaseApplicationListProps>","useTranslation","columns: DataTableColumn<BasicApplication>[]","AdminSection","DataTable"],"sources":["../../../../src/components/admin/ApplicationList/BaseApplicationList.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {BasicApplication, Preferences} from '@thunderid/browser';\nimport {FC, ReactElement, ReactNode} from 'react';\nimport useTranslation from '../../../hooks/useTranslation';\nimport DataTable, {DataTableColumn} from '../../primitives/DataTable/DataTable';\nimport {AdminListRenderProps} from '../shared/AdminListRenderProps';\nimport AdminSection from '../shared/AdminSection';\n\n/**\n * What {@link BaseApplicationList} hands its `children` render function. `applications` and `rows` are\n * the same array.\n */\nexport type BaseApplicationListRenderProps = AdminListRenderProps<BasicApplication> & {\n applications: BasicApplication[];\n};\n\nexport interface BaseApplicationListProps {\n /**\n * Controls rendered next to the title, such as a button that opens `ApplicationCreate`.\n */\n actions?: ReactNode;\n applications: BasicApplication[];\n /**\n * Renders custom UI in place of the default table, for example a third-party data grid. Receives\n * the applications, the default columns, the loading and error state, and the pagination and\n * selection handlers.\n */\n children?: (props: BaseApplicationListRenderProps) => ReactNode;\n className?: string;\n description?: string;\n error?: string | null;\n isLoading?: boolean;\n /**\n * Page size.\n * @default 20\n */\n limit?: number;\n offset?: number;\n /**\n * Called with the offset of the page to show. Pagination is hidden when omitted.\n */\n onPageChange?: (offset: number) => void;\n /**\n * Called when an application is chosen. Rows are selectable only when set.\n */\n onSelect?: (application: BasicApplication) => void;\n preferences?: Preferences;\n selectedApplicationId?: string;\n /**\n * Heading of the list. Pass an empty string to hide it.\n */\n title?: string;\n totalResults?: number;\n}\n\n/**\n * The translated access status of an application, or its raw value when the status is one this SDK\n * does not know.\n */\nconst getStatusLabel = (application: BasicApplication, t: (key: string) => string): string => {\n const value: string | undefined = application.status?.value;\n\n switch (value?.toUpperCase()) {\n case 'ACTIVE':\n return t('admin.applications.status.active');\n case 'SUSPENDED':\n return t('admin.applications.status.suspended');\n default:\n return value ?? '';\n }\n};\n\n/**\n * Lists applications with their client identifier, type and, when the server reports it, access status. Holds no data of its own: pass the page\n * of applications and handle selection and pagination.\n */\nconst BaseApplicationList: FC<BaseApplicationListProps> = ({\n actions,\n applications,\n children,\n className,\n description,\n error = null,\n isLoading = false,\n limit = 20,\n offset = 0,\n onPageChange,\n onSelect,\n preferences,\n selectedApplicationId,\n title,\n totalResults,\n}: BaseApplicationListProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n\n const columns: DataTableColumn<BasicApplication>[] = [\n {\n header: t('admin.applications.list.columns.name'),\n id: 'name',\n render: (application: BasicApplication): ReactNode => application.name,\n },\n {\n header: t('admin.applications.list.columns.client_id'),\n id: 'clientId',\n render: (application: BasicApplication): ReactNode =>\n application.clientId ? <code>{application.clientId}</code> : null,\n },\n {\n header: t('admin.applications.list.columns.type'),\n id: 'type',\n render: (application: BasicApplication): ReactNode => application.type ?? application.template ?? '',\n },\n // A server that does not report the access status gets no empty status column.\n ...(applications.some((application: BasicApplication) => application.status?.value)\n ? [\n {\n header: t('admin.applications.list.columns.status'),\n id: 'status',\n render: (application: BasicApplication): ReactNode => getStatusLabel(application, t),\n },\n ]\n : []),\n ];\n\n if (children) {\n return (\n <div className={className}>\n {children({\n applications,\n columns,\n error,\n isLoading,\n limit,\n offset,\n onPageChange,\n onSelect,\n rows: applications,\n selectedRowId: selectedApplicationId,\n totalResults: totalResults ?? applications.length,\n })}\n </div>\n );\n }\n\n return (\n <AdminSection\n block=\"application-list\"\n className={className}\n title={title ?? t('admin.applications.list.title')}\n description={description}\n actions={actions}\n preferences={preferences}\n >\n <DataTable\n caption={title?.length ? title : t('admin.applications.list.title')}\n columns={columns}\n rows={applications}\n getRowId={(application: BasicApplication): string => application.id}\n isLoading={isLoading}\n error={error}\n emptyText={t('admin.applications.list.empty')}\n onRowClick={onSelect}\n selectedRowId={selectedApplicationId}\n pagination={\n onPageChange ? {limit, offset, onChange: onPageChange, total: totalResults ?? applications.length} : undefined\n }\n />\n </AdminSection>\n );\n};\n\nexport default BaseApplicationList;\n"],"mappings":";;;;;;;;;;AA6DA,MAAM,kBAAkB,aAA+B,MAAuC;CAC5F,MAAMA,QAA4B,YAAY,QAAQ;AAEtD,SAAQ,OAAO,aAAa,EAA5B;EACE,KAAK,SACH,QAAO,EAAE,mCAAmC;EAC9C,KAAK,YACH,QAAO,EAAE,sCAAsC;EACjD,QACE,QAAO,SAAS;;;;;;;AAQtB,MAAMC,uBAAqD,EACzD,SACA,cACA,UACA,WACA,aACA,QAAQ,MACR,YAAY,OACZ,QAAQ,IACR,SAAS,GACT,cACA,UACA,aACA,uBACA,OACA,mBAC4C;CAC5C,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAE7C,MAAMC,UAA+C;EACnD;GACE,QAAQ,EAAE,uCAAuC;GACjD,IAAI;GACJ,SAAS,gBAA6C,YAAY;GACnE;EACD;GACE,QAAQ,EAAE,4CAA4C;GACtD,IAAI;GACJ,SAAS,gBACP,YAAY,WAAW,oBAAC,oBAAM,YAAY,WAAgB,GAAG;GAChE;EACD;GACE,QAAQ,EAAE,uCAAuC;GACjD,IAAI;GACJ,SAAS,gBAA6C,YAAY,QAAQ,YAAY,YAAY;GACnG;EAED,GAAI,aAAa,MAAM,gBAAkC,YAAY,QAAQ,MAAM,GAC/E,CACE;GACE,QAAQ,EAAE,yCAAyC;GACnD,IAAI;GACJ,SAAS,gBAA6C,eAAe,aAAa,EAAE;GACrF,CACF,GACD,EAAE;EACP;AAED,KAAI,SACF,QACE,oBAAC;EAAe;YACb,SAAS;GACR;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,MAAM;GACN,eAAe;GACf,cAAc,gBAAgB,aAAa;GAC5C,CAAC;GACE;AAIV,QACE,oBAACC;EACC,OAAM;EACK;EACX,OAAO,SAAS,EAAE,gCAAgC;EACrC;EACJ;EACI;YAEb,oBAACC;GACC,SAAS,OAAO,SAAS,QAAQ,EAAE,gCAAgC;GAC1D;GACT,MAAM;GACN,WAAW,gBAA0C,YAAY;GACtD;GACJ;GACP,WAAW,EAAE,gCAAgC;GAC7C,YAAY;GACZ,eAAe;GACf,YACE,eAAe;IAAC;IAAO;IAAQ,UAAU;IAAc,OAAO,gBAAgB,aAAa;IAAO,GAAG;IAEvG;GACW;;AAInB,kCAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"GroupCreate.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/GroupCreate/GroupCreate.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,EAAC,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAC,EAAE,EAAe,MAAM,OAAO,CAAC;AACvC,OAAwB,EAAC,oBAAoB,EAAwB,MAAM,mBAAmB,CAAC;AAK/F,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE,OAAO,GAAG,cAAc,GAAG,UAAU,CAAC,GAAG;IACjG;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACnC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAsBrC,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"GroupCreate.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/GroupCreate/GroupCreate.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,EAAwD,MAAM,oBAAoB,CAAC;AACpH,OAAO,EAAC,EAAE,EAAe,MAAM,OAAO,CAAC;AACvC,OAAwB,EAAC,oBAAoB,EAAwB,MAAM,mBAAmB,CAAC;AAM/F,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE,OAAO,GAAG,cAAc,GAAG,UAAU,CAAC,GAAG;IACjG;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACnC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CA2BrC,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import useTranslation_default from "../../../hooks/useTranslation.js";
2
- import useCreateGroup_default from "../../../hooks/management/groups/useCreateGroup.js";
2
+ import useManagementEndpoint_default from "../../../hooks/management/useManagementEndpoint.js";
3
+ import useResourceMutation_default from "../../../hooks/management/useResourceMutation.js";
3
4
  import useDefaultOuId_default from "../shared/useDefaultOuId.js";
4
5
  import BaseGroupCreate_default from "./BaseGroupCreate.js";
5
- import { toManagementErrorMessage } from "@thunderid/browser";
6
+ import { GroupQueryKeys, createGroup, toManagementErrorMessage } from "@thunderid/browser";
6
7
  import { jsx } from "react/jsx-runtime";
7
8
 
8
9
  //#region src/components/admin/GroupCreate/GroupCreate.tsx
@@ -17,7 +18,12 @@ import { jsx } from "react/jsx-runtime";
17
18
  const GroupCreate = ({ onCreated, ouId, preferences,...rest }) => {
18
19
  const { t } = useTranslation_default(preferences?.i18n);
19
20
  const resolvedOuId = useDefaultOuId_default(ouId);
20
- const { error, isLoading, mutate } = useCreateGroup_default({ onSuccess: onCreated });
21
+ const endpoint = useManagementEndpoint_default("groups");
22
+ const { error, isLoading, mutate } = useResourceMutation_default((payload, fetcher) => createGroup({
23
+ ...endpoint,
24
+ fetcher,
25
+ payload
26
+ }), () => [[GroupQueryKeys.GROUPS], [GroupQueryKeys.MEMBERSHIPS]], { onSuccess: onCreated });
21
27
  const handleSubmit = ({ description, name }) => {
22
28
  if (resolvedOuId) mutate({
23
29
  description,
@@ -1 +1 @@
1
- {"version":3,"file":"GroupCreate.js","names":["GroupCreate: FC<GroupCreateProps>","useTranslation","resolvedOuId: string | undefined","useDefaultOuId","useCreateGroup","BaseGroupCreate"],"sources":["../../../../src/components/admin/GroupCreate/GroupCreate.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {toManagementErrorMessage, Group} from '@thunderid/browser';\nimport {FC, ReactElement} from 'react';\nimport BaseGroupCreate, {BaseGroupCreateProps, GroupCreateSubmission} from './BaseGroupCreate';\nimport useCreateGroup from '../../../hooks/management/groups/useCreateGroup';\nimport useTranslation from '../../../hooks/useTranslation';\nimport useDefaultOuId from '../shared/useDefaultOuId';\n\nexport type GroupCreateProps = Omit<BaseGroupCreateProps, 'error' | 'isSubmitting' | 'onSubmit'> & {\n /**\n * Called with the created group.\n */\n onCreated?: (group: Group) => void;\n /**\n * Organization unit the group is created in. Defaults to the signed-in user's organization unit.\n */\n ouId?: string;\n};\n\n/**\n * Creates a group through the management API.\n *\n * @example\n * ```tsx\n * <GroupCreate onCreated={(group) => navigate(`/groups/${group.id}`)} />\n * ```\n */\nconst GroupCreate: FC<GroupCreateProps> = ({onCreated, ouId, preferences, ...rest}: GroupCreateProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const resolvedOuId: string | undefined = useDefaultOuId(ouId);\n const {error, isLoading, mutate} = useCreateGroup({onSuccess: onCreated});\n\n const handleSubmit = ({description, name}: GroupCreateSubmission): void => {\n if (resolvedOuId) {\n void mutate({description, name, ouId: resolvedOuId});\n }\n };\n\n return (\n <BaseGroupCreate\n onSubmit={handleSubmit}\n isSubmitting={isLoading}\n error={\n resolvedOuId ? toManagementErrorMessage(t, error, 'admin.groups.create.error') : t('admin.common.errors.no_ou')\n }\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default GroupCreate;\n"],"mappings":";;;;;;;;;;;;;;;;AA6BA,MAAMA,eAAqC,EAAC,WAAW,MAAM,YAAa,GAAG,WAA0C;CACrH,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAMC,eAAmCC,uBAAe,KAAK;CAC7D,MAAM,EAAC,OAAO,WAAW,WAAUC,uBAAe,EAAC,WAAW,WAAU,CAAC;CAEzE,MAAM,gBAAgB,EAAC,aAAa,WAAuC;AACzE,MAAI,aACF,CAAK,OAAO;GAAC;GAAa;GAAM,MAAM;GAAa,CAAC;;AAIxD,QACE,oBAACC;EACC,UAAU;EACV,cAAc;EACd,OACE,eAAe,yBAAyB,GAAG,OAAO,4BAA4B,GAAG,EAAE,4BAA4B;EAEpG;EACb,GAAI;GACJ;;AAIN,0BAAe"}
1
+ {"version":3,"file":"GroupCreate.js","names":["GroupCreate: FC<GroupCreateProps>","useTranslation","resolvedOuId: string | undefined","useDefaultOuId","endpoint: ManagementEndpoint","useManagementEndpoint","useResourceMutation","BaseGroupCreate"],"sources":["../../../../src/components/admin/GroupCreate/GroupCreate.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {CreateGroupRequest, Group, GroupQueryKeys, createGroup, toManagementErrorMessage} from '@thunderid/browser';\nimport {FC, ReactElement} from 'react';\nimport BaseGroupCreate, {BaseGroupCreateProps, GroupCreateSubmission} from './BaseGroupCreate';\nimport useManagementEndpoint, {ManagementEndpoint} from '../../../hooks/management/useManagementEndpoint';\nimport useResourceMutation, {ResourceMutationResult} from '../../../hooks/management/useResourceMutation';\nimport useTranslation from '../../../hooks/useTranslation';\nimport useDefaultOuId from '../shared/useDefaultOuId';\n\nexport type GroupCreateProps = Omit<BaseGroupCreateProps, 'error' | 'isSubmitting' | 'onSubmit'> & {\n /**\n * Called with the created group.\n */\n onCreated?: (group: Group) => void;\n /**\n * Organization unit the group is created in. Defaults to the signed-in user's organization unit.\n */\n ouId?: string;\n};\n\n/**\n * Creates a group through the management API.\n *\n * @example\n * ```tsx\n * <GroupCreate onCreated={(group) => navigate(`/groups/${group.id}`)} />\n * ```\n */\nconst GroupCreate: FC<GroupCreateProps> = ({onCreated, ouId, preferences, ...rest}: GroupCreateProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const resolvedOuId: string | undefined = useDefaultOuId(ouId);\n const endpoint: ManagementEndpoint = useManagementEndpoint('groups');\n const {error, isLoading, mutate}: ResourceMutationResult<Group, CreateGroupRequest> = useResourceMutation(\n (payload: CreateGroupRequest, fetcher) => createGroup({...endpoint, fetcher, payload}),\n () => [[GroupQueryKeys.GROUPS], [GroupQueryKeys.MEMBERSHIPS]],\n {onSuccess: onCreated},\n );\n\n const handleSubmit = ({description, name}: GroupCreateSubmission): void => {\n if (resolvedOuId) {\n void mutate({description, name, ouId: resolvedOuId});\n }\n };\n\n return (\n <BaseGroupCreate\n onSubmit={handleSubmit}\n isSubmitting={isLoading}\n error={\n resolvedOuId ? toManagementErrorMessage(t, error, 'admin.groups.create.error') : t('admin.common.errors.no_ou')\n }\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default GroupCreate;\n"],"mappings":";;;;;;;;;;;;;;;;;AA8BA,MAAMA,eAAqC,EAAC,WAAW,MAAM,YAAa,GAAG,WAA0C;CACrH,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAMC,eAAmCC,uBAAe,KAAK;CAC7D,MAAMC,WAA+BC,8BAAsB,SAAS;CACpE,MAAM,EAAC,OAAO,WAAW,WAA6DC,6BACnF,SAA6B,YAAY,YAAY;EAAC,GAAG;EAAU;EAAS;EAAQ,CAAC,QAChF,CAAC,CAAC,eAAe,OAAO,EAAE,CAAC,eAAe,YAAY,CAAC,EAC7D,EAAC,WAAW,WAAU,CACvB;CAED,MAAM,gBAAgB,EAAC,aAAa,WAAuC;AACzE,MAAI,aACF,CAAK,OAAO;GAAC;GAAa;GAAM,MAAM;GAAa,CAAC;;AAIxD,QACE,oBAACC;EACC,UAAU;EACV,cAAc;EACd,OACE,eAAe,yBAAyB,GAAG,OAAO,4BAA4B,GAAG,EAAE,4BAA4B;EAEpG;EACb,GAAI;GACJ;;AAIN,0BAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"GroupList.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/GroupList/GroupList.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAC,EAAE,EAAyB,MAAM,OAAO,CAAC;AACjD,OAAsB,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAIlE,MAAM,MAAM,cAAc,GAAG,IAAI,CAC/B,kBAAkB,EAClB,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,GAAG,cAAc,CAC9E,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CAkBjC,CAAC;AAEF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"GroupList.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/GroupList/GroupList.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAC,EAAE,EAAyB,MAAM,OAAO,CAAC;AACjD,OAAsB,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAKlE,MAAM,MAAM,cAAc,GAAG,IAAI,CAC/B,kBAAkB,EAClB,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,GAAG,cAAc,CAC9E,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CAsBjC,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import useTranslation_default from "../../../hooks/useTranslation.js";
2
- import useGetGroups_default from "../../../hooks/management/groups/useGetGroups.js";
2
+ import useManagementEndpoint_default from "../../../hooks/management/useManagementEndpoint.js";
3
+ import useResourceQuery_default from "../../../hooks/management/useResourceQuery.js";
3
4
  import BaseGroupList_default from "./BaseGroupList.js";
4
- import { toManagementErrorMessage } from "@thunderid/browser";
5
+ import { GroupQueryKeys, getGroups, toManagementErrorMessage } from "@thunderid/browser";
5
6
  import { useState } from "react";
6
7
  import { jsx } from "react/jsx-runtime";
7
8
 
@@ -17,10 +18,16 @@ import { jsx } from "react/jsx-runtime";
17
18
  const GroupList = ({ limit = 20, preferences,...rest }) => {
18
19
  const { t } = useTranslation_default(preferences?.i18n);
19
20
  const [offset, setOffset] = useState(0);
20
- const { data, error, isLoading } = useGetGroups_default({
21
+ const endpoint = useManagementEndpoint_default("groups");
22
+ const { data, error, isLoading } = useResourceQuery_default([GroupQueryKeys.GROUPS, {
21
23
  limit,
22
24
  offset
23
- });
25
+ }], (fetcher) => getGroups({
26
+ ...endpoint,
27
+ fetcher,
28
+ limit,
29
+ offset
30
+ }));
24
31
  return /* @__PURE__ */ jsx(BaseGroupList_default, {
25
32
  groups: data?.groups ?? [],
26
33
  totalResults: data?.totalResults,
@@ -1 +1 @@
1
- {"version":3,"file":"GroupList.js","names":["GroupList: FC<GroupListProps>","useTranslation","useGetGroups","BaseGroupList"],"sources":["../../../../src/components/admin/GroupList/GroupList.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {toManagementErrorMessage} from '@thunderid/browser';\nimport {FC, ReactElement, useState} from 'react';\nimport BaseGroupList, {BaseGroupListProps} from './BaseGroupList';\nimport useGetGroups from '../../../hooks/management/groups/useGetGroups';\nimport useTranslation from '../../../hooks/useTranslation';\n\nexport type GroupListProps = Omit<\n BaseGroupListProps,\n 'error' | 'groups' | 'isLoading' | 'offset' | 'onPageChange' | 'totalResults'\n>;\n\n/**\n * Lists the groups the signed-in user is allowed to see, a page at a time.\n *\n * @example\n * ```tsx\n * <GroupList onSelect={(group) => setSelectedGroupId(group.id)} />\n * ```\n */\nconst GroupList: FC<GroupListProps> = ({limit = 20, preferences, ...rest}: GroupListProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const [offset, setOffset] = useState<number>(0);\n const {data, error, isLoading} = useGetGroups({limit, offset});\n\n return (\n <BaseGroupList\n groups={data?.groups ?? []}\n totalResults={data?.totalResults}\n isLoading={isLoading}\n error={toManagementErrorMessage(t, error, 'admin.groups.list.error')}\n limit={limit}\n offset={offset}\n onPageChange={setOffset}\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default GroupList;\n"],"mappings":";;;;;;;;;;;;;;;;AAsBA,MAAMA,aAAiC,EAAC,QAAQ,IAAI,YAAa,GAAG,WAAwC;CAC1G,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAM,CAAC,QAAQ,aAAa,SAAiB,EAAE;CAC/C,MAAM,EAAC,MAAM,OAAO,cAAaC,qBAAa;EAAC;EAAO;EAAO,CAAC;AAE9D,QACE,oBAACC;EACC,QAAQ,MAAM,UAAU,EAAE;EAC1B,cAAc,MAAM;EACT;EACX,OAAO,yBAAyB,GAAG,OAAO,0BAA0B;EAC7D;EACC;EACR,cAAc;EACD;EACb,GAAI;GACJ;;AAIN,wBAAe"}
1
+ {"version":3,"file":"GroupList.js","names":["GroupList: FC<GroupListProps>","useTranslation","endpoint: ManagementEndpoint","useManagementEndpoint","useResourceQuery","BaseGroupList"],"sources":["../../../../src/components/admin/GroupList/GroupList.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {GroupListResponse, GroupQueryKeys, getGroups, toManagementErrorMessage} from '@thunderid/browser';\nimport {FC, ReactElement, useState} from 'react';\nimport BaseGroupList, {BaseGroupListProps} from './BaseGroupList';\nimport useManagementEndpoint, {ManagementEndpoint} from '../../../hooks/management/useManagementEndpoint';\nimport useResourceQuery, {ResourceQueryResult} from '../../../hooks/management/useResourceQuery';\nimport useTranslation from '../../../hooks/useTranslation';\n\nexport type GroupListProps = Omit<\n BaseGroupListProps,\n 'error' | 'groups' | 'isLoading' | 'offset' | 'onPageChange' | 'totalResults'\n>;\n\n/**\n * Lists the groups the signed-in user is allowed to see, a page at a time.\n *\n * @example\n * ```tsx\n * <GroupList onSelect={(group) => setSelectedGroupId(group.id)} />\n * ```\n */\nconst GroupList: FC<GroupListProps> = ({limit = 20, preferences, ...rest}: GroupListProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const [offset, setOffset] = useState<number>(0);\n const endpoint: ManagementEndpoint = useManagementEndpoint('groups');\n const {data, error, isLoading}: ResourceQueryResult<GroupListResponse> = useResourceQuery(\n [GroupQueryKeys.GROUPS, {limit, offset}],\n (fetcher) => getGroups({...endpoint, fetcher, limit, offset}),\n );\n\n return (\n <BaseGroupList\n groups={data?.groups ?? []}\n totalResults={data?.totalResults}\n isLoading={isLoading}\n error={toManagementErrorMessage(t, error, 'admin.groups.list.error')}\n limit={limit}\n offset={offset}\n onPageChange={setOffset}\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default GroupList;\n"],"mappings":";;;;;;;;;;;;;;;;;AAuBA,MAAMA,aAAiC,EAAC,QAAQ,IAAI,YAAa,GAAG,WAAwC;CAC1G,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAM,CAAC,QAAQ,aAAa,SAAiB,EAAE;CAC/C,MAAMC,WAA+BC,8BAAsB,SAAS;CACpE,MAAM,EAAC,MAAM,OAAO,cAAqDC,yBACvE,CAAC,eAAe,QAAQ;EAAC;EAAO;EAAO,CAAC,GACvC,YAAY,UAAU;EAAC,GAAG;EAAU;EAAS;EAAO;EAAO,CAAC,CAC9D;AAED,QACE,oBAACC;EACC,QAAQ,MAAM,UAAU,EAAE;EAC1B,cAAc,MAAM;EACT;EACX,OAAO,yBAAyB,GAAG,OAAO,0BAA0B;EAC7D;EACC;EACR,cAAc;EACD;EACb,GAAI;GACJ;;AAIN,wBAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"GroupMembers.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/GroupMembers/GroupMembers.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAC,EAAE,EAAwB,MAAM,OAAO,CAAC;AAChD,OAAyB,EAAC,qBAAqB,EAAC,MAAM,oBAAoB,CAAC;AAS3E,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,qBAAqB,EACrB,YAAY,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CACvF,GAAG;IACF;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAgDvC,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"GroupMembers.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/GroupMembers/GroupMembers.tsx"],"names":[],"mappings":"AAwBA,OAAO,EAAC,EAAE,EAAwB,MAAM,OAAO,CAAC;AAChD,OAAyB,EAAC,qBAAqB,EAAC,MAAM,oBAAoB,CAAC;AAsB3E,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,qBAAqB,EACrB,YAAY,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CACvF,GAAG;IACF;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAuEvC,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1,16 +1,23 @@
1
1
  import useTranslation_default from "../../../hooks/useTranslation.js";
2
- import useGetUsers_default from "../../../hooks/management/users/useGetUsers.js";
3
- import useGetAgents_default from "../../../hooks/management/agents/useGetAgents.js";
4
- import useGetGroupMembers_default from "../../../hooks/management/groups/useGetGroupMembers.js";
5
- import useAddGroupMembers_default from "../../../hooks/management/groups/useAddGroupMembers.js";
6
- import useRemoveGroupMembers_default from "../../../hooks/management/groups/useRemoveGroupMembers.js";
2
+ import useManagementEndpoint_default from "../../../hooks/management/useManagementEndpoint.js";
3
+ import useResourceQuery_default from "../../../hooks/management/useResourceQuery.js";
4
+ import useResourceMutation_default from "../../../hooks/management/useResourceMutation.js";
7
5
  import BaseGroupMembers_default from "./BaseGroupMembers.js";
8
- import { resolveManagedIdentityName, toManagementErrorMessage } from "@thunderid/browser";
6
+ import { AgentQueryKeys, GroupQueryKeys, RoleQueryKeys, UserQueryKeys, addGroupMembers, getAgents, getGroupMembers, getUsers, removeGroupMembers, resolveManagedIdentityName, toManagementErrorMessage } from "@thunderid/browser";
9
7
  import { useMemo } from "react";
10
8
  import { jsx } from "react/jsx-runtime";
11
9
 
12
10
  //#region src/components/admin/GroupMembers/GroupMembers.tsx
13
11
  /**
12
+ * Query keys to refetch after a group's membership changes.
13
+ */
14
+ const getMembershipInvalidatedKeys = ({ groupId }) => [
15
+ [GroupQueryKeys.GROUP, groupId],
16
+ [GroupQueryKeys.GROUP_MEMBERS, groupId],
17
+ [GroupQueryKeys.MEMBERSHIPS],
18
+ [RoleQueryKeys.ROLE_ASSIGNMENTS]
19
+ ];
20
+ /**
14
21
  * Lists the users and agents in a group, and lets the signed-in user add and remove them.
15
22
  *
16
23
  * @example
@@ -20,11 +27,41 @@ import { jsx } from "react/jsx-runtime";
20
27
  */
21
28
  const GroupMembers = ({ editable = false, groupId, preferences,...rest }) => {
22
29
  const { t } = useTranslation_default(preferences?.i18n);
23
- const members = useGetGroupMembers_default(groupId, { limit: 100 });
24
- const users = useGetUsers_default({ limit: 100 }, { enabled: editable });
25
- const agents = useGetAgents_default({ limit: 100 }, { enabled: editable });
26
- const add = useAddGroupMembers_default();
27
- const remove = useRemoveGroupMembers_default();
30
+ const groupsEndpoint = useManagementEndpoint_default("groups");
31
+ const usersEndpoint = useManagementEndpoint_default("users");
32
+ const agentsEndpoint = useManagementEndpoint_default("agents");
33
+ const members = useResourceQuery_default([
34
+ GroupQueryKeys.GROUP_MEMBERS,
35
+ groupId,
36
+ { limit: 100 }
37
+ ], (fetcher) => getGroupMembers({
38
+ ...groupsEndpoint,
39
+ fetcher,
40
+ groupId,
41
+ limit: 100
42
+ }), { enabled: Boolean(groupId) });
43
+ const users = useResourceQuery_default([UserQueryKeys.USERS, { limit: 100 }], (fetcher) => getUsers({
44
+ ...usersEndpoint,
45
+ fetcher,
46
+ limit: 100
47
+ }), { enabled: editable });
48
+ const agents = useResourceQuery_default([AgentQueryKeys.AGENTS, { limit: 100 }], (fetcher) => getAgents({
49
+ ...agentsEndpoint,
50
+ fetcher,
51
+ limit: 100
52
+ }), { enabled: editable });
53
+ const add = useResourceMutation_default(({ groupId: id, members: changes }, fetcher) => addGroupMembers({
54
+ ...groupsEndpoint,
55
+ fetcher,
56
+ groupId: id,
57
+ members: changes
58
+ }), getMembershipInvalidatedKeys);
59
+ const remove = useResourceMutation_default(({ groupId: id, members: changes }, fetcher) => removeGroupMembers({
60
+ ...groupsEndpoint,
61
+ fetcher,
62
+ groupId: id,
63
+ members: changes
64
+ }), getMembershipInvalidatedKeys);
28
65
  const candidates = useMemo(() => ({
29
66
  agent: (agents.data?.agents ?? []).map((agent) => ({
30
67
  id: agent.id,
@@ -1 +1 @@
1
- {"version":3,"file":"GroupMembers.js","names":["GroupMembers: FC<GroupMembersProps>","useTranslation","useGetGroupMembers","useGetUsers","useGetAgents","useAddGroupMembers","useRemoveGroupMembers","candidates: Partial<Record<'user' | 'agent', IdentityCandidate[]>>","BaseGroupMembers"],"sources":["../../../../src/components/admin/GroupMembers/GroupMembers.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n resolveManagedIdentityName,\n toManagementErrorMessage,\n BasicAgent,\n GroupMember,\n ManagedUser,\n} from '@thunderid/browser';\nimport {FC, ReactElement, useMemo} from 'react';\nimport BaseGroupMembers, {BaseGroupMembersProps} from './BaseGroupMembers';\nimport useGetAgents from '../../../hooks/management/agents/useGetAgents';\nimport useAddGroupMembers from '../../../hooks/management/groups/useAddGroupMembers';\nimport useGetGroupMembers from '../../../hooks/management/groups/useGetGroupMembers';\nimport useRemoveGroupMembers from '../../../hooks/management/groups/useRemoveGroupMembers';\nimport useGetUsers from '../../../hooks/management/users/useGetUsers';\nimport useTranslation from '../../../hooks/useTranslation';\nimport {IdentityCandidate} from '../shared/IdentityPicker';\n\nexport type GroupMembersProps = Omit<\n BaseGroupMembersProps,\n 'candidates' | 'error' | 'isLoading' | 'isMutating' | 'members' | 'onAdd' | 'onRemove'\n> & {\n /**\n * Whether members can be added and removed from this view.\n * @default false\n */\n editable?: boolean;\n groupId: string;\n};\n\n/**\n * Lists the users and agents in a group, and lets the signed-in user add and remove them.\n *\n * @example\n * ```tsx\n * <GroupMembers groupId={groupId} />\n * ```\n */\nconst GroupMembers: FC<GroupMembersProps> = ({\n editable = false,\n groupId,\n preferences,\n ...rest\n}: GroupMembersProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const members = useGetGroupMembers(groupId, {limit: 100});\n const users = useGetUsers({limit: 100}, {enabled: editable});\n const agents = useGetAgents({limit: 100}, {enabled: editable});\n const add = useAddGroupMembers();\n const remove = useRemoveGroupMembers();\n\n const candidates: Partial<Record<'user' | 'agent', IdentityCandidate[]>> = useMemo(\n () => ({\n agent: (agents.data?.agents ?? []).map((agent: BasicAgent) => ({id: agent.id, label: agent.name})),\n user: (users.data?.users ?? []).map((user: ManagedUser) => ({\n id: user.id,\n label: resolveManagedIdentityName(user),\n })),\n }),\n [agents.data, users.data],\n );\n\n return (\n <BaseGroupMembers\n members={members.data?.members ?? []}\n isLoading={members.isLoading}\n isMutating={add.isLoading || remove.isLoading}\n error={\n toManagementErrorMessage(t, members.error, 'admin.groups.members.error') ??\n toManagementErrorMessage(t, add.error ?? remove.error, 'admin.groups.members.update_error')\n }\n candidates={editable ? candidates : undefined}\n onAdd={\n editable\n ? (member: Pick<GroupMember, 'id' | 'type'>): void => void add.mutate({groupId, members: [member]})\n : undefined\n }\n onRemove={\n editable\n ? (member: GroupMember): void => void remove.mutate({groupId, members: [{id: member.id, type: member.type}]})\n : undefined\n }\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default GroupMembers;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAwCA,MAAMA,gBAAuC,EAC3C,WAAW,OACX,SACA,YACA,GAAG,WACkC;CACrC,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAM,UAAUC,2BAAmB,SAAS,EAAC,OAAO,KAAI,CAAC;CACzD,MAAM,QAAQC,oBAAY,EAAC,OAAO,KAAI,EAAE,EAAC,SAAS,UAAS,CAAC;CAC5D,MAAM,SAASC,qBAAa,EAAC,OAAO,KAAI,EAAE,EAAC,SAAS,UAAS,CAAC;CAC9D,MAAM,MAAMC,4BAAoB;CAChC,MAAM,SAASC,+BAAuB;CAEtC,MAAMC,aAAqE,eAClE;EACL,QAAQ,OAAO,MAAM,UAAU,EAAE,EAAE,KAAK,WAAuB;GAAC,IAAI,MAAM;GAAI,OAAO,MAAM;GAAK,EAAE;EAClG,OAAO,MAAM,MAAM,SAAS,EAAE,EAAE,KAAK,UAAuB;GAC1D,IAAI,KAAK;GACT,OAAO,2BAA2B,KAAK;GACxC,EAAE;EACJ,GACD,CAAC,OAAO,MAAM,MAAM,KAAK,CAC1B;AAED,QACE,oBAACC;EACC,SAAS,QAAQ,MAAM,WAAW,EAAE;EACpC,WAAW,QAAQ;EACnB,YAAY,IAAI,aAAa,OAAO;EACpC,OACE,yBAAyB,GAAG,QAAQ,OAAO,6BAA6B,IACxE,yBAAyB,GAAG,IAAI,SAAS,OAAO,OAAO,oCAAoC;EAE7F,YAAY,WAAW,aAAa;EACpC,OACE,YACK,WAAmD,KAAK,IAAI,OAAO;GAAC;GAAS,SAAS,CAAC,OAAO;GAAC,CAAC,GACjG;EAEN,UACE,YACK,WAA8B,KAAK,OAAO,OAAO;GAAC;GAAS,SAAS,CAAC;IAAC,IAAI,OAAO;IAAI,MAAM,OAAO;IAAK,CAAC;GAAC,CAAC,GAC3G;EAEO;EACb,GAAI;GACJ;;AAIN,2BAAe"}
1
+ {"version":3,"file":"GroupMembers.js","names":["GroupMembers: FC<GroupMembersProps>","useTranslation","groupsEndpoint: ManagementEndpoint","useManagementEndpoint","usersEndpoint: ManagementEndpoint","agentsEndpoint: ManagementEndpoint","members: ResourceQueryResult<GroupMemberListResponse>","useResourceQuery","users: ResourceQueryResult<ManagedUserListResponse>","agents: ResourceQueryResult<AgentListResponse>","add: ResourceMutationResult<Group, GroupMembersVariables>","useResourceMutation","remove: ResourceMutationResult<Group, GroupMembersVariables>","candidates: Partial<Record<'user' | 'agent', IdentityCandidate[]>>","BaseGroupMembers"],"sources":["../../../../src/components/admin/GroupMembers/GroupMembers.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n AgentListResponse,\n AgentQueryKeys,\n BasicAgent,\n Group,\n GroupMember,\n GroupMemberListResponse,\n GroupQueryKeys,\n ManagedUser,\n ManagedUserListResponse,\n ResourceQueryKey,\n RoleQueryKeys,\n UserQueryKeys,\n addGroupMembers,\n getAgents,\n getGroupMembers,\n getUsers,\n removeGroupMembers,\n resolveManagedIdentityName,\n toManagementErrorMessage,\n} from '@thunderid/browser';\nimport {FC, ReactElement, useMemo} from 'react';\nimport BaseGroupMembers, {BaseGroupMembersProps} from './BaseGroupMembers';\nimport useManagementEndpoint, {ManagementEndpoint} from '../../../hooks/management/useManagementEndpoint';\nimport useResourceMutation, {ResourceMutationResult} from '../../../hooks/management/useResourceMutation';\nimport useResourceQuery, {ResourceQueryResult} from '../../../hooks/management/useResourceQuery';\nimport useTranslation from '../../../hooks/useTranslation';\nimport {IdentityCandidate} from '../shared/IdentityPicker';\n\ninterface GroupMembersVariables {\n groupId: string;\n members: Pick<GroupMember, 'id' | 'type'>[];\n}\n\n/**\n * Query keys to refetch after a group's membership changes.\n */\nconst getMembershipInvalidatedKeys = ({groupId}: GroupMembersVariables): ResourceQueryKey[] => [\n [GroupQueryKeys.GROUP, groupId],\n [GroupQueryKeys.GROUP_MEMBERS, groupId],\n [GroupQueryKeys.MEMBERSHIPS],\n [RoleQueryKeys.ROLE_ASSIGNMENTS],\n];\n\nexport type GroupMembersProps = Omit<\n BaseGroupMembersProps,\n 'candidates' | 'error' | 'isLoading' | 'isMutating' | 'members' | 'onAdd' | 'onRemove'\n> & {\n /**\n * Whether members can be added and removed from this view.\n * @default false\n */\n editable?: boolean;\n groupId: string;\n};\n\n/**\n * Lists the users and agents in a group, and lets the signed-in user add and remove them.\n *\n * @example\n * ```tsx\n * <GroupMembers groupId={groupId} />\n * ```\n */\nconst GroupMembers: FC<GroupMembersProps> = ({\n editable = false,\n groupId,\n preferences,\n ...rest\n}: GroupMembersProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const groupsEndpoint: ManagementEndpoint = useManagementEndpoint('groups');\n const usersEndpoint: ManagementEndpoint = useManagementEndpoint('users');\n const agentsEndpoint: ManagementEndpoint = useManagementEndpoint('agents');\n const members: ResourceQueryResult<GroupMemberListResponse> = useResourceQuery(\n [GroupQueryKeys.GROUP_MEMBERS, groupId, {limit: 100}],\n (fetcher) => getGroupMembers({...groupsEndpoint, fetcher, groupId, limit: 100}),\n {enabled: Boolean(groupId)},\n );\n const users: ResourceQueryResult<ManagedUserListResponse> = useResourceQuery(\n [UserQueryKeys.USERS, {limit: 100}],\n (fetcher) => getUsers({...usersEndpoint, fetcher, limit: 100}),\n {enabled: editable},\n );\n const agents: ResourceQueryResult<AgentListResponse> = useResourceQuery(\n [AgentQueryKeys.AGENTS, {limit: 100}],\n (fetcher) => getAgents({...agentsEndpoint, fetcher, limit: 100}),\n {enabled: editable},\n );\n const add: ResourceMutationResult<Group, GroupMembersVariables> = useResourceMutation(\n ({groupId: id, members: changes}: GroupMembersVariables, fetcher) =>\n addGroupMembers({...groupsEndpoint, fetcher, groupId: id, members: changes}),\n getMembershipInvalidatedKeys,\n );\n const remove: ResourceMutationResult<Group, GroupMembersVariables> = useResourceMutation(\n ({groupId: id, members: changes}: GroupMembersVariables, fetcher) =>\n removeGroupMembers({...groupsEndpoint, fetcher, groupId: id, members: changes}),\n getMembershipInvalidatedKeys,\n );\n\n const candidates: Partial<Record<'user' | 'agent', IdentityCandidate[]>> = useMemo(\n () => ({\n agent: (agents.data?.agents ?? []).map((agent: BasicAgent) => ({id: agent.id, label: agent.name})),\n user: (users.data?.users ?? []).map((user: ManagedUser) => ({\n id: user.id,\n label: resolveManagedIdentityName(user),\n })),\n }),\n [agents.data, users.data],\n );\n\n return (\n <BaseGroupMembers\n members={members.data?.members ?? []}\n isLoading={members.isLoading}\n isMutating={add.isLoading || remove.isLoading}\n error={\n toManagementErrorMessage(t, members.error, 'admin.groups.members.error') ??\n toManagementErrorMessage(t, add.error ?? remove.error, 'admin.groups.members.update_error')\n }\n candidates={editable ? candidates : undefined}\n onAdd={\n editable\n ? (member: Pick<GroupMember, 'id' | 'type'>): void => void add.mutate({groupId, members: [member]})\n : undefined\n }\n onRemove={\n editable\n ? (member: GroupMember): void => void remove.mutate({groupId, members: [{id: member.id, type: member.type}]})\n : undefined\n }\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default GroupMembers;\n"],"mappings":";;;;;;;;;;;;;AAwCA,MAAM,gCAAgC,EAAC,cAAwD;CAC7F,CAAC,eAAe,OAAO,QAAQ;CAC/B,CAAC,eAAe,eAAe,QAAQ;CACvC,CAAC,eAAe,YAAY;CAC5B,CAAC,cAAc,iBAAiB;CACjC;;;;;;;;;AAsBD,MAAMA,gBAAuC,EAC3C,WAAW,OACX,SACA,YACA,GAAG,WACkC;CACrC,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAMC,iBAAqCC,8BAAsB,SAAS;CAC1E,MAAMC,gBAAoCD,8BAAsB,QAAQ;CACxE,MAAME,iBAAqCF,8BAAsB,SAAS;CAC1E,MAAMG,UAAwDC,yBAC5D;EAAC,eAAe;EAAe;EAAS,EAAC,OAAO,KAAI;EAAC,GACpD,YAAY,gBAAgB;EAAC,GAAG;EAAgB;EAAS;EAAS,OAAO;EAAI,CAAC,EAC/E,EAAC,SAAS,QAAQ,QAAQ,EAAC,CAC5B;CACD,MAAMC,QAAsDD,yBAC1D,CAAC,cAAc,OAAO,EAAC,OAAO,KAAI,CAAC,GAClC,YAAY,SAAS;EAAC,GAAG;EAAe;EAAS,OAAO;EAAI,CAAC,EAC9D,EAAC,SAAS,UAAS,CACpB;CACD,MAAME,SAAiDF,yBACrD,CAAC,eAAe,QAAQ,EAAC,OAAO,KAAI,CAAC,GACpC,YAAY,UAAU;EAAC,GAAG;EAAgB;EAAS,OAAO;EAAI,CAAC,EAChE,EAAC,SAAS,UAAS,CACpB;CACD,MAAMG,MAA4DC,6BAC/D,EAAC,SAAS,IAAI,SAAS,WAAiC,YACvD,gBAAgB;EAAC,GAAG;EAAgB;EAAS,SAAS;EAAI,SAAS;EAAQ,CAAC,EAC9E,6BACD;CACD,MAAMC,SAA+DD,6BAClE,EAAC,SAAS,IAAI,SAAS,WAAiC,YACvD,mBAAmB;EAAC,GAAG;EAAgB;EAAS,SAAS;EAAI,SAAS;EAAQ,CAAC,EACjF,6BACD;CAED,MAAME,aAAqE,eAClE;EACL,QAAQ,OAAO,MAAM,UAAU,EAAE,EAAE,KAAK,WAAuB;GAAC,IAAI,MAAM;GAAI,OAAO,MAAM;GAAK,EAAE;EAClG,OAAO,MAAM,MAAM,SAAS,EAAE,EAAE,KAAK,UAAuB;GAC1D,IAAI,KAAK;GACT,OAAO,2BAA2B,KAAK;GACxC,EAAE;EACJ,GACD,CAAC,OAAO,MAAM,MAAM,KAAK,CAC1B;AAED,QACE,oBAACC;EACC,SAAS,QAAQ,MAAM,WAAW,EAAE;EACpC,WAAW,QAAQ;EACnB,YAAY,IAAI,aAAa,OAAO;EACpC,OACE,yBAAyB,GAAG,QAAQ,OAAO,6BAA6B,IACxE,yBAAyB,GAAG,IAAI,SAAS,OAAO,OAAO,oCAAoC;EAE7F,YAAY,WAAW,aAAa;EACpC,OACE,YACK,WAAmD,KAAK,IAAI,OAAO;GAAC;GAAS,SAAS,CAAC,OAAO;GAAC,CAAC,GACjG;EAEN,UACE,YACK,WAA8B,KAAK,OAAO,OAAO;GAAC;GAAS,SAAS,CAAC;IAAC,IAAI,OAAO;IAAI,MAAM,OAAO;IAAK,CAAC;GAAC,CAAC,GAC3G;EAEO;EACb,GAAI;GACJ;;AAIN,2BAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"RoleAssignments.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/RoleAssignments/RoleAssignments.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAC,EAAE,EAAkC,MAAM,OAAO,CAAC;AAC1D,OAA4B,EAAC,wBAAwB,EAAC,MAAM,uBAAuB,CAAC;AAUpF,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,wBAAwB,EACtB,aAAa,GACb,YAAY,GACZ,OAAO,GACP,WAAW,GACX,YAAY,GACZ,UAAU,GACV,oBAAoB,GACpB,YAAY,GACZ,YAAY,CACf,GAAG;IACF;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAuD7C,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"RoleAssignments.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/RoleAssignments/RoleAssignments.tsx"],"names":[],"mappings":"AA2BA,OAAO,EAAC,EAAE,EAAkC,MAAM,OAAO,CAAC;AAC1D,OAA4B,EAAC,wBAAwB,EAAC,MAAM,uBAAuB,CAAC;AAYpF,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,wBAAwB,EACtB,aAAa,GACb,YAAY,GACZ,OAAO,GACP,WAAW,GACX,YAAY,GACZ,UAAU,GACV,oBAAoB,GACpB,YAAY,GACZ,YAAY,CACf,GAAG;IACF;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAoF7C,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -1,12 +1,9 @@
1
1
  import useTranslation_default from "../../../hooks/useTranslation.js";
2
- import useGetUsers_default from "../../../hooks/management/users/useGetUsers.js";
3
- import useGetAgents_default from "../../../hooks/management/agents/useGetAgents.js";
4
- import useGetRoleAssignments_default from "../../../hooks/management/roles/useGetRoleAssignments.js";
5
- import useAddRoleAssignments_default from "../../../hooks/management/roles/useAddRoleAssignments.js";
6
- import useRemoveRoleAssignments_default from "../../../hooks/management/roles/useRemoveRoleAssignments.js";
7
- import useGetGroups_default from "../../../hooks/management/groups/useGetGroups.js";
2
+ import useManagementEndpoint_default from "../../../hooks/management/useManagementEndpoint.js";
3
+ import useResourceQuery_default from "../../../hooks/management/useResourceQuery.js";
4
+ import useResourceMutation_default from "../../../hooks/management/useResourceMutation.js";
8
5
  import BaseRoleAssignments_default from "./BaseRoleAssignments.js";
9
- import { resolveManagedIdentityName, toManagementErrorMessage } from "@thunderid/browser";
6
+ import { AgentQueryKeys, GroupQueryKeys, RoleQueryKeys, UserQueryKeys, addRoleAssignments, getAgents, getGroups, getRoleAssignments, getUsers, removeRoleAssignments, resolveManagedIdentityName, toManagementErrorMessage } from "@thunderid/browser";
10
7
  import { useMemo, useState } from "react";
11
8
  import { jsx } from "react/jsx-runtime";
12
9
 
@@ -23,15 +20,52 @@ import { jsx } from "react/jsx-runtime";
23
20
  const RoleAssignments = ({ editable = false, filterable = true, preferences, roleId,...rest }) => {
24
21
  const { t } = useTranslation_default(preferences?.i18n);
25
22
  const [typeFilter, setTypeFilter] = useState(null);
26
- const assignments = useGetRoleAssignments_default(roleId, {
23
+ const rolesEndpoint = useManagementEndpoint_default("roles");
24
+ const usersEndpoint = useManagementEndpoint_default("users");
25
+ const groupsEndpoint = useManagementEndpoint_default("groups");
26
+ const agentsEndpoint = useManagementEndpoint_default("agents");
27
+ const type = typeFilter ?? void 0;
28
+ const assignments = useResourceQuery_default([
29
+ RoleQueryKeys.ROLE_ASSIGNMENTS,
30
+ roleId,
31
+ {
32
+ limit: 100,
33
+ type
34
+ }
35
+ ], (fetcher) => getRoleAssignments({
36
+ ...rolesEndpoint,
37
+ fetcher,
27
38
  limit: 100,
28
- type: typeFilter ?? void 0
29
- });
30
- const users = useGetUsers_default({ limit: 100 }, { enabled: editable });
31
- const groups = useGetGroups_default({ limit: 100 }, { enabled: editable });
32
- const agents = useGetAgents_default({ limit: 100 }, { enabled: editable });
33
- const assign = useAddRoleAssignments_default();
34
- const unassign = useRemoveRoleAssignments_default();
39
+ roleId,
40
+ type
41
+ }), { enabled: Boolean(roleId) });
42
+ const users = useResourceQuery_default([UserQueryKeys.USERS, { limit: 100 }], (fetcher) => getUsers({
43
+ ...usersEndpoint,
44
+ fetcher,
45
+ limit: 100
46
+ }), { enabled: editable });
47
+ const groups = useResourceQuery_default([GroupQueryKeys.GROUPS, { limit: 100 }], (fetcher) => getGroups({
48
+ ...groupsEndpoint,
49
+ fetcher,
50
+ limit: 100
51
+ }), { enabled: editable });
52
+ const agents = useResourceQuery_default([AgentQueryKeys.AGENTS, { limit: 100 }], (fetcher) => getAgents({
53
+ ...agentsEndpoint,
54
+ fetcher,
55
+ limit: 100
56
+ }), { enabled: editable });
57
+ const assign = useResourceMutation_default(({ assignments: changes, roleId: id }, fetcher) => addRoleAssignments({
58
+ ...rolesEndpoint,
59
+ assignments: changes,
60
+ fetcher,
61
+ roleId: id
62
+ }), () => [[RoleQueryKeys.ROLE_ASSIGNMENTS]]);
63
+ const unassign = useResourceMutation_default(({ assignments: changes, roleId: id }, fetcher) => removeRoleAssignments({
64
+ ...rolesEndpoint,
65
+ assignments: changes,
66
+ fetcher,
67
+ roleId: id
68
+ }), () => [[RoleQueryKeys.ROLE_ASSIGNMENTS]]);
35
69
  const candidates = useMemo(() => ({
36
70
  agent: (agents.data?.agents ?? []).map((agent) => ({
37
71
  id: agent.id,
@@ -1 +1 @@
1
- {"version":3,"file":"RoleAssignments.js","names":["RoleAssignments: FC<RoleAssignmentsProps>","useTranslation","useGetRoleAssignments","useGetUsers","useGetGroups","useGetAgents","useAddRoleAssignments","useRemoveRoleAssignments","candidates: Partial<Record<'user' | 'group' | 'agent', IdentityCandidate[]>>","BaseRoleAssignments"],"sources":["../../../../src/components/admin/RoleAssignments/RoleAssignments.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n resolveManagedIdentityName,\n toManagementErrorMessage,\n BasicAgent,\n Group,\n ManagedUser,\n RoleAssigneeType,\n RoleAssignment,\n RoleAssignmentInput,\n} from '@thunderid/browser';\nimport {FC, ReactElement, useMemo, useState} from 'react';\nimport BaseRoleAssignments, {BaseRoleAssignmentsProps} from './BaseRoleAssignments';\nimport useGetAgents from '../../../hooks/management/agents/useGetAgents';\nimport useGetGroups from '../../../hooks/management/groups/useGetGroups';\nimport useAddRoleAssignments from '../../../hooks/management/roles/useAddRoleAssignments';\nimport useGetRoleAssignments from '../../../hooks/management/roles/useGetRoleAssignments';\nimport useRemoveRoleAssignments from '../../../hooks/management/roles/useRemoveRoleAssignments';\nimport useGetUsers from '../../../hooks/management/users/useGetUsers';\nimport useTranslation from '../../../hooks/useTranslation';\nimport {IdentityCandidate} from '../shared/IdentityPicker';\n\nexport type RoleAssignmentsProps = Omit<\n BaseRoleAssignmentsProps,\n | 'assignments'\n | 'candidates'\n | 'error'\n | 'isLoading'\n | 'isMutating'\n | 'onAssign'\n | 'onTypeFilterChange'\n | 'onUnassign'\n | 'typeFilter'\n> & {\n /**\n * Whether assignments can be added and removed from this view.\n * @default false\n */\n editable?: boolean;\n /**\n * Whether to show the assignee type filter, which narrows the list on the server.\n * @default true\n */\n filterable?: boolean;\n roleId: string;\n};\n\n/**\n * Lists who holds a role, and lets the signed-in user assign it to users, groups and agents or\n * remove it from them.\n *\n * @example\n * ```tsx\n * <RoleAssignments roleId={roleId} />\n * ```\n */\nconst RoleAssignments: FC<RoleAssignmentsProps> = ({\n editable = false,\n filterable = true,\n preferences,\n roleId,\n ...rest\n}: RoleAssignmentsProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const [typeFilter, setTypeFilter] = useState<RoleAssigneeType | null>(null);\n const assignments = useGetRoleAssignments(roleId, {limit: 100, type: typeFilter ?? undefined});\n const users = useGetUsers({limit: 100}, {enabled: editable});\n const groups = useGetGroups({limit: 100}, {enabled: editable});\n const agents = useGetAgents({limit: 100}, {enabled: editable});\n const assign = useAddRoleAssignments();\n const unassign = useRemoveRoleAssignments();\n\n const candidates: Partial<Record<'user' | 'group' | 'agent', IdentityCandidate[]>> = useMemo(\n () => ({\n agent: (agents.data?.agents ?? []).map((agent: BasicAgent) => ({id: agent.id, label: agent.name})),\n group: (groups.data?.groups ?? []).map((group: Group) => ({id: group.id, label: group.name})),\n user: (users.data?.users ?? []).map((user: ManagedUser) => ({\n id: user.id,\n label: resolveManagedIdentityName(user),\n })),\n }),\n [agents.data, groups.data, users.data],\n );\n\n return (\n <BaseRoleAssignments\n assignments={assignments.data?.assignments ?? []}\n isLoading={assignments.isLoading}\n isMutating={assign.isLoading || unassign.isLoading}\n error={\n toManagementErrorMessage(t, assignments.error, 'admin.roles.assignments.error') ??\n toManagementErrorMessage(t, assign.error ?? unassign.error, 'admin.roles.assignments.update_error')\n }\n candidates={editable ? candidates : undefined}\n onAssign={\n editable\n ? (assignment: RoleAssignmentInput): void => void assign.mutate({assignments: [assignment], roleId})\n : undefined\n }\n onUnassign={\n editable\n ? (assignment: RoleAssignment): void =>\n void unassign.mutate({assignments: [{id: assignment.id, type: assignment.type}], roleId})\n : undefined\n }\n typeFilter={typeFilter}\n onTypeFilterChange={filterable ? setTypeFilter : undefined}\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default RoleAssignments;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA0DA,MAAMA,mBAA6C,EACjD,WAAW,OACX,aAAa,MACb,aACA,OACA,GAAG,WACqC;CACxC,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAM,CAAC,YAAY,iBAAiB,SAAkC,KAAK;CAC3E,MAAM,cAAcC,8BAAsB,QAAQ;EAAC,OAAO;EAAK,MAAM,cAAc;EAAU,CAAC;CAC9F,MAAM,QAAQC,oBAAY,EAAC,OAAO,KAAI,EAAE,EAAC,SAAS,UAAS,CAAC;CAC5D,MAAM,SAASC,qBAAa,EAAC,OAAO,KAAI,EAAE,EAAC,SAAS,UAAS,CAAC;CAC9D,MAAM,SAASC,qBAAa,EAAC,OAAO,KAAI,EAAE,EAAC,SAAS,UAAS,CAAC;CAC9D,MAAM,SAASC,+BAAuB;CACtC,MAAM,WAAWC,kCAA0B;CAE3C,MAAMC,aAA+E,eAC5E;EACL,QAAQ,OAAO,MAAM,UAAU,EAAE,EAAE,KAAK,WAAuB;GAAC,IAAI,MAAM;GAAI,OAAO,MAAM;GAAK,EAAE;EAClG,QAAQ,OAAO,MAAM,UAAU,EAAE,EAAE,KAAK,WAAkB;GAAC,IAAI,MAAM;GAAI,OAAO,MAAM;GAAK,EAAE;EAC7F,OAAO,MAAM,MAAM,SAAS,EAAE,EAAE,KAAK,UAAuB;GAC1D,IAAI,KAAK;GACT,OAAO,2BAA2B,KAAK;GACxC,EAAE;EACJ,GACD;EAAC,OAAO;EAAM,OAAO;EAAM,MAAM;EAAK,CACvC;AAED,QACE,oBAACC;EACC,aAAa,YAAY,MAAM,eAAe,EAAE;EAChD,WAAW,YAAY;EACvB,YAAY,OAAO,aAAa,SAAS;EACzC,OACE,yBAAyB,GAAG,YAAY,OAAO,gCAAgC,IAC/E,yBAAyB,GAAG,OAAO,SAAS,SAAS,OAAO,uCAAuC;EAErG,YAAY,WAAW,aAAa;EACpC,UACE,YACK,eAA0C,KAAK,OAAO,OAAO;GAAC,aAAa,CAAC,WAAW;GAAE;GAAO,CAAC,GAClG;EAEN,YACE,YACK,eACC,KAAK,SAAS,OAAO;GAAC,aAAa,CAAC;IAAC,IAAI,WAAW;IAAI,MAAM,WAAW;IAAK,CAAC;GAAE;GAAO,CAAC,GAC3F;EAEM;EACZ,oBAAoB,aAAa,gBAAgB;EACpC;EACb,GAAI;GACJ;;AAIN,8BAAe"}
1
+ {"version":3,"file":"RoleAssignments.js","names":["RoleAssignments: FC<RoleAssignmentsProps>","useTranslation","rolesEndpoint: ManagementEndpoint","useManagementEndpoint","usersEndpoint: ManagementEndpoint","groupsEndpoint: ManagementEndpoint","agentsEndpoint: ManagementEndpoint","type: RoleAssigneeType | undefined","assignments: ResourceQueryResult<RoleAssignmentListResponse>","useResourceQuery","users: ResourceQueryResult<ManagedUserListResponse>","groups: ResourceQueryResult<GroupListResponse>","agents: ResourceQueryResult<AgentListResponse>","assign: ResourceMutationResult<void, RoleAssignmentsVariables>","useResourceMutation","unassign: ResourceMutationResult<void, RoleAssignmentsVariables>","candidates: Partial<Record<'user' | 'group' | 'agent', IdentityCandidate[]>>","BaseRoleAssignments"],"sources":["../../../../src/components/admin/RoleAssignments/RoleAssignments.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n AgentListResponse,\n AgentQueryKeys,\n BasicAgent,\n Group,\n GroupListResponse,\n GroupQueryKeys,\n ManagedUser,\n ManagedUserListResponse,\n RoleAssigneeType,\n RoleAssignment,\n RoleAssignmentInput,\n RoleAssignmentListResponse,\n RoleQueryKeys,\n UserQueryKeys,\n addRoleAssignments,\n getAgents,\n getGroups,\n getRoleAssignments,\n getUsers,\n removeRoleAssignments,\n resolveManagedIdentityName,\n toManagementErrorMessage,\n} from '@thunderid/browser';\nimport {FC, ReactElement, useMemo, useState} from 'react';\nimport BaseRoleAssignments, {BaseRoleAssignmentsProps} from './BaseRoleAssignments';\nimport useManagementEndpoint, {ManagementEndpoint} from '../../../hooks/management/useManagementEndpoint';\nimport useResourceMutation, {ResourceMutationResult} from '../../../hooks/management/useResourceMutation';\nimport useResourceQuery, {ResourceQueryResult} from '../../../hooks/management/useResourceQuery';\nimport useTranslation from '../../../hooks/useTranslation';\nimport {IdentityCandidate} from '../shared/IdentityPicker';\n\ninterface RoleAssignmentsVariables {\n assignments: RoleAssignmentInput[];\n roleId: string;\n}\n\nexport type RoleAssignmentsProps = Omit<\n BaseRoleAssignmentsProps,\n | 'assignments'\n | 'candidates'\n | 'error'\n | 'isLoading'\n | 'isMutating'\n | 'onAssign'\n | 'onTypeFilterChange'\n | 'onUnassign'\n | 'typeFilter'\n> & {\n /**\n * Whether assignments can be added and removed from this view.\n * @default false\n */\n editable?: boolean;\n /**\n * Whether to show the assignee type filter, which narrows the list on the server.\n * @default true\n */\n filterable?: boolean;\n roleId: string;\n};\n\n/**\n * Lists who holds a role, and lets the signed-in user assign it to users, groups and agents or\n * remove it from them.\n *\n * @example\n * ```tsx\n * <RoleAssignments roleId={roleId} />\n * ```\n */\nconst RoleAssignments: FC<RoleAssignmentsProps> = ({\n editable = false,\n filterable = true,\n preferences,\n roleId,\n ...rest\n}: RoleAssignmentsProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const [typeFilter, setTypeFilter] = useState<RoleAssigneeType | null>(null);\n const rolesEndpoint: ManagementEndpoint = useManagementEndpoint('roles');\n const usersEndpoint: ManagementEndpoint = useManagementEndpoint('users');\n const groupsEndpoint: ManagementEndpoint = useManagementEndpoint('groups');\n const agentsEndpoint: ManagementEndpoint = useManagementEndpoint('agents');\n const type: RoleAssigneeType | undefined = typeFilter ?? undefined;\n const assignments: ResourceQueryResult<RoleAssignmentListResponse> = useResourceQuery(\n [RoleQueryKeys.ROLE_ASSIGNMENTS, roleId, {limit: 100, type}],\n (fetcher) => getRoleAssignments({...rolesEndpoint, fetcher, limit: 100, roleId, type}),\n {enabled: Boolean(roleId)},\n );\n const users: ResourceQueryResult<ManagedUserListResponse> = useResourceQuery(\n [UserQueryKeys.USERS, {limit: 100}],\n (fetcher) => getUsers({...usersEndpoint, fetcher, limit: 100}),\n {enabled: editable},\n );\n const groups: ResourceQueryResult<GroupListResponse> = useResourceQuery(\n [GroupQueryKeys.GROUPS, {limit: 100}],\n (fetcher) => getGroups({...groupsEndpoint, fetcher, limit: 100}),\n {enabled: editable},\n );\n const agents: ResourceQueryResult<AgentListResponse> = useResourceQuery(\n [AgentQueryKeys.AGENTS, {limit: 100}],\n (fetcher) => getAgents({...agentsEndpoint, fetcher, limit: 100}),\n {enabled: editable},\n );\n const assign: ResourceMutationResult<void, RoleAssignmentsVariables> = useResourceMutation(\n ({assignments: changes, roleId: id}: RoleAssignmentsVariables, fetcher) =>\n addRoleAssignments({...rolesEndpoint, assignments: changes, fetcher, roleId: id}),\n () => [[RoleQueryKeys.ROLE_ASSIGNMENTS]],\n );\n const unassign: ResourceMutationResult<void, RoleAssignmentsVariables> = useResourceMutation(\n ({assignments: changes, roleId: id}: RoleAssignmentsVariables, fetcher) =>\n removeRoleAssignments({...rolesEndpoint, assignments: changes, fetcher, roleId: id}),\n () => [[RoleQueryKeys.ROLE_ASSIGNMENTS]],\n );\n\n const candidates: Partial<Record<'user' | 'group' | 'agent', IdentityCandidate[]>> = useMemo(\n () => ({\n agent: (agents.data?.agents ?? []).map((agent: BasicAgent) => ({id: agent.id, label: agent.name})),\n group: (groups.data?.groups ?? []).map((group: Group) => ({id: group.id, label: group.name})),\n user: (users.data?.users ?? []).map((user: ManagedUser) => ({\n id: user.id,\n label: resolveManagedIdentityName(user),\n })),\n }),\n [agents.data, groups.data, users.data],\n );\n\n return (\n <BaseRoleAssignments\n assignments={assignments.data?.assignments ?? []}\n isLoading={assignments.isLoading}\n isMutating={assign.isLoading || unassign.isLoading}\n error={\n toManagementErrorMessage(t, assignments.error, 'admin.roles.assignments.error') ??\n toManagementErrorMessage(t, assign.error ?? unassign.error, 'admin.roles.assignments.update_error')\n }\n candidates={editable ? candidates : undefined}\n onAssign={\n editable\n ? (assignment: RoleAssignmentInput): void => void assign.mutate({assignments: [assignment], roleId})\n : undefined\n }\n onUnassign={\n editable\n ? (assignment: RoleAssignment): void =>\n void unassign.mutate({assignments: [{id: assignment.id, type: assignment.type}], roleId})\n : undefined\n }\n typeFilter={typeFilter}\n onTypeFilterChange={filterable ? setTypeFilter : undefined}\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default RoleAssignments;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA0EA,MAAMA,mBAA6C,EACjD,WAAW,OACX,aAAa,MACb,aACA,OACA,GAAG,WACqC;CACxC,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAM,CAAC,YAAY,iBAAiB,SAAkC,KAAK;CAC3E,MAAMC,gBAAoCC,8BAAsB,QAAQ;CACxE,MAAMC,gBAAoCD,8BAAsB,QAAQ;CACxE,MAAME,iBAAqCF,8BAAsB,SAAS;CAC1E,MAAMG,iBAAqCH,8BAAsB,SAAS;CAC1E,MAAMI,OAAqC,cAAc;CACzD,MAAMC,cAA+DC,yBACnE;EAAC,cAAc;EAAkB;EAAQ;GAAC,OAAO;GAAK;GAAK;EAAC,GAC3D,YAAY,mBAAmB;EAAC,GAAG;EAAe;EAAS,OAAO;EAAK;EAAQ;EAAK,CAAC,EACtF,EAAC,SAAS,QAAQ,OAAO,EAAC,CAC3B;CACD,MAAMC,QAAsDD,yBAC1D,CAAC,cAAc,OAAO,EAAC,OAAO,KAAI,CAAC,GAClC,YAAY,SAAS;EAAC,GAAG;EAAe;EAAS,OAAO;EAAI,CAAC,EAC9D,EAAC,SAAS,UAAS,CACpB;CACD,MAAME,SAAiDF,yBACrD,CAAC,eAAe,QAAQ,EAAC,OAAO,KAAI,CAAC,GACpC,YAAY,UAAU;EAAC,GAAG;EAAgB;EAAS,OAAO;EAAI,CAAC,EAChE,EAAC,SAAS,UAAS,CACpB;CACD,MAAMG,SAAiDH,yBACrD,CAAC,eAAe,QAAQ,EAAC,OAAO,KAAI,CAAC,GACpC,YAAY,UAAU;EAAC,GAAG;EAAgB;EAAS,OAAO;EAAI,CAAC,EAChE,EAAC,SAAS,UAAS,CACpB;CACD,MAAMI,SAAiEC,6BACpE,EAAC,aAAa,SAAS,QAAQ,MAA+B,YAC7D,mBAAmB;EAAC,GAAG;EAAe,aAAa;EAAS;EAAS,QAAQ;EAAG,CAAC,QAC7E,CAAC,CAAC,cAAc,iBAAiB,CAAC,CACzC;CACD,MAAMC,WAAmED,6BACtE,EAAC,aAAa,SAAS,QAAQ,MAA+B,YAC7D,sBAAsB;EAAC,GAAG;EAAe,aAAa;EAAS;EAAS,QAAQ;EAAG,CAAC,QAChF,CAAC,CAAC,cAAc,iBAAiB,CAAC,CACzC;CAED,MAAME,aAA+E,eAC5E;EACL,QAAQ,OAAO,MAAM,UAAU,EAAE,EAAE,KAAK,WAAuB;GAAC,IAAI,MAAM;GAAI,OAAO,MAAM;GAAK,EAAE;EAClG,QAAQ,OAAO,MAAM,UAAU,EAAE,EAAE,KAAK,WAAkB;GAAC,IAAI,MAAM;GAAI,OAAO,MAAM;GAAK,EAAE;EAC7F,OAAO,MAAM,MAAM,SAAS,EAAE,EAAE,KAAK,UAAuB;GAC1D,IAAI,KAAK;GACT,OAAO,2BAA2B,KAAK;GACxC,EAAE;EACJ,GACD;EAAC,OAAO;EAAM,OAAO;EAAM,MAAM;EAAK,CACvC;AAED,QACE,oBAACC;EACC,aAAa,YAAY,MAAM,eAAe,EAAE;EAChD,WAAW,YAAY;EACvB,YAAY,OAAO,aAAa,SAAS;EACzC,OACE,yBAAyB,GAAG,YAAY,OAAO,gCAAgC,IAC/E,yBAAyB,GAAG,OAAO,SAAS,SAAS,OAAO,uCAAuC;EAErG,YAAY,WAAW,aAAa;EACpC,UACE,YACK,eAA0C,KAAK,OAAO,OAAO;GAAC,aAAa,CAAC,WAAW;GAAE;GAAO,CAAC,GAClG;EAEN,YACE,YACK,eACC,KAAK,SAAS,OAAO;GAAC,aAAa,CAAC;IAAC,IAAI,WAAW;IAAI,MAAM,WAAW;IAAK,CAAC;GAAE;GAAO,CAAC,GAC3F;EAEM;EACZ,oBAAoB,aAAa,gBAAgB;EACpC;EACb,GAAI;GACJ;;AAIN,8BAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"RoleCreate.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/RoleCreate/RoleCreate.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA2B,IAAI,EAAC,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAC,EAAE,EAAe,MAAM,OAAO,CAAC;AACvC,OAAuB,EAAC,mBAAmB,EAAuB,MAAM,kBAAkB,CAAC;AAK3F,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE,OAAO,GAAG,cAAc,GAAG,UAAU,CAAC,GAAG;IAC/F;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACjC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAsBnC,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"RoleCreate.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/RoleCreate/RoleCreate.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAoB,IAAI,EAAsD,MAAM,oBAAoB,CAAC;AAChH,OAAO,EAAC,EAAE,EAAe,MAAM,OAAO,CAAC;AACvC,OAAuB,EAAC,mBAAmB,EAAuB,MAAM,kBAAkB,CAAC;AAM3F,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE,OAAO,GAAG,cAAc,GAAG,UAAU,CAAC,GAAG;IAC/F;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACjC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CA2BnC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import useTranslation_default from "../../../hooks/useTranslation.js";
2
- import useCreateRole_default from "../../../hooks/management/roles/useCreateRole.js";
2
+ import useManagementEndpoint_default from "../../../hooks/management/useManagementEndpoint.js";
3
+ import useResourceMutation_default from "../../../hooks/management/useResourceMutation.js";
3
4
  import useDefaultOuId_default from "../shared/useDefaultOuId.js";
4
5
  import BaseRoleCreate_default from "./BaseRoleCreate.js";
5
- import { toManagementErrorMessage } from "@thunderid/browser";
6
+ import { RoleQueryKeys, createRole, toManagementErrorMessage } from "@thunderid/browser";
6
7
  import { jsx } from "react/jsx-runtime";
7
8
 
8
9
  //#region src/components/admin/RoleCreate/RoleCreate.tsx
@@ -17,7 +18,12 @@ import { jsx } from "react/jsx-runtime";
17
18
  const RoleCreate = ({ onCreated, ouId, preferences,...rest }) => {
18
19
  const { t } = useTranslation_default(preferences?.i18n);
19
20
  const resolvedOuId = useDefaultOuId_default(ouId);
20
- const { error, isLoading, mutate } = useCreateRole_default({ onSuccess: onCreated });
21
+ const endpoint = useManagementEndpoint_default("roles");
22
+ const { error, isLoading, mutate } = useResourceMutation_default((payload, fetcher) => createRole({
23
+ ...endpoint,
24
+ fetcher,
25
+ payload
26
+ }), () => [[RoleQueryKeys.ROLES], [RoleQueryKeys.ROLE_ASSIGNMENTS]], { onSuccess: onCreated });
21
27
  const handleSubmit = ({ description, name }) => {
22
28
  if (resolvedOuId) mutate({
23
29
  description,
@@ -1 +1 @@
1
- {"version":3,"file":"RoleCreate.js","names":["RoleCreate: FC<RoleCreateProps>","useTranslation","resolvedOuId: string | undefined","useDefaultOuId","useCreateRole","BaseRoleCreate"],"sources":["../../../../src/components/admin/RoleCreate/RoleCreate.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {toManagementErrorMessage, Role} from '@thunderid/browser';\nimport {FC, ReactElement} from 'react';\nimport BaseRoleCreate, {BaseRoleCreateProps, RoleCreateSubmission} from './BaseRoleCreate';\nimport useCreateRole from '../../../hooks/management/roles/useCreateRole';\nimport useTranslation from '../../../hooks/useTranslation';\nimport useDefaultOuId from '../shared/useDefaultOuId';\n\nexport type RoleCreateProps = Omit<BaseRoleCreateProps, 'error' | 'isSubmitting' | 'onSubmit'> & {\n /**\n * Called with the created role.\n */\n onCreated?: (role: Role) => void;\n /**\n * Organization unit the role is created in. Defaults to the signed-in user's organization unit.\n */\n ouId?: string;\n};\n\n/**\n * Creates a role through the management API.\n *\n * @example\n * ```tsx\n * <RoleCreate onCreated={(role) => navigate(`/roles/${role.id}`)} />\n * ```\n */\nconst RoleCreate: FC<RoleCreateProps> = ({onCreated, ouId, preferences, ...rest}: RoleCreateProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const resolvedOuId: string | undefined = useDefaultOuId(ouId);\n const {error, isLoading, mutate} = useCreateRole({onSuccess: onCreated});\n\n const handleSubmit = ({description, name}: RoleCreateSubmission): void => {\n if (resolvedOuId) {\n void mutate({description, name, ouId: resolvedOuId});\n }\n };\n\n return (\n <BaseRoleCreate\n onSubmit={handleSubmit}\n isSubmitting={isLoading}\n error={\n resolvedOuId ? toManagementErrorMessage(t, error, 'admin.roles.create.error') : t('admin.common.errors.no_ou')\n }\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default RoleCreate;\n"],"mappings":";;;;;;;;;;;;;;;;AA6BA,MAAMA,cAAmC,EAAC,WAAW,MAAM,YAAa,GAAG,WAAyC;CAClH,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAMC,eAAmCC,uBAAe,KAAK;CAC7D,MAAM,EAAC,OAAO,WAAW,WAAUC,sBAAc,EAAC,WAAW,WAAU,CAAC;CAExE,MAAM,gBAAgB,EAAC,aAAa,WAAsC;AACxE,MAAI,aACF,CAAK,OAAO;GAAC;GAAa;GAAM,MAAM;GAAa,CAAC;;AAIxD,QACE,oBAACC;EACC,UAAU;EACV,cAAc;EACd,OACE,eAAe,yBAAyB,GAAG,OAAO,2BAA2B,GAAG,EAAE,4BAA4B;EAEnG;EACb,GAAI;GACJ;;AAIN,yBAAe"}
1
+ {"version":3,"file":"RoleCreate.js","names":["RoleCreate: FC<RoleCreateProps>","useTranslation","resolvedOuId: string | undefined","useDefaultOuId","endpoint: ManagementEndpoint","useManagementEndpoint","useResourceMutation","BaseRoleCreate"],"sources":["../../../../src/components/admin/RoleCreate/RoleCreate.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {CreateRoleRequest, Role, RoleQueryKeys, createRole, toManagementErrorMessage} from '@thunderid/browser';\nimport {FC, ReactElement} from 'react';\nimport BaseRoleCreate, {BaseRoleCreateProps, RoleCreateSubmission} from './BaseRoleCreate';\nimport useManagementEndpoint, {ManagementEndpoint} from '../../../hooks/management/useManagementEndpoint';\nimport useResourceMutation, {ResourceMutationResult} from '../../../hooks/management/useResourceMutation';\nimport useTranslation from '../../../hooks/useTranslation';\nimport useDefaultOuId from '../shared/useDefaultOuId';\n\nexport type RoleCreateProps = Omit<BaseRoleCreateProps, 'error' | 'isSubmitting' | 'onSubmit'> & {\n /**\n * Called with the created role.\n */\n onCreated?: (role: Role) => void;\n /**\n * Organization unit the role is created in. Defaults to the signed-in user's organization unit.\n */\n ouId?: string;\n};\n\n/**\n * Creates a role through the management API.\n *\n * @example\n * ```tsx\n * <RoleCreate onCreated={(role) => navigate(`/roles/${role.id}`)} />\n * ```\n */\nconst RoleCreate: FC<RoleCreateProps> = ({onCreated, ouId, preferences, ...rest}: RoleCreateProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const resolvedOuId: string | undefined = useDefaultOuId(ouId);\n const endpoint: ManagementEndpoint = useManagementEndpoint('roles');\n const {error, isLoading, mutate}: ResourceMutationResult<Role, CreateRoleRequest> = useResourceMutation(\n (payload: CreateRoleRequest, fetcher) => createRole({...endpoint, fetcher, payload}),\n () => [[RoleQueryKeys.ROLES], [RoleQueryKeys.ROLE_ASSIGNMENTS]],\n {onSuccess: onCreated},\n );\n\n const handleSubmit = ({description, name}: RoleCreateSubmission): void => {\n if (resolvedOuId) {\n void mutate({description, name, ouId: resolvedOuId});\n }\n };\n\n return (\n <BaseRoleCreate\n onSubmit={handleSubmit}\n isSubmitting={isLoading}\n error={\n resolvedOuId ? toManagementErrorMessage(t, error, 'admin.roles.create.error') : t('admin.common.errors.no_ou')\n }\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default RoleCreate;\n"],"mappings":";;;;;;;;;;;;;;;;;AA8BA,MAAMA,cAAmC,EAAC,WAAW,MAAM,YAAa,GAAG,WAAyC;CAClH,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAMC,eAAmCC,uBAAe,KAAK;CAC7D,MAAMC,WAA+BC,8BAAsB,QAAQ;CACnE,MAAM,EAAC,OAAO,WAAW,WAA2DC,6BACjF,SAA4B,YAAY,WAAW;EAAC,GAAG;EAAU;EAAS;EAAQ,CAAC,QAC9E,CAAC,CAAC,cAAc,MAAM,EAAE,CAAC,cAAc,iBAAiB,CAAC,EAC/D,EAAC,WAAW,WAAU,CACvB;CAED,MAAM,gBAAgB,EAAC,aAAa,WAAsC;AACxE,MAAI,aACF,CAAK,OAAO;GAAC;GAAa;GAAM,MAAM;GAAa,CAAC;;AAIxD,QACE,oBAACC;EACC,UAAU;EACV,cAAc;EACd,OACE,eAAe,yBAAyB,GAAG,OAAO,2BAA2B,GAAG,EAAE,4BAA4B;EAEnG;EACb,GAAI;GACJ;;AAIN,yBAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"RoleList.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/RoleList/RoleList.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAC,EAAE,EAAyB,MAAM,OAAO,CAAC;AACjD,OAAqB,EAAC,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;AAI/D,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,iBAAiB,EACjB,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,GAAG,OAAO,GAAG,cAAc,CAC7E,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CAkB/B,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"RoleList.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/RoleList/RoleList.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAC,EAAE,EAAyB,MAAM,OAAO,CAAC;AACjD,OAAqB,EAAC,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;AAK/D,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,iBAAiB,EACjB,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,GAAG,OAAO,GAAG,cAAc,CAC7E,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CAsB/B,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import useTranslation_default from "../../../hooks/useTranslation.js";
2
- import useGetRoles_default from "../../../hooks/management/roles/useGetRoles.js";
2
+ import useManagementEndpoint_default from "../../../hooks/management/useManagementEndpoint.js";
3
+ import useResourceQuery_default from "../../../hooks/management/useResourceQuery.js";
3
4
  import BaseRoleList_default from "./BaseRoleList.js";
4
- import { toManagementErrorMessage } from "@thunderid/browser";
5
+ import { RoleQueryKeys, getRoles, toManagementErrorMessage } from "@thunderid/browser";
5
6
  import { useState } from "react";
6
7
  import { jsx } from "react/jsx-runtime";
7
8
 
@@ -17,10 +18,16 @@ import { jsx } from "react/jsx-runtime";
17
18
  const RoleList = ({ limit = 20, preferences,...rest }) => {
18
19
  const { t } = useTranslation_default(preferences?.i18n);
19
20
  const [offset, setOffset] = useState(0);
20
- const { data, error, isLoading } = useGetRoles_default({
21
+ const endpoint = useManagementEndpoint_default("roles");
22
+ const { data, error, isLoading } = useResourceQuery_default([RoleQueryKeys.ROLES, {
21
23
  limit,
22
24
  offset
23
- });
25
+ }], (fetcher) => getRoles({
26
+ ...endpoint,
27
+ fetcher,
28
+ limit,
29
+ offset
30
+ }));
24
31
  return /* @__PURE__ */ jsx(BaseRoleList_default, {
25
32
  roles: data?.roles ?? [],
26
33
  totalResults: data?.totalResults,
@@ -1 +1 @@
1
- {"version":3,"file":"RoleList.js","names":["RoleList: FC<RoleListProps>","useTranslation","useGetRoles","BaseRoleList"],"sources":["../../../../src/components/admin/RoleList/RoleList.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {toManagementErrorMessage} from '@thunderid/browser';\nimport {FC, ReactElement, useState} from 'react';\nimport BaseRoleList, {BaseRoleListProps} from './BaseRoleList';\nimport useGetRoles from '../../../hooks/management/roles/useGetRoles';\nimport useTranslation from '../../../hooks/useTranslation';\n\nexport type RoleListProps = Omit<\n BaseRoleListProps,\n 'error' | 'isLoading' | 'offset' | 'onPageChange' | 'roles' | 'totalResults'\n>;\n\n/**\n * Lists the roles the signed-in user is allowed to see, a page at a time.\n *\n * @example\n * ```tsx\n * <RoleList onSelect={(role) => setSelectedRoleId(role.id)} />\n * ```\n */\nconst RoleList: FC<RoleListProps> = ({limit = 20, preferences, ...rest}: RoleListProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const [offset, setOffset] = useState<number>(0);\n const {data, error, isLoading} = useGetRoles({limit, offset});\n\n return (\n <BaseRoleList\n roles={data?.roles ?? []}\n totalResults={data?.totalResults}\n isLoading={isLoading}\n error={toManagementErrorMessage(t, error, 'admin.roles.list.error')}\n limit={limit}\n offset={offset}\n onPageChange={setOffset}\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default RoleList;\n"],"mappings":";;;;;;;;;;;;;;;;AAsBA,MAAMA,YAA+B,EAAC,QAAQ,IAAI,YAAa,GAAG,WAAuC;CACvG,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAM,CAAC,QAAQ,aAAa,SAAiB,EAAE;CAC/C,MAAM,EAAC,MAAM,OAAO,cAAaC,oBAAY;EAAC;EAAO;EAAO,CAAC;AAE7D,QACE,oBAACC;EACC,OAAO,MAAM,SAAS,EAAE;EACxB,cAAc,MAAM;EACT;EACX,OAAO,yBAAyB,GAAG,OAAO,yBAAyB;EAC5D;EACC;EACR,cAAc;EACD;EACb,GAAI;GACJ;;AAIN,uBAAe"}
1
+ {"version":3,"file":"RoleList.js","names":["RoleList: FC<RoleListProps>","useTranslation","endpoint: ManagementEndpoint","useManagementEndpoint","useResourceQuery","BaseRoleList"],"sources":["../../../../src/components/admin/RoleList/RoleList.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {RoleListResponse, RoleQueryKeys, getRoles, toManagementErrorMessage} from '@thunderid/browser';\nimport {FC, ReactElement, useState} from 'react';\nimport BaseRoleList, {BaseRoleListProps} from './BaseRoleList';\nimport useManagementEndpoint, {ManagementEndpoint} from '../../../hooks/management/useManagementEndpoint';\nimport useResourceQuery, {ResourceQueryResult} from '../../../hooks/management/useResourceQuery';\nimport useTranslation from '../../../hooks/useTranslation';\n\nexport type RoleListProps = Omit<\n BaseRoleListProps,\n 'error' | 'isLoading' | 'offset' | 'onPageChange' | 'roles' | 'totalResults'\n>;\n\n/**\n * Lists the roles the signed-in user is allowed to see, a page at a time.\n *\n * @example\n * ```tsx\n * <RoleList onSelect={(role) => setSelectedRoleId(role.id)} />\n * ```\n */\nconst RoleList: FC<RoleListProps> = ({limit = 20, preferences, ...rest}: RoleListProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const [offset, setOffset] = useState<number>(0);\n const endpoint: ManagementEndpoint = useManagementEndpoint('roles');\n const {data, error, isLoading}: ResourceQueryResult<RoleListResponse> = useResourceQuery(\n [RoleQueryKeys.ROLES, {limit, offset}],\n (fetcher) => getRoles({...endpoint, fetcher, limit, offset}),\n );\n\n return (\n <BaseRoleList\n roles={data?.roles ?? []}\n totalResults={data?.totalResults}\n isLoading={isLoading}\n error={toManagementErrorMessage(t, error, 'admin.roles.list.error')}\n limit={limit}\n offset={offset}\n onPageChange={setOffset}\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default RoleList;\n"],"mappings":";;;;;;;;;;;;;;;;;AAuBA,MAAMA,YAA+B,EAAC,QAAQ,IAAI,YAAa,GAAG,WAAuC;CACvG,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAM,CAAC,QAAQ,aAAa,SAAiB,EAAE;CAC/C,MAAMC,WAA+BC,8BAAsB,QAAQ;CACnE,MAAM,EAAC,MAAM,OAAO,cAAoDC,yBACtE,CAAC,cAAc,OAAO;EAAC;EAAO;EAAO,CAAC,GACrC,YAAY,SAAS;EAAC,GAAG;EAAU;EAAS;EAAO;EAAO,CAAC,CAC7D;AAED,QACE,oBAACC;EACC,OAAO,MAAM,SAAS,EAAE;EACxB,cAAc,MAAM;EACT;EACX,OAAO,yBAAyB,GAAG,OAAO,yBAAyB;EAC5D;EACC;EACR,cAAc;EACD;EACb,GAAI;GACJ;;AAIN,uBAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"RolePermissions.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/RolePermissions/RolePermissions.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAC,EAAE,EAAe,MAAM,OAAO,CAAC;AACvC,OAA4B,EAAC,wBAAwB,EAAC,MAAM,uBAAuB,CAAC;AAIpF,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,wBAAwB,EAAE,OAAO,GAAG,WAAW,GAAG,aAAa,CAAC,GAAG;IACzG,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAiB7C,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"RolePermissions.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/RolePermissions/RolePermissions.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAC,EAAE,EAAe,MAAM,OAAO,CAAC;AACvC,OAA4B,EAAC,wBAAwB,EAAC,MAAM,uBAAuB,CAAC;AAKpF,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,wBAAwB,EAAE,OAAO,GAAG,WAAW,GAAG,aAAa,CAAC,GAAG;IACzG,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAsB7C,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import useTranslation_default from "../../../hooks/useTranslation.js";
2
- import useGetRole_default from "../../../hooks/management/roles/useGetRole.js";
2
+ import useManagementEndpoint_default from "../../../hooks/management/useManagementEndpoint.js";
3
+ import useResourceQuery_default from "../../../hooks/management/useResourceQuery.js";
3
4
  import BaseRolePermissions_default from "./BaseRolePermissions.js";
4
- import { toManagementErrorMessage } from "@thunderid/browser";
5
+ import { RoleQueryKeys, getRole, toManagementErrorMessage } from "@thunderid/browser";
5
6
  import { jsx } from "react/jsx-runtime";
6
7
 
7
8
  //#region src/components/admin/RolePermissions/RolePermissions.tsx
@@ -15,7 +16,12 @@ import { jsx } from "react/jsx-runtime";
15
16
  */
16
17
  const RolePermissions = ({ preferences, roleId,...rest }) => {
17
18
  const { t } = useTranslation_default(preferences?.i18n);
18
- const role = useGetRole_default(roleId);
19
+ const endpoint = useManagementEndpoint_default("roles");
20
+ const role = useResourceQuery_default([RoleQueryKeys.ROLE, roleId], (fetcher) => getRole({
21
+ ...endpoint,
22
+ fetcher,
23
+ roleId
24
+ }), { enabled: Boolean(roleId) });
19
25
  return /* @__PURE__ */ jsx(BaseRolePermissions_default, {
20
26
  permissions: role.data?.permissions ?? [],
21
27
  isLoading: role.isLoading,