persist last used filter to user defaults

This commit is contained in:
Satindar Dhillon 2022-05-11 13:21:05 -07:00
parent 3410a58a89
commit f3aac3e30c
4 changed files with 17 additions and 7 deletions

View file

@ -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

View file

@ -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<Models.LinkedItem> = 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)")

View file

@ -1,6 +1,6 @@
import Foundation
public enum LinkedItemFilter: CaseIterable {
public enum LinkedItemFilter: String, CaseIterable {
case inbox
case all
case archived

View file

@ -5,4 +5,5 @@ public enum UserDefaultKey: String {
case userHasDeniedPushPrimer
case firebasePushToken
case homeFeedlayoutPreference
case lastSelectedLinkedItemFilter
}