cinny/src/app/hooks/useMemberSort.ts
Ajay Bura f82cfead46
Some checks are pending
Deploy to Netlify (dev) / Deploy to Netlify (push) Waiting to run
Support room version 12 (#2399)
* WIP - support room version 12

* add room creators hook

* revert changes from powerlevels

* improve use room creators hook

* add hook to get dm users

* add options to add creators in create room/space

* add member item component in member drawer

* remove unused import

* extract member drawer header component

* get room creators as set only if room version support them

* add room permissions hook

* support room v12 creators power

* make predecessor event id optional

* add info about founders in permissions

* allow to create infinite powers to room creators

* allow everyone with permission to create infinite power

* handle additional creators in room upgrade

* add option to follow space tombstone
2025-08-13 00:12:30 +10:00

65 lines
1.7 KiB
TypeScript

import { RoomMember } from 'matrix-js-sdk';
import { useCallback, 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;
};
export const useMemberPowerSort = (creators: Set<string>): MemberSortFn => {
const sort: MemberSortFn = useCallback(
(a, b) => {
if (creators.has(a.userId) && creators.has(b.userId)) {
return 0;
}
if (creators.has(a.userId)) return -1;
if (creators.has(b.userId)) return 1;
return b.powerLevel - a.powerLevel;
},
[creators]
);
return sort;
};