@@ -46,16 +46,28 @@ function getRoleIconSrc(role: Role) {
4646function RolesAndUsersPermissionsComponent ( { permissions, guild, modalProps, header } : { permissions : Array < RoleOrUserPermission > ; guild : Guild ; modalProps : ModalProps ; header : string ; } ) {
4747 const guildPermissionSpecMap = useMemo ( ( ) => getGuildPermissionSpecMap ( guild ) , [ guild . id ] ) ;
4848
49- useStateFromStores (
49+ const memberIds = useStateFromStores (
5050 [ GuildMemberStore ] ,
5151 ( ) => GuildMemberStore . getMemberIds ( guild . id ) ,
5252 null ,
5353 ( old , current ) => old . length === current . length
5454 ) ;
5555
56- useEffect ( ( ) => {
57- permissions . sort ( ( a , b ) => a . type - b . type ) ;
58- } , [ permissions ] ) ;
56+ const sortedPermissions = useMemo ( ( ) => {
57+ const roles = GuildRoleStore . getRolesSnapshot ( guild . id ) ;
58+ return [ ...permissions ] . sort ( ( a , b ) => {
59+ if ( a . type !== b . type ) return a . type - b . type ;
60+
61+ const nameA = a . type === PermissionOverwriteType . MEMBER
62+ ? ( UserStore . getUser ( a . id ?? "" ) != null ? getUniqueUsername ( UserStore . getUser ( a . id ?? "" ) ! ) : "" )
63+ : ( roles [ a . id ?? "" ] ?. name ?? "" ) ;
64+ const nameB = b . type === PermissionOverwriteType . MEMBER
65+ ? ( UserStore . getUser ( b . id ?? "" ) != null ? getUniqueUsername ( UserStore . getUser ( b . id ?? "" ) ! ) : "" )
66+ : ( roles [ b . id ?? "" ] ?. name ?? "" ) ;
67+
68+ return nameA . localeCompare ( nameB ) ;
69+ } ) ;
70+ } , [ permissions , memberIds ] ) ;
5971
6072 useEffect ( ( ) => {
6173 const usersToRequest = permissions
@@ -70,7 +82,7 @@ function RolesAndUsersPermissionsComponent({ permissions, guild, modalProps, hea
7082 } , [ ] ) ;
7183
7284 const [ selectedItemIndex , selectItem ] = useState ( 0 ) ;
73- const selectedItem = permissions [ selectedItemIndex ] ;
85+ const selectedItem = sortedPermissions [ selectedItemIndex ] ;
7486
7587 const roles = GuildRoleStore . getRolesSnapshot ( guild . id ) ;
7688
@@ -94,7 +106,7 @@ function RolesAndUsersPermissionsComponent({ permissions, guild, modalProps, hea
94106 { selectedItem && (
95107 < div className = { cl ( "modal-container" ) } >
96108 < ScrollerThin className = { cl ( "modal-list" ) } orientation = "auto" >
97- { permissions . map ( ( permission , index ) => {
109+ { sortedPermissions . map ( ( permission , index ) => {
98110 const user : User | undefined = UserStore . getUser ( permission . id ?? "" ) ;
99111 const role : Role | undefined = roles [ permission . id ?? "" ] ;
100112 const roleIconSrc = role != null ? getRoleIconSrc ( role ) : undefined ;
0 commit comments