summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-06-15 06:01:48 -0700
committerFuwn <[email protected]>2025-06-15 06:01:48 -0700
commit60892fd6bd6ec7ff166a55b6c131c0b193a0e326 (patch)
tree414af710f4c7551b396d3805595dfc850eb95ef4
parentfeat: Development commit (diff)
downloadsora-testing-60892fd6bd6ec7ff166a55b6c131c0b193a0e326.tar.xz
sora-testing-60892fd6bd6ec7ff166a55b6c131c0b193a0e326.zip
feat: Development commit
-rw-r--r--Sora/Views/Generic/GenericListView.swift41
1 files changed, 40 insertions, 1 deletions
diff --git a/Sora/Views/Generic/GenericListView.swift b/Sora/Views/Generic/GenericListView.swift
index a98024d..b87b633 100644
--- a/Sora/Views/Generic/GenericListView.swift
+++ b/Sora/Views/Generic/GenericListView.swift
@@ -1,3 +1,5 @@
+// swiftlint:disable file_length
+
import SwiftUI
struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { // swiftlint:disable:this type_body_length
@@ -15,6 +17,8 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { // swi
@State private var sort: SettingsBookmarkSort = .dateBookmarked
@State private var isSortPickerPresented = false
@State private var isCollectionPickerPresented = false
+ @State private var isProviderPickerPresented = false
+ @State private var selectedProvider: BooruProvider?
let allowBookmarking: Bool
let title: String
let emptyMessage: String
@@ -46,8 +50,11 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { // swi
.joined(separator: " ")
.lowercased()
.contains(searchText.lowercased())
+ let matchesProvider =
+ selectedProvider == nil
+ || item.provider == selectedProvider
- return matchesFolder && matchesSearch
+ return matchesFolder && matchesSearch && matchesProvider
}
}
@@ -120,6 +127,17 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { // swi
.padding(.bottom)
.padding(.horizontal)
.pickerStyle(.menu)
+
+ Picker("Provider", selection: $selectedProvider) {
+ Text("All").tag(nil as BooruProvider?)
+
+ ForEach(BooruProvider.allCases, id: \.rawValue) { provider in
+ Text(provider.rawValue).tag(provider)
+ }
+ }
+ .padding(.bottom)
+ .padding(.horizontal)
+ .pickerStyle(.menu)
}
#endif
@@ -203,6 +221,27 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { // swi
}
}
+ Button {
+ isProviderPickerPresented.toggle()
+ } label: {
+ Label("Provider", systemImage: "globe")
+ }
+ .popover(isPresented: $isProviderPickerPresented) {
+ List {
+ Button("All") {
+ selectedProvider = nil
+ isProviderPickerPresented = false
+ }
+
+ ForEach(BooruProvider.allCases, id: \.rawValue) { provider in
+ Button(provider.rawValue) {
+ selectedProvider = provider
+ isProviderPickerPresented = false
+ }
+ }
+ }
+ }
+
Button(action: {
isShowingRemoveAllConfirmation = true
}) {