diff options
| -rw-r--r-- | Sora/Views/Generic/GenericListView.swift | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/Sora/Views/Generic/GenericListView.swift b/Sora/Views/Generic/GenericListView.swift index 6bd1e02..b324e5d 100644 --- a/Sora/Views/Generic/GenericListView.swift +++ b/Sora/Views/Generic/GenericListView.swift @@ -25,7 +25,17 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { let removeAllAction: () -> Void var filteredItems: [T] { items.filter { item in - let matchesFolder = selectedFolder == nil || item.folder == selectedFolder + let matchesFolder: Bool = { + if selectedFolder == nil { + return true + } + + if selectedFolder == uncategorisedUUID { + return item.folder == nil + } + + return item.folder == selectedFolder + }() let matchesSearch = searchText.isEmpty || item.tags @@ -36,6 +46,7 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { return matchesFolder && matchesSearch } } + private let uncategorisedUUID = UUID(uuidString: "00000000-0000-0000-0000-000000000000")! var body: some View { NavigationStack { @@ -51,6 +62,10 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { Picker("Collection", selection: $selectedFolder) { Text("All").tag(nil as UUID?) + if items.contains(where: { $0.folder == nil }) { + Text("Uncategorised").tag(uncategorisedUUID as UUID?) + } + ForEach(settings.folders, id: \.id) { folder in Text(folder.name).tag(folder.id) } |