import SwiftUI struct FavoriteMenuButtonView: View { @EnvironmentObject var settings: SettingsManager @EnvironmentObject var manager: BooruManager let post: BooruPost var disableNewCollection = false @State private var isNewCollectionAlertPresented = false @State private var newCollectionName = "" @State private var itemPendingCollectionAssignment: UUID? @State private var isCollectionErrorAlertPresented = false var body: some View { let isFavorited = settings.isFavorite(postId: post.id, provider: manager.provider) let folderHierarchy = FolderHierarchy(folders: settings.folders) Menu { FolderMenuView( folderHierarchy: folderHierarchy, onSelectFolder: { folderIdentifier in settings.addFavorite(post: post, provider: manager.provider, folder: folderIdentifier) }, onCreateTopLevelUncategorized: { topLevelName in let newFolder = SettingsFolder(name: topLevelName) settings.folders.append(newFolder) settings.addFavorite(post: post, provider: manager.provider, folder: newFolder.id) }, isFolderDisabled: { folderIdentifier in isFavoritedInFolder(folderId: folderIdentifier) } ) Button(action: { isNewCollectionAlertPresented = true }) { Label("New Collection", systemImage: "plus") } .disabled(disableNewCollection) } label: { if isFavorited { Label("Favorited", systemImage: "heart.fill") } else { Label("Favorite", systemImage: "heart") } // if isFavorited { // Label("Remove from Favorites", systemImage: "heart.fill") // } else { // Label("Add to Favorites", systemImage: "heart") // } } primaryAction: { if isFavorited { settings.removeFavorite(withPostId: post.id, provider: manager.provider) } else { settings.addFavorite(post: post, provider: manager.provider) } } .collectionAlerts( isNewCollectionAlertPresented: $isNewCollectionAlertPresented, newCollectionName: $newCollectionName, isCollectionErrorAlertPresented: $isCollectionErrorAlertPresented ) { newCollectionName in let newFolder = SettingsFolder(name: newCollectionName) settings.folders.append(newFolder) settings.addFavorite(post: post, provider: manager.provider, folder: newFolder.id) } } private func isFavoritedInFolder(folderId: UUID) -> Bool { settings.favorites.contains { favorite in favorite.folder == folderId && favorite.postId == post.id && favorite.provider == manager.provider } } }