Skip to content

Commit 2da355f

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

File tree

1 file changed

+23
-9
lines changed

1 file changed

+23
-9
lines changed

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

Lines changed: 23 additions & 9 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,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

Comments
 (0)