diff options
| author | Fuwn <[email protected]> | 2025-06-15 06:01:48 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-06-15 06:01:48 -0700 |
| commit | 60892fd6bd6ec7ff166a55b6c131c0b193a0e326 (patch) | |
| tree | 414af710f4c7551b396d3805595dfc850eb95ef4 | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-60892fd6bd6ec7ff166a55b6c131c0b193a0e326.tar.xz sora-testing-60892fd6bd6ec7ff166a55b6c131c0b193a0e326.zip | |
feat: Development commit
| -rw-r--r-- | Sora/Views/Generic/GenericListView.swift | 41 |
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 }) { |