@@ -13,15 +13,15 @@ struct ContentView: View {
13
13
@Environment ( \. dismiss) private var dismiss
14
14
15
15
@Query private var items : [ DjangoFilesSession ]
16
+ @State private var showSidebarButton : Bool = false
16
17
@State private var showingEditor = false
17
- @State private var showingLogin = false
18
- @State private var runningSession = false
19
18
@State private var columnVisibility = NavigationSplitViewVisibility . detailOnly
20
19
@State private var selectedServer : DjangoFilesSession ?
21
20
@State private var selectedSession : DjangoFilesSession ? // Track session for settings
22
21
@State private var showingSelector = false // Show SessionSelector
23
22
@State private var needsRefresh = false // Added to handle refresh after adding server
24
23
24
+
25
25
@State private var token : String ?
26
26
27
27
@State private var viewingSettings : Bool = false
@@ -30,7 +30,7 @@ struct ContentView: View {
30
30
var body : some View {
31
31
NavigationSplitView ( columnVisibility: $columnVisibility) {
32
32
List ( selection: $selectedServer) {
33
- ForEach ( items) { item in
33
+ ForEach ( items, id : \ . self ) { item in
34
34
NavigationLink ( value: item) {
35
35
Text ( item. url)
36
36
. swipeActions ( ) {
@@ -60,17 +60,35 @@ struct ContentView: View {
60
60
}
61
61
}
62
62
}
63
+ . toolbar ( removing: !showSidebarButton ? . sidebarToggle : nil )
63
64
} detail: {
64
65
if let server = selectedServer {
65
66
if server. auth {
66
- AuthViewContainer ( viewingSettings: $viewingSettings, selectedServer: server, columnVisibility: $columnVisibility, showingEditor: $showingEditor, needsRefresh: $needsRefresh)
67
+ AuthViewContainer (
68
+ viewingSettings: $viewingSettings,
69
+ selectedServer: server,
70
+ columnVisibility: $columnVisibility,
71
+ showingEditor: $showingEditor,
72
+ needsRefresh: $needsRefresh,
73
+ showSidebarButton: $showSidebarButton
74
+ )
75
+ . id ( server. url)
76
+ . onAppear {
77
+ showSidebarButton = false
78
+ columnVisibility = . detailOnly
79
+ }
67
80
} else {
68
81
LoginView (
69
82
selectedServer: server,
70
83
onLoginSuccess: {
71
84
needsRefresh = true
72
85
}
73
86
)
87
+ . id ( server. url)
88
+ . onAppear {
89
+ showSidebarButton = true
90
+ columnVisibility = . detailOnly
91
+ }
74
92
}
75
93
}
76
94
}
@@ -134,26 +152,21 @@ public struct AuthViewContainer: View {
134
152
var columnVisibility : Binding < NavigationSplitViewVisibility >
135
153
var showingEditor : Binding < Bool >
136
154
var needsRefresh : Binding < Bool >
155
+ var showSidebarButton : Binding < Bool >
137
156
138
- @State private var toolbarHidden : Bool = false
139
- @State private var authError : Bool = false
140
157
@State private var authController : AuthController = AuthController ( )
141
158
142
159
var backButton : some View { Button ( action: {
143
160
self . presentationMode. wrappedValue. dismiss ( )
144
161
} ) {
145
162
HStack {
146
163
if !UIDevice. current. localizedModel. contains ( " iPad " ) {
147
- // Image("backImage")
148
- // .aspectRatio(contentMode: .fit)
149
- // .foregroundColor(.white)
150
164
Text ( " Server List " )
151
165
}
152
166
}
153
167
}
154
168
}
155
169
public var body : some View {
156
- GeometryReader { geometry in
157
170
if viewingSettings. wrappedValue{
158
171
SessionSelector ( session: selectedServer, viewingSelect: viewingSettings)
159
172
. onAppear ( ) {
@@ -171,30 +184,23 @@ public struct AuthViewContainer: View {
171
184
session: selectedServer
172
185
)
173
186
. onStartedLoading {
174
- toolbarHidden = false
175
187
}
176
188
. onCancelled {
177
189
dismiss ( )
178
- toolbarHidden = false
179
- authError = true
180
190
}
181
191
. onAppear ( ) {
182
- toolbarHidden = true
183
- authController. setSafeAreaInsets ( geometry. safeAreaInsets)
184
- columnVisibility. wrappedValue = . automatic
192
+ showSidebarButton. wrappedValue = false
193
+ columnVisibility. wrappedValue = . detailOnly
185
194
if needsRefresh. wrappedValue {
186
195
authController. reset ( )
187
196
needsRefresh. wrappedValue = false
188
197
}
189
198
190
199
authController. onStartedLoadingAction = {
191
- toolbarHidden = true
192
200
}
193
201
194
202
authController. onCancelledAction = {
195
203
dismiss ( )
196
- toolbarHidden = false
197
- authError = true
198
204
}
199
205
200
206
authController. onSchemeRedirectAction = {
@@ -203,42 +209,38 @@ public struct AuthViewContainer: View {
203
209
}
204
210
switch resolve{
205
211
case " serverlist " :
206
- self . presentationMode. wrappedValue. dismiss ( )
212
+ if UIDevice . current. userInterfaceIdiom == . phone{
213
+ self . presentationMode. wrappedValue. dismiss ( )
214
+ }
215
+ showSidebarButton. wrappedValue = true
216
+ columnVisibility. wrappedValue = . automatic
207
217
break
208
218
case " serversettings " :
209
219
viewingSettings. wrappedValue = true
210
220
break
211
221
case " logout " :
212
222
selectedServer. auth = false
213
- toolbarHidden = false
223
+ showSidebarButton. wrappedValue = true
224
+ columnVisibility. wrappedValue = . automatic
214
225
self . presentationMode. wrappedValue. dismiss ( )
215
226
break
216
227
default :
217
228
return
218
229
}
219
230
}
220
231
}
221
- . onChange ( of: geometry. safeAreaInsets) {
222
- authController. setSafeAreaInsets ( geometry. safeAreaInsets)
223
- }
224
232
}
225
233
. frame ( maxWidth: . infinity, maxHeight: . infinity)
226
234
. edgesIgnoringSafeArea ( . all)
227
- . toolbar ( toolbarHidden && UIDevice . current. userInterfaceIdiom == . phone ? . hidden : . visible)
228
235
. navigationTitle ( Text ( " " ) )
229
236
. navigationBarBackButtonHidden ( true )
230
- . navigationBarItems ( leading: backButton)
231
- . alert ( isPresented: $authError) {
232
- Alert ( title: Text ( " Error " ) , message: Text ( authController. getAuthErrorMessage ( ) ?? " Unknown Error " ) )
233
- }
234
237
}
235
238
else {
236
239
Text ( " Loading... " )
237
240
. onAppear ( ) {
238
241
columnVisibility. wrappedValue = . automatic
239
242
}
240
243
}
241
- }
242
244
}
243
245
244
246
private func setDefaultServer( ) {
0 commit comments