Skip to content

Commit 19329c7

Browse files
committed
Series filter
1 parent 6484028 commit 19329c7

File tree

1 file changed

+36
-2
lines changed

1 file changed

+36
-2
lines changed

src/pages/BlogPage.js

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const BlogPage = () => {
88
usePageTitle('Blog');
99
const [displayItems, setDisplayItems] = useState([]);
1010
const [loading, setLoading] = useState(true);
11+
const [activeFilter, setActiveFilter] = useState('all'); // New state for active filter
1112

1213
useEffect(() => {
1314
const fetchPostSlugs = async () => {
@@ -69,6 +70,12 @@ const BlogPage = () => {
6970
fetchPostSlugs();
7071
}, []);
7172

73+
const filteredItems = displayItems.filter(item => {
74+
if (activeFilter === 'all') return true;
75+
if (activeFilter === 'series') return item.isSeries;
76+
return item.category === activeFilter && !item.isSeries;
77+
});
78+
7279
if (loading) {
7380
// Skeleton loading screen for BlogPage
7481
return (
@@ -110,13 +117,40 @@ const BlogPage = () => {
110117
</p>
111118
<div className="mt-4 text-center">
112119
<span className="ml-2 px-3 py-1 text-base font-medium text-gray-200 bg-gray-800 rounded-full">
113-
Total: {displayItems.length}
120+
Total: {filteredItems.length}
114121
</span>
115122
</div>
123+
{/* Filter Buttons */}
124+
<div className="mt-8 flex justify-center space-x-4">
125+
<button
126+
onClick={() => setActiveFilter('all')}
127+
className={`px-4 py-2 rounded-full text-sm font-medium ${activeFilter === 'all' ? 'bg-primary-500 text-white' : 'bg-gray-700 text-gray-300 hover:bg-gray-600'}`}
128+
>
129+
All
130+
</button>
131+
<button
132+
onClick={() => setActiveFilter('dev')}
133+
className={`px-4 py-2 rounded-full text-sm font-medium ${activeFilter === 'dev' ? 'bg-primary-500 text-white' : 'bg-gray-700 text-gray-300 hover:bg-gray-600'}`}
134+
>
135+
Dev
136+
</button>
137+
<button
138+
onClick={() => setActiveFilter('rant')}
139+
className={`px-4 py-2 rounded-full text-sm font-medium ${activeFilter === 'rant' ? 'bg-primary-500 text-white' : 'bg-gray-700 text-gray-300 hover:bg-gray-600'}`}
140+
>
141+
Rant
142+
</button>
143+
<button
144+
onClick={() => setActiveFilter('series')}
145+
className={`px-4 py-2 rounded-full text-sm font-medium ${activeFilter === 'series' ? 'bg-primary-500 text-white' : 'bg-gray-700 text-gray-300 hover:bg-gray-600'}`}
146+
>
147+
Series
148+
</button>
149+
</div>
116150
</div>
117151
<div className="mt-16">
118152
<div className="">
119-
{displayItems.map((item) => (
153+
{filteredItems.map((item) => (
120154
item.isSeries ? (
121155
<PostItem
122156
key={item.slug}

0 commit comments

Comments
 (0)