Enhance dashboard data fetching by adding active site checks

- Implemented checks for active site in Home, Planner, and Writer dashboards to prevent data fetching when no site is selected.
- Updated API calls to include site_id in requests for better data accuracy.
- Modified user messages to guide users in selecting an active site for insights.
This commit is contained in:
alorig
2025-11-17 17:22:15 +05:00
parent 4b21009cf8
commit 75ba407df5
3 changed files with 42 additions and 16 deletions

View File

@@ -199,16 +199,22 @@ export default function Home() {
]; ];
const fetchAppInsights = async () => { const fetchAppInsights = async () => {
if (!activeSite) {
setInsights(null);
setLoading(false);
return;
}
try { try {
setLoading(true); setLoading(true);
const [keywordsRes, clustersRes, ideasRes, tasksRes, contentRes, imagesRes] = await Promise.all([ const [keywordsRes, clustersRes, ideasRes, tasksRes, contentRes, imagesRes] = await Promise.all([
fetchKeywords({ page_size: 1, site_id: undefined }), fetchKeywords({ page_size: 1, site_id: activeSite.id, sector_id: activeSector?.id }),
fetchClusters({ page_size: 1, site_id: undefined }), fetchClusters({ page_size: 1, site_id: activeSite.id, sector_id: activeSector?.id }),
fetchContentIdeas({ page_size: 1, site_id: undefined }), fetchContentIdeas({ page_size: 1, site_id: activeSite.id, sector_id: activeSector?.id }),
fetchTasks({ page_size: 1, site_id: undefined }), fetchTasks({ page_size: 1, site_id: activeSite.id, sector_id: activeSector?.id }),
fetchContent({ page_size: 1, site_id: undefined }), fetchContent({ page_size: 1, site_id: activeSite.id, sector_id: activeSector?.id }),
fetchContentImages({ page_size: 1, site_id: undefined }) fetchContentImages({ site_id: activeSite.id, sector_id: activeSector?.id })
]); ]);
const totalKeywords = keywordsRes.count || 0; const totalKeywords = keywordsRes.count || 0;
@@ -248,7 +254,7 @@ export default function Home() {
useEffect(() => { useEffect(() => {
fetchAppInsights(); fetchAppInsights();
}, [activeSite, activeSector]); }, [activeSite?.id, activeSector?.id]);
const chartOptions: ApexOptions = { const chartOptions: ApexOptions = {
chart: { chart: {

View File

@@ -73,14 +73,20 @@ export default function PlannerDashboard() {
// Fetch real data // Fetch real data
const fetchDashboardData = async () => { const fetchDashboardData = async () => {
if (!activeSite) {
setStats(null);
setLoading(false);
return;
}
try { try {
setLoading(true); setLoading(true);
const [keywordsRes, clustersRes, ideasRes, tasksRes] = await Promise.all([ const [keywordsRes, clustersRes, ideasRes, tasksRes] = await Promise.all([
fetchKeywords({ page_size: 1000, sector_id: activeSector?.id }), fetchKeywords({ page_size: 1000, site_id: activeSite.id, sector_id: activeSector?.id }),
fetchClusters({ page_size: 1000, sector_id: activeSector?.id }), fetchClusters({ page_size: 1000, site_id: activeSite.id, sector_id: activeSector?.id }),
fetchContentIdeas({ page_size: 1000, sector_id: activeSector?.id }), fetchContentIdeas({ page_size: 1000, site_id: activeSite.id, sector_id: activeSector?.id }),
fetchTasks({ page_size: 1000, sector_id: activeSector?.id }) fetchTasks({ page_size: 1000, site_id: activeSite.id, sector_id: activeSector?.id })
]); ]);
const keywords = keywordsRes.results || []; const keywords = keywordsRes.results || [];
@@ -439,7 +445,11 @@ export default function PlannerDashboard() {
<PageMeta title="Planner Dashboard - IGNY8" description="Content planning overview" /> <PageMeta title="Planner Dashboard - IGNY8" description="Content planning overview" />
<div className="text-center py-12"> <div className="text-center py-12">
<p className="text-gray-600 dark:text-gray-400"> <p className="text-gray-600 dark:text-gray-400">
{activeSector ? 'No data available for the selected sector.' : 'No data available. Select a sector or wait for data to load.'} {!activeSite
? 'Select an active site to view planner insights.'
: activeSector
? 'No data available for the selected sector.'
: 'No data available. Select a sector or wait for data to load.'}
</p> </p>
</div> </div>
</> </>

View File

@@ -78,13 +78,19 @@ export default function WriterDashboard() {
const [lastUpdated, setLastUpdated] = useState<Date>(new Date()); const [lastUpdated, setLastUpdated] = useState<Date>(new Date());
const fetchDashboardData = async () => { const fetchDashboardData = async () => {
if (!activeSite) {
setStats(null);
setLoading(false);
return;
}
try { try {
setLoading(true); setLoading(true);
const [tasksRes, contentRes, imagesRes] = await Promise.all([ const [tasksRes, contentRes, imagesRes] = await Promise.all([
fetchTasks({ page_size: 1000, sector_id: activeSector?.id }), fetchTasks({ page_size: 1000, site_id: activeSite.id, sector_id: activeSector?.id }),
fetchContent({ page_size: 1000, sector_id: activeSector?.id }), fetchContent({ page_size: 1000, site_id: activeSite.id, sector_id: activeSector?.id }),
fetchContentImages({ sector_id: activeSector?.id }) fetchContentImages({ site_id: activeSite.id, sector_id: activeSector?.id })
]); ]);
const tasks = tasksRes.results || []; const tasks = tasksRes.results || [];
@@ -447,7 +453,11 @@ export default function WriterDashboard() {
<PageMeta title="Writer Dashboard - IGNY8" description="Content creation overview" /> <PageMeta title="Writer Dashboard - IGNY8" description="Content creation overview" />
<div className="text-center py-12"> <div className="text-center py-12">
<p className="text-gray-600 dark:text-gray-400"> <p className="text-gray-600 dark:text-gray-400">
{activeSector ? 'No data available for the selected sector.' : 'No data available. Select a sector or wait for data to load.'} {!activeSite
? 'Select an active site to view writer insights.'
: activeSector
? 'No data available for the selected sector.'
: 'No data available. Select a sector or wait for data to load.'}
</p> </p>
</div> </div>
</> </>