58 lines
2.3 KiB
Swift
58 lines
2.3 KiB
Swift
import SwiftUI
|
|
|
|
struct LeadContactSection: View {
|
|
let detail: LeadDetail
|
|
|
|
var body: some View {
|
|
VStack(alignment: .leading, spacing: 8) {
|
|
LeadSectionHeading(title: "KONTAKT")
|
|
VStack(spacing: 0) {
|
|
LeadContactRow(title: "Ansprechpartner", value: detail.contactDescription,
|
|
icon: "person.fill", color: .gray)
|
|
Divider().padding(.leading, 56)
|
|
LeadContactRow(title: "Telefon", value: detail.lead.phoneNumber,
|
|
icon: "phone.fill", color: .green)
|
|
Divider().padding(.leading, 56)
|
|
LeadContactRow(title: "Mobil", value: detail.mobile,
|
|
icon: "iphone", color: .green)
|
|
Divider().padding(.leading, 56)
|
|
LeadContactRow(title: "E-Mail", value: detail.email,
|
|
icon: "envelope.fill", color: .blue)
|
|
Divider().padding(.leading, 56)
|
|
LeadContactRow(title: "Anschrift",
|
|
value: [detail.lead.address.street, detail.lead.locality].compactMap { $0 }.joined(separator: "\n"),
|
|
icon: "mappin", color: .red)
|
|
}
|
|
.background(LeadDetailStyle.card, in: .rect(cornerRadius: 12))
|
|
}
|
|
}
|
|
}
|
|
|
|
private struct LeadContactRow: View {
|
|
let title: LocalizedStringKey
|
|
let value: String?
|
|
let icon: String
|
|
let color: Color
|
|
@ScaledMetric(relativeTo: .body) private var iconSize: CGFloat = 30
|
|
|
|
var body: some View {
|
|
HStack(spacing: 12) {
|
|
Image(systemName: icon)
|
|
.font(.body.weight(.semibold))
|
|
.foregroundStyle(.white)
|
|
.frame(width: iconSize, height: iconSize)
|
|
.background(color, in: .rect(cornerRadius: 7))
|
|
.accessibilityHidden(true)
|
|
VStack(alignment: .leading, spacing: 3) {
|
|
Text(title).font(.caption).foregroundStyle(.secondary)
|
|
Text(value ?? "Nicht hinterlegt")
|
|
.font(.body)
|
|
.foregroundStyle(value == nil ? .secondary : .primary)
|
|
.textSelection(.enabled)
|
|
}
|
|
Spacer(minLength: 0)
|
|
}
|
|
.padding(.horizontal, 16).padding(.vertical, 11)
|
|
}
|
|
}
|