Skip to content

Commit 315b78c

Browse files
committed
feat: member search feature
Signed-off-by: Karthik Ayangar <[email protected]>
1 parent 22cc4e6 commit 315b78c

File tree

3 files changed

+67
-3
lines changed

3 files changed

+67
-3
lines changed

src/envConstants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export const CLIENT_ID = '149d2857118e05e729a8';
2-
export const BACKEND_URL = 'http://localhost:8080';
2+
export const BACKEND_URL = 'https://leaderboard-java.mdgspace.org';
33
export const AVATAR_API = 'w9zrqHdDa4MsYB';
44

55
// http://13.233.127.61:8080

src/features/ProjectAddMember /index.scss

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,36 @@ $breakpoint-tablet: 768px;
3333

3434
.single-form-element-container {
3535
display: flex;
36+
position: relative;
3637
flex-direction: column;
3738
gap: 1rem;
3839
width: 100%;
40+
.member-search-result {
41+
position: absolute;
42+
border: 2px solid #8989ce;
43+
top: 6rem;
44+
background-color: #1414325b;
45+
gap: 1rem;
46+
width: fit-content;
47+
backdrop-filter: blur(25px);
48+
display: flex;
49+
flex-direction: column;
50+
padding: 1rem 1rem;
51+
z-index: 1000;
52+
p {
53+
color: #8989ce;
54+
width: fit-content;
55+
font-size: 1.25rem;
56+
font-weight: 900;
57+
padding: 0.1rem 1rem;
58+
border-radius: 1rem;
59+
}
60+
P:hover {
61+
color: #8181ff;
62+
cursor: pointer;
63+
background-color: black;
64+
}
65+
}
3966
.label {
4067
color: #8181ff;
4168
font-size: 1.5rem;

src/features/ProjectAddMember /index.tsx

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,24 @@ const ProjectAddMember = () => {
2525

2626
const { spaceName, projectName } = useParams();
2727
const [projectMembers, setProjectMembers] = useState<string[]>([]);
28-
const [orgMembers, setOrgMembers] = useState<string[]>([]);
28+
const [orgMembers, setOrgMembers] = useState<string[]>([
29+
'kituuu',
30+
'karthik',
31+
'kartik',
32+
'kartar',
33+
]);
34+
const [searchedMembers, setSearchedMembers] = useState<string[]>([]);
35+
36+
const filterMembers = (search: string) => {
37+
let temp: string[] = [];
38+
orgMembers.forEach((member) => {
39+
if (member.includes(search)) {
40+
temp.push(member);
41+
}
42+
});
43+
44+
setSearchedMembers(temp);
45+
};
2946

3047
const dataFetch = async () => {
3148
try {
@@ -41,7 +58,7 @@ const ProjectAddMember = () => {
4158

4259
useEffect(() => {
4360
dataFetch();
44-
}, []);
61+
}, [memberName]);
4562

4663
const addMembers = () => {
4764
if (memberName) {
@@ -52,6 +69,8 @@ const ProjectAddMember = () => {
5269
) {
5370
setMembers([...members, memberName]);
5471
setMemberName(null);
72+
} else if (projectMembers.includes(memberName)) {
73+
toast.error('Member already exists in the project');
5574
}
5675
}
5776
};
@@ -108,13 +127,31 @@ const ProjectAddMember = () => {
108127
value={memberName ? memberName : ''}
109128
onChange={(e: ChangeEvent<HTMLInputElement>) => {
110129
setMemberName(e.target.value);
130+
if (memberName) filterMembers(memberName);
111131
}}
112132
placeholder='Github ID of user'
113133
/>
114134
<button onClick={addMembers} className='add-member-button'>
115135
{'+ Add'}
116136
</button>
117137
</div>
138+
{memberName && searchedMembers.length > 0 && (
139+
<div className='add-member-container member-search-result'>
140+
{searchedMembers.map((member, index) => {
141+
return (
142+
<p
143+
onClick={() => {
144+
setMemberName(member);
145+
setSearchedMembers([]);
146+
}}
147+
key={index}
148+
>
149+
{member}
150+
</p>
151+
);
152+
})}
153+
</div>
154+
)}
118155
</div>
119156
<div className='added-members'>
120157
{members.map((member, index) => {

0 commit comments

Comments
 (0)