-
Notifications
You must be signed in to change notification settings - Fork 0
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
feat: 비밀번호 재설정 페이지 퍼블리싱 및 API 연결 #233
Conversation
…ton에 disabled 옵션 추가
자고 일어나서 충돌 해결하겠습니다 ㅠㅠ 🥹😭 그 뒤에 구경와주세요,,, |
아놔 제목 수정을 안햇네여 |
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 handleResendEmail = async () => { | ||
setIsResending(true); | ||
resetTimer(); | ||
|
||
const response = await postAuthVerificationEmail({ | ||
email: fullEmail, | ||
verificationType: 'PASSWORD', | ||
}); | ||
|
||
if (response.error) { | ||
setError('이메일 인증을 완료해주세요.'); | ||
} | ||
setIsResending(false); | ||
}; |
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.
이거 제롬이 만든 usePreventDuplicateClick
써도 될듯합니다!
loading 관련된 상태의 변경을 가릴 수 있어서 쓰면 기능 분할도 되고 좋을듯합니다!
const handleResendEmail = async () => { | |
setIsResending(true); | |
resetTimer(); | |
const response = await postAuthVerificationEmail({ | |
email: fullEmail, | |
verificationType: 'PASSWORD', | |
}); | |
if (response.error) { | |
setError('이메일 인증을 완료해주세요.'); | |
} | |
setIsResending(false); | |
}; | |
const { disabled, handleClick } = usePreventDuplicateClick(); | |
const handleResendEmail = async () => { | |
resetTimer(); | |
const response = await postAuthVerificationEmail({ | |
email: fullEmail, | |
verificationType: 'PASSWORD', | |
}); | |
if (response.error) { | |
setError('이메일 인증을 완료해주세요.'); | |
} | |
}; | |
return { | |
..., | |
handleResendEmail: handleClick(handleResendEmail), | |
isResending: disabled, | |
} |
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.
좋은 의견 완전 굿굿👍
딱 useform 안 쓴 부분 정확히 짚어주셨네요!!
의견대로 반영을 해봤는데요, usePreventDuplicateClick
훅이 반환하는 handleClick
함수 타입이 Promise<void>
이어서 타입을 맞추려다보니 래핑하는 함수 만들고 타입 지정해주고 이런 게 복잡해더라구요,,, 그래서 전 코드가 낫다는 생각이 들었습니다!
혹시 지금 코드를 유지하는 건 어떠신가요?!!
대신 페카가 리팩토링 한 것 처럼 학교 이메일 보내는 부분에
이렇게 설정하는 건 좋은 것 같습니다!
결론은...
- 위 코드는 그대로 쓰고싶다.
- 하지만
usePreventDuplicateClick
도입은 매우 좋은 의견이니 이메일 보내는 부분에 쓰겠다.
입니다!!
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.
usePreventDuplicateClick
훅 만들때 제네릭으로 만들어둘걸 그랬네요... 수고하셨습니다!
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.
useFunnel 사용해 4단계로 구현했습니다.
이메일 인증에서 재전송 - 인증 안 하고 다음 스텝 넘어가려고 할 때 에러메시지도 다 녹화해주셔서 너무 편해요 👍👍👍👍👍
비밀번호가 암호화되어 있고 클라이언트 측에서 기존 비밀번호를 직접 비교할 수 없습니다! 하지만 서버로 요청 전송 후에는 비교가 가능합니다. 전 비밀번호와 같은 경우에는 에러를 반환하더라구요
이것도 궁금했는데............ 독심술 그만 써주세요
import { useForm } from 'react-hook-form'; | ||
import { STORAGE_KEYS } from '@/constants/storage.constant'; | ||
import { postChangePassword } from '@/home/apis/postChangePassword'; | ||
import { AxiosError } from 'axios'; | ||
import { AuthErrorData } from '@/home/types/Auth.type'; | ||
import { hasNumberAndEnglishWithSymbols } from '@yourssu/utils'; | ||
import { useParseFullEmail } from '@/hooks/useParseFullEmail'; |
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.
으앙 그러네요!!!
eslint가 갑자기 저장할 때 자동으로 실행이 안되는데 node modules 삭제하고 다시 install하면 뭔가 될까요...?
인터넷의 여러 방법을 시도해봤는데도 똑같네요 흑흑흑
일단 수동으로 pnpm eslint .
명령어 쳐서 import 정렬 해결했습니다!!
제 vscode 설정이 문제인 것 같아요 ㅠ 최근에 뭔갈 잘못 만졌나...
암튼 수정하긴 했는데 혹시 수정한 거 보리한테 에러 없이 보이는지 확인 부탁해도 될까요?!! 죄송해요 흑흑
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.
음.. eslint 적용 안되는 문제 원인이 너무 다양했어서 저도 딱 답은 못 드리겠지만!!
일단 지금은 import/order 잘 적용됐습니다
저도 뭔가 의심가는 게 있으면 슬쩍 디엠할게욧
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.
저번에 한나같은 경우는 VSCode 버전이 너무 낮아서 ESLint 적용이 안되더라구요😮
VSCode와 ESLint 확장 모두 최신 버전으로 업데이트 해보셔요!
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.
vscode 업데이트 했더니 잘 적용된다고 합니다!!! 휴
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.
그리고 VSCode setting.json
에 아래 설정을 추가하시는걸 추천드립니다!
"editor.defaultFormatter": "esbenp.prettier-vscode", // VSCode 기본 포매터를 `prettier`로 설정
"editor.formatOnSave": true, // 코드 저장할 때마다 포매팅 수행
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit", // 코드 저장할 때마다 고칠 수 있는 ESLint 오류 자동으로 고침
"source.organizeImports": "explicit" // 이거는 뭐더라..
},
serverError?.error === 'Auth-007' | ||
? '현재 비밀번호와 다른 비밀번호를 입력해주세요.' | ||
: serverError?.message || '비밀번호 변경 중 오류가 발생했습니다.'; | ||
setError('confirmPassword', { type: 'manual', message: 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.
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.
적극반영!!!!
너무 좋은 생각인 것 같습니댜
<StyledSubTitleText> | ||
비밀번호 재설정이 완료되었습니다. | ||
<br /> | ||
보안을 위해 재로그인해주세요. |
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.
저도 사실 의문인데... 에린에게 슬쩍...여쭤보고 오겠습니다 ㅎㅎ 답장 오는대로 공유하겠습니다!
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.
로그인 상태에서는 비밀번호 찾기
에 들어오지 못하게 해야 할 거 같아요!
예전에 (아마도) 페카가 만들어준 useRedirectLoggedInEffect()
쓰면 될듯용 ㅎㅎ
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.
근데 로그인을 하면 로그인 페이지 자체에 접근을 못하지 않나요?? 아닌가...
만약에 useRedirectLoggedInEffect()
이걸 쓴다면 로그인 페이지 자체에 거는 것도 좋을 것 같아요!
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.
아항. 저는 로그인 페이지를 거쳐서 - resetPassword로 들어오는 거 말고
직접 url 쳐서 resetPassword로 오는 걸 생각하고 단 코멘트였어요!!
쏠 말대로 로그인 상태에선 이미 접근이 안되니 화면 내에서는 해당 페이지에 접근할 방법이 없지만
url을 직접 치면 들어올 수 있어서요~~!
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.
아 그러네요!!! 로컬에서만 url 치고 들어올 수 있다고 생각을 하고 있었습니당... 하핳
fix: useRedirectLoggedInEffect 사용하여 로그인 상태에서 비밀번호 재설정 접근 금지 설정
그리고 로그인 상태에서 회원가입
에 들어오는 것도 막아둬야 할 것 같은데 이건 회원가입에 메일 찾기 링크
달아야 하는 부분이 있어서 이슈 파서 이거랑 같이 진행할게요!
아 요청 반환값이 다르군요. 알아갑니다! |
수정 끝난 거 같아 머지하겠습니다!!!!! 수고하셨어요 ^ㅅ^ |
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.
수고하셨습니다👍👍
email: string; | ||
} | ||
|
||
export const useEmailInput = ({ email, onConfirm }: EmailInputProps) => { |
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.
파일에서 하나의 훅만 반환하니 파일 이름과 커스텀 훅 이름을 똑같이 useEmailInputForm()
으로 맞추면 좋을 것 같아요!
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.
오 굿굿 감사합니당
다음 pr때 슬쩍 반영하겠습니다!
@@ -3,7 +3,7 @@ import { useState } from 'react'; | |||
import { ChangePasswordFrame } from '@/home/components/ChangePasswordContents/ChangePasswordFrame/ChangePasswordFrame'; | |||
import { CurrentPasswordForm } from '@/home/components/ChangePasswordContents/CurrentPasswordForm/CurrentPasswordForm'; | |||
import { NewPasswordForm } from '@/home/components/ChangePasswordContents/NewPasswordForm/NewPasswordForm'; | |||
import { SessionTokenType } from '@/home/types/GetPassword.type'; | |||
import { SessionTokenType } from '@/home/types/password.type'; |
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.
와 이것 때문에 빌드가 안되고 있었는데 고쳐주셨네요 감사합니다👍
근데 ESLint 오류나면 husky 때문에 커밋이 안올라가야 할텐데🤔
내일 숨조 VSCode 설정 검사 가겠습니다
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.
근데 ESLint 오류나면 husky 때문에 커밋이 안올라가야 할텐데🤔
저도 (갑자기) 안됐었는데 vscode 업데이트 하니까 린트 설정 매우 잘... 되더라구여
@jonique98 혹시,,,? 업데이트 추천합니댜
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.
제말그말.........
근데 쭌은 허스키 되나요?? 제 로컬에서도 안되길래 (lint 어겼는데 커밋됨 황당;;) 전...... 로컬 설정 문제가 아닌줄
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.
저도 ESLint 오류가 발생한 코드로 커밋을 시도해본 적이 없어서 모르겠네요😮
로컬에서도 husky가 작동 안하면 husky 설정에 문제가 있는게 맞는 것 같네요!
이 또한 내일 살펴보는걸로..
<PlainButton type="button" size="medium" isPointed={false} isWarned={false}> | ||
<StyledBottomButtonWrapper>학교 메일 찾기</StyledBottomButtonWrapper> | ||
<StyledBottomButtonWrapper> | ||
<StyledLink href={MAIL_SEARCH_URL} target="_blank" rel="noopener noreferrer"> |
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.
rel="noopener noreferrer"
는 어떤 역할을 하는 건가요?
절대 찾아보기 귀찮은거 아닙니다
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.
target="_blank"
이걸로 새 창에서 열게 하는 건데
noopener
이거는 원래 창과의 연결을 끊어서 새 창이 원래 창에 접근하는 것 막고
noreferrer
이거는 원래 페이지의 URL이 새 창에 전달되지 않도록 한다고 합니당
사실 보이는데 차이는 없는 것 같은데;; 같이 쓰는게 보안상 좋다고 해서 썼습니다!
* chore: setting eslint, prettier, path alias * style: remove file, setting gitignore * chore: install package - axios - @tanstack/react-query - react-router-dom - recoil - styled-components * docs: update pr template, owners, assignees * chore: install storybook * chore: install @types/styled-components * chore: setting folder structure * feat: setting basic router - w. (setting RecoilRoot, QueryClientProvider) * chore: issue template추가 (#1) * chore: install @yourssu/design-system-react * docs: fix codeowners file * docs: fix CODEOWNERS * feat: Layout 컴포넌트 생성 * feat: 서랍장 관련 route에 Layout 컴포넌트 적용 * design: StyledLayout min-height, padding-bottom 지정 - 80px은 Footer의 height와 같음 * feat: add styled-components.d.ts * feat: add Button * feat: add Footer - 추후 폰트 수정 필요 * feat: remove unnecessary type * feat: 카테고리 유형 컴포넌트 제작 * fix: Styled 네이밍 수정 * feat(drawer): `HeaderLogo` 컴포넌트 구현 * feat(drawer): `HeaderTabs` 컴포넌트 구현 * style(drawer): `HeaderLogo` 가운데 정렬 되도록 수정 * feat(drawer): `HeaderSearchInput` 컴포넌트 구현 * feat(drawer): `HeaderIconButton` 컴포넌트 구현 * style(drawer): `StyeldFooter` -> `StyledFooter`로 컴포넌트 이름 수정 * fix: 디스트럭처링으로 순회하도록 코드 수정 * fix: px -> rem 단위로 수정 * feat: category 리스트 Layout 작업 * fix: 카테고리 컴포넌트 margin-top 값 추가 * style(drawer): `px` -> `rem` 단위로 변경 * style(drawer): 오른쪽 패딩 20rem(320px) 적용 * chore: index.css 내 button 태그 기본 스타일 삭제 * chore: src/assets에 임시 이미지 저장 - svg 파일은 추후 YDS Icon으로 변경 예정 * feat: `Card` 컴포넌트 구현 - Home, Drawer에서 사용할 Card 컴포넌트 구현 * feat: 서랍장용 `Card` 컴포넌트 구현 - 공용 컴포넌트를 조합해서 서랍장용 Card 컴포넌트를 구현. 용도와 사이즈에 따라 파일을 분리했습니다 * chore: upgrade @yourssu/design-system-react * refactor: StyledBigThumbnail, StyledSmallThumbnail 컴포넌트 통합 - width, border-radius를 props로 받아서 처리하는 StyledThumbnail 컴포넌트로 합침 * refactor: CardSetting prop onClick 추가 - menu-list와 관련된 로직은 UserDrawerCard에서 내려주도록 함 * refactor: `FlexContainer`, `FlexGrowItem` 컴포넌트 구현 - `Card` 컴포넌트에 적용도 동시에 함 * feat: `CardContent` 컴포넌트에 YDS Icon 적용 - 임시로 넣어뒀던 star svg 삭제 * feat: `CardSetting` 컴포넌트에 YDS Icon 적용 - 임시로 넣어뒀던 setting svg 삭제 * fix: Card.style.ts에서 props 사용 시 괄호 밖으로 ; 빼기 * feat: `StyledBookmarkContainer` 컴포넌트 추가 * feat: Home용 `RankDrawerCard` 컴포넌트 구현 - 공용 컴포넌트인 Card 컴포넌트를 활용하여 구현 * feat: `DrawerRanking` 컴포넌트 구현 - Home에서 사용되는 '금주의 서랍장 랭킹' 컴포넌트 입니다. * style: 배열 map함수에서 key값 추가 * design: padding 값 수정 - '전체보기' 버튼 오른쪽 padding 추가 - '서랍장 카드' 아래쪽 padding 추가 * rename: `Home` 컴포넌트 파일 위치 수정 * remove: 불필요한 css 코드 제거 - react-router-dom의 Link는 자동으로 cursor pointer가 적용되기 때문에 중복되는 css 코드인 cursor pointer 삭제 * style: RankDrawerCard 컴포넌트명 변경 - 파일명과 동일하도록 `RankCard` -> `RankDrawerCard`로 컴포넌트 명 변경 - export 방식 변경 * rename: Home 컴포넌트에서 쓰이는 아토믹한 컴포넌트 파일 위치 변경 - `DrawerRanking`, `RankDrawerCard` 컴포넌트를 `/src/home/components`로 위치 변경 - `Home` 컴포넌트를 `/src/home/pages`로 위치 변경 * style: change the Button, Footer unit (px -> rem) * design: add cursor, hover style in Button * feat: add GrayButton - drawer '더보기' 버튼 * feat: add drawer main image (4x) - 화질 유지를 위해 4x로 사용합니다. * feat: implementation drawer main page - export const 형식으로 변경합니다. * design: modify Header - sticky 설정 시 top: 0을 같이 설정해주어야 정상 작동합니다. - 기존 background 속성이 투명이라 흰색으로 설정해주었습니다. * design: modify Category - Category 또한 스크롤과 관계없이 항상 보이도록 수정합니다. - rem 값 수정 (figma dev mode) * style: modify drawer pages path - export default -> export const * remove: src/components/Test * fix: fix Footer text error * style: remove font-style in YDS typo * design: modify Category, Ranking layout * feat: 홈화면 네비바 작업 (#23) * chore: issue template추가 * feat: 로그인,미로그인시 네비바 * fix: dropdown폴더 루트로 이동 * remove: common 폴더 삭제및 하위 파일들 경로 수정 * fix: isProfileClicked네이밍 수정 & HomeLayout router.tsx에 반영 * fix: dropdown텍스트 spacing제거, padding추가 * fix: 프로필이미지 cursor추가 * refactor: navbar 시맨틱 태그로 변경 * [FEAT] normalize css추가 및 드롭다운 컴포넌트 리펙토링 (#30) * feat: normalize css추가 * style: 드롭다운에 left속성 추가 * style: img태그 normalize속성 제거 * remove: normalize.css삭제 및 index.css에 추가 * fix: main.tsx에서 normalize삭제 * feat: Search화면 실시간 검색어 컴포넌트 및 검색 결과 없음 페이지 구현 (#10) (#31) * feat: RealTimeKeyword 컴포넌트 제작 * feat: NoResultPage 컴포넌트 제작 * chore: 이미지 파일 위치 변경 * style: YDS 적용 * feat: 시간 앞에 0 붙히기 * chore: 이미지 파일 위치 수정 * style: 코드 리뷰 반영 * refactor: 코드 리뷰 반영 * style: border yds 수정 * style: 코드 리뷰 반영 * refactor: 코드 리뷰 반영 * design: 랭킹 숫자 크기 변경 * refactor: IconContext 적용 * chore: 이미지 위치 수정 --------- Co-authored-by: george <hyunrim03@naver.com> * feat: 서랍장 상세 페이지 상단 화면 구현 (#32) * refactor(drawer): `Header` 컴포넌트가 YDS Icon을 사용하도록 수정 * feat(drawer): `ServiceDetail` 컴포넌트 라우터 연결 * feat(drawer): `BackgroundImage` 컴포넌트 구현 * feat(drawer): `TitleText`, `DeveloperText`, `Thumbnail`, `Category` 컴포넌트 구현 * feat(drawer): `YDS BoxButton`으로 DOWNLOAD, Github 버튼 구현 * chore(drawer): TODO 주석 수정 * feat(drawer): `IconButton` 컴포넌트 구현 * fix(drawer): `FlexContainer`가 `children` props를 선택적으로 받을 수 있도록 수정 * refactor(drawer): normalize css 적용으로 인한 `Header` 컴포넌트 리팩토링 * style(drawer): `Header` 구분선 추가, css `%` 단위로 리팩토링 * rename: `realTimeKeyword.png` 파일 위치 변경 및 이미지 변경 - `realTimeKeyword.png`가 Home과 Search 모두 사용되어 파일 위치 수정 - `realTimeKeyword.png`의 파일 위치 변동으로 인한 `RealTimeKeyword`의 import 문 수정 - `realTimeKeyword.png` x4 png 파일로 변경 * feat: `SearchKeyword` 컴포넌트 구현 * design: `SearchKeyword` css 코드 수정 - border 두께 고려한 padding 수정 - 피그마와 동일하도록 height 및 padding 값 수정 - 키워드 열 간 간격 추가 * style: `SearchKeyword.style.ts` 파일에서 interface 선언해 이용하도록 수정 * style: YDS 폰트 적용 * chore: yarn add react-hook-from * chore: yarn add use-debounce * feat: search 검색바 및 검색 결과 리스트 아이템 컴포넌트 제작 * feat: add Spacing * feat: add useForm * feat: add SearchBar * style: px -> rem 수정 * feat: add ResultListItem * fix: 폴더 구조 수정 * feat: Logo 클릭시 홈으로 이동 * fix: 썸네일 5개 이상인 경우, countBox 추가 * fix: Spacing 컴포넌트 폴더 이동에 따른 수정 * refactor: Spacing 컴포넌트 리팩토링 * refactor: SearchBar 컴포넌트 useNavigate -> Link 리팩토링 * refactor: X Button 관련 사항 리팩토링 * fix: Error type ResultListItem.type.ts -> Common.type.ts 폴더 이동 * refactor: value -> searchInputText 네이밍 변경 * fix: SearchIcon YDS 적용 * fix: searchBar / searchBox 스타일 파일 분리 * refactor: logo 중복 파일 제거 및 경로 수정 * fix: convetion 통일 XButton.svg -> x_button.svg 네이밍 수정 * refactor: YDS 컬러 통일 및 hex -> rgba * refactor: export default -> export 통일 * refactor: icon IcXcircleFilled YDS 적용 * refactor: Spacing 경로 수정 @/search -> @/components * refactor: 상대경로 -> 절대경로 수정 * fix: backend API 수정에 따른 response 값 수정 * refactor: styled 코드로 통일 * refactor: StyledThumbnailImage 가독성 증가 - Spacing -> gap 변경 - map으로 변경 * refactor: icon cursor YDS 적용 * refactor: svg 파일 분리 * feat: 서랍장 상세 페이지 하단 화면 구현 (#38) * refactor(drawer): `Header` 컴포넌트가 YDS Icon을 사용하도록 수정 * feat(drawer): `ServiceDetail` 컴포넌트 라우터 연결 * feat: `BackgroundImage` 컴포넌트 구현 * feat: `ServiceDetail` 하단 영역 퍼블리싱 * design: StyledBackgroundImageContainer 크기 수정 - height, padding-left 값 조절 * fix: Header 병합 오류 수정 - 병합 완료 안됐는데 모르고 있었음 * feat: `StyledCarousel` 휠 이벤트 추가 - 스크롤 감지하면 가로 스크롤 이동시킴. 버튼 생길 시 제거 예정 * feat: `StyledCarousel` 슬라이드 버튼 추가 - 휠 이벤트 제거 * fix: 레이아웃 깨짐 현상 수정 - 너비가 작을 때 하단 영역 컨텐츠가 잘리는 현상을 수정했습니다 * design: `StyledCarousel` scroll-behavior 추가 --------- Co-authored-by: 2wndrhs <2wndrhs@gmail.com> * style: 서랍장 상세 화면 디자인 수정 (#51) * �feat: 카드 레이아웃 작업 및 Setting 드롭다운 작업 * feat: 카드 컴포넌트 검색 결과 유무에 따른 변동 작업 검색, 즐겨찾기, 내서랍장 별로 분기 * feat: 내서랍장일 때 UserDrawerCard 적용 * fix: mydrawer일 때 카드 컴포넌트에 나타나는 Setting 드롭다운 구현 서비스 수정 및 서비스 삭제 드롭다운 * rename: drawerNot.png -> noResultDrawer.png * fix: rename에 맞게 import 코드 수정 * fix: 카드 레이아웃 컴포넌트 margin-bottom: 4rem; 추가 * refactor: EmptyScreen 컴포넌트 분리 + NOT_FOUND_TEXT 상수 대문자 처리 * fix: 드롭다운 bottom="-4.5rem"로 수정 Co-authored-by: 이유진 <youjin6325@naver.com> * fix: type="mydrawer" -> type="MYDRAWER" Co-authored-by: hanna <hanna.urssu@gmail.com> * fix: StyledDropdownContainer 이름 수정 및 style 파일로 이동 --------- Co-authored-by: 이유진 <youjin6325@naver.com> Co-authored-by: hanna <hanna.urssu@gmail.com> * feat: Home 화면 SNS 컴포넌트 및 홈화면 구성 일부 구현 (#44) * feat: sns 아이콘 이미지 추가 * feat: `SocialNetworkService` 컴포넌트 구현 * feat: `SocialNetworkSerivce` 컴포넌트 내 아이콘 링크 수정 * fix:`SocialNetworkService` 컴포넌트 내 map 함수 요소에 key값 추가 * design: `SocialNetworkService` 디자인 요소 수정 - Container 높이가 외부 요소로 늘어나지 않도록 수정 - 아이콘 이미지가 보이지 않는 문제 해결 - pointer 범위가 최대한 아이콘과 동일하도록 radius 요소 추가 * fix: `StyledNetworkService` 내 아이콘 링크 연결 * feat: `DrawerRanking`, `SearchKeyword`, `SocialNetworkSerivce` 컴포넌트를 조합하여 Home 페이지 일부 구현 * refactor: 데이터 호출을 각 컴포넌트에 하도록 구성 - 더미데이터 위치 수정 * style: `export default` -> `export const`로 수정 * style: `export default` -> `export const` 수정으로 인한 import 문 수정 * style: 추후에 변경해야 하는 코드 주석 표시 * fix: Dropdown style.ts dom warning * feat: 내 서랍장 페이지 퍼블리싱 (#55) * fix: 서랍장 `Button` 컴포넌트 typo 스타일 수정 - caption0 ➡ button2 * feat: `MyDrawer` 탭 기능 구현 - Stars, My Products 탭을 오가는 기능을 구현했습니다. * refactor: `CardLayout` 내 empty screen 관련 상수 파일로 분리 * refactor: `ButtonProps` 타입이 React.ButtonHTMLAttributes를 확장하도록 수정 - 기존 button 태그의 속성 사용을 위함 * design: `Button` 컴포넌트 텍스트 정렬 스타일 추가 - 세로 정렬이 없어서 글자가 살짝 내려가 있었음 * chore: mydrawer.constant.ts 파일 추가 - 내 서랍장 페이지에서 사용하는 텍스트를 상수로 분리 * feat: `CardLayout`, `EmptyScreen`를 사용한 내 서랍장 컨텐츠 추가 - 탭 버튼 아래에 서비스 목록 or 빈 화면 JSX 추가 * refactor: 서랍장, Home화면 Card 컴포넌트 리팩토링 (#60) * refactor: `CardSetting` 스타일 적용 방식 수정 - height 지정 onClick을 SVGElement로 전달 hex -> useTheme * refactor: `CardContainer` 컴포넌트 div로 수정 - UserDrawerCard에서 중첩 Link가 생기는 일을 막기 위함 * refactor: `DropdownProps` 타입이 React.HTMLAttributes을 확장하도록 수정 - onClick 속성 사용을 위함 * fix: style.ts dom warning, folder 중복, path error 해결 (Search) (#59) * feat: move RealTimeKeyword component - component -> components * fix: style.ts dom warning in Search * fix: lint error in NoResult * fix: path error in type.ts * remove: remove test code in Search * rename: searchBox -> SearchBox * feat: 서랍장 서비스 등록 페이지 Input 컴포넌트 구현 (#54) * feat: implement Input * feat: implement Register basic layout * refactor: remove input length props * design: add input warned color * refactor: add isNecessary props * design: add overflow-x props in Layout * feat: add media query & remove width props * design: add media in StyledInput typo * refactor: remove isNecesary props - add props.required * feat: Home 화면 공지 컴포넌트 구현 (#52) * feat: 공지사항 컴포넌트 구현 - `Notification` 컴포넌트 구현 - 자동 슬라이드 구현 * design: `Notification` 컴포넌트 내부 너비 조정 * feat: `Notification` 컴포넌트 Home에 적용 - 스타일 컴포넌트 명 수정 및 마진 값 추가 * style: `px` -> `rem`으로 단위 수정 * fix: `Notification` 자동 슬라이드 스타일 지정 방식 수정 - `useInterval` 훅 생성 * rename: `useInterval` 파일 위치 `src/home/hooks` -> `/src/hooks`로 이동 - `useInterval` 내부에서 사용되는 props 관련 타입명 수정 * style: 공지 배열 map 함수의 key값 적용을 위한 배열 구조 변경 * feat: 서랍장 서비스 등록 페이지 TextArea 컴포넌트 구현 (#67) * feat: `TextArea` 컴포넌트 구현 * style: `Input` 컴포넌트 스타일 수정 * style: `TextArea`에 텍스트가 있을 때 border-bottom 색상을 `buttonNormalPressed`로 변경하도록 수정 * style: `Input`에 텍스트가 있을 때 border-bottom 색상을 `buttonNormalPressed`로 변경하도록 수정 * feat: 서랍장 서비스 등록 페이지 카테고리 체크박스 컴포넌트 구현 + 경고문 (#63) * fix: Category IsAllProps 추가 및 isAll에 따른 컴포넌트 분기 CategoryProps에 subcategories 추가(등록페이지에 이용) * feat: CategoryWithoutAll 컴포넌트 작업 등록페이지 카테고리 등록 컴포넌트 * feat: 경고문 컴포넌트 WarningBox 작업 모바일 화면 시 WarningAccodian으로 변경 * fix: gap, margin 값 수정 * fix: CheckBox size='medium'으로 수정 * feat: CategoryWithoutAll 시, 두 개 이상 선택 안되도록 수정 * feat: add category, warning in Register * fix: YDS 타이포 적용 * fix: WarningBox 우측 정렬 * fix: YDS color 적용 * fix: isAll = true 일 때, CategoryList 수정 "전체" 요소가 안나오는 문제 해결 * fix: YDS color 코드 수정 앞에 color: 붙이기! * fix: margin-right 값 경고문에만 적용되도록 수정 * fix: 카테고리 컴포넌트 위치 조정 * refactor: 삼항 연산자 -> 병합 연산자로 적용 Co-authored-by: 이중곤 <2wndrhs@gmail.com> * refactor: 불필요한 isAll props 관련 수정 * rename: Accodion -> Accordion으로 모두 수정 * refactor: 24.375 * 16 -> `MOBILE_VIEW_WIDTH` constant로 수정 * feat: isAccordionOpen 시, IcArrowUpLine 적용 --------- Co-authored-by: Hanna922 <hanna.urssu@gmail.com> Co-authored-by: 이중곤 <2wndrhs@gmail.com> * feat: change mobile breakpoint (#72) * feat: 로그인 퍼블리싱 (#61) * feat: 로그인 퍼블리싱 * refactor: 시맨틱태그 수정 * fix: 비밀번호 suffix제거 * fix: Link로 변경 * fix: watchQuery삭제 * fix: 머지후 충돌 병합 * feat: 서랍장 서비스 등록 페이지 반응형 헤더 구현 (#75) * style: `SearchContainer` border 색상 변경 * fix: `Logo` 클릭 시의 라우팅 경로 수정 * feat: `useMediaQuery` 커스텀 훅 구현 * style: `Layout` 컴포넌트 `overflow-x` 속성 제거 * feat: 모바일 && 서랍장 등록 페이지라면 `MobileRegisterHeader`를 보여주는 기능 구현 * feat: `MobileRegisterHeader` 컴포넌트 구현 * chore: 사용하지 않는 `serviceId` 변수 주석 처리 * feat: 링크 유효성 검증 및 등록 페이지 레이아웃 작업 (#74) * feat: add warning design in TextArea LabelTitle * feat: add checkValid func in Input * feat: implement layout in Register * design: modify WarningBox style * refactor: link Input (add map, constant) * rename: register link url * feat: 서치 무한 스크롤 기능 구현 (#71) * refactor: searchBox에 react-hook-form 적용 * fix: StyledTitle overflow 잘림 버그 픽스 * fix: styled component 적용 안된 부분 수정 * fix: useForm 삭제 * refactor: state 관리 위치 수정 - SearchBox -> SearchBoxSvg 내부 * fix: api 수정에 따른 type 수정 * feat: 무한 스크롤 기능 구현 * refactor: log 삭제 * refactor: 불필요한 type 삭제 * fix: 무한스크롤 noResult 등장 버그 해결 * fix: api 수정에 따른 타입 변경 * refactor: 타입 단언 -> 제네릭 활용 * fix: query와 input 값 일치 / focus 문제 해결 * refactor: 불필요한 주석 삭제 * refactor: thumbnail length 상수화 * refactor: Search 폴더 이동 * refactor: 불필요한 코드 삭제 * refactor: YDS 색상 적용 * feat: 카테고리 및 경고문 validation isWarned 추가 (#83) * feat: 전체 포함 카테고리 중복 선택 불가로 수정 * feat: CategoryWithoutAll isWarned Props 추가 + isWarned 시 디자인 추가 * feat: 경고문 validation isWarned Props 추가 + isWarned 디자인 추가 * refactor: 카테고리 id -> category 문자열로 변경 * feat: 서랍장 등록 페이지 썸네일 이미지 및 소개 이미지 첨부 작업 (#78) * feat: 썸네일 이미지 첨부 작업 * feat: 소개 이미지 첨부 작업 * refactor: console.log 삭제 * style: OverviewImage와 ThumbnailInput 간격 조정 * style: 반응형 24.375rem -> 30rem으로 수정 * feat: 첨부된 파일 삭제 버튼 추가 + OverviewImage.style 레이아웃 스타일 관련 수정 * refactor: console.log 삭제 * style: 폰트 수정 * style: margin-top 수정 * rename: 철자 틀린 부분 수정 + isWarned 옵셔널로 변경 * refactor: OverviewFileUpload 따로 컴포넌트로 분리 및 key 관련 수정 + splice -> filter 로 수정 + handleFileChange 핸들러 수정 * remove: console.log --------- Co-authored-by: Hanna922 <hanna.urssu@gmail.com> * feat: 마이페이지 퍼블리싱 구현 (#79) * feat: 유저 정보 섹션 구현 * feat: 유저 정보 섹션 닉네임 편집 모드 추가 * feat: 마이페이지 메뉴 목록 구현 * feat: 마이페이지 구현 및 라우팅 설정 * feat: 마이페이지 메뉴 리스트 중 서랍장 관련 메뉴 링크 연결 * fix: ListItem 중 isPressed 된 부분 삭제 * fix: 프로필 편집 모드에서만 설정 버튼이 보이도록 수정 * fix: 서랍장 이동 링크 수정 Co-authored-by: 이유진 <youjin6325@naver.com> --------- Co-authored-by: 이유진 <youjin6325@naver.com> * feat: 서랍장 서비스 삭제 모달 구현 (#80) * chore: `@radix-ui/react-dialog` 라이브러리 추가 * style: `Card.Setting` 아이콘의 수직 정렬 방식을 `flex`로 변경 * fix: `Dropdown` 컴포넌트가 `ref`를 받을 수 있도록 수정 * style: `Header` 컴포넌트의 `z-index`를 0으로 수정 * feat: `ServiceRemoveModal` 컴포넌트 구현 * fix: `ServiceRemoveModal` 트리거 제거 * refactor: `UserDrawerCard` 구조 변경 * style: `px` -> `rem` 단위로 수정 * chore: eslint 오류 제거를 위한 import문 주석 처리 * feat: 실시간 검색어 API 연동 (#85) * design: 실시간 검색어 키워드 높이 추가 * refactor: API CORS 에러 수정에 따라 BaseURL 변경 * feat: 실시간 검색어 키워드 API * feat: 실시간 검색어 키워드 데이터 타입 설정 * feat: 기존 시간 로직 변경 * chore: 메인 화면 초기화 * feat: 실시간 검색어 키워드 쿼리 설정 * docs: 기존 search 삭제 * fix: min-width 적용 * fix: 최대 너비 스타일 수정 * fix: Suspense 사용을 통한 로직 간단화 * fix: useSuspenseQuery로 수정 * refactor: query 배열에 대해서 readonly 타입 설정 * feat: formatDateTime 함수 -> utils 분리 * chore: webp 이미지 추가 * design: webp 적용 * chore: 이미지 삭제 --------- Co-authored-by: george <hyunrim03@naver.com> * refactor: 내 서랍장 페이지 초기 currentTab 설정 방식 수정 (#88) * refactor: 내 서랍장 페이지 초기 currentTab 설정 방식 수정 - query string에서 따온다! * refactor: 불필요한 함수 제거 - 삼항 연산자로 `getTabFromURL`을 대체, isTabType 인자 타입 수정 * refactor: `handleClickTab` 인자 타입 수정 - target 말고 TabType 바로 받아서 설정하는 방식 * feat: 서랍장 프로덕트 등록 페이지에 react-hook-form 연결 (#91) * feat: 서비스 이름, 간단한 설명, 내용에 react-hook-form 연결 * feat: 서비스 링크에 react-hook-form 연결 * design: 상단 `StyledImportText`에 $isWarned 추가 - 링크쪽 StyledImportText는 색이 변하지만 상단 StyledImportText는 무조건 검정이라, false로 넣어줌 * feat: 카테고리에 react-hook-form 연결 - `Input` `TextArea` 값 확인 방식을 formState.errors에서 getValues()로 변경 * feat: 썸네일 이미지에 react-hook-form 연결 * feat: 소개 이미지에 react-hook-form 연결 * feat: `WarningBox` 값에 따라 제출 막기 - handleSubmit 내에서 isChecked가 true인 경우에만 데이터 출력 * design: WarningBox 레이아웃 문제 해결 - OverviewImage, BoxButton과의 간격 확보 * Revert "design: WarningBox 레이아웃 문제 해결" This reverts commit 5dc4da511453a3596965e983fdc4ce13bc251852. * Revert "Revert "design: WarningBox 레이아웃 문제 해결"" This reverts commit abb8a9773102371c816fec0da7696355a5d98107. * chore: `Register` handleSubmit 주석 추가 - 나중에 추가할 서버 데이터 타입(ProductRegisterRequest)으로 타입 지정 필요 * refactor: useEffect 의존성 배열에서 `setIsWarned` 삭제 * refactor: `CategoryWithoutAll` useEffect 조건문 삭제 - 기존에 if문의 조건이었던걸 바로 setIsWarned로 넣음 Co-authored-by: Chaeyeon Seo <94633589+seocylucky@users.noreply.github.com> * chore: `CategoryWithoutAll` 들여쓰기 수정 - 깃허브에서 바로 커밋하느라 들여쓰기 체킹이 안됐었음 * refactor: `Input` validate return 타입 변경 - string | undefined -> boolean --------- Co-authored-by: Chaeyeon Seo <94633589+seocylucky@users.noreply.github.com> * feat: 서치 페이지 반응형 / 에러 핸들링 및 로딩 처리 구현 (#86) * fix: img onError시 대체 이미지 설정 * feat: ErrorBoundary 제작 * chore: yarn add react-lottie * feat: loading 파일 생성 * fix: favicon 디자인과 다른 부분 수정 * refactor: preconnect 추가 * fix: 백엔드 api CORS 해결에 따른 변경 * feat: 서치 페이지 반응형 구현 * fix: favicon 이미지 로드 실패시 대체 이미지 설정 * refactor: 검색 결과 로딩 및 검색 결과 없음 표시 방식 리팩토링 작업 * fix: error 상태(no result) 지속되는 문제 해결 * refactor: useGetSearch / useTotalSearch 통합 * fix: 불필요한 코드 제거 * fix: 불필요한 네트워크 요청 줄이기 * refactor: getSearch 응답 data 타입 정의 * fix: api url 변경에 따른 수정 * refactor: 불필요한 코드 삭제 및 수정 * chore: upgrade @yourssu/design-system-react (#97) - 1.0.0 -> 1.0.1 * fix: 확장자 수정 (#99) 에러 뜨는 확장자 수정 * fix: lint-error (#103) fix: lint-error * chore: 라우터 적용에 따른 vercel.json 추가 (#104) chore: 라우터 적용에 따른 vercel.json 추가 * fix: 랭킹 페이지 `Category` 에러 해결 (#96) - react-hook-form 훅은 등록 페이지에 있는 `Category`에서만 호출하게 분리 * chore: install @yourssu/logging-system-react (#106) * feat: 서랍장 서비스 등록 API 연결 (#108) * feat: `drawerClient` axios 인스턴스 추가 * feat: `uploadImages()` API 요청 함수 추가 * refactor: `ImageListResponse` 타입 분리 * feat: `registerProduct()` API 요청 함수 추가 * feat: `Loading` 컴포넌트 추가 * feat: `useRegisterProduct()` 커스텀 훅 추가 * feat: `Register` 컴포넌트 API 연결 * refactor: `ImageListResponse.type.ts` -> `image.type.ts`로 이름 변경 * fix: `baseURL` 환경변수로 분리 * refactor: `useRegisterProduct` -> `usePostRegisterProduct`로 이름 변경 * feat: `RegisterFormValue` 타입 추가 * refactor: `registerProduct()` 함수 `product` 매개변수에 타입 적용 * feat: 로그아웃 모달 구현 (#92) * feat: 로그아웃 모달창 구현 * fix: `RealTimeKeywordImage` 구성 일부 수정 - 뿌슝이 이미지 .png -> .webp로 변경 - 검색 키워드 클릭시 이동하는 링크 변경 * rename: Home 페이지 파일 위치 이동 * fix: `LogoutModal`에서 close 안되는 문제 해결 * feat: 마이페이지 로그아웃 메뉴와 모달창 연결 * fix: 임시 타이포를 YDS 타이포로 변경 및 YDS 변경으로 인한 타이포 값 변경 * fix: 디자인 수정에 따라 로그아웃 모달 내 텍스트 삭제 * feat: 서랍장 상세 페이지 API 연결 (#109) * feat: `ProductDetailResult` `ProductDetailResponse` 타입 생성 * feat: `ProductDetailResult` 타입에 `webpageUrl` 속성 추가 * feat: drawerClient, 상세 정보 api 함수 추가 * feat: 상세 정보 query 추가 * feat: `ProductResult` `ProductResponses` 타입 생성 * feat: 제작자 서비스 더보기 api 함수 추가 * feat: 제작자 서비스 더보기 query 추가 * refactor: actionType, category 속성 별도의 타입으로 분리 * refactor: baseUrl 환경변수화 * feat: `MoreProductSection` 썸네일 이미지 추가 - SmallDrawerCard props 중 smallImgSrc로 mainImage를 넘김 * refactor: useQuery select()를 사용한 data 빼내기 * refactor: `MoreProductSection` 컴포넌트를 /drawer/components 하위로 분리 * refactor: `getProductByProvider` page 인자 추가, 파라미터 위치 수정 - url에 백틱으로 넣던 파라미터를 params 객체로 옮김 * design: hex 값 YDS 컬러로 바꾸기 - base color logoXXX는 semantic color로 pointXXX임 * refactor: `useGetProductByProvider` queryKey에 수정 - 'productByProvider'를 추가함 Co-authored-by: hanna <hanna.urssu@gmail.com> --------- Co-authored-by: hanna <hanna.urssu@gmail.com> * feat: 이미지 첨부 시, 이미지 파일만 첨부될 수 있도록 조건 추가 (#101) * feat: 이미지 첨부 시, 이미지 파일만 첨부될 수 있도록 조건 추가 * fix: `ThumbnailInput` 이미지 아닌 파일 첨부 막기 - image type이 아니면 form data 내 속성 값을 null로 설정하는 코드 추가 * refactor: 주석 제거 vercel error 확인용입니당 --------- Co-authored-by: nijuy <youjin6325@naver.com> * feat: 서랍장 메인(랭킹) 페이지 API 연결 (#110) * chore: yarn to pnpm, remove storybook (#112) * chore: remove storybook * remove: yarn.lock * chore: install pnpm-lock * chore: update pnpm-lock file (#116) * fix: 실시간 검색어 api 관련 수정 (#121) * refactor: 변경된 로고 적용 (#119) - 서랍장 헤더 - 로그인 - 검색바 * feat: 로그인 로직 개발 (#93) * fix: SearchKeyword 에러 * feat: 로그인 useWatch연결 * feat:Homelayout변경 * feat: tokenService 추가 * feat: api 연결 * fix: 불필요한 console.log제거 및 LoginPage로 router.tsx변경 * refactor: export const로 수정 * fix: react-cookie추가 * fix: date-fns추가 + BoxButton 컴포넌트 에러해결에 따른 코드 변경 * fix: 불필요한 쿠키 설정 제거 * refactor: 컨벤션 통일 * refactor: router.tsx에도 컨벤션 바꾼 내용 반영 * fix: customedAxios export방식 변경에 따른 코드 수정 * feat: 401에러에 대해서 예외처리 * fix: auto fill 시 배경색 지우기 * refactor : Login.style.ts css수정사항 반영 * fix: 로그인 버튼 padding수정 * refactor: 깃 대소문자 구분 못하는 문제 수정 * refactor: css padding 상하좌우 속성 단축속성으로 변경 * refactor: 로그인시 별도 Error타입 삭제 및 기존 common Error type으로 변경 * refactor: LoginPage 삭제 및 router에 Login 컴포넌트 import * fix: cache clean * refactor: Login컴포넌트 코드를 -> Pages로 이동 * chore: package update * fix: remove any type in error * style: fix convention --------- Co-authored-by: Hanna922 <hanna.urssu@gmail.com> * style: fix code convention * feat: 서랍장 카테고리 유형 드롭다운 구현 (#122) * refactor: `Category` 컴포넌트 -> `RankingCategory`, `RegisterCategory` 컴포넌트로 분리 * chore: `@radix-ui/react-dropdown-menu` 라이브러리 추가 * feat: `CategoryDropdownMenu` 컴포넌트 구현 * feat: 랭킹, Star Ranking, New Releases 페이지에 `CategoryDropdownMenu` 컴포넌트 추가 * style: 1792px 이하의 화면에서 카테고리 드롭다운 메뉴가 보이도록 수정 * chore: `CategoryDropdownMenu` 컴포넌트를 `Category/CategoryDropdownMenu` 디렉토리 아래로 이동 * style: `StyledSmallDesktopCategoryContainer` -> `StyledDropdownCategoryContainer` 이름 변경 * chore: `SMALL_DESKTOP_MEDIA_QUERY` 문자열 상수 -> `mobileview.constant.ts` 파일로 이동 * chore: `CategoryList` 배열 -> `category.constant.ts` 파일로 이동 * chore: add husky, lint-staged, pre-commit (#128) * chore: add husky, lint-staged, pre-commit * feat: add prettier in lint-staged * docs: CODEOWNERS.md 파일 업데이트 (#132) - 비액티브 전환하신 분들 삭제 & 새로 합류하신 분들 추가 * feat: 개발자의 서비스 더보기 페이지 (#123) * feat: 제작자 서비스 페이지 퍼블리싱 * feat: url에서 provierId 따오기 * fix: `ProductResult` 타입에 `isBookmarked` 속성 추가 * design: `CardSmallThumbnail` 컴포넌트에 $height 추가 * design: `StyledProviderContainer`의 gap삭제 - `CardLayout`에 margin-top: 2rem;과 중복됨 * feat: 개발자 서비스 관련 api, hook 수정 - page 기본 값을 0으로 수정, category 추가 * refactor: `CardLayout`에 있던 임시 타입, props 수정 * feat: 개발자 서비스 더보기 페이지에서 사용할 EmptyScreen 문구 추가 * feat: `Provider` 페이지 내 더미 데이터 삭제 * design: Soomsil/title22 -> YDS/title3 Co-authored-by: 이중곤 <2wndrhs@gmail.com> * refactor: api 함수 인자를 인터페이스로 분리 * refactor: data.length > 0 조건 명시하기 - data 조건은 useSuspenseQuery로 바꾸면서 삭제 가능할듯 * refactor: 화면 작아졌을 때 카테고리를 드롭다운 형식으로 변경 --------- Co-authored-by: 이중곤 <2wndrhs@gmail.com> * config: create bug report template (#135) * config: create bug report template * config: add setting in issue template * config: feature_request 수정, refactor_request 추가 * Revert "config: feature_request 수정, refactor_request 추가" This reverts commit 01e82097eb588b41c40e5cd229b0c030778164ba. * docs: add refactor guide --------- Co-authored-by: nijuy <youjin6325@naver.com> * feat: 홈페이지 API 연결 (#129) * feat: 실시간 검색 키워드 API 연결 * feat: 공지사항 api 설정 * feat: 서랍장 랭킹 가져오는 hook 구현 * feat: 서랍장 랭킹 api 연동 * fix: 검색 api 오타 수정 * fix: 서랍장 랭킹 3개만 보이도록 수정 * rename: 모든 TF의 axiosClient를 soomsilClient 파일로 병합 * fix: useGetAnnouncement의 useQuery 세팅 제거 및 TODO 작성 * style: axiosClient 네이밍 수정 및 관련 import문 수정 * style: 불필요한 async 삭제 * feat: 내서랍장 페이지 API 연결 (#124) * feat: 내 북마크, 내 서비스 api 작업 * feat: useGetBookMarked, useGetMyRegistered hook 추가 * feat: 내 서랍장 페이지 api 연결 작업 * feat: CardLayout props 수정 작업 * fix: bookmarkCount 및 ImgSrc 관련 수정 * fix: Card event.stopPropagation 추가 * style: Thumbnail object-fit: cover 추가 * feat: return 형태로 수정 * refactor: console.log 삭제 * feat: drawData length 비교하는 코드로 수정 * refactor: ProductListResponses -> ProductResponses CardLayout.tsx data ProductResult[]로 변경 * rename: GetRanking -> RankingRequestParams * feat: 회원가입 페이지 퍼블리싱 (#138) * feat: 회원가입(Signup) 페이지 라우팅 처리 * feat: useFunnel 구현 완료 * feat: 재사용될 SignupFrame 컴포넌트 구현 * fix: 퍼널이 한개의 Step 만 가질 때 TS 문제 * feat: 약관문서 컨텐츠 구현 완료 * feat: 약관동의 퍼널 컴포넌트 구현 완료 * feat: AgreeTerms 필수 약관 동의 후 확인 버튼 클릭 시 이벤트 추가 * feat: 약관문서 컨테이너 디자인 피그마에 맞게 개선 * refactor: 회원가입 퍼널 컴포넌트에 공통적으로 사용되는 StyledComponent들 추출 * feat: 이메일 입력 퍼널 컴포넌트 구현 완료 * fix: 확장자명 오류 styled.ts -> style.ts * feat: 초 단위 타이머 구현 * refactor: useSecondTimer의 resetTimer 함수를 useCallback 훅으로 감쌈 * feat: 이메일 인증 퍼널 컴포넌트 구현 * refactor: 불필요한 tsx 확장자명을 ts로 변경 * feat: 회원가입 폼 퍼널 구현 완료 * feat: 회원가입 완료 퍼널 구현 완료 * fix: 비밀번호 타입의 input 필드에서 입력한 값이 최초에만 가려지지 않는 문제 * refactor: 학교 메일 열기 링크를 window api 에서 react router Link로 변경 * feat: Signup 페이지 퍼널 구현 완료 * fix: 회원가입 폼의 닉네임에 한글, 영어, 숫자만 가능하도록 제한 * fix: 약관문서 validateDOMString 에러 수정(<ul> in <p>) * refactor: 이메일 인증 제한시간 문자열 변환 로직을 date-fns 라이브러리로 개선 * refactor: 이용약관 동의에 대한 상태와 데이터 로직 분리 * refactor: 중복되는 padding 값 생략 * remove: Signup.style.ts 빈 파일 삭제 * fix: 이용약관 더보기 아이콘 hover 시 색상을 YDS SemanticColor로 변경 * refactor: <br> 태그를 white-space 속성으로 대체 * fix: edge에서 password type SimpleInputField에 자동으로 추가되는 suffix 제거 * fix: SignupForm에 값을 입력하는 도중에 validation을 수행하도록 수정 * refactor: 숭실대 도메인을 변수로 추출 * fix: ts as문을 타입 가드로 변경 * refactor: 삼항 연산자를 && 로 변경 * refactor: 이메일에 도메인 추가 로직을 코드 맥락에 맞게 변경 * refactor: SignupForm에서 SignupInput 컴포넌트 분리 * feat: SignupInput이 최초 한 번 valid한 값을 가지기 전까지는 경고를 띄우지 않음 * fix: drawerClient -> soomsilClient 로 변경 (#145) * feat: 공통 로딩 컴포넌트 제작 (#139) * chore: add "@tanem/react-nprogress": "^5.0.51" * refactor: lazy loading 도입 및 로딩바 추가 * feat: 프로그레스바 컴포넌트 생성 * fix: 로딩 컴포넌트가 부모의 중앙에 위치하도록 수정 * fix: search 로딩 컴포넌트 공통 컴포넌트로 수정 * chore: lint-staged {ts, tsx}만 검사하도록 변경 (#142) chore: add js, jsx in lint-staged * fix: error type and naming (#147) * rename: env baseUrl - header 제거합니다. * fix: url in DrawerRanking * fix: remove Common Error & fix error type * refactor: specify headers in postAuthSignIn * refactor: apply review * feat: 서랍장 상세 페이지 북마크 API 연결 (#125) * feat: bookmark 관련 api 작업 * fix: page 0으로 설정 * feat: 서비스 상세 페이지 bookmarked api 연결 작업 * refactor: useGetNewRelease, useGetStarRank를 useQuery로 변환 * refactor: StarRanking, NewRelease 바뀐 hook에 맞게 수정 * delete: delete useGetMain, Ranking 수정 * feat: productBookmarkKey not nullable * feat: data에 product 이름 설정 * feat: soomsilClient로 수정 및 undefined 삭제 * feat: product로 이름 수정 및 useMutation 작업 * feat: ErrorBoundary를 사용한 에러 처리 (#152) * chore: react-error-boundary 설치 * refactor: `Search` 내 Errorboundary를 react-error-boundary로 교체 - 기존 클래스형 ErrorBoundary 삭제 * feat: `Fallback` 컴포넌트 구현 * feat: `Router` `DrawerLayout`에 `ErrorBoundary` 적용 * refactor: `useGetProductDetail`에 useSuspenseQuery 사용 - data !== undefined인 점이 보장되므로 `ServiceDetail`에서 isSuccess 관련 코드 삭제 * refactor: `useGetProductByProvider`에 useSuspenseQuery 사용 - - data !== undefined인 점이 보장되므로 `Provider`에서 data 조건 삭제 * refactor: `useGetBookmarked` `useGetMyRegistered`에 useSuspenseQuery 사용 - data !== undefined인 점이 보장되므로 `MyDrawer`에서 drawerData 조건 삭제 * feat: `Login`에서 400 에러 아닐 때만 ErrorBoundary로 넘기기 - 400 에러 = 요청 형식 문제 = 다시 입력할 수 있게 로그인 페이지에 남아있어야 함 * refactor: `Fallback` 컴포넌트에서 status를 보고 fallback 선택하도록 수정 - 에러 위치는 서버 메시지가 아니라 window.location으로 판단함. backUrl을 위해 분리해뒀던 FallbackDrawer도 삭제 * fix: `FallbackProps` import 경로 수정 - react-error-boundary에서 타입을 가져오도록 수정 * refactor: `getBackUrl()`을 삼항 연산자로 대체 * refactor: `renderFallback()`을 조건문으로 대체 - 굳이 함수로 빼서 처리할 이유가 없음 * refactor: `Router`에서 Fallback import 방식 수정 - 동적 로딩할 이유가 없음 * refactor: `Bar` 컴포넌트 React.FC 삭제 - 스타일 컴포넌트 오타 수정, 상대 경로 -> 절대 경로 수정도 끼움 * refactor: `FallbackWithNavigate` `FallbackWithDetail` 삭제 * refactor: `Fallback`으로 합침 - navigate button이 모든 fallback에 들어가면서 저 둘을 굳이 분리할 필요가 없어짐 * refactor: `FallbackContent` 타입의 buttonText를 필수 속성으로 변경 - 서버 에러든 클라이언트 에러든 버튼은 무조건 들어감 * docs: CODEOWNERS.md 파일 업데이트 (#159) - 미루고 미루던 MJ 추가 * feat: Home 화면의 검색창 및 헤더 구현 (#150) * feat: 홈 헤더 구현 * style: 서랍장 이동 링크 오타 수정 * feat: 검색 기능 구현 * style: HomeLayout을 Home으로 병합 * design: HomeLayout 삭제로 인한 회원가입 페이지의 요소들 위치 조정 * design: HomeLayout 삭제로 인한 Nav 위치 수정 * design: Nav의 Dropdown에서 로그아웃 버튼 curor: pointer 추가 TODO 주석 추가 * feat: 드롭다운 외부 영역 클릭 시 닫히도록 구현 * feat: 유저 정보를 저장하는 전역상태 구현 * feat: 유저 정보를 가져오는 api 및 hook 구현 * feat: 유저 정보 가져오는 api 연동 - 로그인 직후 유저 정보 가져오도록 구현 - 홈 진입 시, 로그인이 되어 있는데 유저 정보가 없는 경우 가져오도록 구현 * feat: Nav에 유저 정보 반영 * design: 디자인 코드 수정 - 홈에서 가로 스크롤 안 생기도록 수정 - px -> rem 으로 수정 * refactor: 중복되는 스타일의 div를 감싸는 것 대신 하위 컴포넌트의 스타일을 변경 * style: Home에서 로그인 여부 확인 로직을 useIsLoggedIn 커스텀 훅으로 분리 * style: 불필요한 css 코드 삭제 * design: 키워드 너비 고정되도록 수정 * design: 배경 이미지 height 수정 및 SearchBox padding 값 수정 * design: 화면 축소 시 세로 스크롤 생기는 문제 해결 * design: 서랍장 랭킹 섹션 width 고정되도록 변경 * style: 로그인 이후 로직 순서 변경 * rename: useIsLoggedIn 파일 위치 변경 * feat: 로그인 페이지에서 로고 클릭 시 홈페이지로 이동 * refactor: 토큰 저장 시 만료 기한 정보도 함께 저장되도록 수정 - 로그인 여부 확인하는 코드 수정 - 세션 스토리지를 이용한 토큰 만료기한 저장 코드 삭제 --------- Co-authored-by: fecapark <fecapark@gmail.com> * refactor: 서랍장 상세페이지 providerId -> providerName 교체 작업 (#157) * feat: providerName 속성 추가 * feat: providerId -> providerName * refactor: 서랍장 UI 버그 수정, 코드 리팩토링 (#153) * refactor: NOT_FOUND_TEXT를 props에서 `EmptyScreen` 내부로 이동 * remove: ProductList.type.ts 삭제 - 기존에 여기 있던 타입을 사용하는 코드는 체리가 미리 수정해줘서 삭제만 함 * design: "카테고리 유형" 글씨에 스타일 적용 - Soomsil/Drawer/Web/title18 == YDS title5 * design: `StyledProductImage`에 flex-shrink:0 추가 - 부모 컨테이너 크기에 맞추느라 지정된 크기 (440 * 296) 보다 작아지던 현상을 수정 * refactor: `EmptyScreen`의 삼항 연산자를 &&로 대체 - 조건이 거짓일 때 띄울 게 없어서 * refactor: 불필요한 스프레드 연산자 삭제 Co-authored-by: MJ <80272444+minai621@users.noreply.github.com> * fix: `Header` `ServiceRemoveModal` z-index 조절 - 나중에 서랍장 헤더에 달릴 DropDown의 z-index = 10이라 Modal에서는 z-index = 11로 함 * fix: `StyledIconButtonContainer`를 `DropDownMenu.Trigger` 외부로 이동 - 내부에 있으면 컨테이너 클릭해도 카테고리가 열림 * refactor: z-index를 객체로 관리하도록 수정 --------- Co-authored-by: MJ <80272444+minai621@users.noreply.github.com> * Fix: ServiceDetail, Fallback 컴포넌트에서 발생하는 타입 에러 수정 (#166) * fix: `MoreProductSection`에 providerName props 추가 - 원래 있던 코드인데 develop과 병합하면서 날아가서 다시 넣음 * fix: `getFallbackContent` 마지막 return문에 buttonText 필드 추가 * fix: providerId -> providerName - 여기도 develop 합치면서 다시 돌아갔음 * feat: 회원가입 / 이메일 인증 api 연동 (#158) * feat: 이메일 인증 요청 보내는 함수 구현 * feat: 이메일 인증 확인, 회원가입 api 연결 * fix: 에러 반환할 때 error 객체를 직접 반환하지 않고 error.response.data를 반환하도록 함 * fix: customedAxios를 authClinet로 변경 * feat: EmailAuth에 이메일 인증 & 확인 기능 추가 * refactor: EmailForm에서 인증 메일 요청을 보내도록 변경 * design: EmailForm에 이메일 에러 표시 추가 * refactor: Email Verification Type 지정 * refactor: sendAuthenticationMail props 삭제 * fix: error data type 관련 error 수정 * feat: 회원가입 기능 추가 * feat: 이메일 전송 중 버튼 disabled * refactor: console 관련 TODO 해결 및 삭제 * refactor: postAuthVerificationEmail 함수 객체 형식으로 변경, api 관련 함수 타입 네이밍 params로 일괄 변경 * refactor: set 함수와 로직 분리 * refactor: storageKeys constant로 관리 * refactor: postAuthSignUp 호출 시 구조 분해 할당 적용 * feat: 회원 가입 이후 세션 정보 삭제 * feat: postAuthSignUp, postAuthVerificationEmail 함수 객체 자체를 받도록 변경 * feat: 로고 클릭 시 홈 화면으로 이동 * refactor: storageKeys.ts constant로 옮기고 네이밍 변경 * refactor: verificationCheckProps 삭제 * feat: EmailAuth 에러 텍스트로 표기, 재전송 관련 에러 처리 * refactor: setError 코드 간결화 * refactor: query parameter config에 명시 * refactor: EmailAuth, EmailForm, SignUpForm handler state hook으로 분리 * �feat: 계정탈퇴(Withdraw) 페이지 퍼블리싱 (#155) * feat: 계정탈퇴 (Withdraw) 페이지 생성 및 라우팅 (lazy 적용) * feat: 계정탈퇴 페이지 퍼블리싱 구현 (#143) * refactor: 핸들러 함수 이름 변경 * refactor: Typos 중복 스타일 삭제 * refactor: StyledComponent 작성 방식 수정 * refactor: drawn 컴포넌트 삭제 후 기존 페이지에 병합 * [refactor] eslint 적용 안 되던 부분 수정 * [refactor] padding 스타일 겹치는 부분 수정 * [refactor] Styled 이름 변경 * [refactor] 없어도 되는 style 삭제 (text-align: left;) * refactor: 중첩된 Withdrawn 함수를 외부로 이동 * refactor: handleCheckAgree를 함수형 업데이트로 상태 관리 변경 * rename: apply apis conventions in drawer apis (#170) * rename: apply apis conventions in drawer apis * refactor: add space for line error * feat: Token management with axios interceptors (#169) * feat: 로그인 페이지 코드 리팩토링 (#164) * feat: email 도메인 관련 상수 추가 * feat: 이메일에 도메인을 붙여주는 useFullEmail.ts 추가 * feat: 로고 클릭시 홈으로 가는 기능 추가 * style: 로고에 cursor: pointer 추가 * refactor: 이메일에 도메인을 붙이는 과정을 useFullEmail로 추출 * refactor: 로그인 페이지 리팩토링 * refactor: StyledLoginInputHelperLabel color theme color로 변경 * feat: 로그인 상태시 /login에서 홈으로 리다이렉트 * refactor: 서랍장 상세페이지 providerId -> providerName 교체 작업 (#157) * feat: providerName 속성 추가 * feat: providerId -> providerName * refactor: 서랍장 UI 버그 수정, 코드 리팩토링 (#153) * refactor: NOT_FOUND_TEXT를 props에서 `EmptyScreen` 내부로 이동 * remove: ProductList.type.ts 삭제 - 기존에 여기 있던 타입을 사용하는 코드는 체리가 미리 수정해줘서 삭제만 함 * design: "카테고리 유형" 글씨에 스타일 적용 - Soomsil/Drawer/Web/title18 == YDS title5 * design: `StyledProductImage`에 flex-shrink:0 추가 - 부모 컨테이너 크기에 맞추느라 지정된 크기 (440 * 296) 보다 작아지던 현상을 수정 * refactor: `EmptyScreen`의 삼항 연산자를 &&로 대체 - 조건이 거짓일 때 띄울 게 없어서 * refactor: 불필요한 스프레드 연산자 삭제 Co-authored-by: MJ <80272444+minai621@users.noreply.github.com> * fix: `Header` `ServiceRemoveModal` z-index 조절 - 나중에 서랍장 헤더에 달릴 DropDown의 z-index = 10이라 Modal에서는 z-index = 11로 함 * fix: `StyledIconButtonContainer`를 `DropDownMenu.Trigger` 외부로 이동 - 내부에 있으면 컨테이너 클릭해도 카테고리가 열림 * refactor: z-index를 객체로 관리하도록 수정 --------- Co-authored-by: MJ <80272444+minai621@users.noreply.github.com> * Fix: ServiceDetail, Fallback 컴포넌트에서 발생하는 타입 에러 수정 (#166) * fix: `MoreProductSection`에 providerName props 추가 - 원래 있던 코드인데 develop과 병합하면서 날아가서 다시 넣음 * fix: `getFallbackContent` 마지막 return문에 buttonText 필드 추가 * fix: providerId -> providerName - 여기도 develop 합치면서 다시 돌아갔음 * refactor: useFullEmail/useRedirectLoggedInEffect 훅 클린코드 및 confilct 해결 * �feat: 계정탈퇴(Withdraw) 페이지 퍼블리싱 (#155) * feat: 계정탈퇴 (Withdraw) 페이지 생성 및 라우팅 (lazy 적용) * feat: 계정탈퇴 페이지 퍼블리싱 구현 (#143) * refactor: 핸들러 함수 이름 변경 * refactor: Typos 중복 스타일 삭제 * refactor: StyledComponent 작성 방식 수정 * refactor: drawn 컴포넌트 삭제 후 기존 페이지에 병합 * [refactor] eslint 적용 안 되던 부분 수정 * [refactor] padding 스타일 겹치는 부분 수정 * [refactor] Styled 이름 변경 * [refactor] 없어도 되는 style 삭제 (text-align: left;) * refactor: 중첩된 Withdrawn 함수를 외부로 이동 * refactor: handleCheckAgree를 함수형 업데이트로 상태 관리 변경 * refactor: 파일 끝에 개행 적용(eslint 적용) * refactor: 이메일 도메인 상수로 변경 * refactor: useEmailForm의 fullEmail 로직을 훅으로 변경 * fix: Login 페이지 하단 버튼에 textTertiary 색상 적용 * Merge branch 'develop' into feat/#149-login-page-refactoring --------- Co-authored-by: fecapark <fecapark@gmail.com> Co-authored-by: 심민성 <bighammer1753@gmail.com> Co-authored-by: Chaeyeon Seo <94633589+seocylucky@users.noreply.github.com> Co-authored-by: MJ <80272444+minai621@users.noreply.github.com> Co-authored-by: solmee <87332713+ssolfa@users.noreply.github.com> Co-authored-by: Hanna922 <hanna.urssu@gmail.com> * feat: 마이페이지 요소 링크 / 비밀번호 변경 퍼블리싱 및 api 연결 (#160) * feat: 마이페이지 하위 웹 정보 요소 클릭 시 링크 연결 * feat: 로그아웃 버튼 클릭 시 로그아웃 처리 후 홈화면으로 이동 * feat : 현재 비밀번호 입력 페이지 퍼블리싱 * feat: 비밀번호 확인 api * feat: 비밀번호 input 컴포넌트 및 현재 비밀번호 매칭 페이지 퍼블리싱 * fix: axios client 네이밍 맞춰 수정 * feat: useFunnel 사용해서 비밀번호 변경 페이지 퍼블리싱 * fix: 비밀번호 변경 로직 수정 및 애니메이션 추가 * feat: 마이페이지에서 버튼 클릭 시 비밀번호 변경 페이지로 이동 * fix: 컴포넌트 배치 디테일 피그마 맞춰서 수정 * fix: 비밀번호 확인 api 리턴 객체 수정 * feat: sessionToken 상태 추가, 추후에 비밀번호 변경 api에 사용 * fix: Frame 만들어서 공통으로 들어가는 로고 배치 * fix: 필요없는 파일과 코드 삭제 * feat: 비밀번호 입력 input에 눈 모양 아이콘 추가 * feat: 로그인이 안돼있다면 alert창 띄움 * refactor: Mypage 절대경로 상대경로로 변경 * fix: api 네이밍 수정과 로직 간편화 * fix: password match api 네이밍 변경, if return 구조로 변경 * fix: NewPasswordForm 컴포넌트 상태 및 핸들러 분리 * fix: CurrentPassword components 상태 및 핸들러 분리 * fix: router 계층 구조 변경 * fix: interface 선언 위치 변경 * fix: style에서 yds color 적용, 함수 인자 구조 변경 * fix: Props 구조 변경, useLoggedIn 훅 사용 * fix: router 경로 오타 수정 * refactor: error type 적용, sessionStorage 변경 사항 적용 * refactor: yds 컬러 적용, 주석 삭제 * fix: correction of typos * fix: error correction from #169 merge * fix: getUserPasswordMatch 리턴 타입 변경 수정 전: data와 error가 GetPasswordResponse의 멤버 match와 함께 sessionToken과 error로 반환 수정 후: GetPasswordResponse로 반환하지 않고 각자 data와 error로 반환 * fix: padding 스타일 수정 --------- Co-authored-by: 심민성 <bighammer1753@gmail.com> Co-authored-by: TCTA-015 <tcta-015@TCTA-015ui-MacBookAir.local> Co-authored-by: Hanna922 <hanna.urssu@gmail.com> * chore: update yds version, update pnpm (#176) * refactor: 서랍장 메인 화면 배너 이미지 교체 (#151) * refactor: 기존 soomsil 로고 파일 삭제 * refactor: 서랍장 배너 이미지를 S3에 업로드된 이미지로 교체 * chore: `soomsil_v2_logo` -> `soomsil_logo`로 파일 이름 변경 * refactor: remove unused custom event (#177) * fix: 로고 파일 이름 변경 사항이 반영되지 않았던 컴포넌트 수정 (#179) * chore: install YDS v1.1.1 (#188) * refactor: ProviderProductResponses 구조 변경 및 관련 코드 리팩토링 (#187) * feat: ProviderProductResponses 타입 생성 * fix: ProviderProductResponses 구조에 맞게 코드 수정 * refactor: 불필요한 select 삭제 * refactor: Provider.tsx id -> name 교체 및 ProviderProductResponses에 따른 수정 * �feat: 계정탈퇴 페이지 ��API 연결 (#173) * feat: 회원탈퇴 post 보내는 함수 및 타입 구현 * feat: Withdraw 페이지에 함수 연결 후 탈퇴 구현 * fix: 로고 클릭 시 홈 이동 로직 추가 및 탈퇴 후 자동 홈 이동 로직 삭제 * fix: 탈퇴 완료 페이지 수정 * refactor: handleWithdrawAgree함수에서 필요없는 조건문 제거 * refactor: 에러 타입 단언 부분 수정 * 탈퇴 후 이동 로직(기존 Withdrawn)을 WithdrawSuccess 컴포넌트로 분리 * refactor: BoxButton에 필요 없는 style 속성 제거 * feat: 서랍장 상세 페이지 완성 (#178) * feat: url마다 BoxButton 추가 * feat: `MoreProductSection`에 페이지 이동 버튼 추가 - 프로덕트는 최대 5개까지만 노출 * feat: SHARE 버튼 클릭시 클립보드에 url 복사 * fix: `productUrls.map()`에 key 추가 * feat: `ServiceDetail`에 YDS Toast 추가 - SHARE 버튼 클릭시 토스트 메시지로 복사된 걸 알림 * refactor: queryClient.invalidateQueries 쿼리키 수정 - productNo 추가 - MoreProductSection은 백엔드 스펙 변경으로 에러 나서 잠시 주석 처리 * refactor: `MoreProductSection`의 data.length를 if문으로 확인 * fix: slice(0,5)를 `MoreProducttSection` 내부로 이동 - useGetProductByProvider 훅은 Provider 페이지에서도 사용하는 훅이라 여기서 자르면 안됨 * fix: `handleClickShare`를 async 함수로 수정 - 클립보드 접근이 프로미스를 반환함 * refactor: `ServiceDetail`의 Category를 상수 파일로 이동 - CategoryObj로 이름 변경 - 직접 값 넣는 게 아니라 CategoryList를 가공해서 생성하도록 수정 * refactor: `MoreProductSection` 컴포넌트 파일 위치 이동 - src/drawer/components/ServiceDetailContents * refactor: `ServiceDetail`에서 `Carousel` 분리 * refactor: `ServiceDetail`에서 `Description` 분리 * refactor: `ServiceDetail`에서 `ServiceAction` 분리 - 토스트 위치가 이상한데 YDS 구버전이 남아서 그런건지 확인 필요 * refactor: toastProps 타입 단언 -> const assertion * refactor: `MoreProductSection` return undefined -> return null * refactor: `MoreProductSection` data에 구조 분해 할당 적용 - providerName prop은 없어도 되는 값이라 삭제함 (훅에서 받는 데이터에도 있음) * refactor: `useGetProductDetail`에서 useSuspenseQuery를 바로 반환하게 수정 * refactor: search 페이지 코드 개선 (#162) * refactor: search FallbackComponent 추상화 작업 * refactor: ResultListItems -> ResultList 컴포넌트명 변경 * refactor: useScrollObserve hook 분리 * chore: ppussungError svg 추가 * feat: 서버에러 FallbackComponent 제작 * fix: 불필요한 코드 삭제 * fix: StyledTextContainer 스타일 속성 추가 * refactor: 검색 결과 없음 customErrorcode으로 리팩토링 * refactor: navigation_options 상수화 * refactor: 무한스크롤 코드 리팩토링 * refactor: suspense TotalCount 컴포넌트 내부로 이동 * refactor: YDS 제거 및 StyledBoxButton 추가 * fix: navigate(0) -> navigate(-1) * fix: ResultListItem -> ResultList 폴더명 수정 * refactor: customError 함수형으로 수정 및 네이밍 수정 * fix: 이름 속성값 고정 -> 인자로 받는 것으로 변경 * fix: FallbackComponent -> ErrorFallback rename * feat: NoResultFallback 컴포넌트 제작 * fix: 숨실 -> 숨쉴 오타 수정 * refactor: error 처리 방식 -> NoResultFallback 처리 방식 수정 * fix: 불필요한 코드 삭제 * fix: 불필요한 코드 삭제 * refactor: 로그인 / 회원가입 페이지의 TextField를 YDS 컴포넌트로 교체 (#182) * refactor: 로그인 페이지 YDS 컴포넌트로 대체 * refactor: 회원가입 페이지 YDS 컴포넌트로 리팩토링 * refactor: hiddenfield를 위한 isMarked 추가 * chore: update pnpm lock file local에서도 error를 감지할 수 있도록 pnpm store prune 실행 후 package도 재설치합니다. * refactor: 비밀번호 변경 페이지 PasswordTextField 적용 * refactor: EmailAuth에 SuffixTextField 적용 * refactor: EmailForm에 SuffixTextField 적용 * refactor: CurrentPasswordForm.tsx 매개변수에 cammel case 적용 * refactor: NewPasswordForm.tsx의 2개 이상의 상태 조합을 변수로 추출 --------- Co-authored-by: Hanna922 <hanna.urssu@gmail.com> * refactor: PasswordTextField의 isMarked에 기본값 적용 (#193) * chore: update yds version (v1.1.2) (#195) * feat: 개발자 서비스 더보기 페이지 무한 스크롤 구현 (#192) * refactor: `useScrollObserve`를 공용 훅으로 이동 - SearchResponses로 고정되어있던 타입을 제네릭으로 수정 * feat: `useGetProductByProvider`를 `useSuspenseInfiniteQuery`로 변경 - page param 삭제 * feat: `Provider` 페이지에 무한 스크롤 적용 * fix: `useGetProductByProvider` 훅 변경에 따른 `MoreProductSection` 수정 - 0페이지의 프로덕트만 쓰도록 수정 * refactor: `Provider` 표현식 조건 수정 - 0페이지 products가 비었을 때만 `EmptyScreen` * feat: 내 서랍장, 랭킹 페이지 무한 스크롤 구현 (#185) * feat: 랭킹 페이지(StarRanking, NewRelease) 무한 스크롤 적용 * feat: 내서랍장 페이지(Star, MyProduct) 무한 스크롤 적용 * fix: page props 옵셔널 설정 * fix: 데이터 없을 시 EmptyScreen 안뜨는 문제 해결 * refactor: ProductRequestParams로 이름 변경 및 page 필수 속성으로 변경 * refactor: ProductRequestParams 이름 변경에 따른 코드 수정 *필수 속성인 page 속성 필요 없는 훅에 Omit 처리 * refactor: flat().map() 형식으로 수정 및 list 및에 div 두는 방식으로 수정 * feat: PRODUCTS_PER_PAGE 상수로 따로 생성 * fix: getNextPageParam 조건 에러 수정사항 *상수로 만든 PRODUCTS_PER_PAGE 이용 * feat: 내서랍장 부분 무한 스크롤 적용 * refactor: 검색 키워드 컴포넌트 통합 (#189) * refactor: RealTimeKeyword와 SearchKeyword 코드 일치 * refactor: RealTimeKeyword와 SearchKeyword 통합 * refactor: props => variant 받도록 변경 * refactor: children props 대신에 태그 사이에 넣도록 변경 * fix: styled-component props $ 컨벤션으로 수정 * design: StyledListItemRanking YDS font로 변경 * refactor: props와 component 코드 사이에 엔터 추가 * refactor: variantStyles constant 파일로 분리 * refactor: white-space + 개행 문자로 줄바꿈 * design: figma icon 관련 변경 사항 적용 * design: ListItem 삭제 후 figma 디자인 재반영 * refactor: StyledListItem div에서 li로 변경 * chore: install YLS v1.1.0, utils v0.2.1 (#213) * chore: install YLS v1.1.0, utils v0.2.1 * feat: setting YLSWrapper * �feat: Home 공지사항 API 연결 (#205) * feat: 공지사항 API 타입 정의 * feat: 더미데이터 삭제 및 공지사항 API 연결 * refactor: useQuery를 useSuspenseQuery로 바꾸어 선언적으로 에러와 로딩 상태 처리 * refactor: useGetAnnouncement 훅에 select 사용 및 Notification 컴포넌트의 데이터 처리 변경 * refactor: 배열 추가 방법을 수정하여 무한 슬라이드 로직 단순화 * refactor: useEffect를 사용하여 무한 슬라이딩 로직 관리 * fix: 비밀번호 정규식 및 코멘트 변경 (#217) * fix: 비밀번호 정규식 및 코멘트 변경 * fix: 공백으로만 이루어진 문자열 필터링 * feat: 서랍장 로그인 모달 제작 (#200) * feat: 전역상태 DialogState 생성 * feat: 공용 컴포넌트 `CustomDialog` 생성 - Dialog는 radix랑 이름이 겹쳐서 Custom 붙임 - 사용처에서 Dialog 내부 컨텐츠를 children으로 넘겨주는 방식 * feat: `LoginDialog` 컴포넌트 생성 - 서랍장에서 비로그인 상태로 회원 전용 기능을 시도 / 페이지에 접근할 때 발생 * design: `CustomDialog` 크기, padding 수정 * chore: `ProfileSvg` 컴포넌트를 공용 컴포넌트로 이동 - 홈 말고 서랍장에서도 써야함 * chore: defaultProfile 이미지 공용 에셋으로 이동 - 서랍장에서도 씀 * refactor: `CustomDialog`를 `BrowserRouter` 내부로 이동 - `LoginDialog`에서 useNavigate() 쓰려고 * fix: `DialogState`의 persist 삭제 * refactor: Dialog의 type을 지정하는 방식으로 수정 * fix: `Header` handleClick e 타입 지정 - 이름도 event로 수정 * refactor: dialog 객체를 상수로 분리, DiglogData 타입 수정 - DialogType을 삭제하고 keyof typeof DIALOG를 사용 * refactor: bookmarkMutation을 1개로 통합 - product.isBookmarked로 mutationFn만 바꿈 * refactor: `ServiceRemoveModal` -> `ServiceRemoveDialog` * refactor: `LoginDialog` handleClick 삭제 - dialog 닫는 건 DialogClose로 감싸면 될 일 * refactor: `ServiceRemoveDialog`에서 setDialog(null) 삭제 - Dialog.Close로 감싸져있어서 안해도 됨 * Revert "refactor: `ServiceRemoveDialog`에서 setDialog(null) 삭제" This reverts commit f2dc6e683f9176f2e1d4e1183f8d417057aee1cb. * Revert "refactor: `ServiceRemoveModal` -> `ServiceRemoveDialog`" This reverts commit 2a5d8187d80e1af258c59b59bbb86770e49c3b31. * refactor: `handleClick` -> `handleClickAuthTab` in Header.tsx - 로그인이 필요한 메뉴를 클릭했을 때 작동하는 핸들러임을 드러내도록 이름 수정 * refactor: `handleClickStar`의 조건을 긍정으로 수정 * feat: 서랍장 헤더 프로필 아이콘에 드롭다운 메뉴 연결 (#202) * feat: `ProfileDropdownMenu` 컴포넌트 구현 * feat: `ProfileIconButton` 컴포넌트 구현 * feat: 서랍장 헤더에 `ProfileIconButton` 컴포넌트 연결 * refactor: 메인페이지 헤더에 `Dropdown` 컴포넌트 대신 `ProfileIconButton` 컴포넌트 연결 * feat: `CardSettingDropdownMenu` 컴포넌트 구현 * refactor: `UserDrawerCard` 컴포넌트가 `Dropdown` 컴포넌트 대신 `CardSettingDropdownMenu` 컴포넌트를 사용하도록 변경 * chore: 사용하지 않는 `Dropdown` 컴포넌트 제거 * chore: `CardSetting` 컴포넌트의 인자 이름을 `forwardRef` -> `ref`로 변경 * refactor: `props` 이후에 `onClick` prop을 넘기도록 수정 * refactor: 로그인 로직을 mutation으로 분리 * feat: `getUserData` 쿼리에 `staleTime: Infinity`를 설정하여 불필요한 네트워크 요청 방지 * fix: 드롭다운 width의 크기가 고정인 문제 --------- Co-authored-by: Sanghyeok Park <fecapark@gmail.com> * fix: 회원탈퇴 후 유저정보가 남아있는 버그 수정 (#208) * feat: LoginState, UserState, logout을 전부 초기화 하는 useResetUserInfo훅 구현 * fix: 기존 postWithdraw 함수에서 로그아웃 부분 제거 * fix: Withdraw에서 탈퇴 성공 시 useResetUserInfo 불러와서 정보 삭제하도록 수정 * refactor: 기존 resetUserInfo으로 분리했던 코드를 하나로 통합 * refactor: postWithdraw 로직을 mutation을 활용하여 분리 및 alert 대신 errorboundary로 수정 * fix: UserState 관련 코드 삭제 * feat: usePreventDuplicateClick 생성 및 회원 가입 프로세스에 적용 (#219) * feat: 서랍장 서비스 삭제 API 연결 (#211) * feat: `deleteProduct` api 함수 생성 * feat: 서비스 삭제 API 연결 - 내 서비스를 북마크했을 수도 있어서 내 서랍장 쿼리 2개 모두 무효화 * fix: 쿼리 무효화 코드를 onSuccess로 이동 * fix: 회원가입 약관 중 커뮤니티 이용규칙 수정 (#227) * fix: `CommunityTerm` 내용 수정 * chore: `커뮤니티 이용규칙` required: true로 변경 * design: `커뮤니티 이용규칙` 시행일자 strong -> StyledTermParagraph * fix: 프로덕트 이미지 등록 조건 서버와 통일하기 (#226) * fix: input accept 포맷 제한 - 이미지 중에서도 일부 포맷만 허용함 * design: `파일 첨부` 버튼 커서 모양 지정 * fix: 이미지 type 검사 조건 변경 * refactor: 로그인/회원가입 폼에 react-hook-form 적용 (#223) * rebase: from develop * refactor: SignupForm에 rhf 적용완료 * refactor: pr #217에 맞게 수정 * refactor: import 경로 @ 적용 * refactor: 확장자명 tsx -> ts * fix: button들에 type=button 설정 * fix: button들에 type button 추가 설정 * fix: 닉네임 검사시 누락된 isBlank 함수 추가 * fix: 약관동의를 첫 페이지로 * remove: 중복되는 파일 제거 * feat: 서랍장 검색 페이지 작업 (#212) * feat: 서랍장 검색 api getSearchData 작업 * feat: ProductSearchRequestParams 타입 추가 * feat: useGetSearchData 훅 작업 * feat: 서랍장 검색 api 연결 및 검색 페이지 추가 * design: YDS Typo로 변경(subtitle2) * refactor: api.logout() -> useResetUserInfo() (#230) * feat: 로그아웃 기능 추가 (ProfileDropdownMenu) * feat: 로그아웃 기능 추가 (LogoutModal) * feat: 비밀번호 변경 API 연결 (#196) * feat: 비밀번호 변경 api 구현 * feat: 비밀번호 변경 api 로그인 정보 및 유저 정보 확인 * feat: 변경 성공 시 새로운 accessToken 쿠키 설정 * refactor: 이전 비밀번호와 같은 비밀번호 입력 시 새로운 에러메세지 출력 * fix: 비밀번호 확인 시 에러메세지 표시되지 않는 버그 수정 * refactor: state 줄이고 if return 문으로 구조 변경 * fix: package-lock.json 제거 * refactor: newPasswordForm 컴포넌트 react-hook-form으로 리팩토링 * refactor: 비밀번호 확인 유효성 검사 로직 수정 및 api 호출부 함수 분리 * refactor : mutation으로 api 호출 후 동작 위임, 맞춰서 PostChangePassword api 수정 * fix: import 오류 fix, 비밀번호 정규식 통일 * fix: api error throw 삭제 * fix: 사용하지 않는 import 삭제 * fix: userState 사용하는 로직 삭제 * fix: soomsilClient.response.interceptor 무한 루프 문제 (#210) * feat: `authClient.response.interceptor` 추가 - accessToken 재발급 과정에서도 에러 나면 로그아웃 처리 * refactor: interceptor 인자에 함수 바로 넣는 방식으로 수정 * refactor: 로그아웃 처리를 soomsilClient로 이동 - authClient용 인터셉터 삭제 - refreshToken 함수 수정 * feat: home-yls (#220) * feat: 퀵링크에 logging-system 연결 * refactor: useQuickLink 훅에서 QuickLink 컴포넌트로 변경 * fix: user data recoil에서 react-query로 변경 * fix: 모든 퀵링크 로그 남기도록 수정 * delete: platform 제거 * �feat: 비밀번호 재설정 페이지 퍼블리싱 및 API 연결 (#233) * feat: 초기 페이지 생성 및 라우터에 페이지 추가 * feat: 비밀번호 재설정 페이지 퍼블리싱 * feat: email 상태 추가 * feat: 이메일 인증 요청하기 api 연결 * feat: 이메일인증 스텝에 이메일 인증 요청하기 api 연결하여 인증 메일 재전송 구현 * feat: 이메일인증 스텝에 이메일 인증 여부 확인하기 api 연결 * feat: 비밀번호 변경 api 연결 * chore: 인증 메일 재전송 버튼에 커서 효과 추가 * fix: 인증 메일 재전송 버튼을 PlainButton으로 변경 * feat: 로그인 페이지에 학교 메일 찾기 링크 연결 * fix: StyledLink에 안쓰는 속성 삭제 * fix: StyledLink에 visited 속성 추가하여 링크 이동시 PlainButton 색상 바뀌는 버그 수정 * feat: 로그인 페이지에 비밀번호 재설정 navigate 기능 추가 * refactor: 각 컴포넌트에 react-hook-form 사용 * refactor: useEmailInputForm 훅을 사용하여 state와 handler를 기존 컴포넌트에서 분리 * refactor: useEmaiVerification 훅을 사용하여 state와 handler를 기존 컴포넌트에서 분리 * refactor: useResetPasswordInput 훅을 사용하여 state와 handler를 기존 컴포넌트에서 분리 * feat: hasNumberAndEnglishWithSymbols 사용하여 비밀번호 정규식 검사 추가 * refactor: 폼 제출과 관련 없는 이메일 인증에서 react-hook-form 제거 및 비밀번호 재설정하기 BoxButton에 disabled 옵션 추가 * refactor: 이메일입력 폼에 로딩 표시 추가 * refactor: 에러 메시지 멘트 수정 및 css 디자인에 맞게 수정 * fix: 비밀번호 재설정 완료 후 로그인 페이지로 라우팅 경로 변경 * fix: 비밀번호 변경 에러메시지 멘트 수정 * fix: useFullEmail을 useParseFullEmail로 수정 * fix: eslint 적용 * fix: 두번째 PasswordTextField의 에러 메시지를 첫번째로 변경 * refactor: div태그를 form태그로 변경 및 버튼에 타입(button, submit) 지정 * fix: useRedirectLoggedInEffect 사용하여 로그인 상태에서 비밀번호 재설정 접근 금지 설정 * fix: 비밀번호 재설정 완료 페이지 문구 변경 * feat: `UserInformationCard`에 현재 로그인 중인 사용자 정보 넣기 (#232) * feat: `UserInformationCard`에 현재 로그인 중인 사용자 정보 넣기 - 프로필 수정 기능에 접근하지 못하게 주석 처리 해둠 * chore: `UserInformationCard` 주석 범위 수정 * fix: `pre-commit` 훅에서 `lint-staged` 명령이 정상적으로 동작하지 않는 버그 수정 (#244) * feat: 마이페이지 리팩토링 (#222) * refactor: 하단에 hidden component를 추가하여 relative하게 중앙 정렬 * feat: 마이페이지에 계정 탈퇴 메뉴 추가 * refactor: useQuery로 api 호출 방식 변경 * feat: privateRoute hooks 구현 * feat: Nav Bar 로그아웃 기능 추가 * refactor: privateRoute에서 로그아웃 후 login 페이지로 이동하는 방식으로 변경 * refactor: PrivateRoute outlet 중첩 라우팅으로 수정 * fix: 기존에 userState 사용하는 로직 삭제, resetUserInfo 적용 * refactor: useQuery에서 useMutation으로 변경, useCurrentPasswordForm 내부로 위치 변경 * fix: resetUserInfo 중복 선언 제거 * fix: PrivateRoute 적용 페이지 추가 * feat: title, favicon, meta 태그 설정 (#247) * feat: 서랍장 YLS 연결 작업 (#236) * feat: DetectClick 작업 * feat: useGetDetectProvider 훅 생성 * feat: ranking에 DetectClick 적용 * fix: 커스텀 컴포넌트 div 태그로 감싸기 * 로컬 스토리지에 로그 안찍히는 오류 해결 * refactor: 테스트용 문장 삭제 및 platform 속성 삭제 * fix: BigDrawerCard와 Card에 onClick 속성 추가 * fix: useSuspenseQuery -> useQuery * chore: update YDS version(v1.1.3), YLS version(v1.1.2) (#249) * chore: update YDS version(v1.1.3), YLS version(v1.1.2) * chore: setting packageManager version * feat: search YLS 연결 (#240) * chore: update lock file * feat: 검색 결과 클릭시 로깅 추가 * fix: platform: 'web' 제거 Co-authored-by: 이유진 <youjin6325@naver.com> --------- Co-authored-by: 이유진 <youjin6325@naver.com> * feat: 회원가입 페이지에 학교 메일 찾기 링크 걸기 (#246) * feat: 학교 메일 찾기 링크를 email.constant.ts에 추가하여 전역으로 설정 * feat: 로그인 페이지의 MAIL_SEARCH_URL 재설정 * feat: 회원가입 페이지의 이메일 인증에 메일 링크 추가 * feat: 회원가입에 useRedirectLoggedInEffect 추가 * fix: useEmailInput을 useEmailInputForm으로 이름 변경 * feat: 서랍장 서비스 수정 페이지 제작 및 관련 자잘한 업데이트 (#241) * feat: edit 라우트 처리 및 사진을 제외한 서비스 데이터 로딩+폼에 채우기 * feat: 수정 페이지 완료 * feat: 서비스 등록 성공시 navigate 제거 및 수정 성공시 effect 리팩토링 * fix: move env path (#250) * feat: 라이트 모드 강제 & PrivateRoute 수정 (#248) * feat: theme light로 강제 * fix: PrivateRoute 컴포넌트로 변경 * feat: PrivateRoute 이동 경로 추가 * fix: resetPassword useRedirect 훅 삭제 * fix: search box background가 theme에 맞지 않는 색상으로 나오던 버그 수정 * fix: PrivateRoute의 toPath 로직 변경 * fix: modal과 navigate 중 선택 가능하도록 적용 * fix: useRedirect 복구 * fix: path from에 따라 뒤로가기 적용 * fix: recoil 훅 변경 * fix: 뒤로가기 대신 라우트 주소를 props로 받을 수 있도록 변경 * fix: 삼항연산자 수정 * refactor: `StyledBackgroundImageContainer` -> `StyledBackgroundContainer` (#252) - 배경 이미지를 컬러로 교체 * feat: 서랍장 배너 API 연결 (#237) * feat: 서랍장 배너 리스트를 가져오는 `useGetDrawerBanner()` 쿼리 추가 * feat: `Ranking` 페이지에서 배너 리스트를 가져와 보여주는 기능 구현 * style: 배너 이미지가 서랍장 화면 전체를 차지하도록 수정 * refactor: `BannerSection` 컴포넌트로 분리 && `useSuspenseQuery()` 적용 * refactor: `RankingSection` 컴포넌트로 분리 && `useSuspenseInfiniteQuery()` 적용 * refactor: `NewReleaseSection` 컴포넌트로 분리 && `useSuspenseInfiniteQuery()` 적용 * refactor: `BannerSection`, `RankingSection`, `NewReleaseSection` 컴포넌트로 분리 * fix: `flex-gap`이 `BannerSection`에 적용되지 않는 문제 수정 * feat: 서랍장 서비스 등록 페이지 네이티브 웹뷰 연결 (#216) * feat: 네이티브로부터 유저의 accessToken을 받아올 수 있도록하는 effect 추가 * feat: 네이티브에서 유저의 `accessToken`을 얻기 위한 global 타입 선언 * refactor: 네이티브에서 받아온 유저 `accessToken` 만료 시간을 1시간으로 수정 * feat: 서랍장 서비스 등록이 성공하면 '내서랍장' 페이지로 이동하는 기능 구현 * fix: `soomsilClient`의 request interceptor가 `refreshToken` 대신 `accessToken`을 확인하도록 수정 * feat: 웹뷰에서 서비스 등록이 성공적으로 수행되면 네이티브로 성공 여부를 알려주는 로직 추가 * fix: 웹뷰에서의 접근을 위해 서비스 등록하기 페이지를 `PrivateRoute`에서 제거 * feat: 웹뷰에서 서비스 등록 페이지에 접속하면 헤더가 보이지 않도록 수정 * fix: 서랍장 서비스 등록 페이지의 `textarea` 요소의 배경색을 흰색으로 수정 (#255) * style: `textarea` 요소의 배경색을 흰색으로 수정 * style: 서랍장 헤더 검색 폼의 텍스트 색상을 검은색으로 수정 * docs: create deploy.yml (#253) * docs: create deploy.yml * docs: `deploy.yml` step 순서 조정 - 환경변수 설정 다음에 빌드하도록 * refactor: 비밀번호 재설정 리팩토링 (#256) * fix: useCurrentPassword 삭제, useForm으로 리팩토링 * fix: 불필요한 컴포넌트 삭제 * fix: 키보드 입력 위해 form 형식으로 변경 * fix: usePostChangePassword props 수정 * fix: ResetPassword에 mutate 적용 * fix: form 컴포넌트 제거 * fix: hook 모두 삭제 * fix: 프로퍼티 수정 * fix: wrapper에 form 적용 --------- Co-authored-by: Hanna922 <hanna.urssu@gmail.com> Co-authored-by: JungminLee <85864699+JjungminLee@users.noreply.github.com> Co-authored-by: seocylucky <chaeyeon2285@naver.com> Co-authored-by: seocylucky <seocylucky@github.com> Co-authored-by: 2wndrhs <2wndrhs@gmail.com> Co-authored-by: Chaeyeon Seo <94633589+seocylucky@users.noreply.github.com> Co-authored-by: aaminha <dks4857@gmail.com> Co-authored-by: 고현림 <95522176+indianaPoly@users.noreply.github.com> Co-authored-by: george <hyunrim03@naver.com> Co-authored-by: intersoom <sallybig@naver.com> Co-authored-by: MJ <80272444+minai621@users.noreply.github.com> Co-authored-by: Sanghyeok Park <fecapark@gmail.com> Co-authored-by: 심민성 <75308777+owl1753@users.noreply.github.com> Co-authored-by: solmee <87332713+ssolfa@users.noreply.github.com> Co-authored-by: 심민성 <bighammer1753@gmail.com> Co-authored-by: 조수민 <sumjo.urssu@gmail.com> Co-authored-by: TCTA-015 <tcta-015@TCTA-015ui-MacBookAir.local>
1️⃣ 어떤 작업을 했나요? (Summary)
useFunnel
사용해 4단계로 구현했습니다.1-.mp4
이메일입력
단계2-.mp4
이메일인증
단계3-.mp4
비밀번호재설정
,비밀번호재설정완료
단계로그인 페이지의 학교 메일 찾기 링크 걸기 이것도 같이 진행하였습니다!
기존 코드에 영향을 미치지 않는 변경사항
ResetPasswordContents
폴더를 만들고 안에 4단계 컴포넌트를 구현했습니다.기존 코드에 영향을 미치는 변경사항
Login.tsx
에 학교 메일 찾기와 비밀번호 찾기에 링크/라우팅 설정을 했습니다.2️⃣ 알아두시면 좋아요!
비밀번호가 암호화되어 있고 클라이언트 측에서 기존 비밀번호를 직접 비교할 수 없습니다!
(로그인도 안 한 상태라 previousPassword 이렇게 정의를 못하는 상황)
하지만 서버로 요청 전송 후에는 비교가 가능합니다. 전 비밀번호와 같은 경우에는 에러를 반환하더라구요
따라서 서버에서 Auth-007를 반환하는 경우에 "현재 비밀번호와 다른 비밀번호를 입력해주세요"를 보여주게 설정했습니다!
멘트는 숨조의 의견 참고했습니다!
메일 전송하는 api도 기존에 있는 코드를 썼습니다.
숨조의 비밀번호 설정 api 코드를 긁어와서(ㅎㅎ) 그 부분 충돌 날 예정입니다...
3️⃣ 추후 작업
4️⃣ 체크리스트 (Checklist)
main
브랜치의 최신 코드를pull
받았나요?