Add lead workflows, PDF signing, AR projects and photo gallery integration
This commit is contained in:
68
GasTankAR/Views/Leads/Detail/LeadDetailView.swift
Normal file
68
GasTankAR/Views/Leads/Detail/LeadDetailView.swift
Normal file
@ -0,0 +1,68 @@
|
||||
import SwiftUI
|
||||
import SwiftData
|
||||
|
||||
struct LeadDetailView: View {
|
||||
let detail: LeadDetail
|
||||
let model: LeadDetailViewModel
|
||||
let salesCode: String
|
||||
let repository: any LeadDetailRepository
|
||||
let onLogout: () -> Void
|
||||
@State private var showsARProjects = false
|
||||
@State private var galleryRevision = 0
|
||||
|
||||
var body: some View {
|
||||
LeadDetailPageLayout {
|
||||
LeadDetailHeaderView(detail: detail, canStartAR: true, onStartAR: { showsARProjects = true })
|
||||
} left: {
|
||||
VStack(spacing: 28) {
|
||||
LeadContactSection(detail: detail)
|
||||
LeadLocationSection(name: detail.lead.displayName, address: detail.lead.address)
|
||||
}
|
||||
} right: {
|
||||
VStack(spacing: 28) {
|
||||
LeadOffersSection(offers: detail.offers, model: model)
|
||||
LeadPhotoGallerySection(photos: detail.photos, leadID: detail.lead.id,
|
||||
salesCode: salesCode, repository: repository, onLogout: onLogout,
|
||||
refreshID: galleryRevision)
|
||||
}
|
||||
}
|
||||
.sheet(isPresented: $showsARProjects, onDismiss: { galleryRevision += 1 }) {
|
||||
LeadARProjectsSheet(detail: detail)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct LeadDetailPageLayout<Header: View, Left: View, Right: View>: View {
|
||||
let header: Header
|
||||
let left: Left
|
||||
let right: Right
|
||||
@Environment(\.dynamicTypeSize) private var dynamicTypeSize
|
||||
|
||||
init(@ViewBuilder header: () -> Header, @ViewBuilder left: () -> Left,
|
||||
@ViewBuilder right: () -> Right) {
|
||||
self.header = header()
|
||||
self.left = left()
|
||||
self.right = right()
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
GeometryReader { geometry in
|
||||
ScrollView {
|
||||
VStack(alignment: .leading, spacing: 28) {
|
||||
header
|
||||
if geometry.size.width >= 900 && !dynamicTypeSize.isAccessibilitySize {
|
||||
HStack(alignment: .top, spacing: 24) {
|
||||
left.frame(width: (geometry.size.width - 72) * 0.34)
|
||||
right.frame(maxWidth: .infinity)
|
||||
}
|
||||
} else {
|
||||
left
|
||||
right
|
||||
}
|
||||
}
|
||||
.padding(24)
|
||||
}
|
||||
.background(LeadDetailStyle.background.ignoresSafeArea())
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user