69 lines
2.2 KiB
Swift
69 lines
2.2 KiB
Swift
import SwiftUI
|
|
|
|
struct SearchTab: View {
|
|
@StateObject private var viewModel = SearchViewModel()
|
|
|
|
var body: some View {
|
|
NavigationView {
|
|
VStack {
|
|
SearchBar(text: $viewModel.searchText)
|
|
.padding(.top, 8)
|
|
|
|
List(viewModel.users) { user in
|
|
NavigationLink(destination: ProfileTab(viewModel: LoginViewModel())) { // Placeholder destination
|
|
HStack {
|
|
Image(systemName: "person.crop.circle")
|
|
.resizable()
|
|
.frame(width: 40, height: 40)
|
|
.clipShape(Circle())
|
|
Text(user.username)
|
|
}
|
|
}
|
|
}
|
|
.listStyle(PlainListStyle())
|
|
}
|
|
.navigationTitle("Поиск")
|
|
}
|
|
}
|
|
}
|
|
|
|
struct SearchBar: View {
|
|
@Binding var text: String
|
|
|
|
var body: some View {
|
|
HStack {
|
|
TextField("Поиск...", text: $text)
|
|
.padding(8)
|
|
.padding(.horizontal, 25)
|
|
.background(Color(.systemGray6))
|
|
.cornerRadius(8)
|
|
.overlay(
|
|
HStack {
|
|
Image(systemName: "magnifyingglass")
|
|
.foregroundColor(.gray)
|
|
.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
|
|
.padding(.leading, 8)
|
|
|
|
if !text.isEmpty {
|
|
Button(action: {
|
|
self.text = ""
|
|
}) {
|
|
Image(systemName: "multiply.circle.fill")
|
|
.foregroundColor(.gray)
|
|
.padding(.trailing, 8)
|
|
}
|
|
}
|
|
}
|
|
)
|
|
}
|
|
.padding(.horizontal, 10)
|
|
}
|
|
}
|
|
|
|
struct SearchTab_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
SearchTab()
|
|
}
|
|
}
|
|
|