summaryrefslogtreecommitdiff
path: root/Sora/Views/Generic/GenericListView.swift
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-10-05 05:25:36 -0700
committerFuwn <[email protected]>2025-10-05 05:25:36 -0700
commit890e65f187624d6604f5102acf4dc3d1931b848f (patch)
tree21b9345a8dcfa301787f3eac166ced81186efef3 /Sora/Views/Generic/GenericListView.swift
parentfeat: Development commit (diff)
downloadsora-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.swift67
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)