diff options
| author | Fuwn <[email protected]> | 2026-02-18 12:29:25 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-02-18 12:29:29 -0800 |
| commit | 0917354dc0b79d1ac414392ae036f784eb397113 (patch) | |
| tree | ede2a5b3935eed05607f6a493d8a34ce74d9834d /Sora/Views/Post/Grid | |
| parent | perf: eliminate repeated favorites sort map and grid recompute (diff) | |
| download | sora-testing-0917354dc0b79d1ac414392ae036f784eb397113.tar.xz sora-testing-0917354dc0b79d1ac414392ae036f784eb397113.zip | |
refactor: share folder menu hierarchy across views
Diffstat (limited to 'Sora/Views/Post/Grid')
| -rw-r--r-- | Sora/Views/Post/Grid/PostGridView.swift | 38 |
1 files changed, 9 insertions, 29 deletions
diff --git a/Sora/Views/Post/Grid/PostGridView.swift b/Sora/Views/Post/Grid/PostGridView.swift index 7c0a1aa..9c24932 100644 --- a/Sora/Views/Post/Grid/PostGridView.swift +++ b/Sora/Views/Post/Grid/PostGridView.swift @@ -512,36 +512,16 @@ struct PostGridView: View { // swiftlint:disable:this type_body_length } Menu { - ForEach(settings.folders.filter { $0.topLevelName == nil }, id: \.id) { folder in - Button(action: { - settings.addFavorite(post: post, provider: manager.provider, folder: folder.id) - }) { - Label(folder.name, systemImage: "folder") - } - .disabled(isFavoritedInFolder(post: post, folderId: folder.id)) - } - - let topLevelFolders = settings.folders - .reduce(into: [String: [SettingsFolder]]()) { result, folder in - guard let topLevelName = folder.topLevelName else { return } - - result[topLevelName, default: []].append(folder) - } - - ForEach(topLevelFolders.keys.sorted(), id: \.self) { topLevelName in - Menu { - ForEach(topLevelFolders[topLevelName] ?? [], id: \.id) { folder in - Button(action: { - settings.addFavorite(post: post, provider: manager.provider, folder: folder.id) - }) { - Text(folder.shortName) - } - .disabled(isFavoritedInFolder(post: post, folderId: folder.id)) - } - } label: { - Text(topLevelName) + FolderMenuView( + folderHierarchy: FolderHierarchy(folders: settings.folders), + showsTopLevelUncategorized: false, + onSelectFolder: { folderIdentifier in + settings.addFavorite(post: post, provider: manager.provider, folder: folderIdentifier) + }, + isFolderDisabled: { folderIdentifier in + isFavoritedInFolder(post: post, folderId: folderIdentifier) } - } + ) } label: { Label("Add to Collection", systemImage: "folder.badge.plus") } |