Add lead workflows, PDF signing, AR projects and photo gallery integration

This commit is contained in:
Dennis Nemec
2026-11-08 17:49:39 +01:00
parent a343bde741
commit 8d18873412
82 changed files with 6401 additions and 34 deletions

View File

@ -0,0 +1,55 @@
import Foundation
import Observation
@MainActor @Observable
final class ARProjectsViewModel {
private(set) var supplied: [ARProject] = []
private(set) var custom: [ARProject] = []
private(set) var isLoading = true
var errorMessage: String?
private let service: any ARProjectsProviding
init(service: any ARProjectsProviding) {
self.service = service
}
func load() {
isLoading = true
defer { isLoading = false }
do {
let projects = try service.loadProjects()
supplied = projects.filter { $0.source == .supplied }
custom = projects.filter { $0.source == .custom }
} catch { errorMessage = error.localizedDescription }
}
func update(id: UUID, name: String, tank: Tank) -> ARProject? {
do {
let project = try service.updateProject(id: id, name: name, tank: tank)
if let index = custom.firstIndex(where: { $0.id == id }) { custom[index] = project }
return project
} catch {
errorMessage = error.localizedDescription
return nil
}
}
func delete(id: UUID) {
do {
try service.deleteProject(id: id)
supplied.removeAll { $0.id == id }
custom.removeAll { $0.id == id }
} catch { errorMessage = error.localizedDescription }
}
func create(name: String, tank: Tank) -> ARProject? {
do {
let project = try service.createProject(name: name, tank: tank)
custom.insert(project, at: 0)
return project
} catch {
errorMessage = error.localizedDescription
return nil
}
}
}