Skip to content

Commit 79464bc

Browse files
authored
Merge pull request codeit-13-3team#37 from codeit-13-3team/feature/category-animation
feat: category animation 구현
2 parents 15f1afd + 9822573 commit 79464bc

2 files changed

Lines changed: 45 additions & 11 deletions

File tree

src/components/home/Category.tsx

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,16 @@ const Category = ({
66
selectedCategory,
77
setSelectedCategory,
88
setSelectedCategoryName,
9+
isMenuOpen,
10+
onClose,
911
}: {
1012
selectedCategory: number | null;
1113
setSelectedCategory: (id: number | null) => void;
1214
setSelectedCategoryName: (name: string | null) => void;
15+
isMenuOpen: boolean;
16+
onClose: () => void;
17+
18+
// TODO interface로 뽑기
1319
}) => {
1420
const {
1521
data: categoryList,
@@ -31,16 +37,29 @@ const Category = ({
3137
setSelectedCategory(category.id);
3238
setSelectedCategoryName(category.name);
3339
}
40+
onClose();
3441
};
3542

43+
const baseClasses =
44+
'max-w-[220px] w-full md:w-[180px] lg:w-[220px] ' +
45+
'bg-black-500 flex-shrink-0 ' +
46+
'transform transition-transform duration-300 ease-in-out';
47+
3648
return (
37-
<div className="hidden md:block md:w-[180px] lg:w-[220px] bg-black-500 w-full cursor-pointer">
38-
<h2 className="text-4 py-[15px] px-5">카테고리</h2>
49+
<div
50+
className={
51+
'fixed inset-y-0 left-0 md:static ' +
52+
baseClasses +
53+
' ' +
54+
(isMenuOpen ? 'translate-x-0 md:translate-x-0' : '-translate-x-full md:translate-x-0')
55+
}
56+
>
57+
<h2 className="text-4 py-[15px] px-5 mt-[45px]">카테고리</h2>
3958
<ul>
4059
{categoryList.map((cat) => (
4160
<li
4261
key={cat.id}
43-
className={`text-4 py-[15px] px-5 ${
62+
className={`text-4 py-[15px] px-5 cursor-pointer ${
4463
selectedCategory === cat.id
4564
? 'bg-black-400 text-gray-50 shadow-[inset_0_0_0_1px_rgba(53,53,66,1)] rounded-[8px]'
4665
: 'text-gray-200'

src/pages/index.tsx

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,26 @@ const Home = () => {
1111
const [selectedCategoryName, setSelectedCategoryName] = useState<string | null>(null);
1212
const keyword = '';
1313
const [selectedOrder, setSelectedOrder] = useState<string | null>(null);
14+
const [isMenuOpen, setIsMenuOpen] = useState<boolean>(false);
1415

1516
return (
16-
<div className="text-gray-50 flex w-full">
17-
<div className="mx-auto w-full flex justify-center">
18-
<Category
19-
selectedCategory={selectedCategory}
20-
setSelectedCategory={setSelectedCategory}
21-
setSelectedCategoryName={setSelectedCategoryName}
22-
/>
17+
<div className="text-gray-50 flex w-full min-h-screen">
18+
<div className="mx-auto w-full flex justify-center relative">
19+
{isMenuOpen && (
20+
<div
21+
className="fixed inset-0 bg-black-300/80 z-40 md:hidden"
22+
onClick={() => setIsMenuOpen(false)}
23+
/>
24+
)}
25+
<div className="z-50">
26+
<Category
27+
selectedCategory={selectedCategory}
28+
setSelectedCategory={setSelectedCategory}
29+
setSelectedCategoryName={setSelectedCategoryName}
30+
isMenuOpen={isMenuOpen}
31+
onClose={() => setIsMenuOpen(false)}
32+
/>
33+
</div>
2334

2435
<div className="flex min-w-0 flex-col lg:flex-row-reverse gap-[10px]">
2536
<div className="flex flex-col mb-[60px] lg:border-l-[1px] lg:border-black-400 lg:pl-[30px] lg:h-screen pt-[30px]">
@@ -45,6 +56,7 @@ const Home = () => {
4556
TOP 6
4657
</span>
4758
</h4>
59+
<button onClick={() => setIsMenuOpen((o) => !o)}>테스트</button>
4860
<ProductList order="reviewCount" />
4961
</div>
5062

@@ -71,7 +83,10 @@ const Home = () => {
7183
{!selectedCategory && keyword && <span>'{keyword}'로 검색한 상품</span>}
7284
</div>
7385
{selectedCategory && (
74-
<div className="flex items-center bg-black-400 border border-black-300 rounded-[100px] py-[6px] w-fit px-3 mt-[30px] md:hidden">
86+
<div
87+
className="flex items-center bg-black-400 border border-black-300 rounded-[100px] py-[6px] w-fit px-3 mt-[30px] md:hidden cursor-pointer"
88+
onClick={() => setIsMenuOpen(true)}
89+
>
7590
<Image
7691
src={categoryIcon}
7792
alt="카테고리 아이콘"

0 commit comments

Comments
 (0)