feat: Anfragencenter Parts A–E — read/unread, prep wizard, offer flow, report preview

- Part A: Replace InquiryStatus badges with WhatsApp-style unread indicators
  (isRead, unreadCount, lastReadAt on Inquiry; markThreadAsRead in service + hook)
- Part B: RelatedPropertyCardPanel — reposition "Objekt ansehen", add "Weitere
  Matches" section via matchService.getAdditionalMatchesForInquiry
- Part C: PreparationWizard 4-step dialog — property selection, report generation
  progress, field editing + ReportObjectFieldSelector, PDF preview + finalize
- Part D: OfferCreationWizard 4-step dialog triggered from first tenant message —
  data capture, field editing, viewing appointments, PDF generation + attach to reply
- Part E: LatentInquiryReportPreview (2-page A4 doc), ReportObjectFieldSelector
  (5 accordion groups, 35+ optional fields), mapImageUrl on Property domain

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Sutter
2026-05-19 19:20:13 +02:00
parent 279b55d70e
commit b4d398270f
26 changed files with 1874 additions and 188 deletions
+4 -5
View File
@@ -1,7 +1,7 @@
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'
import { inquiryService } from '../services/inquiryService'
import type { InquiryFilters } from '../provider/IInquiryProvider'
import type { InquiryStatus, Attachment } from '../domain/inquiry'
import type { Attachment } from '../domain/inquiry'
export function useActiveInquiries(filters?: InquiryFilters) {
return useQuery({
@@ -37,12 +37,11 @@ export function useSendInquiryReply() {
})
}
export function useUpdateInquiryStatus() {
export function useMarkThreadAsRead() {
const qc = useQueryClient()
return useMutation({
mutationFn: ({ id, status }: { id: string; status: InquiryStatus }) =>
inquiryService.updateInquiryStatus(id, status),
onSuccess: (_data, { id }) => {
mutationFn: (id: string) => inquiryService.markThreadAsRead(id),
onSuccess: (_data, id) => {
qc.invalidateQueries({ queryKey: ['inquiry', id] })
qc.invalidateQueries({ queryKey: ['inquiries'] })
},