diff options
| author | Ruben Beltran del Rio <git@r.bdr.sh> | 2024-09-16 20:56:23 +0200 |
|---|---|---|
| committer | Ruben Beltran del Rio <git@r.bdr.sh> | 2024-09-16 20:56:23 +0200 |
| commit | ed10ac191df473c92c4fec495aafa7f569d108c8 (patch) | |
| tree | 5655074ca26c51fe001df91859649aa6599993d5 /Map/Presentation/MapEditor.swift | |
| parent | 9703ef690a21067a1929f3020350e0d5d459f8ef (diff) | |
Add some debouncing
Diffstat (limited to 'Map/Presentation/MapEditor.swift')
| -rw-r--r-- | Map/Presentation/MapEditor.swift | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/Map/Presentation/MapEditor.swift b/Map/Presentation/MapEditor.swift index d62d4ad..5cda8f9 100644 --- a/Map/Presentation/MapEditor.swift +++ b/Map/Presentation/MapEditor.swift @@ -20,6 +20,8 @@ struct MapEditor: View { @State var selectedEvolution: StageType = .behavior @State var isSearching: Bool = false + private let changeDebouncer: Debouncer = Debouncer(seconds: 0.05) + @AppStorage("viewStyle") var viewStyle: ViewStyle = .horizontal let zoomRange = Constants.kMinZoom...Constants.kMaxZoom @@ -28,9 +30,11 @@ struct MapEditor: View { @State var searchTerm = "" @State var selectedTerm = 0 - var results: [Range<String.Index>] { + @State var results: [Range<String.Index>] = [] + + private func updateRanges() { if !isSearching || searchTerm.isEmpty { - return [] + results = [] } let options: NSString.CompareOptions = [.caseInsensitive, .diacriticInsensitive] var searchRange = document.text.startIndex..<document.text.endIndex @@ -41,7 +45,7 @@ struct MapEditor: View { searchRange = range.upperBound..<document.text.endIndex } - return ranges + results = ranges } @@ -72,15 +76,16 @@ struct MapEditor: View { }, onDismiss: { - withAnimation { - isSearching = false - } + isSearching = false } ) .onChange( of: searchTerm, { - selectedTerm = 0 + changeDebouncer.debounce { + updateRanges() + selectedTerm = 0 + } }) Divider() } |