Skip to content

Commit c2af47e

Browse files
committed
[TOOL-3493] Dashboard: Fix search in team members page, minor ui tweaks
1 parent 7775e7c commit c2af47e

File tree

4 files changed

+42
-14
lines changed

4 files changed

+42
-14
lines changed

apps/dashboard/src/app/team/[team_slug]/(team)/~/settings/_components/sidebar/TeamSettingsSidebar.tsx

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { Team } from "@/api/team";
2-
import { GradientAvatar } from "@/components/blocks/Avatars/GradientAvatar";
2+
import { Badge } from "@/components/ui/badge";
33
import type { Account } from "@3rdweb-sdk/react/hooks/useApi";
4+
import { UserIcon, UsersIcon } from "lucide-react";
45
import type { ThirdwebClient } from "thirdweb";
56
import { SidebarLink } from "./SidebarLink";
67
import { getTeamSettingsLinks } from "./getTeamSettingsLinks";
@@ -27,6 +28,7 @@ export function TeamSettingsSidebar(props: {
2728
src: props.team.image || "",
2829
}}
2930
client={props.client}
31+
icon={UsersIcon}
3032
/>
3133
<RenderLinkGroup
3234
links={accountGroupLinks}
@@ -37,6 +39,7 @@ export function TeamSettingsSidebar(props: {
3739
src: props.account?.image || "",
3840
}}
3941
client={props.client}
42+
icon={UserIcon}
4043
/>
4144
</aside>
4245
);
@@ -54,17 +57,17 @@ function RenderLinkGroup(props: {
5457
src: string;
5558
};
5659
client: ThirdwebClient;
60+
icon: React.FC<{ className: string }>;
5761
}) {
5862
return (
5963
<>
60-
<div className="flex items-center gap-1.5 px-4">
61-
<GradientAvatar
62-
src={props.titleAvatarIcon.src}
63-
className="size-[18px]"
64-
id={props.titleAvatarIcon.id}
65-
client={props.client}
66-
/>
67-
<p className="text-muted-foreground text-xs">{props.title}</p>
64+
<div className="px-2">
65+
<Badge
66+
variant="outline"
67+
className="bg-card font-normal text-muted-foreground"
68+
>
69+
{props.title}
70+
</Badge>
6871
</div>
6972

7073
<ul className="flex flex-col gap-0.5">

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,20 @@ export function ManageInvitesSection(props: {
3939
}) {
4040
let topSection: React.ReactNode = null;
4141

42+
const [searchTerm, setSearchTerm] = useState("");
4243
const [deletedInviteIds, setDeletedInviteIds] = useState<string[]>([]);
4344
const [role, setRole] = useState<RoleFilterValue>("ALL ROLES");
4445
const [sortBy, setSortBy] = useState<MemberSortId>("date");
4546

4647
const invitesToShow = useMemo(() => {
4748
let value = props.teamInvites;
4849

50+
if (searchTerm) {
51+
value = value.filter((inv) =>
52+
inv.email.toLowerCase().includes(searchTerm.toLowerCase()),
53+
);
54+
}
55+
4956
value = value.filter((inv) => !deletedInviteIds.includes(inv.id));
5057

5158
if (role !== "ALL ROLES") {
@@ -68,7 +75,7 @@ export function ManageInvitesSection(props: {
6875
}
6976

7077
return value;
71-
}, [role, props.teamInvites, sortBy, deletedInviteIds]);
78+
}, [role, props.teamInvites, sortBy, deletedInviteIds, searchTerm]);
7279

7380
if (!props.userHasEditPermission) {
7481
topSection = (
@@ -89,6 +96,9 @@ export function ManageInvitesSection(props: {
8996
setRole={setRole}
9097
setSortBy={setSortBy}
9198
sortBy={sortBy}
99+
searchTerm={searchTerm}
100+
setSearchTerm={setSearchTerm}
101+
searchPlaceholder="Search Email"
92102
/>
93103

94104
<div className="h-3" />

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,20 @@ export function ManageMembersSection(props: {
3636
}) {
3737
let topSection: React.ReactNode = null;
3838

39+
const [searchTerm, setSearchTerm] = useState("");
3940
const [deletedMembersIds, setDeletedMembersIds] = useState<string[]>([]);
4041
const [role, setRole] = useState<RoleFilterValue>("ALL ROLES");
4142
const [sortBy, setSortBy] = useState<MemberSortId>("date");
4243

4344
const membersToShow = useMemo(() => {
4445
let value = props.members;
4546

47+
if (searchTerm) {
48+
value = value.filter((m) =>
49+
m.account.name.toLowerCase().includes(searchTerm.toLowerCase()),
50+
);
51+
}
52+
4653
value = value.filter((m) => !deletedMembersIds.includes(m.accountId));
4754

4855
if (role !== "ALL ROLES") {
@@ -69,7 +76,7 @@ export function ManageMembersSection(props: {
6976
}
7077

7178
return value;
72-
}, [role, props.members, sortBy, deletedMembersIds]);
79+
}, [role, props.members, sortBy, deletedMembersIds, searchTerm]);
7380

7481
if (!props.userHasEditPermission) {
7582
topSection = (
@@ -90,6 +97,9 @@ export function ManageMembersSection(props: {
9097
setRole={setRole}
9198
setSortBy={setSortBy}
9299
sortBy={sortBy}
100+
searchTerm={searchTerm}
101+
setSearchTerm={setSearchTerm}
102+
searchPlaceholder="Search Team members"
93103
/>
94104

95105
<div className="h-3" />
@@ -147,7 +157,7 @@ function MemberRow(props: {
147157
<div className="flex items-center justify-between gap-3 px-4 py-4">
148158
<div className="flex items-center gap-3 lg:gap-4">
149159
<GradientAvatar
150-
className="size-6 lg:size-9"
160+
className="size-6 border lg:size-9"
151161
src={props.member.account.image || ""}
152162
id={props.member.account.creatorWalletAddress}
153163
client={props.client}

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,22 @@ export function FiltersSection(props: {
2020
setRole: (role: RoleFilterValue) => void;
2121
setSortBy: (sortBy: MemberSortId) => void;
2222
sortBy: MemberSortId;
23+
searchTerm: string;
24+
setSearchTerm: (searchTerm: string) => void;
25+
searchPlaceholder: string;
2326
}) {
24-
const { role, setRole, setSortBy, sortBy } = props;
27+
const { role, setRole, setSortBy, sortBy, searchTerm, setSearchTerm } = props;
2528
return (
2629
<div className="flex flex-col gap-3 lg:flex-row lg:items-center">
2730
{/* Search */}
2831
<div className="relative grow">
2932
<SearchIcon className="-translate-y-1/2 absolute top-1/2 left-3 size-4 transform text-muted-foreground" />
3033
<Input
31-
placeholder="Search Team members"
34+
placeholder={props.searchPlaceholder}
3235
className="bg-card pl-9"
3336
disabled={props.disabled}
37+
value={searchTerm}
38+
onChange={(e) => setSearchTerm(e.target.value)}
3439
/>
3540
</div>
3641

0 commit comments

Comments
 (0)