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

KDT5_Team_6 과제 제출 #2

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open

KDT5_Team_6 과제 제출 #2

wants to merge 1 commit into from

Conversation

ruddnjs3769
Copy link

SumTendo 게임판매 웹서비스

  • Sumtendo 는 닌텐도 게임을 판매하는 웹서비스 입니다.


➡️배포 - 숨텐도


➡️배포 - 숨텐도 관리자

Description

Stack

Feature

Main

메인페이지 제품 보기/검색
카테고리별 상품 상품 검색

Access

회원가입 로그인
로그아웃 비밀번호 재설정

User

마이페이지 계좌조회
정보 수정 구매내역

Payment

장바구니 구매정보확인
결제 결제 완료

Admin

관리자 로그인 유저 관리
제품 관리 제품 스크래핑

Team

팀원 김경원 김성은 이창휘 정태욱
역할 장바구니 / 결제 동의 / 구매 정보 / 결제 / 결제 완료 마이페이지 / 계좌 조회 / 계좌 추가 / 구매 내역 / 정보 수정 회원가입 / 로그인 / 로그아웃 / 비밀번호 변경 메인 / 검색 / 어드민 / 제품 상세정보 / 장르별 검색


Files

자료구조
📦ToyProject__Nintendo
 ┣ 📂.vscode
 ┃ ┣ 📜javascript.code-snippets
 ┃ ┗ 📜settings.json
 ┣ 📂src
 ┃ ┣ 📂apis
 ┃ ┃ ┣ 📂access
 ┃ ┃ ┃ ┣ 📂signIn
 ┃ ┃ ┃ ┃ ┗ 📜index.ts
 ┃ ┃ ┃ ┣ 📂signOut
 ┃ ┃ ┃ ┃ ┗ 📜index.ts
 ┃ ┃ ┃ ┗ 📂signUp
 ┃ ┃ ┃ ┃ ┗ 📜index.ts
 ┃ ┃ ┣ 📂detail
 ┃ ┃ ┃ ┗ 📜index.ts
 ┃ ┃ ┣ 📂payment
 ┃ ┃ ┃ ┣ 📂access
 ┃ ┃ ┃ ┃ ┗ 📜index.ts
 ┃ ┃ ┃ ┣ 📂account
 ┃ ┃ ┃ ┃ ┣ 📜index.ts
 ┃ ┃ ┃ ┃ ┗ 📜memo.md
 ┃ ┃ ┃ ┗ 📂product
 ┃ ┃ ┃ ┃ ┣ 📜index.ts
 ┃ ┃ ┃ ┃ ┗ 📜memo.md
 ┃ ┃ ┣ 📂search
 ┃ ┃ ┃ ┗ 📜index.ts
 ┃ ┃ ┣ 📂user
 ┃ ┃ ┃ ┣ 📂editedUserInfo
 ┃ ┃ ┃ ┃ ┗ 📜index.ts
 ┃ ┃ ┃ ┗ 📂userList
 ┃ ┃ ┃ ┃ ┗ 📜index.ts
 ┃ ┃ ┗ 📜index.ts
 ┃ ┣ 📂components
 ┃ ┃ ┣ 📂access
 ┃ ┃ ┃ ┗ 📂validate
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┣ 📂common
 ┃ ┃ ┃ ┣ 📂Footer
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂HeaderSearchBar
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂MainHeader
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂UserHeader
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📜Bank.module.scss
 ┃ ┃ ┃ ┣ 📜Bank.tsx
 ┃ ┃ ┃ ┣ 📜BankBtn.module.scss
 ┃ ┃ ┃ ┣ 📜BankBtn.tsx
 ┃ ┃ ┃ ┣ 📜Modal.module.scss
 ┃ ┃ ┃ ┗ 📜Modal.tsx
 ┃ ┃ ┣ 📂detail
 ┃ ┃ ┃ ┣ 📂Infomation
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂MediaContainer
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┗ 📂Notice
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┣ 📂home
 ┃ ┃ ┃ ┣ 📂ConnectAccountBanner
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂HomeSwiper
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┣ 📜index.tsx
 ┃ ┃ ┃ ┃ ┗ 📜swiper.css
 ┃ ┃ ┃ ┣ 📂News
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂OnlineStore
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┗ 📂Softwares
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┣ 📂mypage
 ┃ ┃ ┃ ┣ 📂bank
 ┃ ┃ ┃ ┃ ┣ 📜BankSelect.module.scss
 ┃ ┃ ┃ ┃ ┣ 📜BankSelect.tsx
 ┃ ┃ ┃ ┃ ┣ 📜ConnectedAccount.module.scss
 ┃ ┃ ┃ ┃ ┣ 📜ConnectedAccount.tsx
 ┃ ┃ ┃ ┃ ┣ 📜ConnectedBank.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜ConnectedBank.tsx
 ┃ ┃ ┃ ┣ 📂nav
 ┃ ┃ ┃ ┃ ┣ 📜Nav.module.scss
 ┃ ┃ ┃ ┃ ┣ 📜Nav.tsx
 ┃ ┃ ┃ ┃ ┣ 📜SideBar.module.scss
 ┃ ┃ ┃ ┃ ┣ 📜SideBar.tsx
 ┃ ┃ ┃ ┃ ┣ 📜SideBarItem.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜SideBarItem.tsx
 ┃ ┃ ┃ ┗ 📂productList
 ┃ ┃ ┃ ┃ ┣ 📜GetItem.module.scss
 ┃ ┃ ┃ ┃ ┣ 📜GetItem.tsx
 ┃ ┃ ┃ ┃ ┣ 📜GetItemMore.module.scss
 ┃ ┃ ┃ ┃ ┣ 📜GetItemMore.tsx
 ┃ ┃ ┃ ┃ ┣ 📜GetList.module.scss
 ┃ ┃ ┃ ┃ ┣ 📜GetList.tsx
 ┃ ┃ ┃ ┃ ┣ 📜JjimItem.module.scss
 ┃ ┃ ┃ ┃ ┣ 📜JjimItem.tsx
 ┃ ┃ ┃ ┃ ┣ 📜JjimItemMore.module.scss
 ┃ ┃ ┃ ┃ ┣ 📜JjimItemMore.tsx
 ┃ ┃ ┃ ┃ ┣ 📜JjimList.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜JjimList.tsx
 ┃ ┃ ┣ 📂payment
 ┃ ┃ ┃ ┣ 📂payMethod
 ┃ ┃ ┃ ┃ ┣ 📜BankConnect.module.scss
 ┃ ┃ ┃ ┃ ┣ 📜BankConnect.tsx
 ┃ ┃ ┃ ┃ ┣ 📜ConnectedBank.module.scss
 ┃ ┃ ┃ ┃ ┣ 📜ConnectedBank.tsx
 ┃ ┃ ┃ ┃ ┣ 📜PossibleBank.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜PossibleBank.tsx
 ┃ ┃ ┃ ┣ 📜Btn.module.scss
 ┃ ┃ ┃ ┣ 📜Btn.tsx
 ┃ ┃ ┃ ┣ 📜CartItem.module.scss
 ┃ ┃ ┃ ┣ 📜CartItem.tsx
 ┃ ┃ ┃ ┣ 📜Loading.module.scss
 ┃ ┃ ┃ ┣ 📜Loading.tsx
 ┃ ┃ ┃ ┣ 📜PayProcessFlow.module.scss
 ┃ ┃ ┃ ┣ 📜PayProcessFlow.tsx
 ┃ ┃ ┃ ┣ 📜ShoppingCart.module.scss
 ┃ ┃ ┃ ┗ 📜ShoppingCart.tsx
 ┃ ┃ ┗ 📂search
 ┃ ┃ ┃ ┣ 📂Banner
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂Filter
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂Genre
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂Product
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂ProductList
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂Search
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂SearchBar
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┗ 📂SearchSwiper
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┣ 📜index.tsx
 ┃ ┃ ┃ ┃ ┗ 📜swiper.css
 ┃ ┣ 📂constants
 ┃ ┃ ┣ 📂home
 ┃ ┃ ┃ ┗ 📜index.ts
 ┃ ┃ ┣ 📂payment
 ┃ ┃ ┃ ┗ 📜index.ts
 ┃ ┃ ┗ 📂search
 ┃ ┃ ┃ ┗ 📜index.ts
 ┃ ┣ 📂hooks
 ┃ ┃ ┣ 📜useCartItems.ts
 ┃ ┃ ┗ 📜useUserInfo.ts
 ┃ ┣ 📂layouts
 ┃ ┃ ┣ 📜AccessLayout.module.scss
 ┃ ┃ ┣ 📜AccessLayout.tsx
 ┃ ┃ ┣ 📜MainLayout.tsx
 ┃ ┃ ┣ 📜MypageLayout.module.scss
 ┃ ┃ ┣ 📜MypageLayout.tsx
 ┃ ┃ ┣ 📜PaymentLayout.module.scss
 ┃ ┃ ┗ 📜PaymentLayout.tsx
 ┃ ┣ 📂pages
 ┃ ┃ ┣ 📂access
 ┃ ┃ ┃ ┣ 📂ageSignUp
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂logIn
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂logOut
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂passwordChangeForm
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂passwordCheck
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂signUpForm
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┣ 📂detail
 ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┣ 📂home
 ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┣ 📂mypage
 ┃ ┃ ┃ ┣ 📂account
 ┃ ┃ ┃ ┃ ┣ 📂addAccount
 ┃ ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂certProfile
 ┃ ┃ ┃ ┃ ┣ 📂editProfile
 ┃ ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂getItemAll
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┣ 📂payment
 ┃ ┃ ┃ ┣ 📂agreement
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂checkInfo
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂orderComplete
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📂payMethod
 ┃ ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┃ ┗ 📂search
 ┃ ┃ ┃ ┣ 📜index.module.scss
 ┃ ┃ ┃ ┗ 📜index.tsx
 ┃ ┣ 📂recoil
 ┃ ┃ ┣ 📂common
 ┃ ┃ ┃ ┗ 📜userState.ts
 ┃ ┃ ┣ 📂detail
 ┃ ┃ ┃ ┗ 📜productState.ts
 ┃ ┃ ┗ 📂search
 ┃ ┃ ┃ ┣ 📜productState.ts
 ┃ ┃ ┃ ┗ 📜queryStringState.ts
 ┃ ┣ 📂types
 ┃ ┃ ┣ 📜account.ts
 ┃ ┃ ┣ 📜auth.ts
 ┃ ┃ ┣ 📜product.ts
 ┃ ┃ ┣ 📜user.ts
 ┃ ┃ ┗ 📜usercart.ts
 ┃ ┣ 📂utils
 ┃ ┃ ┣ 📜constants.ts
 ┃ ┃ ┣ 📜getBankLogo.ts
 ┃ ┃ ┗ 📜search.ts
 ┃ ┣ 📜App.scss
 ┃ ┣ 📜App.tsx
 ┃ ┣ 📜custom.d.ts
 ┃ ┣ 📜index.scss
 ┃ ┣ 📜index.tsx
 ┃ ┗ 📜_variables.scss
 ┣ 📜.eslintrc.json
 ┣ 📜.gitignore
 ┣ 📜.prettierignore
 ┣ 📜.prettierrc
 ┣ 📜Convention.md
 ┣ 📜craco.config.js
 ┣ 📜package-lock.json
 ┣ 📜package.json
 ┣ 📜README.md
 ┣ 📜SETUP_GUIDE.md
 ┗ 📜tsconfig.json

@ruddnjs3769 ruddnjs3769 self-assigned this Jun 30, 2023
foodeco added a commit that referenced this pull request Jul 2, 2023
Copy link
Member

@iamidlek iamidlek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

총평

좋았던 점

전체적으로 잘 작성해 주신 것 같습니다.
정보를 크롤링하여 생성하는 방법도 영리하게 하신 것 같아요.
코드를 컨벤션에 맞추어 작성하시려고 노력하신 것이 보여서 좋았습니다.

아쉬운 점

api 관련 타입 설정이나 예외처리 부분 인스턴스화, 네이밍 등 조금 더
디테일하게 작업 하면 좋을 것 같습니다.
파일명이 index로 되어있는 경우가 많아 구분이 어려운 것 같습니다.
굳이 폴더를 만들어 깊게 파일을 넣을 필요 없을 것 같습니다.
폴더는 그룹핑이 필요할 때 사용하시면 좋을 것 같아요.
불필요한 요청이나 렌더링이 발생하게 되는 부분이 있습니다.
이런 부분은 기간적으로 짧아서 어쩔 수 없는 부분이라 생각합니다.
시간이 되면 몇군데 최적화를 해보시면 좋을 것 같아요.

질 만드셨습니다! 고생하셨습니다!

Comment on lines +27 to +32
for (let product of products) {
await api({
method: 'DELETE',
url: `/api/products/${product.id}`,
})
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

반복문 안에서 비동기 처리가 많이 이루어 지는 것은 지양하는 것이 좋을 것 같아요.
특정 개수 만큼 Promise.all 등으로 처리하는 등 개선이 필요해 보입니다.

Comment on lines +6 to +13
const api = axios.create({
baseURL: process.env.BASE_URL,
headers: {
apiKey: process.env.API_KEY,
username: process.env.USERNAME,
masterKey: process.env.MASTER_KEY,
},
})
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

반복적으로 사용되어 따로 관리하여 재사용 하는 것도 좋을 것 같습니다.

Comment on lines +46 to +55
await axios(' https://asia-northeast3-heropy-api.cloudfunctions.net/api/products', {
method: 'POST',
data: JSON.stringify(productRequestBody),
headers: {
'Content-Type': 'application/json',
masterKey: true,
apikey: 'KDT5_nREmPe9B',
username: 'KDT5_Team6',
},
})
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분 또한 메모리 상에 products list를 잡아 놓고
직렬 요청이 아닌 요청 수를 늘려 병렬로 요청을 보내는 것이 좋아보입니다.

url: `/api/handler?id=${username}&password=${password}`,
method: 'GET',
})
return data.isAdmin
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

apis/admin 내에 모든 함수의 return 타입이 any 인 것 같습니다.
ts를 쓰는 만큼 return 의 타입을 알 수 있으면 좋지 않을까요?

Comment on lines +22 to +26
if (id && password) {
authenticateAdmin(id, password).then((res) => {
setIsAdmin(res)
})
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

localStorage.getItem 에서 id나 password를 못 가져오게 되면
authenticateAdmin이 실행되지 않아 isAdim이 최신화 되지 않을 것 같습니다.

Comment on lines +167 to +177
<input
id="tel"
className={`${styles.inputTag} ${styles.tel}`}
type="text"
name="tel"
value={phoneNum}
onChange={inputHandlePhone}
placeholder="전화번호를 입력해주세요."
required
/>
</form>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_input_type_tel
inputHandlePhone 의 처리를 조금 더 간소화 시킬 수 있을 것 같습니다.

useEffect(() => {
connectAccountData({
bankCode: code, // 연결할 은행 코드 (필수!)
accountNumber: accountNum.replace(/-/g, ''), // 연결할 계좌번호 (필수!)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

replaceAll도 좋을 것 같습니다.

Comment on lines +8 to +13
const paymentPathRegex = /^\/payment\/[^/]+$/
const agreementPathRegex = /^\/payment\/[^/]+\/agreement$/
const checkInfoPathRegex = /^\/payment\/[^/]+\/checkInfo$/
const payMethodPathRegex = /^\/payment\/[^/]+\/payMethod$/
const orderCompletePathRegex = /^\/payment\/[^/]+\/orderComplete$/

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

컴포넌트 외부에 있어도 좋을 것 같습니다.

const navigation = useNavigate()
const query = useRecoilValue(searchQueryState)

function selectOption(e: React.ChangeEvent<HTMLSelectElement>) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

filter의 경우 항상 같은 데이터 list 를 부르기 때문에
재요청 없이 sort만 해주면 되지 싶습니다.

// * 검색 페이지내에서 URL이 변경될 때 검색어 recoil에 저장된 search 파라메터로 초기화합니다.
useEffect(() => {
setSearch(query.search ? query.search : '')
}, [query])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

동작이 좋지 않을 것 같습니다.
특정 값을 입력하고 검색 후 값을 추가로 입력 후
검색전 filter(sort를 오름차순 내림 차순등으로 변경하면 값이 없어집니다.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants