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>
37 lines
1.7 KiB
TypeScript
37 lines
1.7 KiB
TypeScript
import type { IPropertyProvider, PropertyFilters } from './IPropertyProvider'
|
|
import type { Property, CreatePropertyInput, UpdatePropertyInput } from '../domain/property'
|
|
import { propertyStore } from '../mock-data/propertyStore'
|
|
|
|
const store = propertyStore
|
|
|
|
export const MockupPropertyProvider: IPropertyProvider = {
|
|
async getAll(filters?: PropertyFilters) {
|
|
let results = [...store]
|
|
if (filters?.assetType) results = results.filter(p => p.assetType === filters.assetType)
|
|
if (filters?.resultType) results = results.filter(p => p.resultType === filters.resultType)
|
|
if (filters?.city) results = results.filter(p => p.location.city.toLowerCase().includes(filters.city!.toLowerCase()))
|
|
if (filters?.minAreaSqm) results = results.filter(p => p.areaSqm >= filters.minAreaSqm!)
|
|
if (filters?.maxRentPerSqm) results = results.filter(p => p.rentPricePerSqm <= filters.maxRentPerSqm!)
|
|
if (filters?.sourceType) results = results.filter(p => p.sourceType === filters.sourceType)
|
|
if (filters?.organizationId) results = results.filter(p => p.organizationId === filters.organizationId)
|
|
return results
|
|
},
|
|
async getById(id) {
|
|
return store.find(p => p.id === id) ?? null
|
|
},
|
|
async create(data: CreatePropertyInput) {
|
|
const next: Property = { id: crypto.randomUUID(), ...data, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString() }
|
|
store.push(next)
|
|
return next
|
|
},
|
|
async update(id, data: UpdatePropertyInput) {
|
|
const idx = store.findIndex(p => p.id === id)
|
|
store[idx] = { ...store[idx], ...data, updatedAt: new Date().toISOString() }
|
|
return store[idx]
|
|
},
|
|
async remove(id) {
|
|
const idx = store.findIndex(p => p.id === id)
|
|
store.splice(idx, 1)
|
|
},
|
|
}
|