diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 7129bc34b..bcdbdecf5 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -6,36 +6,52 @@ ### 기본 -- [x] 상품 등록 페이지 주소는 “/additem” 입니다. -- [x] 페이지 주소가 “/additem” 일때 상단네비게이션바의 '중고마켓' 버튼의 색상은 “3692FF”입니다. -- [x] 상품 이미지는 최대 한개 업로드가 가능합니다. -- [x] 각 input의 placeholder 값을 정확히 입력해주세요. -- [x] 이미지를 제외하고 input 에 모든 값을 입력하면 ‘등록' 버튼이 활성화 됩니다. -- [x] API를 통한 상품 등록은 추후 미션에서 적용합니다. - -### 심화 - -- [x] 이미지 안의 X 버튼을 누르면 이미지가 삭제됩니다. -- [x] 추가된 태그 안의 X 버튼을 누르면 해당 태그는 삭제됩니다. +### 상품 상세 + +- [x] 상품 상세 페이지 주소는 “/items/{productId}” 입니다. +- [x] response 로 받은 아래의 데이터로 화면을 구현합니다- favoriteCount : 하트 개수 +- images : 상품 이미지 +- tags : 상품 태그 +- name : 상품 이름 +- description : 상품 설명 +- [x] 목록으로 돌아가기 버튼을 클릭하면 중고마켓 페이지 주소인 “/items” 으로 이동합니다 + +### 상품 문의 댓글 + +- [x] 문의하기에 내용을 입력하면 등록 버튼의 색상은 “3692FF”로 변합니다. +- [x] response 로 받은 아래의 데이터로 화면을 구현합니다 +- image : 작성자 이미지 +- nickname : 작성자 닉네임 +- content : 작성자가 남긴 문구 +- description : 상품 설명 +- updatedAt : 문의글 마지막 업데이트 시간 ## 주요 변경사항 design -- 타블렛, 모바일 사이즈 미디어 쿼리 적용 -- 피그마 시안과 다른 디자인 부분(폰트, pageNavBar) 수정 +- Items 페이지, 아이템 요소의 기본 이미지 추가 +- ItemInfo 페이지, 피그마 시안의 디자인 적용 -fix +refactor -- 특정 페이지를 렌더링하지 않는 오류 개선 +- Items 페이지, util 함수 분리 +- constatns.jsx 생성, 데이터 초기 값 분리 +- 데이터 패칭 용도 useFetch 커스텀 훅 생성 및 적용 +- AddItemDetails 컴포넌트에 htmlFor 속성 추가 +- AddItemTags 컴포넌트에서 tag 배열 index 값 -> id 값 변경 +- ItemDetails, ItemTags 컴포넌트 분리 rename -- 폴더 구조 및 컴포넌트 재정리 +- mediaquery.css 파일 삭제, 미디어쿼리 디자인 각 페이지의 CSS 파일에 병합 +- 네이밍 App.jsx -> Router.jsx +- 네이밍 ItemDetials, ItemTags -> AddItemDetails, ... -factor +feat -- AddItem 페이지 요구사항 기능 구현 +- ItemInfo 페이지, 기본 요구사항 구현 +- Items 페이지, 페이지네이션 추가 ## 스크린샷 @@ -43,4 +59,5 @@ factor ## 멘토에게 -- +- 멘토링 시간에 말씀하셨던 커스텀 훅을 하나 만들어봤습니다. +- 테일윈드 CSS와 다른 커스텀 훅은 다음 미션에 차차 적용해보겠습니다! diff --git a/src/App.jsx b/src/Router.jsx similarity index 76% rename from src/App.jsx rename to src/Router.jsx index a92990ba7..1436fe460 100644 --- a/src/App.jsx +++ b/src/Router.jsx @@ -5,10 +5,12 @@ import Main from "./components/common/Main"; import Home from "./pages/Home"; import SignIn from "./pages/SignIn"; import Items from "./pages/Items"; +import ItemInfo from "./pages/ItemInfo"; import AddItem from "./pages/AddItem"; import Community from "./pages/Community"; +import NotFound from "./pages/NotFound"; -function App() { +function Router() { return (
@@ -17,12 +19,14 @@ function App() { } /> } /> } /> + } /> } /> } /> + } /> ); } -export default App; +export default Router; diff --git a/src/assets/images/ic_back.png b/src/assets/images/ic_back.png new file mode 100644 index 000000000..02a376827 Binary files /dev/null and b/src/assets/images/ic_back.png differ diff --git a/src/assets/images/ic_profile.png b/src/assets/images/ic_profile.png new file mode 100644 index 000000000..0844dd1db Binary files /dev/null and b/src/assets/images/ic_profile.png differ diff --git a/src/assets/images/img_item_default.png b/src/assets/images/img_item_default.png new file mode 100644 index 000000000..b7a469fdc Binary files /dev/null and b/src/assets/images/img_item_default.png differ diff --git a/src/assets/styles/mediaquery.css b/src/assets/styles/mediaquery.css deleted file mode 100644 index ba302cc39..000000000 --- a/src/assets/styles/mediaquery.css +++ /dev/null @@ -1,123 +0,0 @@ -/* mobile */ -@media (max-width: 768px) { - /* common */ - .header { - padding: 0 16px; - } - - main.main { - margin: 94px 16px; - } - - .logo-link { - font-size: 0; - } - - .logo { - content: url(../images/logo_pandamarket_name.png); - width: 81px; - height: 27px; - margin: 0; - } - - /* Items page */ - .best-items-container > .best-items-list { - grid-template-columns: repeat(1, 1fr); - } - - .all-items-container > .all-items-header { - display: grid; - grid-template-columns: 1fr 91px 42px; - grid-template-rows: 42px; - grid-template-areas: - "section-title login-btn login-btn" - "search search dropdown-orderby"; - gap: 8px; - height: auto; - } - - h1.section-title { - grid-area: section-title; - } - - .all-items-header > a.login-btn { - grid-area: login-btn; - margin-right: 0; - } - - input.search { - grid-area: search; - margin-right: 0; - width: 100%; - } - - div.ic-search { - bottom: 37px; - left: 19px; - } - - div.dropdown-orderby { - grid-area: dropdown-orderby; - } - - .dropdown-orderby > .dropdown-btn { - width: 42px; - height: 42px; - font-size: 0; - background: url(../images/ic_sort.png) no-repeat 50%; - } - - div.ic-arrow-down { - display: none; - } - - .all-items-container > .all-items-list { - grid-template-columns: repeat(2, 1fr); - gap: 8px; - } - - /* Additem page */ - div.upload-container, - img.img-preview { - max-width: 168px; - max-height: 168px; - } - - div.upload-content { - height: 168px; - } -} - -/* tablet */ -@media (min-width: 769px) and (max-width: 1199px) { - /* common */ - .header { - padding: 0 24px; - } - - main.main { - margin: 94px 24px; - } - - /* Items page */ - .best-items-container > .best-items-list { - grid-template-columns: repeat(2, 1fr); - gap: 24px; - } - - .all-items-container > .all-items-list { - grid-template-columns: repeat(3, 1fr); - gap: 40px; - } - - /* AddItem page */ - div.upload-container, - img.img-preview { - max-width: 162px; - max-height: 162px; - } - - div.upload-content { - height: 162px; - } -} diff --git a/src/components/AddItem/ItemDetails.jsx b/src/components/AddItem/AddItemDetails.jsx similarity index 57% rename from src/components/AddItem/ItemDetails.jsx rename to src/components/AddItem/AddItemDetails.jsx index 7046e83a0..3a035d8da 100644 --- a/src/components/AddItem/ItemDetails.jsx +++ b/src/components/AddItem/AddItemDetails.jsx @@ -1,11 +1,20 @@ import React from "react"; -import ItemTags from "./ItemTags"; -function ItemDetails({ details, onDetailsChange, onTagsChange }) { +function AddItemDetails({ details, setDetails }) { + const handleDetailsChange = (e) => { + const { name, value } = e.target; + setDetails((prevDetails) => ({ + ...prevDetails, + [name]: value, + })); + }; + return (
- +
- +