This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

add featured filter to admin panel

+29 -3
+8
src/components/Admin/AdminPanel.css
··· 661 661 font-size: 16px; 662 662 color: #666; 663 663 } 664 + 665 + .featured-filter { 666 + width: 100%; 667 + padding: 8px; 668 + border: 1px solid #ddd; 669 + border-radius: 4px; 670 + margin-bottom: 5px; 671 + } 664 672 665 673 .reset-filters-button:hover { 666 674 color: #ff3333;
+20 -3
src/components/Admin/AdminPanel.js
··· 17 17 const [completenessFilter, setCompletenessFilter] = useState('all'); 18 18 const [categoryFilter, setCategoryFilter] = useState('all'); 19 19 const [tagFilter, setTagFilter] = useState('all'); 20 + const [featuredFilter, setFeaturedFilter] = useState('all'); 20 21 21 22 // Login state 22 23 const [email, setEmail] = useState(''); ··· 185 186 setCompletenessFilter('all'); 186 187 setCategoryFilter('all'); 187 188 setTagFilter('all'); 189 + setFeaturedFilter('all'); 188 190 setSearchQuery(''); 189 191 }; 190 192 ··· 254 256 }); 255 257 }; 256 258 257 - // Filter resources based on status, search query, completeness, category, and tag 259 + // Filter resources based on status, search query, completeness, category, tag, and featured status 258 260 const filteredResources = resources.filter(resource => { 259 261 // Status filter 260 262 if (statusFilter !== 'all' && resource.status !== statusFilter) return false; ··· 273 275 274 276 // Tag filter 275 277 if (tagFilter !== 'all' && (!resource.tagIds || !resource.tagIds.includes(parseInt(tagFilter)))) return false; 278 + 279 + // Featured filter 280 + if (featuredFilter === 'featured' && !resource.featured) return false; 281 + if (featuredFilter === 'not-featured' && resource.featured) return false; 276 282 277 283 return true; 278 284 }); ··· 622 628 className="search-input" 623 629 /> 624 630 {(searchQuery || statusFilter !== 'all' || completenessFilter !== 'all' || 625 - categoryFilter !== 'all' || tagFilter !== 'all') && ( 631 + categoryFilter !== 'all' || tagFilter !== 'all' || featuredFilter !== 'all') && ( 626 632 <button 627 633 onClick={resetFilters} 628 634 className="reset-filters-button" ··· 645 651 <option value="published">Published</option> 646 652 </select> 647 653 <select 654 + value={featuredFilter} 655 + onChange={(e) => setFeaturedFilter(e.target.value)} 656 + className="featured-filter" 657 + > 658 + <option value="all">All Resources</option> 659 + <option value="featured">Featured Only</option> 660 + <option value="not-featured">Not Featured</option> 661 + </select> 662 + </div> 663 + <div className="filter-group"> 664 + <select 648 665 value={completenessFilter} 649 666 onChange={(e) => setCompletenessFilter(e.target.value)} 650 667 className="completeness-filter" 651 668 > 652 - <option value="all">All Resources</option> 669 + <option value="all">All Completeness</option> 653 670 <option value="incomplete">Incomplete Only</option> 654 671 <option value="complete">100% Complete Only</option> 655 672 <option value="min-25">At least 25%</option>
+1
src/components/Resources/Resources.css
··· 454 454 box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1); 455 455 } 456 456 457 + 457 458 .resource-content { 458 459 padding: 16px; 459 460 flex-grow: 1;