-
Notifications
You must be signed in to change notification settings - Fork 6
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
[FE] 비밀번호 변경 기능을 구현한다 #950
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
빠른 시간안에 저를 도와 구현을 완료해주신 제이드 정말 감사합니다..!! 정말 대단하신데요! 👍 stepper 가 조금 까다로운 로직인데, 제이드 코드 정말 깔끔해서 감탄하면서 봤네요!
onSuccess: () => setIsComplete(true), | ||
onError: error => setPostErrorMessage(error.message), | ||
}); | ||
const handleClickNext = () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
사소한 건데 한칸 띄우면 좋을 것 같아요:)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
반영하였습니다.
|
||
const canMove = isEmailValid && isComplete; | ||
|
||
const handleKeyDown = (event: React.KeyboardEvent) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
접근성 챙기신 것 좋습니다👍👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍👍👍
@@ -82,7 +83,7 @@ const SignInPage = () => { | |||
<FormField onKeyDown={handleKeyDown}> | |||
<FormField.Label label="이메일" /> | |||
<FormField.Input maxLength={254} value={email} name="email" onChange={onChangeEmail} /> | |||
<FormField.ErrorMessage value={getEmailErrors()} /> | |||
{getEmailErrors() && <FormField.ErrorMessage value={getEmailErrors()} />} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분을 바꾸신 이유가 있을까요? 개인적으로 layout 변경을 최소화하기 위해 errorMessage의 공간을 남겨두셨는데, 이유가 궁금해서요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
예전에 그렇게 한 뒤로 계속 고민하였는데,
미리 간격을 만들어 놓으니 공간차지가 과도하게 많아 UI가 많이 안 이쁘다는 점이 가장 크고
토스나 다른사람들 코드들을 참고해보니 에러상황에서 layout change가 발생하게끔 짜시는분들이 많길래 이렇게 하였습니다 !
isValidated: isEmailValid, | ||
} = useValidateInput({ | ||
initialValue: '', | ||
validates: [], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아 이게 코드 관련된 함수였군요! getCodeError 등으로 Email 대신 code 로 수정하셔야 할 것 같습니다!
|
||
return ( | ||
<> | ||
<Header left={<Header.Backward onClick={handleClickBackward} />} /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Step 이랑 관련 없이 Logo Header 부분이 반복되는 것 같은데, 이를 부모 컴포넌트로 빼지 않은게 의도적인 걸까요? 아마 바쁘셔서 잊으셨을 수도 있을 것 같네요..!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
반영하였습니다
|
||
const canMove = isEmailValid && isComplete; | ||
|
||
const handleKeyDown = (event: React.KeyboardEvent) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 keyDown은 이정도면 유틸로 뺴도 좋을 것 같기도 하네요...! 지금도 나쁘지 않긴합니다!!
|
||
export default SendVerificationEmailStep; | ||
|
||
const S = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
사실 이렇게 반복되는 CSS의 경우 중복 코드가 많아서 고민이 많았는데요. 개인적으로 LandingPage 때 비슷한 걸 겪어서, 이럴 때는 상위에 공용 css 파일을 만들어 해당 파일을 다음과 같이 import 해서 사용하였습니다!
import * as CS from './style'
//CS는 commonStyle 이라는 뜻
제이드도 한번 고려해보시면 좋을 것 같아요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그러게요 스탭별로 동일한 스타일이라 유지보수하기도 하나의 파일로 관리하는 편이 좋을거 같습니다~!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
반영하였습니다
@@ -13,7 +14,7 @@ const FlexBox = { | |||
gap?: number | string; | |||
flexWrap?: string; | |||
width?: string; | |||
justify?: 'space-between' | 'around'; | |||
justify?: CSSProperties['justifyContent']; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
우와 이거 진짜 좋네요!!!!👏👏
${({ isSquare }) => (isSquare ? 'border-radius: 0.4rem' : 'border-radius: 10rem')}; | ||
${({ size }) => sizeStyles[size]}; | ||
${({ color }) => ColorStyles[color]}; | ||
${({ color, disabled }) => ColorStyles[disabled ? 'disabled' : color]}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이걸 빠뜨렸군요..?ㅎㅎ감사합니다!
<> | ||
{step === 0 && ( | ||
<SendVerificationEmailStep | ||
onNext={async (value: ResetPasswordArgs['email']) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
onNext로 스탭 넘어가는 동작을 상위 컴포넌트에서 처리한 거 정말 아이디어 좋은 것 같습니다!ResetPasswordArgs['email']
로 사용한것도, 신박하고 좋은 것 같습니다!! 나중에 객체에서 특정 속성 타입만 꺼낼 때 사용해 봐야 겠네요!!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수고하셨습니다~!! 멋지네용
자잘한 코멘트 적어놨는데 확인해보시고 반영하시면 될거 같습니당
그리고 radius 관련해서 이야기한번 나왔었는데 제대로 이야기 해보면 좋을거 같앙요~!
|
||
const canMove = isEmailValid && isComplete; | ||
|
||
const handleKeyDown = (event: React.KeyboardEvent) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍👍👍
display: flex; | ||
position: relative; | ||
|
||
width: 30rem; | ||
margin-bottom: 0.5rem; | ||
padding: 1.6rem; | ||
|
||
background-color: ${({ theme }) => theme.palette.background}; | ||
flex-direction: column; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
사소하지만 이후에 ${flexColumn} 으로 통일 가능할거 같아요~!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
적용하였습니다
|
||
background-color: ${({ theme }) => theme.palette.background}; | ||
flex-direction: column; | ||
border-radius: 1rem; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
radius 도 그때 이야기 한번 나왔는데 정확히 어떤 수치로 정할지 통일해봐야겠네요~!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
|
||
export default SendVerificationEmailStep; | ||
|
||
const S = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그러게요 스탭별로 동일한 스타일이라 유지보수하기도 하나의 파일로 관리하는 편이 좋을거 같습니다~!
생각해보니 기존기능을 해치는게아니라, 신규기능 추가를 dev에 하는 거라서 |
리뷰들 반영하였습니다. |
백엔드 api 엔드포인트 변경(몇글자수준), |
굳 확인했습니다~~!! |
❗ Issue
✨ 구현한 기능
flow 3스텝
-> 2. 확인코드 입력받아서 (확인코드검증하는 API콜)
-> 3. 그 후 비밀번호 패턴검증후 (최종 변경요청 API콜)
다음 스텝으로 버튼은 각 API콜들이 success일 때만 활성화.
멀티 스텝 페이지 패턴으로 구현했습니다.
부모페이지와 1,2,3 스텝을 담당하는 페이지로 구성됩니다.
API콜들, step 넘기기 관련 로직들은 부모페이지에 있고,
사용자 입력 UI, 검증은 자식(step)페이지들이 책임집니다
pages/ResetPasswordPage
파일이 가장 주된 파일입니다.(그 다음으로
components/ResetPassword/*
파일입니다.)따라서 저 파일 위주로만 봐주시면 됩니다.
2.mp4
📢 논의하고 싶은 내용
백엔드가 비밀번호변경API 아직 완성이안돼서 기다렸다가 머지해야 될 거 같네요
(원래는 이번주 완성하기로 되어있었는데 머지가 지연되고 있다하네요)
🎸 기타
참고 :
Button
이라는 공통컴포넌트가 원래 disabled일때 회색되어야하는데 안되고있었길래 되게해놨습니다.