Skip to content

Commit 5d196df

Browse files
committed
Implementing Registration via App.
Loading and resizing components.
1 parent d836255 commit 5d196df

File tree

11 files changed

+95
-39
lines changed

11 files changed

+95
-39
lines changed

public/loadingPencil.png

3.53 KB
Loading
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
const ButtonSubmitDefault = ({ buttonName, type = "button", disabled = false }) => {
2+
return (
3+
<div className="">
4+
<button
5+
type={type}
6+
disabled={disabled}
7+
className={`px-4 py-2 bg-blue-500 text-white rounded ${
8+
disabled ? "opacity-50 cursor-not-allowed" : "hover:bg-blue-800"
9+
}`}
10+
>
11+
{buttonName}
12+
</button>
13+
</div>
14+
);
15+
};
16+
17+
export default ButtonSubmitDefault;
+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import React from "react";
2+
3+
const LoaderComponent = () => {
4+
return (
5+
<div className="flex flex-col items-center justify-center w-full h-full">
6+
<div className="relative w-20 h-20 flex items-center justify-center">
7+
{/* The spinning circular border */}
8+
<div className="absolute inset-0 border-4 border-gray-300 border-t-green-500 rounded-full animate-spin"></div>
9+
{/* The centered image */}
10+
<img src="/loadingPencil.png" alt="Loading" className="w-14 h-14" />
11+
</div>
12+
</div>
13+
);
14+
};
15+
16+
export default LoaderComponent;

src/components/Main/MainAlbumsComponent.jsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {useSelector} from "react-redux";
22
import useGetReview from "../../hooks/useGetReview.jsx";
33
import {useEffect, useState} from "react";
44
import ReviewCardComponent from "../review/reviewCardComponent.jsx";
5+
import LoaderComponent from "../Common/LoaderComponent.jsx";
56

67
const MainAlbumsComponent = () => {
78
const review = useSelector((state) => state.reviewAlbum.reviewAlbumData);
@@ -25,7 +26,7 @@ const MainAlbumsComponent = () => {
2526
};
2627

2728
return (
28-
<div className="w-screen min-h-screen flex justify-center mb-10">
29+
<div className="w-screen min-h-[60vh] flex justify-center mb-10">
2930
<div className="w-full lg:w-4/5 flex flex-wrap gap-3 lg:gap-5">
3031
{error && <p>{error}</p>}
3132
{review?.totalCount > 0 ? (
@@ -51,7 +52,7 @@ const MainAlbumsComponent = () => {
5152
)}
5253
</>
5354
) : (
54-
<p>Loading reviews...</p>
55+
<LoaderComponent />
5556
)}
5657
</div>
5758
</div>

src/components/Main/MainArtistsComponent.jsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { useEffect, useState } from "react";
22
import ReviewCardComponent from "../review/reviewCardComponent.jsx";
33
import { useSelector } from "react-redux";
44
import useGetReview from "../../hooks/useGetReview.jsx";
5+
import LoaderComponent from "../Common/LoaderComponent.jsx";
56

67
const MainArtistsComponent = () => {
78
const review = useSelector((state) => state.reviewArtist.reviewArtistData);
@@ -25,7 +26,7 @@ const MainArtistsComponent = () => {
2526
};
2627

2728
return (
28-
<div className="w-screen min-h-screen flex justify-center mb-10">
29+
<div className="w-screen min-h-[60vh] flex justify-center mb-10">
2930
<div className="w-full lg:w-4/5 flex flex-wrap gap-3 lg:gap-5">
3031
{error && <p>{error}</p>}
3132
{review?.totalCount > 0 ? (
@@ -51,7 +52,7 @@ const MainArtistsComponent = () => {
5152
)}
5253
</>
5354
) : (
54-
<p>Loading reviews...</p>
55+
<LoaderComponent />
5556
)}
5657
</div>
5758
</div>

src/components/Main/MainTracksComponent.jsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {useSelector} from "react-redux";
22
import useGetReview from "../../hooks/useGetReview.jsx";
33
import {useEffect, useState} from "react";
44
import ReviewCardComponent from "../review/reviewCardComponent.jsx";
5+
import LoaderComponent from "../Common/LoaderComponent.jsx";
56

67
const MainTracksComponent = () => {
78
const review = useSelector((state) => state.reviewTrack.reviewTrackData);
@@ -25,7 +26,7 @@ const MainTracksComponent = () => {
2526
};
2627

2728
return (
28-
<div className="w-screen min-h-screen flex justify-center mb-10">
29+
<div className="w-screen min-h-[60vh] flex justify-center mb-10">
2930
<div className="w-full lg:w-4/5 flex flex-wrap gap-3 lg:gap-5">
3031
{error && <p>{error}</p>}
3132
{review?.totalCount > 0 ? (
@@ -51,7 +52,7 @@ const MainTracksComponent = () => {
5152
)}
5253
</>
5354
) : (
54-
<p>Loading reviews...</p>
55+
<LoaderComponent />
5556
)}
5657
</div>
5758
</div>

src/index.css

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@
1010
.navlink-style a:hover {
1111
color: rgb(96 165 250);
1212
text-shadow: 2px 1px #fdfdfd;
13-
}
13+
}
14+

src/routes/_baseLayout/index.jsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const _BaseLayout = () => {
88
const [activeComponent, setActiveComponent] = useState('artists');
99

1010
return (
11-
<div className="flex flex-col min-h-screen w-screen">
11+
<div className="flex flex-col h-screen w-screen">
1212

1313
{/*Mobile Top Navbar*/}
1414
<div className="w-full bg-white md:hidden order-1 h-12">
@@ -21,7 +21,7 @@ const _BaseLayout = () => {
2121
</div>
2222

2323
{/* Main Content Area */}
24-
<div className="flex-grow w-full min-h-80vh order-2 pb-16 md:pb-0">
24+
<div className="flex-grow w-full h-60vh order-2 pb-16 md:pb-0">
2525
<Outlet context={[activeComponent]}/>
2626
</div>
2727

src/routes/login/index.jsx

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { useEffect, useState } from "react";
2-
import { Button } from "react-bootstrap";
32
import { NavLink, useLocation, useNavigate } from "react-router-dom";
43
import useAuth from "../../hooks/useAuth.jsx";
54
import { toast, ToastContainer } from "react-toastify";
5+
import ButtonSubmitDefault from "../../components/Buttons/ButtonSubmitDefault.jsx";
66

77
const Login = () => {
88
const [email, setEmail] = useState('');
@@ -40,10 +40,10 @@ const Login = () => {
4040
};
4141

4242
return (
43-
<div className="flex flex-col justify-start pt-6 items-center min-h-80vh bg-gray-100">
43+
<div className="flex flex-col justify-start pt-6 items-center min-h-[60vh]">
4444
<ToastContainer />
4545

46-
<div className="max-w-lg w-full p-6 bg-base-100 rounded-lg shadow-lg">
46+
<div className="max-w-lg w-[95vw] p-6 bg-gray-300 rounded-lg shadow-lg">
4747
<h4 className="text-start text-sm mt-1 mb-4">
4848
<span>Don't have an account yet? </span>
4949
<span className="navlink-style font-semibold">
@@ -89,11 +89,11 @@ const Login = () => {
8989
</div>
9090
<div className="text-center">
9191
{authError && <p className="text-error text-sm mt-2">{authError}</p>}
92-
<Button
92+
<ButtonSubmitDefault
93+
buttonName={isLoading ? "Logging in..." : "Login"}
9394
type="submit"
94-
disabled={isLoading || email === "" || password === ""}>
95-
{isLoading ? 'Logging in...' : 'Login'}
96-
</Button>
95+
disabled={isLoading || email === "" || password === ""}
96+
/>
9797
</div>
9898
</form>
9999
{error && <p className="text-error text-sm mt-2">{error}</p>}

src/routes/register/index.jsx

+39-19
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,52 @@
11
import { useState, useEffect } from "react";
2-
import {Button} from "react-bootstrap";
2+
import ButtonSubmitDefault from "../../components/Buttons/ButtonSubmitDefault.jsx";
3+
import {Create} from "../../axios/userAxios.js"
4+
import {useNavigate} from "react-router-dom";
35

46
const Register = () => {
57
const [firstName, setFirstName] = useState('');
68
const [lastName, setLastName] = useState('');
79
const [email, setEmail] = useState('');
810
const [password, setPassword] = useState('');
911
const [rePassword, setRePassword] = useState('');
12+
1013
const [error, setError] = useState('');
14+
const navigate = useNavigate();
1115
const [isLoading, setIsLoading] = useState(false);
1216

13-
const getSubmitData = async (e) => {
17+
const handleSignUp = async (e) => {
1418
e.preventDefault();
15-
// setError(null);
16-
// setIsLoading(true);
17-
// try {
18-
// await authenticateUser(email, password);
19-
// } catch (error) {
20-
// setError(error.message || "Failed to login. Please try again.");
21-
// } finally {
22-
// setIsLoading(false);
23-
// }
19+
setError('');
20+
21+
// Check if passwords match
22+
if (password !== rePassword) {
23+
setError('Passwords do not match.');
24+
return;
25+
}
26+
27+
const userData = { firstName, lastName ,email, password };
28+
29+
try {
30+
setError('');
31+
// Registration
32+
await Create(userData);
33+
navigate("/login");
34+
} catch (error) {
35+
if (error.response && error.response.data && error.response.data.message) {
36+
setError(error.response.data.message);
37+
} else {
38+
setError("This email is already registered");
39+
}
40+
console.log(error);
41+
}
2442
};
2543

2644
return (
27-
<div className="flex flex-col justify-start pt-6 items-center min-h-80vh bg-gray-100">
28-
<div className="max-w-lg w-full p-6 bg-base-100 rounded-lg shadow-lg">
45+
<div className="flex flex-col justify-start pt-6 items-center min-h-[60vh]">
46+
<div className="max-w-lg w-[95vw] p-6 bg-gray-300 rounded-lg shadow-lg">
2947

30-
<h2 className="font-semibold text-start mt-4 mb-4">Register to get access to write your own reviews</h2>
31-
<form onSubmit={getSubmitData}>
48+
<h2 className="font-semibold text-center mt-4 mb-4">Register and write your own reviews</h2>
49+
<form onSubmit={handleSignUp}>
3250
<div className="mb-4">
3351
<label htmlFor="firstName" className="block mb-2 text-sm text-accent-content">
3452
First Name
@@ -103,12 +121,14 @@ const Register = () => {
103121

104122
<div className="text-center">
105123
{error?.password && <p>{error.password}</p>}
106-
<Button disabled={isLoading || email === ""
124+
<ButtonSubmitDefault
125+
buttonName={isLoading ? "Registering..." : "Register"}
126+
type="submit"
127+
disabled={isLoading || email === ""
107128
|| firstName === "" || lastName === ""
108-
|| password === "" || rePassword === ""}>
109-
{isLoading ? 'Registering...' : 'Register'}
110-
</Button>
129+
|| password === "" || rePassword === ""} />
111130
</div>
131+
112132
</form>
113133
<div className="text-center">
114134
{error && <p className="text-error text-sm mt-2">{error}</p>}

tailwind.config.js

+3-4
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,15 @@ module.exports = {
1212
HoverLinksBgColor:'rgb(96 165 250)',
1313
HoverLinksTextColor: '#FFF',
1414
},
15+
animation: {
16+
spin: 'spin 1.5s linear infinite', // Adjust timing (e.g., 1s)
17+
},
1518
minHeight: {
1619
'20vh': '20vh',
1720
'80vh': '80vh',
1821
'90vh': '90vh',
1922
},
2023
},
2124
},
22-
// plugins: [require('daisyui')],
2325
plugins: [],
24-
// daisyui: {
25-
// themes: ["corporate"],
26-
// },
2726
};

0 commit comments

Comments
 (0)