Skip to content
This repository was archived by the owner on Mar 26, 2026. It is now read-only.

Commit a6b6763

Browse files
author
sahana
committed
:explodes:
1 parent 90cdf56 commit a6b6763

4 files changed

Lines changed: 53 additions & 41 deletions

File tree

bun.lock

Lines changed: 20 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,21 @@
1111
},
1212
"dependencies": {
1313
"clsx": "^2.1.1",
14-
"next": "15.5.7",
14+
"next": "^16.0.10",
1515
"next-auth": "^4.24.13",
1616
"react": "19.2.0",
1717
"react-dom": "19.2.0",
1818
"react-icons": "^5.5.0",
19-
"swr": "^2.3.7"
19+
"swr": "^2.3.8"
2020
},
2121
"devDependencies": {
2222
"@eslint/eslintrc": "^3.3.3",
2323
"@tailwindcss/postcss": "^4.1.18",
2424
"@types/bun": "^1.3.4",
25-
"@types/node": "^20.19.26",
25+
"@types/node": "^20.19.27",
2626
"@types/react": "^19.2.7",
2727
"@types/react-dom": "^19.2.3",
28-
"eslint": "^9.39.1",
28+
"eslint": "^9.39.2",
2929
"eslint-config-next": "15.5.6",
3030
"tailwindcss": "^4.1.18",
3131
"typescript": "^5.9.3"

src/app/login/page.tsx

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,20 @@ type LoginResponse = {
1010

1111
export default function LoginPage() {
1212

13+
const [emailButtonAllow, setEmailButtonAllow] = useState<boolean>(true)
14+
1315
const otpOnClick = async () => {
1416

17+
setEmailButtonAllow(false)
18+
1519
const email = (document.getElementById('email') as HTMLInputElement).value
1620

1721
if (!/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(email)) {
1822
setMessage({
1923
className: "text-red-500 mb-4 text-center",
2024
message: "Please enter a valid email address."
2125
})
26+
setEmailButtonAllow(true)
2227
return;
2328
} else {
2429
setMessage({
@@ -46,6 +51,7 @@ export default function LoginPage() {
4651
message: `An error occurred. Please try again. (code ${response.status})`
4752
})
4853
}
54+
setEmailButtonAllow(true)
4955
}
5056

5157
const router = useRouter()
@@ -60,29 +66,31 @@ export default function LoginPage() {
6066
message: "Please enter a valid 6-digit OTP."
6167
})
6268
return;
63-
} else {
64-
setMessage({
65-
className: "hidden",
66-
message: ""
67-
})
6869
}
70+
setMessage({
71+
className: "hidden",
72+
message: ""
73+
})
6974

7075
const otp = parseInt(otpStr)
7176

72-
const res = await fetch(apiUrl`api/v1/auth/validate_otp`, {
77+
const response = await fetch(apiUrl`api/v1/auth/validate_otp`, {
7378
method: 'POST',
74-
headers: {
75-
'Content-Type': 'application/json',
76-
},
77-
body: JSON.stringify({ email, otp }),
79+
credentials: 'include',
80+
body: JSON.stringify({ email, otp })
7881
})
79-
80-
if (res.status === 200) {
82+
const data = await response.json()
83+
if (response.ok) {
8184
router.push('/dashboard')
82-
} else if (res.status === 401) {
85+
} else if (response.status == 401) {
8386
setMessage({
8487
className: "text-red-500 mb-4 text-center",
85-
message: "Invalid OTP. Please try again."
88+
message: "Wrong OTP. Please try again."
89+
})
90+
} else {
91+
setMessage({
92+
className: "text-red-500 mb-4 text-center",
93+
message: data["detail"] || `An error occurred. Please try again. (code ${response.status})`
8694
})
8795
}
8896
}
@@ -109,6 +117,7 @@ export default function LoginPage() {
109117
/>
110118
<button className="mt-4 px-4 py-2 bg-red-500 text-white rounded-lg hover:bg-red-600 w-full"
111119
onClick={otpOnClick}
120+
disabled={!emailButtonAllow}
112121
>
113122
Send OTP
114123
</button>
@@ -117,14 +126,14 @@ export default function LoginPage() {
117126
<input type="number"
118127
id="otp"
119128
name="otp"
120-
className={"bg-gray-100 border-gray-400 text-gray-900 text-2xl text-center rounded-lg w-full [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none [&::-moz-appearance:textfield]"}
129+
className={"bg-gray-100 border-gray-400 text-gray-900 text-2xl text-center rounded-lg w-full appearance-none [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none [&::-moz-appearance:textfield]"}
121130
placeholder="674169"
122131

123132
/>
124-
<button className="mt-4 px-4 py-2 bg-red-500 text-white rounded-lg hover:bg-red-600 w-full"
133+
<button className="mt-4 px-4 py-2 bg-green-400 text-white rounded-lg hover:bg-green-300 w-full"
125134
onClick={validateOnClick}
126135
>
127-
Send OTP
136+
Confirm
128137
</button>
129138
</div>
130139
</div>

tsconfig.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"moduleResolution": "bundler",
1616
"resolveJsonModule": true,
1717
"isolatedModules": true,
18-
"jsx": "preserve",
18+
"jsx": "react-jsx",
1919
"incremental": true,
2020
"paths": {
2121
"@/*": [
@@ -32,7 +32,8 @@
3232
"**/*.ts",
3333
"**/*.tsx",
3434
"next-env.d.ts",
35-
".next/types/**/*.ts"
35+
".next/types/**/*.ts",
36+
".next/dev/types/**/*.ts"
3637
],
3738
"exclude": [
3839
"node_modules"

0 commit comments

Comments
 (0)