Add lead workflows, PDF signing, AR projects and photo gallery integration
This commit is contained in:
75
GasTankAR/Views/Leads/Overview/LeadCardView.swift
Normal file
75
GasTankAR/Views/Leads/Overview/LeadCardView.swift
Normal file
@ -0,0 +1,75 @@
|
||||
import SwiftUI
|
||||
|
||||
struct LeadCardView: View {
|
||||
let lead: Lead
|
||||
let isBusy: Bool
|
||||
let onOpen: () -> Void
|
||||
let onBookmark: () -> Void
|
||||
|
||||
var body: some View {
|
||||
ZStack(alignment: .topTrailing) {
|
||||
Button(action: onOpen) {
|
||||
VStack(alignment: .leading, spacing: 0) {
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
Text(lead.id)
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
.padding(.trailing, 36)
|
||||
Text(lead.displayName)
|
||||
.font(.headline)
|
||||
.foregroundStyle(.primary)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
Text(lead.fullAddress)
|
||||
.font(.subheadline)
|
||||
.foregroundStyle(.secondary)
|
||||
Label(lead.phoneNumber ?? " ", systemImage: "phone.fill")
|
||||
.font(.subheadline)
|
||||
.foregroundStyle(LeadOverviewStyle.blue)
|
||||
.hidden()
|
||||
.accessibilityHidden(true)
|
||||
}
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.padding(18)
|
||||
Divider()
|
||||
HStack(spacing: 12) {
|
||||
LeadStatusView(offerCount: lead.offerCount, unsignedContractCount: lead.unsignedContractCount)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
Image(systemName: "chevron.forward")
|
||||
.font(.caption.weight(.semibold))
|
||||
.foregroundStyle(.tertiary)
|
||||
.accessibilityHidden(true)
|
||||
}
|
||||
.padding(.horizontal, 18)
|
||||
.padding(.vertical, 12)
|
||||
.background(Color.primary.opacity(0.025), in: .rect)
|
||||
}
|
||||
.background(Color(uiColor: .secondarySystemGroupedBackground), in: .rect(cornerRadius: 18))
|
||||
.clipShape(.rect(cornerRadius: 18))
|
||||
.contentShape(.rect)
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.accessibilityHint("Interessentendetails öffnen")
|
||||
|
||||
LeadBookmarkButton(isBookmarked: lead.isBookmarked, isBusy: isBusy, action: onBookmark)
|
||||
.padding(6)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct LeadBookmarkButton: View {
|
||||
let isBookmarked: Bool
|
||||
let isBusy: Bool
|
||||
let action: () -> Void
|
||||
|
||||
var body: some View {
|
||||
Button(action: action) {
|
||||
Image(systemName: isBookmarked ? "bookmark.fill" : "bookmark")
|
||||
.foregroundStyle(isBookmarked ? Color.red : Color.secondary)
|
||||
.frame(width: 44, height: 44)
|
||||
.contentShape(.rect)
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.disabled(isBusy)
|
||||
.accessibilityLabel(isBookmarked ? "Nicht mehr merken" : "Interessent merken")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user