/** * TrusteeDashboardView * * Overview dashboard for a Trustee instance. * Shows statistics about positions, documents, and accounting sync status. */ import React, { useState, useEffect } from 'react'; import { useCurrentInstance } from '../../../hooks/useCurrentInstance'; import { useTrusteePositions, useTrusteeDocuments } from '../../../hooks/useTrustee'; import { useApiRequest } from '../../../hooks/useApi'; import { fetchAccountingConfig, fetchSyncStatus, type AccountingConfig, type AccountingSyncStatus } from '../../../api/trusteeApi'; import styles from './TrusteeViews.module.css'; export const TrusteeDashboardView: React.FC = () => { const { instance, instanceId } = useCurrentInstance(); const { items: positions, loading: posLoading } = useTrusteePositions(); const { items: documents, loading: docsLoading } = useTrusteeDocuments(); const { request } = useApiRequest(); const [accountingConfig, setAccountingConfig] = useState(null); const [syncItems, setSyncItems] = useState([]); const [accountingLoading, setAccountingLoading] = useState(true); useEffect(() => { if (!instanceId) return; const loadAccountingData = async () => { setAccountingLoading(true); try { const [config, syncData] = await Promise.all([ fetchAccountingConfig(request, instanceId), fetchSyncStatus(request, instanceId), ]); setAccountingConfig(config); setSyncItems(syncData?.items || []); } catch { // Accounting not configured is fine } finally { setAccountingLoading(false); } }; loadAccountingData(); }, [instanceId, request]); const isLoading = posLoading || docsLoading || accountingLoading; const syncedCount = syncItems.filter(s => s.syncStatus === 'synced').length; const syncErrorCount = syncItems.filter(s => s.syncStatus === 'error').length; return (
📊
{isLoading ? '...' : positions.length}
Positionen
📄
{isLoading ? '...' : documents.length}
Dokumente
{accountingConfig?.configured ? '✓' : '○'}
{isLoading ? '...' : ( accountingConfig?.configured ? <>{syncedCount} synced{syncErrorCount > 0 && / {syncErrorCount} errors} : 'Not configured' )}
Buchhaltung
👤
{instance?.userRoles?.length ? ( instance.userRoles.map((role: string, idx: number) => (
{role}
)) ) : '-'}
{(instance?.userRoles?.length || 0) === 1 ? 'Deine Rolle' : 'Deine Rollen'}

Instanz-Details

Instanz: {instance?.instanceLabel}
Mandant: {instance?.mandateName}
{accountingConfig?.configured && (
Buchhaltungssystem: {accountingConfig.displayLabel || accountingConfig.connectorType} {accountingConfig.lastSyncStatus && ` (${accountingConfig.lastSyncStatus})`}
)}
); }; export default TrusteeDashboardView;