Use one observable source for Changes tab preferences

This commit is contained in:
Ian Gulliver
2026-10-21 14:10:13 -07:00
parent ef10dc11c5
commit a7cfd91399
2 changed files with 14 additions and 15 deletions
+13 -14
View File
@@ -22,7 +22,9 @@ private let emptyText: [ChangeMode: String] = [
.step: "This snapshot changed nothing.",
]
struct ChangesMemory {
@MainActor
@Observable
final class ChangesMemory {
var open: Set<String> = []
var range = ChangeMode.main
var pinRange = ChangeMode.step
@@ -41,9 +43,7 @@ final class ChangesModel {
private(set) var changes: TaskChanges?
private(set) var error = ""
private(set) var diffs: [String: Result<String, ApiError>] = [:]
private(set) var open: Set<String>
private(set) var range: ChangeMode
private(set) var pinRange: ChangeMode
private let memory: ChangesMemory
@ObservationIgnored private var loading = false
@ObservationIgnored private var again = false
@ObservationIgnored private var timer: Task<Void, Never>?
@@ -53,11 +53,13 @@ final class ChangesModel {
init(_ store: Store) {
self.store = store
open = store.changesMemory.open
range = store.changesMemory.range
pinRange = store.changesMemory.pinRange
memory = store.changesMemory
}
var open: Set<String> { memory.open }
var range: ChangeMode { memory.range }
var pinRange: ChangeMode { memory.pinRange }
var pinned: Int? {
store.pinned
}
@@ -160,8 +162,7 @@ final class ChangesModel {
if range == r {
return
}
range = r
store.changesMemory.range = r
memory.range = r
retarget()
}
@@ -169,18 +170,16 @@ final class ChangesModel {
if pinRange == r {
return
}
pinRange = r
store.changesMemory.pinRange = r
memory.pinRange = r
retarget()
}
func setOpen(_ path: String, _ on: Bool) {
if on {
open.insert(path)
memory.open.insert(path)
} else {
open.remove(path)
memory.open.remove(path)
}
store.changesMemory.open = open
}
func shows(_ a: LineAnchor) -> Bool {