feat: Resolving concurrency warnings
This commit is contained in:
@@ -9,7 +9,7 @@ public struct EstimationForm {
|
||||
public init() { }
|
||||
|
||||
@ObservableState
|
||||
public struct State: Equatable {
|
||||
public struct State: Equatable, Sendable {
|
||||
public var cfmPerTon: Int
|
||||
public var coolingCapacity: EquipmentMetadata.CoolingCapacity
|
||||
public var filterPressureDrop: Double?
|
||||
|
||||
@@ -7,30 +7,27 @@ import Styleguide
|
||||
import SwiftUI
|
||||
import TCAExtras
|
||||
|
||||
|
||||
@Reducer
|
||||
public struct FlaggedMeasurementsList {
|
||||
|
||||
public struct FlaggedMeasurementsList: Sendable {
|
||||
|
||||
@Reducer(state: .equatable)
|
||||
public enum Destination {
|
||||
case estimationForm(EstimationForm)
|
||||
}
|
||||
|
||||
@ObservableState
|
||||
@dynamicMemberLookup
|
||||
public struct State: Equatable {
|
||||
|
||||
@Presents public var destination: Destination.State?
|
||||
@Shared var sharedSettings: SharedPressureEstimationSettings
|
||||
public var estimatedMeasurements: IdentifiedArrayOf<FlaggedMeasurementContainer>
|
||||
|
||||
init(
|
||||
|
||||
public init(
|
||||
destination: Destination.State? = nil,
|
||||
sharedSettings: Shared<SharedPressureEstimationSettings>,
|
||||
estimatedMeasurements: IdentifiedArrayOf<FlaggedMeasurementContainer> = []
|
||||
sharedSettings: Shared<SharedPressureEstimationSettings>
|
||||
) {
|
||||
self.destination = destination
|
||||
self._sharedSettings = sharedSettings
|
||||
self.estimatedMeasurements = estimatedMeasurements
|
||||
}
|
||||
|
||||
var ignoreIfZeroFields: [EquipmentMeasurement.FlaggedMeasurement.FieldKey] {
|
||||
@@ -39,21 +36,9 @@ public struct FlaggedMeasurementsList {
|
||||
return [.coilDrop, .filterDrop]
|
||||
}
|
||||
|
||||
#warning("Move to shared settings.")
|
||||
public struct FlaggedMeasurementContainer: Equatable, Identifiable {
|
||||
public let id: UUID
|
||||
public var flaggedMeasurement: EquipmentMeasurement.FlaggedMeasurement
|
||||
public var name: String
|
||||
|
||||
public init(
|
||||
id: UUID,
|
||||
name: String,
|
||||
flaggedMeasurement: EquipmentMeasurement.FlaggedMeasurement
|
||||
) {
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.flaggedMeasurement = flaggedMeasurement
|
||||
}
|
||||
public subscript<T>(dynamicMember keyPath: WritableKeyPath<SharedPressureEstimationSettings, T>) -> T {
|
||||
get { sharedSettings[keyPath: keyPath] }
|
||||
set { sharedSettings[keyPath: keyPath] = newValue }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,7 +49,7 @@ public struct FlaggedMeasurementsList {
|
||||
case view(View)
|
||||
|
||||
@CasePathable
|
||||
public enum ReceiveAction {
|
||||
public enum ReceiveAction: Sendable {
|
||||
case existingFlaggedMeasurement(EquipmentMeasurement.FlaggedMeasurement)
|
||||
case estimatedFlaggedMeasurement(name: String, measurement: EquipmentMeasurement.FlaggedMeasurement)
|
||||
}
|
||||
@@ -73,7 +58,7 @@ public struct FlaggedMeasurementsList {
|
||||
public enum View {
|
||||
case addButtonTapped
|
||||
case destination(DestinationAction)
|
||||
case editButtonTapped(id: State.FlaggedMeasurementContainer.ID)
|
||||
case editButtonTapped(id: SharedPressureEstimationSettings.FlaggedMeasurementContainer.ID)
|
||||
case onAppear
|
||||
|
||||
@CasePathable
|
||||
@@ -96,7 +81,7 @@ public struct FlaggedMeasurementsList {
|
||||
return .none
|
||||
|
||||
case let .estimatedFlaggedMeasurement(name: name, measurement: measurement):
|
||||
state.estimatedMeasurements.append(
|
||||
state.flaggedEstimations.append(
|
||||
.init(
|
||||
id: uuid(),
|
||||
name: name,
|
||||
@@ -242,7 +227,7 @@ public struct FlaggedMeasurementListView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
ForEach(store.estimatedMeasurements) { measurement in
|
||||
ForEach(store.flaggedEstimations) { measurement in
|
||||
Section {
|
||||
FlaggedEquipmentMeasurementView(
|
||||
measurement.flaggedMeasurement,
|
||||
@@ -295,34 +280,36 @@ public struct FlaggedMeasurementListView: View {
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
private let sharedPressureEstimationSettings = SharedPressureEstimationSettings(
|
||||
budgets: .init(equipmentType: .airHandler, fanType: .constantSpeed),
|
||||
equipmentMeasurement: .mock(type: .airHandler),
|
||||
flaggedEquipmentMeasurement: nil
|
||||
)
|
||||
|
||||
private let flaggedMeasurements = IdentifiedArrayOf<FlaggedMeasurementsList.State.FlaggedMeasurementContainer>(
|
||||
private let budgets = BudgetedPercentEnvelope(equipmentType: .airHandler, fanType: .constantSpeed)
|
||||
private let flaggedMeasurements = IdentifiedArrayOf<SharedPressureEstimationSettings.FlaggedMeasurementContainer>(
|
||||
uniqueElements: [
|
||||
.init(
|
||||
id: UUID(0),
|
||||
name: "Existing",
|
||||
flaggedMeasurement: .init(
|
||||
budgets: sharedPressureEstimationSettings.budgets!,
|
||||
measurement: sharedPressureEstimationSettings.equipmentMeasurement!,
|
||||
ratedPressures: sharedPressureEstimationSettings.equipmentMetadata.ratedStaticPressures,
|
||||
tons: sharedPressureEstimationSettings.equipmentMetadata.coolingCapacity
|
||||
budgets: budgets,
|
||||
measurement: .mock(type: .airHandler),
|
||||
ratedPressures: .init(),
|
||||
tons: .default
|
||||
)
|
||||
),
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
#Preview {
|
||||
NavigationStack {
|
||||
FlaggedMeasurementListView(
|
||||
store: Store(
|
||||
initialState: FlaggedMeasurementsList.State(
|
||||
sharedSettings: Shared(sharedPressureEstimationSettings)
|
||||
sharedSettings: Shared(
|
||||
SharedPressureEstimationSettings(
|
||||
budgets: budgets,
|
||||
equipmentMeasurement: .mock(type: .airHandler),
|
||||
flaggedEquipmentMeasurement: nil,
|
||||
flaggedEstimations: flaggedMeasurements
|
||||
)
|
||||
)
|
||||
)
|
||||
) {
|
||||
FlaggedMeasurementsList()
|
||||
@@ -331,18 +318,4 @@ private let flaggedMeasurements = IdentifiedArrayOf<FlaggedMeasurementsList.Stat
|
||||
}
|
||||
}
|
||||
|
||||
#Preview("Landscape", traits: .landscapeLeft) {
|
||||
NavigationStack {
|
||||
FlaggedMeasurementListView(
|
||||
store: Store(
|
||||
initialState: FlaggedMeasurementsList.State(
|
||||
sharedSettings: Shared(sharedPressureEstimationSettings)
|
||||
)
|
||||
) {
|
||||
FlaggedMeasurementsList()
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
import ComposableArchitecture
|
||||
import Foundation
|
||||
import SharedModels
|
||||
|
||||
/// Holds onto shared values for several of the views in this feature.
|
||||
@dynamicMemberLookup
|
||||
public struct SharedPressureEstimationSettings: Equatable {
|
||||
public struct SharedPressureEstimationSettings: Equatable, Sendable {
|
||||
public var budgets: BudgetedPercentEnvelope?
|
||||
public var equipmentMeasurement: EquipmentMeasurement?
|
||||
public var equipmentMetadata: EquipmentMetadata
|
||||
public var flaggedEquipmentMeasurement: EquipmentMeasurement.FlaggedMeasurement?
|
||||
public var flaggedEstimations: IdentifiedArrayOf<FlaggedMeasurementContainer>
|
||||
public var heatingCapacity: Double?
|
||||
public var manufacturersIncludedFilterPressureDrop: Double?
|
||||
|
||||
@@ -16,6 +18,7 @@ public struct SharedPressureEstimationSettings: Equatable {
|
||||
equipmentMeasurement: EquipmentMeasurement? = nil,
|
||||
equipmentMetadata: EquipmentMetadata = .init(),
|
||||
flaggedEquipmentMeasurement: EquipmentMeasurement.FlaggedMeasurement? = nil,
|
||||
flaggedEstimations: IdentifiedArrayOf<FlaggedMeasurementContainer> = [],
|
||||
heatingCapacity: Double? = nil,
|
||||
manufacturersIncludedFilterPressureDrop: Double? = nil
|
||||
) {
|
||||
@@ -23,6 +26,7 @@ public struct SharedPressureEstimationSettings: Equatable {
|
||||
self.equipmentMeasurement = equipmentMeasurement
|
||||
self.equipmentMetadata = equipmentMetadata
|
||||
self.flaggedEquipmentMeasurement = flaggedEquipmentMeasurement
|
||||
self.flaggedEstimations = flaggedEstimations
|
||||
self.heatingCapacity = heatingCapacity
|
||||
self.manufacturersIncludedFilterPressureDrop = manufacturersIncludedFilterPressureDrop
|
||||
}
|
||||
@@ -31,6 +35,22 @@ public struct SharedPressureEstimationSettings: Equatable {
|
||||
get { equipmentMetadata[keyPath: keyPath] }
|
||||
set { equipmentMetadata[keyPath: keyPath] = newValue }
|
||||
}
|
||||
|
||||
public struct FlaggedMeasurementContainer: Equatable, Identifiable, Sendable {
|
||||
public let id: UUID
|
||||
public var flaggedMeasurement: EquipmentMeasurement.FlaggedMeasurement
|
||||
public var name: String
|
||||
|
||||
public init(
|
||||
id: UUID,
|
||||
name: String,
|
||||
flaggedMeasurement: EquipmentMeasurement.FlaggedMeasurement
|
||||
) {
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.flaggedMeasurement = flaggedMeasurement
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension PersistenceReaderKey where Self == InMemoryKey<SharedPressureEstimationSettings> {
|
||||
|
||||
Reference in New Issue
Block a user