@@ -25,63 +25,13 @@ struct FindNavigatorForm: View {
25
25
@State private var preserveCase : Bool = false
26
26
@State private var scopedToOpenEditors : Bool = false
27
27
@State private var excludeSettings : Bool = true
28
+ @FocusState private var isSearchFieldFocused : Bool
28
29
29
30
init ( state: WorkspaceDocument . SearchState ) {
30
31
self . state = state
31
32
selectedMode = state. selectedMode
32
33
}
33
34
34
- private func getMenuList( _ index: Int ) -> [ SearchModeModel ] {
35
- index == 0 ? SearchModeModel . SearchModes : selectedMode [ index - 1 ] . children
36
- }
37
-
38
- private func onSelectMenuItem( _ index: Int , searchMode: SearchModeModel ) {
39
- var newSelectedMode : [ SearchModeModel ] = [ ]
40
-
41
- switch index {
42
- case 0 :
43
- newSelectedMode. append ( searchMode)
44
- self . updateSelectedMode ( searchMode, searchModel: & newSelectedMode)
45
- self . selectedMode = newSelectedMode
46
- case 1 :
47
- if let firstMode = selectedMode. first {
48
- newSelectedMode. append ( contentsOf: [ firstMode, searchMode] )
49
- if let thirdMode = searchMode. children. first {
50
- if let selectedThirdMode = selectedMode. third, searchMode. children. contains ( selectedThirdMode) {
51
- newSelectedMode. append ( selectedThirdMode)
52
- } else {
53
- newSelectedMode. append ( thirdMode)
54
- }
55
- }
56
- }
57
- self . selectedMode = newSelectedMode
58
- case 2 :
59
- if let firstMode = selectedMode. first, let secondMode = selectedMode. second {
60
- newSelectedMode. append ( contentsOf: [ firstMode, secondMode, searchMode] )
61
- }
62
- self . selectedMode = newSelectedMode
63
- default :
64
- return
65
- }
66
- }
67
-
68
- private func updateSelectedMode( _ searchMode: SearchModeModel , searchModel: inout [ SearchModeModel ] ) {
69
- if let secondMode = searchMode. children. first {
70
- if let selectedSecondMode = selectedMode. second, searchMode. children. contains ( selectedSecondMode) {
71
- searchModel. append ( contentsOf: selectedMode. dropFirst ( ) )
72
- } else {
73
- searchModel. append ( secondMode)
74
- if let thirdMode = secondMode. children. first, let selectedThirdMode = selectedMode. third {
75
- if secondMode. children. contains ( selectedThirdMode) {
76
- searchModel. append ( selectedThirdMode)
77
- } else {
78
- searchModel. append ( thirdMode)
79
- }
80
- }
81
- }
82
- }
83
- }
84
-
85
35
private var chevron : some View {
86
36
Image ( systemName: " chevron.compact.right " )
87
37
. foregroundStyle ( . tertiary)
@@ -152,6 +102,7 @@ struct FindNavigatorForm: View {
152
102
} ,
153
103
hasValue: caseSensitive
154
104
)
105
+ . focused ( $isSearchFieldFocused)
155
106
. onSubmit {
156
107
if !state. searchQuery. isEmpty {
157
108
Task {
@@ -262,16 +213,65 @@ struct FindNavigatorForm: View {
262
213
}
263
214
}
264
215
}
216
+ . onReceive ( state. $shouldFocusSearchField) { shouldFocus in
217
+ if shouldFocus {
218
+ isSearchFieldFocused = true
219
+ state. shouldFocusSearchField = false
220
+ }
221
+ }
265
222
. lineLimit ( 1 ... 5 )
266
223
}
267
224
}
268
225
269
- extension Array {
270
- var second : Element ? {
271
- self . count > 1 ? self [ 1 ] : nil
226
+ extension FindNavigatorForm {
227
+ private func getMenuList( _ index: Int ) -> [ SearchModeModel ] {
228
+ index == 0 ? SearchModeModel . SearchModes : selectedMode [ index - 1 ] . children
229
+ }
230
+
231
+ private func onSelectMenuItem( _ index: Int , searchMode: SearchModeModel ) {
232
+ var newSelectedMode : [ SearchModeModel ] = [ ]
233
+
234
+ switch index {
235
+ case 0 :
236
+ newSelectedMode. append ( searchMode)
237
+ self . updateSelectedMode ( searchMode, searchModel: & newSelectedMode)
238
+ self . selectedMode = newSelectedMode
239
+ case 1 :
240
+ if let firstMode = selectedMode. first {
241
+ newSelectedMode. append ( contentsOf: [ firstMode, searchMode] )
242
+ if let thirdMode = searchMode. children. first {
243
+ if let selectedThirdMode = selectedMode. third, searchMode. children. contains ( selectedThirdMode) {
244
+ newSelectedMode. append ( selectedThirdMode)
245
+ } else {
246
+ newSelectedMode. append ( thirdMode)
247
+ }
248
+ }
249
+ }
250
+ self . selectedMode = newSelectedMode
251
+ case 2 :
252
+ if let firstMode = selectedMode. first, let secondMode = selectedMode. second {
253
+ newSelectedMode. append ( contentsOf: [ firstMode, secondMode, searchMode] )
254
+ }
255
+ self . selectedMode = newSelectedMode
256
+ default :
257
+ return
258
+ }
272
259
}
273
260
274
- var third : Element ? {
275
- self . count > 2 ? self [ 2 ] : nil
261
+ private func updateSelectedMode( _ searchMode: SearchModeModel , searchModel: inout [ SearchModeModel ] ) {
262
+ if let secondMode = searchMode. children. first {
263
+ if let selectedSecondMode = selectedMode. second, searchMode. children. contains ( selectedSecondMode) {
264
+ searchModel. append ( contentsOf: selectedMode. dropFirst ( ) )
265
+ } else {
266
+ searchModel. append ( secondMode)
267
+ if let thirdMode = secondMode. children. first, let selectedThirdMode = selectedMode. third {
268
+ if secondMode. children. contains ( selectedThirdMode) {
269
+ searchModel. append ( selectedThirdMode)
270
+ } else {
271
+ searchModel. append ( thirdMode)
272
+ }
273
+ }
274
+ }
275
+ }
276
276
}
277
277
}
0 commit comments