Skip to content

Commit e2b08df

Browse files
committed
Handle failure from user service due to duplicate email/username during registration
Added redirection from register to login page
1 parent e93c35e commit e2b08df

File tree

4 files changed

+63
-7
lines changed

4 files changed

+63
-7
lines changed

apps/frontend/src/app/login/page.tsx

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,29 +30,46 @@ import Link from "next/link";
3030
import TextArea from "antd/es/input/TextArea";
3131
import {loginUser} from '@/app/services/user'
3232
import {setToken} from '@/app/services/login-store'
33+
import { useRouter } from "next/navigation";
3334

3435
type InputFields = {
3536
email?: string
3637
password?: string
3738
}
3839

3940
export default function Home() {
41+
42+
const [isLoginFailed, setIsLoginFailed] = useState(false);
43+
const router = useRouter();
44+
const [messageApi, contextHolder] = message.useMessage();
45+
46+
const successMessage = (message: string) => {
47+
messageApi.open({
48+
type: "success",
49+
content: message,
50+
});
51+
};
52+
4053
function submitDetails({email, password}: InputFields): void {
4154
if (!email || email === "" ||
4255
!password || password === ""
4356
) {
4457
return;
4558
}
4659
loginUser(email, password).then(jwt => {
47-
console.log("login successful");
60+
successMessage("Login successful")
4861
setToken(jwt);
62+
router.push("/");
63+
4964
}).catch(err => {
5065
console.error(err);
66+
setIsLoginFailed(true);
5167
})
5268
}
5369

5470
return (
55-
<div>
71+
<>
72+
{contextHolder}
5673
<Layout>
5774
<Header/>
5875
<Content>
@@ -86,6 +103,11 @@ export default function Home() {
86103
/>
87104
</Form.Item>
88105

106+
<div
107+
style={{visibility: isLoginFailed ? "visible" : "hidden"}}
108+
className="registration-failed-text">This email/username is not valid
109+
</div>
110+
89111
<Form.Item>
90112
<Button type="primary" htmlType="submit">
91113
Login
@@ -100,6 +122,6 @@ export default function Home() {
100122
</div>
101123
</Content>
102124
</Layout>
103-
</div>
125+
</>
104126
);
105127
}

apps/frontend/src/app/login/styles.scss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@
2727
border-radius: 15px;
2828
}
2929

30+
.registration-failed-text {
31+
color: #f02849;
32+
font-size: 13px;
33+
}
34+
3035
.content-row-1 {
3136
display: flex;
3237
flex-direction: row;

apps/frontend/src/app/register/page.tsx

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import { useEffect, useState } from "react";
2929
import Link from "next/link";
3030
import TextArea from "antd/es/input/TextArea";
3131
import { createUser } from '@/app/services/user'
32+
import { useRouter } from "next/navigation";
3233

3334
type InputFields = {
3435
username?: string
@@ -38,19 +39,37 @@ type InputFields = {
3839
}
3940

4041
export default function Home() {
42+
43+
const [isRegistrationFailed, setIsRegistrationFailed] = useState(false);
44+
const router = useRouter();
45+
const [messageApi, contextHolder] = message.useMessage();
46+
47+
const successMessage = (message: string) => {
48+
messageApi.open({
49+
type: "success",
50+
content: message,
51+
});
52+
};
53+
4154
function submitDetails({username, email, password}: InputFields): void {
4255
if (!username || username === "" ||
4356
!email || email === "" ||
4457
!password || password === ""
4558
) {
4659
return;
4760
}
48-
createUser(username, email, password).catch(err => {
49-
console.error(err)
61+
createUser(username, email, password)
62+
.then(() => {
63+
successMessage("Account successfully created")
64+
router.push("/login");
65+
}).catch(err => {
66+
console.log(err);
67+
setIsRegistrationFailed(true);
5068
})
5169
}
5270
return (
53-
<div>
71+
<>
72+
{contextHolder}
5473
<Layout>
5574
<Header/>
5675
<Content>
@@ -120,6 +139,11 @@ export default function Home() {
120139
/>
121140
</Form.Item>
122141

142+
<div
143+
style={{visibility: isRegistrationFailed ? "visible" : "hidden"}}
144+
className="registration-failed-text">A user with the same email/username already exists
145+
</div>
146+
123147
<Form.Item>
124148
<Button type="primary" htmlType="submit">
125149
Register
@@ -134,6 +158,6 @@ export default function Home() {
134158
</div>
135159
</Content>
136160
</Layout>
137-
</div>
161+
</>
138162
);
139163
}

apps/frontend/src/app/register/styles.scss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@
2727
border-radius: 15px;
2828
}
2929

30+
.registration-failed-text {
31+
color: #f02849;
32+
font-size: 13px;
33+
}
34+
3035
.content-row-1 {
3136
display: flex;
3237
flex-direction: row;

0 commit comments

Comments
 (0)