import SwiftUI struct BookmarkMenuButtonView: View { @EnvironmentObject var settings: SettingsManager let tags: [String] let provider: BooruProvider 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 isBookmarked = settings.bookmarks.contains { bookmark in Set(bookmark.tags) == Set(tags) } let folderHierarchy = FolderHierarchy(folders: settings.folders) Menu { FolderMenuView( folderHierarchy: folderHierarchy, onSelectFolder: { folderIdentifier in settings.addBookmark(provider: provider, tags: tags, folder: folderIdentifier) }, onCreateTopLevelUncategorized: { topLevelName in let newFolder = SettingsFolder(name: topLevelName) settings.folders.append(newFolder) settings.addBookmark(provider: provider, tags: tags, folder: newFolder.id) }, isFolderDisabled: { folderIdentifier in isBookmarkedInFolder(folderId: folderIdentifier) } ) Button(action: { isNewCollectionAlertPresented = true }) { Label("New Collection", systemImage: "plus") } .disabled(disableNewCollection) } label: { if isBookmarked { Label("Bookmarked", systemImage: "bookmark.fill") } else { Label("Bookmark", systemImage: "bookmark") } // if isBookmarked { // Label("Remove Bookmark", systemImage: "bookmark.fill") // } else { // Label("Bookmark Tag\(tags.count == 1 ? "" : "s")", systemImage: "bookmark") // } } primaryAction: { if isBookmarked { settings.removeBookmark(withTags: tags) } else { settings.addBookmark(provider: provider, tags: tags) } } .collectionAlerts( isNewCollectionAlertPresented: $isNewCollectionAlertPresented, newCollectionName: $newCollectionName, isCollectionErrorAlertPresented: $isCollectionErrorAlertPresented ) { newCollectionName in let newFolder = SettingsFolder(name: newCollectionName) settings.folders.append(newFolder) settings.addBookmark(provider: provider, tags: tags, folder: newFolder.id) } } private func isBookmarkedInFolder(folderId: UUID) -> Bool { settings.bookmarks.contains { bookmark in bookmark.folder == folderId && Set(bookmark.tags) == Set(tags) && bookmark.provider == provider } } }