import { useState, useEffect } from 'react' import { Link } from 'react-router-dom' import { databases, DATABASE_ID, COLLECTIONS, Query } from '../lib/appwrite' import { FaTicket, FaClipboardList, FaClock, FaCircleCheck, FaPlus, FaFileInvoiceDollar, FaUpload } from 'react-icons/fa6' import { integrationsApi, formatMoney } from '../lib/integrationsApi' import { useFinanceSummary } from '../hooks/useFinanceSummary' import { PageHeader, Card, Button, Kpi, EmptyState } from '../components/ui' import { StatusPill, PriorityPill } from '../components/ui/StatusPill' export default function DashboardPage() { const { summary, loading: finLoading } = useFinanceSummary() const [stats, setStats] = useState({ total: 0, open: 0, awaiting: 0, closed: 0 }) const [recent, setRecent] = useState([]) const [docCount, setDocCount] = useState(null) const [loading, setLoading] = useState(true) useEffect(() => { let active = true ;(async () => { try { const [total, open, closed, awaiting, recentRes] = await Promise.all([ databases.listDocuments(DATABASE_ID, COLLECTIONS.WORKORDERS, [Query.limit(1)]), databases.listDocuments(DATABASE_ID, COLLECTIONS.WORKORDERS, [Query.equal('status', 'Open'), Query.limit(1)]), databases.listDocuments(DATABASE_ID, COLLECTIONS.WORKORDERS, [Query.equal('status', 'Closed'), Query.limit(1)]), databases.listDocuments(DATABASE_ID, COLLECTIONS.WORKORDERS, [Query.equal('status', 'Awaiting'), Query.limit(1)]), databases.listDocuments(DATABASE_ID, COLLECTIONS.WORKORDERS, [Query.orderDesc('$createdAt'), Query.limit(6)]), ]) if (!active) return setStats({ total: total.total, open: open.total, awaiting: awaiting.total, closed: closed.total }) setRecent(recentRes.documents) } catch (e) { console.error(e) } finally { if (active) setLoading(false) } try { const d = await integrationsApi.listDocuments({ page_size: 1 }) if (active) setDocCount(d.count) } catch { /* ignore */ } })() return () => { active = false } }, []) return (
} />
Tickets gesamt} value={loading ? '...' : stats.total} accent="var(--info)" /> Offen} value={loading ? '...' : stats.open} accent="var(--ok)" /> Wartend} value={loading ? '...' : stats.awaiting} accent="var(--warn)" /> Geschlossen} value={loading ? '...' : stats.closed} accent="var(--text-faint)" />
{loading ? (
...
) : recent.length === 0 ? ( ) : (
{recent.map((t) => ( {t.woid || t.$id.slice(-5)}
{t.topic || t.title || '-'}
{t.customerName || '-'}
))}
)}
) }