yattee/Shared/Search/SearchTextField.swift

81 lines
2.4 KiB
Swift
Raw Normal View History

import Repeat
2021-11-28 14:37:55 +00:00
import SwiftUI
struct SearchTextField: View {
private var navigation = NavigationModel.shared
@ObservedObject private var state = SearchModel.shared
2021-11-28 14:37:55 +00:00
var body: some View {
ZStack {
#if os(macOS)
fieldBorder
#endif
HStack(spacing: 0) {
#if os(macOS)
Image(systemName: "magnifyingglass")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 12, height: 12)
.padding(.horizontal, 8)
.opacity(0.8)
#endif
2022-08-17 15:34:25 +00:00
TextField("Search...", text: $state.queryText) {
2022-03-26 14:22:29 +00:00
state.changeQuery { query in
query.query = state.queryText
navigation.hideKeyboard()
}
RecentsModel.shared.addQuery(state.queryText)
2021-11-28 14:37:55 +00:00
}
.disableAutocorrection(true)
2021-11-28 14:37:55 +00:00
#if os(macOS)
2022-08-17 15:34:25 +00:00
.frame(maxWidth: 190)
.textFieldStyle(.plain)
2021-11-28 14:37:55 +00:00
#else
2022-08-17 15:34:25 +00:00
.textFieldStyle(.roundedBorder)
2022-12-10 01:19:36 +00:00
.padding(.leading, 5)
.padding(.trailing, 10)
2021-11-28 14:37:55 +00:00
#endif
2021-12-04 19:35:41 +00:00
2022-08-17 15:34:25 +00:00
if !state.queryText.isEmpty {
2021-11-28 14:37:55 +00:00
clearButton
2021-12-06 18:13:20 +00:00
} else {
#if os(macOS)
clearButton
.opacity(0)
#endif
2021-11-28 14:37:55 +00:00
}
}
}
}
private var fieldBorder: some View {
RoundedRectangle(cornerRadius: 5, style: .continuous)
.fill(Color.background)
.frame(width: 250, height: 32)
.overlay(
RoundedRectangle(cornerRadius: 5, style: .continuous)
.stroke(Color.gray.opacity(0.4), lineWidth: 1)
2021-11-28 14:37:55 +00:00
.frame(width: 250, height: 31)
)
}
private var clearButton: some View {
Button(action: {
self.state.queryText = ""
}) {
Image(systemName: "xmark.circle.fill")
#if os(macOS)
2022-12-10 01:19:36 +00:00
.imageScale(.small)
2021-11-28 14:37:55 +00:00
#else
2022-12-10 01:19:36 +00:00
.imageScale(.medium)
2021-11-28 14:37:55 +00:00
#endif
}
.buttonStyle(PlainButtonStyle())
2022-12-10 01:19:36 +00:00
#if os(macOS)
.padding(.trailing, 10)
#endif
.opacity(0.7)
2021-11-28 14:37:55 +00:00
}
}