Files
Termind/Frameworks/TermindApplication/Terminal/TerminalFindController.swift
T

47 lines
1.3 KiB
Swift

import Observation
import TermindDomain
@MainActor
@Observable
public final class TerminalFindController {
public private(set) var query = ""
public private(set) var isPresented = false
@ObservationIgnored private let perform: (String) -> Void
@ObservationIgnored private let focus: () -> Void
public init(perform: @escaping (String) -> Void, focus: @escaping () -> Void) {
self.perform = perform
self.focus = focus
}
public func present() {
let wasPresented = isPresented
isPresented = true
if !wasPresented, !query.isEmpty { perform(TerminalFindBinding.search(query)) }
}
public func updateQuery(_ query: String) {
guard self.query != query else { return }
self.query = query
perform(TerminalFindBinding.search(query))
}
public func navigate(_ direction: TerminalFindDirection) {
guard isPresented, !query.isEmpty else { return }
perform(TerminalFindBinding.navigate(direction))
}
public func presentAndNavigate(_ direction: TerminalFindDirection) {
present()
navigate(direction)
}
public func dismiss() {
guard isPresented else { return }
perform(TerminalFindBinding.end)
isPresented = false
focus()
}
}