Skip to content

Commit 54be795

Browse files
committed
fix(sidebar): keep tree selection across reconciles and re-arm observation once per refresh
1 parent 36e3fcb commit 54be795

1 file changed

Lines changed: 5 additions & 4 deletions

File tree

TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ final class DatabaseTreeOutlineCoordinator: NSObject {
3131
private var lastSelection: Set<DatabaseTreeTableRef> = []
3232
private var isApplyingExpansion = false
3333
private var isSyncingSelection = false
34+
private var isReloading = false
3435
private var hasRenderedOnce = false
3536
private var reconcileScheduled = false
3637
private var observationGeneration = 0
@@ -78,10 +79,8 @@ final class DatabaseTreeOutlineCoordinator: NSObject {
7879
if !hasRenderedOnce {
7980
hasRenderedOnce = true
8081
refresh()
81-
beginObserving()
8282
} else if changed {
8383
refresh()
84-
beginObserving()
8584
}
8685
}
8786

@@ -119,7 +118,6 @@ final class DatabaseTreeOutlineCoordinator: NSObject {
119118
Task { @MainActor in
120119
self.reconcileScheduled = false
121120
self.refresh()
122-
self.beginObserving()
123121
}
124122
}
125123

@@ -142,10 +140,13 @@ final class DatabaseTreeOutlineCoordinator: NSObject {
142140

143141
private func refresh() {
144142
guard let outlineView else { return }
143+
isReloading = true
145144
childrenCache.removeAll()
146145
outlineView.reloadData()
147146
applyDesiredExpansion()
148147
syncSelectionToModel()
148+
isReloading = false
149+
beginObserving()
149150
}
150151

151152
// MARK: - Node building
@@ -522,7 +523,7 @@ extension DatabaseTreeOutlineCoordinator: NSOutlineViewDelegate {
522523
}
523524

524525
func outlineViewSelectionDidChange(_ notification: Notification) {
525-
guard !isSyncingSelection else { return }
526+
guard !isSyncingSelection, !isReloading else { return }
526527
let refs = Set(selectedRefs())
527528
if let added = SelectionDelta.singleAddition(old: lastSelection, new: refs) {
528529
open(added, activateGridFocus: false)

0 commit comments

Comments
 (0)