@@ -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