Feat: Fixing equipment settings form
This commit is contained in:
@@ -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()
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user