Feat: Fixing equipment settings form

This commit is contained in:
2024-06-05 10:13:41 -04:00
parent 6ec3eacb8d
commit c13b3740f2
10 changed files with 545 additions and 693 deletions

View File

@@ -16,35 +16,38 @@ public struct EquipmentMeasurementForm {
@ObservableState
public struct State: Equatable {
@Presents public var destination: Destination.State?
public var allowEquipmentTypeSelection: Bool
public var equipmentType: EquipmentType
public var focusedField: Field?
public var fields: FormFields
public var measurements: Measurements
public init(
allowEquipmentTypeSelection: Bool = true,
destination: Destination.State? = nil,
equipmentType: EquipmentType = .airHandler,
focusedField: Field? = nil,
fields: FormFields = .init()
measurements: Measurements = .init()
) {
self.allowEquipmentTypeSelection = allowEquipmentTypeSelection
self.destination = destination
self.equipmentType = equipmentType
self.focusedField = focusedField
self.fields = fields
self.measurements = measurements
}
public var equipmentMeasurement: EquipmentMeasurement {
fields.equipmentMeasurement(type: equipmentType)
measurements.equipmentMeasurement(type: equipmentType)
}
public var isValid: Bool {
fields.airflow != nil
&& fields.returnPlenumPressure != nil
&& fields.postFilterPressure != nil
&& fields.coilPressure != nil
&& fields.supplyPlenumPressure != nil
measurements.airflow != nil
&& measurements.returnPlenumPressure != nil
&& measurements.postFilterPressure != nil
&& measurements.coilPressure != nil
&& measurements.supplyPlenumPressure != nil
}
public struct FormFields: Equatable {
public struct Measurements: Equatable {
public var airflow: Double?
public var returnPlenumPressure: Double?
public var postFilterPressure: Double?
@@ -112,7 +115,7 @@ public struct EquipmentMeasurementForm {
}
}
public enum Field: Hashable, CaseIterable, FocusableField, Identifiable {
public enum Field: CaseIterable, FocusableField, Hashable, Identifiable {
case returnPlenumPressure
case postFilterPressure
case coilPressure
@@ -147,16 +150,16 @@ public struct EquipmentMeasurementForm {
case .destination:
return .none
case let .view(action):
switch action {
case .infoButtonTapped:
state.destination = .infoView(.init())
return .none
case .resetButtonTapped:
state.fields = .init()
state.measurements = .init()
return .none
case .submitField:
@@ -220,21 +223,21 @@ public struct EquipmentMeasurementFormView: View {
public var body: some View {
Form {
Section {
} header: {
Text("Equipment Type")
} footer: {
Picker("Equipment Type", selection: $store.equipmentType) {
ForEach(EquipmentType.allCases) {
Text($0.description)
.tag($0)
if store.allowEquipmentTypeSelection {
Section {
} header: {
Text("Equipment Type")
} footer: {
Picker("Equipment Type", selection: $store.equipmentType) {
ForEach(EquipmentType.allCases) {
Text($0.description)
.tag($0)
}
}
.pickerStyle(.segmented)
.labelsHidden()
}
.pickerStyle(.segmented)
.labelsHidden()
}
Section {
Grid(alignment: .leading, horizontalSpacing: 40) {
ForEach(store.pressureFields) { field in
@@ -268,8 +271,16 @@ public struct EquipmentMeasurementFormView: View {
}
}
}
.navigationTitle("Existing Measurements")
.textLabelStyle(.boldSecondary)
.textFieldStyle(.roundedBorder)
.sheet(
item: $store.scope(state: \.destination?.infoView, action: \.destination.infoView)
){ store in
NavigationStack {
InfoView(store: store)
}
}
}
private func textField(
@@ -280,15 +291,15 @@ public struct EquipmentMeasurementFormView: View {
switch field {
case .returnPlenumPressure:
value = $store.fields.returnPlenumPressure
value = $store.measurements.returnPlenumPressure
case .postFilterPressure:
value = $store.fields.postFilterPressure
value = $store.measurements.postFilterPressure
case .coilPressure:
value = $store.fields.coilPressure
value = $store.measurements.coilPressure
case .supplyPlenumPressure:
value = $store.fields.supplyPlenumPressure
value = $store.measurements.supplyPlenumPressure
case .airflow:
value = $store.fields.airflow
value = $store.measurements.airflow
fractionLength = 0
}
@@ -325,13 +336,26 @@ public struct EquipmentMeasurementFormView: View {
.decimalPad()
}
}
}
fileprivate extension InfoViewFeature.State {
init() {
self.init(
title: "Existing Measurements",
body: """
Record the current static pressure and airflow measurements of the existing system.
"""
)
}
}
#Preview {
EquipmentMeasurementFormView(
store: Store(initialState: EquipmentMeasurementForm.State()) {
EquipmentMeasurementForm()
}
)
NavigationStack {
EquipmentMeasurementFormView(
store: Store(initialState: EquipmentMeasurementForm.State()) {
EquipmentMeasurementForm()
}
)
}
}