feat: persist node list filters

- persist node list filters to @AppStorage
This commit is contained in:
Brandon Ruschill 2026-03-13 10:19:46 -05:00
parent d9e169142e
commit 48f782ff49

View file

@ -9,22 +9,27 @@ import SwiftUI
@MainActor
final class NodeFilterParameters: ObservableObject {
// Public variables
@Published var searchText = ""
@Published var isOnline = false
@Published var isPkiEncrypted = false
@Published var isFavorite = false
@Published var isIgnored = false
@Published var isEnvironment = false
@Published var distanceFilter = false
@Published var maxDistance: Double = 800_000
@Published var hopsAway: Double = -1.0
@Published var roleFilter = false
@Published var deviceRoles: Set<Int> = []
@AppStorage("nodeFilter.searchText") var searchText = ""
@AppStorage("nodeFilter.isOnline") var isOnline = false
@AppStorage("nodeFilter.isPkiEncrypted") var isPkiEncrypted = false
@AppStorage("nodeFilter.isFavorite") var isFavorite = false
@AppStorage("nodeFilter.isIgnored") var isIgnored = false
@AppStorage("nodeFilter.isEnvironment") var isEnvironment = false
@AppStorage("nodeFilter.distanceFilter") var distanceFilter = false
@AppStorage("nodeFilter.maxDistance") var maxDistance: Double = 800_000
@AppStorage("nodeFilter.hopsAway") var hopsAway: Double = -1.0
@AppStorage("nodeFilter.roleFilter") var roleFilter = false
// Private backing vars
@Published private var _viaLora = true
@Published private var _viaMqtt = true
// deviceRoles requires custom storage since Set<Int> isn't directly supported by @AppStorage
@Published var deviceRoles: Set<Int> = [] {
didSet {
let array = Array(deviceRoles)
UserDefaults.standard.set(array, forKey: "nodeFilter.deviceRoles")
}
}
@AppStorage("nodeFilter.viaLora") private var _viaLora = true
@AppStorage("nodeFilter.viaMqtt") private var _viaMqtt = true
// Public computed wrappers with enforcement
var viaLora: Bool {
@ -48,4 +53,11 @@ final class NodeFilterParameters: ObservableObject {
}
}
}
// Initialize and load the deviceRoles from UserDefaults
init() {
if let storedRoles = UserDefaults.standard.array(forKey: "nodeFilter.deviceRoles") as? [Int] {
self.deviceRoles = Set(storedRoles)
}
}
}