Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
b2e37bd
reset
hanseulhee Oct 10, 2023
6f8bbb0
Merge branch 'codeit-bootcamp-frontend:main' into main
hanseulhee Oct 10, 2023
e11e25f
fix: 머지 후 브랜치 삭제 github action 수정
hanseulhee Oct 10, 2023
212e864
env: workflows 폴더로 이동
hanseulhee Oct 10, 2023
4dc5dd0
Merge pull request #237 from hanseulhee/fix-github-actions
withyj-codeit Nov 6, 2023
447cf21
refactor: ItemListResults 가독성 개선 - 같이 실행되지 않는 코드들 컴포넌트로 분리
asksa1256 May 23, 2025
a6ec582
emotion css 설치, SectionTitle 컴포넌트화
asksa1256 May 23, 2025
15f2fea
refactor: PageContent 컴포넌트 추가 (레이아웃)
asksa1256 May 23, 2025
2434efe
refactor: 컴포넌트명 Item -> Product로 변경
asksa1256 May 23, 2025
d5feb2e
refactor: pages 폴더 내에서 페이지 유형별 폴더 분기, Button 컴포넌트 css-in-js로 스타일 수정
asksa1256 May 23, 2025
daad2ca
Merge branch 'codeit-bootcamp-frontend:main' into React-이상달-sprint6
asksa1256 May 23, 2025
6696bbd
style: Button disabled prop 추가
asksa1256 May 23, 2025
5b66962
ui: FormControl 컴포넌트 추가, Input 컴포넌트 css-in-js 적용
asksa1256 May 23, 2025
45efc91
ui: 상품 등록 페이지 퍼블리싱
asksa1256 May 23, 2025
da84e14
refactor: Form 관련 컴포넌트 구조 개선 및 폴더 재분류
asksa1256 May 24, 2025
2061351
refactor: Avatar ~ Pagination까지 컴포넌트 스타일 css-in-js로 변경
asksa1256 May 24, 2025
7519bf6
refactor: 컴포넌트 스타일 Emotion css로 전체 변경
asksa1256 May 26, 2025
8a3bf64
feat: 상품 등록 폼 유효성 검사
asksa1256 May 26, 2025
fecbb32
fix: 상품 등록 - 태그 입력 시 디바운스 추가 (한글 중복 입력 방지)
asksa1256 May 27, 2025
477a128
feat: 상품 등록 - 상품 이미지 파일 등록 기능 추가
asksa1256 May 27, 2025
00bfe7e
style: 상품 등록 반응형
asksa1256 May 27, 2025
41c8c83
style: Tag 제거 버튼 IconButton 컴포넌트로 수정
asksa1256 May 27, 2025
f4c64c5
refactor: 상품 등록 폼 유효성 검사 디바운스 처리 (잦은 리렌더링 방지)
asksa1256 May 27, 2025
dafb54f
feat: 상품 등록 경로 추가 (Nav '중고마켓' 메뉴 활성화)
asksa1256 May 28, 2025
bde9833
feat: 중고마켓 - 새로고침 시 검색값 초기화
asksa1256 May 28, 2025
bd81474
refactor: 상품 관련 변수명 'item' -> 'product'로 변경
asksa1256 May 28, 2025
70809ab
feat: 페이지 전환 시 스크롤 위치 맨위로 이동 처리
asksa1256 May 28, 2025
2908c59
refactor: 'ui' 폴더 위치 'components' 폴더 하위로 이동
asksa1256 May 28, 2025
377229b
refactor: Header 컴포넌트 위치 'layout' 폴더로 이동
asksa1256 May 28, 2025
8f8a669
fix: 상품 목록 불러올 때 isLoading 상태 ProductListResults에 전달 안되던 현상 수정 (Produ…
asksa1256 May 28, 2025
a5544cd
style: 상품 등록 폼 - 상품 가격 입력 시 천단위 포맷팅 적용 + Input, Textarea 컴포넌트 value, …
asksa1256 May 28, 2025
b1a772d
refactor: useForm 생성 및 상품 등록 폼에 적용
asksa1256 May 28, 2025
963a4c7
refactor: useForm 생성 및 상품 등록 폼에 적용 (useForm 의존성 배열 수정)
asksa1256 May 28, 2025
23747c8
Merge branch 'React-이상달-sprint6' of https://github.com/asksa1256/16-S…
asksa1256 May 28, 2025
522d8aa
style: Header, PageContent 반응형 수정
asksa1256 May 28, 2025
c569aea
fix: netlify 배포 오류 수정 (useEffect 의존성 배열)
asksa1256 May 28, 2025
b350560
style: 이미지 파일 등록 버튼 반응형 수정 (모바일 max-width 조절)
asksa1256 May 28, 2025
201cddc
refactor: ImageFileUploader 이미지 onLoad, onError 상태 처리 추가
asksa1256 Jun 17, 2025
cafb225
ImageFileUploader 스타일 파일 분리
asksa1256 Jun 17, 2025
42ec35e
refactor: ProductListResults에서 isLoading, isError props 제거 (BestProdu…
asksa1256 Jun 17, 2025
81075a4
refactor: ProductListStyle css 파일 분리
asksa1256 Jun 17, 2025
ebcc60f
refactor: BestProductList에 ProductListError 컴포넌트 추가 (상품 fetch 에러 ui)
asksa1256 Jun 17, 2025
65ea4f1
refactor: ProductList의 ProductListResult에서 로딩, 에러 props 제거
asksa1256 Jun 17, 2025
d6964af
refactor: ProductList 합성 컴포넌트화 (ProductList.Content, ProductList.Empty)
asksa1256 Jun 17, 2025
c320253
feat: 새로고침 시 keyword 초기화 기능 삭제
asksa1256 Jun 17, 2025
e4989a2
refactor(mentor): form 태그 onSubmit 활용한 비제어 방식으로 변경
asksa1256 Jun 18, 2025
8142a40
refactor: 스타일 css 파일로 분리 (추후 다른 파일들 작업 예정)
asksa1256 Jun 18, 2025
ceb0ce0
refactor: 비제어 방식으로 변경함에 따라 숫자 포맷팅 방식 변경
asksa1256 Jun 18, 2025
105d260
refactor: 가격란에 숫자값만 입력받기
asksa1256 Jun 18, 2025
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
177 changes: 177 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
"version": "0.1.0",
"private": true,
"dependencies": {
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
Expand Down
5 changes: 4 additions & 1 deletion src/App.jsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { Outlet } from "react-router-dom";
import Header from "./components/Header";
import Header from "./components/layout/Header";
import useScrollToTop from "./hooks/useScrollToTop";

function App() {
useScrollToTop();

return (
<>
<Header />
Expand Down
17 changes: 11 additions & 6 deletions src/Main.jsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,23 @@
import { BrowserRouter, Routes, Route } from "react-router-dom";
import App from "./App";
import ItemsPage from "./pages/ItemsPage";
import BoardPage from "./pages/BoardPage";
import AddItemPage from "./pages/AddItemPage";
import ProductsPage from "./pages/products/ProductsPage";
import BoardPage from "./pages/board/BoardPage";
import AddProductPage from "./pages/products/AddProductPage";
import ProductsLayout from "./pages/products/ProductsLayout";

const Main = () => {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<App />}>
<Route index element={<ItemsPage />} />
<Route path="/items" element={<ItemsPage />} />
<Route index element={<ProductsPage />} />

<Route path="/products" element={<ProductsLayout />}>
<Route index element={<ProductsPage />} />
<Route path="addProduct" element={<AddProductPage />} />
</Route>

<Route path="/board" element={<BoardPage />} />
<Route path="/addItem" element={<AddItemPage />} />
</Route>
</Routes>
</BrowserRouter>
Expand Down
4 changes: 4 additions & 0 deletions src/assets/images/ic_close_white.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions src/assets/images/ic_plus.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 13 additions & 3 deletions src/components/Avatar/Avatar.jsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
import styles from "./Avatar.module.css";
/** @jsxImportSource @emotion/react */
import { css } from "@emotion/react";

const Avatar = ({ imgSrc, onClick, className }) => {
return (
<button onClick={onClick} className={`avatar ${className}`}>
<img src={imgSrc} alt="프로필 이미지" className={styles["avatar-img"]} />
<button
css={AvatarStyle}
className={`avatar ${className}`}
onClick={onClick}
>
<img src={imgSrc} alt="프로필 이미지" />
</button>
);
};

export default Avatar;

const AvatarStyle = css`
width: 40px;
height: 40px;
`;
4 changes: 0 additions & 4 deletions src/components/Avatar/Avatar.module.css

This file was deleted.

88 changes: 88 additions & 0 deletions src/components/Form/AddProductForm.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/** @jsxImportSource @emotion/react */
import * as styles from "./AddProductFormStyle";
import SectionTitle from "../ui/SectionTitle";
import Button from "../ui/Button";
import FormControl from "../ui/Form/FormControl";
import FormLabel from "../ui/Form/FormLabel";
import ImageFileUploader from "../ImageFileUploader/ImageFileUploader";
import Input from "../ui/Input";
import Textarea from "../ui/Textarea";
import TagsInput from "../ui/Tag/TagsInput";
import useForm from "../../hooks/useForm";

const AddProductForm = ({ title }) => {
const {
tags,
handleTagsChange,
handlePriceInput,
handleBlur,
validateForm,
isFormValid,
} = useForm();

return (
<form css={styles.ProductFormContainer} onSubmit={validateForm}>
<header css={styles.FormHeader}>
<SectionTitle title={title} />
<Button
size="sm"
variant="primary"
disabled={!isFormValid}
type="submit"
>
등록
</Button>
</header>

<FormControl>
<FormLabel>상품 이미지</FormLabel>
<ImageFileUploader />
</FormControl>

<FormControl>
<FormLabel inputId="productName">상품명</FormLabel>
<Input
id="productName"
name="name"
placeholder="상품명을 입력해주세요"
onBlur={handleBlur}
/>
</FormControl>

<FormControl>
<FormLabel inputId="productDesc">상품 소개</FormLabel>
<Textarea
id="productDesc"
name="description"
placeholder="상품 소개를 입력해주세요"
onBlur={handleBlur}
/>
</FormControl>

<FormControl>
<FormLabel inputId="productPrice">판매 가격</FormLabel>
<Input
id="productPrice"
name="price"
type="text"
placeholder="판매 가격을 입력해주세요"
onChange={handlePriceInput}
onBlur={handleBlur}
/>
</FormControl>

<FormControl>
<FormLabel inputId="tags">태그</FormLabel>
<TagsInput
id="tags"
placeholder="태그를 입력해주세요"
tags={tags}
onTagsChange={handleTagsChange}
onBlur={handleBlur}
/>
</FormControl>
</form>
);
};

export default AddProductForm;
Loading
Loading