widgets and other fixes
This commit is contained in:
@@ -20,6 +20,7 @@ import { useToast } from '../../components/ui/toast/ToastContainer';
|
||||
import { FileIcon, TaskIcon, CheckCircleIcon, ArrowRightIcon } from '../../icons';
|
||||
import { createContentPageConfig } from '../../config/pages/content.config';
|
||||
import { useSectorStore } from '../../store/sectorStore';
|
||||
import { useSiteStore } from '../../store/siteStore';
|
||||
import { usePageSizeStore } from '../../store/pageSizeStore';
|
||||
import ProgressModal from '../../components/common/ProgressModal';
|
||||
import { useProgressModal } from '../../hooks/useProgressModal';
|
||||
@@ -29,6 +30,7 @@ import { PencilSquareIcon } from '@heroicons/react/24/outline';
|
||||
|
||||
export default function Content() {
|
||||
const toast = useToast();
|
||||
const { activeSite } = useSiteStore();
|
||||
const { activeSector } = useSectorStore();
|
||||
const { pageSize } = usePageSizeStore();
|
||||
|
||||
@@ -62,40 +64,47 @@ export default function Content() {
|
||||
const progressModal = useProgressModal();
|
||||
const hasReloadedRef = useRef(false);
|
||||
|
||||
// Load total metrics for footer widget and header metrics (not affected by pagination)
|
||||
// Load total metrics for footer widget and header metrics (site-wide totals, no sector filter)
|
||||
const loadTotalMetrics = useCallback(async () => {
|
||||
try {
|
||||
// Get content with status='draft'
|
||||
const draftRes = await fetchContent({
|
||||
page_size: 1,
|
||||
...(activeSector?.id && { sector_id: activeSector.id }),
|
||||
status: 'draft',
|
||||
});
|
||||
// Batch all API calls in parallel for better performance
|
||||
const [allRes, draftRes, reviewRes, publishedRes, imagesRes] = await Promise.all([
|
||||
// Get all content (site-wide)
|
||||
fetchContent({
|
||||
page_size: 1,
|
||||
site_id: activeSite?.id,
|
||||
}),
|
||||
// Get content with status='draft'
|
||||
fetchContent({
|
||||
page_size: 1,
|
||||
site_id: activeSite?.id,
|
||||
status: 'draft',
|
||||
}),
|
||||
// Get content with status='review'
|
||||
fetchContent({
|
||||
page_size: 1,
|
||||
site_id: activeSite?.id,
|
||||
status: 'review',
|
||||
}),
|
||||
// Get content with status='approved' or 'published' (ready for publishing or on site)
|
||||
fetchContent({
|
||||
page_size: 1,
|
||||
site_id: activeSite?.id,
|
||||
status__in: 'approved,published',
|
||||
}),
|
||||
// Get actual total images count
|
||||
fetchImages({ page_size: 1 }),
|
||||
]);
|
||||
|
||||
setTotalCount(allRes.count || 0);
|
||||
setTotalDraft(draftRes.count || 0);
|
||||
|
||||
// Get content with status='review'
|
||||
const reviewRes = await fetchContent({
|
||||
page_size: 1,
|
||||
...(activeSector?.id && { sector_id: activeSector.id }),
|
||||
status: 'review',
|
||||
});
|
||||
setTotalReview(reviewRes.count || 0);
|
||||
|
||||
// Get content with status='approved' or 'published' (ready for publishing or on site)
|
||||
const publishedRes = await fetchContent({
|
||||
page_size: 1,
|
||||
...(activeSector?.id && { sector_id: activeSector.id }),
|
||||
status__in: 'approved,published',
|
||||
});
|
||||
setTotalPublished(publishedRes.count || 0);
|
||||
|
||||
// Get actual total images count
|
||||
const imagesRes = await fetchImages({ page_size: 1 });
|
||||
setTotalImagesCount(imagesRes.count || 0);
|
||||
} catch (error) {
|
||||
console.error('Error loading total metrics:', error);
|
||||
}
|
||||
}, [activeSector]);
|
||||
}, [activeSite]);
|
||||
|
||||
// Load total metrics when sector changes
|
||||
useEffect(() => {
|
||||
|
||||
@@ -29,6 +29,7 @@ import { useToast } from '../../components/ui/toast/ToastContainer';
|
||||
import { TaskIcon, PlusIcon, DownloadIcon, CheckCircleIcon } from '../../icons';
|
||||
import { createTasksPageConfig } from '../../config/pages/tasks.config';
|
||||
import { useSectorStore } from '../../store/sectorStore';
|
||||
import { useSiteStore } from '../../store/siteStore';
|
||||
import { usePageSizeStore } from '../../store/pageSizeStore';
|
||||
import PageHeader from '../../components/common/PageHeader';
|
||||
import StandardThreeWidgetFooter from '../../components/dashboard/StandardThreeWidgetFooter';
|
||||
@@ -36,6 +37,7 @@ import { DocumentTextIcon } from '@heroicons/react/24/outline';
|
||||
|
||||
export default function Tasks() {
|
||||
const toast = useToast();
|
||||
const { activeSite } = useSiteStore();
|
||||
const { activeSector } = useSectorStore();
|
||||
const { pageSize } = usePageSizeStore();
|
||||
|
||||
@@ -105,48 +107,54 @@ export default function Tasks() {
|
||||
loadClusters();
|
||||
}, []);
|
||||
|
||||
// Load total metrics for footer widget and header metrics (not affected by pagination)
|
||||
// Load total metrics for footer widget and header metrics (site-wide totals, no sector filter)
|
||||
const loadTotalMetrics = useCallback(async () => {
|
||||
try {
|
||||
// Get tasks with status='queued'
|
||||
const queuedRes = await fetchTasks({
|
||||
page_size: 1,
|
||||
...(activeSector?.id && { sector_id: activeSector.id }),
|
||||
status: 'queued',
|
||||
});
|
||||
// Batch all API calls in parallel for better performance
|
||||
const [allRes, queuedRes, processingRes, completedRes, failedRes, imagesRes] = await Promise.all([
|
||||
// Get all tasks (site-wide)
|
||||
fetchTasks({
|
||||
page_size: 1,
|
||||
site_id: activeSite?.id,
|
||||
}),
|
||||
// Get tasks with status='queued'
|
||||
fetchTasks({
|
||||
page_size: 1,
|
||||
site_id: activeSite?.id,
|
||||
status: 'queued',
|
||||
}),
|
||||
// Get tasks with status='in_progress'
|
||||
fetchTasks({
|
||||
page_size: 1,
|
||||
site_id: activeSite?.id,
|
||||
status: 'in_progress',
|
||||
}),
|
||||
// Get tasks with status='completed'
|
||||
fetchTasks({
|
||||
page_size: 1,
|
||||
site_id: activeSite?.id,
|
||||
status: 'completed',
|
||||
}),
|
||||
// Get tasks with status='failed'
|
||||
fetchTasks({
|
||||
page_size: 1,
|
||||
site_id: activeSite?.id,
|
||||
status: 'failed',
|
||||
}),
|
||||
// Get actual total images count
|
||||
fetchImages({ page_size: 1 }),
|
||||
]);
|
||||
|
||||
setTotalCount(allRes.count || 0);
|
||||
setTotalQueued(queuedRes.count || 0);
|
||||
|
||||
// Get tasks with status='in_progress'
|
||||
const processingRes = await fetchTasks({
|
||||
page_size: 1,
|
||||
...(activeSector?.id && { sector_id: activeSector.id }),
|
||||
status: 'in_progress',
|
||||
});
|
||||
setTotalProcessing(processingRes.count || 0);
|
||||
|
||||
// Get tasks with status='completed'
|
||||
const completedRes = await fetchTasks({
|
||||
page_size: 1,
|
||||
...(activeSector?.id && { sector_id: activeSector.id }),
|
||||
status: 'completed',
|
||||
});
|
||||
setTotalCompleted(completedRes.count || 0);
|
||||
|
||||
// Get tasks with status='failed'
|
||||
const failedRes = await fetchTasks({
|
||||
page_size: 1,
|
||||
...(activeSector?.id && { sector_id: activeSector.id }),
|
||||
status: 'failed',
|
||||
});
|
||||
setTotalFailed(failedRes.count || 0);
|
||||
|
||||
// Get actual total images count
|
||||
const imagesRes = await fetchImages({ page_size: 1 });
|
||||
setTotalImagesCount(imagesRes.count || 0);
|
||||
} catch (error) {
|
||||
console.error('Error loading total metrics:', error);
|
||||
}
|
||||
}, [activeSector]);
|
||||
}, [activeSite]);
|
||||
|
||||
// Load total metrics when sector changes
|
||||
useEffect(() => {
|
||||
|
||||
Reference in New Issue
Block a user