From d657b2604c41695b6ed7fb6e9973930d3573f2b1 Mon Sep 17 00:00:00 2001 From: ckswnskfk Date: Sat, 18 Nov 2023 16:54:26 +0900 Subject: [PATCH 01/12] =?UTF-8?q?Refactor:=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EB=A9=94=EC=84=B8=EC=A7=80=20=ED=95=B8=EB=93=A4=EB=9F=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 원래 있던 요소 찾아서 클래스 핸들링하는 방법이 메서드 명을 직접 넘겨줘야 하는 단점이 있어 요소를 추가하는 방법으로 변경 --- pages/member/sign.js | 21 +++++++++++++++------ pages/member/signin/index.html | 2 -- pages/member/signup/index.html | 3 --- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/pages/member/sign.js b/pages/member/sign.js index 86b271549..8d4e3ad6d 100644 --- a/pages/member/sign.js +++ b/pages/member/sign.js @@ -18,17 +18,26 @@ const errorMessage = { }, }; -function handleErrorMessage(element, addOrRemoveHide, errorMessage = "") { - const parent = element.parentElement; - const errorMessageSpan = parent.querySelector(".input-error__message"); +function handleErrorMessage(target, errorMessage = "") { + const parent = target.parentElement; + let errorMessageSpan = parent.querySelector(".input-error__message"); + if (!errorMessage) { + errorMessageSpan.remove(); + return; + } + + if (!errorMessageSpan) { + errorMessageSpan = document.createElement("span"); + errorMessageSpan.classList.add("input-error__message"); + target.after(errorMessageSpan); + } errorMessageSpan.textContent = errorMessage; - errorMessageSpan.classList[addOrRemoveHide]("hide"); } function inputValidationFailed(target, errorMessage, eyeIcon) { target.classList.add("input-error"); - handleErrorMessage(target, "remove", errorMessage); + handleErrorMessage(target, errorMessage); if (eyeIcon) { eyeIcon.classList.add("eye-icon__error"); } @@ -36,7 +45,7 @@ function inputValidationFailed(target, errorMessage, eyeIcon) { function inputValidationSucceeded(target, eyeIcon) { target.classList.remove("input-error"); - handleErrorMessage(target, "add"); + handleErrorMessage(target); if (eyeIcon) { eyeIcon.classList.remove("eye-icon__error"); } diff --git a/pages/member/signin/index.html b/pages/member/signin/index.html index 5b7ab0d6e..17aef0e76 100644 --- a/pages/member/signin/index.html +++ b/pages/member/signin/index.html @@ -68,7 +68,6 @@ name="email" required placeholder="이메일을 입력해주세요." /> -
@@ -83,7 +82,6 @@ class="form__input--eye-off eye-icon" type="button" aria-label="패스워드 보이기"> -
diff --git a/pages/member/signup/index.html b/pages/member/signup/index.html index ecebc1b85..b73058886 100644 --- a/pages/member/signup/index.html +++ b/pages/member/signup/index.html @@ -69,7 +69,6 @@ name="email" required placeholder="이메일을 입력해주세요." /> -
@@ -84,7 +83,6 @@ class="form__input--eye-off eye-icon" type="button" aria-label="패스워드 감추기"> -
From 9f33a81767b8707c9aa208de466de87b27ec599d Mon Sep 17 00:00:00 2001 From: ckswnskfk Date: Sun, 19 Nov 2023 21:32:52 +0900 Subject: [PATCH 02/12] =?UTF-8?q?Fix:=20handleErrorMessage=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/member/sign.js | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/pages/member/sign.js b/pages/member/sign.js index 8d4e3ad6d..c5113da0a 100644 --- a/pages/member/sign.js +++ b/pages/member/sign.js @@ -18,12 +18,15 @@ const errorMessage = { }, }; -function handleErrorMessage(target, errorMessage = "") { +function getInputsErrMsgEl(target) { const parent = target.parentElement; - let errorMessageSpan = parent.querySelector(".input-error__message"); + return parent.querySelector(".input-error__message"); +} - if (!errorMessage) { - errorMessageSpan.remove(); +function handleErrorMessage(target, errorMessage = "") { + let errorMessageSpan = getInputsErrMsgEl(target); + + if (isEmptyString(errorMessage) && !errorMessageSpan) { return; } @@ -31,7 +34,15 @@ function handleErrorMessage(target, errorMessage = "") { errorMessageSpan = document.createElement("span"); errorMessageSpan.classList.add("input-error__message"); target.after(errorMessageSpan); + errorMessageSpan.textContent = errorMessage; + return; } + + if (isEmptyString(errorMessage)) { + errorMessageSpan.remove(); + return; + } + errorMessageSpan.textContent = errorMessage; } @@ -95,12 +106,6 @@ function isEmailExist(email) { return users.some((user) => user.email === email); } -function isMemberExist(member) { - return users.some( - (user) => user.email === member.email && user.password === member.password - ); -} - function changePasswordVisibility(passwordInput) { return function ({ target }) { target.classList.toggle("form__input--eye-on"); @@ -121,5 +126,4 @@ export { errorMessage, inputValidationFailed, inputValidationSucceeded, - isMemberExist, }; From dd6d58e1ceb9406d795f149d63284454149dcf0b Mon Sep 17 00:00:00 2001 From: ckswnskfk Date: Sun, 19 Nov 2023 22:15:48 +0900 Subject: [PATCH 03/12] =?UTF-8?q?Rename:=20api=EC=99=80=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=A7=9E=EC=B6=94=EA=B8=B0=20=EC=9C=84=ED=95=B4=20?= =?UTF-8?q?member=EC=97=90=EC=84=9C=20auth=EB=A1=9C=20=ED=8F=B4=EB=8D=94?= =?UTF-8?q?=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 4 ++-- pages/{member => auth}/sign.css | 0 pages/{member => auth}/sign.js | 0 pages/{member => auth}/signin/index.html | 0 pages/{member => auth}/signin/signin.js | 0 pages/{member => auth}/signup/index.html | 0 pages/{member => auth}/signup/signup.js | 0 7 files changed, 2 insertions(+), 2 deletions(-) rename pages/{member => auth}/sign.css (100%) rename pages/{member => auth}/sign.js (100%) rename pages/{member => auth}/signin/index.html (100%) rename pages/{member => auth}/signin/signin.js (100%) rename pages/{member => auth}/signup/index.html (100%) rename pages/{member => auth}/signup/signup.js (100%) diff --git a/index.html b/index.html index 6f90cac55..e1d491508 100644 --- a/index.html +++ b/index.html @@ -54,7 +54,7 @@ src="images/icons/logo.svg" alt="링크브러리 로고" /> - + @@ -65,7 +65,7 @@

>를
쉽게 저장하고 관리해 보세요

- +
Date: Sun, 19 Nov 2023 22:17:58 +0900 Subject: [PATCH 04/12] =?UTF-8?q?Feat:=20=EA=B3=B5=ED=86=B5=20fetch=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EC=9D=98=20fetchApi=20=EC=83=9D=EC=84=B1,=20?= =?UTF-8?q?=EB=8F=84=EB=A9=94=EC=9D=B8=20=EB=B3=84=20api=20=ED=8F=B4?= =?UTF-8?q?=EB=8D=94=20=EA=B5=AC=EC=A1=B0=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/apis/auth/index.js | 5 +++++ scripts/fetchApi.js | 43 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 scripts/apis/auth/index.js create mode 100644 scripts/fetchApi.js diff --git a/scripts/apis/auth/index.js b/scripts/apis/auth/index.js new file mode 100644 index 000000000..2860fde86 --- /dev/null +++ b/scripts/apis/auth/index.js @@ -0,0 +1,5 @@ +import { fetchApi } from "/scripts/fetchApi.js"; + +const signIn = (email, password) => + fetchApi.post("/sign-in", { body: { email, password } }); +export { signIn }; diff --git a/scripts/fetchApi.js b/scripts/fetchApi.js new file mode 100644 index 000000000..769c0d2ee --- /dev/null +++ b/scripts/fetchApi.js @@ -0,0 +1,43 @@ +const BASE_URL = "https://bootcamp-api.codeit.kr/api"; + +const fetchApi = { + request: async function (url, { options = {}, headers = {} } = {}) { + const response = await fetch(`${BASE_URL}${url}`, { + ...options, + headers: { + ...options.headers, + ...headers, + }, + }); + + const result = await response.json(); + + if (!response.ok) { + console.error( + `${result?.error?.name || "Error"} ${ + result?.error?.message || `HTTP error! status: ${response.status}` + }` + ); + return; + } + + return result; + }, + + post: async function (url, { body, headers }) { + console.log(body); + const options = { + method: "POST", + body: body ? JSON.stringify(body) : null, + headers: { + "Content-Type": "application/json", + ...headers, + }, + }; + + const result = await this.request(url, { options }); + return result; + }, +}; + +export { fetchApi }; From 429e75854b24754b309b96988b2f9c7bced31918 Mon Sep 17 00:00:00 2001 From: ckswnskfk Date: Mon, 20 Nov 2023 01:16:27 +0900 Subject: [PATCH 05/12] =?UTF-8?q?Remove:=20api=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20->=20=EA=B0=81=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=ED=8F=B4=EB=8D=94=EC=97=90=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/apis/auth/index.js | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 scripts/apis/auth/index.js diff --git a/scripts/apis/auth/index.js b/scripts/apis/auth/index.js deleted file mode 100644 index 2860fde86..000000000 --- a/scripts/apis/auth/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import { fetchApi } from "/scripts/fetchApi.js"; - -const signIn = (email, password) => - fetchApi.post("/sign-in", { body: { email, password } }); -export { signIn }; From adee9aef93eb5504d7d84beb79d2a76e2c1b3815 Mon Sep 17 00:00:00 2001 From: ckswnskfk Date: Mon, 20 Nov 2023 01:40:52 +0900 Subject: [PATCH 06/12] =?UTF-8?q?Feat:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5,=20email=20check=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit accessToken localStorage에 추가 기능 요청 시 headers에 accessToken 추가 기능 --- pages/auth/api.js | 9 +++++++ pages/auth/sign.js | 23 ++++++++++++---- pages/auth/signin/signin.js | 53 +++++++++++++++++-------------------- pages/auth/signup/signup.js | 5 ++-- scripts/fetchApi.js | 14 +++++----- 5 files changed, 62 insertions(+), 42 deletions(-) create mode 100644 pages/auth/api.js diff --git a/pages/auth/api.js b/pages/auth/api.js new file mode 100644 index 000000000..abca50b31 --- /dev/null +++ b/pages/auth/api.js @@ -0,0 +1,9 @@ +import { fetchApi } from "/scripts/fetchApi.js"; + +const postSignIn = (email, password) => + fetchApi.post("/sign-in", { body: { email, password } }); + +const postCheckEmail = (email) => + fetchApi.post("/check-email", { body: { email } }); + +export { postCheckEmail, postSignIn }; diff --git a/pages/auth/sign.js b/pages/auth/sign.js index c5113da0a..198b3a4e2 100644 --- a/pages/auth/sign.js +++ b/pages/auth/sign.js @@ -1,4 +1,4 @@ -import users from "/data/users.js"; +import { postCheckEmail } from "./api.js"; import { isEmptyString } from "/scripts/utils.js"; const errorMessage = { @@ -62,14 +62,14 @@ function inputValidationSucceeded(target, eyeIcon) { } } -function checkEmailValid(element, checkExist = true) { +async function checkEmailValid(element, checkExist = true) { if (isEmptyString(element.value)) { return errorMessage.email.empty; } if (!isEmailValid(element.value)) { return errorMessage.email.valid; } - if (checkExist && isEmailExist(element.value)) { + if (checkExist && (await isEmailExist(element.value))) { return errorMessage.email.exist; } return ""; @@ -102,8 +102,16 @@ function isPasswordValid(password) { return password.trim().length >= 8 && regex.test(password); } -function isEmailExist(email) { - return users.some((user) => user.email === email); +async function isEmailExist(email) { + let emailExist = true; + try { + await postCheckEmail(email); + emailExist = false; + } catch (error) { + console.error(`${error.name}: ${error.message}`); + } finally { + return emailExist; + } } function changePasswordVisibility(passwordInput) { @@ -118,6 +126,10 @@ function changePasswordVisibility(passwordInput) { }; } +function setUserAccessToken({ data }) { + localStorage.setItem("accessToken", data.accessToken); +} + export { changePasswordVisibility, checkEmailValid, @@ -126,4 +138,5 @@ export { errorMessage, inputValidationFailed, inputValidationSucceeded, + setUserAccessToken, }; diff --git a/pages/auth/signin/signin.js b/pages/auth/signin/signin.js index d2b892d74..76734a887 100644 --- a/pages/auth/signin/signin.js +++ b/pages/auth/signin/signin.js @@ -5,9 +5,10 @@ import { errorMessage, inputValidationFailed, inputValidationSucceeded, - isMemberExist, + setUserAccessToken, } from "../sign.js"; +import { postSignIn } from "../api.js"; import { isEmptyString } from "/scripts/utils.js"; /** @@ -16,8 +17,8 @@ import { isEmptyString } from "/scripts/utils.js"; const emailInput = document.querySelector("#input-email"); emailInput.addEventListener("focusout", onEmailFocusoutValid); -function onEmailFocusoutValid({ target }) { - const errorMessage = checkEmailValid(target, false); +async function onEmailFocusoutValid({ target }) { + const errorMessage = await checkEmailValid(target, false); if (!isEmptyString(errorMessage)) { inputValidationFailed(target, errorMessage); return false; @@ -58,40 +59,36 @@ passwordEyeIcon.addEventListener( */ const form = document.querySelector(".form"); -form.addEventListener("submit", onSubmitValid); +form.addEventListener("submit", onSubmit); -function onSubmitValid(e) { +async function onSubmit(e) { e.preventDefault(); - let result = + const validResult = onEmailFocusoutValid({ target: emailInput }) && - onPasswordFocusoutValid({ target: passwordInput }) && - checkMemberExist(); + onPasswordFocusoutValid({ target: passwordInput }); - if (!result) { + if (!validResult) { return; } - location.href = "/pages/folder"; + await doSignIn(emailInput.value, passwordInput.value); } -function checkMemberExist() { - const isOurMember = isMemberExist({ - email: emailInput.value, - password: passwordInput.value, - }); - - if (!isOurMember) { - inputValidationFailed(emailInput, errorMessage.email.loginFailed); - inputValidationFailed( - passwordInput, - errorMessage.password.loginFailed, - passwordEyeIcon - ); - return false; +async function doSignIn(email, password) { + try { + const authData = await postSignIn(email, password); + setUserAccessToken(authData); + location.href = "/pages/folder"; + } catch (error) { + console.error(`${error.name}: ${error.message}`); + if (error.name === "AuthApiError") { + inputValidationFailed(emailInput, errorMessage.email.loginFailed); + inputValidationFailed( + passwordInput, + errorMessage.password.loginFailed, + passwordEyeIcon + ); + } } - - inputValidationSucceeded(emailInput); - inputValidationSucceeded(passwordInput, passwordEyeIcon); - return true; } diff --git a/pages/auth/signup/signup.js b/pages/auth/signup/signup.js index a1b29d903..615e94f27 100644 --- a/pages/auth/signup/signup.js +++ b/pages/auth/signup/signup.js @@ -15,8 +15,9 @@ import { isEmptyString } from "/scripts/utils.js"; const emailInput = document.querySelector("#input-email"); emailInput.addEventListener("focusout", onEmailFocusoutValid); -function onEmailFocusoutValid({ target }) { - const errorMessage = checkEmailValid(target); +async function onEmailFocusoutValid({ target }) { + const errorMessage = await checkEmailValid(target); + console.log(errorMessage); if (!isEmptyString(errorMessage)) { inputValidationFailed(target, errorMessage); return false; diff --git a/scripts/fetchApi.js b/scripts/fetchApi.js index 769c0d2ee..bb4ef853d 100644 --- a/scripts/fetchApi.js +++ b/scripts/fetchApi.js @@ -2,9 +2,11 @@ const BASE_URL = "https://bootcamp-api.codeit.kr/api"; const fetchApi = { request: async function (url, { options = {}, headers = {} } = {}) { + const accessToken = localStorage.getItem("accessToken"); const response = await fetch(`${BASE_URL}${url}`, { ...options, headers: { + Authorization: accessToken || "", ...options.headers, ...headers, }, @@ -13,19 +15,17 @@ const fetchApi = { const result = await response.json(); if (!response.ok) { - console.error( - `${result?.error?.name || "Error"} ${ - result?.error?.message || `HTTP error! status: ${response.status}` - }` - ); - return; + throw { + name: result?.error?.name || "Error", + message: + result?.error?.message || `HTTP error! status: ${response.status}`, + }; } return result; }, post: async function (url, { body, headers }) { - console.log(body); const options = { method: "POST", body: body ? JSON.stringify(body) : null, From d182a04653ac3e9fe7d1d5da5ff696c4c4546017 Mon Sep 17 00:00:00 2001 From: ckswnskfk Date: Mon, 20 Nov 2023 01:41:25 +0900 Subject: [PATCH 07/12] =?UTF-8?q?Remove:=20=EB=8D=94=EB=AF=B8=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EC=A0=9C=EA=B3=B5=ED=95=98=EB=8A=94=20use?= =?UTF-8?q?rs.js=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/users.js | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 data/users.js diff --git a/data/users.js b/data/users.js deleted file mode 100644 index 6cadadc28..000000000 --- a/data/users.js +++ /dev/null @@ -1,8 +0,0 @@ -const users = [ - { - email: "test@codeit.com", - password: "codeit101", - }, -]; - -export default users; From 2e8f2b1a093cdcb56ff3b8bfd30d8ddb479a1d80 Mon Sep 17 00:00:00 2001 From: ckswnskfk Date: Mon, 20 Nov 2023 02:03:38 +0900 Subject: [PATCH 08/12] =?UTF-8?q?Feat:=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EA=B8=B0=EB=8A=A5=20=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/auth/api.js | 5 ++++- pages/auth/signin/signin.js | 8 ++++---- pages/auth/signup/signup.js | 19 +++++++++++++++---- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/pages/auth/api.js b/pages/auth/api.js index abca50b31..2d082b29c 100644 --- a/pages/auth/api.js +++ b/pages/auth/api.js @@ -6,4 +6,7 @@ const postSignIn = (email, password) => const postCheckEmail = (email) => fetchApi.post("/check-email", { body: { email } }); -export { postCheckEmail, postSignIn }; +const postSignUp = (email, password) => + fetchApi.post("/sign-up", { body: { email, password } }); + +export { postCheckEmail, postSignIn, postSignUp }; diff --git a/pages/auth/signin/signin.js b/pages/auth/signin/signin.js index 76734a887..5c82254ff 100644 --- a/pages/auth/signin/signin.js +++ b/pages/auth/signin/signin.js @@ -61,7 +61,7 @@ const form = document.querySelector(".form"); form.addEventListener("submit", onSubmit); -async function onSubmit(e) { +function onSubmit(e) { e.preventDefault(); const validResult = @@ -72,13 +72,13 @@ async function onSubmit(e) { return; } - await doSignIn(emailInput.value, passwordInput.value); + doSignIn(emailInput.value, passwordInput.value); } async function doSignIn(email, password) { try { - const authData = await postSignIn(email, password); - setUserAccessToken(authData); + const signInResponse = await postSignIn(email, password); + setUserAccessToken(signInResponse); location.href = "/pages/folder"; } catch (error) { console.error(`${error.name}: ${error.message}`); diff --git a/pages/auth/signup/signup.js b/pages/auth/signup/signup.js index 615e94f27..4b72642c6 100644 --- a/pages/auth/signup/signup.js +++ b/pages/auth/signup/signup.js @@ -5,8 +5,10 @@ import { checkPasswordsMatch, inputValidationFailed, inputValidationSucceeded, + setUserAccessToken, } from "../sign.js"; +import { postSignUp } from "../api.js"; import { isEmptyString } from "/scripts/utils.js"; /** @@ -17,7 +19,6 @@ emailInput.addEventListener("focusout", onEmailFocusoutValid); async function onEmailFocusoutValid({ target }) { const errorMessage = await checkEmailValid(target); - console.log(errorMessage); if (!isEmptyString(errorMessage)) { inputValidationFailed(target, errorMessage); return false; @@ -84,9 +85,9 @@ passwordChkEyeIcon.addEventListener( */ const form = document.querySelector(".form"); -form.addEventListener("submit", onSubmitValid); +form.addEventListener("submit", onSubmit); -function onSubmitValid(e) { +function onSubmit(e) { e.preventDefault(); let result = @@ -98,5 +99,15 @@ function onSubmitValid(e) { return; } - location.href = "/pages/folder"; + doSignUp(emailInput.value, passwordInput.value); +} + +async function doSignUp(email, password) { + try { + const signUpResponse = await postSignUp(email, password); + setUserAccessToken(signUpResponse); + location.href = "/pages/folder"; + } catch (error) { + console.error(`${error.name}: ${error.message}`); + } } From 45baa48484f24ad85d257bc6d2dfb0fc7664f68c Mon Sep 17 00:00:00 2001 From: ckswnskfk Date: Mon, 20 Nov 2023 02:23:36 +0900 Subject: [PATCH 09/12] =?UTF-8?q?Feat:=20=EB=9E=9C=EB=94=A9=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=8B=AC=ED=99=94=20=EC=9A=94=EA=B5=AC?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 2 ++ index.js | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 index.js diff --git a/index.html b/index.html index e1d491508..61246e0ff 100644 --- a/index.html +++ b/index.html @@ -39,6 +39,8 @@ + +
diff --git a/index.js b/index.js new file mode 100644 index 000000000..3670b0164 --- /dev/null +++ b/index.js @@ -0,0 +1,21 @@ +const signInAnchor = document.querySelector(".gnb__signin"); +const signUpAnchor = document.querySelector(".hero__signup"); + +signInAnchor.addEventListener("click", (e) => { + e.preventDefault(); + navigateFolderPage("/pages/auth/signin/"); +}); + +signUpAnchor.addEventListener("click", (e) => { + e.preventDefault(); + navigateFolderPage("/pages/auth/signup/"); +}); + +function navigateFolderPage(href) { + if (localStorage.getItem("accessToken")) { + location.href = "/pages/folder/"; + return; + } + + location.href = href; +} From b6fb1280d5e4a6f8603f24289b68c8b220126677 Mon Sep 17 00:00:00 2001 From: ckswnskfk Date: Mon, 20 Nov 2023 02:36:24 +0900 Subject: [PATCH 10/12] =?UTF-8?q?Feat:=20url=20=EC=A7=81=EC=A0=91=20?= =?UTF-8?q?=EC=A0=91=EA=B7=BC=20=EC=8B=9C=EC=97=90=EB=8F=84=20=ED=86=A0?= =?UTF-8?q?=ED=81=B0=EC=97=90=20=EB=94=B0=EB=A5=B8=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=9D=B4=EB=8F=99=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/auth/signin/signin.js | 4 ++++ pages/auth/signup/signup.js | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/pages/auth/signin/signin.js b/pages/auth/signin/signin.js index 5c82254ff..195f98753 100644 --- a/pages/auth/signin/signin.js +++ b/pages/auth/signin/signin.js @@ -11,6 +11,10 @@ import { import { postSignIn } from "../api.js"; import { isEmptyString } from "/scripts/utils.js"; +if (localStorage.getItem("accessToken")) { + location.replace("/pages/folder/"); +} + /** * email input */ diff --git a/pages/auth/signup/signup.js b/pages/auth/signup/signup.js index 4b72642c6..782291d79 100644 --- a/pages/auth/signup/signup.js +++ b/pages/auth/signup/signup.js @@ -11,6 +11,10 @@ import { import { postSignUp } from "../api.js"; import { isEmptyString } from "/scripts/utils.js"; +if (localStorage.getItem("accessToken")) { + location.replace("/pages/folder/"); +} + /** * email input */ From 804c08aa5cfc485bdd4a2bea0778d383be352f3b Mon Sep 17 00:00:00 2001 From: ckswnskfk Date: Sat, 25 Nov 2023 00:56:17 +0900 Subject: [PATCH 11/12] =?UTF-8?q?Rename:=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=EB=AA=85=20=EC=A2=80=20=EB=8D=94=20=EB=AA=85?= =?UTF-8?q?=ED=99=95=ED=95=98=EA=B2=8C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/auth/signin/signin.js | 12 ++++++------ pages/auth/signup/signup.js | 18 +++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/pages/auth/signin/signin.js b/pages/auth/signin/signin.js index 195f98753..3d94a7b8d 100644 --- a/pages/auth/signin/signin.js +++ b/pages/auth/signin/signin.js @@ -19,9 +19,9 @@ if (localStorage.getItem("accessToken")) { * email input */ const emailInput = document.querySelector("#input-email"); -emailInput.addEventListener("focusout", onEmailFocusoutValid); +emailInput.addEventListener("focusout", onEmailFocusout); -async function onEmailFocusoutValid({ target }) { +async function onEmailFocusout({ target }) { const errorMessage = await checkEmailValid(target, false); if (!isEmptyString(errorMessage)) { inputValidationFailed(target, errorMessage); @@ -40,9 +40,9 @@ const passwordEyeIcon = document.querySelector( ".form__password .form__input--eye-off" ); -passwordInput.addEventListener("focusout", onPasswordFocusoutValid); +passwordInput.addEventListener("focusout", onPasswordFocusout); -function onPasswordFocusoutValid({ target }) { +function onPasswordFocusout({ target }) { const errorMessage = checkPasswordValid(target); if (!isEmptyString(errorMessage)) { inputValidationFailed(target, errorMessage, passwordEyeIcon); @@ -69,8 +69,8 @@ function onSubmit(e) { e.preventDefault(); const validResult = - onEmailFocusoutValid({ target: emailInput }) && - onPasswordFocusoutValid({ target: passwordInput }); + onEmailFocusout({ target: emailInput }) && + onPasswordFocusout({ target: passwordInput }); if (!validResult) { return; diff --git a/pages/auth/signup/signup.js b/pages/auth/signup/signup.js index 782291d79..381ab44e1 100644 --- a/pages/auth/signup/signup.js +++ b/pages/auth/signup/signup.js @@ -19,9 +19,9 @@ if (localStorage.getItem("accessToken")) { * email input */ const emailInput = document.querySelector("#input-email"); -emailInput.addEventListener("focusout", onEmailFocusoutValid); +emailInput.addEventListener("focusout", onEmailFocusout); -async function onEmailFocusoutValid({ target }) { +async function onEmailFocusout({ target }) { const errorMessage = await checkEmailValid(target); if (!isEmptyString(errorMessage)) { inputValidationFailed(target, errorMessage); @@ -40,9 +40,9 @@ const passwordEyeIcon = document.querySelector( ".form__password .form__input--eye-off" ); -passwordInput.addEventListener("focusout", onPasswordFocusoutValid); +passwordInput.addEventListener("focusout", onPasswordFocusout); -function onPasswordFocusoutValid({ target }) { +function onPasswordFocusout({ target }) { const errorMessage = checkPasswordValid(target); if (!isEmptyString(errorMessage)) { inputValidationFailed(target, errorMessage, passwordEyeIcon); @@ -66,9 +66,9 @@ const passwordChkEyeIcon = document.querySelector( ".form__password-chk .form__input--eye-off" ); -passwordInputChk.addEventListener("focusout", onPasswordChkFocusoutValid); +passwordInputChk.addEventListener("focusout", onPasswordChkFocusout); -function onPasswordChkFocusoutValid({ target }) { +function onPasswordChkFocusout({ target }) { const errorMessage = checkPasswordsMatch(target, passwordInput); if (!isEmptyString(errorMessage)) { inputValidationFailed(target, errorMessage, passwordChkEyeIcon); @@ -95,9 +95,9 @@ function onSubmit(e) { e.preventDefault(); let result = - onEmailFocusoutValid({ target: emailInput }) && - onPasswordFocusoutValid({ target: passwordInput }) && - onPasswordChkFocusoutValid({ target: passwordInputChk }); + onEmailFocusout({ target: emailInput }) && + onPasswordFocusout({ target: passwordInput }) && + onPasswordChkFocusout({ target: passwordInputChk }); if (!result) { return; From 0441b3bc8b787c9949b3c6fe49431095905268f5 Mon Sep 17 00:00:00 2001 From: ckswnskfk Date: Sat, 25 Nov 2023 01:03:34 +0900 Subject: [PATCH 12/12] =?UTF-8?q?Refactor:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EB=A6=AC=EB=B7=B0=20=EC=82=AC=ED=95=AD=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/auth/sign.js | 8 ++------ pages/auth/signin/signin.js | 4 +--- pages/auth/signup/signup.js | 4 +--- scripts/fetchApi.js | 2 +- 4 files changed, 5 insertions(+), 13 deletions(-) diff --git a/pages/auth/sign.js b/pages/auth/sign.js index 198b3a4e2..cc4687b47 100644 --- a/pages/auth/sign.js +++ b/pages/auth/sign.js @@ -18,13 +18,9 @@ const errorMessage = { }, }; -function getInputsErrMsgEl(target) { - const parent = target.parentElement; - return parent.querySelector(".input-error__message"); -} - function handleErrorMessage(target, errorMessage = "") { - let errorMessageSpan = getInputsErrMsgEl(target); + const parent = target.parentElement; + let errorMessageSpan = parent.querySelector(".input-error__message"); if (isEmptyString(errorMessage) && !errorMessageSpan) { return; diff --git a/pages/auth/signin/signin.js b/pages/auth/signin/signin.js index 3d94a7b8d..ce98764f3 100644 --- a/pages/auth/signin/signin.js +++ b/pages/auth/signin/signin.js @@ -11,9 +11,7 @@ import { import { postSignIn } from "../api.js"; import { isEmptyString } from "/scripts/utils.js"; -if (localStorage.getItem("accessToken")) { - location.replace("/pages/folder/"); -} +navigateFolderPage("pages/auth/signin/"); /** * email input diff --git a/pages/auth/signup/signup.js b/pages/auth/signup/signup.js index 381ab44e1..4f7866bdb 100644 --- a/pages/auth/signup/signup.js +++ b/pages/auth/signup/signup.js @@ -11,9 +11,7 @@ import { import { postSignUp } from "../api.js"; import { isEmptyString } from "/scripts/utils.js"; -if (localStorage.getItem("accessToken")) { - location.replace("/pages/folder/"); -} +navigateFolderPage("pages/auth/signup/"); /** * email input diff --git a/scripts/fetchApi.js b/scripts/fetchApi.js index bb4ef853d..4e1ff6b10 100644 --- a/scripts/fetchApi.js +++ b/scripts/fetchApi.js @@ -28,7 +28,7 @@ const fetchApi = { post: async function (url, { body, headers }) { const options = { method: "POST", - body: body ? JSON.stringify(body) : null, + body: JSON.stringify(body), headers: { "Content-Type": "application/json", ...headers,