import { RoomMember } from 'matrix-js-sdk'; import { useMemo } from 'react'; export const MemberSort = { Ascending: (a: RoomMember, b: RoomMember) => a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1, Descending: (a: RoomMember, b: RoomMember) => a.name.toLowerCase() > b.name.toLowerCase() ? -1 : 1, NewestFirst: (a: RoomMember, b: RoomMember) => (b.events.member?.getTs() ?? 0) - (a.events.member?.getTs() ?? 0), Oldest: (a: RoomMember, b: RoomMember) => (a.events.member?.getTs() ?? 0) - (b.events.member?.getTs() ?? 0), }; export type MemberSortFn = (a: RoomMember, b: RoomMember) => number; export type MemberSortItem = { name: string; sortFn: MemberSortFn; }; export const useMemberSortMenu = (): MemberSortItem[] => useMemo( () => [ { name: 'A to Z', sortFn: MemberSort.Ascending, }, { name: 'Z to A', sortFn: MemberSort.Descending, }, { name: 'Newest', sortFn: MemberSort.NewestFirst, }, { name: 'Oldest', sortFn: MemberSort.Oldest, }, ], [] ); export const useMemberSort = (index: number, memberSort: MemberSortItem[]): MemberSortItem => { const item = memberSort[index] ?? memberSort[0]; return item; };