Gesprächsvorschläge: Übernehmen-Button pro Sektion

Jede der drei Vorschlags-Sektionen hat jetzt einen kleinen Button
(Pfeil-Icon), der den jeweiligen Text ins Notizfeld übernimmt.
Kurzes Checkmark-Feedback zeigt die erfolgreiche Übernahme an.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-22 06:22:02 +02:00
parent a3ae925a10
commit 7057ccb607
+29 -5
View File
@@ -37,6 +37,7 @@ struct AddMomentView: View {
@State private var conversationState: ConversationSuggestionUIState = .idle
@State private var showConversationPaywall = false
@State private var showConversationConsent = false
@State private var insertedSectionKey: String? = nil // für kurzes Checkmark-Feedback
// Vorhaben: Erinnerung
@State private var addReminder = false
@@ -558,11 +559,11 @@ struct AddMomentView: View {
private func conversationResultView(result: ConversationSuggestionResult) -> some View {
VStack(alignment: .leading, spacing: 0) {
conversationSection(icon: "text.bubble", title: "Themenvorschläge", text: result.topics)
conversationSection(icon: "text.bubble", title: "Themenvorschläge", sectionKey: "topics", content: result.topics)
RowDivider()
conversationSection(icon: "lifepreserver", title: "Gesprächsretter", text: result.rescue)
conversationSection(icon: "lifepreserver", title: "Gesprächsretter", sectionKey: "rescue", content: result.rescue)
RowDivider()
conversationSection(icon: "arrow.down.heart", title: "Tiefe erreichen", text: result.depth)
conversationSection(icon: "arrow.down.heart", title: "Tiefe erreichen", sectionKey: "depth", content: result.depth)
RowDivider()
Button {
Task { await loadConversationSuggestions() }
@@ -578,7 +579,7 @@ struct AddMomentView: View {
}
}
private func conversationSection(icon: String, title: String, text: String) -> some View {
private func conversationSection(icon: String, title: String, sectionKey: String, content: String) -> some View {
HStack(alignment: .top, spacing: 12) {
Image(systemName: icon)
.font(.system(size: 13))
@@ -589,16 +590,39 @@ struct AddMomentView: View {
Text(LocalizedStringKey(title))
.font(.system(size: 13, weight: .semibold))
.foregroundStyle(theme.contentSecondary)
Text(text)
Text(content)
.font(.system(size: 14, design: theme.displayDesign))
.foregroundStyle(theme.contentPrimary)
.fixedSize(horizontal: false, vertical: true)
}
Spacer(minLength: 8)
// Übernehmen-Button
Button {
appendSuggestion(content, key: sectionKey)
} label: {
Image(systemName: insertedSectionKey == sectionKey ? "checkmark" : "arrow.up.doc")
.font(.system(size: 13))
.foregroundStyle(insertedSectionKey == sectionKey ? theme.accent : theme.contentTertiary)
.frame(width: 28, height: 28)
.contentShape(Rectangle())
.animation(.easeInOut(duration: 0.2), value: insertedSectionKey)
}
.buttonStyle(.plain)
.padding(.top, 2)
}
.padding(.horizontal, 16)
.padding(.vertical, 12)
}
private func appendSuggestion(_ content: String, key: String) {
let prefix = text.isEmpty ? "" : "\n\n"
text += prefix + content
withAnimation { insertedSectionKey = key }
DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
withAnimation { insertedSectionKey = nil }
}
}
private func conversationErrorView(message: String) -> some View {
VStack(alignment: .leading, spacing: 8) {
Label("Vorschläge fehlgeschlagen", systemImage: "exclamationmark.triangle")