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단계 - 페이먼츠] 라이언(박한영) 미션 제출합니다. #366

Merged
merged 65 commits into from
Apr 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
2213063
chore: prettier 설정
rbgksqkr Apr 16, 2024
890c4c3
docs: 기능 요구 사항 분석 및 컴포넌트 설계 작성
rbgksqkr Apr 16, 2024
b4f99b3
chore(README): 오타 수정
rbgksqkr Apr 16, 2024
0e697e1
chore(prettier): 확장자 변경
rbgksqkr Apr 16, 2024
565fdd0
chore(eslint): eslint에 prettier 플러그인 설정
rbgksqkr Apr 16, 2024
c8840e2
feat(useInput): useInput 커스텀 훅 구현
rbgksqkr Apr 16, 2024
33ee180
feat(Input): Input 공통 컴포넌트 구현
rbgksqkr Apr 16, 2024
bfcc7ef
chore: styled-components 설치
rbgksqkr Apr 16, 2024
6735000
docs(REQUIREMENTS): 기능 요구 사항 업데이트
rbgksqkr Apr 16, 2024
8545e93
refactor(useInput): 상태관리 및 에러처리 구조 개선
rbgksqkr Apr 16, 2024
c86cd98
refactor(Input): handleChange를 props로 받도록 수정 및 스타일링 추가
rbgksqkr Apr 16, 2024
6bca6fb
feat(App): 카드 소유자 이름 섹션 구현
rbgksqkr Apr 16, 2024
702f5ca
refactor(CardholderNameContainer): 컴포넌트 분리
rbgksqkr Apr 17, 2024
7b92fce
feat(useInput): input blur 처리될 때유효성 검사
rbgksqkr Apr 17, 2024
c0152c4
feat(CardholderNameContainer): onBlur 핸들러로updateErrorMessage 등록
rbgksqkr Apr 17, 2024
f490168
feat(CardExpiryDateContainer): 컴포넌트 구현
rbgksqkr Apr 17, 2024
c3f2a22
refactor(Input): rest 파라미터 적용
rbgksqkr Apr 17, 2024
06d3432
refactor(inquiry): inquire 함수 파일 분리
rbgksqkr Apr 17, 2024
7954511
feat(App): CardExpiryDateContainer 컴포넌트 추가
rbgksqkr Apr 17, 2024
1535fdd
chore(eslint): any 타입 warn 처리
rbgksqkr Apr 17, 2024
157b17e
refactor(inquire): 유효기간 월과 년도의 유효성 검사 조건 수정
rbgksqkr Apr 17, 2024
cc9658f
feat(inquireCardNumber): 카드 번호 inquire 함수 구현
rbgksqkr Apr 17, 2024
89ca4c4
chore(inquireCardHolderName): 불필요한 입력값 길이 검증 로직 제거
rbgksqkr Apr 17, 2024
219b8d0
chore(useInput): inquireValidity optional로 변경
rbgksqkr Apr 17, 2024
a1fe1fc
feat(useInputs): 커스텀 훅 구현
rbgksqkr Apr 17, 2024
2c13b28
feat(CardNumbersContainer): 컴포넌트 구현
rbgksqkr Apr 17, 2024
6c5efbe
refactor(common): ErrorText 스타일 분리
rbgksqkr Apr 17, 2024
8c8ca0e
feat(App): CardNumberContainer 컴포넌트 등록
rbgksqkr Apr 17, 2024
cb5e35e
docs(REQUIREMENTS): 구현사항 업데이트
rbgksqkr Apr 17, 2024
864cf0b
design(GlobalStyles): reset css 적용
rbgksqkr Apr 18, 2024
16380c0
design(Input): 스타일링 수정
rbgksqkr Apr 18, 2024
8ae34f3
feat(useInputs): errorStatus와 errorMessage 분리
rbgksqkr Apr 18, 2024
aee4de7
feat: RegistrationLayout 공통 컴포넌트 적용
rbgksqkr Apr 18, 2024
38a05bd
feat: CardPreview 컴포넌트 구현
rbgksqkr Apr 18, 2024
2aff590
feat(inquireCardholderName): 공백 관련 검증 로직 추가
rbgksqkr Apr 18, 2024
2569f7a
docs(REQUIREMENTS): 기능 구현 목록 업데이트
rbgksqkr Apr 18, 2024
e8d6808
fix(CardPreview): 이미지 경로 수정
rbgksqkr Apr 18, 2024
fcf4acd
test(Input.stories): Input story 생성
rbgksqkr Apr 18, 2024
f8368dc
test(CardPreview.stories): CardPreview story 생성
rbgksqkr Apr 18, 2024
8dfc0fe
fix(CardPreview): 잘못 매칭된 카드 변경
rbgksqkr Apr 18, 2024
f4fcfc2
design(CardPreview): margin 및 padding 적용 위치 수정
rbgksqkr Apr 18, 2024
be31813
fix(Input): isError prop을 transient prop으로 수정
Parkhanyoung Apr 18, 2024
d9bc2bf
refactor(Input): 타입 안정성을 위해 InputProps가InputHTMLAttributes를 상속받도록 수정
Parkhanyoung Apr 20, 2024
7204066
refactor: useInput/useInputs를 useValidation/useValidations로 대체
Parkhanyoung Apr 21, 2024
0ec98e5
chore(gitignore): eol 추가
Parkhanyoung Apr 21, 2024
3719a25
refactor: container 컴포넌트들의 interface를 통일 / 카드번호, 유효기간, 소유자명에 대한 커스텀훅을…
Parkhanyoung Apr 21, 2024
3e58dc3
chore: 미사용 css 파일 제거
Parkhanyoung Apr 21, 2024
044882b
refactor: 유효성 검증 로직의 네이밍 수정(inquire -> validate)
Parkhanyoung Apr 21, 2024
4a29bc5
refactor(CardPreview): 카드 브랜드 로고를 별도의 컴포넌트로 분리
Parkhanyoung Apr 21, 2024
31497e4
refactor(CardPreview): 카드 숫자를 별도의 컴포넌트로 분리
Parkhanyoung Apr 21, 2024
786ea1a
chore: 불필요한 css import 문 삭제
Parkhanyoung Apr 21, 2024
45b603f
feat(CardExpiryDate, CardhokderName): placeholder 문구를 예시 입력으로 수정
Parkhanyoung Apr 21, 2024
ed85991
refactor(CardNumbersContainer): 상수 분리
Parkhanyoung Apr 21, 2024
dfe9df6
refactor: RegisrationLayout의 네이밍을 InputField로 수정
Parkhanyoung Apr 21, 2024
5a26bd9
fix(validateCardNumber): 카드 번호 유효성 검증을 숫자 4자리만 통과시키도록 수정
Parkhanyoung Apr 21, 2024
7c51312
refactor: 유효기간 월(月) 입력 창 blur 시, 한 자리일 경우 두 자리로 자동 변경 처리
Parkhanyoung Apr 21, 2024
d9f3bb4
refactor(App): XXXContainer 형태의 네이밍을 XXXInputContainer로 수정
Parkhanyoung Apr 21, 2024
97e5687
refactor(CardBrandLogo): 가독성을 위해 변수명 수정
Parkhanyoung Apr 21, 2024
93e73f6
refactor(CardNumberContainer): 본래 의미에 더 부합하기 위해 type명 password를 secre…
Parkhanyoung Apr 21, 2024
d79f991
refactor(CardPreview): ExpiryDate를 별도의 컴포넌트로 분리
Parkhanyoung Apr 21, 2024
b55be32
refactor(Input): 반복 사용되는 색상 코드를 변수로 선언
Parkhanyoung Apr 21, 2024
c6bcc66
refactor(App): 스타일 컴포넌트 CardInfoWrapper -> CardInfoInputWrapper 네이밍 수정
Parkhanyoung Apr 21, 2024
78905d9
refactor(convertKeysIntoObject): forEach가 아닌 reduce를 사용하는 방식으로 수정
Parkhanyoung Apr 21, 2024
15659de
refactor(useValidation, useValidations): 첫 번째 인자 명을 value에서 state로 수정
Parkhanyoung Apr 21, 2024
e0b929a
refactor(validator): 유효성 검증 관련 상수를 변수로 선언
Parkhanyoung Apr 21, 2024
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
20 changes: 9 additions & 11 deletions .eslintrc.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,16 @@ module.exports = {
root: true,
env: { browser: true, es2020: true },
extends: [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:react-hooks/recommended",
"plugin:storybook/recommended",
'plugin:prettier/recommended',
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:react-hooks/recommended',
'plugin:storybook/recommended',
],
ignorePatterns: ["dist", ".eslintrc.cjs"],
parser: "@typescript-eslint/parser",
plugins: ["react-refresh"],
ignorePatterns: ['dist', '.eslintrc.cjs'],
parser: '@typescript-eslint/parser',
plugins: ['react-refresh'],
rules: {
"react-refresh/only-export-components": [
"warn",
{ allowConstantExport: true },
],
'react-refresh/only-export-components': ['warn', { allowConstantExport: true }],
},
};
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ dist-ssr
*.sln
*.sw?

*storybook.log
*storybook.log
12 changes: 12 additions & 0 deletions .prettierrc.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module.exports = {
printWidth: 120,
tabWidth: 2,
useTabs: false,
semi: true,
singleQuote: true,
trailingComma: 'all',
bracketSpacing: true,
arrowParens: 'avoid',
proseWrap: 'never',
endOfLine: 'auto',
};
2 changes: 1 addition & 1 deletion .storybook/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ const config: StorybookConfig = {
options: {},
},
docs: {
autodocs: "tag",
autodocs: true,
},
};
export default config;
12 changes: 11 additions & 1 deletion .storybook/preview.ts → .storybook/preview.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
import type { Preview } from "@storybook/react";
import React from "react";
import GlobalStyles from '../src/styles/GlobalStyles';

export const decorators = [
(Story) => (
<>
<GlobalStyles />
<Story />
</>
),
];

const preview: Preview = {
parameters: {
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/i,
},
},
},
Expand Down
34 changes: 34 additions & 0 deletions docs/REQUIREMENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# react-payments
- 스타일링 : styled-components
1. 사용자 관점에서 보이는 기능들을 기준으로 분류
2. 개발자 관점에서 컴포넌트 기준으로 분류

# 기능 요구 사항 분석
- [x] 카드 번호를 입력한다. (입력이 유효하지 않은 경우 에러 메세지 출력)
- [x] 4자리 숫자만 입력할 수 있다.
- [x] 카드 번호 뒤의 8자리는 `*` 로 표시한다.
- [x] 입력한 카드 번호에 맞는 브랜드 로고를 UI에 표시한다. (해당하는 경우)
- [x] Visa: 4로 시작하는 16자리 숫자
- [x] MasterCard: 51~55로 시작하는 16자리 숫자
- [x] 카드 유효기간을 입력한다. (입력이 유효하지 않은 경우 에러 메세지 출력)
- [x] 월(1월~12월)과 년도(2024년~2040년)를 범위 내에서만 입력할 수 있다.
- [x] 숫자만 입력할 수 있다.
- [x] 카드 소유자 이름을 입력한다. (입력이 유효하지 않은 경우 에러 메세지 출력)
- [x] 영문자 대문자만 입력할 수 있다.
- [x] 이름은 100자 내로 입력할 수 있다.
- [x] 소문자로 입력해도 대문자로 자동 변환된다. (optional)
- [x] 실시간으로 입력하는 카드 정보를 보여준다.

# 컴포넌트 설계
- 공통 컴포넌트
- Input
- RegistrationLayout

- 컴포넌트
- CardPreview (카드 프리뷰)
- CardNumberContainer (카드 번호)
- CardExpiryDateContainer (카드 유효기간)
- CardholderNameContainer (카드 소유자 이름)



Loading