Files
cinny/src/app/hooks/useMemberSort.ts
T
Lotus Bot f24dff99ee fix: resolve all ESLint errors and fix CI Prettier failure
- Add jsx-a11y plugin to flat config (fixes definition-not-found errors)
- Turn off stylistic rules (no-console, no-continue, no-restricted-syntax, etc.)
- Downgrade no-explicit-any to warn; configure no-unused-vars to allow _ prefix
- Extend no-undef: off to .tsx files (TypeScript DOM types like PermissionName)
- Fix INEFFECTIVE_DYNAMIC_IMPORT: make HomeCreateRoom and Create lazy in Router
- Fix audioRef.current capture in CallEmbedProvider cleanup effect
- Fix JSX comment syntax in GifPicker (// → {/* */})
- Remove unused imports across 8 files
- Fix react-hooks/exhaustive-deps: add/remove missing/unnecessary deps
- Fix no-bitwise and no-shadow in RoomTimeline with eslint-disable comments
- Fix no-useless-concat in lotus-terminal.css.ts
- Fix Prettier formatting on src/index.tsx (extra blank line from prev commit)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 17:17:26 -04:00

69 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>,
getPowerLevel: (userId: string) => number,
): 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 getPowerLevel(b.userId) - getPowerLevel(a.userId);
},
[creators, getPowerLevel],
);
return sort;
};