Allow hiding system labels

This commit is contained in:
Jackson Harper
2023-12-21 17:42:10 +08:00
parent 976aadb082
commit dccee35fbe
6 changed files with 43 additions and 16 deletions

View File

@ -2,6 +2,7 @@
import Models
import Services
import SwiftUI
import Utils
import Views
@MainActor
@ -195,15 +196,21 @@ struct ApplyLabelsView: View {
}
}
func isSystemLabel(_ label: LinkedItemLabel) -> Bool {
label.name == "RSS" || label.name == "Newsletter" || label.name == "Pinned"
}
extension Sequence where Element == LinkedItemLabel {
func applySearchFilter(_ searchFilter: String) -> [LinkedItemLabel] {
let hideSystemLabels = UserDefaults(suiteName: "group.app.omnivoreapp")?.bool(forKey: UserDefaultKey.hideSystemLabels.rawValue) ?? false
if searchFilter.isEmpty || searchFilter == ZWSP {
return map { $0 } // return the identity of the sequence
}
if searchFilter.starts(with: ZWSP) {
let index = searchFilter.index(searchFilter.startIndex, offsetBy: 1)
let trimmed = searchFilter.suffix(from: index).lowercased()
return filter { ($0.name ?? "").lowercased().contains(trimmed) }
return filter { ($0.name ?? "").lowercased().contains(trimmed) && (!hideSystemLabels || !isSystemLabel($0)) }
}
return filter { ($0.name ?? "").lowercased().contains(searchFilter.lowercased()) }
}

View File

@ -2,11 +2,12 @@ import CoreData
import Models
import Services
import SwiftUI
import Utils
import Views
@MainActor final class FilterByLabelsViewModel: ObservableObject {
@Published var isLoading = false
@Published var errorMessage: String? = nil
@Published var errorMessage: String?
@Published var labels = [LinkedItemLabel]()
@Published var selectedLabels = [LinkedItemLabel]()
@Published var negatedLabels = [LinkedItemLabel]()
@ -14,7 +15,9 @@ import Views
@Published var labelSearchFilter = ""
func setLabels(_ labels: [LinkedItemLabel]) {
self.labels = labels.sorted { left, right in
let hideSystemLabels = UserDefaults(suiteName: "group.app.omnivoreapp")?.bool(forKey: UserDefaultKey.hideSystemLabels.rawValue) ?? false
self.labels = labels.filter { !hideSystemLabels || !isSystemLabel($0) }.sorted { left, right in
let aTrimmed = left.unwrappedName.trimmingCharacters(in: .whitespaces)
let bTrimmed = right.unwrappedName.trimmingCharacters(in: .whitespaces)
return aTrimmed.caseInsensitiveCompare(bTrimmed) == .orderedAscending

View File

@ -10,22 +10,29 @@ struct LabelsView: View {
@State private var showDeleteConfirmation = false
@State private var labelToRemove: LinkedItemLabel?
@AppStorage(UserDefaultKey.hideSystemLabels.rawValue, store: UserDefaults(suiteName: "group.app.omnivoreapp")) var hideSystemLabels = false
var body: some View {
List {
ForEach(viewModel.labels, id: \.id) { label in
HStack {
TextChip(feedItemLabel: label).allowsHitTesting(false)
Spacer()
Button(
action: {
labelToRemove = label
showDeleteConfirmation = true
},
label: { Image(systemName: "trash") }
)
Section {
ForEach(viewModel.labels, id: \.id) { label in
HStack {
TextChip(feedItemLabel: label).allowsHitTesting(false)
Spacer()
Button(
action: {
labelToRemove = label
showDeleteConfirmation = true
},
label: { Image(systemName: "trash") }
)
}
}
createLabelButton
}
Section("Label settings") {
Toggle("Hide system labels", isOn: $hideSystemLabels)
}
createLabelButton
}
.navigationTitle(LocalText.labelsGeneric)
.alert("Are you sure you want to delete this label?", isPresented: $showDeleteConfirmation) {
@ -43,6 +50,11 @@ struct LabelsView: View {
}
Button(LocalText.cancelGeneric, role: .cancel) { self.labelToRemove = nil }
}
.onChange(of: hideSystemLabels) { _ in
Task {
await viewModel.loadLabels(dataService: dataService, item: nil)
}
}
.sheet(isPresented: $viewModel.showCreateLabelModal) {
CreateLabelView(viewModel: viewModel, newLabelName: viewModel.labelSearchFilter)
}

View File

@ -2,6 +2,7 @@ import CoreData
import Models
import Services
import SwiftUI
import Utils
@MainActor public final class LabelsViewModel: ObservableObject {
let labelNameMaxLength = 64
@ -16,7 +17,9 @@ import SwiftUI
public init() {}
func setLabels(_ labels: [LinkedItemLabel]) {
self.labels = labels.sorted { left, right in
let hideSystemLabels = UserDefaults(suiteName: "group.app.omnivoreapp")?.bool(forKey: UserDefaultKey.hideSystemLabels.rawValue) ?? false
self.labels = labels.filter { !hideSystemLabels || !isSystemLabel($0) }.sorted { left, right in
let aTrimmed = left.unwrappedName.trimmingCharacters(in: .whitespaces)
let bTrimmed = right.unwrappedName.trimmingCharacters(in: .whitespaces)
return aTrimmed.caseInsensitiveCompare(bTrimmed) == .orderedAscending

View File

@ -41,6 +41,7 @@ import Views
} else {
self.hasBadgePermission = false
}
print("notification settings: ", settings.badgeSetting.rawValue)
print("got the notification settings")
}

View File

@ -33,6 +33,7 @@ public enum UserDefaultKey: String {
case deviceTokenID
case userWordsPerMinute
case hideFeatureSection
case hideSystemLabels
case justifyText
case prefersHideStatusBarInReader
case visibleShareExtensionTab