diff options
| author | Fuwn <[email protected]> | 2025-06-09 06:19:17 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-06-09 06:19:17 -0700 |
| commit | f2a7475d9fb929d53c08ec5a1d0527a7b54b55de (patch) | |
| tree | 78c91bcdce96e3bb5295e3329fa9a56aef8f3977 /Sora/Views/Generic/GenericListView.swift | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-f2a7475d9fb929d53c08ec5a1d0527a7b54b55de.tar.xz sora-testing-f2a7475d9fb929d53c08ec5a1d0527a7b54b55de.zip | |
feat: Development commit
Diffstat (limited to 'Sora/Views/Generic/GenericListView.swift')
| -rw-r--r-- | Sora/Views/Generic/GenericListView.swift | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/Sora/Views/Generic/GenericListView.swift b/Sora/Views/Generic/GenericListView.swift index 93b141b..fe8cf0e 100644 --- a/Sora/Views/Generic/GenericListView.swift +++ b/Sora/Views/Generic/GenericListView.swift @@ -11,6 +11,7 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { @State private var newCollectionName = "" @State private var itemPendingCollectionAssignment: UUID? @State private var isCollectionErrorAlertPresented = false + @State private var selectedFolder: SettingsFolder? let allowBookmarking: Bool let title: String let emptyMessage: String @@ -23,15 +24,16 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { let removeActionUUID: (UUID) -> Void let removeAllAction: () -> Void var filteredItems: [T] { - guard !searchText.isEmpty else { - return items - } - - return items.filter { item in - item.tags - .joined(separator: " ") - .lowercased() - .contains(searchText.lowercased()) + items.filter { item in + let matchesFolder = selectedFolder == nil || item.folder?.id == selectedFolder?.id + let matchesSearch = + searchText.isEmpty + || item.tags + .joined(separator: " ") + .lowercased() + .contains(searchText.lowercased()) + + return matchesFolder && matchesSearch } } @@ -45,8 +47,24 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { description: Text(emptyDescription) ) } else { + if !settings.folders.isEmpty { + Picker("Collection", selection: $selectedFolder) { + Text("All").tag(nil as SettingsFolder?) + + ForEach(settings.folders, id: \.id) { folder in + Text(folder.name).tag(folder) + } + } + .pickerStyle(.menu) + #if os(macOS) + .padding() + #else + .padding(.horizontal) + #endif + } + List { - if filteredItems.isEmpty, !searchText.isEmpty { + if filteredItems.isEmpty && (!searchText.isEmpty || !(selectedFolder == nil)) { Text("No matching items found") } |