diff --git a/MyPass/Views/SearchView.swift b/MyPass/Views/SearchView.swift new file mode 100644 index 0000000..ae9eba5 --- /dev/null +++ b/MyPass/Views/SearchView.swift @@ -0,0 +1,47 @@ +// +// SearchView.swift +// MyPass +// +// Search is embedded directly in GroupBrowserView via .searchable. SearchView is a +// standalone view for displaying search results when the query is active -- used in +// the macOS 3-column layout as the middle column when searching. +// + +import SwiftUI +import MyPassCore + +struct SearchView: View { + @ObservedObject var vm: VaultViewModel + @Binding var selectedEntry: Entry? + + var body: some View { + SwiftUI.Group { + if vm.filteredEntries.isEmpty { + ContentUnavailableView.search(text: vm.searchQuery) + } else { + List(vm.filteredEntries, selection: $selectedEntry) { entry in + #if os(macOS) + EntryListRow(entry: entry).tag(entry) + #else + NavigationLink(destination: EntryDetailView(entry: entry, session: vm.session)) { + EntryListRow(entry: entry) + } + #endif + } + } + } + } +} + +struct EntryListRow: View { + let entry: Entry + var body: some View { + VStack(alignment: .leading, spacing: 2) { + Text(entry.title).font(.body) + Text(entry.username).font(.caption).foregroundStyle(.secondary) + if !entry.url.isEmpty { + Text(entry.url).font(.caption2).foregroundStyle(.tertiary) + } + } + } +}