@@ -36,10 +36,9 @@ private struct NavigationState: Codable {
36
36
var spaceSelectionDict : [ Int64 : NavigationRoute ]
37
37
}
38
38
39
- @MainActor
40
39
class NavigationModel : ObservableObject {
41
40
static let shared = NavigationModel ( )
42
-
41
+
43
42
private let log = Log . scoped ( " Navigation " , enableTracing: true )
44
43
45
44
@Published var homePath : [ NavigationRoute ] = [ ]
@@ -53,13 +52,7 @@ class NavigationModel: ObservableObject {
53
52
@Published private var spacePathDict : [ Int64 : [ NavigationRoute ] ] = [ : ]
54
53
@Published private var spaceSelectionDict : [ Int64 : NavigationRoute ] = [ : ]
55
54
56
- public var windowManager : MainWindowViewModel ? {
57
- didSet {
58
- log. trace ( " windowManager set " )
59
- // upon window creation
60
- prepareForCurrentRoute ( )
61
- }
62
- }
55
+ public var windowManager : MainWindowViewModel ?
63
56
64
57
var spacePath : Binding < [ NavigationRoute ] > {
65
58
Binding (
@@ -73,10 +66,9 @@ class NavigationModel: ObservableObject {
73
66
guard let self,
74
67
let activeSpaceId
75
68
else { return }
76
- Task { @MainActor in
77
- self . spacePathDict [ activeSpaceId] = newValue
78
- self . windowManager? . setUpForInnerRoute ( newValue. last ?? . spaceRoot)
79
- }
69
+
70
+ self . spacePathDict [ activeSpaceId] = newValue
71
+ self . setUpForRoute ( newValue. last ?? . spaceRoot)
80
72
}
81
73
)
82
74
}
@@ -93,10 +85,9 @@ class NavigationModel: ObservableObject {
93
85
guard let self,
94
86
let activeSpaceId
95
87
else { return }
96
- Task { @MainActor in
97
- self . spaceSelectionDict [ activeSpaceId] = newValue
98
- self . windowManager? . setUpForInnerRoute ( newValue)
99
- }
88
+
89
+ self . spaceSelectionDict [ activeSpaceId] = newValue
90
+ self . setUpForRoute ( newValue)
100
91
}
101
92
)
102
93
}
@@ -114,44 +105,52 @@ class NavigationModel: ObservableObject {
114
105
. sink { [ weak self] newValue in
115
106
guard let self, let spaceId = newValue else { return }
116
107
guard let w = self . windowManager, w. topLevelRoute == . main else { return }
117
- self . windowManager ? . setUpForInnerRoute ( self . spaceSelectionDict [ spaceId] ?? . spaceRoot)
108
+ self . setUpForRoute ( self . spaceSelectionDict [ spaceId] ?? . spaceRoot)
118
109
}
119
110
. store ( in: & cancellables)
120
111
121
112
$homePath. sink { [ weak self] newValue in
122
113
guard let self = self else { return }
123
114
guard let w = self . windowManager, w. topLevelRoute == . main else { return }
124
- self . windowManager ? . setUpForInnerRoute ( newValue. last ?? self . homeSelection)
115
+ self . setUpForRoute ( newValue. last ?? self . homeSelection)
125
116
} . store ( in: & cancellables)
126
117
}
127
118
128
119
private func prepareForCurrentRoute( ) {
129
120
if let activeSpaceId {
130
- windowManager ? . setUpForInnerRoute ( spaceSelectionDict [ activeSpaceId] ?? . spaceRoot)
121
+ setUpForRoute ( spaceSelectionDict [ activeSpaceId] ?? . spaceRoot)
131
122
} else {
132
- windowManager? . setUpForInnerRoute ( homePath. last ?? homeSelection)
123
+ setUpForRoute ( homePath. last ?? homeSelection)
124
+ }
125
+ }
126
+
127
+ private func setUpForRoute( _ route: NavigationRoute ) {
128
+ guard let windowManager = windowManager else {
129
+ log. error ( " Window manager not set up " )
130
+ return
133
131
}
132
+ windowManager. setUpForInnerRoute ( route)
134
133
}
135
134
136
135
// Used from sidebars
137
136
func select( _ route: NavigationRoute ) {
138
137
if let activeSpaceId {
139
138
spaceSelectionDict [ activeSpaceId] = route
140
- windowManager ? . setUpForInnerRoute ( route)
139
+ setUpForRoute ( route)
141
140
} else {
142
141
homeSelection = route
143
142
homePath. removeAll ( )
144
- windowManager ? . setUpForInnerRoute ( route)
143
+ setUpForRoute ( route)
145
144
}
146
145
}
147
146
148
147
func navigate( to route: NavigationRoute ) {
149
148
if let activeSpaceId {
150
149
spacePathDict [ activeSpaceId, default: [ ] ] . append ( route)
151
- windowManager ? . setUpForInnerRoute ( route)
150
+ setUpForRoute ( route)
152
151
} else {
153
152
homePath. append ( route)
154
- windowManager ? . setUpForInnerRoute ( route)
153
+ setUpForRoute ( route)
155
154
}
156
155
}
157
156
@@ -160,24 +159,24 @@ class NavigationModel: ObservableObject {
160
159
// TODO: Load from persistence layer
161
160
if spacePathDict [ id] == nil {
162
161
spacePathDict [ id] = [ ]
163
- windowManager ? . setUpForInnerRoute ( . spaceRoot)
162
+ setUpForRoute ( . spaceRoot)
164
163
}
165
164
}
166
165
167
166
func goHome( ) {
168
167
activeSpaceId = nil
169
168
// TODO: Load from persistence layer
170
169
let currentHomeRoute = homePath. last ?? homeSelection
171
- windowManager ? . setUpForInnerRoute ( currentHomeRoute)
170
+ setUpForRoute ( currentHomeRoute)
172
171
}
173
172
174
173
func navigateBack( ) {
175
174
if let activeSpaceId {
176
175
spacePathDict [ activeSpaceId] ? . removeLast ( )
177
- windowManager ? . setUpForInnerRoute ( spacePathDict [ activeSpaceId] ? . last ?? . spaceRoot)
176
+ setUpForRoute ( spacePathDict [ activeSpaceId] ? . last ?? . spaceRoot)
178
177
} else {
179
178
homePath. removeLast ( )
180
- windowManager ? . setUpForInnerRoute ( homePath. last ?? homeSelection)
179
+ setUpForRoute ( homePath. last ?? homeSelection)
181
180
}
182
181
}
183
182
0 commit comments