Skip to content

Commit 62bae92

Browse files
committed
PermissionsViewer: sort roles and users alphabetically by name
1 parent 2fbe267 commit 62bae92

1 file changed

Lines changed: 18 additions & 6 deletions

File tree

src/plugins/permissionsViewer/components/RolesAndUsersPermissions.tsx

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,28 @@ function getRoleIconSrc(role: Role) {
4646
function 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

Comments
 (0)