diff options
| author | Fuwn <[email protected]> | 2025-10-05 05:25:36 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-10-05 05:25:36 -0700 |
| commit | 890e65f187624d6604f5102acf4dc3d1931b848f (patch) | |
| tree | 21b9345a8dcfa301787f3eac166ced81186efef3 /Sora/Views/Generic/GenericListView.swift | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-890e65f187624d6604f5102acf4dc3d1931b848f.tar.xz sora-testing-890e65f187624d6604f5102acf4dc3d1931b848f.zip | |
feat: Development commit
Diffstat (limited to 'Sora/Views/Generic/GenericListView.swift')
| -rw-r--r-- | Sora/Views/Generic/GenericListView.swift | 67 |
1 files changed, 66 insertions, 1 deletions
diff --git a/Sora/Views/Generic/GenericListView.swift b/Sora/Views/Generic/GenericListView.swift index 8465570..79d4142 100644 --- a/Sora/Views/Generic/GenericListView.swift +++ b/Sora/Views/Generic/GenericListView.swift @@ -52,6 +52,15 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { } return itemFolder.topLevelName == topLevelName + + case .topLevelUncategorized(let topLevelName): + guard let itemFolderId = item.folder, + let itemFolder = settings.folders.first(where: { $0.id == itemFolderId }) + else { + return false + } + + return itemFolder.name == topLevelName } }() let matchesSearch = @@ -164,7 +173,33 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { } ForEach(topLevelFolders.keys.sorted(), id: \.self) { topLevelName in - Text(topLevelName).tag(CollectionPickerOption.topLevelFolder(topLevelName)) + Menu { + Button(action: { + selectedCollectionOption = .topLevelFolder(topLevelName) + }) { + Text("All \(topLevelName)") + } + + if settings.folders.contains(where: { $0.name == topLevelName }) { + Button(action: { + selectedCollectionOption = .topLevelUncategorized(topLevelName) + }) { + Text("Uncategorized") + } + } + + Divider() + + ForEach(topLevelFolders[topLevelName] ?? [], id: \.id) { folder in + Button(action: { + selectedCollectionOption = .folder(folder.id) + }) { + Text(folder.shortName) + } + } + } label: { + Text(topLevelName) + } } } .padding(.bottom) @@ -274,6 +309,14 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { Label("All \(topLevelName)", systemImage: "folder.fill") } + if settings.folders.contains(where: { $0.name == topLevelName }) { + Button(action: { + selectedCollectionOption = .topLevelUncategorized(topLevelName) + }) { + Label("Uncategorized", systemImage: "folder.badge.questionmark") + } + } + Divider() ForEach(topLevelFolders[topLevelName] ?? [], id: \.id) { folder in @@ -427,6 +470,28 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { ForEach(topLevelFolders.keys.sorted(), id: \.self) { topLevelName in Menu { + let topLevelFolder = settings.folders.first(where: { $0.name == topLevelName }) + + if let topLevelFolder { + Button(action: { + settings.updateBookmarkFolder(withID: item.id, folder: topLevelFolder.id) + }) { + Text("Uncategorized") + } + .disabled(item.folder == topLevelFolder.id) + } else { + Button(action: { + let newFolder = SettingsFolder(name: topLevelName) + + settings.folders.append(newFolder) + settings.updateBookmarkFolder(withID: item.id, folder: newFolder.id) + }) { + Text("Uncategorized") + } + } + + Divider() + ForEach(topLevelFolders[topLevelName] ?? [], id: \.id) { folder in Button(action: { settings.updateBookmarkFolder(withID: item.id, folder: folder.id) |