1- import type { Interpolation , Theme } from "@emotion/react" ;
21import PersonAdd from "@mui/icons-material/PersonAdd" ;
32import LoadingButton from "@mui/lab/LoadingButton" ;
4- import Table from "@mui/material/Table" ;
5- import TableBody from "@mui/material/TableBody" ;
6- import TableCell from "@mui/material/TableCell" ;
7- import TableContainer from "@mui/material/TableContainer" ;
8- import TableHead from "@mui/material/TableHead" ;
9- import TableRow from "@mui/material/TableRow" ;
103import { getErrorMessage } from "api/errors" ;
11- import type { GroupsByUserId } from "api/queries/groups" ;
124import type {
135Group ,
146OrganizationMemberWithUserData ,
@@ -28,6 +20,13 @@ import {
2820} from "components/MoreMenu/MoreMenu" ;
2921import { SettingsHeader } from "components/SettingsHeader/SettingsHeader" ;
3022import { Stack } from "components/Stack/Stack" ;
23+ import {
24+ Table ,
25+ TableBody ,
26+ TableCell ,
27+ TableHeader ,
28+ TableRow ,
29+ } from "components/Table/Table" ;
3130import { UserAutocomplete } from "components/UserAutocomplete/UserAutocomplete" ;
3231import { UserGroupsCell } from "pages/UsersPage/UsersTable/UserGroupsCell" ;
3332import { type FC , useState } from "react" ;
@@ -80,83 +79,80 @@ export const OrganizationMembersPageView: FC<
8079onSubmit = { addMember }
8180/>
8281) }
83-
84- < TableContainer >
85- < Table >
86- < TableHead >
87- < TableRow >
88- < TableCell width = "33%" > User</ TableCell >
89- < TableCell width = "33%" >
90- < Stack direction = "row" spacing = { 1 } alignItems = "center" >
91- < span > Roles</ span >
92- < TableColumnHelpTooltip variant = "roles" />
93- </ Stack >
82+ < Table >
83+ < TableHeader >
84+ < TableRow >
85+ < TableCell width = "33%" > User</ TableCell >
86+ < TableCell width = "33%" >
87+ < Stack direction = "row" spacing = { 1 } alignItems = "center" >
88+ < span > Roles</ span >
89+ < TableColumnHelpTooltip variant = "roles" />
90+ </ Stack >
91+ </ TableCell >
92+ < TableCell width = "33%" >
93+ < Stack direction = "row" spacing = { 1 } alignItems = "center" >
94+ < span > Groups</ span >
95+ < TableColumnHelpTooltip variant = "groups" />
96+ </ Stack >
97+ </ TableCell >
98+ < TableCell width = "1%" />
99+ </ TableRow >
100+ </ TableHeader >
101+ < TableBody >
102+ { members ?. map ( ( member ) => (
103+ < TableRow key = { member . user_id } className = "align-baseline" >
104+ < TableCell >
105+ < AvatarData
106+ avatar = {
107+ < Avatar
108+ fallback = { member . username }
109+ src = { member . avatar_url }
110+ />
111+ }
112+ title = { member . name || member . username }
113+ subtitle = { member . email }
114+ />
94115</ TableCell >
95- < TableCell width = "33%" >
96- < Stack direction = "row" spacing = { 1 } alignItems = "center" >
97- < span > Groups</ span >
98- < TableColumnHelpTooltip variant = "groups" />
99- </ Stack >
116+ < UserRoleCell
117+ inheritedRoles = { member . global_roles }
118+ roles = { member . roles }
119+ allAvailableRoles = { allAvailableRoles }
120+ oidcRoleSyncEnabled = { false }
121+ isLoading = { isUpdatingMemberRoles }
122+ canEditUsers = { canEditMembers }
123+ onEditRoles = { async ( roles ) => {
124+ try {
125+ await updateMemberRoles ( member , roles ) ;
126+ displaySuccess ( "Roles updated successfully." ) ;
127+ } catch ( error ) {
128+ displayError (
129+ getErrorMessage ( error , "Failed to update roles." ) ,
130+ ) ;
131+ }
132+ } }
133+ />
134+ < UserGroupsCell userGroups = { member . groups } />
135+ < TableCell >
136+ { member . user_id !== me . id && canEditMembers && (
137+ < MoreMenu >
138+ < MoreMenuTrigger >
139+ < ThreeDotsButton />
140+ </ MoreMenuTrigger >
141+ < MoreMenuContent >
142+ < MoreMenuItem
143+ danger
144+ onClick = { ( ) => removeMember ( member ) }
145+ >
146+ Remove
147+ </ MoreMenuItem >
148+ </ MoreMenuContent >
149+ </ MoreMenu >
150+ ) }
100151</ TableCell >
101- < TableCell width = "1%" />
102152</ TableRow >
103- </ TableHead >
104- < TableBody >
105- { members ?. map ( ( member ) => (
106- < TableRow key = { member . user_id } >
107- < TableCell >
108- < AvatarData
109- avatar = {
110- < Avatar
111- fallback = { member . username }
112- src = { member . avatar_url }
113- />
114- }
115- title = { member . name || member . username }
116- subtitle = { member . email }
117- />
118- </ TableCell >
119- < UserRoleCell
120- inheritedRoles = { member . global_roles }
121- roles = { member . roles }
122- allAvailableRoles = { allAvailableRoles }
123- oidcRoleSyncEnabled = { false }
124- isLoading = { isUpdatingMemberRoles }
125- canEditUsers = { canEditMembers }
126- onEditRoles = { async ( roles ) => {
127- try {
128- await updateMemberRoles ( member , roles ) ;
129- displaySuccess ( "Roles updated successfully." ) ;
130- } catch ( error ) {
131- displayError (
132- getErrorMessage ( error , "Failed to update roles." ) ,
133- ) ;
134- }
135- } }
136- />
137- < UserGroupsCell userGroups = { member . groups } />
138- < TableCell >
139- { member . user_id !== me . id && canEditMembers && (
140- < MoreMenu >
141- < MoreMenuTrigger >
142- < ThreeDotsButton />
143- </ MoreMenuTrigger >
144- < MoreMenuContent >
145- < MoreMenuItem
146- danger
147- onClick = { ( ) => removeMember ( member ) }
148- >
149- Remove
150- </ MoreMenuItem >
151- </ MoreMenuContent >
152- </ MoreMenu >
153- ) }
154- </ TableCell >
155- </ TableRow >
156- ) ) }
157- </ TableBody >
158- </ Table >
159- </ TableContainer >
153+ ) ) }
154+ </ TableBody >
155+ </ Table >
160156</ Stack >
161157</ div >
162158) ;
@@ -190,7 +186,7 @@ const AddOrganizationMember: FC<AddOrganizationMemberProps> = ({
190186>
191187< Stack direction = "row" alignItems = "center" spacing = { 1 } >
192188< UserAutocomplete
193- css = { styles . autoComplete }
189+ className = "w-[300px]"
194190value = { selectedUser }
195191onChange = { ( newValue ) => {
196192setSelectedUser ( newValue ) ;
@@ -210,17 +206,3 @@ const AddOrganizationMember: FC<AddOrganizationMemberProps> = ({
210206</ form >
211207) ;
212208} ;
213-
214- const styles = {
215- role :( theme ) => ( {
216- backgroundColor :theme . roles . notice . background ,
217- borderColor :theme . roles . notice . outline ,
218- } ) ,
219- globalRole :( theme ) => ( {
220- backgroundColor :theme . roles . inactive . background ,
221- borderColor :theme . roles . inactive . outline ,
222- } ) ,
223- autoComplete :{
224- width :300 ,
225- } ,
226- } satisfies Record < string , Interpolation < Theme > > ;