Skip to content

Commit 83e64be

Browse files
committed
add Sidebar component with category and theme filters
1 parent 8cbcd9f commit 83e64be

1 file changed

Lines changed: 94 additions & 0 deletions

File tree

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import React, { useState } from 'react';
2+
import { ChevronDown, Filter } from 'lucide-react';
3+
4+
const categories = [
5+
'Men Low Top Sneakers',
6+
'Men High Top Sneakers',
7+
'Men Mid Top Sneakers',
8+
'Men Mules',
9+
'Men Clogs'
10+
];
11+
12+
const themes = [
13+
'Urban Tech',
14+
'Retro Classic',
15+
'Cyber Sport',
16+
'Minimalist'
17+
];
18+
19+
const Sidebar = ({ selectedCategories, selectedThemes, onToggleFilter }) => {
20+
const [isCategoriesOpen, setIsCategoriesOpen] = useState(true);
21+
const [isThemesOpen, setIsThemesOpen] = useState(true);
22+
23+
return (
24+
<aside className="sidebar">
25+
<div className="filter-header">
26+
<Filter size={20} />
27+
<h3>FILTERS</h3>
28+
</div>
29+
30+
<div className="filter-section">
31+
<div
32+
className="section-title"
33+
onClick={() => setIsCategoriesOpen(!isCategoriesOpen)}
34+
>
35+
<h4>CATEGORIES</h4>
36+
<ChevronDown
37+
size={18}
38+
style={{ transform: isCategoriesOpen ? 'rotate(0deg)' : 'rotate(-90deg)', transition: '0.3s' }}
39+
/>
40+
</div>
41+
{isCategoriesOpen && (
42+
<ul className="filter-list">
43+
{categories.map((cat, i) => (
44+
<li key={i} className="filter-item">
45+
<label>
46+
<input
47+
type="checkbox"
48+
checked={selectedCategories.includes(cat)}
49+
onChange={() => onToggleFilter(cat, 'category')}
50+
/>
51+
<span className="checkbox-custom"></span>
52+
<span className="item-name">{cat}</span>
53+
</label>
54+
</li>
55+
))}
56+
</ul>
57+
)}
58+
</div>
59+
60+
<div className="filter-section">
61+
<div
62+
className="section-title"
63+
onClick={() => setIsThemesOpen(!isThemesOpen)}
64+
>
65+
<h4>THEMES</h4>
66+
<ChevronDown
67+
size={18}
68+
style={{ transform: isThemesOpen ? 'rotate(0deg)' : 'rotate(-90deg)', transition: '0.3s' }}
69+
/>
70+
</div>
71+
{isThemesOpen && (
72+
<ul className="filter-list">
73+
{themes.map((theme, i) => (
74+
<li key={i} className="filter-item">
75+
<label>
76+
<input
77+
type="checkbox"
78+
checked={selectedThemes.includes(theme)}
79+
onChange={() => onToggleFilter(theme, 'theme')}
80+
/>
81+
<span className="checkbox-custom"></span>
82+
<span className="item-name">{theme}</span>
83+
</label>
84+
</li>
85+
))}
86+
</ul>
87+
)}
88+
</div>
89+
90+
</aside>
91+
);
92+
};
93+
94+
export default Sidebar;

0 commit comments

Comments
 (0)