alpha
Login
or
Join now
atpota.to
/
cred.blue
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
This repository has no description
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Overview
Issues
Pulls
Pipelines
add featured filter to admin panel
author
damedotblog
date
1 year ago
(Mar 3, 2025, 10:48 AM -0500)
commit
b78a5e7f
b78a5e7febbf99e343666fa038a0d016b474a501
parent
352776ca
352776caef5c4c26229d75b6dcffd935efd07e6c
+29
-3
3 changed files
Expand all
Collapse all
Unified
Split
src
components
Admin
AdminPanel.css
AdminPanel.js
Resources
Resources.css
+8
src/components/Admin/AdminPanel.css
Reviewed
···
661
661
font-size: 16px;
662
662
color: #666;
663
663
}
664
664
+
665
665
+
.featured-filter {
666
666
+
width: 100%;
667
667
+
padding: 8px;
668
668
+
border: 1px solid #ddd;
669
669
+
border-radius: 4px;
670
670
+
margin-bottom: 5px;
671
671
+
}
664
672
665
673
.reset-filters-button:hover {
666
674
color: #ff3333;
+20
-3
src/components/Admin/AdminPanel.js
Reviewed
···
17
17
const [completenessFilter, setCompletenessFilter] = useState('all');
18
18
const [categoryFilter, setCategoryFilter] = useState('all');
19
19
const [tagFilter, setTagFilter] = useState('all');
20
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
189
+
setFeaturedFilter('all');
188
190
setSearchQuery('');
189
191
};
190
192
···
254
256
});
255
257
};
256
258
257
257
-
// Filter resources based on status, search query, completeness, category, and tag
259
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
278
+
279
279
+
// Featured filter
280
280
+
if (featuredFilter === 'featured' && !resource.featured) return false;
281
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
625
-
categoryFilter !== 'all' || tagFilter !== 'all') && (
631
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
654
+
value={featuredFilter}
655
655
+
onChange={(e) => setFeaturedFilter(e.target.value)}
656
656
+
className="featured-filter"
657
657
+
>
658
658
+
<option value="all">All Resources</option>
659
659
+
<option value="featured">Featured Only</option>
660
660
+
<option value="not-featured">Not Featured</option>
661
661
+
</select>
662
662
+
</div>
663
663
+
<div className="filter-group">
664
664
+
<select
648
665
value={completenessFilter}
649
666
onChange={(e) => setCompletenessFilter(e.target.value)}
650
667
className="completeness-filter"
651
668
>
652
652
-
<option value="all">All Resources</option>
669
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
Reviewed
···
454
454
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1);
455
455
}
456
456
457
457
+
457
458
.resource-content {
458
459
padding: 16px;
459
460
flex-grow: 1;