diff --git a/nahbar/nahbar/PersonDetailView.swift b/nahbar/nahbar/PersonDetailView.swift index 3a2afa1..3fd5fd1 100644 --- a/nahbar/nahbar/PersonDetailView.swift +++ b/nahbar/nahbar/PersonDetailView.swift @@ -42,6 +42,8 @@ struct PersonDetailView: View { // Neu hinzugefügte Logbuch-Momente – 5 s in Momente sichtbar, dann in Verlauf @State private var fadingOutMoments: [Moment] = [] @State private var seenMomentIDs: Set = [] + // Treffen-Momente warten auf Rating-Survey-Abschluss bevor der 5-s-Timer startet + @State private var pendingFadeAfterSurvey: [Moment] = [] // Kalender-Lösch-Bestätigung @State private var momentPendingDelete: Moment? = nil @@ -114,16 +116,24 @@ struct PersonDetailView: View { let isActive = moment.isOpen || (moment.isMeeting && moment.createdAt > Date()) return !isActive } + // Sofort visuell in Momente einblenden for moment in newLogbuchMoments { withAnimation { fadingOutMoments.append(moment) } - DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) { - withAnimation(.easeOut(duration: 0.35)) { - fadingOutMoments.removeAll { $0.id == moment.id } - } - } } + // Treffen-Momente: Timer erst nach Rating-Survey starten (survey läuft noch) + let meetingMoments = newLogbuchMoments.filter { $0.isMeeting } + let otherMoments = newLogbuchMoments.filter { !$0.isMeeting } + scheduleFadeOut(otherMoments) + pendingFadeAfterSurvey.append(contentsOf: meetingMoments) } } + .onChange(of: momentForRating) { old, new in + // Survey geschlossen (war gesetzt, ist jetzt nil) → Timer für wartende Treffen starten + guard old != nil && new == nil, !pendingFadeAfterSurvey.isEmpty else { return } + let toFade = pendingFadeAfterSurvey + pendingFadeAfterSurvey = [] + scheduleFadeOut(toFade) + } .sheet(isPresented: $showingEditPerson) { AddPersonView(existingPerson: person) } @@ -378,6 +388,17 @@ struct PersonDetailView: View { return active + fadingOutMoments } + /// Startet den 5-s-Ausblend-Timer für die angegebenen Momente. + private func scheduleFadeOut(_ moments: [Moment]) { + for moment in moments { + DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) { + withAnimation(.easeOut(duration: 0.35)) { + fadingOutMoments.removeAll { $0.id == moment.id } + } + } + } + } + private var momentsSection: some View { VStack(alignment: .leading, spacing: 10) { HStack {