@@ -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,19 +42,25 @@ export function ManageMembersSection(props: {
4142 const [ role , setRole ] = useState < RoleFilterValue > ( "ALL ROLES" ) ;
4243 const [ sortBy , setSortBy ] = useState < MemberSortId > ( "date" ) ;
4344
44- const membersToShow = useMemo ( ( ) => {
45- let value = props . members ;
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 ] ) ;
4654
47- if ( searchTerm ) {
48- value = value . filter ( ( m ) =>
49- m . account . name . toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) ,
50- ) ;
51- }
55+ const membersToShow = useMemo ( ( ) => {
56+ let value = searchTerm
57+ ? membersIndex . search ( searchTerm ) . map ( ( result ) => result . item )
58+ : props . members ;
5259
5360 value = value . filter ( ( m ) => ! deletedMembersIds . includes ( m . accountId ) ) ;
5461
5562 if ( role !== "ALL ROLES" ) {
56- value = value . filter ( ( m ) => m . role === role ) ;
63+ value = value . filter ( ( m ) => m . role === ( role as TeamAccountRole ) ) ;
5764 }
5865
5966 switch ( sortBy ) {
@@ -76,7 +83,14 @@ export function ManageMembersSection(props: {
7683 }
7784
7885 return value ;
79- } , [ role , props . members , sortBy , deletedMembersIds , searchTerm ] ) ;
86+ } , [
87+ role ,
88+ props . members ,
89+ sortBy ,
90+ deletedMembersIds ,
91+ searchTerm ,
92+ membersIndex ,
93+ ] ) ;
8094
8195 if ( ! props . userHasEditPermission ) {
8296 topSection = (
0 commit comments