Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Week4] 권부근 #133

Merged

Conversation

guen9310
Copy link
Collaborator

요구사항

기본

  • [기본]이메일 input에서 focus out 할 때, 값이 없을 경우 input에 빨강색 테두리와 아래에 “이메일을 입력해주세요.” 빨강색 에러 메세지가 보이나요?

  • [기본]이메일 input에서 focus out 할 때, 이메일 형식에 맞지 않는 값이 있는 경우 input에 빨강색 테두리와 아래에 “올바른 이메일 주소가 아닙니다.” 빨강색 에러 메세지가 보이나요?

  • [기본]이메일 input에서 focus out 일 때, input 값이 [email protected] 일 경우 input에 빨강색 테두리와 아래에 “이미 사용 중인 이메일입니다.” 빨강색 에러 메세지가 보이나요?

  • [기본]비밀번호 input에서 focus out 할 때, 값이 8자 미만으로 있거나 문자열만 있거나 숫자만 있는 경우, input에 빨강색 테두리와 아래에 “비밀번호는 영문, 숫자 조합 8자 이상 입력해 주세요.” 빨강색 에러 메세지가 보이나요?

  • [기본]비밀번호 input과 비밀번호 확인 input의 값이 다른 경우, 비밀번호 확인 input에 빨강색 테두리와 아래에 “비밀번호가 일치하지 않아요.” 빨강색 에러 메세지가 보이나요?

  • [기본]회원가입을 실행할 경우, 문제가 있는 경우 문제가 있는 input에 빨강색 테두리와 에러 메세지가 보이나요?

  • [기본]이외의 유효한 회원가입 시도의 경우, “/folder”로 이동하나요?

  • [기본]이메일: [email protected], 비밀번호: codeit101 으로 로그인 시도할 경우, “/folder” 페이지로 이동하나요?

  • [기본]비밀번호 input에서 focus out 할 때, 값이 없을 경우 아래에 “비밀번호를 입력해주세요.” 에러 메세지가 보이나요?

  • [기본]이외의 로그인 시도의 경우 이메일, 비밀번호 input에 빨강색 테두리와 각각의 input아래에 “이메일을 확인해주세요.”, “비밀번호를 확인해주세요.” 빨강색 에러 메세지가 보이나요?

  • [기본]회원가입 버튼 클릭 또는 Enter키 입력으로 회원가입 되나요?

  • [기본]이메일, 비밀번호 input에 에러 관련 디자인을 Components 영역의 에러 케이스로 적용했나요?

심화

  • [심화]눈 모양 아이콘 클릭시 비밀번호의 문자열이 보이기도 하고, 가려지기도 하나요?

  • [심화]비밀번호의 문자열이 가려질 때는 눈 모양 아이콘에는 사선이 그어져있고, 비밀번호의 문자열이 보일 때는 사선이 없는 눈 모양 아이콘이 보이나요?

  • [심화]로그인, 회원가입 페이지에 공통적으로 사용하는 로직이 있다면, 반복하지 않고 공통된 로직을 모듈로 분리해 사용했나요?

주요 변경사항

  • button에 dataset을 해줘서 로그인 이벤트인지 회원가입 이벤트인지 판별하도록 작업하였습니다.
  • auth.js에 작성한 코드들을 모듈화 시켜서 세분화 작업을 진행하였습니다.

배포사이트

링크

멘토에게

  • 모듈화가 잘 된 건지 의문이 듭니다. 모듈화를 하게 되는 경우 이름을 어떻게 지어야될지 모르겠습니다.
  • 최대한 중복 사용을 줄이기 위해 코드 리팩토링을 진행하였는데 잘 줄였는지 궁금합니다.
  • 멘토링 시간 때 이야기 나눈 focus 이벤트와 submit 이벤트 동시 실행을 막기 위해 input 태그인 경우에만 focusout 이벤트가 실행되게 하는 것이 제가 생각하기에 최선의 방법이었던 거 같습니다. 혹시 다른 방법이 있는지 궁금합니다.

@guen9310 guen9310 added the 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. label Nov 11, 2023
Comment on lines +87 to +89
if (e.key === "Enter") {
submit.click();
}
Copy link
Collaborator

@soonoo27 soonoo27 Nov 11, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사용성을 고려한 구현 좋네요 💯
다만 확인해보니 form 내에 type="submit"인 버튼이 있을 때 input 요소에서 엔터키를 누르면 브라우저가 알아서 폼을 전송해주긴 하는데, 관련하여 표준 문서 등을 찾기가 어렵네요.

그리고 keyupHandler가 document에 추가되어 있어서 아무데서나 엔터 키를 눌러도 폼이 전송되네요. 이부분은 개선될 여지가 있어 보입니다! (의도하신게 아니라면)

@@ -26,21 +26,25 @@
</p>
</header>
<div class="sign-box">
<form class="sign-form">
<form action="/folder.html" class="sign-form" novalidate>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

자체 유효성 검사를 사용하고 있으니 novalidate 속성 사용 좋네요!

}
};

form.addEventListener("focusout", focusHandler);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

focusoutHandler로 조금 더 명확하게 이름을 지어보면 어떨까요?
(지금 상황에서는 focusout 이벤트만 처리하고 있으니 크게 이해하는데 어려움이 없지만 엄밀히 말하면 focus, focusout 이벤트는 별도의 이벤트이니깐요)

Comment on lines +20 to +25
const focusHandler = (e) => {
if (e.target.tagName === "INPUT") {
const errorMessage = validateInput(e.target);
displayError(e.target, errorMessage);
}
};
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 mousedown, focusout, mouseup, click 이벤트의 처리 순서를 이용한 방법을 생각해봤습니다. (링크)

focusout 이벤트를 핸들러를 폼에 추가하고, 타겟이 input일 때만 처리하도록 구현하셨군요 👍
포커스를 받을 수 없는 form 요소에 focusout 핸들러가 추가되어 있다는게 조금은 어색해 보이지만 제가 생각한 방법보다 훨씬 간결하다는 장점이 있네요!

Comment on lines +6 to +11
if (input.type === "password") {
input.type = "text";
img.src = "../images/eye-on.svg";
} else {
input.type = "password";
img.src = "../images/eye-off.svg";
Copy link
Collaborator

@soonoo27 soonoo27 Nov 11, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

요구사항 잘 구현해주셨습니다 👍

다만... type=password인 input 요소에는 영어 알파벳만 입력할 수 있습니다.
패스워드를 보여주기 위해 type=text로 변경하면 일시적으로 영어 이외의 문자도 입력할 수 있게 됩니다.
한글 문자열은 정의하신 비밀번호 패턴에 맞지 않기도 하고, 일반적으로도 영어 문자열만 패스워드로 사용하니 개선할 여지가 있어 보입니다!

import { user } from "./utill/db.js";

const form = document.querySelector(".sign-form");
const inputs = form.querySelectorAll("input");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

input 태그로만 요소를 선택하면 추후에 다른 input 요소가 문서에 추가되었을 때 의도하지 않은 동작이 발생할 가능성이 있어 보입니다.
조금 더 구체적인 셀렉터를 사용하는건 어떨까요?

account[name] = value;
});

let isSubmit = false;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(지극히 개인적인 의견) shouldSubmit이 의미를 더 명확하게 나타내는 이름 같아요.

boolean 변수 네이밍 관련해서 읽어보면 좋은 글:

auth/main.js Show resolved Hide resolved
@soonoo27
Copy link
Collaborator

이번 주도 고생 많으셨습니다 👍
관련 있는 코드들을 별도의 파일로 잘 분리해주셨습니다. 아직은 프로젝트 구조가 크지 않으니 문제 없어 보입니다.

다만 코드를 처음 접하는 사람은 아래와 같은 생각을 가질 수도 있다는 정도로 한번 읽어보시면 좋겠습니다.

  • util 디렉토리 내의 파일들이 같은 디렉토리에 위치하고 있음에도 저마다 다른 형태로 작성되어 있어 구조를 파악하기가 쉽지 않았습니다.

    • 일부 파일(constant.js, db.js)은 변수/상수를 export
    • 일부 파일(validation.js)은 함수를 export
    • 일부 파일(toggle.js)은 이벤트 핸들러를 정의하고 등록
  • 이벤트 핸들러 정의 및 등록이 main.js와 toggle.js에 분리되어 있고, 각 파일의 위치가 다른 이유가 궁금합니다.

  • toggle.js 파일의 이름은 너무 일반적인 것 같습니다. 토글 이벤트 핸들러라는 점이 드러나면 좋겠습니다.

@soonoo27 soonoo27 merged commit 0f2c243 into codeit-bootcamp-frontend:part1-권부근 Nov 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants