From 60892fd6bd6ec7ff166a55b6c131c0b193a0e326 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sun, 15 Jun 2025 06:01:48 -0700 Subject: feat: Development commit --- Sora/Views/Generic/GenericListView.swift | 41 +++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) (limited to 'Sora/Views/Generic') 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: View { // swiftlint:disable:this type_body_length @@ -15,6 +17,8 @@ struct GenericListView: 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: 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: 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: 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 }) { -- cgit v1.2.3