Skip to content

Commit 2ce1fbf

Browse files
authored
Merge pull request #60 from call-0f-code/ui-fixes
UI fixes
2 parents be2c146 + fddb403 commit 2ce1fbf

2 files changed

Lines changed: 53 additions & 25 deletions

File tree

frontend/src/components/ProfilePage/SocialLink.jsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@ import { Award, Code2, Github, Linkedin, Twitter } from "lucide-react";
22

33
export const SocialLinks = ({ user, isEditing, onChange }) => {
44
const platforms = [
5-
{ key: "github", icon: Github, label: "GitHub", placeholder: "github.com/username" },
6-
{ key: "linkedin", icon: Linkedin, label: "LinkedIn", placeholder: "linkedin.com/in/username" },
7-
{ key: "twitter", icon: Twitter, label: "Twitter", placeholder: "twitter.com/username" },
5+
{ key: "github", icon: Github, label: "GitHub", placeholder: "https://github.com/username" },
6+
{ key: "linkedin", icon: Linkedin, label: "LinkedIn", placeholder: "https://linkedin.com/in/username" },
7+
{ key: "twitter", icon: Twitter, label: "Twitter", placeholder: "https://twitter.com/username" },
88
];
99

1010
const codingPlatforms = [
11-
{ key: "leetcode", icon: Code2, label: "LeetCode", placeholder: "leetcode.com/username" },
12-
{ key: "geeksforgeeks", icon: Code2, label: "GeeksforGeeks", placeholder: "geeksforgeeks.org/user/username" },
13-
{ key: "codechef", icon: Award, label: "CodeChef", placeholder: "codechef.com/users/username" },
14-
{ key: "codeforces", icon: Code2, label: "Codeforces", placeholder: "codeforces.com/profile/username" },
11+
{ key: "leetcode", icon: Code2, label: "LeetCode", placeholder: "https://leetcode.com/username" },
12+
{ key: "geeksforgeeks", icon: Code2, label: "GeeksforGeeks", placeholder: "https://geeksforgeeks.org/user/username" },
13+
{ key: "codechef", icon: Award, label: "CodeChef", placeholder: "https://codechef.com/users/username" },
14+
{ key: "codeforces", icon: Code2, label: "Codeforces", placeholder: "https://codeforces.com/profile/username" },
1515
];
1616

1717
const renderPlatformInput = (platform) => (

frontend/src/components/auth/SignupForm.jsx

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
import { useState } from "react";
3-
import { Eye, EyeOff, User, Mail, Lock, GraduationCap, ArrowRight } from "lucide-react";
3+
import { Eye, EyeOff, User, Mail, Lock, GraduationCap, ArrowRight, ChevronDown } from "lucide-react";
44
import { useMembers } from "@/hooks/useMember";
55
import { globalToast } from "@/utils/toast";
66
import { useNavigate } from "react-router-dom";
@@ -17,6 +17,15 @@ const SignupForm = ({ setIsLogin }) => {
1717
const [isLoading, setIsLoading] = useState(false);
1818
const { createNewMember } = useMembers();
1919
const navigate = useNavigate();
20+
const [isOpen, setIsOpen] = useState(false);
21+
22+
const currentYear = new Date().getFullYear();
23+
const years = Array.from({ length: 9 }, (_, i) => currentYear - 4 + i);
24+
25+
const handleYearSelect = (year) => {
26+
setFormData({ ...formData, passoutYear: year.toString() });
27+
setIsOpen(false);
28+
};
2029

2130
const passwordsMatch = formData.password === confirmPassword;
2231

@@ -149,28 +158,47 @@ const SignupForm = ({ setIsLogin }) => {
149158
</div>
150159
</div>
151160

152-
<div className="space-y-2">
161+
<div className="w-full max-w-md space-y-2">
153162
<label className="text-xs font-bold tracking-wider text-[#2C1810] dark:text-[#F5E6D3]">
154163
PASSOUT YEAR
155164
</label>
156165
<div className="relative">
157166
<GraduationCap className="pointer-events-none absolute left-3 top-1/2 h-5 w-5 -translate-y-1/2 text-[#C1502E] z-10" />
158-
<input
159-
type="number"
160-
placeholder="eg. 2027"
161-
value={formData.passoutYear}
162-
onChange={(e) => {
163-
const year = parseInt(e.target.value);
164-
const currentYear = new Date().getFullYear();
165-
if (year >= currentYear - 4 && year <= currentYear + 4) {
166-
setFormData({ ...formData, passoutYear: e.target.value });
167-
}
168-
}}
169-
min={new Date().getFullYear() - 4}
170-
max={new Date().getFullYear() + 4}
171-
className="h-12 w-full border-4 border-[#2C1810] dark:border-[#F5E6D3] bg-[#F5E6D3] dark:bg-[#2C1810] pl-12 pr-4 text-sm text-[#2C1810] dark:text-[#F5E6D3] placeholder:text-[#2C1810]/40 dark:placeholder:text-[#F5E6D3]/40 focus:outline-none focus:ring-0 focus:translate-x-1 focus:translate-y-1 transition-transform"
172-
required
173-
/>
167+
<button
168+
type="button"
169+
onClick={() => setIsOpen(!isOpen)}
170+
className="h-12 w-full border-4 border-[#2C1810] dark:border-[#F5E6D3] bg-[#F5E6D3] dark:bg-[#2C1810] pl-12 pr-10 text-sm text-[#2C1810] dark:text-[#F5E6D3] text-left focus:outline-none focus:ring-0 focus:translate-x-1 focus:translate-y-1 transition-transform relative"
171+
>
172+
<span className={formData.passoutYear ? '' : 'text-[#2C1810]/40 dark:text-[#F5E6D3]/40'}>
173+
{formData.passoutYear || 'eg. 2027'}
174+
</span>
175+
<ChevronDown className={`absolute right-3 top-1/2 h-5 w-5 -translate-y-1/2 text-[#C1502E] transition-transform ${isOpen ? 'rotate-180' : ''}`} />
176+
</button>
177+
178+
{isOpen && (
179+
<>
180+
<div
181+
className="fixed inset-0 z-20"
182+
onClick={() => setIsOpen(false)}
183+
/>
184+
<div className="absolute z-30 mt-2 w-full border-4 border-[#2C1810] dark:border-[#F5E6D3] bg-[#F5E6D3] dark:bg-[#2C1810] max-h-60 overflow-y-auto">
185+
{years.map((year) => (
186+
<button
187+
key={year}
188+
type="button"
189+
onClick={() => handleYearSelect(year)}
190+
className={`w-full px-4 py-3 text-left text-sm hover:bg-[#C1502E]/10 transition-colors ${
191+
formData.passoutYear === year.toString()
192+
? 'bg-[#C1502E]/20 text-[#C1502E] font-bold'
193+
: 'text-[#2C1810] dark:text-[#F5E6D3]'
194+
}`}
195+
>
196+
{year}
197+
</button>
198+
))}
199+
</div>
200+
</>
201+
)}
174202
</div>
175203
</div>
176204

0 commit comments

Comments
 (0)