920ce8eb09
- Dashboard: remove QuickActionPanel, StrongMatchOverview, FutureSignalWidget,
DataQualityWidget, header buttons, Marktchancen nav; KpiGrid → 4 cards
- Property domain: 9 new fields (leaseTerm, leaseStartDate/End, breakoutOption,
currentTenant, importedFrom, importedAt, lastUpdatedAt)
- Mock data: annual CHF/m²/Jahr prices (×12), Swiss images, tenant/lease data
for all 10 VERIFIED_PORTFOLIO properties; need budgets updated to annual
- PropertyTable: swap columns — add Aktueller Mieter, Mietlaufzeit,
Breakoutoption, Breakoutoption Zeitpunkt; remove Verfügbarkeit, Konfidenz, Quelle
- PropertyDetailView: 3 tabs (Übersicht, Matchability, Marktsignale) with
inline edit mode, NeedMatchCard list, PropertyMarketSignalsTab
- New: marketReport domain + mock data + service, NeedMatchCard,
PropertyMarketSignalsTab with 4 sections + PDF button
- matchService: getNeedMatchesForProperty(propertyId, {minScore})
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
36 lines
951 B
TypeScript
36 lines
951 B
TypeScript
import { Box, Chip, Typography } from '@mui/material'
|
|
|
|
interface DashboardHeaderProps {
|
|
orgName?: string
|
|
lastUpdated?: string
|
|
}
|
|
|
|
function formatLastUpdated(iso: string): string {
|
|
try {
|
|
return new Intl.DateTimeFormat('de-CH', {
|
|
dateStyle: 'short',
|
|
timeStyle: 'short',
|
|
}).format(new Date(iso))
|
|
} catch {
|
|
return iso
|
|
}
|
|
}
|
|
|
|
export function DashboardHeader({ orgName = 'Demo Organisation', lastUpdated }: DashboardHeaderProps) {
|
|
return (
|
|
<Box>
|
|
<Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 0.5 }}>
|
|
<Typography variant="h6" sx={{ fontWeight: 600 }}>
|
|
{orgName}
|
|
</Typography>
|
|
<Chip label="Demo" size="small" color="info" variant="outlined" />
|
|
</Box>
|
|
{lastUpdated && (
|
|
<Typography variant="caption" sx={{ color: 'text.secondary' }}>
|
|
Zuletzt aktualisiert: {formatLastUpdated(lastUpdated)}
|
|
</Typography>
|
|
)}
|
|
</Box>
|
|
)
|
|
}
|