diff --git a/docs/sprint6.md b/docs/sprint6.md new file mode 100644 index 00000000..9f16be2b --- /dev/null +++ b/docs/sprint6.md @@ -0,0 +1,39 @@ +# 요구사항 + +## 기본 요구사항 + +### 랜딩 페이지 + +- [x] HTML과 CSS로 구현한 랜딩페이지를 React로 마이그레이션하세요. +- [x] 랜딩 페이지 url path는 "/"로 설정하세요. + +### 중고마켓 페이지 + +- [x] 중고마켓 페이지 url path를 "/items"으로 설정하세요. +- [x] 페이지 주소가 "/items" 일 때 상단내비게이션바의 "중고마켓" 버튼의 색상은 "3692FF"입니다. +- [x] 중고마켓 페이지 판매 중인 상품은 본인이 만든 GET 메서드를 사용해 주세요. +- [x] 다만 좋아요 순 정렬 기능은 제외해 주세요. +- [x] 사진은 디폴트 이미지로 프론트엔드에서 처리해주세요. +- [x] 베스트 상품 목록 조회는 구현하지 않습니다. +- [x] '상품 등록하기' 버튼을 누르면 "/registration" 로 이동합니다. ( 빈 페이지 ) + +### 상품 등록 페이지 + +- [x] PC, Tablet, Mobile 디자인에 해당하는 상품 등록 페이지를 만들어 주세요. +- [x] 상품 등록 url path는 "/registration"입니다. +- [x] 상품 등록은 본인이 만든 POST 메서드를 사용해 주세요. +- [x] 등록 성공 시, 해당 상품 상세 페이지로 이동합니다. (빈페이지) + +## 심화 요구사항 + +### 상품 등록 페이지 + +- [x] 모든 입력 input box에 빈 값이 있을 경우, 등록 버튼이 비활성화됩니다. +- [x] 태그를 입력한 후 엔터키를 누르면, 그 태그가 칩 형태로 쌓입니다. +- [ ] 상품명, 상품 소개, 판매 가격, 태그에 대한 유효성 검사 Custom Hook을 만들어주세요. 유효성 검사를 통과하지 않을 경우, 각 input에 빨간색 테두리와, 각각의 Input 아래에 빨간색 에러 메시지를 보여주세요. + +- 유효한 조건 +- 상품명: 1자 이상, 10자 이내 +- 상품 소개: 10자 이상, 100자 이내 +- 판매 가격: 1자 이상, 숫자 +- 태그: 5글자 이내 diff --git a/eslint.config.js b/eslint.config.js index 238d2e4e..1fe5accd 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,38 +1,25 @@ -import js from '@eslint/js' -import globals from 'globals' -import react from 'eslint-plugin-react' -import reactHooks from 'eslint-plugin-react-hooks' -import reactRefresh from 'eslint-plugin-react-refresh' +import js from "@eslint/js"; +import globals from "globals"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; +import tseslint from "typescript-eslint"; -export default [ - { ignores: ['dist'] }, +export default tseslint.config( + { ignores: ["dist"] }, { - files: ['**/*.{js,jsx}'], + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ["**/*.{ts,tsx}"], languageOptions: { ecmaVersion: 2020, globals: globals.browser, - parserOptions: { - ecmaVersion: 'latest', - ecmaFeatures: { jsx: true }, - sourceType: 'module', - }, }, - settings: { react: { version: '18.3' } }, plugins: { - react, - 'react-hooks': reactHooks, - 'react-refresh': reactRefresh, + "react-hooks": reactHooks, + "react-refresh": reactRefresh, }, rules: { - ...js.configs.recommended.rules, - ...react.configs.recommended.rules, - ...react.configs['jsx-runtime'].rules, ...reactHooks.configs.recommended.rules, - 'react/jsx-no-target-blank': 'off', - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, - ], + "react-refresh/only-export-components": ["warn", { allowConstantExport: true }], }, - }, -] + } +); diff --git a/index.html b/index.html index 197e15a3..ff85f213 100644 --- a/index.html +++ b/index.html @@ -8,6 +8,6 @@
- +