1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
//
// BOMView.swift
// ShedCalc
//
// Created by Jacky Jack on 28/07/2026.
//
import SwiftUI
import Combine
struct BOMView: View {
@Environment(ParamModel.self) private var paramModel
private let bomController = BOMController()
private var materials: [MaterialItem] {
bomController.calcBOM(from: paramModel)
}
private var totalPrice: Double {
materials.reduce(0) { $0 + $1.totalPrice }
}
/*@State private var materials = [
MaterialItem(materialName: "2x4", pricePerMeter: 1.2, totalMeters: 10, totalPrice: 12, metersPerPiece: 4.8, totalPieces: 23),
MaterialItem(materialName: "OSB", pricePerMeter: 1.2, totalMeters: 10, totalPrice: 12, metersPerPiece: 4.8, totalPieces: 23),
MaterialItem(materialName: "Roof Felt", pricePerMeter: 1.2, totalMeters: 10, totalPrice: 12, metersPerPiece: 4.8, totalPieces: 23),
MaterialItem(materialName: "Nails", pricePerMeter: 1.2, totalMeters: 10, totalPrice: 12, metersPerPiece: 4.8, totalPieces: 23),
MaterialItem(materialName: "Cladding", pricePerMeter: 1.2, totalMeters: 10, totalPrice: 12, metersPerPiece: 4.8, totalPieces: 23)
]*/
var body: some View {
VStack {
Text("BOM")
}
VStack {
Table(materials) {
TableColumn("Material", value: \.materialName)
TableColumn("Total m") { material in
Text(material.totalMeters, format: .number.precision(.fractionLength(2)))
}
TableColumn("Price per m") { material in
Text(material.pricePerMeter, format: .number.precision(.fractionLength(2)))
}
TableColumn("m per Piece") { material in
Text(material.metersPerPiece, format: .number.precision(.fractionLength(2)))
}
TableColumn("Pieces") { material in
Text(material.totalPieces, format: .number)
}
TableColumn("Total price") { material in
Text(material.totalPrice, format: .number.precision(.fractionLength(2)))
}
}
}
HStack {
Text("Total price: \(totalPrice, format: .number.precision(.fractionLength(2)))")
}
}
}
|