@@ -19,6 +19,7 @@ import {
1919 DropdownMenuTrigger ,
2020} from "@/components/ui/dropdown-menu" ;
2121import { useMutation } from "@tanstack/react-query" ;
22+ import Fuse from "fuse.js" ;
2223import { EllipsisIcon } from "lucide-react" ;
2324import { useMemo , useState } from "react" ;
2425import { toast } from "sonner" ;
@@ -41,13 +42,21 @@ export function ManageMembersSection(props: {
4142 const [ role , setRole ] = useState < RoleFilterValue > ( "ALL ROLES" ) ;
4243 const [ sortBy , setSortBy ] = useState < MemberSortId > ( "date" ) ;
4344
45+ const membersIndex = useMemo ( ( ) => {
46+ return new Fuse ( props . members , {
47+ keys : [
48+ { name : "account.name" , weight : 2 } ,
49+ { name : "account.email" , weight : 1 } ,
50+ ] ,
51+ threshold : 0.3 ,
52+ } ) ;
53+ } , [ props . members ] ) ;
54+
4455 const membersToShow = useMemo ( ( ) => {
4556 let value = props . members ;
4657
4758 if ( searchTerm ) {
48- value = value . filter ( ( m ) =>
49- m . account . name . toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) ,
50- ) ;
59+ value = membersIndex . search ( searchTerm ) . map ( ( result ) => result . item ) ;
5160 }
5261
5362 value = value . filter ( ( m ) => ! deletedMembersIds . includes ( m . accountId ) ) ;
@@ -76,7 +85,14 @@ export function ManageMembersSection(props: {
7685 }
7786
7887 return value ;
79- } , [ role , props . members , sortBy , deletedMembersIds , searchTerm ] ) ;
88+ } , [
89+ role ,
90+ props . members ,
91+ sortBy ,
92+ deletedMembersIds ,
93+ searchTerm ,
94+ membersIndex ,
95+ ] ) ;
8096
8197 if ( ! props . userHasEditPermission ) {
8298 topSection = (
0 commit comments