From 108b167f56d151a8f9d7cb84f6a9657f2597daaf Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Sun, 22 Mar 2026 20:59:43 +0700 Subject: [PATCH 1/2] feat: single-click favorite to insert query in editor (#415) --- TablePro/Views/Sidebar/FavoritesTabView.swift | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/TablePro/Views/Sidebar/FavoritesTabView.swift b/TablePro/Views/Sidebar/FavoritesTabView.swift index 39161f1f3..8490eb240 100644 --- a/TablePro/Views/Sidebar/FavoritesTabView.swift +++ b/TablePro/Views/Sidebar/FavoritesTabView.swift @@ -11,6 +11,7 @@ import SwiftUI internal struct FavoritesTabView: View { @State private var viewModel: FavoritesSidebarViewModel @State private var selectedFavoriteIds: Set = [] + @State private var lastInsertedFavoriteId: String? @State private var folderToDelete: SQLFavoriteFolder? @State private var showDeleteFolderAlert = false @FocusState private var isRenameFocused: Bool @@ -79,6 +80,24 @@ internal struct FavoritesTabView: View { .onDeleteCommand { deleteSelectedFavorites() } + .onChange(of: selectedFavoriteIds) { oldIds, newIds in + let added = newIds.subtracting(oldIds) + guard added.count == 1, + newIds.count == 1, + let selectedId = added.first, + selectedId != lastInsertedFavoriteId else { return } + + let allFavorites = collectFavorites(from: viewModel.filteredItems(searchText: searchText)) + if let favorite = allFavorites.first(where: { "fav-\($0.id)" == selectedId }) { + coordinator?.insertFavorite(favorite) + lastInsertedFavoriteId = selectedId + } + } + .onChange(of: selectedFavoriteIds) { + if selectedFavoriteIds.isEmpty { + lastInsertedFavoriteId = nil + } + } } /// Renders tree items with DisclosureGroup for folders. From 6e7d70a946f6e7581da2de81dd53ffe7cba75f4a Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Sun, 22 Mar 2026 21:03:34 +0700 Subject: [PATCH 2/2] fix: merge duplicate onChange handlers into single observer --- TablePro/Views/Sidebar/FavoritesTabView.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/TablePro/Views/Sidebar/FavoritesTabView.swift b/TablePro/Views/Sidebar/FavoritesTabView.swift index 8490eb240..965cebb04 100644 --- a/TablePro/Views/Sidebar/FavoritesTabView.swift +++ b/TablePro/Views/Sidebar/FavoritesTabView.swift @@ -81,6 +81,11 @@ internal struct FavoritesTabView: View { deleteSelectedFavorites() } .onChange(of: selectedFavoriteIds) { oldIds, newIds in + if newIds.isEmpty { + lastInsertedFavoriteId = nil + return + } + let added = newIds.subtracting(oldIds) guard added.count == 1, newIds.count == 1, @@ -93,11 +98,6 @@ internal struct FavoritesTabView: View { lastInsertedFavoriteId = selectedId } } - .onChange(of: selectedFavoriteIds) { - if selectedFavoriteIds.isEmpty { - lastInsertedFavoriteId = nil - } - } } /// Renders tree items with DisclosureGroup for folders.