From 967fc7216ef146a87d8f562ce6eb9e4819f40972 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Thu, 3 Mar 2022 21:55:17 -0800 Subject: [PATCH] add search bar to macos --- .../App/Views/Home/HomeFeedViewMac.swift | 186 +++++++++++------- 1 file changed, 116 insertions(+), 70 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewMac.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewMac.swift index f6aa272b9..ae02dc4ff 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewMac.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewMac.swift @@ -19,60 +19,122 @@ import Views @ObservedObject var viewModel: HomeFeedViewModel var body: some View { + if #available(macOS 12.0, *) { + innerBody + } else { + innerBodyMac11 + } + } + + @available(macOS 12.0, *) + var innerBody: some View { List { Section { ForEach(viewModel.items) { item in - if #available(macOS 12.0, *) { - FeedCardNavigationLink( - item: item, - searchQuery: searchQuery, - selectedLinkItem: $selectedLinkItem, - viewModel: viewModel - ) - .contextMenu { - Button(action: { - viewModel.setLinkArchived(dataService: dataService, linkId: item.id, archived: !item.isArchived) - }, label: { - Label( - item.isArchived ? "Unarchive" : "Archive", - systemImage: item.isArchived ? "tray.and.arrow.down.fill" : "archivebox" - ) - }) - Button( - action: { - itemToRemove = item - confirmationShown = true - }, - label: { Label("Delete Link", systemImage: "trash") } + FeedCardNavigationLink( + item: item, + searchQuery: searchQuery, + selectedLinkItem: $selectedLinkItem, + viewModel: viewModel + ) + .contextMenu { + Button(action: { + viewModel.setLinkArchived(dataService: dataService, linkId: item.id, archived: !item.isArchived) + }, label: { + Label( + item.isArchived ? "Unarchive" : "Archive", + systemImage: item.isArchived ? "tray.and.arrow.down.fill" : "archivebox" ) - if FeatureFlag.enableSnooze { - Button { - itemToSnooze = item - snoozePresented = true - } label: { - Label { Text("Snooze") } icon: { Image.moon } - } - } - } - .alert("Are you sure?", isPresented: $confirmationShown) { - Button("Remove Link", role: .destructive) { - if let itemToRemove = itemToRemove { - withAnimation { - viewModel.removeLink(dataService: dataService, linkId: itemToRemove.id) - self.itemToRemove = nil - } - } - } - Button("Cancel", role: .cancel) { self.itemToRemove = nil } - } - } else { - FeedCardNavigationLink( - item: item, - searchQuery: searchQuery, - selectedLinkItem: $selectedLinkItem, - viewModel: viewModel + }) + Button( + action: { + itemToRemove = item + confirmationShown = true + }, + label: { Label("Delete Link", systemImage: "trash") } ) + if FeatureFlag.enableSnooze { + Button { + itemToSnooze = item + snoozePresented = true + } label: { + Label { Text("Snooze") } icon: { Image.moon } + } + } } + .alert("Are you sure?", isPresented: $confirmationShown) { + Button("Remove Link", role: .destructive) { + if let itemToRemove = itemToRemove { + withAnimation { + viewModel.removeLink(dataService: dataService, linkId: itemToRemove.id) + self.itemToRemove = nil + } + } + } + Button("Cancel", role: .cancel) { self.itemToRemove = nil } + } + } + } + + if viewModel.isLoading { + LoadingSection() + } + } + .listStyle(PlainListStyle()) + .navigationTitle("Home") + .searchable( + text: $searchQuery, + placement: .toolbar + ) { + if searchQuery.isEmpty { + Text("Inbox").searchCompletion("in:inbox ") + Text("All").searchCompletion("in:all ") + Text("Archived").searchCompletion("in:archive ") + Text("Files").searchCompletion("type:file ") + } + } + .onChange(of: searchQuery) { _ in + // Maybe we should debounce this, but + // it feels like it works ok without + viewModel.loadItems(dataService: dataService, searchQuery: searchQuery, isRefresh: true) + } + .onSubmit(of: .search) { + viewModel.loadItems(dataService: dataService, searchQuery: searchQuery, isRefresh: true) + } + .toolbar { + ToolbarItem { + Button( + action: { + viewModel.loadItems(dataService: dataService, searchQuery: searchQuery, isRefresh: true) + }, + label: { Label("Refresh Feed", systemImage: "arrow.clockwise") } + ) + .disabled(viewModel.isLoading) + .opacity(viewModel.isLoading ? 0 : 1) + .overlay { + if viewModel.isLoading { + ProgressView() + } + } + } + } + .onAppear { + if viewModel.items.isEmpty { + viewModel.loadItems(dataService: dataService, searchQuery: searchQuery, isRefresh: true) + } + } + } + + var innerBodyMac11: some View { + List { + Section { + ForEach(viewModel.items) { item in + FeedCardNavigationLink( + item: item, + searchQuery: searchQuery, + selectedLinkItem: $selectedLinkItem, + viewModel: viewModel + ) } } @@ -84,28 +146,12 @@ import Views .navigationTitle("Home") .toolbar { ToolbarItem { - if #available(macOS 12.0, *) { - Button( - action: { - viewModel.loadItems(dataService: dataService, searchQuery: searchQuery, isRefresh: true) - }, - label: { Label("Refresh Feed", systemImage: "arrow.clockwise") } - ) - .disabled(viewModel.isLoading) - .opacity(viewModel.isLoading ? 0 : 1) - .overlay { - if viewModel.isLoading { - ProgressView() - } - } - } else { - Button( - action: { - viewModel.loadItems(dataService: dataService, searchQuery: searchQuery, isRefresh: true) - }, - label: { Label("Refresh Feed", systemImage: "arrow.clockwise") } - ) - } + Button( + action: { + viewModel.loadItems(dataService: dataService, searchQuery: searchQuery, isRefresh: true) + }, + label: { Label("Refresh Feed", systemImage: "arrow.clockwise") } + ) } } .onAppear {