1
0
Fork 0
forked from Mirrors/gomuks

web/rightpanel: fix filtering member list

This commit is contained in:
Tulir Asokan 2025-01-30 14:49:12 +02:00
parent 9fd50a6ae3
commit 717f2989a8
2 changed files with 7 additions and 5 deletions

View file

@ -34,6 +34,7 @@ export function filter(users: AutocompleteMemberEntry[], query: string): Autocom
interface filteredUserCache { interface filteredUserCache {
query: string query: string
result: AutocompleteMemberEntry[] result: AutocompleteMemberEntry[]
slicedResult?: AutocompleteMemberEntry[]
} }
export function useFilteredMembers( export function useFilteredMembers(
@ -44,15 +45,16 @@ export function useFilteredMembers(
if (!query) { if (!query) {
prev.current.query = "" prev.current.query = ""
prev.current.result = allMembers prev.current.result = allMembers
prev.current.slicedResult = slice && allMembers.length > 100 ? allMembers.slice(0, 100) : undefined
} else if (prev.current.query !== query) { } else if (prev.current.query !== query) {
prev.current.result = (sort ? filterAndSort : filter)( prev.current.result = (sort ? filterAndSort : filter)(
query.startsWith(prev.current.query) ? prev.current.result : allMembers, query.startsWith(prev.current.query) ? prev.current.result : allMembers,
query, query,
) )
if (prev.current.result.length > 100 && slice) { prev.current.slicedResult = prev.current.result.length > 100 && slice
prev.current.result = prev.current.result.slice(0, 100) ? prev.current.result.slice(0, 100)
} : undefined
prev.current.query = query prev.current.query = query
} }
return prev.current.result return prev.current.slicedResult ?? prev.current.result
} }

View file

@ -50,7 +50,7 @@ const MemberList = () => {
roomCtx.store.membersRequested = true roomCtx.store.membersRequested = true
use(ClientContext)?.loadRoomState(roomCtx.store.roomID, { omitMembers: false, refetch: false }) use(ClientContext)?.loadRoomState(roomCtx.store.roomID, { omitMembers: false, refetch: false })
} }
const memberEvents = useFilteredMembers(roomCtx?.store, filter) const memberEvents = useFilteredMembers(roomCtx?.store, filter, false, false)
if (!roomCtx) { if (!roomCtx) {
return null return null
} }