summaryrefslogtreecommitdiff
path: root/Sora/Views/Generic/GenericListView.swift
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-06-09 06:19:17 -0700
committerFuwn <[email protected]>2025-06-09 06:19:17 -0700
commitf2a7475d9fb929d53c08ec5a1d0527a7b54b55de (patch)
tree78c91bcdce96e3bb5295e3329fa9a56aef8f3977 /Sora/Views/Generic/GenericListView.swift
parentfeat: Development commit (diff)
downloadsora-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.swift38
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")
}