Skip to content

Commit fddb403

Browse files
committed
signup page dropdown menu fix for passout year
1 parent 38c0063 commit fddb403

1 file changed

Lines changed: 46 additions & 18 deletions

File tree

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)