From f3aac3e30c8949a5af46ea74a02c7fa2e5c6606b Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Wed, 11 May 2022 13:21:05 -0700 Subject: [PATCH] persist last used filter to user defaults --- .../Sources/App/Views/Home/HomeFeedViewIOS.swift | 10 +++++++--- .../Sources/App/Views/Home/HomeFeedViewModel.swift | 11 ++++++++--- .../OmnivoreKit/Sources/Models/LinkedItemFilter.swift | 2 +- apple/OmnivoreKit/Sources/Utils/UserDefaultKeys.swift | 1 + 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift index 7fff92964..aa98ab456 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift @@ -127,17 +127,21 @@ private let enableGrid = UIDevice.isIPad || FeatureFlag.enableGridCardsOnPhone var body: some View { VStack(spacing: 0) { SearchBar(searchTerm: $viewModel.searchTerm, isSearching: $isSearching) - + ZStack(alignment: .bottom) { ScrollView(.horizontal, showsIndicators: false) { HStack { Menu( content: { ForEach(LinkedItemFilter.allCases, id: \.self) { filter in - Button(filter.displayName, action: { viewModel.appliedFilter = filter }) + Button(filter.displayName, action: { viewModel.appliedFilter = filter.rawValue }) } }, - label: { TextChipButton.makeFilterButton(title: viewModel.appliedFilter.displayName) } + label: { + TextChipButton.makeFilterButton( + title: LinkedItemFilter(rawValue: viewModel.appliedFilter)?.displayName ?? "Filter" + ) + } ) TextChipButton.makeAddLabelButton { showLabelsSheet = true diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift index 3c2a2eb5c..d16de27b1 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift @@ -18,7 +18,9 @@ import Views @Published var itemToSnoozeID: String? @Published var selectedLinkItem: LinkedItem? @Published var showLoadingBar = false - @Published var appliedFilter = LinkedItemFilter.inbox + + @AppStorage(UserDefaultKey.lastSelectedLinkedItemFilter.rawValue) + var appliedFilter = LinkedItemFilter.inbox.rawValue var cursor: String? @@ -89,7 +91,9 @@ import Views await dataService.viewContext.perform { let fetchRequest: NSFetchRequest = LinkedItem.fetchRequest() fetchRequest.sortDescriptors = [NSSortDescriptor(keyPath: \LinkedItem.savedAt, ascending: false)] - fetchRequest.predicate = self.appliedFilter.predicate + if let predicate = LinkedItemFilter(rawValue: self.appliedFilter)?.predicate { + fetchRequest.predicate = predicate + } // // TODO: Filter on label if let fetchedItems = try? dataService.viewContext.fetch(fetchRequest) { @@ -141,7 +145,8 @@ import Views } private var searchQuery: String { - var query = "\(appliedFilter.queryString)" + let filter = LinkedItemFilter(rawValue: appliedFilter) ?? .inbox + var query = "\(filter.queryString)" if !searchTerm.isEmpty { query.append(" \(searchTerm)") diff --git a/apple/OmnivoreKit/Sources/Models/LinkedItemFilter.swift b/apple/OmnivoreKit/Sources/Models/LinkedItemFilter.swift index cc58226ce..1b931c203 100644 --- a/apple/OmnivoreKit/Sources/Models/LinkedItemFilter.swift +++ b/apple/OmnivoreKit/Sources/Models/LinkedItemFilter.swift @@ -1,6 +1,6 @@ import Foundation -public enum LinkedItemFilter: CaseIterable { +public enum LinkedItemFilter: String, CaseIterable { case inbox case all case archived diff --git a/apple/OmnivoreKit/Sources/Utils/UserDefaultKeys.swift b/apple/OmnivoreKit/Sources/Utils/UserDefaultKeys.swift index 369dc232c..faa4d1e65 100644 --- a/apple/OmnivoreKit/Sources/Utils/UserDefaultKeys.swift +++ b/apple/OmnivoreKit/Sources/Utils/UserDefaultKeys.swift @@ -5,4 +5,5 @@ public enum UserDefaultKey: String { case userHasDeniedPushPrimer case firebasePushToken case homeFeedlayoutPreference + case lastSelectedLinkedItemFilter }