From 40469e2e2731803d8d5aa26bf3e0240d9270ae02 Mon Sep 17 00:00:00 2001 From: Woody <88191233+evencoding@users.noreply.github.com> Date: Wed, 3 May 2023 23:03:41 +0900 Subject: [PATCH] =?UTF-8?q?[=ED=8E=98=EC=9D=B4=EB=A8=BC=EC=B8=A0=20?= =?UTF-8?q?=EB=AF=B8=EC=85=98=20Step=202]=20=EC=9A=B0=EB=94=94(=EB=A5=98?= =?UTF-8?q?=EC=A0=95=EC=9A=B0)=20=EB=AF=B8=EC=85=98=20=EC=A0=9C=EC=B6=9C?= =?UTF-8?q?=ED=95=A9=EB=8B=88=EB=8B=A4.=20(#267)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: 범용적인 함수 utils 폴더로 분리 * refactor: Card 컴포넌트 내부의 any 타입 제거 * refactor: nullable하지 않은 데이터에서 옵셔널 체이닝 제거 * refactor(InputBox): nullable하지 않은 데이터에서 옵셔널 체이닝 제거 * refactor: CardRegisterPage를 typescript로 마이그레이션 * refactor: 보안 코드의 에러 메세지에 left:0 스타일 적용 * refactor: 만료일 전체에 대한 유효성 검사 제거 (임시) * feat: Input, Card, Header에 대한 스토리 북 구현 * feat: 등록한 카드 정보를 기억하기 위해 useLocalStorage 훅 구현 * refactor: localStorage 관련 로직을 hook이 아닌 utils로 변경 * refactor: utils 폴더로 분리 * refactor: 타입 정리 * refactor: Year 데이터를 렌더링 할 때, 불필요한 반복문 제거 * chore: 카드 회사 로고 이미지 폴더, 파일 생성 * chore: svg 모듈 declare 작성 * feat: 모달을 열고 닫는 기능 구현 * feat: 카드 회사 정보를 담은 constants 생성 * feat: 모달을 넣어주기 위한 Portal 구현 * feat: 카드사를 선택하는 컴포넌트의 템플릿 구현 * feat: 모달을 여는 클릭 이벤트 추가 * feat: 등록할 카드 정보에 대한 상태를 다루는 context 구현 * feat: 카드사의 정보를 표시 * refactor: 모달의 초기 상태를 외부에서 주입 받도록 변경 * feat: 카드의 닉네임을 표시 * feat: cardList에 대한 context 구현 * refactor: context파일 typescript로 마이그레이션 * refactor: useModalSwitch를 useSwitch로 범용성 있게 수정 * refactor: 폴더 내 파일 이름 구체화 * feat: overflow 히든 추가 * refactor: 폴더 구조 변경 및 폴더 별 내보내기 합치기 * refactor: useForm을 범용성 있게 변경 * refactor: cardInfo, cardList에 대한 Context 적용 * refactor: 상수에 타입 부여 * feat: modal-root 태그 추가 * chore: 파일 구조 변경 및 컴포넌트 파일 이름 구체화 * chore: react-hooks 테스팅 라이브러리 설치 * test: useSwitch hook 테스트 코드 작성 * chore: 불필요한 파일 삭제 * feat: form이 렌더링되면 input에 focus되도록 구현 * feat: form 화면에서 첫 input을 focus하는 기능 구현 * refactor: 닉네임 Input에 대한 스타일을 동적으로 변경하도록 변경 * chore: 폴더 구조 변경 * story: Card 컴포넌트에 대한 스토리 구현 * stody: Header 컴포넌트에 대한 스토리 구현 * stody: SelectBank 컴포넌트에 대한 스토리 구현 * feat: Input에 max-width 추가 * story: Input 컴포넌트에 대한 스토리 구현 * chore: import 개행 정리 * story: InputBox 컴포넌트들에 대한 스토리 구현 * story: 내보내기 이름 변경 * story: Page 컴포넌트에 대한 스토리 구현 * refactor: nullable하지 않은 객체에 대한 옵셔널 연산자 제거 * refactor: context에서 상태와 actions에 대한 타입 네로잉 * refactor: 카드사의 정보가 담긴 오브젝트에 반복문을 실행할 때 entries로 key와 value를 가져오도록 변경 * refactor: 삼항 연산자 대신 or, and 연산자를 사용하도록 변경 * refactor: 로컬 스토리지 로직을 custom hook으로 구현 * refactor: set 함수를 사용할 때, 이전 상태 값을 변경하도록 수정 * feat: errorOptions의 타입 지정 * feat: props.name이 nickname이 아닐 경우 border 지정 --- package-lock.json | 19 ++ package.json | 1 + public/index.html | 29 +-- src/App.tsx | 26 +-- src/GlobalStyles.ts | 9 +- src/__tests__/useSwitch.test.js | 22 ++ src/__tests__/validator.test.js | 66 ------ src/components/Card/Card.styled.ts | 30 ++- src/components/Card/Card.tsx | 52 +++++ src/components/Card/index.tsx | 51 ----- .../CardPreview/CardPreview.styled.ts | 2 + src/components/CardPreview/CardPreview.tsx | 21 ++ src/components/CardPreview/index.tsx | 18 -- .../CardRegisterForm.styled.ts | 10 + .../CardRegisterForm/CardRegisterForm.tsx | 159 +++++++++++++++ .../Form/NicknameForm/NicknameForm.styled.ts | 23 +++ .../Form/NicknameForm/NicknameForm.tsx | 51 +++++ src/components/Form/index.ts | 4 + .../Header/{index.tsx => Header.tsx} | 4 +- .../{InputBox => }/Input/Input.styled.ts | 16 +- .../Input/index.tsx => Input/Input.tsx} | 15 +- .../{index.tsx => CardNumbers.tsx} | 19 +- .../{index.tsx => ExpirationDate.tsx} | 7 +- .../OwnerName/{index.tsx => OwnerName.tsx} | 5 +- .../Password/{index.tsx => Password.tsx} | 7 +- .../SecurityNumbers/SecurityNumbers.styled.ts | 1 + .../{index.tsx => SecurityNumbers.tsx} | 7 +- src/components/InputBox/index.ts | 13 +- .../SelectBank/SelectBank.styled.ts | 45 +++++ src/components/SelectBank/SelectBank.tsx | 37 ++++ src/components/index.ts | 7 + .../CardRegisterPage.styled.ts | 22 ++ .../CardRegisterPage/CardRegisterPage.tsx | 39 ++++ .../pages/MyCardPage/MyCardPage.styled.ts | 17 +- .../pages/MyCardPage/MyCardPage.tsx | 32 +++ src/components/pages/index.ts | 4 + src/components/portal/Modal/Modal.styled.ts | 22 ++ src/components/portal/Modal/Modal.tsx | 29 +++ src/components/portal/index.ts | 3 + src/components/styles/index.ts | 15 ++ src/constants/index.ts | 63 ++++++ src/context/CardInfoContext.tsx | 76 +++++++ src/context/CardListContext.tsx | 45 +++++ src/domain/validator.ts | 18 -- src/hooks/useForm.ts | 119 ++++++----- src/hooks/useLocalStorage.ts | 21 ++ src/hooks/useSwitch.ts | 17 ++ src/images/bc_logo.svg | 9 + src/images/hana_logo.svg | 9 + src/images/hyundai_logo.svg | 9 + src/images/index.ts | 10 + src/images/kakao_logo.svg | 9 + src/images/kookmin_logo.svg | 9 + src/images/lotte_logo.svg | 9 + src/images/sinhan_logo.svg | 9 + src/images/woori_logo.svg | 9 + src/index.tsx | 9 +- .../CardRegisterPage.styled.ts | 25 --- src/pages/CardRegisterPage/index.jsx | 189 ------------------ src/pages/MyCardPage/index.tsx | 38 ---- src/stories/CardNumberBox.stories.ts | 16 -- src/stories/Input.stories.ts | 45 ----- src/stories/components/Card.stories.ts | 82 ++++++++ src/stories/components/Header.stories.tsx | 37 ++++ src/stories/components/Input.stories.tsx | 84 ++++++++ .../InputBox/CardNumbers.stories.tsx | 100 +++++++++ .../InputBox/ExpirationDate.stories.tsx | 74 +++++++ .../components/InputBox/OwnerName.stories.tsx | 62 ++++++ .../components/InputBox/Password.stories.tsx | 71 +++++++ .../InputBox/SecurityNumbers.stories.tsx | 62 ++++++ src/stories/components/SelectBank.stories.tsx | 38 ++++ .../pages/CardRegisterPage.stories.tsx | 35 ++++ .../components/pages/MyCardPage.stories.tsx | 32 +++ src/types/InputBox.ts | 2 +- src/types/card.ts | 3 +- src/types/svg.d.ts | 1 + tsconfig.json | 11 +- 77 files changed, 1776 insertions(+), 640 deletions(-) create mode 100644 src/__tests__/useSwitch.test.js delete mode 100644 src/__tests__/validator.test.js create mode 100644 src/components/Card/Card.tsx delete mode 100644 src/components/Card/index.tsx create mode 100644 src/components/CardPreview/CardPreview.tsx delete mode 100644 src/components/CardPreview/index.tsx create mode 100644 src/components/Form/CardRegisterForm/CardRegisterForm.styled.ts create mode 100644 src/components/Form/CardRegisterForm/CardRegisterForm.tsx create mode 100644 src/components/Form/NicknameForm/NicknameForm.styled.ts create mode 100644 src/components/Form/NicknameForm/NicknameForm.tsx create mode 100644 src/components/Form/index.ts rename src/components/Header/{index.tsx => Header.tsx} (100%) rename src/components/{InputBox => }/Input/Input.styled.ts (63%) rename src/components/{InputBox/Input/index.tsx => Input/Input.tsx} (67%) rename src/components/InputBox/CardNumbers/{index.tsx => CardNumbers.tsx} (62%) rename src/components/InputBox/ExpirationDate/{index.tsx => ExpirationDate.tsx} (73%) rename src/components/InputBox/OwnerName/{index.tsx => OwnerName.tsx} (87%) rename src/components/InputBox/Password/{index.tsx => Password.tsx} (72%) rename src/components/InputBox/SecurityNumbers/{index.tsx => SecurityNumbers.tsx} (77%) create mode 100644 src/components/SelectBank/SelectBank.styled.ts create mode 100644 src/components/SelectBank/SelectBank.tsx create mode 100644 src/components/index.ts create mode 100644 src/components/pages/CardRegisterPage/CardRegisterPage.styled.ts create mode 100644 src/components/pages/CardRegisterPage/CardRegisterPage.tsx rename src/{ => components}/pages/MyCardPage/MyCardPage.styled.ts (73%) create mode 100644 src/components/pages/MyCardPage/MyCardPage.tsx create mode 100644 src/components/pages/index.ts create mode 100644 src/components/portal/Modal/Modal.styled.ts create mode 100644 src/components/portal/Modal/Modal.tsx create mode 100644 src/components/portal/index.ts create mode 100644 src/components/styles/index.ts create mode 100644 src/constants/index.ts create mode 100644 src/context/CardInfoContext.tsx create mode 100644 src/context/CardListContext.tsx create mode 100644 src/hooks/useLocalStorage.ts create mode 100644 src/hooks/useSwitch.ts create mode 100644 src/images/bc_logo.svg create mode 100644 src/images/hana_logo.svg create mode 100644 src/images/hyundai_logo.svg create mode 100644 src/images/index.ts create mode 100644 src/images/kakao_logo.svg create mode 100644 src/images/kookmin_logo.svg create mode 100644 src/images/lotte_logo.svg create mode 100644 src/images/sinhan_logo.svg create mode 100644 src/images/woori_logo.svg delete mode 100644 src/pages/CardRegisterPage/CardRegisterPage.styled.ts delete mode 100644 src/pages/CardRegisterPage/index.jsx delete mode 100644 src/pages/MyCardPage/index.tsx delete mode 100644 src/stories/CardNumberBox.stories.ts delete mode 100644 src/stories/Input.stories.ts create mode 100644 src/stories/components/Card.stories.ts create mode 100644 src/stories/components/Header.stories.tsx create mode 100644 src/stories/components/Input.stories.tsx create mode 100644 src/stories/components/InputBox/CardNumbers.stories.tsx create mode 100644 src/stories/components/InputBox/ExpirationDate.stories.tsx create mode 100644 src/stories/components/InputBox/OwnerName.stories.tsx create mode 100644 src/stories/components/InputBox/Password.stories.tsx create mode 100644 src/stories/components/InputBox/SecurityNumbers.stories.tsx create mode 100644 src/stories/components/SelectBank.stories.tsx create mode 100644 src/stories/components/pages/CardRegisterPage.stories.tsx create mode 100644 src/stories/components/pages/MyCardPage.stories.tsx create mode 100644 src/types/svg.d.ts diff --git a/package-lock.json b/package-lock.json index 69375b86c5..8ce52bfe42 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3935,6 +3935,16 @@ "@types/react-dom": "^18.0.0" } }, + "@testing-library/react-hooks": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-8.0.1.tgz", + "integrity": "sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "react-error-boundary": "^3.1.0" + } + }, "@testing-library/user-event": { "version": "13.5.0", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", @@ -12525,6 +12535,15 @@ } } }, + "react-error-boundary": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz", + "integrity": "sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5" + } + }, "react-error-overlay": { "version": "6.0.11", "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", diff --git a/package.json b/package.json index 4c5590bb8e..bd8bc942fb 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,7 @@ "@storybook/react-webpack5": "7.0.6", "@storybook/testing-library": "^0.0.14-next.2", "@types/styled-components": "5.1.26", + "@testing-library/react-hooks": "^8.0.1", "@types/uuid": "^9.0.1", "babel-plugin-named-exports-order": "0.0.2", "eslint-config-prettier": "8.8.0", diff --git a/public/index.html b/public/index.html index aa069f27cb..276e236815 100644 --- a/public/index.html +++ b/public/index.html @@ -5,39 +5,14 @@ - + - -