1
0
mirror of https://github.com/yattee/yattee.git synced 2024-12-15 23:00:32 +05:30
yattee/Shared/Search/SearchField.swift

101 lines
3.2 KiB
Swift
Raw Normal View History

import Repeat
2021-11-28 20:07:55 +05:30
import SwiftUI
struct SearchTextField: View {
@Environment(\.navigationStyle) private var navigationStyle
@EnvironmentObject<NavigationModel> private var navigation
2021-11-28 20:07:55 +05:30
@EnvironmentObject<RecentsModel> private var recents
@EnvironmentObject<SearchModel> private var state
2021-12-05 01:05:41 +05:30
@Binding var favoriteItem: FavoriteItem?
2022-08-17 21:04:25 +05:30
init(favoriteItem: Binding<FavoriteItem?>? = nil) {
2021-12-05 01:05:41 +05:30
_favoriteItem = favoriteItem ?? .constant(nil)
}
2021-11-28 20:07:55 +05:30
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 21:04:25 +05:30
TextField("Search...", text: $state.queryText) {
2022-03-26 19:52:29 +05:30
state.changeQuery { query in
query.query = state.queryText
navigation.hideKeyboard()
}
recents.addQuery(state.queryText, navigation: navigation)
2021-11-28 20:07:55 +05:30
}
.disableAutocorrection(true)
2021-11-28 20:07:55 +05:30
#if os(macOS)
2022-08-17 21:04:25 +05:30
.frame(maxWidth: 190)
.textFieldStyle(.plain)
2021-11-28 20:07:55 +05:30
#else
2022-08-17 21:04:25 +05:30
.textFieldStyle(.roundedBorder)
.padding(.leading)
.padding(.trailing, 15)
2021-11-28 20:07:55 +05:30
#endif
2021-12-05 01:05:41 +05:30
2022-08-17 21:04:25 +05:30
if let favoriteItem = favoriteItem {
2021-12-05 01:05:41 +05:30
#if os(iOS)
FavoriteButton(item: favoriteItem)
2022-08-17 21:04:25 +05:30
.id(favoriteItem.id)
2021-12-05 01:05:41 +05:30
.labelStyle(.iconOnly)
.padding(.trailing)
#endif
2022-08-17 21:04:25 +05:30
}
if !state.queryText.isEmpty {
2021-11-28 20:07:55 +05:30
clearButton
2021-12-06 23:43:20 +05:30
} else {
#if os(macOS)
clearButton
.opacity(0)
#endif
2021-11-28 20:07:55 +05:30
}
}
}
.padding(.top, navigationStyle == .tab ? 10 : 0)
}
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 20:07:55 +05:30
.frame(width: 250, height: 31)
)
}
private var clearButton: some View {
Button(action: {
self.state.queryText = ""
}) {
Image(systemName: "xmark.circle.fill")
.resizable()
.aspectRatio(contentMode: .fit)
#if os(macOS)
.frame(width: 14, height: 14)
#else
.frame(width: 18, height: 18)
#endif
.padding(.trailing, 3)
}
.buttonStyle(PlainButtonStyle())
.padding(.trailing, 10)
.opacity(0.7)
}
}