diff --git a/maternal-web/app/(auth)/reset-password/page.tsx b/maternal-web/app/(auth)/reset-password/page.tsx index 1827d38..e43b9fd 100644 --- a/maternal-web/app/(auth)/reset-password/page.tsx +++ b/maternal-web/app/(auth)/reset-password/page.tsx @@ -18,6 +18,7 @@ import { LockReset, Visibility, VisibilityOff, CheckCircle } from '@mui/icons-ma import { motion } from 'framer-motion'; import Link from 'next/link'; import apiClient from '@/lib/api/client'; +import { extractError } from '@/lib/utils/errorHandler'; export default function ResetPasswordPage() { const searchParams = useSearchParams(); @@ -92,9 +93,8 @@ export default function ResetPasswordPage() { }, 3000); } catch (err: any) { console.error('Reset password error:', err); - setError( - err.response?.data?.message || 'Failed to reset password. The link may have expired.' - ); + const errorData = extractError(err); + setError(errorData.userMessage || errorData.message); } finally { setLoading(false); } diff --git a/maternal-web/app/analytics/advanced/page.tsx b/maternal-web/app/analytics/advanced/page.tsx index 22973e7..a610bab 100644 --- a/maternal-web/app/analytics/advanced/page.tsx +++ b/maternal-web/app/analytics/advanced/page.tsx @@ -34,6 +34,7 @@ import { import { Loader2, RefreshCw, Activity, Brain, TrendingUp, Baby, Link } from 'lucide-react'; import { AppShell } from '@/components/layouts/AppShell/AppShell'; import { ProtectedRoute } from '@/components/common/ProtectedRoute'; +import { extractError } from '@/lib/utils/errorHandler'; export default function AdvancedAnalyticsPage() { const { user } = useAuth(); @@ -105,9 +106,10 @@ export default function AdvancedAnalyticsPage() { } } setError(''); - } catch (error) { + } catch (error: any) { console.error('[AdvancedAnalytics] Failed to load children:', error); - setError('Failed to load children'); + const errorData = extractError(error); + setError(errorData.userMessage || errorData.message); } finally { setLoading(false); } @@ -129,8 +131,9 @@ export default function AdvancedAnalyticsPage() { try { const data = await analyticsApi.getCircadianRhythm(selectedChildId, 14); setCircadianData(data); - } catch (error) { + } catch (error: any) { console.error('[AdvancedAnalytics] Failed to load circadian rhythm:', error); + console.error("Circadian error:", extractError(error).message); setCircadianError(error as Error); } finally { setCircadianLoading(false); @@ -145,8 +148,9 @@ export default function AdvancedAnalyticsPage() { try { const data = await analyticsApi.getAnomalies(selectedChildId, 30); setAnomalyData(data); - } catch (error) { + } catch (error: any) { console.error('[AdvancedAnalytics] Failed to load anomalies:', error); + console.error("Anomalies error:", extractError(error).message); setAnomalyError(error as Error); } finally { setAnomalyLoading(false); @@ -161,8 +165,9 @@ export default function AdvancedAnalyticsPage() { try { const data = await analyticsApi.getGrowthAnalysis(selectedChildId); setGrowthData(data); - } catch (error) { + } catch (error: any) { console.error('[AdvancedAnalytics] Failed to load growth analysis:', error); + console.error("Growth error:", extractError(error).message); setGrowthError(error as Error); } finally { setGrowthLoading(false); @@ -177,8 +182,9 @@ export default function AdvancedAnalyticsPage() { try { const data = await analyticsApi.getCorrelations(selectedChildId, 14); setCorrelationData(data); - } catch (error) { + } catch (error: any) { console.error('[AdvancedAnalytics] Failed to load correlations:', error); + console.error("Correlations error:", extractError(error).message); setCorrelationError(error as Error); } finally { setCorrelationLoading(false); @@ -197,8 +203,9 @@ export default function AdvancedAnalyticsPage() { ]); setSleepTrendData(sleepTrend); setFeedingTrendData(feedingTrend); - } catch (error) { + } catch (error: any) { console.error('[AdvancedAnalytics] Failed to load trends:', error); + console.error("Trends error:", extractError(error).message); setTrendError(error as Error); } finally { setTrendLoading(false); diff --git a/maternal-web/app/analytics/page.tsx b/maternal-web/app/analytics/page.tsx index 5e3be95..557b067 100644 --- a/maternal-web/app/analytics/page.tsx +++ b/maternal-web/app/analytics/page.tsx @@ -37,6 +37,7 @@ import { ProtectedRoute } from '@/components/common/ProtectedRoute'; import { childrenApi, Child } from '@/lib/api/children'; import { analyticsApi, PatternInsights, PredictionInsights } from '@/lib/api/analytics'; import PredictionsCard from '@/components/features/analytics/PredictionsCard'; +import { extractError } from '@/lib/utils/errorHandler'; import GrowthSpurtAlert from '@/components/features/analytics/GrowthSpurtAlert'; import WeeklyReportCard from '@/components/features/analytics/WeeklyReportCard'; import MonthlyReportCard from '@/components/features/analytics/MonthlyReportCard'; @@ -121,9 +122,10 @@ export default function AnalyticsPage() { } } setError(''); - } catch (error) { + } catch (error: any) { console.error('[AnalyticsPage] Failed to load children:', error); - setError('Failed to load children'); + const errorData = extractError(error); + setError(errorData.userMessage || errorData.message); } finally { setLoading(false); } @@ -136,8 +138,10 @@ export default function AnalyticsPage() { try { const data = await analyticsApi.getInsights(selectedChildId, days); setInsights(data); - } catch (error) { + } catch (error: any) { console.error('Failed to load insights:', error); + const errorData = extractError(error); + console.error('Insights error:', errorData.message); } finally { setInsightsLoading(false); } @@ -150,8 +154,10 @@ export default function AnalyticsPage() { try { const data = await analyticsApi.getPredictions(selectedChildId); setPredictions(data); - } catch (error) { + } catch (error: any) { console.error('Failed to load predictions:', error); + const errorData = extractError(error); + console.error('Predictions error:', errorData.message); } finally { setPredictionsLoading(false); } diff --git a/maternal-web/app/children/page.tsx b/maternal-web/app/children/page.tsx index fc4324b..64ecb8f 100644 --- a/maternal-web/app/children/page.tsx +++ b/maternal-web/app/children/page.tsx @@ -27,6 +27,7 @@ import { motion } from 'framer-motion'; import { useTranslation } from '@/hooks/useTranslation'; import { useLocalizedDate } from '@/hooks/useLocalizedDate'; import { useSelectedFamily } from '@/hooks/useSelectedFamily'; +import { extractError } from '@/lib/utils/errorHandler'; export default function ChildrenPage() { const { t } = useTranslation('children'); @@ -66,7 +67,8 @@ export default function ChildrenPage() { setChildren(data); } catch (err: any) { console.error('Failed to fetch children:', err); - setError(err.response?.data?.message || t('errors.loadFailed')); + const errorData = extractError(err); + setError(errorData.userMessage || errorData.message); } finally { setLoading(false); } @@ -103,7 +105,8 @@ export default function ChildrenPage() { setDialogOpen(false); } catch (err: any) { console.error('Failed to save child:', err); - throw new Error(err.response?.data?.message || t('errors.saveFailed')); + const errorData = extractError(err); + throw new Error(errorData.userMessage || errorData.message); } finally { setActionLoading(false); } @@ -120,7 +123,8 @@ export default function ChildrenPage() { setChildToDelete(null); } catch (err: any) { console.error('Failed to delete child:', err); - setError(err.response?.data?.message || t('errors.deleteFailed')); + const errorData = extractError(err); + setError(errorData.userMessage || errorData.message); } finally { setActionLoading(false); }