import ComposableArchitecture import Foundation import SharedModels /// Holds onto shared values for several of the views in this feature. @dynamicMemberLookup 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 public var heatingCapacity: Double? public var manufacturersIncludedFilterPressureDrop: Double? public init( budgets: BudgetedPercentEnvelope? = nil, equipmentMeasurement: EquipmentMeasurement? = nil, equipmentMetadata: EquipmentMetadata = .init(), flaggedEquipmentMeasurement: EquipmentMeasurement.FlaggedMeasurement? = nil, flaggedEstimations: IdentifiedArrayOf = [], heatingCapacity: Double? = nil, manufacturersIncludedFilterPressureDrop: Double? = nil ) { self.budgets = budgets self.equipmentMeasurement = equipmentMeasurement self.equipmentMetadata = equipmentMetadata self.flaggedEquipmentMeasurement = flaggedEquipmentMeasurement self.flaggedEstimations = flaggedEstimations self.heatingCapacity = heatingCapacity self.manufacturersIncludedFilterPressureDrop = manufacturersIncludedFilterPressureDrop } public subscript(dynamicMember keyPath: WritableKeyPath) -> T { 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 { static var sharedPressureEstimationSettings: Self { .inMemory("sharedPressureEstimationSettings") } }