/* @component-map * App — Main container, handles layout, stats header, tab switching, and FAB * ChoreList — Displays active/completed chores with filtering * ChoreCard — Individual chore card with toggle, edit, delete * ChoreModal — Modal form for creating/editing chores * HistoryView — Shows history of chore actions * @end-component-map */ import { useCollection, useIdentity } from '@deplixo/sdk'; import { ChoreList } from './components/ChoreList.jsx'; import { ChoreModal } from './components/ChoreModal.jsx'; import { HistoryView } from './components/HistoryView.jsx'; import { useMemo, useState } from 'react'; import { CATEGORIES } from './components/constants.jsx'; function App() { const { user } = useIdentity(); const { items: chores } = useCollection('chores', { personal: true }); const [currentTab, setCurrentTab] = useState('active'); const [modalOpen, setModalOpen] = useState(false); const [editingId, setEditingId] = useState(null); const today = new Date().toISOString().split('T')[0]; const active = useMemo(() => chores.filter(c => !c.value.done), [chores]); const completed = useMemo(() => chores.filter(c => c.value.done), [chores]); const overdue = useMemo(() => active.filter(c => c.value.due && c.value.due < today), [active, today]); const openEdit = (id) => { setEditingId(id); setModalOpen(true); }; const openNew = () => { setEditingId(null); setModalOpen(true); }; return (
ChoreHub 🏠
👤 {user?.name || 'Me'}
{active.length}
To Do
{completed.length}
Done
{overdue.length}
Overdue
{['active', 'completed', 'history'].map(tab => ( ))}
{currentTab === 'active' && } {currentTab === 'completed' && } {currentTab === 'history' && }
{modalOpen && setModalOpen(false)} />}
); } ReactDOM.createRoot(document.getElementById("root")).render();