8f1db31683
Teil A — GenericBadge:
- Neue src/components/shared/GenericBadge.tsx mit zwei Varianten:
transparent (${color}18 Hintergrund, farbiger Text, opt. Border)
solid (gefüllte Farbe, weisser Text)
- Props: label, color, variant, showBorder, bold, icon, size, tooltip, ariaLabel
- 7 Badges auf GenericBadge refactored (Config-Objekt + 1-Zeiler):
ReviewStatusBadge, ReviewPriorityBadge, ReviewEntityTypeBadge,
AIOutputStatusBadge, AIErrorBadge, MatchStatusBadge, ShortlistStatusBadge
- Barrel-Export in src/components/shared/index.ts
Teil B — Provider-Isolation:
- src/mock-data/propertyStore.ts als neutrales Daten-Modul erstellt
- MockupPropertyProvider: importiert aus mock-data statt selbst zu definieren
- MockupUnitProvider: importiert aus mock-data statt aus MockupPropertyProvider
- matchSyncService: importiert aus mock-data statt aus MockupPropertyProvider
- Kein Provider importiert mehr einen anderen Provider
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
16 lines
758 B
TypeScript
16 lines
758 B
TypeScript
import { GenericBadge } from '../shared/GenericBadge'
|
|
import type { AIOutputError } from '../../domain/aiOutput'
|
|
|
|
const ERROR_CONFIG: Record<string, { label: string; color: string }> = {
|
|
SCHEMA_VALIDATION: { label: 'Schema', color: '#ea580c' },
|
|
PROVIDER_TIMEOUT: { label: 'Timeout', color: '#c0392b' },
|
|
INVALID_JSON: { label: 'JSON', color: '#c0392b' },
|
|
EMPTY_RESPONSE: { label: 'Leer', color: '#d97706' },
|
|
RATE_LIMIT: { label: 'Rate Limit', color: '#7c3aed' },
|
|
}
|
|
|
|
export function AIErrorBadge({ error }: { error: AIOutputError }) {
|
|
const { label, color } = ERROR_CONFIG[error.type] ?? { label: error.type, color: '#c0392b' }
|
|
return <GenericBadge label={label} color={color} bold tooltip={error.message} />
|
|
}
|