'use client' import { useState, useEffect, useCallback } from 'react' import { useRouter } from 'next/navigation' import { BarChart2, History } from 'lucide-react' import { useLiveQuery } from 'dexie-react-hooks' import { db } from '@/lib/sync' import { Card, LoadingState, EmptyState } from '@/components/ui' import { Header, PageContainer } from '@/components/layout/header' import { SymptomQuickLog } from '@/components/symptoms/SymptomQuickLog' import { SymptomCard } from '@/components/symptoms/SymptomCard' import { SymptomChart } from '@/components/symptoms/SymptomChart' import { useApp } from '../provider' export default function SymptomsPage() { const router = useRouter() const { currentWorkspace, refreshData } = useApp() const [recentSymptoms, setRecentSymptoms] = useState([]) const [loading, setLoading] = useState(true) // Fetch symptoms from IndexedDB const localSymptoms = useLiveQuery( () => db.symptoms .where('workspaceId') .equals(currentWorkspace.id) .and((s) => !s.deletedAt) .reverse() .limit(50) .toArray(), [currentWorkspace.id] ) // Also fetch from server to get the latest const fetchSymptoms = useCallback(async () => { try { const response = await fetch( `/api/workspaces/${currentWorkspace.id}/symptoms?limit=20` ) if (response.ok) { const data = await response.json() setRecentSymptoms(data.symptoms) } } catch (err) { console.error('Failed to fetch symptoms:', err) } finally { setLoading(false) } }, [currentWorkspace.id]) useEffect(() => { fetchSymptoms() }, [fetchSymptoms]) const handleLogged = () => { fetchSymptoms() refreshData() } // Combine local and server data, preferring server const symptoms = recentSymptoms.length > 0 ? recentSymptoms : localSymptoms || [] if (loading && !localSymptoms) { return ( <>
) } return ( <>
, label: 'History', onClick: () => router.push('/symptoms/history'), }} /> {/* Quick Log */}

Log a Symptom

{/* 7-Day Chart */} {symptoms.length > 0 && (

Last 7 Days

({ id: s.id, type: s.type, severity: s.severity, recordedAt: s.recordedAt, }))} days={7} />
)} {/* Recent Symptoms */}

Recent

{symptoms.length > 5 && ( )}
{symptoms.length === 0 ? (

No symptoms logged yet

Use the form above to track how you're feeling

) : (
{symptoms.slice(0, 5).map((symptom: any) => ( ))}
)}
) }