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

[1단계 - 페이먼츠 미션] 하루(김하루) 미션 제출합니다. #15

Merged
merged 94 commits into from
May 4, 2021
Merged
Show file tree
Hide file tree
Changes from 71 commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
1917d16
chore: 초기 환경설정
365kim Apr 20, 2021
bdf273a
docs: 기능 구현 목록 작성
shinsehantan Apr 20, 2021
5380a18
chore: storybook 실행 환경설정
365kim Apr 21, 2021
e3cee69
feat: Title 컴포넌트 구현
365kim Apr 21, 2021
fa776a7
chore: package.json 스크립트 추가
365kim Apr 21, 2021
992a063
feat: Text 컴포넌트 구현
365kim Apr 21, 2021
03a86c7
feat: Card 컴포넌트 구현
365kim Apr 21, 2021
a1f2de7
feat: UserCardList 컴포넌트 구현
365kim Apr 21, 2021
77f3016
feat: Label 컴포넌트 구현
365kim Apr 22, 2021
a127842
feat: Input 컴포넌트 구현
365kim Apr 22, 2021
6b82714
feat: Container 컴포넌트 구현
365kim Apr 22, 2021
f05b803
feat: Button 컴포넌트 구현
365kim Apr 22, 2021
da955b8
feat: Form 컴포넌트 구현
365kim Apr 23, 2021
b63980e
feat: CreditCard 컴포넌트 구현
365kim Apr 23, 2021
561dbad
chore: eslint 설정 변경, classnames 라이브러리 설치
365kim Apr 24, 2021
6baf211
feat: Circle 컴포넌트 구현
365kim Apr 24, 2021
afbc1d3
refactor: 컴포넌트가 구체적인 style이 아니라 className을 받도록 변경
365kim Apr 24, 2021
3f6b6b2
fix: for -> htmlFor 로 수정
365kim Apr 24, 2021
22df6a1
feat: CardCompanyItem 구현
365kim Apr 24, 2021
11fb739
feat: Modal 컴포넌트 구현
365kim Apr 24, 2021
78b32df
feat: CardCompanySelectModal 구현
365kim Apr 24, 2021
aad3c27
feat: CardInfoForm 구현
365kim Apr 24, 2021
141e0df
chore: storybook 예제파일 삭제
365kim Apr 24, 2021
f676b73
feat: AddFormPage 구현
365kim Apr 24, 2021
500bc55
feat: AddCompletePage 구현
365kim Apr 24, 2021
d30be85
feat: 라우팅 구현
365kim Apr 24, 2021
a8ad193
feat: 카드번호 입력창 자동포커스 구현
365kim Apr 24, 2021
39e0224
chore: 스토리북 decorator 제거 및 viewport 설정 추가
365kim Apr 26, 2021
a31ed73
fix: Container 컴포넌트의 스토리가 제대로 표시되지 않는 문제 해결
365kim Apr 26, 2021
f84ba8c
feat: 카드번호 입력 시 하이픈 자동입력 및 포커싱 이동 구현
365kim Apr 26, 2021
66b7a15
feat: 카드사 자동 매칭 기능 구현
365kim Apr 26, 2021
61b8355
feat: 카드사 자동 매칭 실패 시 카드사 선택 모달 표시 기능 구현
365kim Apr 26, 2021
a52917c
refactor: 카드폼 작성 관련 Input들을 각각의 디렉토리로 분리
365kim Apr 26, 2021
8aa85e0
fix: Proptypes 에러 해결
365kim Apr 26, 2021
ca60cce
refactor: fourDigit 키값 변경 및 카드번호 입력 핸들러 함수 분리
365kim Apr 26, 2021
ff04477
feat: 카드사 선택 모달에서 카드사 선택 기능 및 선택에 따른 모달 닫기 구현
365kim Apr 26, 2021
e8f4a84
feat: 카드사 선택 모달에서 Dimmed 영역 선택에 따른 모달 닫기 구현
365kim Apr 26, 2021
32d0527
feat: 카드 번호 모두 입력 시 카드 이미지에 카드 번호 표시
365kim Apr 26, 2021
e90febc
feat: 카드 번호 마지막 네 자리 입력 시 만료일로 포커싱 이동
365kim Apr 26, 2021
da69bc9
feat: 만료일 입력 부분 포커싱 이동 구현
365kim Apr 27, 2021
ee50354
feat: 만료일 모두 입력 시 카드 이미지에 만료일 표시
365kim Apr 27, 2021
ac90b21
feat: 입력된 카드소유자 이름 글자수 실시간 표시 기능 구현
365kim Apr 27, 2021
be4da1f
feat: 카드소유자 이름 알파벳만 입력 가능하도록 구현 (항상 대문자로 표시)
365kim Apr 27, 2021
de98658
feat: 포커스 해제 시 카드 이미지에 카드소유자 이름 표시
365kim Apr 27, 2021
7b1aaf7
feat: 실제 카드번호 패턴에 따른 카드회사 매칭 데이터 추가
365kim Apr 27, 2021
fb4aa1b
feat: 카드 폼 CSS 스타일 수정
365kim Apr 27, 2021
b46ca3e
feat: 물음표 버튼 호버 시 보안 코드 설명 이미지 표시 기능 구현
365kim Apr 27, 2021
c9527f2
feat: 보안 코드 3자리 모두 입력 시 카드 비밀번호로 포커싱 이동
365kim Apr 27, 2021
b67f2f2
feat: 카드 비밀번호 입력 기능 구현
365kim Apr 27, 2021
525d853
feat: 입력 폼 모두 입력 시 다음 버튼 활성화
365kim Apr 27, 2021
e439fb3
feat: 다음 버튼 클릭했을 때 카드사 선택 누락 시 카드사 선택 모달 표시
365kim Apr 28, 2021
cf09bb9
feat: 카드 등록 시 등록한 카드의 이미지 미리보기 표시
365kim Apr 28, 2021
f4d1bc3
feat: 카드 별칭 등록 기능 구현
365kim Apr 28, 2021
cd9447e
refactor: 상수화
365kim Apr 28, 2021
e5aa8b4
refactor: 불필요한 자식 컴포넌트 state 제거, 각 Input의 state를 cardInfo로 통합
365kim Apr 28, 2021
6f6b6ee
chore: 배포 환경 설정
365kim Apr 28, 2021
7f12bc2
refactor: 불필요한 state 제거, 불필요한 인자 제거
365kim Apr 28, 2021
e419fb8
refactor: cardInfo 중 필요한 인자만 props로 전달
365kim Apr 28, 2021
3b8df5e
fix: 비밀번호 한칸에 여러 숫자가 써지는 문제 해결
365kim Apr 28, 2021
00fa0bd
refactor: inString 키워드 formatted로 변경
365kim Apr 28, 2021
32eb089
refactor: isFormFulfilled 내의 각 input 완성여부 검사 함수 추출
365kim Apr 28, 2021
d4e965a
fix: 만료일이 입력 완료 전 표시되는 문제 해결
365kim Apr 28, 2021
def7e24
refactor: 카드 소유자 이름 초기값 상수화
365kim Apr 28, 2021
0d2f3a3
style: printWidth 120 적용
365kim Apr 28, 2021
016c9f3
chore: cspell config 불필요한 주석 제거
365kim Apr 28, 2021
668a54c
refactor: Button 컴포넌트 onClick 초기값 undefined->null
365kim Apr 28, 2021
ea1f45b
style: import 문 순서 변경
365kim Apr 28, 2021
6623025
chore: 빌드 옵션에 --profile 추가
365kim Apr 29, 2021
5252455
refactor: cardInfo 상태 위치 변경, cardList 상태 추가
365kim Apr 30, 2021
b734369
refactor: 각 input의 개별 setter 생성
365kim Apr 30, 2021
980e0d6
refactor: Form validator, handler 분리
365kim Apr 30, 2021
9c4203b
refactor: isModalOpen 상태의 위치 변경(1 depth 하위)
365kim Apr 30, 2021
d83ce8b
style: 함수 순서 변경
365kim Apr 30, 2021
4b07468
refactor: Title 컴포넌트 재사용성 개선
365kim May 3, 2021
6a366a1
refactor: Text 컴포넌트 재사용성 개선
365kim May 3, 2021
37be358
refactor: Modal 컴포넌트 재사용성 개선, CSS 스타일 정의 위치 수정
365kim May 3, 2021
dda79c2
refactor: Label 컴포넌트 재사용성 개선
365kim May 3, 2021
c57b0e2
refactor: Text 컴포넌트 불필요한 prop 삭제
365kim May 3, 2021
ab1db8d
refactor: Input 컴포넌트 재사용성 개선, CSS 스타일 정의 위치 수정
365kim May 3, 2021
b4c1101
refactor: Form 컴포넌트 재사용성 개선
365kim May 3, 2021
6e6bebb
refactor: Card, CreditCardPreview 컴포넌트 재사용성 개선
365kim May 3, 2021
398f431
refactor: Button 컴포넌트 재사용성 개선, BackButton 컴포넌트 생성
365kim May 3, 2021
f96d892
refactor: Container 컴포넌트 재사용성 개선
365kim May 3, 2021
0302feb
refactor: createRef -> useRef로 변경
365kim May 3, 2021
aecbb32
fix: prop-types 콘솔 에러 수정
365kim May 3, 2021
8496276
chore: react-router-dom 설치
365kim May 3, 2021
4bc4e24
refactor: ROUTE 상수명 변경
365kim May 3, 2021
2daadd5
refactor: pages 하위 디렉토리 이름 간결화
365kim May 3, 2021
ab9bce7
reafactor: react-router 적용
365kim May 3, 2021
b5c2d97
refactor: 별도의 파일에 있던 이벤트핸들러 index.js로 이동
365kim May 3, 2021
f07e749
reactor: 포커스 이동 받을 ref의 네이밍 추상화
365kim May 3, 2021
4630b1f
fix: 라우터의 nesting이 제대로 동작하지 않는 문제 해결
365kim May 3, 2021
fe95865
refactor: BackwardButton -> BackwardIcon으로 변경
365kim May 3, 2021
1253075
refactor: Text 컴포넌트 내 inline-block 속성값 삭제
365kim May 3, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"env": {
"browser": true
},
"extends": [
"semistandard",
"standard-jsx",
"standard-react",
"plugin:react/recommended",
"plugin:jsx-a11y/recommended",
"prettier"
],
"plugins": ["react", "jsx-a11y"],
"parserOptions": {
"sourceType": "module"
},
"parser": "babel-eslint",
"rules": {
"react/jsx-handler-names": "off",
"react/prop-types": "off",
"react/react-in-jsx-scope": "off",
"react/button-has-type": "off"
}
}
24 changes: 24 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# production
/build

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
.eslintcache
10 changes: 10 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"semi": true,
"useTabs": false,
"tabWidth": 2,
"printWidth": 120,
"endOfLine": "auto",
"singleQuote": true,
"arrowParens": "always",
"trailingComma": "all"
}
4 changes: 4 additions & 0 deletions .storybook/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module.exports = {
stories: ['../src/**/*.stories.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
addons: ['@storybook/addon-links', '@storybook/addon-essentials', '@storybook/preset-create-react-app'],
};
20 changes: 20 additions & 0 deletions .storybook/preview.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
const customViewports = {
Default: {
name: 'Default',
styles: {
width: '375px',
height: '701px',
},
},
};
export const parameters = {
actions: { argTypesRegex: '^on[A-Z].*' },
controls: {},
layout: 'fullscreen',
viewport: {
viewports: {
...customViewports,
},
defaultViewport: 'Default',
},
};
55 changes: 55 additions & 0 deletions REQUIREMENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
## 📝 기능 구현 목록

### 1단계

#### 카드 목록 화면

- [x] 카드추가 버튼(이미지)을 클릭하면 카드 추가 폼 화면이 표시된다.

#### 카드 추가 폼 화면

- 카드번호
- [x] 카드 번호 입력창이 자동 포커싱된다.
- [x] 네 자리 입력이 완료될 때마다 하이픈(-)이 표시되고 다음 입력창으로 넘어간다.
- [x] 8자리까지 입력했을 때 8자리로 매칭되는 카드사가 있을 경우, 카드사가 자동으로 선택된다.
- [x] 8자리까지 입력했을 때 8자리로 매칭되는 카드사가 없을 경우, 카드사 선택 모달이 표시된다.
- [x] 카드사 버튼을 클릭해서 카드사를 선택할 수 있다.
- [x] 모달의 Dimmed 영역을 클릭해서 모달을 닫을 수 있다.
- [x] 9~12번째 자리와 13~16번째 자리 입력 시 마스킹되어 표시된다.
- [x] 16자리를 모두 입력하면 카드 이미지에도 카드번호가 표시된다.
- [x] 16자리를 모두 입력하면 카드 만료일 입력창으로 포커스가 넘어간다.
- 카드 만료일
- [x] 월 2자리 입력이 완료되면 연 2자리 입력창으로 포커스가 넘어간다.
- [x] 4자리를 모두 입력하면 카드 소유자 이름 입력창으로 포커스가 넘어간다.
- [x] 4자리를 모두 입력하면 카드 이미지에도 카드번호가 표시된다.
- 카드 소유자 이름
- [x] 입력된 글자수가 우측 상단에 실시간으로 표시된다.
- [x] 알파벳만 입력 가능하다.
- [x] 소문자로 입력하더라도 input창에는 대문자로 표시된다.
- [x] 이름을 입력하고 포커스아웃 되었을 때 카드 이미지에도 이름이 표시된다.
- 보안 코드
- [x] 입력 시 마스킹되어 표시된다.
- [x] 물음표 버튼 호버 시 보안 코드 설명 모달이 표시된다.
- [x] 3자리를 모두 입력하면 카드 비밀번호 입력창으로 포커스가 넘어간다.
- 카드 비밀번호
- [x] 입력 시 마스킹되어 표시된다.
- 카드 등록
- [x] 선택 칸을 제외한 빈 칸이 없고, 카드사도 선택이 된 경우에 '다음'버튼이 표시된다.
- [x] '다음'버튼을 클릭하면 카드를 등록한다.
- [x] 카드사가 선택되지 않았을 경우, 카드사 선택 모달을 표시한다.
- [ ] (심화) 만료 월 입력 시 1 부터 12 사이의 정수만 입력할 수 있다.
- [ ] (심화) 만료 연도 입력 시 00 부터 99 사이의 정수만 입력할 수 있다.
- [ ] (심화) 현재 연월 보다 이전 연월은 입력한 경우 등록할 수 없다.

#### 카드 추가 확인 화면

- 등록 카드 확인
- [x] 등록한 카드의 이미지가 표시된다.
- 별칭 등록
- [x] 별칭 등록에 자동 포커싱된다.
- [x] 1글자 ~ 10글자 범위 내로 입력 가능하다.

### 2단계

- [ ] 카드 추가 확인 버튼을 누르면 보유 카드 목록 화면을 표시한다.
- 추가 작성 예정
17 changes: 17 additions & 0 deletions cspell.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"version": "0.1",
"language": "en",
"words": [
"predeploy",
"semistandard",
"datetime",
"noopener",
"noreferrer",
"Viewports",
"Parens",
"Strapi",
"classname",
"browserslist"
],
"flagWords": []
}
Loading