Skip to content

Commit 86830f8

Browse files
committed
fix: batch delete favorites with single notification to prevent partial deletion
1 parent 79ce558 commit 86830f8

3 files changed

Lines changed: 20 additions & 3 deletions

File tree

TablePro/Core/Storage/SQLFavoriteManager.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,18 @@ final class SQLFavoriteManager {
5151
return result
5252
}
5353

54+
func deleteFavorites(ids: [UUID]) async {
55+
for id in ids {
56+
let result = await storage.deleteFavorite(id: id)
57+
if result {
58+
SyncChangeTracker.shared.markDeleted(.favorite, id: id.uuidString)
59+
}
60+
}
61+
if !ids.isEmpty {
62+
postUpdateNotification()
63+
}
64+
}
65+
5466
func fetchFavorites(
5567
connectionId: UUID? = nil,
5668
folderId: UUID? = nil,

TablePro/ViewModels/FavoritesSidebarViewModel.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,12 @@ final class FavoritesSidebarViewModel {
128128
}
129129
}
130130

131+
func deleteFavorites(_ favorites: [SQLFavorite]) {
132+
Task {
133+
await manager.deleteFavorites(ids: favorites.map(\.id))
134+
}
135+
}
136+
131137
func createFolder(parentId: UUID? = nil) {
132138
if let parentId {
133139
expandedFolderIds.insert(parentId)

TablePro/Views/Sidebar/FavoritesTabView.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,8 @@ struct FavoritesTabView: View {
101101
private func deleteSelectedFavorites() {
102102
let allFavorites = collectFavorites(from: viewModel.treeItems)
103103
let toDelete = allFavorites.filter { selectedFavoriteIds.contains("fav-\($0.id)") }
104-
for fav in toDelete {
105-
viewModel.deleteFavorite(fav)
106-
}
104+
guard !toDelete.isEmpty else { return }
105+
viewModel.deleteFavorites(toDelete)
107106
selectedFavoriteIds.removeAll()
108107
}
109108

0 commit comments

Comments
 (0)