fix: demand Anfragen page shows own sent inquiries (demand perspective)

Replace supply-side mock data with demand-side conversations where the
logged-in user is the sender (right/dark) and verwalter replies are left.
List shows property name instead of tenant name.
New domain fields: propertyManagerName, propertyManagerCompany, propertyAddress.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Sutter
2026-05-24 18:07:59 +02:00
parent 128d28af8d
commit 3ab6eeccf2
5 changed files with 288 additions and 13 deletions
+15 -7
View File
@@ -5,7 +5,7 @@ import {
InputAdornment, Alert,
} from '@mui/material'
import { Search, Send, Paperclip, ArrowLeft, Bot, Building2, Kanban } from 'lucide-react'
import { mockInquiries } from '../../mock-data/inquiries'
import { mockDemandInquiries } from '../../mock-data/demandInquiries'
import { useInquiryStore } from '../../stores/inquiryStore'
import { usePipelineItems, useMoveStage } from '../../hooks/usePipeline'
import { useToastStore } from '../../stores/toastStore'
@@ -36,11 +36,11 @@ export default function Anfragen() {
const preselectedId = searchParams.get('inquiry')
const storeInquiries = useInquiryStore(s => s.sentInquiries)
const [inquiries, setInquiries] = useState(mockInquiries)
const [inquiries, setInquiries] = useState(mockDemandInquiries)
const allInquiries = [...storeInquiries, ...inquiries]
const [selectedId, setSelectedId] = useState<string | null>(
preselectedId ?? mockInquiries[0]?.id ?? null
preselectedId ?? mockDemandInquiries[0]?.id ?? null
)
const [search, setSearch] = useState('')
const [statusFilter, setStatusFilter] = useState('all')
@@ -54,7 +54,10 @@ export default function Anfragen() {
const matchesSearch = !q ||
inq.tenantName.toLowerCase().includes(q) ||
inq.subject.toLowerCase().includes(q) ||
(inq.tenantCompany?.toLowerCase().includes(q) ?? false)
(inq.tenantCompany?.toLowerCase().includes(q) ?? false) ||
(inq.propertyAddress?.toLowerCase().includes(q) ?? false) ||
(inq.propertyManagerName?.toLowerCase().includes(q) ?? false) ||
(inq.propertyManagerCompany?.toLowerCase().includes(q) ?? false)
const matchesStatus = statusFilter === 'all' || inq.status === statusFilter
return matchesSearch && matchesStatus
})
@@ -180,6 +183,7 @@ export default function Anfragen() {
inq={inq}
isSelected={inq.id === selectedId}
hasPipeline={!!(inq.propertyId ? pipelineItems.find(i => i.propertyId === inq.propertyId) : pipelineItems.find(i => i.inquiryId === inq.id))}
perspective="demand"
onSelect={handleSelect}
/>
))}
@@ -209,12 +213,16 @@ export default function Anfragen() {
<ArrowLeft size={16} />
</IconButton>
<Avatar sx={{ width: 36, height: 36, bgcolor: 'primary.main', fontSize: '0.8rem', flexShrink: 0 }}>
{selected.tenantName.split(' ').map(n => n[0]).join('').toUpperCase().slice(0, 2)}
{(selected.propertyAddress ?? selected.subject).split(' ').map((n: string) => n[0]).join('').toUpperCase().slice(0, 2)}
</Avatar>
<Box sx={{ flex: 1, minWidth: 0 }}>
<Box sx={{ display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'wrap' }}>
<Typography variant="body2" sx={{ fontWeight: 700, fontSize: '0.9rem' }}>{selected.tenantName}</Typography>
{selected.tenantCompany && <Typography variant="caption" color="text.secondary">{selected.tenantCompany}</Typography>}
<Typography variant="body2" sx={{ fontWeight: 700, fontSize: '0.9rem' }}>{selected.propertyAddress ?? selected.subject}</Typography>
{(selected.propertyManagerCompany ?? selected.propertyManagerName) && (
<Typography variant="caption" color="text.secondary">
{selected.propertyManagerCompany ?? selected.propertyManagerName ?? ''}
</Typography>
)}
</Box>
<Typography variant="caption" color="text.secondary" noWrap sx={{ display: 'block' }}>
{selected.subject}