Skip to content

Commit

Permalink
Merge pull request #35 from boostcampwm-2022/feat/loginpage
Browse files Browse the repository at this point in the history
feat/loginpage : ๋กœ๊ทธ์ธํŽ˜์ด์ง€ ํผ๋ธ”๋ฆฌ์‹ฑ ๋ฐ ๋ฒ„๊ทธํ”ฝ์Šค
  • Loading branch information
pushedrumex authored Nov 19, 2022
2 parents e61229d + 31c1af3 commit 74edf2b
Show file tree
Hide file tree
Showing 7 changed files with 125 additions and 10 deletions.
11 changes: 10 additions & 1 deletion client/src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
import React from "react";
import SignUp from "#pages/SignUp";
import Login from "#pages/Login";
import MainPage from "#pages/MainPage";
import { Route, Routes } from "react-router-dom";

function App() {
return <SignUp />;
return (
<Routes>
<Route path="/" element={<MainPage />} />
<Route path="signup" element={<SignUp />} />
<Route path="login" element={<Login />} />
</Routes>
);
}

export default App;
15 changes: 15 additions & 0 deletions client/src/pages/Login.styles.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import styled from "styled-components";
import { COLOR } from "styles/color";

export const LogoWrapper = styled.div`
color: ${COLOR.BLACK};
width: 90%;
height: 29px;
font-size: 2.4rem;
font-weight: bold;
font-family: "Noto Sans KR";
margin: auto;
margin-top: 10rem;
padding: 5rem;
text-align: center;
`;
61 changes: 61 additions & 0 deletions client/src/pages/Login.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import React, { useCallback } from "react";
import { useNavigate } from "react-router-dom";
import Header from "#components/Header/Header";
import Input from "#components/Input/Input";
import Button from "#components/Button/Button";
import useInput from "#hooks/useInput";
import axios from "axios";
import { PLACEHOLDER } from "#constants/constants";
import { idValidator, passwordValidator } from "#utils/valitationUtils";

import { InputWrapper, OptionsWrapper } from "./SignUp.styles";

import { LogoWrapper } from "./Login.styles";

const Login = () => {
const [userId, onChangeUserId, userIdError] = useInput(idValidator);
const [password, onChangePassword, passwordError] = useInput(passwordValidator);

const navigate = useNavigate();

const checkFormValidation = useCallback(() => {
return userIdError || passwordError;
}, [userIdError, passwordError]);

const onSubmitLogin = () => {
if (checkFormValidation()) return;
axios
.post("http://localhost:4000/auth/login", {
userId,
password,
})
.then((res) => res.status === 201 && navigate("/", { replace: true }))
.catch(console.log);
};

return (
<>
<Header text="๋กœ๊ทธ์ธ" />
<LogoWrapper>RunWithMe</LogoWrapper>
<InputWrapper>
<Input placeholder={PLACEHOLDER.ID} type="text" onChange={onChangeUserId}></Input>
<span>{userIdError}</span>
<Input placeholder={PLACEHOLDER.PASSWORD} type="password" onChange={onChangePassword}></Input>
<span>{passwordError}</span>
<Button width="fill" onClick={onSubmitLogin}>
๋กœ๊ทธ์ธ
</Button>
</InputWrapper>
<OptionsWrapper>
<div>
<span onClick={() => navigate("/pwInquiry")}>๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ</span>
</div>
<div>
<span onClick={() => navigate("/signup")}>ํšŒ์›๊ฐ€์ž…</span>
</div>
</OptionsWrapper>
</>
);
};

export default Login;
24 changes: 24 additions & 0 deletions client/src/pages/MainPage.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import React from "react";
import { useNavigate } from "react-router-dom";

/*
์ž„์‹œ ๋ฉ”์ธํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค (๋ผ์šฐํŒ… / ๋‚ด๋น„๊ฒŒ์ด์…˜ ํ…Œ์ŠคํŒ…์šฉ)
*/
const MainPage = () => {
const navigate = useNavigate();
const handleLoginClick = () => {
navigate("/login");
};
const handleSignUpClick = () => {
navigate("/signup");
};

return (
<>
<button onClick={handleLoginClick}>๋กœ๊ทธ์ธ</button>
<button onClick={handleSignUpClick}>ํšŒ์›๊ฐ€์ž… </button>
</>
);
};

export default MainPage;
6 changes: 4 additions & 2 deletions client/src/pages/SignUp.styles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,18 @@ export const OptionsWrapper = styled.div`
color: grey;
display: flex;
margin: auto;
width: 60%;
width: 90%;
padding: 0 10rem;
div {
display: flex;
justify-content: center;
flex-grow: 1;
padding: 0.1rem 0.9rem;
cursor: pointer;
}
div:first-child {
div:not(:last-child) {
border-right: 0.1rem solid grey;
}
`;
12 changes: 8 additions & 4 deletions client/src/pages/SignUp.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ const SignUp = () => {
return userIdError || passwordError || confirmPasswordError || !confirmPassword;
}, [userIdError, passwordError, confirmPasswordError]);

const onSubmit = () => {
const onSubmitSignUp = () => {
if (checkFormValidation()) return;
axios
.post("http://localhost:4000/user", {
Expand Down Expand Up @@ -55,13 +55,17 @@ const SignUp = () => {
<Input placeholder={PLACEHOLDER.PACE} type="number" onChange={onChangePace}></Input>
<Input placeholder={PLACEHOLDER.ZIP_CODE} type="number" onChange={onChangeZipCode}></Input>
<span>{zipCodeError}</span>
<Button width="fill" onClick={onSubmit}>
<Button width="fill" onClick={onSubmitSignUp}>
ํšŒ์›๊ฐ€์ž…
</Button>
</InputWrapper>
<OptionsWrapper>
<div onClick={() => navigate("/pwInquiry")}>๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ</div>
<div onClick={() => navigate("/login")}>๋กœ๊ทธ์ธ ํ•˜๊ธฐ</div>
<div>
<span onClick={() => navigate("/pwInquiry")}>๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ</span>
</div>
<div>
<span onClick={() => navigate("/login")}>๋กœ๊ทธ์ธ ํ•˜๊ธฐ</span>
</div>
</OptionsWrapper>
</>
);
Expand Down
6 changes: 3 additions & 3 deletions client/src/utils/valitationUtils.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
export const idValidator = (id: string) => {
if (id.length >= 6 && id.length <= 20) return "";
if (!id.length) return "ID๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”";
if (!(id.length >= 6 && id.length <= 20)) return "ID๋Š” 6์ž ์ด์ƒ 20์ž ์ดํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค";
if (!/^[a-zA-Z0-9]*$/g.test(id)) return "์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž, ์ˆซ์ž๋งŒ ์ž…๋ ฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค";
return "ID๋Š” 6์ž ์ด์ƒ 20์ž ์ดํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค";
return "";
};

export const passwordValidator = (password: string) => {
return password.length < 10 || password.length > 100 ? "๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” 10์ž ์ด์ƒ 100์ž ์ดํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค" : "";
};
export const confirmPasswordValidator = (password: string) => (confirmPassword: string) => {
return password !== confirmPassword || !confirmPassword ? "๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ•œ๋ฒˆ ๋” ์ž…๋ ฅํ•˜์„ธ์š”" : "";
return password !== confirmPassword || !confirmPassword ? "๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค" : "";
};

export const zipCodeValidator = (zipCode: string) => {
Expand Down

0 comments on commit 74edf2b

Please sign in to comment.