Task 5.25: Dashboard-System — GET /api/v1/dashboard/widgets, DashboardWidgetLoader, DashboardGrid with drag-and-drop, 3 example widgets (RecentContacts, TasksSummary, CalendarUpcoming), updated Dashboard.tsx, i18n, 6 tests

This commit is contained in:
Agent Zero
2026-07-24 00:09:26 +02:00
parent 96e183bab2
commit 036e87a9ed
15 changed files with 544 additions and 6 deletions
@@ -40,9 +40,9 @@ export function DedupDialog({ open, onClose }: { open: boolean; onClose: () => v
const overrides: Record<string, unknown> = {};
for (const [field, value] of Object.entries(fieldOverrides)) {
if (value === 'source') {
overrides[field] = (pair.source_contact as Record<string, unknown>)[field];
overrides[field] = (pair.source_contact as unknown as Record<string, unknown>)[field];
} else if (value === 'target') {
overrides[field] = (pair.target_contact as Record<string, unknown>)[field];
overrides[field] = (pair.target_contact as unknown as Record<string, unknown>)[field];
}
}
@@ -124,8 +124,8 @@ export function DedupDialog({ open, onClose }: { open: boolean; onClose: () => v
<div className="text-center">{t('dedup.target')}</div>
</div>
{compareFields.map((field) => {
const sourceVal = (pair.source_contact as Record<string, unknown>)[field.key] as string | null;
const targetVal = (pair.target_contact as Record<string, unknown>)[field.key] as string | null;
const sourceVal = (pair.source_contact as unknown as Record<string, unknown>)[field.key] as string | null;
const targetVal = (pair.target_contact as unknown as Record<string, unknown>)[field.key] as string | null;
return (
<div key={field.key} className="grid grid-cols-3 gap-2 text-sm">
<div className="text-secondary-700">{field.label}</div>