diff --git a/Meshtastic/Views/Nodes/Helpers/Map/WaypointForm.swift b/Meshtastic/Views/Nodes/Helpers/Map/WaypointForm.swift index 4261b0cc..9b163154 100644 --- a/Meshtastic/Views/Nodes/Helpers/Map/WaypointForm.swift +++ b/Meshtastic/Views/Nodes/Helpers/Map/WaypointForm.swift @@ -65,14 +65,14 @@ struct WaypointForm: View { axis: .vertical ) .foregroundColor(Color.gray) - .onChange(of: name, perform: { _ in + .onChange(of: name) { var totalBytes = name.utf8.count // Only mess with the value if it is too big while totalBytes > 30 { name = String(name.dropLast()) totalBytes = name.utf8.count } - }) + } } HStack { Text("Description") @@ -83,14 +83,14 @@ struct WaypointForm: View { axis: .vertical ) .foregroundColor(Color.gray) - .onChange(of: description, perform: { _ in + .onChange(of: description) { var totalBytes = description.utf8.count // Only mess with the value if it is too big while totalBytes > 100 { description = String(description.dropLast()) totalBytes = description.utf8.count } - }) + } } HStack { Text("Icon") diff --git a/Meshtastic/Views/Nodes/MeshMap.swift b/Meshtastic/Views/Nodes/MeshMap.swift index 253a15fd..447f6fdd 100644 --- a/Meshtastic/Views/Nodes/MeshMap.swift +++ b/Meshtastic/Views/Nodes/MeshMap.swift @@ -139,7 +139,7 @@ struct MeshMap: View { guard case .map = router.navigationState.selectedTab else { return } // TODO: handle deep link for waypoints } - .onChange(of: selectedMapLayer) { newMapLayer in + .onChange(of: selectedMapLayer) { _, newMapLayer in switch selectedMapLayer { case .standard: UserDefaults.mapLayer = newMapLayer @@ -183,17 +183,6 @@ struct MeshMap: View { .tint(Color(UIColor.secondarySystemBackground)) .foregroundColor(.accentColor) .buttonStyle(.borderedProminent) -// Button(action: { -// withAnimation { -// editingFilters = !editingFilters -// } -// }) { -// Image(systemName: !editingFilters ? "line.3.horizontal.decrease.circle" : "line.3.horizontal.decrease.circle.fill") -// .padding(.vertical, 5) -// } -// .tint(Color(UIColor.secondarySystemBackground)) -// .foregroundColor(.accentColor) -// .buttonStyle(.borderedProminent) } .controlSize(.regular) .padding(5) diff --git a/Meshtastic/Views/Nodes/NodeMap.swift b/Meshtastic/Views/Nodes/NodeMap.swift index 53b0aae3..9988f237 100644 --- a/Meshtastic/Views/Nodes/NodeMap.swift +++ b/Meshtastic/Views/Nodes/NodeMap.swift @@ -26,8 +26,6 @@ struct NodeMap: View { @State var selectedOverlayServer: MapOverlayServer = UserDefaults.mapOverlayServer @State var mapTilesAboveLabels: Bool = UserDefaults.mapTilesAboveLabels let fromDate: NSDate = Calendar.current.date(byAdding: .month, value: -1, to: Date())! as NSDate -// @FetchRequest(sortDescriptors: [NSSortDescriptor(key: "time", ascending: true)], -// predicate: NSPredicate(format: "time >= %@ && nodePosition != nil", Calendar.current.date(byAdding: .day, value: -7, to: Date())! as NSDate), animation: .none) @FetchRequest(sortDescriptors: [NSSortDescriptor(key: "time", ascending: true)], predicate: NSPredicate(format: "nodePosition != nil", Calendar.current.date(byAdding: .day, value: -7, to: Date())! as NSDate), animation: .none) private var positions: FetchedResults @@ -97,7 +95,7 @@ struct NodeMap: View { } } .pickerStyle(SegmentedPickerStyle()) - .onChange(of: (selectedMapLayer)) { newMapLayer in + .onChange(of: selectedMapLayer) { _, newMapLayer in UserDefaults.mapLayer = newMapLayer } .padding(.top, 5) @@ -144,10 +142,10 @@ struct NodeMap: View { .font(.footnote) } } - .pickerStyle(DefaultPickerStyle()) - .onChange(of: (selectedOverlayServer)) { newSelectedOverlayServer in - UserDefaults.mapOverlayServer = newSelectedOverlayServer - } + .pickerStyle(DefaultPickerStyle()) + .onChange(of: (selectedOverlayServer)) { _, newSelectedOverlayServer in + UserDefaults.mapOverlayServer = newSelectedOverlayServer + } Text(LocalizedStringKey(selectedOverlayServer.attribution)) .font(.footnote) .foregroundColor(.gray) @@ -160,7 +158,7 @@ struct NodeMap: View { Text("Enable Offline Maps") } .toggleStyle(SwitchToggleStyle(tint: .accentColor)) - .onChange(of: enableOfflineMaps) { newEnableOfflineMaps in + .onChange(of: enableOfflineMaps) { _, newEnableOfflineMaps in UserDefaults.enableOfflineMaps = newEnableOfflineMaps if !enableOfflineMaps { if self.selectedMapLayer == .offline { @@ -176,10 +174,10 @@ struct NodeMap: View { Text(tsl.description) } } - .pickerStyle(DefaultPickerStyle()) - .onChange(of: (selectedTileServer)) { newSelectedTileServer in - UserDefaults.mapTileServer = newSelectedTileServer - } + .pickerStyle(DefaultPickerStyle()) + .onChange(of: (selectedTileServer)) { _, newSelectedTileServer in + UserDefaults.mapTileServer = newSelectedTileServer + } Text("Attribution:") .fontWeight(.semibold) .font(.footnote) diff --git a/Meshtastic/Views/Settings/Config/Module/CannedMessagesConfig.swift b/Meshtastic/Views/Settings/Config/Module/CannedMessagesConfig.swift index dff48797..699d22d4 100644 --- a/Meshtastic/Views/Settings/Config/Module/CannedMessagesConfig.swift +++ b/Meshtastic/Views/Settings/Config/Module/CannedMessagesConfig.swift @@ -254,7 +254,7 @@ struct CannedMessagesConfig: View { } } } - .onChange(of: configPreset) { newPreset in + .onChange(of: configPreset) { _, newPreset in if newPreset == 1 { diff --git a/Meshtastic/Views/Settings/Config/Module/SerialConfig.swift b/Meshtastic/Views/Settings/Config/Module/SerialConfig.swift index 893ddca1..a7fd5bdb 100644 --- a/Meshtastic/Views/Settings/Config/Module/SerialConfig.swift +++ b/Meshtastic/Views/Settings/Config/Module/SerialConfig.swift @@ -157,41 +157,29 @@ struct SerialConfig: View { } } } - .onChange(of: enabled) { - if $0 != node?.serialConfig?.enabled { hasChanges = true } + .onChange(of: enabled) { oldEnabled, newEnabled in + if oldEnabled != newEnabled && newEnabled != node?.serialConfig?.enabled ?? false { hasChanges = true } } - .onChange(of: echo) { - if $0 != node?.serialConfig?.echo { hasChanges = true } + .onChange(of: echo) { oldEcho, newEcho in + if oldEcho != newEcho && newEcho != node?.serialConfig?.echo ?? false { hasChanges = true } } - .onChange(of: rxd) { newRxd in - if node != nil && node!.serialConfig != nil { - if newRxd != node!.serialConfig!.rxd { hasChanges = true } - } + .onChange(of: rxd) { oldRxd, newRxd in + if oldRxd != newRxd && newRxd != node?.serialConfig?.rxd ?? -1 { hasChanges = true } } - .onChange(of: txd) { newTxd in - if node != nil && node!.serialConfig != nil { - if newTxd != node!.serialConfig!.txd { hasChanges = true } - } + .onChange(of: txd) { oldTxd, newTxd in + if oldTxd != newTxd && newTxd != node?.serialConfig?.txd ?? -1 { hasChanges = true } } - .onChange(of: baudRate) { newBaud in - if node != nil && node!.serialConfig != nil { - if newBaud != node!.serialConfig!.baudRate { hasChanges = true } - } + .onChange(of: baudRate) { oldBaud, newBaud in + if oldBaud != newBaud && newBaud != node?.serialConfig?.baudRate ?? -1 { hasChanges = true } } - .onChange(of: timeout) { newTimeout in - if node != nil && node!.serialConfig != nil { - if newTimeout != node!.serialConfig!.timeout { hasChanges = true } - } + .onChange(of: timeout) { oldTimeout, newTimeout in + if oldTimeout != newTimeout && newTimeout != node?.serialConfig?.timeout ?? -1 { hasChanges = true } } - .onChange(of: overrideConsoleSerialPort) { newOverrideConsoleSerialPort in - if node != nil && node!.serialConfig != nil { - if newOverrideConsoleSerialPort != node!.serialConfig!.overrideConsoleSerialPort { hasChanges = true } - } + .onChange(of: overrideConsoleSerialPort) { oldOverrideConsoleSerialPort, newOverrideConsoleSerialPort in + if oldOverrideConsoleSerialPort != newOverrideConsoleSerialPort && newOverrideConsoleSerialPort != node?.serialConfig?.overrideConsoleSerialPort ?? false { hasChanges = true } } - .onChange(of: mode) { newMode in - if node != nil && node!.serialConfig != nil { - if newMode != node!.serialConfig!.mode { hasChanges = true } - } + .onChange(of: mode) { oldMode, newMode in + if oldMode != newMode && newMode != node?.serialConfig?.mode ?? -1 { hasChanges = true } } } } diff --git a/Meshtastic/Views/Settings/Config/Module/StoreForwardConfig.swift b/Meshtastic/Views/Settings/Config/Module/StoreForwardConfig.swift index a1217bcf..d90ea3fb 100644 --- a/Meshtastic/Views/Settings/Config/Module/StoreForwardConfig.swift +++ b/Meshtastic/Views/Settings/Config/Module/StoreForwardConfig.swift @@ -174,22 +174,16 @@ struct StoreForwardConfig: View { if oldIsRouter != newIsRouter && newIsRouter != node!.storeForwardConfig!.isRouter { hasChanges = true } } .onChange(of: heartbeat) { oldHeartbeat, newHeartbeat in - if oldHeartbeat != newHeartbeat && newHeartbeat != node!.storeForwardConfig!.heartbeat { hasChanges = true } + if oldHeartbeat != newHeartbeat && newHeartbeat != node?.storeForwardConfig?.heartbeat ?? true { hasChanges = true } } .onChange(of: records) { oldRecords, newRecords in - if node != nil && node?.storeForwardConfig != nil { - if newRecords != node!.storeForwardConfig!.records { hasChanges = true } - } + if oldRecords != newRecords && newRecords != node!.storeForwardConfig?.records ?? -1 { hasChanges = true } } .onChange(of: historyReturnMax) { oldHistoryReturnMax, newHistoryReturnMax in - if node != nil && node?.storeForwardConfig != nil { - if newHistoryReturnMax != node!.storeForwardConfig!.historyReturnMax { hasChanges = true } - } + if oldHistoryReturnMax != newHistoryReturnMax && newHistoryReturnMax != node!.storeForwardConfig?.historyReturnMax ?? -1 { hasChanges = true } } .onChange(of: historyReturnWindow) { oldHistoryReturnWindow, newHistoryReturnWindow in - if node != nil && node?.storeForwardConfig != nil { - if newHistoryReturnWindow != node!.storeForwardConfig!.historyReturnWindow { hasChanges = true } - } + if oldHistoryReturnWindow != newHistoryReturnWindow && newHistoryReturnWindow != node!.storeForwardConfig?.historyReturnWindow ?? -1 { hasChanges = true } } } func setStoreAndForwardValues() { diff --git a/Meshtastic/Views/Settings/Config/PowerConfig.swift b/Meshtastic/Views/Settings/Config/PowerConfig.swift index 83454820..b50368ab 100644 --- a/Meshtastic/Views/Settings/Config/PowerConfig.swift +++ b/Meshtastic/Views/Settings/Config/PowerConfig.swift @@ -148,25 +148,25 @@ struct PowerConfig: View { } } } - .onChange(of: isPowerSaving) { - if $0 != node?.powerConfig?.isPowerSaving { hasChanges = true } + .onChange(of: isPowerSaving) { oldIsPowerSaving, newIsPowerSaving in + if oldIsPowerSaving != newIsPowerSaving && newIsPowerSaving != node?.powerConfig?.isPowerSaving { hasChanges = true } } - .onChange(of: shutdownOnPowerLoss) { newShutdownOnPowerLoss in + .onChange(of: shutdownOnPowerLoss) { _, newShutdownOnPowerLoss in if newShutdownOnPowerLoss { hasChanges = true } } - .onChange(of: shutdownAfterSecs) { - if $0 != node?.powerConfig?.minWakeSecs ?? -1 { hasChanges = true } + .onChange(of: shutdownAfterSecs) { oldShutdownAfterSecs, newShutdownAfterSecs in + if oldShutdownAfterSecs != newShutdownAfterSecs && newShutdownAfterSecs != node?.powerConfig?.minWakeSecs ?? -1 { hasChanges = true } } - .onChange(of: adcOverride) { _ in + .onChange(of: adcOverride) { hasChanges = true } - .onChange(of: adcMultiplier) { newAdcMultiplier in - if newAdcMultiplier != node?.powerConfig?.adcMultiplierOverride ?? -1 { hasChanges = true } + .onChange(of: adcMultiplier) { _, newAdcMultiplier in + if newAdcMultiplier != node?.powerConfig?.adcMultiplierOverride ?? -1 { hasChanges = true } } - .onChange(of: waitBluetoothSecs) { - if $0 != node?.powerConfig?.waitBluetoothSecs ?? -1 { hasChanges = true } + .onChange(of: waitBluetoothSecs) { oldWaitBluetoothSecs, newWaitBluetoothSecs in + if oldWaitBluetoothSecs != newWaitBluetoothSecs && newWaitBluetoothSecs != node?.powerConfig?.waitBluetoothSecs ?? -1 { hasChanges = true } } .onChange(of: lsSecs) { if $0 != node?.powerConfig?.lsSecs ?? -1 { hasChanges = true }