From 8643443300ab2c1454a47dff31c642fac16676f7 Mon Sep 17 00:00:00 2001 From: Usman Baig Date: Fri, 16 Jan 2026 14:23:23 +0100 Subject: [PATCH] fix: Add null checks to prevent 'Cannot read properties of null' errors --- app/sites/[id]/page.tsx | 12 ++++++------ components/dashboard/Countries.tsx | 2 +- components/dashboard/TopPages.tsx | 2 +- components/dashboard/TopReferrers.tsx | 2 +- components/sites/SiteList.tsx | 3 ++- lib/api/sites.ts | 2 +- 6 files changed, 12 insertions(+), 11 deletions(-) diff --git a/app/sites/[id]/page.tsx b/app/sites/[id]/page.tsx index d4c6d0e..a982ba9 100644 --- a/app/sites/[id]/page.tsx +++ b/app/sites/[id]/page.tsx @@ -50,12 +50,12 @@ export default function SiteDashboardPage() { getCountries(siteId, dateRange.start, dateRange.end, 10), ]) setSite(siteData) - setStats(statsData) - setRealtime(realtimeData.visitors) - setDailyStats(dailyData) - setTopPages(pagesData) - setTopReferrers(referrersData) - setCountries(countriesData) + setStats(statsData || { pageviews: 0, visitors: 0 }) + setRealtime(realtimeData?.visitors || 0) + setDailyStats(Array.isArray(dailyData) ? dailyData : []) + setTopPages(Array.isArray(pagesData) ? pagesData : []) + setTopReferrers(Array.isArray(referrersData) ? referrersData : []) + setCountries(Array.isArray(countriesData) ? countriesData : []) } catch (error: any) { toast.error('Failed to load data: ' + (error.message || 'Unknown error')) } finally { diff --git a/components/dashboard/Countries.tsx b/components/dashboard/Countries.tsx index 24cdaf2..f57e5ce 100644 --- a/components/dashboard/Countries.tsx +++ b/components/dashboard/Countries.tsx @@ -7,7 +7,7 @@ interface CountriesProps { } export default function Countries({ countries }: CountriesProps) { - if (countries.length === 0) { + if (!countries || countries.length === 0) { return (

diff --git a/components/dashboard/TopPages.tsx b/components/dashboard/TopPages.tsx index 08a390f..84c3e92 100644 --- a/components/dashboard/TopPages.tsx +++ b/components/dashboard/TopPages.tsx @@ -7,7 +7,7 @@ interface TopPagesProps { } export default function TopPages({ pages }: TopPagesProps) { - if (pages.length === 0) { + if (!pages || pages.length === 0) { return (

diff --git a/components/dashboard/TopReferrers.tsx b/components/dashboard/TopReferrers.tsx index 69516a8..49deade 100644 --- a/components/dashboard/TopReferrers.tsx +++ b/components/dashboard/TopReferrers.tsx @@ -7,7 +7,7 @@ interface TopReferrersProps { } export default function TopReferrers({ referrers }: TopReferrersProps) { - if (referrers.length === 0) { + if (!referrers || referrers.length === 0) { return (

diff --git a/components/sites/SiteList.tsx b/components/sites/SiteList.tsx index 0ae049c..591e9ca 100644 --- a/components/sites/SiteList.tsx +++ b/components/sites/SiteList.tsx @@ -19,9 +19,10 @@ export default function SiteList() { try { setLoading(true) const data = await listSites() - setSites(data) + setSites(Array.isArray(data) ? data : []) } catch (error: any) { toast.error('Failed to load sites: ' + (error.message || 'Unknown error')) + setSites([]) // Ensure sites is always an array } finally { setLoading(false) } diff --git a/lib/api/sites.ts b/lib/api/sites.ts index aa13dbb..385798c 100644 --- a/lib/api/sites.ts +++ b/lib/api/sites.ts @@ -20,7 +20,7 @@ export interface UpdateSiteRequest { export async function listSites(): Promise { const response = await apiRequest<{ sites: Site[] }>('/sites') - return response.sites + return response?.sites || [] } export async function getSite(id: string): Promise {