Skip to content

Commit 21802d6

Browse files
committed
[TOOL-4821] Improve Team members search
1 parent 913ea98 commit 21802d6

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/settings/members/ManageMembersSection.tsx

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
DropdownMenuTrigger,
2020
} from "@/components/ui/dropdown-menu";
2121
import { useMutation } from "@tanstack/react-query";
22+
import Fuse from "fuse.js";
2223
import { EllipsisIcon } from "lucide-react";
2324
import { useMemo, useState } from "react";
2425
import { 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

Comments
 (0)