filter fixes
This commit is contained in:
@@ -99,6 +99,7 @@ export default function Approved() {
|
||||
// Load dynamic filter options based on current site's data and applied filters
|
||||
// This implements cascading filters - each filter's options reflect what's available
|
||||
// given the other currently applied filters
|
||||
// APPROVED PAGE: Always constrain to approved+published statuses
|
||||
const loadFilterOptions = useCallback(async (currentFilters?: {
|
||||
status?: string;
|
||||
site_status?: string;
|
||||
@@ -109,7 +110,11 @@ export default function Approved() {
|
||||
if (!activeSite) return;
|
||||
|
||||
try {
|
||||
const options = await fetchWriterContentFilterOptions(activeSite.id, currentFilters);
|
||||
// Always pass status__in to constrain filter options to approved/published content only
|
||||
const options = await fetchWriterContentFilterOptions(activeSite.id, {
|
||||
...currentFilters,
|
||||
status__in: 'approved,published', // Base constraint for this page
|
||||
});
|
||||
setStatusOptions(options.statuses || []);
|
||||
setSiteStatusOptions(options.site_statuses || []);
|
||||
setContentTypeOptions(options.content_types || []);
|
||||
@@ -119,7 +124,7 @@ export default function Approved() {
|
||||
}
|
||||
}, [activeSite]);
|
||||
|
||||
// Load filter options when site changes (initial load with no filters)
|
||||
// Load filter options when site changes (initial load with approved/published constraint)
|
||||
useEffect(() => {
|
||||
loadFilterOptions();
|
||||
}, [activeSite]);
|
||||
@@ -175,6 +180,7 @@ export default function Approved() {
|
||||
...(searchTerm && { search: searchTerm }),
|
||||
// Default to approved+published if no status filter selected
|
||||
...(statusFilter ? { status: statusFilter } : { status__in: 'approved,published' }),
|
||||
...(siteStatusFilter && { site_status: siteStatusFilter }),
|
||||
...(contentTypeFilter && { content_type: contentTypeFilter }),
|
||||
...(contentStructureFilter && { content_structure: contentStructureFilter }),
|
||||
page: currentPage,
|
||||
@@ -184,13 +190,7 @@ export default function Approved() {
|
||||
|
||||
const data: ContentListResponse = await fetchContent(filters);
|
||||
|
||||
// Client-side filter for site_status if needed (backend may not support this filter yet)
|
||||
let filteredResults = data.results || [];
|
||||
if (siteStatusFilter) {
|
||||
filteredResults = filteredResults.filter(c => c.site_status === siteStatusFilter);
|
||||
}
|
||||
|
||||
setContent(filteredResults);
|
||||
setContent(data.results || []);
|
||||
setTotalCount(data.count || 0);
|
||||
setTotalPages(Math.ceil((data.count || 0) / pageSize));
|
||||
|
||||
@@ -771,6 +771,14 @@ export default function Approved() {
|
||||
setCurrentPage(1);
|
||||
}
|
||||
}}
|
||||
onFilterReset={() => {
|
||||
setSearchTerm('');
|
||||
setStatusFilter('');
|
||||
setSiteStatusFilter('');
|
||||
setContentTypeFilter('');
|
||||
setContentStructureFilter('');
|
||||
setCurrentPage(1);
|
||||
}}
|
||||
pagination={{
|
||||
currentPage,
|
||||
totalPages,
|
||||
|
||||
@@ -77,6 +77,7 @@ export default function Content() {
|
||||
// Load dynamic filter options based on current site's data and applied filters
|
||||
// This implements cascading filters - each filter's options reflect what's available
|
||||
// given the other currently applied filters
|
||||
// DRAFTS PAGE: Always constrain to draft status
|
||||
const loadFilterOptions = useCallback(async (currentFilters?: {
|
||||
status?: string;
|
||||
site_status?: string;
|
||||
@@ -88,7 +89,11 @@ export default function Content() {
|
||||
if (!activeSite) return;
|
||||
|
||||
try {
|
||||
const options = await fetchWriterContentFilterOptions(activeSite.id, currentFilters);
|
||||
// Always pass status='draft' to constrain filter options to draft content only
|
||||
const options = await fetchWriterContentFilterOptions(activeSite.id, {
|
||||
...currentFilters,
|
||||
status: 'draft', // Base constraint for this page
|
||||
});
|
||||
setSourceOptions(options.sources || []);
|
||||
setContentTypeOptions(options.content_types || []);
|
||||
setContentStructureOptions(options.content_structures || []);
|
||||
@@ -97,7 +102,7 @@ export default function Content() {
|
||||
}
|
||||
}, [activeSite]);
|
||||
|
||||
// Load filter options when site changes (initial load with no filters)
|
||||
// Load filter options when site changes (initial load with draft constraint)
|
||||
useEffect(() => {
|
||||
loadFilterOptions();
|
||||
}, [activeSite]);
|
||||
@@ -105,13 +110,12 @@ export default function Content() {
|
||||
// Reload filter options when any filter changes (cascading filters)
|
||||
useEffect(() => {
|
||||
loadFilterOptions({
|
||||
status: statusFilter || undefined,
|
||||
content_type: contentTypeFilter || undefined,
|
||||
content_structure: contentStructureFilter || undefined,
|
||||
source: sourceFilter || undefined,
|
||||
search: searchTerm || undefined,
|
||||
});
|
||||
}, [statusFilter, contentTypeFilter, contentStructureFilter, sourceFilter, searchTerm, loadFilterOptions]);
|
||||
}, [contentTypeFilter, contentStructureFilter, sourceFilter, searchTerm, loadFilterOptions]);
|
||||
|
||||
|
||||
// Load total metrics for footer widget and header metrics (site-wide totals, no sector filter)
|
||||
@@ -422,6 +426,13 @@ export default function Content() {
|
||||
setCurrentPage(1);
|
||||
}
|
||||
}}
|
||||
onFilterReset={() => {
|
||||
setSearchTerm('');
|
||||
setSourceFilter('');
|
||||
setContentTypeFilter('');
|
||||
setContentStructureFilter('');
|
||||
setCurrentPage(1);
|
||||
}}
|
||||
pagination={{
|
||||
currentPage,
|
||||
totalPages,
|
||||
|
||||
@@ -213,7 +213,7 @@ export default function Images() {
|
||||
setShowContent(true);
|
||||
setLoading(false);
|
||||
}
|
||||
}, [currentPage, statusFilter, sortBy, sortDirection, searchTerm, toast]);
|
||||
}, [currentPage, statusFilter, contentStatusFilter, sortBy, sortDirection, searchTerm, toast]);
|
||||
|
||||
useEffect(() => {
|
||||
loadImages();
|
||||
|
||||
Reference in New Issue
Block a user