Implemented React error boundaries to catch and handle errors gracefully: **Core Error Handling Components:** - Created ErrorBoundary class component with error catching and logging - Created specialized fallback UIs (MinimalErrorFallback, DataErrorFallback, ComponentErrorFallback, FormErrorFallback, ChartErrorFallback, ImageErrorFallback) - Added withErrorBoundary HOC for easy component wrapping - Created errorLogger service with Sentry integration placeholder **Error Logging Service (errorLogger.ts):** - Centralized error logging with severity levels (FATAL, ERROR, WARNING, INFO, DEBUG) - Context enrichment (URL, userAgent, timestamp, environment) - Local storage of last 10 errors in sessionStorage for debugging - User context management (setUser, clearUser) - Breadcrumb support for debugging trails **App Integration:** - Wrapped root layout with top-level ErrorBoundary for catastrophic errors - Added NetworkStatusIndicator to main page for offline sync visibility - Wrapped daily summary section with isolated DataErrorFallback - Added error boundary to AI assistant page with ComponentErrorFallback - Wrapped feeding tracking form with FormErrorFallback using withErrorBoundary HOC - Protected analytics charts with isolated ChartErrorFallback boundaries **Error Recovery Features:** - Isolated error boundaries prevent cascade failures - Retry buttons on all fallback UIs - Error count tracking with user warnings - Development-mode error details display - Automatic error logging to service (when Sentry integrated) Next: Integration with Sentry for production error tracking 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
33 lines
1.0 KiB
TypeScript
33 lines
1.0 KiB
TypeScript
'use client';
|
|
|
|
import { lazy, Suspense } from 'react';
|
|
import { AppShell } from '@/components/layouts/AppShell/AppShell';
|
|
import { ProtectedRoute } from '@/components/common/ProtectedRoute';
|
|
import { LoadingFallback } from '@/components/common/LoadingFallback';
|
|
import { ErrorBoundary } from '@/components/common/ErrorBoundary';
|
|
import { ComponentErrorFallback } from '@/components/common/ErrorFallbacks';
|
|
|
|
// Lazy load the AI chat interface component
|
|
const AIChatInterface = lazy(() =>
|
|
import('@/components/features/ai-chat/AIChatInterface').then((mod) => ({
|
|
default: mod.AIChatInterface,
|
|
}))
|
|
);
|
|
|
|
export default function AIAssistantPage() {
|
|
return (
|
|
<ProtectedRoute>
|
|
<AppShell>
|
|
<ErrorBoundary
|
|
isolate
|
|
fallback={<ComponentErrorFallback error={new Error('AI Assistant failed to load')} />}
|
|
>
|
|
<Suspense fallback={<LoadingFallback variant="chat" />}>
|
|
<AIChatInterface />
|
|
</Suspense>
|
|
</ErrorBoundary>
|
|
</AppShell>
|
|
</ProtectedRoute>
|
|
);
|
|
}
|