/** * Dashboard Page * * System-Übersicht für den User. * Zeigt alle verfügbaren Feature-Instanzen als Karten an. */ import React from 'react'; import { Link } from 'react-router-dom'; import { useMandates, useFeatureStore } from '../stores/featureStore'; import { getLabel, FEATURE_REGISTRY } from '../types/mandate'; import type { FeatureInstance } from '../types/mandate'; import { FaBriefcase, FaRobot, FaPlay, FaArrowRight } from 'react-icons/fa'; import styles from './Dashboard.module.css'; // ============================================================================= // FEATURE ICONS // ============================================================================= const FEATURE_ICONS: Record = { trustee: , chatbot: , chatworkflow: , }; // ============================================================================= // INSTANCE CARD // ============================================================================= interface InstanceCardProps { instance: FeatureInstance; featureLabel: string; } const InstanceCard: React.FC = ({ instance, featureLabel }) => { const basePath = `/mandates/${instance.mandateId}/${instance.featureCode}/${instance.id}`; // Ersten verfügbaren View finden const featureConfig = FEATURE_REGISTRY[instance.featureCode]; const firstView = featureConfig?.views?.[0]; const targetPath = firstView ? `${basePath}/${firstView.path}` : basePath; return (
{FEATURE_ICONS[instance.featureCode] || }
{featureLabel} {instance.userRoles?.join(', ') || '-'}

{instance.instanceLabel}

{instance.mandateName}

); }; // ============================================================================= // EMPTY STATE // ============================================================================= const EmptyState: React.FC = () => (
📋

Willkommen bei PowerOn

Du hast aktuell Zugriff auf keine Feature-Instanzen.

Kontaktiere einen Administrator, um Zugriff zu erhalten.

); // ============================================================================= // DASHBOARD PAGE // ============================================================================= export const DashboardPage: React.FC = () => { const mandates = useMandates(); const { hasAnyInstance, getAllInstances } = useFeatureStore(); // Alle Instanzen sammeln für Übersicht const allInstances = getAllInstances(); // Gruppiere nach Feature const instancesByFeature = allInstances.reduce((acc, instance) => { const featureCode = instance.featureCode; if (!acc[featureCode]) { acc[featureCode] = []; } acc[featureCode].push(instance); return acc; }, {} as Record); if (!hasAnyInstance()) { return ; } return (

Übersicht

Du hast Zugriff auf {allInstances.length} Feature-Instanz{allInstances.length !== 1 ? 'en' : ''} in {mandates.length} Mandant{mandates.length !== 1 ? 'en' : ''}.

{Object.entries(instancesByFeature).map(([featureCode, instances]) => { const featureConfig = FEATURE_REGISTRY[featureCode]; const featureLabel = featureConfig ? getLabel(featureConfig.label) : featureCode; return (

{FEATURE_ICONS[featureCode]} {featureLabel}

{instances.map(instance => ( ))}
); })}
); }; export default DashboardPage;