3c496f4b6a
Check Cross-Plugin Imports / check (push) Has been cancelled
- system_miniapps.py: audit_activity (audit:read, settings max_items) + system_metrics (settings:read) als Core-Apps in Registry - base.py-Fix: native Manifest-MiniApps reichen component durch (M1-Luecke) - contacts-Manifest: contacts_stats (ContactsStatsWidget, contacts:read, show_companies/show_persons) - Seed-Fix: nur renderbare Apps (component) landen im Dashboard-Layout - Frontend: ContactsStatsWidget, AuditActivityWidget, SystemMetricsWidget; MiniAppHost-Registry +3 - Dashboard.tsx = reiner Host (26 Z.); Page-Tests auf Pure-Host umgeschrieben - Tests: M4 7/7 (TDD rot->gruen), Backend-Regression 46/46, Vitest 22/22, tsc clean, build OK
27 lines
922 B
TypeScript
27 lines
922 B
TypeScript
import { useTranslation } from 'react-i18next';
|
|
import { DashboardBuilder } from '@/components/dashboard/DashboardBuilder';
|
|
|
|
/**
|
|
* Dashboard page — pure host (Phase M4).
|
|
*
|
|
* All content (stat cards, activity feed, system metrics, plugin widgets)
|
|
* now lives in personal MiniApp instances managed by the builder. The
|
|
* former hard-coded blocks were migrated to widgets in M4:
|
|
* - StatCards -> ContactsStatsWidget (contacts plugin, contacts:read)
|
|
* - ActivityFeed -> AuditActivityWidget (system, audit:read)
|
|
* - System Metrics -> SystemMetricsWidget (system, settings:read)
|
|
*/
|
|
|
|
export function DashboardPage() {
|
|
const { t } = useTranslation();
|
|
|
|
return (
|
|
<div className="p-6 max-w-7xl mx-auto" data-testid="dashboard-page">
|
|
<h1 className="text-2xl font-bold text-secondary-900 mb-6">{t('dashboard.title')}</h1>
|
|
<DashboardBuilder />
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export default DashboardPage;
|