From e13d97aa989fed1271a8896ec1fa2f1dd07f7038 Mon Sep 17 00:00:00 2001 From: Ajay Bura <32841439+ajbura@users.noreply.github.com> Date: Wed, 15 Oct 2025 17:27:11 +1100 Subject: [PATCH] Fix member are not sorted correctly after last js-sdk update (#2504) --- src/app/features/common-settings/members/Members.tsx | 5 +++-- src/app/features/room/MembersDrawer.tsx | 5 +++-- src/app/hooks/useMemberSort.ts | 7 +++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/app/features/common-settings/members/Members.tsx b/src/app/features/common-settings/members/Members.tsx index 9940a751..15cd1d08 100644 --- a/src/app/features/common-settings/members/Members.tsx +++ b/src/app/features/common-settings/members/Members.tsx @@ -27,7 +27,7 @@ import { Page, PageContent, PageHeader } from '../../../components/page'; import { useRoom } from '../../../hooks/useRoom'; import { useRoomMembers } from '../../../hooks/useRoomMembers'; import { useMatrixClient } from '../../../hooks/useMatrixClient'; -import { usePowerLevels } from '../../../hooks/usePowerLevels'; +import { useGetMemberPowerLevel, usePowerLevels } from '../../../hooks/usePowerLevels'; import { VirtualTile } from '../../../components/virtualizer'; import { MemberTile } from '../../../components/member-tile'; import { useMediaAuthentication } from '../../../hooks/useMediaAuthentication'; @@ -87,12 +87,13 @@ export function Members({ requestClose }: MembersProps) { const powerLevels = usePowerLevels(room); const creators = useRoomCreators(room); const getPowerTag = useGetMemberPowerTag(room, creators, powerLevels); + const getPowerLevel = useGetMemberPowerLevel(powerLevels); const [membershipFilterIndex, setMembershipFilterIndex] = useState(0); const [sortFilterIndex, setSortFilterIndex] = useSetting(settingsAtom, 'memberSortFilterIndex'); const membershipFilter = useMembershipFilter(membershipFilterIndex, useMembershipFilterMenu()); const memberSort = useMemberSort(sortFilterIndex, useMemberSortMenu()); - const memberPowerSort = useMemberPowerSort(creators); + const memberPowerSort = useMemberPowerSort(creators, getPowerLevel); const scrollRef = useRef(null); const searchInputRef = useRef(null); diff --git a/src/app/features/room/MembersDrawer.tsx b/src/app/features/room/MembersDrawer.tsx index 46d2238a..d9205076 100644 --- a/src/app/features/room/MembersDrawer.tsx +++ b/src/app/features/room/MembersDrawer.tsx @@ -51,7 +51,7 @@ import { useRoomTypingMember } from '../../hooks/useRoomTypingMembers'; import { useMediaAuthentication } from '../../hooks/useMediaAuthentication'; import { useMembershipFilter, useMembershipFilterMenu } from '../../hooks/useMemberFilter'; import { useMemberPowerSort, useMemberSort, useMemberSortMenu } from '../../hooks/useMemberSort'; -import { usePowerLevelsContext } from '../../hooks/usePowerLevels'; +import { useGetMemberPowerLevel, usePowerLevelsContext } from '../../hooks/usePowerLevels'; import { MembershipFilterMenu } from '../../components/MembershipFilterMenu'; import { MemberSortMenu } from '../../components/MemberSortMenu'; import { useOpenUserRoomProfile, useUserRoomProfileState } from '../../state/hooks/userRoomProfile'; @@ -185,6 +185,7 @@ export function MembersDrawer({ room, members }: MembersDrawerProps) { const powerLevels = usePowerLevelsContext(); const creators = useRoomCreators(room); const getPowerTag = useGetMemberPowerTag(room, creators, powerLevels); + const getPowerLevel = useGetMemberPowerLevel(powerLevels); const fetchingMembers = members.length < room.getJoinedMemberCount(); const openUserRoomProfile = useOpenUserRoomProfile(); @@ -198,7 +199,7 @@ export function MembersDrawer({ room, members }: MembersDrawerProps) { const membershipFilter = useMembershipFilter(membershipFilterIndex, membershipFilterMenu); const memberSort = useMemberSort(sortFilterIndex, sortFilterMenu); - const memberPowerSort = useMemberPowerSort(creators); + const memberPowerSort = useMemberPowerSort(creators, getPowerLevel); const typingMembers = useRoomTypingMember(room.roomId); diff --git a/src/app/hooks/useMemberSort.ts b/src/app/hooks/useMemberSort.ts index d8e403c5..48d2f605 100644 --- a/src/app/hooks/useMemberSort.ts +++ b/src/app/hooks/useMemberSort.ts @@ -47,7 +47,10 @@ export const useMemberSort = (index: number, memberSort: MemberSortItem[]): Memb return item; }; -export const useMemberPowerSort = (creators: Set): MemberSortFn => { +export const useMemberPowerSort = ( + creators: Set, + getPowerLevel: (userId: string) => number +): MemberSortFn => { const sort: MemberSortFn = useCallback( (a, b) => { if (creators.has(a.userId) && creators.has(b.userId)) { @@ -56,7 +59,7 @@ export const useMemberPowerSort = (creators: Set): MemberSortFn => { if (creators.has(a.userId)) return -1; if (creators.has(b.userId)) return 1; - return b.powerLevel - a.powerLevel; + return getPowerLevel(b.userId) - getPowerLevel(a.userId); }, [creators] );