From 8fb6453ac2c622cd28cc46d1911cae16bb0bebe2 Mon Sep 17 00:00:00 2001 From: sophiathedev Date: Tue, 18 Aug 2026 15:57:37 +0700 Subject: [PATCH 1/8] feat(sidebar): add favorite databases --- CHANGELOG.md | 1 + TablePro/Core/Storage/ConnectionStorage.swift | 4 + .../Storage/FavoriteDatabasesStorage.swift | 87 +++++++++++++ TablePro/Core/Sync/SyncCoordinator.swift | 4 + .../Favorites/FavoriteDatabaseEntry.swift | 40 ++++++ .../FavoriteDatabaseEnvironment.swift | 38 ++++++ .../FavoriteDatabaseEnvironmentFilter.swift | 34 +++++ .../Favorites/FavoriteDatabaseGroup.swift | 13 ++ .../Favorites/FavoriteDatabaseGrouping.swift | 33 +++++ TablePro/Models/UI/SharedSidebarState.swift | 14 +++ .../ViewModels/FavoritesExpansionState.swift | 49 ++++++++ ...abaseTreeOutlineCoordinator+Commands.swift | 8 ++ .../DatabaseTreeOutlineCoordinator+Menu.swift | 7 ++ .../DatabaseTreeOutlineCoordinator.swift | 57 +++++++-- .../Views/Sidebar/DatabaseTreeRowView.swift | 29 ++++- .../Sidebar/FavoriteDatabaseFilterBar.swift | 30 +++++ .../Views/Sidebar/FavoritesExpansion.swift | 19 +++ .../Sidebar/FavoritesOutlineCoordinator.swift | 72 +++++++++-- .../Views/Sidebar/FavoritesOutlineNode.swift | 21 +++- .../Sidebar/FavoritesOutlineSelection.swift | 8 ++ .../Views/Sidebar/FavoritesOutlineView.swift | 4 + TablePro/Views/Sidebar/FavoritesTabView.swift | 118 +++++++++++++++++- .../Sidebar/Menu/DatabaseTreeMenuSpec.swift | 30 +++++ .../Sidebar/Menu/FavoritesMenuCommand.swift | 4 + .../Sidebar/Menu/FavoritesMenuSpec.swift | 44 ++++++- .../Sidebar/Menu/SidebarMenuCommand.swift | 2 + .../Views/Sidebar/SidebarPersistenceKey.swift | 4 + TablePro/Views/Sidebar/SidebarView.swift | 1 + .../FavoriteDatabasesStorageTests.swift | 116 +++++++++++++++++ .../FavoriteDatabaseGroupingTests.swift | 97 ++++++++++++++ .../Models/SharedSidebarStateTests.swift | 18 ++- .../Sidebar/DatabaseTreeMenuSpecTests.swift | 29 +++++ .../Sidebar/FavoritesMenuSpecTests.swift | 33 +++++ .../FavoritesOutlineSelectionTests.swift | 49 ++++++++ .../Sidebar/SidebarOutlineScaffoldTests.swift | 81 ++++++++++++ docs/features/favorites.mdx | 12 +- 36 files changed, 1175 insertions(+), 35 deletions(-) create mode 100644 TablePro/Core/Storage/FavoriteDatabasesStorage.swift create mode 100644 TablePro/Models/Favorites/FavoriteDatabaseEntry.swift create mode 100644 TablePro/Models/Favorites/FavoriteDatabaseEnvironment.swift create mode 100644 TablePro/Models/Favorites/FavoriteDatabaseEnvironmentFilter.swift create mode 100644 TablePro/Models/Favorites/FavoriteDatabaseGroup.swift create mode 100644 TablePro/Models/Favorites/FavoriteDatabaseGrouping.swift create mode 100644 TablePro/Views/Sidebar/FavoriteDatabaseFilterBar.swift create mode 100644 TableProTests/Core/Storage/FavoriteDatabasesStorageTests.swift create mode 100644 TableProTests/Models/FavoriteDatabaseGroupingTests.swift diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e5f14c9d..0818f646a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Databases can be saved to the Favorites sidebar and grouped as Development, Testing, Production or Unassigned. Right-click a database in the Tree sidebar to add it, then use the environment filter or activate it directly from Favorites. (#1553) - Tree sidebar layouts group tables, views, materialized views, foreign tables, procedures and functions into collapsible folders inside each database or schema. (#1590) - Dameng DM8 connections through a downloadable native-wire plugin, with schema browsing, table editing, metadata, DDL, transactions, Unicode and binary writes, EXPLAIN support, and query cancellation with a query timeout. Stopping a DM8 query closes its connection, because DM8 has no out-of-band cancel request; TablePro reconnects on the next query. (#1671, #2003, #2010) - SQL Server connections can sign in with Microsoft Entra ID, covering Azure SQL Database, Azure SQL Managed Instance, and SQL Server 2022. Sign-in runs in your browser and honours multifactor authentication and Conditional Access; tokens are kept in the keychain and refreshed for you. Set it up on the Mac; iPhone and iPad pick the connection up through sync and prompt to sign in when you open it. diff --git a/TablePro/Core/Storage/ConnectionStorage.swift b/TablePro/Core/Storage/ConnectionStorage.swift index 61cdb307d..41ca0945b 100644 --- a/TablePro/Core/Storage/ConnectionStorage.swift +++ b/TablePro/Core/Storage/ConnectionStorage.swift @@ -291,6 +291,8 @@ final class ConnectionStorage { appSettings.saveLastSchema(nil, for: connection.id) FavoriteTablesStorage.shared.removeFavorites(for: connection.id) + FavoriteDatabasesStorage.shared.removeFavorites(for: connection.id) + FavoritesExpansionState.shared.removeConnection(connection.id) FilterSettingsStorage.shared.removeFilters(for: connection.id) DatabaseTreeFilterStorage.shared.removeFilter(for: connection.id) RecentlyClosedTabStore.shared.removeEntries(for: connection.id) @@ -331,6 +333,8 @@ final class ConnectionStorage { appSettings.saveLastDatabase(nil, for: conn.id) appSettings.saveLastSchema(nil, for: conn.id) FavoriteTablesStorage.shared.removeFavorites(for: conn.id) + FavoriteDatabasesStorage.shared.removeFavorites(for: conn.id) + FavoritesExpansionState.shared.removeConnection(conn.id) } FilterSettingsStorage.shared.removeFilters(for: idsToDelete) DatabaseTreeFilterStorage.shared.removeFilters(for: idsToDelete) diff --git a/TablePro/Core/Storage/FavoriteDatabasesStorage.swift b/TablePro/Core/Storage/FavoriteDatabasesStorage.swift new file mode 100644 index 000000000..eafc4e877 --- /dev/null +++ b/TablePro/Core/Storage/FavoriteDatabasesStorage.swift @@ -0,0 +1,87 @@ +// +// FavoriteDatabasesStorage.swift +// TablePro +// + +import Foundation +import os + +extension Notification.Name { + internal static let favoriteDatabasesDidChange = Notification.Name("FavoriteDatabasesDidChange") +} + +@MainActor +internal final class FavoriteDatabasesStorage { + internal static let shared = FavoriteDatabasesStorage() + + private static let logger = Logger(subsystem: "com.TablePro", category: "FavoriteDatabasesStorage") + private let defaults: UserDefaults + + internal init(defaults: UserDefaults = AppStorageEnvironment.shared.defaults) { + self.defaults = defaults + } + + internal func favorites(for connectionId: UUID) -> Set { + guard let data = defaults.data(forKey: key(for: connectionId)), + let decoded = try? JSONDecoder().decode(Set.self, from: data) + else { return [] } + return decoded.filter { $0.connectionId == connectionId && !$0.database.isEmpty } + } + + internal func environment( + for database: String, + connectionId: UUID + ) -> FavoriteDatabaseEnvironment? { + favorites(for: connectionId).first { $0.database == database }?.environment + } + + internal func setFavorite( + database: String, + environment: FavoriteDatabaseEnvironment, + connectionId: UUID + ) { + guard !database.isEmpty else { return } + var entries = favorites(for: connectionId) + entries = Set(entries.filter { $0.database != database }) + entries.insert(FavoriteDatabaseEntry( + connectionId: connectionId, + database: database, + environment: environment + )) + persist(entries, connectionId: connectionId) + } + + internal func removeFavorite(database: String, connectionId: UUID) { + var entries = favorites(for: connectionId) + let originalCount = entries.count + entries = Set(entries.filter { $0.database != database }) + guard entries.count != originalCount else { return } + persist(entries, connectionId: connectionId) + } + + internal func removeFavorites(for connectionId: UUID) { + let key = key(for: connectionId) + guard defaults.object(forKey: key) != nil else { return } + defaults.removeObject(forKey: key) + NotificationCenter.default.post(name: .favoriteDatabasesDidChange, object: self) + } + + private func persist(_ entries: Set, connectionId: UUID) { + let key = key(for: connectionId) + guard !entries.isEmpty else { + defaults.removeObject(forKey: key) + NotificationCenter.default.post(name: .favoriteDatabasesDidChange, object: self) + return + } + do { + defaults.set(try JSONEncoder().encode(entries), forKey: key) + NotificationCenter.default.post(name: .favoriteDatabasesDidChange, object: self) + } catch { + Self.logger.error("Failed to encode favorite databases: \(error.localizedDescription, privacy: .public)") + } + } + + private func key(for connectionId: UUID) -> String { + "com.TablePro.favoriteDatabases.\(connectionId.uuidString)" + } +} diff --git a/TablePro/Core/Sync/SyncCoordinator.swift b/TablePro/Core/Sync/SyncCoordinator.swift index a2917b34b..be0077e13 100644 --- a/TablePro/Core/Sync/SyncCoordinator.swift +++ b/TablePro/Core/Sync/SyncCoordinator.swift @@ -519,6 +519,10 @@ final class SyncCoordinator { Self.logger.error("Failed to apply remote connection deletions: persistence error") } else { FilterSettingsStorage.shared.removeFilters(for: connectionIdsToDelete) + for id in connectionIdsToDelete { + FavoriteDatabasesStorage.shared.removeFavorites(for: id) + FavoritesExpansionState.shared.removeConnection(id) + } let favoriteManager = services.sqlFavoriteManager Task { for id in connectionIdsToDelete { diff --git a/TablePro/Models/Favorites/FavoriteDatabaseEntry.swift b/TablePro/Models/Favorites/FavoriteDatabaseEntry.swift new file mode 100644 index 000000000..f35de96a9 --- /dev/null +++ b/TablePro/Models/Favorites/FavoriteDatabaseEntry.swift @@ -0,0 +1,40 @@ +// +// FavoriteDatabaseEntry.swift +// TablePro +// + +import Foundation + +internal struct FavoriteDatabaseEntry: Codable, Hashable, Identifiable, Sendable { + internal let connectionId: UUID + internal let database: String + internal let environment: FavoriteDatabaseEnvironment + + internal var id: String { + "\(connectionId.uuidString)\u{1}\(database)" + } + + internal init( + connectionId: UUID, + database: String, + environment: FavoriteDatabaseEnvironment + ) { + self.connectionId = connectionId + self.database = database + self.environment = environment + } + + private enum CodingKeys: String, CodingKey { + case connectionId + case database + case environment + } + + internal init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + connectionId = try container.decode(UUID.self, forKey: .connectionId) + database = try container.decode(String.self, forKey: .database) + let rawEnvironment = try container.decodeIfPresent(String.self, forKey: .environment) + environment = rawEnvironment.flatMap(FavoriteDatabaseEnvironment.init(rawValue:)) ?? .none + } +} diff --git a/TablePro/Models/Favorites/FavoriteDatabaseEnvironment.swift b/TablePro/Models/Favorites/FavoriteDatabaseEnvironment.swift new file mode 100644 index 000000000..b3f76ff3c --- /dev/null +++ b/TablePro/Models/Favorites/FavoriteDatabaseEnvironment.swift @@ -0,0 +1,38 @@ +// +// FavoriteDatabaseEnvironment.swift +// TablePro +// + +import Foundation + +internal enum FavoriteDatabaseEnvironment: String, CaseIterable, Codable, Sendable { + case development + case testing + case production + case none + + internal var title: String { + switch self { + case .development: String(localized: "Development") + case .testing: String(localized: "Testing") + case .production: String(localized: "Production") + case .none: String(localized: "Unassigned") + } + } + + internal var menuTitle: String { + switch self { + case .none: String(localized: "No Environment") + case .development, .testing, .production: title + } + } + + internal var iconName: String { + switch self { + case .development: "wrench.and.screwdriver" + case .testing: "checkmark.circle" + case .production: "lock.shield" + case .none: "tray" + } + } +} diff --git a/TablePro/Models/Favorites/FavoriteDatabaseEnvironmentFilter.swift b/TablePro/Models/Favorites/FavoriteDatabaseEnvironmentFilter.swift new file mode 100644 index 000000000..2d98dde05 --- /dev/null +++ b/TablePro/Models/Favorites/FavoriteDatabaseEnvironmentFilter.swift @@ -0,0 +1,34 @@ +// +// FavoriteDatabaseEnvironmentFilter.swift +// TablePro +// + +import Foundation + +internal enum FavoriteDatabaseEnvironmentFilter: String, CaseIterable, Sendable { + case all + case development + case testing + case production + case unassigned + + internal var title: String { + switch self { + case .all: String(localized: "All Environments") + case .development: FavoriteDatabaseEnvironment.development.title + case .testing: FavoriteDatabaseEnvironment.testing.title + case .production: FavoriteDatabaseEnvironment.production.title + case .unassigned: FavoriteDatabaseEnvironment.none.title + } + } + + internal var environment: FavoriteDatabaseEnvironment? { + switch self { + case .all: nil + case .development: .development + case .testing: .testing + case .production: .production + case .unassigned: FavoriteDatabaseEnvironment.none + } + } +} diff --git a/TablePro/Models/Favorites/FavoriteDatabaseGroup.swift b/TablePro/Models/Favorites/FavoriteDatabaseGroup.swift new file mode 100644 index 000000000..236411941 --- /dev/null +++ b/TablePro/Models/Favorites/FavoriteDatabaseGroup.swift @@ -0,0 +1,13 @@ +// +// FavoriteDatabaseGroup.swift +// TablePro +// + +import Foundation + +internal struct FavoriteDatabaseGroup: Equatable, Identifiable, Sendable { + internal let environment: FavoriteDatabaseEnvironment + internal let entries: [FavoriteDatabaseEntry] + + internal var id: String { environment.rawValue } +} diff --git a/TablePro/Models/Favorites/FavoriteDatabaseGrouping.swift b/TablePro/Models/Favorites/FavoriteDatabaseGrouping.swift new file mode 100644 index 000000000..0f6a06124 --- /dev/null +++ b/TablePro/Models/Favorites/FavoriteDatabaseGrouping.swift @@ -0,0 +1,33 @@ +// +// FavoriteDatabaseGrouping.swift +// TablePro +// + +import Foundation + +internal enum FavoriteDatabaseGrouping { + internal static func groups( + entries: Set, + searchText: String, + filter: FavoriteDatabaseEnvironmentFilter + ) -> [FavoriteDatabaseGroup] { + let filtered = entries.filter { entry in + guard filter.environment == nil || entry.environment == filter.environment else { return false } + guard !searchText.isEmpty else { return true } + return entry.database.localizedStandardContains(searchText) + || entry.environment.title.localizedStandardContains(searchText) + } + + return FavoriteDatabaseEnvironment.allCases.compactMap { environment in + let matching = filtered + .filter { $0.environment == environment } + .sorted { + let comparison = $0.database.localizedStandardCompare($1.database) + if comparison != .orderedSame { return comparison == .orderedAscending } + return $0.id < $1.id + } + guard !matching.isEmpty else { return nil } + return FavoriteDatabaseGroup(environment: environment, entries: matching) + } + } +} diff --git a/TablePro/Models/UI/SharedSidebarState.swift b/TablePro/Models/UI/SharedSidebarState.swift index 544ebe7c0..9ca43a44d 100644 --- a/TablePro/Models/UI/SharedSidebarState.swift +++ b/TablePro/Models/UI/SharedSidebarState.swift @@ -112,6 +112,15 @@ final class SharedSidebarState { } } + var favoriteDatabaseEnvironmentFilter: FavoriteDatabaseEnvironmentFilter { + didSet { + AppStorageEnvironment.shared.defaults.set( + favoriteDatabaseEnvironmentFilter.rawValue, + forKey: SidebarPersistenceKey.favoriteDatabaseEnvironmentFilter(connectionId: connectionId) + ) + } + } + var selectedFavorite: FavoriteSelection? { didSet { guard oldValue != selectedFavorite else { return } @@ -156,6 +165,10 @@ final class SharedSidebarState { self.sidebarLayout = SharedSidebarState.defaultLayout } self.databaseFilterSelected = DatabaseTreeFilterStorage.shared.selectedDatabases(connectionId: connectionId) + let environmentFilterKey = SidebarPersistenceKey.favoriteDatabaseEnvironmentFilter(connectionId: connectionId) + self.favoriteDatabaseEnvironmentFilter = AppStorageEnvironment.shared.defaults + .string(forKey: environmentFilterKey) + .flatMap(FavoriteDatabaseEnvironmentFilter.init(rawValue:)) ?? .all self.selectedFavorite = AppStorageEnvironment.shared.defaults.string( forKey: SidebarPersistenceKey.selectedFavorite(connectionId: connectionId) ).flatMap(FavoriteSelection.init(rawValue:)) @@ -170,6 +183,7 @@ final class SharedSidebarState { self.selectedSidebarTab = .tables self.sidebarLayout = .flat self.databaseFilterSelected = [] + self.favoriteDatabaseEnvironmentFilter = .all self.selectedFavorite = nil } diff --git a/TablePro/ViewModels/FavoritesExpansionState.swift b/TablePro/ViewModels/FavoritesExpansionState.swift index 783dee60f..804231132 100644 --- a/TablePro/ViewModels/FavoritesExpansionState.swift +++ b/TablePro/ViewModels/FavoritesExpansionState.swift @@ -13,9 +13,12 @@ internal final class FavoritesExpansionState { private(set) var foldersByConnection: [UUID: Set] = [:] private(set) var linkedNodesByConnection: [UUID: Set] = [:] + private(set) var collapsedDatabaseEnvironmentsByConnection: [UUID: Set] = [:] @ObservationIgnored private let foldersKey = "com.TablePro.favoritesExpandedFolders" @ObservationIgnored private let linkedKey = "com.TablePro.favoritesExpandedLinkedNodes" + @ObservationIgnored private let collapsedDatabaseEnvironmentsKey = + "com.TablePro.favoritesCollapsedDatabaseEnvironments" private init() { load() @@ -29,6 +32,13 @@ internal final class FavoritesExpansionState { linkedNodesByConnection[connectionId, default: []].contains(nodeId) } + func isDatabaseEnvironmentExpanded( + _ environment: FavoriteDatabaseEnvironment, + for connectionId: UUID + ) -> Bool { + !collapsedDatabaseEnvironmentsByConnection[connectionId, default: []].contains(environment) + } + func setFolderExpanded(_ folderId: UUID, expanded: Bool, for connectionId: UUID) { var ids = foldersByConnection[connectionId] ?? [] if expanded { @@ -55,6 +65,32 @@ internal final class FavoritesExpansionState { persistLinkedNodes() } + func setDatabaseEnvironmentExpanded( + _ environment: FavoriteDatabaseEnvironment, + expanded: Bool, + for connectionId: UUID + ) { + var environments = collapsedDatabaseEnvironmentsByConnection[connectionId] ?? [] + if expanded { + guard environments.contains(environment) else { return } + environments.remove(environment) + } else { + guard !environments.contains(environment) else { return } + environments.insert(environment) + } + collapsedDatabaseEnvironmentsByConnection[connectionId] = environments + persistCollapsedDatabaseEnvironments() + } + + func removeConnection(_ connectionId: UUID) { + foldersByConnection.removeValue(forKey: connectionId) + linkedNodesByConnection.removeValue(forKey: connectionId) + collapsedDatabaseEnvironmentsByConnection.removeValue(forKey: connectionId) + persistFolders() + persistLinkedNodes() + persistCollapsedDatabaseEnvironments() + } + private func load() { if let data = AppStorageEnvironment.shared.defaults.data(forKey: foldersKey), let decoded = try? JSONDecoder().decode([UUID: Set].self, from: data) { @@ -64,6 +100,13 @@ internal final class FavoritesExpansionState { let decoded = try? JSONDecoder().decode([UUID: Set].self, from: data) { linkedNodesByConnection = decoded } + if let data = AppStorageEnvironment.shared.defaults.data(forKey: collapsedDatabaseEnvironmentsKey), + let decoded = try? JSONDecoder().decode( + [UUID: Set].self, + from: data + ) { + collapsedDatabaseEnvironmentsByConnection = decoded + } } private func persistFolders() { @@ -77,4 +120,10 @@ internal final class FavoritesExpansionState { AppStorageEnvironment.shared.defaults.set(data, forKey: linkedKey) } } + + private func persistCollapsedDatabaseEnvironments() { + if let data = try? JSONEncoder().encode(collapsedDatabaseEnvironmentsByConnection) { + AppStorageEnvironment.shared.defaults.set(data, forKey: collapsedDatabaseEnvironmentsKey) + } + } } diff --git a/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator+Commands.swift b/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator+Commands.swift index f41eed3e7..aa88fb36a 100644 --- a/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator+Commands.swift +++ b/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator+Commands.swift @@ -67,6 +67,14 @@ extension DatabaseTreeOutlineCoordinator { sidebarState?.clearRecentTables(inDatabase: mainCoordinator?.browseDatabaseName) case .useAsActive(let container): useAsActive(container) + case .setFavoriteDatabase(let database, let environment): + favoriteDatabasesStorage.setFavorite( + database: database, + environment: environment, + connectionId: connectionId + ) + case .removeFavoriteDatabase(let database): + favoriteDatabasesStorage.removeFavorite(database: database, connectionId: connectionId) case .refreshContainers(let targets): refreshContainers(targets) case .copyContainerNames(let targets): diff --git a/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator+Menu.swift b/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator+Menu.swift index 794053821..93c3a36c9 100644 --- a/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator+Menu.swift +++ b/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator+Menu.swift @@ -33,6 +33,12 @@ extension DatabaseTreeOutlineCoordinator: NSMenuDelegate { private func menuContext() -> DatabaseTreeMenuContext { let clicked = clickedNode() let clickedRef = clicked.flatMap(DatabaseTreeSelection.tableRef) + let favoriteDatabaseEnvironment: FavoriteDatabaseEnvironment? + if case .database(let metadata) = clicked?.kind { + favoriteDatabaseEnvironment = self.favoriteDatabaseEnvironment(for: metadata.name) + } else { + favoriteDatabaseEnvironment = nil + } let settings = AppSettingsManager.shared.general return DatabaseTreeMenuContext( clicked: clicked?.kind, @@ -58,6 +64,7 @@ extension DatabaseTreeOutlineCoordinator: NSMenuDelegate { schemaEntityNamePlural: PluginManager.shared.schemaEntityNamePlural(for: databaseType), objectKindTitles: objectKindTitles(), isFavorite: clickedRef.map { isFavorite($0) } ?? false, + favoriteDatabaseEnvironment: favoriteDatabaseEnvironment, showObjectIcons: settings.showObjectIcons, showObjectComments: settings.showObjectComments, rowSize: settings.sidebarRowSize, diff --git a/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator.swift b/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator.swift index c58a527ad..4bd532fc8 100644 --- a/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator.swift +++ b/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator.swift @@ -14,6 +14,7 @@ final class DatabaseTreeOutlineCoordinator: NSObject { internal let service = DatabaseTreeMetadataService.shared private static let cellIdentifier = NSUserInterfaceItemIdentifier("DatabaseTreeCell") private let favoriteTablesStorage: FavoriteTablesStorage + internal let favoriteDatabasesStorage: FavoriteDatabasesStorage internal var connectionId = UUID() internal var databaseType: DatabaseType = .mysql @@ -53,10 +54,30 @@ final class DatabaseTreeOutlineCoordinator: NSObject { internal let schemaService = SchemaService.shared private var favoriteTables: Set = [] - private var favoritesObserver: (any NSObjectProtocol)? + private var favoriteDatabases: Set = [] + private var tableFavoritesObserver: (any NSObjectProtocol)? + private var databaseFavoritesObserver: (any NSObjectProtocol)? + + override convenience init() { + self.init( + favoriteTablesStorage: .shared, + favoriteDatabasesStorage: .shared + ) + } + + convenience init(favoriteTablesStorage: FavoriteTablesStorage) { + self.init( + favoriteTablesStorage: favoriteTablesStorage, + favoriteDatabasesStorage: .shared + ) + } - init(favoriteTablesStorage: FavoriteTablesStorage = .shared) { + init( + favoriteTablesStorage: FavoriteTablesStorage, + favoriteDatabasesStorage: FavoriteDatabasesStorage + ) { self.favoriteTablesStorage = favoriteTablesStorage + self.favoriteDatabasesStorage = favoriteDatabasesStorage super.init() } @@ -72,7 +93,7 @@ final class DatabaseTreeOutlineCoordinator: NSObject { func attach(outlineView: NSOutlineView) { self.outlineView = outlineView - favoritesObserver = NotificationCenter.default.addObserver( + tableFavoritesObserver = NotificationCenter.default.addObserver( forName: .favoriteTablesDidChange, object: nil, queue: .main ) { [weak self] _ in MainActor.assumeIsolated { @@ -81,11 +102,23 @@ final class DatabaseTreeOutlineCoordinator: NSObject { self.refreshVisibleRows() } } + databaseFavoritesObserver = NotificationCenter.default.addObserver( + forName: .favoriteDatabasesDidChange, object: nil, queue: .main + ) { [weak self] _ in + MainActor.assumeIsolated { + guard let self else { return } + self.reloadFavorites() + self.refreshVisibleRows() + } + } } deinit { - if let favoritesObserver { - NotificationCenter.default.removeObserver(favoritesObserver) + if let tableFavoritesObserver { + NotificationCenter.default.removeObserver(tableFavoritesObserver) + } + if let databaseFavoritesObserver { + NotificationCenter.default.removeObserver(databaseFavoritesObserver) } } @@ -238,6 +271,7 @@ final class DatabaseTreeOutlineCoordinator: NSObject { private func reloadFavorites() { favoriteTables = favoriteTablesStorage.favorites(for: connectionId) + favoriteDatabases = favoriteDatabasesStorage.favorites(for: connectionId) } private func favoriteEntry(for ref: DatabaseTreeTableRef) -> FavoriteTablesStorage.FavoriteEntry { @@ -254,8 +288,17 @@ final class DatabaseTreeOutlineCoordinator: NSObject { } private func favoriteState(for node: DatabaseTreeNode) -> Bool { - guard let ref = DatabaseTreeSelection.tableRef(of: node) else { return false } - return isFavorite(ref) + switch node.kind { + case .database(let metadata): + return favoriteDatabaseEnvironment(for: metadata.name) != nil + default: + guard let ref = DatabaseTreeSelection.tableRef(of: node) else { return false } + return isFavorite(ref) + } + } + + internal func favoriteDatabaseEnvironment(for database: String) -> FavoriteDatabaseEnvironment? { + favoriteDatabases.first { $0.database == database }?.environment } internal func toggleFavorite(_ ref: DatabaseTreeTableRef) { diff --git a/TablePro/Views/Sidebar/DatabaseTreeRowView.swift b/TablePro/Views/Sidebar/DatabaseTreeRowView.swift index 19ab10793..37d19f3b1 100644 --- a/TablePro/Views/Sidebar/DatabaseTreeRowView.swift +++ b/TablePro/Views/Sidebar/DatabaseTreeRowView.swift @@ -58,12 +58,7 @@ struct DatabaseTreeRowView: View { case .recentTable(let ref): tableRow(ref) case .database(let metadata): - header( - text: metadata.name, - systemImage: metadata.isSystemDatabase ? "gearshape" : "cylinder", - isActive: metadata.name == context.activeDatabase, - isSystem: metadata.isSystemDatabase - ) + databaseRow(metadata) case .schema(let database, let schema): header( text: schema, @@ -112,6 +107,28 @@ struct DatabaseTreeRowView: View { .lineLimit(1) } + private func databaseRow(_ metadata: DatabaseMetadata) -> some View { + HStack(spacing: 6) { + header( + text: metadata.name, + systemImage: metadata.isSystemDatabase ? "gearshape" : "cylinder", + isActive: metadata.name == context.activeDatabase, + isSystem: metadata.isSystemDatabase + ) + Spacer(minLength: 4) + if isFavorite { + Image(systemName: "star.fill") + .foregroundStyle(.yellow) + .accessibilityHidden(true) + } + } + .accessibilityLabel( + isFavorite + ? String(format: String(localized: "%@, Favorite"), metadata.name) + : metadata.name + ) + } + private func tableRow(_ ref: DatabaseTreeTableRef) -> some View { TableRow( table: ref.table, diff --git a/TablePro/Views/Sidebar/FavoriteDatabaseFilterBar.swift b/TablePro/Views/Sidebar/FavoriteDatabaseFilterBar.swift new file mode 100644 index 000000000..0ab8d2157 --- /dev/null +++ b/TablePro/Views/Sidebar/FavoriteDatabaseFilterBar.swift @@ -0,0 +1,30 @@ +// +// FavoriteDatabaseFilterBar.swift +// TablePro +// + +import SwiftUI + +internal struct FavoriteDatabaseFilterBar: View { + @Binding internal var selection: FavoriteDatabaseEnvironmentFilter + + internal var body: some View { + HStack(spacing: 6) { + Label(String(localized: "Environment"), systemImage: "line.3.horizontal.decrease") + .foregroundStyle(.secondary) + Spacer(minLength: 4) + Picker(String(localized: "Environment"), selection: $selection) { + ForEach(FavoriteDatabaseEnvironmentFilter.allCases, id: \.self) { filter in + Text(filter.title) + .tag(filter) + } + } + .labelsHidden() + .pickerStyle(.menu) + .controlSize(.small) + } + .font(.caption) + .padding(.horizontal, 10) + .padding(.vertical, 5) + } +} diff --git a/TablePro/Views/Sidebar/FavoritesExpansion.swift b/TablePro/Views/Sidebar/FavoritesExpansion.swift index 088e1785a..5ab064b2f 100644 --- a/TablePro/Views/Sidebar/FavoritesExpansion.swift +++ b/TablePro/Views/Sidebar/FavoritesExpansion.swift @@ -30,4 +30,23 @@ internal enum FavoritesExpansion { break } } + + internal static func isDatabaseEnvironmentExpanded( + _ environment: FavoriteDatabaseEnvironment, + connectionId: UUID + ) -> Bool { + FavoritesExpansionState.shared.isDatabaseEnvironmentExpanded(environment, for: connectionId) + } + + internal static func setDatabaseEnvironmentExpanded( + _ environment: FavoriteDatabaseEnvironment, + expanded: Bool, + connectionId: UUID + ) { + FavoritesExpansionState.shared.setDatabaseEnvironmentExpanded( + environment, + expanded: expanded, + for: connectionId + ) + } } diff --git a/TablePro/Views/Sidebar/FavoritesOutlineCoordinator.swift b/TablePro/Views/Sidebar/FavoritesOutlineCoordinator.swift index 87d74fb1b..250756b9b 100644 --- a/TablePro/Views/Sidebar/FavoritesOutlineCoordinator.swift +++ b/TablePro/Views/Sidebar/FavoritesOutlineCoordinator.swift @@ -54,7 +54,11 @@ internal final class FavoritesOutlineCoordinator: NSObject, NSOutline /// outline reloads only when the set of rows or their nesting changed. Depth is part of the /// fingerprint because moving a favorite into a folder can leave the pre-order id list identical. private static func fingerprint(of input: FavoritesOutlineInput) -> String { - var parts: [String] = [input.activeDatabase ?? ""] + var parts: [String] = [input.activeDatabase ?? "", input.isFilteringDatabases ? "filtering" : ""] + parts += input.databaseGroups.flatMap { group in + ["environment|\(group.environment.rawValue)"] + + group.entries.map { "\(group.environment.rawValue)|\($0.id)" } + } parts += input.tables.map(\.id) parts += input.queryNodes.flatMap { Self.identifiers(of: $0, depth: 0) } parts += input.teamQueries.map(\.id) @@ -121,12 +125,33 @@ internal final class FavoritesOutlineCoordinator: NSObject, NSOutline private func build(children parent: FavoritesOutlineNode?) -> [FavoritesOutlineNode] { guard let parent else { return rootNodes() } - guard case .query(let favoriteNode) = parent.kind, let kids = favoriteNode.children else { return [] } - return kids.map { node(id: $0.id, kind: .query($0)) } + switch parent.kind { + case .databaseEnvironment(let group): + return group.entries.map { entry in + node(id: FavoritesOutlineNode.databaseId(entry), kind: .database(entry)) + } + case .query(let favoriteNode): + guard let kids = favoriteNode.children else { return [] } + return kids.map { node(id: $0.id, kind: .query($0)) } + case .header, .database, .table, .teamQuery: + return [] + } } private func rootNodes() -> [FavoritesOutlineNode] { var nodes: [FavoritesOutlineNode] = [] + if !owner.input.databaseGroups.isEmpty { + nodes.append(node( + id: FavoritesOutlineNode.databasesHeaderId, + kind: .header(owner.input.databaseEntityNamePlural) + )) + nodes += owner.input.databaseGroups.map { group in + node( + id: FavoritesOutlineNode.databaseEnvironmentId(group.environment), + kind: .databaseEnvironment(group) + ) + } + } if !owner.input.tables.isEmpty { nodes.append(node(id: FavoritesOutlineNode.tablesHeaderId, kind: .header(String(localized: "Tables")))) nodes += owner.input.tables.map { table in @@ -163,8 +188,20 @@ internal final class FavoritesOutlineCoordinator: NSObject, NSOutline private func applyExpansion(to nodes: [FavoritesOutlineNode], in outlineView: NSOutlineView) { for node in nodes where node.isExpandable { - guard case .query(let favoriteNode) = node.kind else { continue } - if FavoritesExpansion.isExpanded(favoriteNode, connectionId: owner.input.connectionId) { + let shouldExpand: Bool + switch node.kind { + case .databaseEnvironment(let group): + shouldExpand = owner.input.isFilteringDatabases || FavoritesExpansion + .isDatabaseEnvironmentExpanded(group.environment, connectionId: owner.input.connectionId) + case .query(let favoriteNode): + shouldExpand = FavoritesExpansion.isExpanded( + favoriteNode, + connectionId: owner.input.connectionId + ) + case .header, .database, .table, .teamQuery: + shouldExpand = false + } + if shouldExpand { outlineView.expandItem(node) applyExpansion(to: children(of: node), in: outlineView) } else { @@ -183,9 +220,24 @@ internal final class FavoritesOutlineCoordinator: NSObject, NSOutline private func recordExpansion(from notification: Notification, expanded: Bool) { guard !isApplyingExpansion, - let node = notification.userInfo?["NSObject"] as? FavoritesOutlineNode, - case .query(let favoriteNode) = node.kind else { return } - FavoritesExpansion.setExpanded(favoriteNode, expanded: expanded, connectionId: owner.input.connectionId) + let node = notification.userInfo?["NSObject"] as? FavoritesOutlineNode else { return } + switch node.kind { + case .databaseEnvironment(let group): + guard !owner.input.isFilteringDatabases else { return } + FavoritesExpansion.setDatabaseEnvironmentExpanded( + group.environment, + expanded: expanded, + connectionId: owner.input.connectionId + ) + case .query(let favoriteNode): + FavoritesExpansion.setExpanded( + favoriteNode, + expanded: expanded, + connectionId: owner.input.connectionId + ) + case .header, .database, .table, .teamQuery: + break + } } // MARK: - Selection @@ -270,7 +322,9 @@ internal final class FavoritesOutlineCoordinator: NSObject, NSOutline let context = FavoritesMenuContext( clicked: clicked?.kind, allFolders: owner.input.allFolders, - teamLibraryAvailable: owner.input.teamLibraryAvailable + teamLibraryAvailable: owner.input.teamLibraryAvailable, + databaseEntityName: owner.input.databaseEntityName, + activeDatabase: owner.input.activeDatabase ) SidebarMenuBuilder.fill( menu, diff --git a/TablePro/Views/Sidebar/FavoritesOutlineNode.swift b/TablePro/Views/Sidebar/FavoritesOutlineNode.swift index bad7df27c..08c39982a 100644 --- a/TablePro/Views/Sidebar/FavoritesOutlineNode.swift +++ b/TablePro/Views/Sidebar/FavoritesOutlineNode.swift @@ -13,6 +13,8 @@ import Foundation internal final class FavoritesOutlineNode: SidebarOutlineNode { internal enum Kind { case header(String) + case databaseEnvironment(FavoriteDatabaseGroup) + case database(FavoriteDatabaseEntry) case table(TableInfo) case query(FavoriteNode) case teamQuery(id: String, name: String, publishedBy: String?) @@ -27,8 +29,14 @@ internal final class FavoritesOutlineNode: SidebarOutlineNode { } internal var isExpandable: Bool { - guard case .query(let node) = kind else { return false } - return node.isFolder + switch kind { + case .databaseEnvironment: + return true + case .query(let node): + return node.isFolder + case .header, .database, .table, .teamQuery: + return false + } } /// Tables, Queries and Team Library are buckets rather than objects, so AppKit draws them as @@ -39,6 +47,7 @@ internal final class FavoritesOutlineNode: SidebarOutlineNode { } internal static let tablesHeaderId = "favorites\u{1}header\u{1}tables" + internal static let databasesHeaderId = "favorites\u{1}header\u{1}databases" internal static let queriesHeaderId = "favorites\u{1}header\u{1}queries" internal static let teamHeaderId = "favorites\u{1}header\u{1}team" @@ -48,5 +57,13 @@ internal final class FavoritesOutlineNode: SidebarOutlineNode { ["favtable", database ?? "", schema ?? "", name].joined(separator: "\u{1}") } + internal static func databaseEnvironmentId(_ environment: FavoriteDatabaseEnvironment) -> String { + "favdatabaseenv\u{1}\(environment.rawValue)" + } + + internal static func databaseId(_ entry: FavoriteDatabaseEntry) -> String { + "favdatabase\u{1}\(entry.id)" + } + internal static func teamQueryId(_ clientId: String) -> String { "favteam\u{1}\(clientId)" } } diff --git a/TablePro/Views/Sidebar/FavoritesOutlineSelection.swift b/TablePro/Views/Sidebar/FavoritesOutlineSelection.swift index aae0d10e4..722aa2154 100644 --- a/TablePro/Views/Sidebar/FavoritesOutlineSelection.swift +++ b/TablePro/Views/Sidebar/FavoritesOutlineSelection.swift @@ -21,6 +21,10 @@ internal enum FavoritesOutlineSelection { switch kind { case .header: return nil + case .databaseEnvironment(let group): + return .node(id: FavoritesOutlineNode.databaseEnvironmentId(group.environment)) + case .database(let entry): + return .node(id: FavoritesOutlineNode.databaseId(entry)) case .table(let table): return .table(database: database, schema: table.schema, name: table.name) case .query(let node): @@ -45,6 +49,10 @@ internal enum FavoritesOutlineSelection { switch kind { case .header: return nil + case .databaseEnvironment(let group): + return group.environment.title + case .database(let entry): + return entry.database case .table(let table): return table.name case .teamQuery(_, let name, _): diff --git a/TablePro/Views/Sidebar/FavoritesOutlineView.swift b/TablePro/Views/Sidebar/FavoritesOutlineView.swift index d9eabef15..c6a6eae4c 100644 --- a/TablePro/Views/Sidebar/FavoritesOutlineView.swift +++ b/TablePro/Views/Sidebar/FavoritesOutlineView.swift @@ -11,6 +11,10 @@ import SwiftUI internal struct FavoritesOutlineInput { internal let connectionId: UUID internal let activeDatabase: String? + internal let databaseGroups: [FavoriteDatabaseGroup] + internal let databaseEntityName: String + internal let databaseEntityNamePlural: String + internal let isFilteringDatabases: Bool internal let tables: [TableInfo] internal let queryNodes: [FavoriteNode] internal let teamQueries: [FavoritesOutlineTeamQuery] diff --git a/TablePro/Views/Sidebar/FavoritesTabView.swift b/TablePro/Views/Sidebar/FavoritesTabView.swift index 69402febc..f58d10b0a 100644 --- a/TablePro/Views/Sidebar/FavoritesTabView.swift +++ b/TablePro/Views/Sidebar/FavoritesTabView.swift @@ -6,6 +6,7 @@ internal struct FavoritesTabView: View { @State private var viewModel: FavoritesSidebarViewModel @State private var favoriteTables: [FavoriteTablesStorage.FavoriteEntry] = [] + @State private var favoriteDatabases: Set = [] @State private var folderToDelete: SQLFavoriteFolder? @State private var showDeleteFolderAlert = false @State private var linkedFileToTrash: LinkedSQLFavorite? @@ -14,6 +15,7 @@ internal struct FavoritesTabView: View { @State private var linkedFolderToRemove: LinkedSQLFolder? @State private var showRemoveLinkedFolderAlert = false let connectionId: UUID + let databaseType: DatabaseType @Bindable private var sharedSidebarState: SharedSidebarState let tables: [TableInfo] private var coordinator: MainContentCoordinator? @@ -24,6 +26,22 @@ internal struct FavoritesTabView: View { return name.isEmpty ? nil : name } + private var databaseGroups: [FavoriteDatabaseGroup] { + FavoriteDatabaseGrouping.groups( + entries: favoriteDatabases, + searchText: searchText, + filter: sharedSidebarState.favoriteDatabaseEnvironmentFilter + ) + } + + private var databaseEntityName: String { + PluginManager.shared.containerEntityName(for: databaseType) + } + + private var databaseEntityNamePlural: String { + PluginManager.shared.containerEntityNamePlural(for: databaseType) + } + private var availableFavoriteTables: [TableInfo] { let database = activeDatabase let tablesByKey = Dictionary( @@ -40,8 +58,15 @@ internal struct FavoritesTabView: View { "\(schema ?? "")\u{1}\(name)" } - init(connectionId: UUID, sharedSidebarState: SharedSidebarState, tables: [TableInfo], coordinator: MainContentCoordinator?) { + init( + connectionId: UUID, + databaseType: DatabaseType, + sharedSidebarState: SharedSidebarState, + tables: [TableInfo], + coordinator: MainContentCoordinator? + ) { self.connectionId = connectionId + self.databaseType = databaseType self.sharedSidebarState = sharedSidebarState self.tables = tables _viewModel = State(wrappedValue: FavoritesSidebarViewModel(connectionId: connectionId)) @@ -50,31 +75,50 @@ internal struct FavoritesTabView: View { var body: some View { VStack(spacing: 0) { + if !favoriteDatabases.isEmpty { + FavoriteDatabaseFilterBar(selection: $sharedSidebarState.favoriteDatabaseEnvironmentFilter) + Divider() + } Group { let items = viewModel.filteredNodes(searchText: searchText) + let groups = databaseGroups let filteredTables = searchText.isEmpty ? availableFavoriteTables : availableFavoriteTables.filter { $0.name.localizedCaseInsensitiveContains(searchText) } - if !viewModel.isInitialLoadComplete && viewModel.nodes.isEmpty && filteredTables.isEmpty { + if !viewModel.isInitialLoadComplete + && viewModel.nodes.isEmpty + && filteredTables.isEmpty + && favoriteDatabases.isEmpty { ProgressView() .frame(maxWidth: .infinity, maxHeight: .infinity) - } else if viewModel.nodes.isEmpty && filteredTables.isEmpty && teamLibraryQueries.isEmpty && searchText.isEmpty { + } else if viewModel.nodes.isEmpty + && filteredTables.isEmpty + && teamLibraryQueries.isEmpty + && favoriteDatabases.isEmpty + && searchText.isEmpty { emptyState - } else if items.isEmpty && filteredTables.isEmpty && teamLibraryQueries.isEmpty { + } else if items.isEmpty + && groups.isEmpty + && filteredTables.isEmpty + && teamLibraryQueries.isEmpty { noMatchState } else { - favoritesList(items, filteredTables: filteredTables) + favoritesList(items, databaseGroups: groups, filteredTables: filteredTables) } } } .onAppear { viewModel.startWatchingLinkedFolders() favoriteTables = viewModel.favoriteTables(for: connectionId) + favoriteDatabases = FavoriteDatabasesStorage.shared.favorites(for: connectionId) } .onReceive(NotificationCenter.default.publisher(for: .favoriteTablesDidChange)) { _ in favoriteTables = viewModel.favoriteTables(for: connectionId) } + .onReceive(NotificationCenter.default.publisher(for: .favoriteDatabasesDidChange)) { _ in + favoriteDatabases = FavoriteDatabasesStorage.shared.favorites(for: connectionId) + } .sheet(item: $viewModel.editDialogItem) { item in FavoriteEditDialog( connectionId: connectionId, @@ -220,12 +264,17 @@ internal struct FavoritesTabView: View { /// container changed. private func favoritesList( _ items: [FavoriteNode], + databaseGroups: [FavoriteDatabaseGroup], filteredTables: [TableInfo] ) -> some View { FavoritesOutlineView( input: FavoritesOutlineInput( connectionId: connectionId, activeDatabase: activeDatabase, + databaseGroups: databaseGroups, + databaseEntityName: databaseEntityName, + databaseEntityNamePlural: databaseEntityNamePlural, + isFilteringDatabases: !searchText.isEmpty, tables: filteredTables, queryNodes: items, teamQueries: teamLibraryQueries.map { @@ -278,6 +327,10 @@ internal struct FavoritesTabView: View { Text(title) .font(.caption.weight(.semibold)) .foregroundStyle(.secondary) + case .databaseEnvironment(let group): + databaseEnvironmentRow(group) + case .database(let entry): + favoriteDatabaseRow(entry) case .table(let table): favoriteTableRow(table: table) case .query(let favoriteNode): @@ -287,6 +340,32 @@ internal struct FavoritesTabView: View { } } + private func databaseEnvironmentRow(_ group: FavoriteDatabaseGroup) -> some View { + Label { + HStack(spacing: 6) { + Text(group.environment.title) + .lineLimit(1) + Text(group.entries.count, format: .number) + .font(.caption) + .foregroundStyle(.secondary) + } + } icon: { + Image(systemName: group.environment.iconName) + } + .sidebarRowIcon(visible: AppSettingsManager.shared.general.showObjectIcons) + } + + private func favoriteDatabaseRow(_ entry: FavoriteDatabaseEntry) -> some View { + Label(entry.database, systemImage: "cylinder") + .sidebarRowIcon(visible: AppSettingsManager.shared.general.showObjectIcons) + .lineLimit(1) + .accessibilityLabel(String( + format: String(localized: "Favorite %@, %@"), + databaseEntityName, + entry.database + )) + } + @ViewBuilder private func favoriteQueryRow(_ node: FavoriteNode) -> some View { switch node.content { @@ -359,6 +438,10 @@ internal struct FavoritesTabView: View { switch kind { case .header: break + case .databaseEnvironment: + break + case .database(let entry): + useDatabase(entry) case .table(let table): coordinator?.openTableTab(table, activateGridFocus: true) case .query(let node): @@ -379,8 +462,13 @@ internal struct FavoritesTabView: View { private func deleteNode(_ kind: FavoritesOutlineNode.Kind) { switch kind { - case .header, .teamQuery: + case .header, .databaseEnvironment, .teamQuery: break + case .database(let entry): + FavoriteDatabasesStorage.shared.removeFavorite( + database: entry.database, + connectionId: connectionId + ) case .table(let table): FavoriteTablesStorage.shared.removeFavorite( name: table.name, schema: table.schema, database: activeDatabase, connectionId: connectionId @@ -404,6 +492,19 @@ internal struct FavoritesTabView: View { /// state this view already owns, so the alert stays where the rest of the presentation is. private func perform(_ command: FavoritesMenuCommand) { switch command { + case .useDatabase(let entry): + useDatabase(entry) + case .setDatabaseEnvironment(let entry, let environment): + FavoriteDatabasesStorage.shared.setFavorite( + database: entry.database, + environment: environment, + connectionId: connectionId + ) + case .removeDatabaseFavorite(let entry): + FavoriteDatabasesStorage.shared.removeFavorite( + database: entry.database, + connectionId: connectionId + ) case .openTable(let table): coordinator?.openTableTab(table, activateGridFocus: true) case .showERDiagram: @@ -464,6 +565,11 @@ internal struct FavoritesTabView: View { } } + private func useDatabase(_ entry: FavoriteDatabaseEntry) { + guard entry.database != activeDatabase else { return } + Task { await coordinator?.switchDatabase(to: entry.database) } + } + // MARK: - Empty States /// An empty list has no row to right-click, so the commands the background menu carries have to diff --git a/TablePro/Views/Sidebar/Menu/DatabaseTreeMenuSpec.swift b/TablePro/Views/Sidebar/Menu/DatabaseTreeMenuSpec.swift index 373976c4d..67e13e478 100644 --- a/TablePro/Views/Sidebar/Menu/DatabaseTreeMenuSpec.swift +++ b/TablePro/Views/Sidebar/Menu/DatabaseTreeMenuSpec.swift @@ -28,6 +28,7 @@ internal struct DatabaseTreeMenuContext { internal let schemaEntityNamePlural: String internal let objectKindTitles: [SidebarObjectKind: String] internal let isFavorite: Bool + internal let favoriteDatabaseEnvironment: FavoriteDatabaseEnvironment? internal let showObjectIcons: Bool internal let showObjectComments: Bool internal let rowSize: SidebarRowSizePreference @@ -216,7 +217,16 @@ internal enum DatabaseTreeMenuSpec { items.append(.command(String(localized: "Refresh"), .refreshContainers(targets))) items.append(.command(copyNamesTitle(count: targets.count), .copyContainerNames(targets))) + if targets.count == 1, clicked.kind == .database { + items.append(.separator) + items += favoriteDatabaseItems( + database: clicked.database, + currentEnvironment: context.favoriteDatabaseEnvironment + ) + } + if ExportPreselection.canPreselect(containers: targets, activeDatabase: context.activeDatabase) { + items.append(.separator) items.append(.command(String(localized: "Export…"), .exportContainers(targets))) } guard !droppable.isEmpty else { return items } @@ -225,6 +235,26 @@ internal enum DatabaseTreeMenuSpec { return items } + private static func favoriteDatabaseItems( + database: String, + currentEnvironment: FavoriteDatabaseEnvironment? + ) -> [DatabaseTreeMenuItem] { + let environmentItems: [DatabaseTreeMenuItem] = FavoriteDatabaseEnvironment.allCases.map { environment in + .command(SidebarMenuEntry( + title: environment.menuTitle, + command: .setFavoriteDatabase(database: database, environment: environment), + isOn: currentEnvironment == environment + )) + } + guard currentEnvironment != nil else { + return [.submenu(title: String(localized: "Add to Favorites"), items: environmentItems)] + } + return [ + .submenu(title: String(localized: "Environment"), items: environmentItems), + .destructive(String(localized: "Remove from Favorites"), .removeFavoriteDatabase(database)) + ] + } + private static func isActive(_ container: DatabaseContainerRef, context: DatabaseTreeMenuContext) -> Bool { switch container.kind { case .database: diff --git a/TablePro/Views/Sidebar/Menu/FavoritesMenuCommand.swift b/TablePro/Views/Sidebar/Menu/FavoritesMenuCommand.swift index 6ee58aa98..1822cce2a 100644 --- a/TablePro/Views/Sidebar/Menu/FavoritesMenuCommand.swift +++ b/TablePro/Views/Sidebar/Menu/FavoritesMenuCommand.swift @@ -11,6 +11,10 @@ import TableProPluginKit /// Several of these end in a confirmation the view owns, so the command names the intent and the /// view decides how to ask. Keeping that split is what lets the whole menu be a pure function. internal enum FavoritesMenuCommand: Equatable { + case useDatabase(FavoriteDatabaseEntry) + case setDatabaseEnvironment(FavoriteDatabaseEntry, FavoriteDatabaseEnvironment) + case removeDatabaseFavorite(FavoriteDatabaseEntry) + case openTable(TableInfo) case showERDiagram case removeTableFavorite(TableInfo) diff --git a/TablePro/Views/Sidebar/Menu/FavoritesMenuSpec.swift b/TablePro/Views/Sidebar/Menu/FavoritesMenuSpec.swift index 9b0e70627..3234d31d3 100644 --- a/TablePro/Views/Sidebar/Menu/FavoritesMenuSpec.swift +++ b/TablePro/Views/Sidebar/Menu/FavoritesMenuSpec.swift @@ -10,15 +10,21 @@ internal struct FavoritesMenuContext { internal let clicked: FavoritesOutlineNode.Kind? internal let allFolders: [SQLFavoriteFolder] internal let teamLibraryAvailable: Bool + internal let databaseEntityName: String + internal let activeDatabase: String? internal init( clicked: FavoritesOutlineNode.Kind?, allFolders: [SQLFavoriteFolder] = [], - teamLibraryAvailable: Bool = false + teamLibraryAvailable: Bool = false, + databaseEntityName: String = "Database", + activeDatabase: String? = nil ) { self.clicked = clicked self.allFolders = allFolders self.teamLibraryAvailable = teamLibraryAvailable + self.databaseEntityName = databaseEntityName + self.activeDatabase = activeDatabase } } @@ -30,6 +36,10 @@ internal enum FavoritesMenuSpec { private static func rawItems(for context: FavoritesMenuContext) -> [FavoritesMenuItem] { guard let clicked = context.clicked else { return backgroundItems(context) } switch clicked { + case .databaseEnvironment: + return backgroundItems(context) + case .database(let entry): + return databaseItems(entry, context: context) case .table(let table): return tableItems(table) case .query(let node): @@ -39,6 +49,38 @@ internal enum FavoritesMenuSpec { } } + private static func databaseItems( + _ entry: FavoriteDatabaseEntry, + context: FavoritesMenuContext + ) -> [FavoritesMenuItem] { + var items: [FavoritesMenuItem] = [] + if entry.database != context.activeDatabase { + items.append(.command( + String( + format: String(localized: "Use as Active %@"), + context.databaseEntityName + ), + .useDatabase(entry) + )) + } + items.append(.submenu( + title: String(localized: "Environment"), + items: FavoriteDatabaseEnvironment.allCases.map { environment in + .command(SidebarMenuEntry( + title: environment.menuTitle, + command: .setDatabaseEnvironment(entry, environment), + isOn: entry.environment == environment + )) + } + )) + items.append(.separator) + items.append(.destructive( + String(localized: "Remove from Favorites"), + .removeDatabaseFavorite(entry) + )) + return items + } + private static func tableItems(_ table: TableInfo) -> [FavoritesMenuItem] { [ .command(String(localized: "Open Table"), .openTable(table)), diff --git a/TablePro/Views/Sidebar/Menu/SidebarMenuCommand.swift b/TablePro/Views/Sidebar/Menu/SidebarMenuCommand.swift index 3ab656d04..d5eddd3d1 100644 --- a/TablePro/Views/Sidebar/Menu/SidebarMenuCommand.swift +++ b/TablePro/Views/Sidebar/Menu/SidebarMenuCommand.swift @@ -35,6 +35,8 @@ internal enum SidebarMenuCommand: Equatable { case removeRecent(DatabaseTreeTableRef) case clearRecents case useAsActive(DatabaseContainerRef) + case setFavoriteDatabase(database: String, environment: FavoriteDatabaseEnvironment) + case removeFavoriteDatabase(String) case refreshContainers([DatabaseContainerRef]) case copyContainerNames([DatabaseContainerRef]) case exportContainers([DatabaseContainerRef]) diff --git a/TablePro/Views/Sidebar/SidebarPersistenceKey.swift b/TablePro/Views/Sidebar/SidebarPersistenceKey.swift index feec084d6..5ea0ed005 100644 --- a/TablePro/Views/Sidebar/SidebarPersistenceKey.swift +++ b/TablePro/Views/Sidebar/SidebarPersistenceKey.swift @@ -24,6 +24,10 @@ enum SidebarPersistenceKey { "sidebar.selectedFavoriteNodeId.\(connectionId.uuidString)" } + static func favoriteDatabaseEnvironmentFilter(connectionId: UUID) -> String { + "sidebar.favoriteDatabaseEnvironmentFilter.\(connectionId.uuidString)" + } + static let defaultLayout = "sidebar.defaultLayout" static func layout(connectionId: UUID) -> String { diff --git a/TablePro/Views/Sidebar/SidebarView.swift b/TablePro/Views/Sidebar/SidebarView.swift index ba7ebb154..d14b3f247 100644 --- a/TablePro/Views/Sidebar/SidebarView.swift +++ b/TablePro/Views/Sidebar/SidebarView.swift @@ -95,6 +95,7 @@ struct SidebarView: View { if let coordinator { FavoritesTabView( connectionId: connectionId, + databaseType: viewModel.databaseType, sharedSidebarState: sidebarState, tables: tables, coordinator: coordinator diff --git a/TableProTests/Core/Storage/FavoriteDatabasesStorageTests.swift b/TableProTests/Core/Storage/FavoriteDatabasesStorageTests.swift new file mode 100644 index 000000000..fa4dcfd1f --- /dev/null +++ b/TableProTests/Core/Storage/FavoriteDatabasesStorageTests.swift @@ -0,0 +1,116 @@ +// +// FavoriteDatabasesStorageTests.swift +// TableProTests +// + +import Foundation +import Testing + +@testable import TablePro + +@MainActor +@Suite("FavoriteDatabasesStorage") +struct FavoriteDatabasesStorageTests { + private func makeStorage() throws -> (FavoriteDatabasesStorage, UserDefaults) { + let suite = "FavoriteDatabasesStorageTests.\(UUID().uuidString)" + let defaults = try #require(UserDefaults(suiteName: suite)) + defaults.removePersistentDomain(forName: suite) + return (FavoriteDatabasesStorage(defaults: defaults), defaults) + } + + @Test("Favorite identity includes the connection") + func favoritesAreConnectionScoped() throws { + let (storage, _) = try makeStorage() + let first = UUID() + let second = UUID() + + storage.setFavorite(database: "app", environment: .development, connectionId: first) + storage.setFavorite(database: "app", environment: .production, connectionId: second) + + #expect(storage.favorites(for: first).first?.environment == .development) + #expect(storage.favorites(for: second).first?.environment == .production) + } + + @Test("Changing an environment replaces the favorite instead of duplicating it") + func environmentUpdateReplacesEntry() throws { + let (storage, _) = try makeStorage() + let connectionId = UUID() + + storage.setFavorite(database: "orders", environment: .development, connectionId: connectionId) + storage.setFavorite(database: "orders", environment: .testing, connectionId: connectionId) + + let entries = storage.favorites(for: connectionId) + #expect(entries.count == 1) + #expect(entries.first?.environment == .testing) + } + + @Test("Removing one database preserves the connection's other favorites") + func removePreservesOtherEntries() throws { + let (storage, _) = try makeStorage() + let connectionId = UUID() + storage.setFavorite(database: "app", environment: .development, connectionId: connectionId) + storage.setFavorite(database: "audit", environment: .testing, connectionId: connectionId) + + storage.removeFavorite(database: "app", connectionId: connectionId) + + #expect(storage.favorites(for: connectionId).map(\.database) == ["audit"]) + } + + @Test("An unknown stored environment falls back to Unassigned") + func unknownEnvironmentFallsBack() throws { + let (storage, defaults) = try makeStorage() + let connectionId = UUID() + let json = """ + [{"connectionId":"\(connectionId.uuidString)","database":"future","environment":"staging"}] + """ + defaults.set( + Data(json.utf8), + forKey: "com.TablePro.favoriteDatabases.\(connectionId.uuidString)" + ) + + #expect( + storage.favorites(for: connectionId).first?.environment + == FavoriteDatabaseEnvironment.none + ) + } + + @Test("Malformed storage is contained to the affected connection") + func malformedStorageReturnsEmpty() throws { + let (storage, defaults) = try makeStorage() + let connectionId = UUID() + defaults.set( + Data("not-json".utf8), + forKey: "com.TablePro.favoriteDatabases.\(connectionId.uuidString)" + ) + + #expect(storage.favorites(for: connectionId).isEmpty) + } + + @Test("Stored entries cannot cross connection boundaries") + func ignoresEntriesFromAnotherConnection() throws { + let (storage, defaults) = try makeStorage() + let requestedConnectionId = UUID() + let foreignConnectionId = UUID() + let json = """ + [{"connectionId":"\(foreignConnectionId.uuidString)","database":"private","environment":"production"}] + """ + defaults.set( + Data(json.utf8), + forKey: "com.TablePro.favoriteDatabases.\(requestedConnectionId.uuidString)" + ) + + #expect(storage.favorites(for: requestedConnectionId).isEmpty) + } + + @Test("Deleting a connection removes its persisted favorites") + func removeConnectionFavorites() throws { + let (storage, defaults) = try makeStorage() + let connectionId = UUID() + storage.setFavorite(database: "app", environment: .production, connectionId: connectionId) + + storage.removeFavorites(for: connectionId) + + #expect(storage.favorites(for: connectionId).isEmpty) + #expect(defaults.object(forKey: "com.TablePro.favoriteDatabases.\(connectionId.uuidString)") == nil) + } +} diff --git a/TableProTests/Models/FavoriteDatabaseGroupingTests.swift b/TableProTests/Models/FavoriteDatabaseGroupingTests.swift new file mode 100644 index 000000000..99a9a58be --- /dev/null +++ b/TableProTests/Models/FavoriteDatabaseGroupingTests.swift @@ -0,0 +1,97 @@ +// +// FavoriteDatabaseGroupingTests.swift +// TableProTests +// + +import Foundation +import Testing + +@testable import TablePro + +@Suite("Favorite database grouping") +struct FavoriteDatabaseGroupingTests { + private let connectionId = UUID() + + private func entry(_ database: String, _ environment: FavoriteDatabaseEnvironment) -> FavoriteDatabaseEntry { + FavoriteDatabaseEntry( + connectionId: connectionId, + database: database, + environment: environment + ) + } + + @Test("Groups use environment order and database names sort naturally") + func deterministicGrouping() { + let groups = FavoriteDatabaseGrouping.groups( + entries: [ + entry("prod", .production), + entry("dev10", .development), + entry("dev2", .development), + entry("misc", .none), + entry("test", .testing) + ], + searchText: "", + filter: .all + ) + + #expect(groups.map(\.environment) == [.development, .testing, .production, .none]) + #expect(groups.first?.entries.map(\.database) == ["dev2", "dev10"]) + } + + @Test("Environment filter keeps only its group") + func filtersByEnvironment() { + let entries: Set = [ + entry("dev", .development), + entry("misc", .none), + entry("prod", .production) + ] + let groups = FavoriteDatabaseGrouping.groups( + entries: entries, + searchText: "", + filter: .production + ) + let unassigned = FavoriteDatabaseGrouping.groups( + entries: entries, + searchText: "", + filter: .unassigned + ) + + #expect(groups.count == 1) + #expect(groups.first?.entries.map(\.database) == ["prod"]) + #expect(unassigned.count == 1) + #expect(unassigned.first?.entries.map(\.database) == ["misc"]) + } + + @Test("Search matches a database or its environment title") + func searchMatchesNamesAndEnvironment() { + let entries: Set = [ + entry("billing", .development), + entry("warehouse", .production) + ] + + let nameMatch = FavoriteDatabaseGrouping.groups( + entries: entries, + searchText: "bill", + filter: .all + ) + let environmentMatch = FavoriteDatabaseGrouping.groups( + entries: entries, + searchText: "Production", + filter: .all + ) + + #expect(nameMatch.flatMap(\.entries).map(\.database) == ["billing"]) + #expect(environmentMatch.flatMap(\.entries).map(\.database) == ["warehouse"]) + } + + @Test("No matches produce no empty groups") + func hidesEmptyGroups() { + let groups = FavoriteDatabaseGrouping.groups( + entries: [entry("app", .development)], + searchText: "missing", + filter: .all + ) + + #expect(groups.isEmpty) + } +} diff --git a/TableProTests/Models/SharedSidebarStateTests.swift b/TableProTests/Models/SharedSidebarStateTests.swift index 87439e364..8f75b4343 100644 --- a/TableProTests/Models/SharedSidebarStateTests.swift +++ b/TableProTests/Models/SharedSidebarStateTests.swift @@ -8,13 +8,12 @@ // import Foundation +@testable import TablePro import TableProPluginKit import Testing -@testable import TablePro @Suite("SharedSidebarState") struct SharedSidebarStateTests { - // MARK: - Registry @Test("forConnection returns same instance for same UUID") @@ -93,6 +92,21 @@ struct SharedSidebarStateTests { SharedSidebarState.removeConnection(id) } + @Test("favorite database environment filter persists for its connection") + @MainActor + func favoriteDatabaseEnvironmentFilterPersists() { + let id = UUID() + let first = SharedSidebarState.forConnection(id) + first.favoriteDatabaseEnvironmentFilter = .testing + SharedSidebarState.removeConnection(id) + + let restored = SharedSidebarState.forConnection(id) + #expect(restored.favoriteDatabaseEnvironmentFilter == .testing) + + restored.favoriteDatabaseEnvironmentFilter = .all + SharedSidebarState.removeConnection(id) + } + @Test("filter text is independent across different connections") @MainActor func filterTextIndependentAcrossConnections() { diff --git a/TableProTests/Views/Sidebar/DatabaseTreeMenuSpecTests.swift b/TableProTests/Views/Sidebar/DatabaseTreeMenuSpecTests.swift index 76414f764..614e17f82 100644 --- a/TableProTests/Views/Sidebar/DatabaseTreeMenuSpecTests.swift +++ b/TableProTests/Views/Sidebar/DatabaseTreeMenuSpecTests.swift @@ -25,6 +25,7 @@ struct DatabaseTreeMenuSpecTests { selectedContainers: [DatabaseContainerRef] = [], isReadOnly: Bool = false, isFavorite: Bool = false, + favoriteDatabaseEnvironment: FavoriteDatabaseEnvironment? = nil, activeDatabase: String? = "app", activeSchema: String? = "public", canFilterDatabases: Bool = false, @@ -54,6 +55,7 @@ struct DatabaseTreeMenuSpecTests { schemaEntityNamePlural: "Schemas", objectKindTitles: [.table: "Tables"], isFavorite: isFavorite, + favoriteDatabaseEnvironment: favoriteDatabaseEnvironment, showObjectIcons: true, showObjectComments: false, rowSize: .matchSystem, @@ -264,6 +266,33 @@ struct DatabaseTreeMenuSpecTests { }) } + @Test("An unfavorited database offers every environment under Add to Favorites") + func databaseCanBeFavoritedWithEnvironment() { + let database = DatabaseMetadata.minimal(name: "analytics", isSystem: false) + let items = DatabaseTreeMenuSpec.items(for: context(clicked: .database(database))) + let issued = commands(items) + + #expect(titles(items).contains(String(localized: "Add to Favorites"))) + for environment in FavoriteDatabaseEnvironment.allCases { + #expect(issued.contains(.setFavoriteDatabase(database: "analytics", environment: environment))) + } + #expect(!issued.contains(.removeFavoriteDatabase("analytics"))) + } + + @Test("A favorite database can change environment or be removed") + func favoriteDatabaseMenuReflectsState() { + let database = DatabaseMetadata.minimal(name: "analytics", isSystem: false) + let items = DatabaseTreeMenuSpec.items(for: context( + clicked: .database(database), + favoriteDatabaseEnvironment: .production + )) + let issued = commands(items) + + #expect(titles(items).contains(String(localized: "Environment"))) + #expect(issued.contains(.removeFavoriteDatabase("analytics"))) + #expect(issued.contains(.setFavoriteDatabase(database: "analytics", environment: .development))) + } + // MARK: - Shape @Test("A menu never opens or closes on a separator, and never doubles one") diff --git a/TableProTests/Views/Sidebar/FavoritesMenuSpecTests.swift b/TableProTests/Views/Sidebar/FavoritesMenuSpecTests.swift index f1475a733..8fc17d2ce 100644 --- a/TableProTests/Views/Sidebar/FavoritesMenuSpecTests.swift +++ b/TableProTests/Views/Sidebar/FavoritesMenuSpecTests.swift @@ -41,6 +41,10 @@ struct FavoritesMenuSpecTests { TableInfo(name: "orders", type: .table, rowCount: nil, schema: "public") } + private func database() -> FavoriteDatabaseEntry { + FavoriteDatabaseEntry(connectionId: UUID(), database: "analytics", environment: .development) + } + private func moveTargets(_ issued: [FavoritesMenuCommand]) -> [UUID?] { issued.compactMap { command in guard case .moveFavorite(_, let target) = command else { return nil } @@ -57,6 +61,8 @@ struct FavoritesMenuSpecTests { let kinds: [FavoritesOutlineNode.Kind?] = [ nil, .header("Queries"), + .databaseEnvironment(FavoriteDatabaseGroup(environment: .development, entries: [database()])), + .database(database()), .table(table()), .teamQuery(id: "1", name: "Shared", publishedBy: "Sam"), .query(.favorite(favorite())), @@ -76,6 +82,7 @@ struct FavoritesMenuSpecTests { func separatorsAreCollapsed() { let kinds: [FavoritesOutlineNode.Kind?] = [ nil, + .database(database()), .table(table()), .query(.favorite(favorite())), .query(.folder(SQLFavoriteFolder(name: "Reports"), children: [])) @@ -111,6 +118,32 @@ struct FavoritesMenuSpecTests { #expect(!without.contains(.publishSavedQueriesToTeam)) } + @Test("A database favorite can switch, change environment, or be removed") + func databaseFavoriteCommands() { + let entry = database() + let issued = commands(FavoritesMenuSpec.items(for: FavoritesMenuContext( + clicked: .database(entry), + databaseEntityName: "Database", + activeDatabase: "other" + ))) + + #expect(issued.contains(.useDatabase(entry))) + #expect(issued.contains(.setDatabaseEnvironment(entry, .production))) + #expect(issued.contains(.removeDatabaseFavorite(entry))) + } + + @Test("The active database omits a redundant switch command") + func activeDatabaseOmitsSwitch() { + let entry = database() + let issued = commands(FavoritesMenuSpec.items(for: FavoritesMenuContext( + clicked: .database(entry), + databaseEntityName: "Database", + activeDatabase: entry.database + ))) + + #expect(!issued.contains(.useDatabase(entry))) + } + @Test("Move to lists every folder except the one the favourite is already in") func moveToSkipsTheCurrentFolder() { let home = SQLFavoriteFolder(name: "Home") diff --git a/TableProTests/Views/Sidebar/FavoritesOutlineSelectionTests.swift b/TableProTests/Views/Sidebar/FavoritesOutlineSelectionTests.swift index 4082d5f03..11ef0adf5 100644 --- a/TableProTests/Views/Sidebar/FavoritesOutlineSelectionTests.swift +++ b/TableProTests/Views/Sidebar/FavoritesOutlineSelectionTests.swift @@ -20,9 +20,18 @@ struct FavoritesOutlineSelectionTests { SQLFavorite(name: name, query: "SELECT 1") } + private func database(_ name: String) -> FavoriteDatabaseEntry { + FavoriteDatabaseEntry(connectionId: UUID(), database: name, environment: .development) + } + @Test("Section titles refuse selection, objects accept it") func headersRefuseSelection() { #expect(FavoritesOutlineSelection.isSelectable(.header("Tables")) == false) + #expect(FavoritesOutlineSelection.isSelectable(.database(database("app")))) + #expect(FavoritesOutlineSelection.isSelectable(.databaseEnvironment(FavoriteDatabaseGroup( + environment: .development, + entries: [database("app")] + )))) #expect(FavoritesOutlineSelection.isSelectable(.table(table("users")))) #expect(FavoritesOutlineSelection.isSelectable(.query(.favorite(favorite("daily"))))) #expect(FavoritesOutlineSelection.isSelectable(.teamQuery(id: "t1", name: "Shared", publishedBy: nil))) @@ -40,6 +49,37 @@ struct FavoritesOutlineSelectionTests { #expect(FavoritesOutlineSelection.selection(for: .query(node), database: nil) == .node(id: node.id)) } + @Test("A database row maps to its stable node id") + func databaseMapsToNodeId() { + let entry = database("analytics") + let selection = FavoritesOutlineSelection.selection(for: .database(entry), database: nil) + + #expect(selection == .node(id: FavoritesOutlineNode.databaseId(entry))) + } + + @Test("Database environment expansion is independent per connection") + @MainActor + func databaseEnvironmentExpansionIsConnectionScoped() { + let firstConnection = UUID() + let secondConnection = UUID() + defer { + FavoritesExpansionState.shared.removeConnection(firstConnection) + FavoritesExpansionState.shared.removeConnection(secondConnection) + } + + #expect(FavoritesExpansion.isDatabaseEnvironmentExpanded(.testing, connectionId: firstConnection)) + #expect(FavoritesExpansion.isDatabaseEnvironmentExpanded(.testing, connectionId: secondConnection)) + + FavoritesExpansion.setDatabaseEnvironmentExpanded( + .testing, + expanded: false, + connectionId: firstConnection + ) + + #expect(!FavoritesExpansion.isDatabaseEnvironmentExpanded(.testing, connectionId: firstConnection)) + #expect(FavoritesExpansion.isDatabaseEnvironmentExpanded(.testing, connectionId: secondConnection)) + } + /// Team Library rows carried no tag at all before, so the keyboard could never reach them. @Test("A Team Library row maps to a selection of its own") func teamQueryMapsToSelection() { @@ -66,6 +106,7 @@ struct FavoritesOutlineSelectionTests { @Test("Type-select uses the name a user would type, never a section title") func typeSelectSkipsHeaders() { #expect(FavoritesOutlineSelection.matchString(for: .header("Tables")) == nil) + #expect(FavoritesOutlineSelection.matchString(for: .database(database("analytics"))) == "analytics") #expect(FavoritesOutlineSelection.matchString(for: .table(table("orders"))) == "orders") #expect(FavoritesOutlineSelection.matchString(for: .query(.favorite(favorite("daily")))) == "daily") #expect( @@ -83,8 +124,16 @@ struct FavoritesOutlineSelectionTests { kind: .query(.folder(SQLFavoriteFolder(name: "Reports"), children: [])) ) let header = FavoritesOutlineNode(id: "c", kind: .header("Queries")) + let databaseGroup = FavoritesOutlineNode( + id: "d", + kind: .databaseEnvironment(FavoriteDatabaseGroup( + environment: .development, + entries: [database("app")] + )) + ) #expect(leaf.isExpandable == false) #expect(branch.isExpandable) #expect(header.isExpandable == false) + #expect(databaseGroup.isExpandable) } } diff --git a/TableProTests/Views/Sidebar/SidebarOutlineScaffoldTests.swift b/TableProTests/Views/Sidebar/SidebarOutlineScaffoldTests.swift index 20dae2597..69c504ab2 100644 --- a/TableProTests/Views/Sidebar/SidebarOutlineScaffoldTests.swift +++ b/TableProTests/Views/Sidebar/SidebarOutlineScaffoldTests.swift @@ -664,6 +664,87 @@ struct DatabaseTreeFavoriteRefreshTests { #expect(zip(favoritePixels, removedPixels).allSatisfy(!=)) } + @Test("Adding and removing a database favorite repaints its star in place") + func databaseFavoriteMutationRepaintsVisibleRow() throws { + let tableSuite = "DatabaseTreeFavoriteRefreshTests.tables.\(UUID().uuidString)" + let databaseSuite = "DatabaseTreeFavoriteRefreshTests.databases.\(UUID().uuidString)" + let syncSuite = "DatabaseTreeFavoriteRefreshTests.database-sync.\(UUID().uuidString)" + let tableDefaults = try #require(UserDefaults(suiteName: tableSuite)) + let databaseDefaults = try #require(UserDefaults(suiteName: databaseSuite)) + let syncDefaults = try #require(UserDefaults(suiteName: syncSuite)) + defer { + tableDefaults.removePersistentDomain(forName: tableSuite) + databaseDefaults.removePersistentDomain(forName: databaseSuite) + syncDefaults.removePersistentDomain(forName: syncSuite) + } + + let metadata = SyncMetadataStorage(userDefaults: syncDefaults) + let tracker = SyncChangeTracker(metadataStorage: metadata) + let tableStorage = FavoriteTablesStorage(userDefaults: tableDefaults, syncTracker: tracker) + let databaseStorage = FavoriteDatabasesStorage(defaults: databaseDefaults) + let coordinator = DatabaseTreeOutlineCoordinator( + favoriteTablesStorage: tableStorage, + favoriteDatabasesStorage: databaseStorage + ) + let connectionId = UUID() + let database = DatabaseTreeNode( + id: "database-shop", + kind: .database(.minimal(name: "shop")) + ) + let outlineView = NSOutlineView() + let scrollView = SidebarOutlineScaffold.makeScrollView( + outlineView: outlineView, + configuration: SidebarOutlineScaffold.Configuration( + columnIdentifier: "DatabaseFavoriteRefreshColumn", + allowsMultipleSelection: true, + rowSizePreference: .medium + ) + ) + let window = NSWindow( + contentRect: NSRect(x: 0, y: 0, width: Self.width, height: Self.height), + styleMask: [.titled], + backing: .buffered, + defer: false + ) + window.appearance = NSAppearance(named: .aqua) + window.contentView = scrollView + + coordinator.connectionId = connectionId + coordinator.databaseType = .postgresql + coordinator.childrenCache[""] = [database] + outlineView.dataSource = coordinator + outlineView.delegate = coordinator + coordinator.attach(outlineView: outlineView) + outlineView.reloadData() + settle(window) + + let cell = try #require( + outlineView.view(atColumn: 0, row: 0, makeIfNecessary: true) as? DatabaseTreeCellView + ) + settle(window) + let host = cell.hostedView + let unfavoritePixels = try trailingPixels(of: cell) + + databaseStorage.setFavorite( + database: "shop", + environment: .production, + connectionId: connectionId + ) + settle(window) + + #expect(coordinator.favoriteDatabaseEnvironment(for: "shop") == .production) + #expect(cell.hostedView === host) + let favoritePixels = try trailingPixels(of: cell) + #expect(unfavoritePixels != favoritePixels) + + databaseStorage.removeFavorite(database: "shop", connectionId: connectionId) + settle(window) + + #expect(coordinator.favoriteDatabaseEnvironment(for: "shop") == nil) + #expect(cell.hostedView === host) + #expect(try trailingPixels(of: cell) != favoritePixels) + } + private func settle(_ window: NSWindow) { window.layoutIfNeeded() RunLoop.main.run(until: Date(timeIntervalSinceNow: 0.05)) diff --git a/docs/features/favorites.mdx b/docs/features/favorites.mdx index 06cea838f..5470c3b2c 100644 --- a/docs/features/favorites.mdx +++ b/docs/features/favorites.mdx @@ -1,9 +1,17 @@ --- title: Favorites -description: Mark tables as favorites and save frequently used queries with optional keyword shortcuts +description: Save databases and tables, and keep frequently used queries with optional keyword shortcuts --- -The Favorites tab in the sidebar has two sections: **Tables** for pinned tables and **Queries** for saved SQL. The sidebar can also show a **Recent** section with the last tables you opened (off by default). +The Favorites tab keeps pinned databases and tables beside saved SQL. The sidebar can also show a **Recent** section with the last tables you opened (off by default). + +## Database Favorites + +In Tree layout, right-click a database and choose **Add to Favorites**, then assign it to Development, Testing, Production, or Unassigned. A filled star marks the database in the tree. + +Favorite databases appear first in the Favorites tab, grouped by environment. Use the Environment menu to show one group, and use the sidebar search field to filter by database or environment name. Double-click a database, or select it and press Return, to make it active. Right-click it to change its environment or remove it. + +Database favorites are stored locally for each connection. Database names that no longer exist stay in Favorites so you can remove them; trying to activate one shows the database driver's normal switch error. ## Table Favorites From 0fdb62914dcfc2dc21ebfdf507b557a1cd3cbfa0 Mon Sep 17 00:00:00 2001 From: Nguyen Van Thang <61111580+sophiathedev@users.noreply.github.com> Date: Tue, 18 Aug 2026 16:02:08 +0700 Subject: [PATCH 2/8] docs(favorites): add feature preview --- docs/images/favorite-databases.png | Bin 0 -> 195255 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/favorite-databases.png diff --git a/docs/images/favorite-databases.png b/docs/images/favorite-databases.png new file mode 100644 index 0000000000000000000000000000000000000000..f2b9737c13cb09857d6d764d77a29e52b2d5d308 GIT binary patch literal 195255 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

X7{uSZsa6i9Z&Y1uF{2XR+`4THR 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ⅅqIeS_ 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 P;NQMoN;~7W>z@99=>?uF literal 0 HcmV?d00001 From e51e82a170b5cba9cc8f672e7d594899d9ee77aa Mon Sep 17 00:00:00 2001 From: sophiathedev Date: Tue, 18 Aug 2026 16:04:08 +0700 Subject: [PATCH 3/8] docs(favorites): show database groups --- docs/features/favorites.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/features/favorites.mdx b/docs/features/favorites.mdx index 5470c3b2c..1afb16dbd 100644 --- a/docs/features/favorites.mdx +++ b/docs/features/favorites.mdx @@ -11,6 +11,10 @@ In Tree layout, right-click a database and choose **Add to Favorites**, then ass Favorite databases appear first in the Favorites tab, grouped by environment. Use the Environment menu to show one group, and use the sidebar search field to filter by database or environment name. Double-click a database, or select it and press Return, to make it active. Right-click it to change its environment or remove it. + + Favorite databases grouped into Development, Testing, and Production in the Favorites sidebar + + Database favorites are stored locally for each connection. Database names that no longer exist stay in Favorites so you can remove them; trying to activate one shows the database driver's normal switch error. ## Table Favorites From aee31861729ce0c1d6b5317ce1a31de0cb986412 Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Thu, 20 Aug 2026 18:09:47 +0700 Subject: [PATCH 4/8] feat(sidebar): make database favorites reachable outside the tree, and sync them --- CHANGELOG.md | 2 + .../SyncRecordType.swift | 2 + .../SyncSchemaFields.swift | 14 + .../SyncSchemaRegistry.swift | 2 + .../SyncSchemaGateTests.swift | 20 +- TablePro/Core/Menu/DatabaseMenuBuilder.swift | 12 + .../Menu/FavoriteDatabaseMenuDelegate.swift | 60 ++++ TablePro/Core/Services/AppServices.swift | 2 + ...itViewController+DatabaseMenuActions.swift | 10 + ...inSplitViewController+MenuValidation.swift | 4 + .../Core/Storage/ConnectionLocalState.swift | 65 ++++ TablePro/Core/Storage/ConnectionStorage.swift | 35 +- .../Storage/FavoriteDatabasesStorage.swift | 169 +++++++-- .../Core/Storage/FavoriteTablesStorage.swift | 18 +- TablePro/Core/Storage/RecentTablesStore.swift | 5 + TablePro/Core/Sync/SyncCoordinator.swift | 56 ++- TablePro/Core/Sync/SyncRecordMapper.swift | 37 ++ TablePro/Core/Sync/SyncScope.swift | 3 +- .../Favorites/FavoriteDatabaseEntry.swift | 2 +- .../FavoriteDatabaseEnvironment.swift | 15 +- .../FavoriteDatabaseEnvironmentFilter.swift | 11 +- .../Favorites/FavoriteDatabaseGrouping.swift | 1 - TablePro/Models/Settings/SyncSettings.swift | 5 + TablePro/Resources/Localizable.xcstrings | 340 ++++++++++++++++++ .../ViewModels/FavoritesExpansionState.swift | 41 ++- .../DatabaseSwitcherPopover.swift | 73 +++- .../Main/MainContentCommandActions.swift | 32 ++ .../Views/Settings/Sections/SyncSection.swift | 1 + TablePro/Views/Shared/FieldDrivenList.swift | 39 +- ...abaseTreeOutlineCoordinator+Commands.swift | 20 +- .../DatabaseTreeOutlineCoordinator+Menu.swift | 8 +- .../DatabaseTreeOutlineCoordinator.swift | 39 +- .../Views/Sidebar/DatabaseTreeRowView.swift | 30 +- .../Views/Sidebar/FavoriteStarButton.swift | 55 +++ .../Views/Sidebar/FavoritesEmptyState.swift | 51 +++ .../Sidebar/FavoritesOutlineCoordinator.swift | 6 +- .../Views/Sidebar/FavoritesOutlineView.swift | 2 +- TablePro/Views/Sidebar/FavoritesTabView.swift | 55 ++- .../Sidebar/Menu/DatabaseTreeMenuSpec.swift | 52 +-- .../Sidebar/Menu/FavoriteDatabaseMenu.swift | 59 +++ .../Sidebar/Menu/FavoritesMenuSpec.swift | 16 +- .../Sidebar/Menu/SidebarMenuCommand.swift | 4 +- .../Views/Sidebar/SidebarPersistenceKey.swift | 23 ++ TablePro/Views/Sidebar/TableRowView.swift | 38 +- .../Core/Menu/MainMenuBuilderTests.swift | 11 + .../FavoriteDatabasesStorageTests.swift | 233 +++++++++--- .../Core/Sync/FavoriteDatabaseSyncTests.swift | 128 +++++++ .../FavoriteDatabaseGroupingTests.swift | 31 +- .../Models/SharedSidebarStateTests.swift | 2 +- .../FavoritesExpansionStateTests.swift | 93 +++++ .../QuickSwitcherViewModelTests.swift | 1 + .../ViewModels/WelcomeViewModelTests.swift | 1 + .../Sidebar/DatabaseTreeMenuSpecTests.swift | 65 +++- .../Sidebar/FavoriteDatabaseMenuTests.swift | 91 +++++ .../Sidebar/FavoritesEmptyStateTests.swift | 81 +++++ .../Sidebar/SidebarOutlineScaffoldTests.swift | 4 +- docs/features/favorites.mdx | 12 +- docs/features/icloud-sync.mdx | 3 +- 58 files changed, 1983 insertions(+), 307 deletions(-) create mode 100644 TablePro/Core/Menu/FavoriteDatabaseMenuDelegate.swift create mode 100644 TablePro/Core/Storage/ConnectionLocalState.swift create mode 100644 TablePro/Views/Sidebar/FavoriteStarButton.swift create mode 100644 TablePro/Views/Sidebar/FavoritesEmptyState.swift create mode 100644 TablePro/Views/Sidebar/Menu/FavoriteDatabaseMenu.swift create mode 100644 TableProTests/Core/Sync/FavoriteDatabaseSyncTests.swift create mode 100644 TableProTests/ViewModels/FavoritesExpansionStateTests.swift create mode 100644 TableProTests/Views/Sidebar/FavoriteDatabaseMenuTests.swift create mode 100644 TableProTests/Views/Sidebar/FavoritesEmptyStateTests.swift diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e9771c04..b89840bd8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Databases can be saved to Favorites and tagged Development, Testing, Production or Unassigned. Add one from the database switcher in the toolbar, from a database row in the Tree sidebar, or from Database > Favorite Database, which works in every sidebar layout. Right-clicking a database inside a multiple selection tags all of them. The Favorites tab lists them first, grouped by environment, with a filter for one environment at a time; double-click one to make it active. Database favorites sync through iCloud and have their own toggle in Settings > Account. (#1553) + - The SQL editor marks each statement in a tab and offers to run it on its own. The statement your cursor is in gets a faint background, so you can see what `Cmd+Enter` will send before you press it, and moving the pointer over the gutter reveals a run button beside every statement. Clicking one runs that statement even if the cursor is somewhere else. The buttons take the same safe mode checks and parameter prompts as any other run, they go dim while a query is running, and VoiceOver reads each one as a button naming the line it starts on. Both the highlight and the buttons can be turned off in Settings > Editor. (#2278) - TablePro notifies you when long-running work finishes while you are in another app, so a slow query no longer means watching a spinner or forgetting it entirely. It covers queries, Execute All, row saves, structure changes, imports, exports, backups, fetch all rows, and queries an AI assistant runs over MCP. It only notifies when the result is not already on screen, and never for work you cancelled. The notification says what happened, how much and how long it took, and clicking it selects the tab that ran the work. A tab that finished while you were elsewhere keeps a dot until you look at it, whether or not you allowed notifications. Turn the whole thing off, pick which kinds you want, or change the 20 second threshold in Settings > Notifications. (#2265) - Help › Acknowledgements lists the 38 open source libraries TablePro ships, each with the exact version that shipped, its license, the copyright lines it asks you to reproduce, and the full license text. Several of these licenses require the text to travel with the app, and it had never been included. Two libraries whose own projects publish no license are listed as unresolved rather than being given a guess. diff --git a/Packages/TableProCore/Sources/TableProSyncTransport/SyncRecordType.swift b/Packages/TableProCore/Sources/TableProSyncTransport/SyncRecordType.swift index 9b536fa76..ec291b62b 100644 --- a/Packages/TableProCore/Sources/TableProSyncTransport/SyncRecordType.swift +++ b/Packages/TableProCore/Sources/TableProSyncTransport/SyncRecordType.swift @@ -8,6 +8,7 @@ public enum SyncRecordType: String, CaseIterable, Sendable { case favorite = "SQLFavorite" case favoriteFolder = "SQLFavoriteFolder" case tableFavorite = "FavoriteTable" + case favoriteDatabase = "FavoriteDatabase" case sshProfile = "SSHProfile" public var recordNamePrefix: String { @@ -19,6 +20,7 @@ public enum SyncRecordType: String, CaseIterable, Sendable { case .favorite: return "Favorite_" case .favoriteFolder: return "FavoriteFolder_" case .tableFavorite: return "FavoriteTable_" + case .favoriteDatabase: return "FavoriteDatabase_" case .sshProfile: return "SSHProfile_" } } diff --git a/Packages/TableProCore/Sources/TableProSyncTransport/SyncSchemaFields.swift b/Packages/TableProCore/Sources/TableProSyncTransport/SyncSchemaFields.swift index ef5bfbba5..8c3eca1b8 100644 --- a/Packages/TableProCore/Sources/TableProSyncTransport/SyncSchemaFields.swift +++ b/Packages/TableProCore/Sources/TableProSyncTransport/SyncSchemaFields.swift @@ -51,6 +51,20 @@ public enum FavoriteTableSyncField: String, SyncSchemaField { ] } +/// Empty on purpose. `FavoriteDatabase` is not in the Production schema yet, so every field is +/// unverified and the gated subscript drops every write, which keeps the type inert rather than +/// letting CloudKit reject the record. Flip this set and `SyncRecordType.verifiedInProduction` +/// together in the commit that carries the refreshed `production-schema.ckdb`. +public enum FavoriteDatabaseSyncField: String, SyncSchemaField { + case connectionId + case database + case environment + case modifiedAtLocal + case schemaVersion + + public static let verifiedInProduction: Set = [] +} + public enum SQLFavoriteSyncField: String, SyncSchemaField { case favoriteId case name diff --git a/Packages/TableProCore/Sources/TableProSyncTransport/SyncSchemaRegistry.swift b/Packages/TableProCore/Sources/TableProSyncTransport/SyncSchemaRegistry.swift index 2ecfb3e6b..f07e9cf06 100644 --- a/Packages/TableProCore/Sources/TableProSyncTransport/SyncSchemaRegistry.swift +++ b/Packages/TableProCore/Sources/TableProSyncTransport/SyncSchemaRegistry.swift @@ -22,6 +22,7 @@ public extension SyncRecordType { case .favorite: return SQLFavoriteSyncField.declaredKeys case .favoriteFolder: return SQLFavoriteFolderSyncField.declaredKeys case .tableFavorite: return FavoriteTableSyncField.declaredKeys + case .favoriteDatabase: return FavoriteDatabaseSyncField.declaredKeys case .sshProfile: return SSHProfileSyncField.declaredKeys } } @@ -35,6 +36,7 @@ public extension SyncRecordType { case .favorite: return SQLFavoriteSyncField.writableKeys case .favoriteFolder: return SQLFavoriteFolderSyncField.writableKeys case .tableFavorite: return FavoriteTableSyncField.writableKeys + case .favoriteDatabase: return FavoriteDatabaseSyncField.writableKeys case .sshProfile: return SSHProfileSyncField.writableKeys } } diff --git a/Packages/TableProCore/Tests/TableProSyncTests/SyncSchemaGateTests.swift b/Packages/TableProCore/Tests/TableProSyncTests/SyncSchemaGateTests.swift index 6f46e5d5b..295cd558c 100644 --- a/Packages/TableProCore/Tests/TableProSyncTests/SyncSchemaGateTests.swift +++ b/Packages/TableProCore/Tests/TableProSyncTests/SyncSchemaGateTests.swift @@ -56,11 +56,23 @@ struct SyncSchemaGateTests { #expect(SampleField.deployed.productionSchemaState == .verified) } - @Test("Every record type the app declares is currently deployed") - func allRecordTypesAreWritable() { - let gated = SyncRecordType.allCases.filter { !$0.isWritable } + /// A type lands here only between the commit that declares it and the commit that carries the + /// refreshed `production-schema.ckdb`. Anything gated and unlisted is a type that will never + /// sync, which is what this test exists to catch; anything listed and no longer gated means the + /// deploy landed and the entry is stale. Comparing sets catches both. + private static let pendingProductionDeploy: Set = [.favoriteDatabase] - #expect(gated.isEmpty, "Gated record types: \(gated.map(\.rawValue).sorted())") + @Test("Every record type the app declares is deployed, or is explicitly awaiting deployment") + func allRecordTypesAreWritable() { + let gated = Set(SyncRecordType.allCases.filter { !$0.isWritable }) + + #expect( + gated == Self.pendingProductionDeploy, + """ + Gated record types: \(gated.map(\.rawValue).sorted()). \ + Awaiting deployment: \(Self.pendingProductionDeploy.map(\.rawValue).sorted()) + """ + ) } @Test("Records of a deployed type are published") diff --git a/TablePro/Core/Menu/DatabaseMenuBuilder.swift b/TablePro/Core/Menu/DatabaseMenuBuilder.swift index 1bdef92b4..a28291dc5 100644 --- a/TablePro/Core/Menu/DatabaseMenuBuilder.swift +++ b/TablePro/Core/Menu/DatabaseMenuBuilder.swift @@ -55,6 +55,7 @@ enum DatabaseMenuBuilder { action: #selector(MainSplitViewController.editViewDefinition(_:)) ), schemaSubmenu(), + favoriteDatabaseSubmenu(), maintenanceSubmenu(), MenuItemFactory.item( String(localized: "Truncate Table"), @@ -91,6 +92,17 @@ enum DatabaseMenuBuilder { ]) } + private static let favoriteDatabaseDelegate = FavoriteDatabaseMenuDelegate() + + /// A literal title, like every other item here: System Settings binds an App Shortcut to a menu + /// item's exact title, so a title that flipped between "Add" and "Remove" would break the bind. + /// The submenu reports the current state with a checkmark instead. + private static func favoriteDatabaseSubmenu() -> NSMenuItem { + let container = MenuItemFactory.submenu(String(localized: "Favorite Database"), items: []) + container.submenu?.delegate = favoriteDatabaseDelegate + return container + } + private static let maintenanceDelegate = MaintenanceMenuDelegate() private static func maintenanceSubmenu() -> NSMenuItem { diff --git a/TablePro/Core/Menu/FavoriteDatabaseMenuDelegate.swift b/TablePro/Core/Menu/FavoriteDatabaseMenuDelegate.swift new file mode 100644 index 000000000..d03a480d1 --- /dev/null +++ b/TablePro/Core/Menu/FavoriteDatabaseMenuDelegate.swift @@ -0,0 +1,60 @@ +// +// FavoriteDatabaseMenuDelegate.swift +// TablePro +// + +import AppKit + +/// Whether the active database is a favorite, and which environment it carries, depends on the live +/// connection, so the submenu is filled when it opens. Built on the same shape as +/// `SchemaMenuDelegate`, including the responder-chain lookup that resolves the window the chosen +/// item will act on. +/// +/// The menu bar is the keyboard path to this feature. The row star is hover-revealed and the +/// context menus need a right-click, so without this the whole feature is pointer-only. +@MainActor +final class FavoriteDatabaseMenuDelegate: NSObject, NSMenuDelegate { + private static let setAction = #selector(MainSplitViewController.setFavoriteDatabaseEnvironment(_:)) + private static let removeAction = #selector(MainSplitViewController.removeFavoriteDatabase(_:)) + + func menuNeedsUpdate(_ menu: NSMenu) { + menu.removeAllItems() + let controller = NSApp.target(forAction: Self.setAction, to: nil, from: nil) as? MainSplitViewController + guard let actions = controller?.commandActions, actions.canFavoriteActiveDatabase else { + addPlaceholder(to: menu) + return + } + let state = FavoriteDatabaseSelectionState(environments: [actions.activeDatabaseFavoriteEnvironment]) + for item in FavoriteDatabaseMenu.environmentItems(for: state) { + menu.addItem(environmentItem(item)) + } + guard state.hasFavorite else { return } + menu.addItem(.separator()) + menu.addItem(NSMenuItem(title: FavoriteDatabaseMenu.removeTitle, action: Self.removeAction, keyEquivalent: "")) + } + + private func environmentItem(_ entry: FavoriteDatabaseMenu.EnvironmentItem) -> NSMenuItem { + let item = NSMenuItem(title: entry.title, action: Self.setAction, keyEquivalent: "") + item.target = nil + item.representedObject = entry.environment.rawValue + item.state = entry.isOn ? .on : .off + return item + } + + private func addPlaceholder(to menu: NSMenu) { + let empty = NSMenuItem(title: String(localized: "No Database Selected"), action: nil, keyEquivalent: "") + empty.isEnabled = false + menu.addItem(empty) + } + + /// Keeps AppKit's key-equivalent search from rebuilding the menu on every modified keystroke, + /// which would query the favorites store for items that carry no key equivalent. + func menuHasKeyEquivalent( + _ menu: NSMenu, + for event: NSEvent, + target: AutoreleasingUnsafeMutablePointer, + action: UnsafeMutablePointer + ) -> Bool { + false + } +} diff --git a/TablePro/Core/Services/AppServices.swift b/TablePro/Core/Services/AppServices.swift index 09b5d0cab..681e79bdc 100644 --- a/TablePro/Core/Services/AppServices.swift +++ b/TablePro/Core/Services/AppServices.swift @@ -19,6 +19,7 @@ struct AppServices { let schemaProviderRegistry: SchemaProviderRegistry let sqlFavoriteManager: SQLFavoriteManager let favoriteTablesStorage: FavoriteTablesStorage + let favoriteDatabasesStorage: FavoriteDatabasesStorage let aiChatStorage: AIChatStorage let aiKeyStorage: AIKeyStorage let groupStorage: GroupStorage @@ -48,6 +49,7 @@ struct AppServices { schemaProviderRegistry: .shared, sqlFavoriteManager: .shared, favoriteTablesStorage: .shared, + favoriteDatabasesStorage: .shared, aiChatStorage: .shared, aiKeyStorage: .shared, groupStorage: .shared, diff --git a/TablePro/Core/Services/Infrastructure/MainSplitViewController+DatabaseMenuActions.swift b/TablePro/Core/Services/Infrastructure/MainSplitViewController+DatabaseMenuActions.swift index 9b29bd9af..1d8a313c5 100644 --- a/TablePro/Core/Services/Infrastructure/MainSplitViewController+DatabaseMenuActions.swift +++ b/TablePro/Core/Services/Infrastructure/MainSplitViewController+DatabaseMenuActions.swift @@ -53,6 +53,16 @@ extension MainSplitViewController { Task { await coordinator.switchSchema(to: schema) } } + @objc func setFavoriteDatabaseEnvironment(_ sender: Any?) { + guard let raw = (sender as? NSMenuItem)?.representedObject as? String, + let environment = FavoriteDatabaseEnvironment(rawValue: raw) else { return } + commandActions?.setActiveDatabaseFavorite(environment: environment) + } + + @objc func removeFavoriteDatabase(_ sender: Any?) { + commandActions?.removeActiveDatabaseFavorite() + } + @objc func truncateTable(_ sender: Any?) { commandActions?.truncateTables() } diff --git a/TablePro/Core/Services/Infrastructure/MainSplitViewController+MenuValidation.swift b/TablePro/Core/Services/Infrastructure/MainSplitViewController+MenuValidation.swift index 33e5081e0..06634e040 100644 --- a/TablePro/Core/Services/Infrastructure/MainSplitViewController+MenuValidation.swift +++ b/TablePro/Core/Services/Infrastructure/MainSplitViewController+MenuValidation.swift @@ -60,6 +60,7 @@ struct MenuValidationContext: Equatable { var supportsUserManagement = false var supportsSchemaSwitching = false var canFilterDatabases = false + var canFavoriteActiveDatabase = false var hasDatabaseFilter = false } @@ -182,6 +183,8 @@ extension MainSplitViewController: NSMenuItemValidation { return context.isConnected && context.hasMaintenanceOperations case #selector(switchToSchema(_:)): return context.isConnected && context.supportsSchemaSwitching + case #selector(setFavoriteDatabaseEnvironment(_:)), #selector(removeFavoriteDatabase(_:)): + return context.isConnected && context.canFavoriteActiveDatabase case #selector(filterDatabases(_:)): return context.isConnected && context.canFilterDatabases case #selector(showAllDatabases(_:)): @@ -255,6 +258,7 @@ extension MainSplitViewController: NSMenuItemValidation { supportsUserManagement: actions.supportsUserManagement, supportsSchemaSwitching: actions.supportsSchemaSwitching, canFilterDatabases: actions.canFilterDatabases, + canFavoriteActiveDatabase: actions.canFavoriteActiveDatabase, hasDatabaseFilter: actions.hasDatabaseFilter ) } diff --git a/TablePro/Core/Storage/ConnectionLocalState.swift b/TablePro/Core/Storage/ConnectionLocalState.swift new file mode 100644 index 000000000..3c3d17d2c --- /dev/null +++ b/TablePro/Core/Storage/ConnectionLocalState.swift @@ -0,0 +1,65 @@ +// +// ConnectionLocalState.swift +// TablePro +// + +import Foundation + +/// Everything a deleted connection leaves behind on this device, cleaned up in one place. +/// +/// The list used to be written out at each of the three delete sites, which is how they drifted: +/// the remote-deletion path cleared two stores where the local one cleared nine, and no site had +/// ever removed a single `SidebarPersistenceKey`. A store added here is cleaned up everywhere. +@MainActor +internal enum ConnectionLocalState { + /// Who deleted the connection. A local delete leaves tombstones so the other devices follow; + /// a remote delete must not, or it pushes back a deletion the sender already made. + internal enum Origin { + case local + case remote + } + + internal static func purge( + connectionIds: Set, + origin: Origin, + appSettings: AppSettingsStorage = .shared + ) { + guard !connectionIds.isEmpty else { return } + + for connectionId in connectionIds { + purgeLiveState(connectionId) + appSettings.saveLastDatabase(nil, for: connectionId) + appSettings.saveLastSchema(nil, for: connectionId) + purgeFavorites(connectionId, origin: origin) + SidebarPersistenceKey.removeAll(connectionId: connectionId) + RecentTablesStore.shared.removeEntries(for: connectionId) + HistoryPanelPreferencesStorage.remove(for: connectionId) + QueryInsightsPreferencesStorage.remove(for: connectionId) + } + + FilterSettingsStorage.shared.removeFilters(for: connectionIds) + DatabaseTreeFilterStorage.shared.removeFilters(for: connectionIds) + RecentlyClosedTabStore.shared.removeEntries(for: connectionIds) + } + + /// The in-memory registries go first. A live `SharedSidebarState` for this connection rewrites + /// its own defaults keys on the next mutation, so removing the keys under it achieves nothing. + private static func purgeLiveState(_ connectionId: UUID) { + SharedSidebarState.removeConnection(connectionId) + SidebarViewModel.removeConnection(connectionId) + HistoryPanelState.removeConnection(connectionId) + QuickSwitcherCatalogStore.shared.removeConnection(connectionId) + FavoritesExpansionState.shared.removeConnection(connectionId) + } + + private static func purgeFavorites(_ connectionId: UUID, origin: Origin) { + switch origin { + case .local: + FavoriteTablesStorage.shared.removeFavorites(for: connectionId) + FavoriteDatabasesStorage.shared.removeFavorites(for: connectionId) + case .remote: + FavoriteTablesStorage.shared.removeFavoritesWithoutSync(for: connectionId) + FavoriteDatabasesStorage.shared.removeFavoritesWithoutSync(for: connectionId) + } + } +} diff --git a/TablePro/Core/Storage/ConnectionStorage.swift b/TablePro/Core/Storage/ConnectionStorage.swift index 2d093d9ce..d670c8259 100644 --- a/TablePro/Core/Storage/ConnectionStorage.swift +++ b/TablePro/Core/Storage/ConnectionStorage.swift @@ -286,18 +286,11 @@ final class ConnectionStorage { let secureFieldIds = Self.secureFieldIds(for: connection.type) deleteAllPluginSecureFields(for: connection.id, fieldIds: secureFieldIds) - let appSettings = appSettingsProvider() - appSettings.saveLastDatabase(nil, for: connection.id) - appSettings.saveLastSchema(nil, for: connection.id) - - FavoriteTablesStorage.shared.removeFavorites(for: connection.id) - FavoriteDatabasesStorage.shared.removeFavorites(for: connection.id) - FavoritesExpansionState.shared.removeConnection(connection.id) - FilterSettingsStorage.shared.removeFilters(for: connection.id) - DatabaseTreeFilterStorage.shared.removeFilter(for: connection.id) - RecentlyClosedTabStore.shared.removeEntries(for: connection.id) - HistoryPanelPreferencesStorage.remove(for: connection.id) - QueryInsightsPreferencesStorage.remove(for: connection.id) + ConnectionLocalState.purge( + connectionIds: [connection.id], + origin: .local, + appSettings: appSettingsProvider() + ) Task { await SQLFavoriteManager.shared.removeFavoritesAndFolders(for: connection.id) await QueryHistoryManager.shared.clear( @@ -330,20 +323,12 @@ final class ConnectionStorage { deleteSOCKSProxyPassword(for: conn.id) let fields = Self.secureFieldIds(for: conn.type) deleteAllPluginSecureFields(for: conn.id, fieldIds: fields) - let appSettings = appSettingsProvider() - appSettings.saveLastDatabase(nil, for: conn.id) - appSettings.saveLastSchema(nil, for: conn.id) - FavoriteTablesStorage.shared.removeFavorites(for: conn.id) - FavoriteDatabasesStorage.shared.removeFavorites(for: conn.id) - FavoritesExpansionState.shared.removeConnection(conn.id) - } - FilterSettingsStorage.shared.removeFilters(for: idsToDelete) - DatabaseTreeFilterStorage.shared.removeFilters(for: idsToDelete) - RecentlyClosedTabStore.shared.removeEntries(for: idsToDelete) - for id in idsToDelete { - HistoryPanelPreferencesStorage.remove(for: id) - QueryInsightsPreferencesStorage.remove(for: id) } + ConnectionLocalState.purge( + connectionIds: idsToDelete, + origin: .local, + appSettings: appSettingsProvider() + ) Task { for conn in connectionsToDelete { await SQLFavoriteManager.shared.removeFavoritesAndFolders(for: conn.id) diff --git a/TablePro/Core/Storage/FavoriteDatabasesStorage.swift b/TablePro/Core/Storage/FavoriteDatabasesStorage.swift index eafc4e877..0b63f704b 100644 --- a/TablePro/Core/Storage/FavoriteDatabasesStorage.swift +++ b/TablePro/Core/Storage/FavoriteDatabasesStorage.swift @@ -5,34 +5,49 @@ import Foundation import os +import TableProSyncTransport extension Notification.Name { internal static let favoriteDatabasesDidChange = Notification.Name("FavoriteDatabasesDidChange") } +/// Every entry lives under one key rather than one key per connection, so a sync push can resolve a +/// dirty id back to its entry without knowing which connections exist, and so deleting a connection +/// leaves nothing behind to forget. `FavoriteTablesStorage` is the same shape. @MainActor internal final class FavoriteDatabasesStorage { internal static let shared = FavoriteDatabasesStorage() private static let logger = Logger(subsystem: "com.TablePro", category: "FavoriteDatabasesStorage") + private static let storageKey = "com.TablePro.favoriteDatabases" + private let defaults: UserDefaults + private let syncTracker: SyncChangeTracker + private var cache: Set? - internal init(defaults: UserDefaults = AppStorageEnvironment.shared.defaults) { + internal init( + defaults: UserDefaults = AppStorageEnvironment.shared.defaults, + syncTracker: SyncChangeTracker = .shared + ) { self.defaults = defaults + self.syncTracker = syncTracker } - internal func favorites(for connectionId: UUID) -> Set { - guard let data = defaults.data(forKey: key(for: connectionId)), + internal func loadFavorites() -> Set { + if let cache { return cache } + guard let data = defaults.data(forKey: Self.storageKey), let decoded = try? JSONDecoder().decode(Set.self, from: data) - else { return [] } - return decoded.filter { $0.connectionId == connectionId && !$0.database.isEmpty } + else { + cache = [] + return [] + } + let valid = decoded.filter { !$0.database.isEmpty } + cache = valid + return valid } - internal func environment( - for database: String, - connectionId: UUID - ) -> FavoriteDatabaseEnvironment? { - favorites(for: connectionId).first { $0.database == database }?.environment + internal func favorites(for connectionId: UUID) -> Set { + loadFavorites().filter { $0.connectionId == connectionId } } internal func setFavorite( @@ -40,48 +55,132 @@ internal final class FavoriteDatabasesStorage { environment: FavoriteDatabaseEnvironment, connectionId: UUID ) { - guard !database.isEmpty else { return } - var entries = favorites(for: connectionId) - entries = Set(entries.filter { $0.database != database }) - entries.insert(FavoriteDatabaseEntry( + let entry = FavoriteDatabaseEntry( connectionId: connectionId, database: database, environment: environment - )) - persist(entries, connectionId: connectionId) + ) + notify(after: mutate { Self.upsert(entry, into: &$0) }) + } + + internal func setFavoriteWithoutSync(_ entry: FavoriteDatabaseEntry) { + notify(after: mutate { Self.upsert(entry, into: &$0) }, skipSync: true) } internal func removeFavorite(database: String, connectionId: UUID) { - var entries = favorites(for: connectionId) - let originalCount = entries.count - entries = Set(entries.filter { $0.database != database }) - guard entries.count != originalCount else { return } - persist(entries, connectionId: connectionId) + notify(after: mutate { favorites in + guard let existing = favorites.first(where: { + $0.connectionId == connectionId && $0.database == database + }) else { return .noChange } + favorites.remove(existing) + return .removed(existing) + }) + } + + internal func removeFavoriteWithoutSync(id: String) { + notify(after: mutate { favorites in + guard let entry = favorites.first(where: { Self.syncId(for: $0) == id }) else { return .noChange } + favorites.remove(entry) + return .removed(entry) + }, skipSync: true) } internal func removeFavorites(for connectionId: UUID) { - let key = key(for: connectionId) - guard defaults.object(forKey: key) != nil else { return } - defaults.removeObject(forKey: key) + removeFavorites(for: connectionId, skipSync: false) + } + + internal func removeFavoritesWithoutSync(for connectionId: UUID) { + removeFavorites(for: connectionId, skipSync: true) + } + + /// The composite id never includes the environment. A record keyed on a mutable payload is + /// orphaned the moment that payload changes, so re-tagging a database would leave the old + /// record behind and push a second one beside it. + internal nonisolated static func syncId(for entry: FavoriteDatabaseEntry) -> String { + (entry.connectionId.uuidString + "|" + entry.database).sha256 + } + + private func removeFavorites(for connectionId: UUID, skipSync: Bool) { + var favorites = loadFavorites() + let removed = favorites.filter { $0.connectionId == connectionId } + guard !removed.isEmpty else { return } + favorites.subtract(removed) + persist(favorites) + + guard !skipSync else { + postChangeNotification() + return + } + for entry in removed { + syncTracker.markDeleted(.favoriteDatabase, id: Self.syncId(for: entry)) + } + postChangeNotification() + } + + private enum TrackedAction { + case noChange + case changed(FavoriteDatabaseEntry) + case removed(FavoriteDatabaseEntry) + } + + /// Re-picking the environment a database already has is not a change. Persisting it anyway + /// posts a notification that rebuilds every visible tree row in every window for nothing. + private static func upsert( + _ entry: FavoriteDatabaseEntry, + into favorites: inout Set + ) -> TrackedAction { + guard !entry.database.isEmpty else { return .noChange } + if let existing = favorites.first(where: { $0.id == entry.id }) { + guard existing.environment != entry.environment else { return .noChange } + favorites.remove(existing) + } + favorites.insert(entry) + return .changed(entry) + } + + private func mutate(_ block: (inout Set) -> TrackedAction) -> TrackedAction { + var favorites = loadFavorites() + let action = block(&favorites) + guard case .noChange = action else { + persist(favorites) + return action + } + return action + } + + /// Persist first, then notify: `markDeleted` posts a change that can start a sync, and a sync + /// that reads a file still holding the deleted entry re-uploads it. + private func notify(after action: TrackedAction, skipSync: Bool = false) { + switch action { + case .noChange: + return + case .changed(let entry): + if !skipSync { + syncTracker.markDirty(.favoriteDatabase, id: Self.syncId(for: entry)) + } + postChangeNotification() + case .removed(let entry): + if !skipSync { + syncTracker.markDeleted(.favoriteDatabase, id: Self.syncId(for: entry)) + } + postChangeNotification() + } + } + + private func postChangeNotification() { NotificationCenter.default.post(name: .favoriteDatabasesDidChange, object: self) } - private func persist(_ entries: Set, connectionId: UUID) { - let key = key(for: connectionId) - guard !entries.isEmpty else { - defaults.removeObject(forKey: key) - NotificationCenter.default.post(name: .favoriteDatabasesDidChange, object: self) + private func persist(_ favorites: Set) { + cache = favorites + guard !favorites.isEmpty else { + defaults.removeObject(forKey: Self.storageKey) return } do { - defaults.set(try JSONEncoder().encode(entries), forKey: key) - NotificationCenter.default.post(name: .favoriteDatabasesDidChange, object: self) + defaults.set(try JSONEncoder().encode(favorites), forKey: Self.storageKey) } catch { Self.logger.error("Failed to encode favorite databases: \(error.localizedDescription, privacy: .public)") } } - - private func key(for connectionId: UUID) -> String { - "com.TablePro.favoriteDatabases.\(connectionId.uuidString)" - } } diff --git a/TablePro/Core/Storage/FavoriteTablesStorage.swift b/TablePro/Core/Storage/FavoriteTablesStorage.swift index e55cd0845..4fa8567d7 100644 --- a/TablePro/Core/Storage/FavoriteTablesStorage.swift +++ b/TablePro/Core/Storage/FavoriteTablesStorage.swift @@ -107,6 +107,18 @@ final class FavoriteTablesStorage { @discardableResult func removeFavorites(for connectionId: UUID) -> [FavoriteEntry] { + removeFavorites(for: connectionId, skipSync: false) + } + + /// Used when another device deleted the connection. Marking tombstones here would push its own + /// deletion straight back at it. + @discardableResult + func removeFavoritesWithoutSync(for connectionId: UUID) -> [FavoriteEntry] { + removeFavorites(for: connectionId, skipSync: true) + } + + @discardableResult + private func removeFavorites(for connectionId: UUID, skipSync: Bool) -> [FavoriteEntry] { var removed: [FavoriteEntry] = [] lock.lock() var favorites = _loadFavorites() @@ -119,8 +131,10 @@ final class FavoriteTablesStorage { lock.unlock() guard !removed.isEmpty else { return [] } - for entry in removed { - syncTracker.markDeleted(.tableFavorite, id: Self.syncId(for: entry)) + if !skipSync { + for entry in removed { + syncTracker.markDeleted(.tableFavorite, id: Self.syncId(for: entry)) + } } NotificationCenter.default.post(name: .favoriteTablesDidChange, object: nil) return removed diff --git a/TablePro/Core/Storage/RecentTablesStore.swift b/TablePro/Core/Storage/RecentTablesStore.swift index e8a828ea3..2f41352fb 100644 --- a/TablePro/Core/Storage/RecentTablesStore.swift +++ b/TablePro/Core/Storage/RecentTablesStore.swift @@ -85,6 +85,11 @@ final class RecentTablesStore { return updated } + func removeEntries(for connectionId: UUID) { + defaults.removeObject(forKey: PreferenceKeys.recentTables(connectionId: connectionId).name) + defaults.removeObject(forKey: legacyKeyPrefix + connectionId.uuidString) + } + static func merged(_ entry: RecentTableEntry, into existing: [RecentTableEntry]) -> [RecentTableEntry] { var result = existing.filter { $0.id != entry.id } result.insert(entry, at: 0) diff --git a/TablePro/Core/Sync/SyncCoordinator.swift b/TablePro/Core/Sync/SyncCoordinator.swift index cf29cfa10..a1b47b936 100644 --- a/TablePro/Core/Sync/SyncCoordinator.swift +++ b/TablePro/Core/Sync/SyncCoordinator.swift @@ -199,6 +199,11 @@ final class SyncCoordinator { changeTracker.markDirty(.tableFavorite, id: FavoriteTablesStorage.syncId(for: entry)) } + let favoriteDatabases = services.favoriteDatabasesStorage.loadFavorites() + for entry in favoriteDatabases { + changeTracker.markDirty(.favoriteDatabase, id: FavoriteDatabasesStorage.syncId(for: entry)) + } + for category in AppSettingsCategory.synced + [CustomSlashCommandStorage.syncCategory] { changeTracker.markDirty(.settings, id: category) } @@ -336,6 +341,10 @@ final class SyncCoordinator { collectDirtyTableFavorites(into: &recordsToSave, deletions: &recordIDsToDelete, zoneID: zoneID) } + if settings.syncDatabaseFavorites { + collectDirtyDatabaseFavorites(into: &recordsToSave, deletions: &recordIDsToDelete, zoneID: zoneID) + } + if settings.syncSQLFavorites { await collectDirtySQLFavorites(into: &recordsToSave, deletions: &recordIDsToDelete, zoneID: zoneID) } @@ -435,6 +444,7 @@ final class SyncCoordinator { let tagTombstoneIds = Set(metadataStorage.tombstones(for: .tag).map(\.id)) let sshTombstoneIds = Set(metadataStorage.tombstones(for: .sshProfile).map(\.id)) let tableFavoriteTombstoneIds = Set(metadataStorage.tombstones(for: .tableFavorite).map(\.id)) + let databaseFavoriteTombstoneIds = Set(metadataStorage.tombstones(for: .favoriteDatabase).map(\.id)) let sqlFavoriteTombstoneIds = Set(metadataStorage.tombstones(for: .favorite).map(\.id)) let sqlFolderTombstoneIds = Set(metadataStorage.tombstones(for: .favoriteFolder).map(\.id)) var remoteFavorites: [SQLFavorite] = [] @@ -460,6 +470,8 @@ final class SyncCoordinator { applyRemoteSettings(record) case SyncRecordType.tableFavorite.rawValue where settings.syncTableFavorites: applyRemoteTableFavorite(record, tombstoneIds: tableFavoriteTombstoneIds) + case SyncRecordType.favoriteDatabase.rawValue where settings.syncDatabaseFavorites: + applyRemoteDatabaseFavorite(record, tombstoneIds: databaseFavoriteTombstoneIds) case SyncRecordType.favorite.rawValue where settings.syncSQLFavorites: if let favorite = try? SyncRecordMapper.sqlFavorite(from: record), !sqlFavoriteTombstoneIds.contains(favorite.id.uuidString) { @@ -517,11 +529,7 @@ final class SyncCoordinator { if !services.connectionStorage.saveConnections(connections) { Self.logger.error("Failed to apply remote connection deletions: persistence error") } else { - FilterSettingsStorage.shared.removeFilters(for: connectionIdsToDelete) - for id in connectionIdsToDelete { - FavoriteDatabasesStorage.shared.removeFavorites(for: id) - FavoritesExpansionState.shared.removeConnection(id) - } + ConnectionLocalState.purge(connectionIds: connectionIdsToDelete, origin: .remote) let favoriteManager = services.sqlFavoriteManager Task { for id in connectionIdsToDelete { @@ -720,6 +728,24 @@ final class SyncCoordinator { return services.favoriteTablesStorage.addFavoriteWithoutSync(entry) } + /// Upserts rather than inserts. A database favorite carries a mutable payload, the environment + /// tag, so an insert-if-absent apply would keep the local tag and silently drop the remote one. + private func applyRemoteDatabaseFavorite(_ record: CKRecord, tombstoneIds: Set) { + let entry: FavoriteDatabaseEntry + do { + entry = try SyncRecordMapper.favoriteDatabase(from: record) + } catch { + let recordName = record.recordID.recordName + let message = error.localizedDescription + Self.logger.error( + "Skipping remote favorite database \(recordName, privacy: .public): \(message, privacy: .public)" + ) + return + } + guard !tombstoneIds.contains(FavoriteDatabasesStorage.syncId(for: entry)) else { return } + services.favoriteDatabasesStorage.setFavoriteWithoutSync(entry) + } + // MARK: - Observers private func observeAccountChanges() { @@ -986,4 +1012,24 @@ final class SyncCoordinator { ) } } + + private func collectDirtyDatabaseFavorites( + into records: inout [CKRecord], + deletions: inout [CKRecord.ID], + zoneID: CKRecordZone.ID + ) { + let dirtyIds = changeTracker.dirtyRecords(for: .favoriteDatabase) + if !dirtyIds.isEmpty { + let favorites = services.favoriteDatabasesStorage.loadFavorites() + for entry in favorites where dirtyIds.contains(FavoriteDatabasesStorage.syncId(for: entry)) { + records.append(SyncRecordMapper.toCKRecord(favoriteDatabase: entry, in: zoneID)) + } + } + + for tombstone in metadataStorage.tombstones(for: .favoriteDatabase) { + deletions.append( + SyncRecordMapper.recordID(type: .favoriteDatabase, id: tombstone.id, in: zoneID) + ) + } + } } diff --git a/TablePro/Core/Sync/SyncRecordMapper.swift b/TablePro/Core/Sync/SyncRecordMapper.swift index a6a363845..86b7b0767 100644 --- a/TablePro/Core/Sync/SyncRecordMapper.swift +++ b/TablePro/Core/Sync/SyncRecordMapper.swift @@ -390,6 +390,43 @@ struct SyncRecordMapper { ) } + // MARK: - Favorite Database + + static func toCKRecord(favoriteDatabase entry: FavoriteDatabaseEntry, in zone: CKRecordZone.ID) -> CKRecord { + let favoriteId = FavoriteDatabasesStorage.syncId(for: entry) + let recordID = recordID(type: .favoriteDatabase, id: favoriteId, in: zone) + let record = CKRecord(recordType: SyncRecordType.favoriteDatabase.rawValue, recordID: recordID) + + let fields = record.fields(FavoriteDatabaseSyncField.self) + fields[.connectionId] = entry.connectionId.uuidString + fields[.database] = entry.database + fields[.environment] = entry.environment.rawValue + fields[.modifiedAtLocal] = Date() + fields[.schemaVersion] = schemaVersion + + return record + } + + /// An environment this build does not know decodes to `.unassigned` rather than throwing, so a + /// device on an older version keeps the favorite instead of dropping the whole record. + static func favoriteDatabase(from record: CKRecord) throws -> FavoriteDatabaseEntry { + let fields = record.fields(FavoriteDatabaseSyncField.self) + guard let database = fields[.database] as? String, !database.isEmpty else { + throw SyncDecodeError.missingRequiredField("database") + } + guard let connectionIdString = fields[.connectionId] as? String, + let connectionId = UUID(uuidString: connectionIdString) else { + throw SyncDecodeError.missingRequiredField("connectionId") + } + let environment = (fields[.environment] as? String) + .flatMap(FavoriteDatabaseEnvironment.init(rawValue:)) ?? .unassigned + return FavoriteDatabaseEntry( + connectionId: connectionId, + database: database, + environment: environment + ) + } + // MARK: - SQL Favorite static func toCKRecord(sqlFavorite favorite: SQLFavorite, in zone: CKRecordZone.ID) -> CKRecord { diff --git a/TablePro/Core/Sync/SyncScope.swift b/TablePro/Core/Sync/SyncScope.swift index f7468883e..f4e4bd95f 100644 --- a/TablePro/Core/Sync/SyncScope.swift +++ b/TablePro/Core/Sync/SyncScope.swift @@ -14,7 +14,8 @@ enum SyncScope: Equatable { extension SyncRecordType { var syncScope: SyncScope { switch self { - case .connection, .group, .tag, .settings, .favorite, .favoriteFolder, .tableFavorite, .sshProfile: + case .connection, .group, .tag, .settings, .favorite, .favoriteFolder, + .tableFavorite, .favoriteDatabase, .sshProfile: return .synced } } diff --git a/TablePro/Models/Favorites/FavoriteDatabaseEntry.swift b/TablePro/Models/Favorites/FavoriteDatabaseEntry.swift index f35de96a9..0fe365c67 100644 --- a/TablePro/Models/Favorites/FavoriteDatabaseEntry.swift +++ b/TablePro/Models/Favorites/FavoriteDatabaseEntry.swift @@ -35,6 +35,6 @@ internal struct FavoriteDatabaseEntry: Codable, Hashable, Identifiable, Sendable connectionId = try container.decode(UUID.self, forKey: .connectionId) database = try container.decode(String.self, forKey: .database) let rawEnvironment = try container.decodeIfPresent(String.self, forKey: .environment) - environment = rawEnvironment.flatMap(FavoriteDatabaseEnvironment.init(rawValue:)) ?? .none + environment = rawEnvironment.flatMap(FavoriteDatabaseEnvironment.init(rawValue:)) ?? .unassigned } } diff --git a/TablePro/Models/Favorites/FavoriteDatabaseEnvironment.swift b/TablePro/Models/Favorites/FavoriteDatabaseEnvironment.swift index b3f76ff3c..454924d15 100644 --- a/TablePro/Models/Favorites/FavoriteDatabaseEnvironment.swift +++ b/TablePro/Models/Favorites/FavoriteDatabaseEnvironment.swift @@ -5,25 +5,20 @@ import Foundation +/// One name per bucket. The group header, the filter and both menus all read `title`, because a +/// second spelling for the same bucket reads as a second bucket and costs a second translation. internal enum FavoriteDatabaseEnvironment: String, CaseIterable, Codable, Sendable { case development case testing case production - case none + case unassigned internal var title: String { switch self { case .development: String(localized: "Development") case .testing: String(localized: "Testing") case .production: String(localized: "Production") - case .none: String(localized: "Unassigned") - } - } - - internal var menuTitle: String { - switch self { - case .none: String(localized: "No Environment") - case .development, .testing, .production: title + case .unassigned: String(localized: "Unassigned") } } @@ -32,7 +27,7 @@ internal enum FavoriteDatabaseEnvironment: String, CaseIterable, Codable, Sendab case .development: "wrench.and.screwdriver" case .testing: "checkmark.circle" case .production: "lock.shield" - case .none: "tray" + case .unassigned: "tray" } } } diff --git a/TablePro/Models/Favorites/FavoriteDatabaseEnvironmentFilter.swift b/TablePro/Models/Favorites/FavoriteDatabaseEnvironmentFilter.swift index 2d98dde05..3fcef4dbf 100644 --- a/TablePro/Models/Favorites/FavoriteDatabaseEnvironmentFilter.swift +++ b/TablePro/Models/Favorites/FavoriteDatabaseEnvironmentFilter.swift @@ -13,13 +13,8 @@ internal enum FavoriteDatabaseEnvironmentFilter: String, CaseIterable, Sendable case unassigned internal var title: String { - switch self { - case .all: String(localized: "All Environments") - case .development: FavoriteDatabaseEnvironment.development.title - case .testing: FavoriteDatabaseEnvironment.testing.title - case .production: FavoriteDatabaseEnvironment.production.title - case .unassigned: FavoriteDatabaseEnvironment.none.title - } + guard let environment else { return String(localized: "All Environments") } + return environment.title } internal var environment: FavoriteDatabaseEnvironment? { @@ -28,7 +23,7 @@ internal enum FavoriteDatabaseEnvironmentFilter: String, CaseIterable, Sendable case .development: .development case .testing: .testing case .production: .production - case .unassigned: FavoriteDatabaseEnvironment.none + case .unassigned: .unassigned } } } diff --git a/TablePro/Models/Favorites/FavoriteDatabaseGrouping.swift b/TablePro/Models/Favorites/FavoriteDatabaseGrouping.swift index 0f6a06124..bc2e030ab 100644 --- a/TablePro/Models/Favorites/FavoriteDatabaseGrouping.swift +++ b/TablePro/Models/Favorites/FavoriteDatabaseGrouping.swift @@ -15,7 +15,6 @@ internal enum FavoriteDatabaseGrouping { guard filter.environment == nil || entry.environment == filter.environment else { return false } guard !searchText.isEmpty else { return true } return entry.database.localizedStandardContains(searchText) - || entry.environment.title.localizedStandardContains(searchText) } return FavoriteDatabaseEnvironment.allCases.compactMap { environment in diff --git a/TablePro/Models/Settings/SyncSettings.swift b/TablePro/Models/Settings/SyncSettings.swift index c2a7f7bbe..de23b576e 100644 --- a/TablePro/Models/Settings/SyncSettings.swift +++ b/TablePro/Models/Settings/SyncSettings.swift @@ -16,6 +16,7 @@ struct SyncSettings: Codable, Equatable { var syncPasswords: Bool var syncSSHProfiles: Bool var syncTableFavorites: Bool + var syncDatabaseFavorites: Bool var syncSQLFavorites: Bool init( @@ -26,6 +27,7 @@ struct SyncSettings: Codable, Equatable { syncPasswords: Bool = false, syncSSHProfiles: Bool = true, syncTableFavorites: Bool = true, + syncDatabaseFavorites: Bool = true, syncSQLFavorites: Bool = true ) { self.enabled = enabled @@ -35,6 +37,7 @@ struct SyncSettings: Codable, Equatable { self.syncPasswords = syncPasswords self.syncSSHProfiles = syncSSHProfiles self.syncTableFavorites = syncTableFavorites + self.syncDatabaseFavorites = syncDatabaseFavorites self.syncSQLFavorites = syncSQLFavorites } @@ -47,6 +50,7 @@ struct SyncSettings: Codable, Equatable { syncPasswords = try container.decodeIfPresent(Bool.self, forKey: .syncPasswords) ?? false syncSSHProfiles = try container.decodeIfPresent(Bool.self, forKey: .syncSSHProfiles) ?? true syncTableFavorites = try container.decodeIfPresent(Bool.self, forKey: .syncTableFavorites) ?? true + syncDatabaseFavorites = try container.decodeIfPresent(Bool.self, forKey: .syncDatabaseFavorites) ?? true syncSQLFavorites = try container.decodeIfPresent(Bool.self, forKey: .syncSQLFavorites) ?? true } @@ -58,6 +62,7 @@ struct SyncSettings: Codable, Equatable { syncPasswords: false, syncSSHProfiles: true, syncTableFavorites: true, + syncDatabaseFavorites: true, syncSQLFavorites: true ) } diff --git a/TablePro/Resources/Localizable.xcstrings b/TablePro/Resources/Localizable.xcstrings index 4be1d53c1..f25d2bd9b 100644 --- a/TablePro/Resources/Localizable.xcstrings +++ b/TablePro/Resources/Localizable.xcstrings @@ -12527,6 +12527,40 @@ } } }, + "All Environments" : { + "localizations" : { + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "모든 환경" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tüm Ortamlar" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tất cả môi trường" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "所有环境" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "所有環境" + } + } + } + }, "All Objects" : { "localizations" : { "ko" : { @@ -37964,6 +37998,40 @@ } } }, + "Development" : { + "localizations" : { + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "개발" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geliştirme" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phát triển" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "开发" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "開發" + } + } + } + }, "Diagnostic Info" : { "localizations" : { "ko" : { @@ -44219,6 +44287,40 @@ } } }, + "Environment" : { + "localizations" : { + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "환경" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ortam" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Môi trường" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "环境" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "環境" + } + } + } + }, "Environment Variables" : { "localizations" : { "ko" : { @@ -49657,6 +49759,74 @@ } } }, + "Favorite" : { + "localizations" : { + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "즐겨찾기" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sık Kullanılan" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yêu thích" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "收藏" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "我的最愛" + } + } + } + }, + "Favorite Database" : { + "localizations" : { + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "즐겨찾는 데이터베이스" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sık Kullanılan Veritabanı" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cơ sở dữ liệu Yêu thích" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "收藏数据库" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "收藏資料庫" + } + } + } + }, "Favorited" : { "localizations" : { "ko" : { @@ -72554,6 +72724,40 @@ } } }, + "No Database Selected" : { + "localizations" : { + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "선택된 데이터베이스 없음" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Veritabanı Seçilmedi" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chưa chọn cơ sở dữ liệu" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "未选择数据库" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "未選擇資料庫" + } + } + } + }, "No Databases" : { "localizations" : { "ko" : { @@ -74259,6 +74463,40 @@ } } }, + "No favorites match the selected environment." : { + "localizations" : { + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "선택한 환경과 일치하는 즐겨찾기가 없습니다." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seçilen ortamla eşleşen sık kullanılan yok." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Không có mục yêu thích nào khớp với môi trường đã chọn." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "没有收藏项与所选环境匹配。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "沒有收藏項目符合所選環境。" + } + } + } + }, "No filters applied" : { }, @@ -86163,6 +86401,40 @@ } } }, + "Production" : { + "localizations" : { + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "프로덕션" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Üretim" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Production" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "生产" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "生產" + } + } + } + }, "Profile" : { "localizations" : { "en" : { @@ -113951,6 +114223,40 @@ } } }, + "Testing" : { + "localizations" : { + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "테스트" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Test" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kiểm thử" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "测试" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "測試" + } + } + } + }, "Testing connection" : { "localizations" : { "ko" : { @@ -123025,6 +123331,40 @@ } } }, + "Unassigned" : { + "localizations" : { + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "미지정" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atanmamış" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chưa gán" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "未分配" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "未指派" + } + } + } + }, "Unchanged" : { "localizations" : { "ko" : { diff --git a/TablePro/ViewModels/FavoritesExpansionState.swift b/TablePro/ViewModels/FavoritesExpansionState.swift index 804231132..99aecb4f4 100644 --- a/TablePro/ViewModels/FavoritesExpansionState.swift +++ b/TablePro/ViewModels/FavoritesExpansionState.swift @@ -20,7 +20,10 @@ internal final class FavoritesExpansionState { @ObservationIgnored private let collapsedDatabaseEnvironmentsKey = "com.TablePro.favoritesCollapsedDatabaseEnvironments" - private init() { + @ObservationIgnored private let defaults: UserDefaults + + internal init(defaults: UserDefaults = AppStorageEnvironment.shared.defaults) { + self.defaults = defaults load() } @@ -92,38 +95,50 @@ internal final class FavoritesExpansionState { } private func load() { - if let data = AppStorageEnvironment.shared.defaults.data(forKey: foldersKey), + if let data = defaults.data(forKey: foldersKey), let decoded = try? JSONDecoder().decode([UUID: Set].self, from: data) { foldersByConnection = decoded } - if let data = AppStorageEnvironment.shared.defaults.data(forKey: linkedKey), + if let data = defaults.data(forKey: linkedKey), let decoded = try? JSONDecoder().decode([UUID: Set].self, from: data) { linkedNodesByConnection = decoded } - if let data = AppStorageEnvironment.shared.defaults.data(forKey: collapsedDatabaseEnvironmentsKey), - let decoded = try? JSONDecoder().decode( - [UUID: Set].self, - from: data - ) { - collapsedDatabaseEnvironmentsByConnection = decoded + collapsedDatabaseEnvironmentsByConnection = Self.decodeCollapsedEnvironments( + defaults.data(forKey: collapsedDatabaseEnvironmentsKey) + ) + } + + /// Decoded per raw value rather than whole. `Set` fails the entire + /// payload on one case this build does not know, which would silently discard the collapsed + /// state of every group of every connection, permanently, from the next write onward. + internal static func decodeCollapsedEnvironments( + _ data: Data? + ) -> [UUID: Set] { + guard let data, + let raw = try? JSONDecoder().decode([UUID: Set].self, from: data) + else { return [:] } + return raw.compactMapValues { values in + let environments = Set(values.compactMap(FavoriteDatabaseEnvironment.init(rawValue:))) + return environments.isEmpty ? nil : environments } } private func persistFolders() { if let data = try? JSONEncoder().encode(foldersByConnection) { - AppStorageEnvironment.shared.defaults.set(data, forKey: foldersKey) + defaults.set(data, forKey: foldersKey) } } private func persistLinkedNodes() { if let data = try? JSONEncoder().encode(linkedNodesByConnection) { - AppStorageEnvironment.shared.defaults.set(data, forKey: linkedKey) + defaults.set(data, forKey: linkedKey) } } private func persistCollapsedDatabaseEnvironments() { - if let data = try? JSONEncoder().encode(collapsedDatabaseEnvironmentsByConnection) { - AppStorageEnvironment.shared.defaults.set(data, forKey: collapsedDatabaseEnvironmentsKey) + let raw = collapsedDatabaseEnvironmentsByConnection.mapValues { Set($0.map(\.rawValue)) } + if let data = try? JSONEncoder().encode(raw) { + defaults.set(data, forKey: collapsedDatabaseEnvironmentsKey) } } } diff --git a/TablePro/Views/DatabaseSwitcher/DatabaseSwitcherPopover.swift b/TablePro/Views/DatabaseSwitcher/DatabaseSwitcherPopover.swift index 3969d8411..07487702e 100644 --- a/TablePro/Views/DatabaseSwitcher/DatabaseSwitcherPopover.swift +++ b/TablePro/Views/DatabaseSwitcher/DatabaseSwitcherPopover.swift @@ -63,6 +63,7 @@ struct DatabaseSwitcherPopover: View { @Environment(\.dismiss) private var dismiss @State private var viewModel: DatabaseSwitcherViewModel @State private var supportsCreateDatabase = false + @State private var favoriteDatabases: Set = [] private static let popoverWidth: CGFloat = 320 private static let popoverHeight: CGFloat = 360 @@ -137,6 +138,10 @@ struct DatabaseSwitcherPopover: View { .background(refreshShortcut) .task { await viewModel.fetchDatabases() } .task { await refreshCreateSupport() } + .onAppear { reloadFavorites() } + .onReceive(NotificationCenter.default.publisher(for: .favoriteDatabasesDidChange)) { _ in + reloadFavorites() + } } private var refreshShortcut: some View { @@ -218,15 +223,30 @@ struct DatabaseSwitcherPopover: View { .truncationMode(.middle) Spacer(minLength: 0) + + favoriteIndicator(for: database) } .padding(.horizontal, 8) .contentShape(Rectangle()) } + /// A status glyph, not a control. `FieldDrivenCellHostingView` returns nil from `hitTest`, so a + /// button in this row could never be clicked; the right-click menu is where the toggle lives. + @ViewBuilder + private func favoriteIndicator(for database: DatabaseMetadata) -> some View { + let isFavorite = switchTarget == .database && favoriteDatabases.contains(database.name) + Image(systemName: "star.fill") + .font(.caption) + .selectionAwareTint(Color.yellow) + .opacity(isFavorite ? 1 : 0) + .accessibilityLabel(Text(String(localized: "Favorite"))) + .accessibilityHidden(!isFavorite) + } + private func contextMenuItems(for selection: Set) -> [FieldDrivenMenuItem] { let targets = containerRefs(for: selection) let droppable = ContainerDropEligibility.droppable(targets, context: dropEligibilityContext) - var items: [FieldDrivenMenuItem] = [] + var items: [FieldDrivenMenuItem] = favoriteItems(for: targets) if !targets.isEmpty { let copyTitle = targets.count == 1 @@ -260,6 +280,57 @@ struct DatabaseSwitcherPopover: View { return items } + /// Only in database mode. In schema mode these rows are schemas, and a schema name written into + /// the database favorites store is a favorite that names nothing. + private func reloadFavorites() { + guard switchTarget == .database else { return } + favoriteDatabases = Set( + FavoriteDatabasesStorage.shared.favorites(for: connectionId).map(\.database) + ) + } + + private func favoriteItems(for targets: [DatabaseContainerRef]) -> [FieldDrivenMenuItem] { + guard switchTarget == .database else { return [] } + let databases = targets.filter { $0.kind == .database }.compactMap(\.database) + guard !databases.isEmpty else { return [] } + + let stored = FavoriteDatabasesStorage.shared.favorites(for: connectionId) + let environments = Dictionary( + stored.map { ($0.database, $0.environment) }, + uniquingKeysWith: { first, _ in first } + ) + let state = FavoriteDatabaseSelectionState(environments: databases.map { environments[$0] }) + + var items: [FieldDrivenMenuItem] = [ + FieldDrivenMenuItem( + title: FavoriteDatabaseMenu.submenuTitle(for: state), + submenu: FavoriteDatabaseMenu.environmentItems(for: state).map { item in + FieldDrivenMenuItem(title: item.title, isOn: item.isOn) { + for database in databases { + FavoriteDatabasesStorage.shared.setFavorite( + database: database, + environment: item.environment, + connectionId: connectionId + ) + } + } + } + ) + ] + if state.hasFavorite { + items.append(FieldDrivenMenuItem(title: FavoriteDatabaseMenu.removeTitle) { + for database in databases { + FavoriteDatabasesStorage.shared.removeFavorite( + database: database, + connectionId: connectionId + ) + } + }) + } + items.append(.separator) + return items + } + /// A row's ref has to carry the kind the row actually is. Building a `.database` ref out of a /// schema name sends Drop to `dropDatabase` and gives Export a container it cannot resolve. private func containerRefs(for selection: Set) -> [DatabaseContainerRef] { diff --git a/TablePro/Views/Main/MainContentCommandActions.swift b/TablePro/Views/Main/MainContentCommandActions.swift index 2be9c10a2..51b7bb7df 100644 --- a/TablePro/Views/Main/MainContentCommandActions.swift +++ b/TablePro/Views/Main/MainContentCommandActions.swift @@ -319,6 +319,38 @@ final class MainContentCommandActions { PluginManager.shared.supportsContainerSwitching(for: connection.type) } + /// An engine with no database dimension has nothing to favorite, and neither has a window whose + /// browse database is still empty. + var canFavoriteActiveDatabase: Bool { + PluginManager.shared.containerSwitchTarget(for: connection.type) == .database + && !browseDatabaseName.isEmpty + } + + var activeDatabaseFavoriteEnvironment: FavoriteDatabaseEnvironment? { + guard canFavoriteActiveDatabase else { return nil } + return FavoriteDatabasesStorage.shared + .favorites(for: connection.id) + .first { $0.database == browseDatabaseName }? + .environment + } + + func setActiveDatabaseFavorite(environment: FavoriteDatabaseEnvironment) { + guard canFavoriteActiveDatabase else { return } + FavoriteDatabasesStorage.shared.setFavorite( + database: browseDatabaseName, + environment: environment, + connectionId: connection.id + ) + } + + func removeActiveDatabaseFavorite() { + guard canFavoriteActiveDatabase else { return } + FavoriteDatabasesStorage.shared.removeFavorite( + database: browseDatabaseName, + connectionId: connection.id + ) + } + /// Picks between the two spellings a container command has. Each one is a whole localized /// string rather than a noun dropped into a format, because System Settings binds an App /// Shortcut to a menu item's exact literal title, and because the driver's own entity name diff --git a/TablePro/Views/Settings/Sections/SyncSection.swift b/TablePro/Views/Settings/Sections/SyncSection.swift index f102e00e3..feb01ac9a 100644 --- a/TablePro/Views/Settings/Sections/SyncSection.swift +++ b/TablePro/Views/Settings/Sections/SyncSection.swift @@ -122,6 +122,7 @@ struct SyncSection: View { Toggle("SSH Profiles:", isOn: $settingsManager.sync.syncSSHProfiles) Toggle("Settings:", isOn: $settingsManager.sync.syncSettings) Toggle("Table Favorites:", isOn: $settingsManager.sync.syncTableFavorites) + Toggle("Database Favorites:", isOn: $settingsManager.sync.syncDatabaseFavorites) Toggle("Saved Queries:", isOn: $settingsManager.sync.syncSQLFavorites) } } diff --git a/TablePro/Views/Shared/FieldDrivenList.swift b/TablePro/Views/Shared/FieldDrivenList.swift index 548e09c16..b91a368a7 100644 --- a/TablePro/Views/Shared/FieldDrivenList.swift +++ b/TablePro/Views/Shared/FieldDrivenList.swift @@ -22,19 +22,41 @@ internal struct FieldDrivenMenuItem { internal let title: String internal let isSeparator: Bool internal let isEnabled: Bool + /// Drawn as a checkmark. A menu that reports the current value is how a picker-shaped command + /// says which option is already chosen. + internal let isOn: Bool + internal let submenu: [FieldDrivenMenuItem] internal let action: () -> Void - internal init(title: String, isEnabled: Bool = true, action: @escaping () -> Void) { + internal init( + title: String, + isEnabled: Bool = true, + isOn: Bool = false, + action: @escaping () -> Void + ) { self.title = title self.isSeparator = false self.isEnabled = isEnabled + self.isOn = isOn + self.submenu = [] self.action = action } + internal init(title: String, submenu: [FieldDrivenMenuItem]) { + self.title = title + self.isSeparator = false + self.isEnabled = !submenu.isEmpty + self.isOn = false + self.submenu = submenu + self.action = {} + } + private init() { self.title = "" self.isSeparator = true self.isEnabled = false + self.isOn = false + self.submenu = [] self.action = {} } @@ -260,6 +282,10 @@ internal struct FieldDrivenList: NSViewRepresenta let targets = owner.selection.contains(id) ? owner.selection : [id] let descriptors = build(targets) guard !descriptors.isEmpty else { return nil } + return makeMenu(from: descriptors) + } + + private func makeMenu(from descriptors: [FieldDrivenMenuItem]) -> NSMenu { let menu = NSMenu() menu.autoenablesItems = false for descriptor in descriptors { @@ -267,9 +293,16 @@ internal struct FieldDrivenList: NSViewRepresenta menu.addItem(.separator()) continue } - let item = NSMenuItem(title: descriptor.title, action: #selector(performMenuItem(_:)), keyEquivalent: "") - item.target = self + let item = NSMenuItem(title: descriptor.title, action: nil, keyEquivalent: "") item.isEnabled = descriptor.isEnabled + guard descriptor.submenu.isEmpty else { + item.submenu = makeMenu(from: descriptor.submenu) + menu.addItem(item) + continue + } + item.action = #selector(performMenuItem(_:)) + item.target = self + item.state = descriptor.isOn ? .on : .off item.representedObject = MenuAction(descriptor.action) menu.addItem(item) } diff --git a/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator+Commands.swift b/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator+Commands.swift index 001d2b9bf..743e24411 100644 --- a/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator+Commands.swift +++ b/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator+Commands.swift @@ -76,14 +76,18 @@ extension DatabaseTreeOutlineCoordinator { sidebarState?.clearRecentTables(inDatabase: mainCoordinator?.browseDatabaseName) case .useAsActive(let container): useAsActive(container) - case .setFavoriteDatabase(let database, let environment): - favoriteDatabasesStorage.setFavorite( - database: database, - environment: environment, - connectionId: connectionId - ) - case .removeFavoriteDatabase(let database): - favoriteDatabasesStorage.removeFavorite(database: database, connectionId: connectionId) + case .setFavoriteDatabases(let databases, let environment): + for database in databases { + favoriteDatabasesStorage.setFavorite( + database: database, + environment: environment, + connectionId: connectionId + ) + } + case .removeFavoriteDatabases(let databases): + for database in databases { + favoriteDatabasesStorage.removeFavorite(database: database, connectionId: connectionId) + } case .refreshContainers(let targets): refreshContainers(targets) case .copyContainerNames(let targets): diff --git a/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator+Menu.swift b/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator+Menu.swift index 5bab0996a..a2fafa611 100644 --- a/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator+Menu.swift +++ b/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator+Menu.swift @@ -33,12 +33,6 @@ extension DatabaseTreeOutlineCoordinator: NSMenuDelegate { private func menuContext() -> DatabaseTreeMenuContext { let clicked = clickedNode() let clickedRef = clicked.flatMap(DatabaseTreeSelection.tableRef) - let favoriteDatabaseEnvironment: FavoriteDatabaseEnvironment? - if case .database(let metadata) = clicked?.kind { - favoriteDatabaseEnvironment = self.favoriteDatabaseEnvironment(for: metadata.name) - } else { - favoriteDatabaseEnvironment = nil - } let settings = AppSettingsManager.shared.general return DatabaseTreeMenuContext( clicked: clicked?.kind, @@ -65,7 +59,7 @@ extension DatabaseTreeOutlineCoordinator: NSMenuDelegate { schemaEntityNamePlural: PluginManager.shared.schemaEntityNamePlural(for: databaseType), objectKindTitles: objectKindTitles(), isFavorite: clickedRef.map { isFavorite($0) } ?? false, - favoriteDatabaseEnvironment: favoriteDatabaseEnvironment, + favoriteDatabaseEnvironments: favoriteDatabaseEnvironments(), showObjectIcons: settings.showObjectIcons, showObjectComments: settings.showObjectComments, rowSize: settings.sidebarRowSize, diff --git a/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator.swift b/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator.swift index 5dd394ce1..e10309412 100644 --- a/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator.swift +++ b/TablePro/Views/Sidebar/DatabaseTreeOutlineCoordinator.swift @@ -59,23 +59,9 @@ final class DatabaseTreeOutlineCoordinator: NSObject { private var tableFavoritesObserver: (any NSObjectProtocol)? private var databaseFavoritesObserver: (any NSObjectProtocol)? - override convenience init() { - self.init( - favoriteTablesStorage: .shared, - favoriteDatabasesStorage: .shared - ) - } - - convenience init(favoriteTablesStorage: FavoriteTablesStorage) { - self.init( - favoriteTablesStorage: favoriteTablesStorage, - favoriteDatabasesStorage: .shared - ) - } - init( - favoriteTablesStorage: FavoriteTablesStorage, - favoriteDatabasesStorage: FavoriteDatabasesStorage + favoriteTablesStorage: FavoriteTablesStorage = .shared, + favoriteDatabasesStorage: FavoriteDatabasesStorage = .shared ) { self.favoriteTablesStorage = favoriteTablesStorage self.favoriteDatabasesStorage = favoriteDatabasesStorage @@ -291,15 +277,27 @@ final class DatabaseTreeOutlineCoordinator: NSObject { private func favoriteState(for node: DatabaseTreeNode) -> Bool { switch node.kind { case .database(let metadata): - return favoriteDatabaseEnvironment(for: metadata.name) != nil + return favoriteDatabases.contains { $0.database == metadata.name } default: guard let ref = DatabaseTreeSelection.tableRef(of: node) else { return false } return isFavorite(ref) } } - internal func favoriteDatabaseEnvironment(for database: String) -> FavoriteDatabaseEnvironment? { - favoriteDatabases.first { $0.database == database }?.environment + internal func favoriteDatabaseEnvironments() -> [String: FavoriteDatabaseEnvironment] { + Dictionary(favoriteDatabases.map { ($0.database, $0.environment) }) { first, _ in first } + } + + internal func toggleFavoriteDatabase(_ database: String) { + guard favoriteDatabases.contains(where: { $0.database == database }) else { + favoriteDatabasesStorage.setFavorite( + database: database, + environment: .unassigned, + connectionId: connectionId + ) + return + } + favoriteDatabasesStorage.removeFavorite(database: database, connectionId: connectionId) } internal func toggleFavorite(_ ref: DatabaseTreeTableRef) { @@ -510,7 +508,8 @@ final class DatabaseTreeOutlineCoordinator: NSObject { private func makeRowActions() -> DatabaseTreeRowActions { DatabaseTreeRowActions( - toggleFavorite: { [weak self] ref in self?.toggleFavorite(ref) } + toggleFavorite: { [weak self] ref in self?.toggleFavorite(ref) }, + toggleFavoriteDatabase: { [weak self] database in self?.toggleFavoriteDatabase(database) } ) } diff --git a/TablePro/Views/Sidebar/DatabaseTreeRowView.swift b/TablePro/Views/Sidebar/DatabaseTreeRowView.swift index 37d19f3b1..64f014b43 100644 --- a/TablePro/Views/Sidebar/DatabaseTreeRowView.swift +++ b/TablePro/Views/Sidebar/DatabaseTreeRowView.swift @@ -10,6 +10,16 @@ import TableProPluginKit /// `SidebarMenuCommand`, so this is only the star, which is a control inside the row. struct DatabaseTreeRowActions { let toggleFavorite: (DatabaseTreeTableRef) -> Void + let toggleFavoriteDatabase: (String) -> Void +} + +/// Row labels are built here rather than inline so the database row reads to VoiceOver in the same +/// shape `TableRowLogic` already uses for a table, instead of inventing a second phrasing. +enum DatabaseTreeRowLabel { + static func database(name: String, isFavorite: Bool) -> String { + guard isFavorite else { return name } + return name + ", " + String(localized: "favorite") + } } struct DatabaseTreeRowContext { @@ -34,6 +44,8 @@ struct DatabaseTreeRowView: View { let context: DatabaseTreeRowContext let actions: DatabaseTreeRowActions + @State private var isHovered = false + /// No `.contextMenu` here. A menu on the hosted view answers the right-click before the outline /// view ever sees it, which cost the clicked-row highlight, `clickedRow`, and any menu at all in /// the empty area below the last row. The outline owns the menu now; see @@ -108,7 +120,8 @@ struct DatabaseTreeRowView: View { } private func databaseRow(_ metadata: DatabaseMetadata) -> some View { - HStack(spacing: 6) { + let toggle = { actions.toggleFavoriteDatabase(metadata.name) } + return HStack(spacing: 6) { header( text: metadata.name, systemImage: metadata.isSystemDatabase ? "gearshape" : "cylinder", @@ -116,17 +129,12 @@ struct DatabaseTreeRowView: View { isSystem: metadata.isSystemDatabase ) Spacer(minLength: 4) - if isFavorite { - Image(systemName: "star.fill") - .foregroundStyle(.yellow) - .accessibilityHidden(true) - } + FavoriteStarButton(isFavorite: isFavorite, isRowHovered: isHovered, toggle: toggle) } - .accessibilityLabel( - isFavorite - ? String(format: String(localized: "%@, Favorite"), metadata.name) - : metadata.name - ) + .onHover { isHovered = $0 } + .accessibilityElement(children: .combine) + .accessibilityLabel(DatabaseTreeRowLabel.database(name: metadata.name, isFavorite: isFavorite)) + .modifier(FavoriteAccessibilityAction(isFavorite: isFavorite, toggle: toggle)) } private func tableRow(_ ref: DatabaseTreeTableRef) -> some View { diff --git a/TablePro/Views/Sidebar/FavoriteStarButton.swift b/TablePro/Views/Sidebar/FavoriteStarButton.swift new file mode 100644 index 000000000..fa2de4def --- /dev/null +++ b/TablePro/Views/Sidebar/FavoriteStarButton.swift @@ -0,0 +1,55 @@ +// +// FavoriteStarButton.swift +// TablePro +// + +import SwiftUI + +/// The favorite star every sidebar row uses. +/// +/// It is hidden until the row is hovered unless the object is already a favorite, so a list of +/// non-favorites is not a column of grey stars. The button itself is hidden from VoiceOver because +/// a row reads as one element; `FavoriteAccessibilityAction` on the row is what makes it reachable. +internal struct FavoriteStarButton: View { + internal let isFavorite: Bool + internal let isRowHovered: Bool + internal let toggle: () -> Void + + private var isVisible: Bool { isFavorite || isRowHovered } + + internal var body: some View { + Button(action: toggle) { + Image(systemName: isFavorite ? "star.fill" : "star") + .font(.system(size: 11, weight: .regular)) + .selectionAwareTint(isFavorite ? Color.yellow : Color.secondary) + .frame(width: 20, height: 20) + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + .opacity(isVisible ? 1 : 0) + .allowsHitTesting(isVisible) + .accessibilityHidden(true) + .help(isFavorite + ? String(localized: "Remove from Favorites") + : String(localized: "Add to Favorites")) + } +} + +/// A hover-revealed control is pointer-only, so the row publishes the same action to VoiceOver. +internal struct FavoriteAccessibilityAction: ViewModifier { + internal let isFavorite: Bool + internal let toggle: (() -> Void)? + + internal func body(content: Content) -> some View { + if let toggle { + content.accessibilityAction( + named: isFavorite + ? Text("Remove from Favorites") + : Text("Add to Favorites"), + toggle + ) + } else { + content + } + } +} diff --git a/TablePro/Views/Sidebar/FavoritesEmptyState.swift b/TablePro/Views/Sidebar/FavoritesEmptyState.swift new file mode 100644 index 000000000..87cdaa7bb --- /dev/null +++ b/TablePro/Views/Sidebar/FavoritesEmptyState.swift @@ -0,0 +1,51 @@ +// +// FavoritesEmptyState.swift +// TablePro +// + +import Foundation + +/// Which of the four states the Favorites tab is in. +/// +/// The tab used to decide this inline, and read a list emptied by the environment filter as a +/// failed search: `ContentUnavailableView.search(text:)` renders "No Results for “”" over spelling +/// advice for a query the user never typed. A filter miss is a different state with a different +/// cause and gets its own. +internal enum FavoritesEmptyState: Equatable { + case loading + case noFavorites + case noFilterMatch + case noSearchMatch(String) + case content + + internal struct Input { + internal let isInitialLoadComplete: Bool + internal let hasAnyFavorite: Bool + internal let hasVisibleContent: Bool + internal let searchText: String + internal let isEnvironmentFiltered: Bool + + internal init( + isInitialLoadComplete: Bool, + hasAnyFavorite: Bool, + hasVisibleContent: Bool, + searchText: String, + isEnvironmentFiltered: Bool + ) { + self.isInitialLoadComplete = isInitialLoadComplete + self.hasAnyFavorite = hasAnyFavorite + self.hasVisibleContent = hasVisibleContent + self.searchText = searchText + self.isEnvironmentFiltered = isEnvironmentFiltered + } + } + + internal static func resolve(_ input: Input) -> FavoritesEmptyState { + if input.hasVisibleContent { return .content } + if !input.isInitialLoadComplete && !input.hasAnyFavorite { return .loading } + if !input.hasAnyFavorite { return .noFavorites } + if !input.searchText.isEmpty { return .noSearchMatch(input.searchText) } + if input.isEnvironmentFiltered { return .noFilterMatch } + return .noFavorites + } +} diff --git a/TablePro/Views/Sidebar/FavoritesOutlineCoordinator.swift b/TablePro/Views/Sidebar/FavoritesOutlineCoordinator.swift index 250756b9b..82ef1aa89 100644 --- a/TablePro/Views/Sidebar/FavoritesOutlineCoordinator.swift +++ b/TablePro/Views/Sidebar/FavoritesOutlineCoordinator.swift @@ -54,7 +54,7 @@ internal final class FavoritesOutlineCoordinator: NSObject, NSOutline /// outline reloads only when the set of rows or their nesting changed. Depth is part of the /// fingerprint because moving a favorite into a folder can leave the pre-order id list identical. private static func fingerprint(of input: FavoritesOutlineInput) -> String { - var parts: [String] = [input.activeDatabase ?? "", input.isFilteringDatabases ? "filtering" : ""] + var parts: [String] = [input.activeDatabase ?? "", input.isNarrowingDatabases ? "filtering" : ""] parts += input.databaseGroups.flatMap { group in ["environment|\(group.environment.rawValue)"] + group.entries.map { "\(group.environment.rawValue)|\($0.id)" } @@ -191,7 +191,7 @@ internal final class FavoritesOutlineCoordinator: NSObject, NSOutline let shouldExpand: Bool switch node.kind { case .databaseEnvironment(let group): - shouldExpand = owner.input.isFilteringDatabases || FavoritesExpansion + shouldExpand = owner.input.isNarrowingDatabases || FavoritesExpansion .isDatabaseEnvironmentExpanded(group.environment, connectionId: owner.input.connectionId) case .query(let favoriteNode): shouldExpand = FavoritesExpansion.isExpanded( @@ -223,7 +223,7 @@ internal final class FavoritesOutlineCoordinator: NSObject, NSOutline let node = notification.userInfo?["NSObject"] as? FavoritesOutlineNode else { return } switch node.kind { case .databaseEnvironment(let group): - guard !owner.input.isFilteringDatabases else { return } + guard !owner.input.isNarrowingDatabases else { return } FavoritesExpansion.setDatabaseEnvironmentExpanded( group.environment, expanded: expanded, diff --git a/TablePro/Views/Sidebar/FavoritesOutlineView.swift b/TablePro/Views/Sidebar/FavoritesOutlineView.swift index c6a6eae4c..dafc557b6 100644 --- a/TablePro/Views/Sidebar/FavoritesOutlineView.swift +++ b/TablePro/Views/Sidebar/FavoritesOutlineView.swift @@ -14,7 +14,7 @@ internal struct FavoritesOutlineInput { internal let databaseGroups: [FavoriteDatabaseGroup] internal let databaseEntityName: String internal let databaseEntityNamePlural: String - internal let isFilteringDatabases: Bool + internal let isNarrowingDatabases: Bool internal let tables: [TableInfo] internal let queryNodes: [FavoriteNode] internal let teamQueries: [FavoritesOutlineTeamQuery] diff --git a/TablePro/Views/Sidebar/FavoritesTabView.swift b/TablePro/Views/Sidebar/FavoritesTabView.swift index 69c5af7ca..de8d3fe2b 100644 --- a/TablePro/Views/Sidebar/FavoritesTabView.swift +++ b/TablePro/Views/Sidebar/FavoritesTabView.swift @@ -86,24 +86,29 @@ internal struct FavoritesTabView: View { ? availableFavoriteTables : availableFavoriteTables.filter { $0.name.localizedCaseInsensitiveContains(searchText) } - if !viewModel.isInitialLoadComplete - && viewModel.nodes.isEmpty - && filteredTables.isEmpty - && favoriteDatabases.isEmpty { + switch FavoritesEmptyState.resolve(FavoritesEmptyState.Input( + isInitialLoadComplete: viewModel.isInitialLoadComplete, + hasAnyFavorite: !viewModel.nodes.isEmpty + || !availableFavoriteTables.isEmpty + || !teamLibraryQueries.isEmpty + || !favoriteDatabases.isEmpty, + hasVisibleContent: !items.isEmpty + || !groups.isEmpty + || !filteredTables.isEmpty + || !teamLibraryQueries.isEmpty, + searchText: searchText, + isEnvironmentFiltered: sharedSidebarState.favoriteDatabaseEnvironmentFilter != .all + )) { + case .loading: ProgressView() .frame(maxWidth: .infinity, maxHeight: .infinity) - } else if viewModel.nodes.isEmpty - && filteredTables.isEmpty - && teamLibraryQueries.isEmpty - && favoriteDatabases.isEmpty - && searchText.isEmpty { + case .noFavorites: emptyState - } else if items.isEmpty - && groups.isEmpty - && filteredTables.isEmpty - && teamLibraryQueries.isEmpty { - noMatchState - } else { + case .noFilterMatch: + noFilterMatchState + case .noSearchMatch(let term): + noSearchMatchState(term) + case .content: favoritesList(items, databaseGroups: groups, filteredTables: filteredTables) } } @@ -274,7 +279,8 @@ internal struct FavoritesTabView: View { databaseGroups: databaseGroups, databaseEntityName: databaseEntityName, databaseEntityNamePlural: databaseEntityNamePlural, - isFilteringDatabases: !searchText.isEmpty, + isNarrowingDatabases: !searchText.isEmpty + || sharedSidebarState.favoriteDatabaseEnvironmentFilter != .all, tables: filteredTables, queryNodes: items, teamQueries: teamLibraryQueries.map { @@ -360,7 +366,7 @@ internal struct FavoritesTabView: View { .sidebarRowIcon(visible: AppSettingsManager.shared.general.showObjectIcons) .lineLimit(1) .accessibilityLabel(String( - format: String(localized: "Favorite %@, %@"), + format: String(localized: "%@: %@"), databaseEntityName, entry.database )) @@ -602,11 +608,22 @@ internal struct FavoritesTabView: View { .frame(maxWidth: .infinity, maxHeight: .infinity) } - private var noMatchState: some View { - ContentUnavailableView.search(text: searchText) + private func noSearchMatchState(_ term: String) -> some View { + ContentUnavailableView.search(text: term) .frame(maxWidth: .infinity, maxHeight: .infinity) } + /// A filter miss is not a failed search, so it never borrows the search placeholder's "check + /// the spelling" advice. The filter control stays on screen above this, which is the reset. + private var noFilterMatchState: some View { + ContentUnavailableView { + Label(String(localized: "No Matching Favorites"), systemImage: "line.3.horizontal.decrease.circle") + } description: { + Text("No favorites match the selected environment.") + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + private func addLinkedFolder() { let panel = NSOpenPanel() panel.canChooseFiles = false diff --git a/TablePro/Views/Sidebar/Menu/DatabaseTreeMenuSpec.swift b/TablePro/Views/Sidebar/Menu/DatabaseTreeMenuSpec.swift index 099d8f44f..35318a90c 100644 --- a/TablePro/Views/Sidebar/Menu/DatabaseTreeMenuSpec.swift +++ b/TablePro/Views/Sidebar/Menu/DatabaseTreeMenuSpec.swift @@ -31,7 +31,9 @@ internal struct DatabaseTreeMenuContext { internal let schemaEntityNamePlural: String internal let objectKindTitles: [SidebarObjectKind: String] internal let isFavorite: Bool - internal let favoriteDatabaseEnvironment: FavoriteDatabaseEnvironment? + /// Keyed per database rather than resolved for the clicked row alone, because a right-click + /// inside a multi-selection acts on the whole selection and those databases need not share a tag. + internal var favoriteDatabaseEnvironments: [String: FavoriteDatabaseEnvironment] = [:] internal let showObjectIcons: Bool internal let showObjectComments: Bool internal let rowSize: SidebarRowSizePreference @@ -220,12 +222,18 @@ internal enum DatabaseTreeMenuSpec { items.append(.command(String(localized: "Refresh"), .refreshContainers(targets))) items.append(.command(copyNamesTitle(count: targets.count), .copyContainerNames(targets))) - if targets.count == 1, clicked.kind == .database { - items.append(.separator) - items += favoriteDatabaseItems( - database: clicked.database, - currentEnvironment: context.favoriteDatabaseEnvironment + let favoriteDatabases = targets.filter { $0.kind == .database }.compactMap(\.database) + if !favoriteDatabases.isEmpty { + let favoriteItems = favoriteDatabaseItems( + databases: favoriteDatabases, + state: FavoriteDatabaseSelectionState( + environments: favoriteDatabases.map { context.favoriteDatabaseEnvironments[$0] } + ) ) + if !favoriteItems.isEmpty { + items.append(.separator) + items += favoriteItems + } } if ExportPreselection.canPreselect( @@ -243,23 +251,25 @@ internal enum DatabaseTreeMenuSpec { } private static func favoriteDatabaseItems( - database: String, - currentEnvironment: FavoriteDatabaseEnvironment? + databases: [String], + state: FavoriteDatabaseSelectionState ) -> [DatabaseTreeMenuItem] { - let environmentItems: [DatabaseTreeMenuItem] = FavoriteDatabaseEnvironment.allCases.map { environment in - .command(SidebarMenuEntry( - title: environment.menuTitle, - command: .setFavoriteDatabase(database: database, environment: environment), - isOn: currentEnvironment == environment - )) - } - guard currentEnvironment != nil else { - return [.submenu(title: String(localized: "Add to Favorites"), items: environmentItems)] - } - return [ - .submenu(title: String(localized: "Environment"), items: environmentItems), - .destructive(String(localized: "Remove from Favorites"), .removeFavoriteDatabase(database)) + guard !state.isEmpty else { return [] } + let environmentItems: [DatabaseTreeMenuItem] = FavoriteDatabaseMenu.environmentItems(for: state) + .map { item in + .command(SidebarMenuEntry( + title: item.title, + command: .setFavoriteDatabases(databases: databases, environment: item.environment), + isOn: item.isOn + )) + } + var items: [DatabaseTreeMenuItem] = [ + .submenu(title: FavoriteDatabaseMenu.submenuTitle(for: state), items: environmentItems) ] + if state.hasFavorite { + items.append(.destructive(FavoriteDatabaseMenu.removeTitle, .removeFavoriteDatabases(databases))) + } + return items } private static func isActive(_ container: DatabaseContainerRef, context: DatabaseTreeMenuContext) -> Bool { diff --git a/TablePro/Views/Sidebar/Menu/FavoriteDatabaseMenu.swift b/TablePro/Views/Sidebar/Menu/FavoriteDatabaseMenu.swift new file mode 100644 index 000000000..7028a21c4 --- /dev/null +++ b/TablePro/Views/Sidebar/Menu/FavoriteDatabaseMenu.swift @@ -0,0 +1,59 @@ +// +// FavoriteDatabaseMenu.swift +// TablePro +// + +import Foundation + +/// What the favorite items look like for one right-click, as values. +/// +/// A click can carry several databases, and they need not agree: some may be favorites already, and +/// the ones that are may be tagged differently. Resolving that once here keeps the object tree, the +/// database switcher, the Favorites tab and the Database menu showing the same thing. +internal struct FavoriteDatabaseSelectionState: Equatable { + internal let targetCount: Int + internal let favoriteCount: Int + /// The environment every favorite in the selection shares, or nil when they disagree. + internal let sharedEnvironment: FavoriteDatabaseEnvironment? + + internal init(environments: [FavoriteDatabaseEnvironment?]) { + targetCount = environments.count + let assigned = environments.compactMap { $0 } + favoriteCount = assigned.count + let distinct = Set(assigned) + sharedEnvironment = distinct.count == 1 ? distinct.first : nil + } + + internal var isEmpty: Bool { targetCount == 0 } + /// Retagging rather than adding, so the submenu names the attribute instead of the action. + internal var isEntirelyFavorite: Bool { favoriteCount == targetCount && targetCount > 0 } + internal var hasFavorite: Bool { favoriteCount > 0 } +} + +internal enum FavoriteDatabaseMenu { + internal struct EnvironmentItem: Equatable { + internal let environment: FavoriteDatabaseEnvironment + internal let title: String + internal let isOn: Bool + } + + internal static func submenuTitle(for state: FavoriteDatabaseSelectionState) -> String { + state.isEntirelyFavorite + ? String(localized: "Environment") + : String(localized: "Add to Favorites") + } + + internal static var removeTitle: String { + String(localized: "Remove from Favorites") + } + + internal static func environmentItems(for state: FavoriteDatabaseSelectionState) -> [EnvironmentItem] { + FavoriteDatabaseEnvironment.allCases.map { environment in + EnvironmentItem( + environment: environment, + title: environment.title, + isOn: state.isEntirelyFavorite && state.sharedEnvironment == environment + ) + } + } +} diff --git a/TablePro/Views/Sidebar/Menu/FavoritesMenuSpec.swift b/TablePro/Views/Sidebar/Menu/FavoritesMenuSpec.swift index 3234d31d3..8c1a0d2cb 100644 --- a/TablePro/Views/Sidebar/Menu/FavoritesMenuSpec.swift +++ b/TablePro/Views/Sidebar/Menu/FavoritesMenuSpec.swift @@ -63,21 +63,19 @@ internal enum FavoritesMenuSpec { .useDatabase(entry) )) } + let state = FavoriteDatabaseSelectionState(environments: [entry.environment]) items.append(.submenu( - title: String(localized: "Environment"), - items: FavoriteDatabaseEnvironment.allCases.map { environment in + title: FavoriteDatabaseMenu.submenuTitle(for: state), + items: FavoriteDatabaseMenu.environmentItems(for: state).map { item in .command(SidebarMenuEntry( - title: environment.menuTitle, - command: .setDatabaseEnvironment(entry, environment), - isOn: entry.environment == environment + title: item.title, + command: .setDatabaseEnvironment(entry, item.environment), + isOn: item.isOn )) } )) items.append(.separator) - items.append(.destructive( - String(localized: "Remove from Favorites"), - .removeDatabaseFavorite(entry) - )) + items.append(.destructive(FavoriteDatabaseMenu.removeTitle, .removeDatabaseFavorite(entry))) return items } diff --git a/TablePro/Views/Sidebar/Menu/SidebarMenuCommand.swift b/TablePro/Views/Sidebar/Menu/SidebarMenuCommand.swift index d5eddd3d1..9b182cc1b 100644 --- a/TablePro/Views/Sidebar/Menu/SidebarMenuCommand.swift +++ b/TablePro/Views/Sidebar/Menu/SidebarMenuCommand.swift @@ -35,8 +35,8 @@ internal enum SidebarMenuCommand: Equatable { case removeRecent(DatabaseTreeTableRef) case clearRecents case useAsActive(DatabaseContainerRef) - case setFavoriteDatabase(database: String, environment: FavoriteDatabaseEnvironment) - case removeFavoriteDatabase(String) + case setFavoriteDatabases(databases: [String], environment: FavoriteDatabaseEnvironment) + case removeFavoriteDatabases([String]) case refreshContainers([DatabaseContainerRef]) case copyContainerNames([DatabaseContainerRef]) case exportContainers([DatabaseContainerRef]) diff --git a/TablePro/Views/Sidebar/SidebarPersistenceKey.swift b/TablePro/Views/Sidebar/SidebarPersistenceKey.swift index 5ea0ed005..8233ac1a2 100644 --- a/TablePro/Views/Sidebar/SidebarPersistenceKey.swift +++ b/TablePro/Views/Sidebar/SidebarPersistenceKey.swift @@ -37,4 +37,27 @@ enum SidebarPersistenceKey { static func expanded(connectionId: UUID, kind: SidebarObjectKind) -> String { "sidebar.\(connectionId.uuidString).\(kind.rawValue).expanded" } + + /// Every per-connection key this type can produce. A key added above and forgotten here outlives + /// the connection it belongs to for the life of the install. + static func all(connectionId: UUID) -> [String] { + [ + tablesExpanded(connectionId: connectionId), + redisKeysExpanded(connectionId: connectionId), + recentsExpanded(connectionId: connectionId), + selectedTab(connectionId: connectionId), + selectedFavorite(connectionId: connectionId), + favoriteDatabaseEnvironmentFilter(connectionId: connectionId), + layout(connectionId: connectionId) + ] + SidebarObjectKind.allCases.map { expanded(connectionId: connectionId, kind: $0) } + } + + static func removeAll( + connectionId: UUID, + defaults: UserDefaults = AppStorageEnvironment.shared.defaults + ) { + for key in all(connectionId: connectionId) { + defaults.removeObject(forKey: key) + } + } } diff --git a/TablePro/Views/Sidebar/TableRowView.swift b/TablePro/Views/Sidebar/TableRowView.swift index 8f0693205..8340ff78e 100644 --- a/TablePro/Views/Sidebar/TableRowView.swift +++ b/TablePro/Views/Sidebar/TableRowView.swift @@ -123,21 +123,11 @@ struct TableRow: View { Spacer(minLength: 4) if let onToggleFavorite { - let starVisible = isFavorite || isHovered - Button(action: onToggleFavorite) { - Image(systemName: isFavorite ? "star.fill" : "star") - .font(.system(size: 11, weight: .regular)) - .selectionAwareTint(isFavorite ? Color.yellow : Color.secondary) - .frame(width: 20, height: 20) - .contentShape(Rectangle()) - } - .buttonStyle(.plain) - .opacity(starVisible ? 1 : 0) - .allowsHitTesting(starVisible) - .accessibilityHidden(true) - .help(isFavorite - ? String(localized: "Remove from Favorites") - : String(localized: "Add to Favorites")) + FavoriteStarButton( + isFavorite: isFavorite, + isRowHovered: isHovered, + toggle: onToggleFavorite + ) } } .onHover { isHovered = $0 } @@ -153,21 +143,3 @@ struct TableRow: View { .modifier(FavoriteAccessibilityAction(isFavorite: isFavorite, toggle: onToggleFavorite)) } } - -private struct FavoriteAccessibilityAction: ViewModifier { - let isFavorite: Bool - let toggle: (() -> Void)? - - func body(content: Content) -> some View { - if let toggle { - content.accessibilityAction( - named: isFavorite - ? Text("Remove from Favorites") - : Text("Add to Favorites"), - toggle - ) - } else { - content - } - } -} diff --git a/TableProTests/Core/Menu/MainMenuBuilderTests.swift b/TableProTests/Core/Menu/MainMenuBuilderTests.swift index 3a8d19e4f..e00790525 100644 --- a/TableProTests/Core/Menu/MainMenuBuilderTests.swift +++ b/TableProTests/Core/Menu/MainMenuBuilderTests.swift @@ -479,6 +479,7 @@ struct DatabaseMenuCommandTests { String(localized: "Show Table Structure"), String(localized: "Edit View Definition..."), String(localized: "Table Maintenance"), + String(localized: "Favorite Database"), String(localized: "Disconnect"), String(localized: "Reconnect") ] { @@ -494,6 +495,16 @@ struct DatabaseMenuCommandTests { #expect(submenu?.items.isEmpty == true, "The submenu is filled when it opens, not at build time") } + /// The keyboard path to database favorites. The row star is hover-revealed and the context + /// menus need a right-click, so without this menu the feature is pointer-only. + @Test("Favorite Database fills itself when the submenu opens") + func favoriteDatabaseSubmenuIsDelegateDriven() { + let container = databaseMenu()?.items.first { $0.title == String(localized: "Favorite Database") } + let submenu = container?.submenu + #expect(submenu?.delegate != nil, "The current environment must be read on menuNeedsUpdate") + #expect(submenu?.items.isEmpty == true, "The submenu is filled when it opens, not at build time") + } + @Test("Disconnect and Reconnect route through the responder chain") func connectionCommandsUseTheResponderChain() { let items = (databaseMenu()?.items ?? []).filter { diff --git a/TableProTests/Core/Storage/FavoriteDatabasesStorageTests.swift b/TableProTests/Core/Storage/FavoriteDatabasesStorageTests.swift index fa4dcfd1f..320d506ad 100644 --- a/TableProTests/Core/Storage/FavoriteDatabasesStorageTests.swift +++ b/TableProTests/Core/Storage/FavoriteDatabasesStorageTests.swift @@ -5,22 +5,38 @@ import Foundation import Testing +import TableProSyncTransport @testable import TablePro @MainActor @Suite("FavoriteDatabasesStorage") struct FavoriteDatabasesStorageTests { - private func makeStorage() throws -> (FavoriteDatabasesStorage, UserDefaults) { - let suite = "FavoriteDatabasesStorageTests.\(UUID().uuidString)" - let defaults = try #require(UserDefaults(suiteName: suite)) - defaults.removePersistentDomain(forName: suite) - return (FavoriteDatabasesStorage(defaults: defaults), defaults) + private static let storageKey = "com.TablePro.favoriteDatabases" + + private func makeStorage() throws -> (FavoriteDatabasesStorage, UserDefaults, SyncMetadataStorage) { + let favoritesSuite = "FavoriteDatabasesStorageTests.favorites.\(UUID().uuidString)" + let syncSuite = "FavoriteDatabasesStorageTests.sync.\(UUID().uuidString)" + let defaults = try #require(UserDefaults(suiteName: favoritesSuite)) + let syncDefaults = try #require(UserDefaults(suiteName: syncSuite)) + defaults.removePersistentDomain(forName: favoritesSuite) + syncDefaults.removePersistentDomain(forName: syncSuite) + + let metadata = SyncMetadataStorage(userDefaults: syncDefaults) + let storage = FavoriteDatabasesStorage( + defaults: defaults, + syncTracker: SyncChangeTracker(metadataStorage: metadata) + ) + return (storage, defaults, metadata) + } + + private func store(_ json: String, in defaults: UserDefaults) { + defaults.set(Data(json.utf8), forKey: Self.storageKey) } @Test("Favorite identity includes the connection") func favoritesAreConnectionScoped() throws { - let (storage, _) = try makeStorage() + let (storage, _, _) = try makeStorage() let first = UUID() let second = UUID() @@ -33,7 +49,7 @@ struct FavoriteDatabasesStorageTests { @Test("Changing an environment replaces the favorite instead of duplicating it") func environmentUpdateReplacesEntry() throws { - let (storage, _) = try makeStorage() + let (storage, _, _) = try makeStorage() let connectionId = UUID() storage.setFavorite(database: "orders", environment: .development, connectionId: connectionId) @@ -46,7 +62,7 @@ struct FavoriteDatabasesStorageTests { @Test("Removing one database preserves the connection's other favorites") func removePreservesOtherEntries() throws { - let (storage, _) = try makeStorage() + let (storage, _, _) = try makeStorage() let connectionId = UUID() storage.setFavorite(database: "app", environment: .development, connectionId: connectionId) storage.setFavorite(database: "audit", environment: .testing, connectionId: connectionId) @@ -58,59 +74,194 @@ struct FavoriteDatabasesStorageTests { @Test("An unknown stored environment falls back to Unassigned") func unknownEnvironmentFallsBack() throws { - let (storage, defaults) = try makeStorage() + let (storage, defaults, _) = try makeStorage() let connectionId = UUID() - let json = """ - [{"connectionId":"\(connectionId.uuidString)","database":"future","environment":"staging"}] - """ - defaults.set( - Data(json.utf8), - forKey: "com.TablePro.favoriteDatabases.\(connectionId.uuidString)" + store( + """ + [{"connectionId":"\(connectionId.uuidString)","database":"future","environment":"staging"}] + """, + in: defaults + ) + + #expect(storage.favorites(for: connectionId).first?.environment == .unassigned) + } + + @Test("Malformed storage reads as no favorites rather than crashing") + func malformedStorageReturnsEmpty() throws { + let (storage, defaults, _) = try makeStorage() + store("not-json", in: defaults) + + #expect(storage.loadFavorites().isEmpty) + } + + @Test("A favorite belongs only to the connection it names") + func ignoresEntriesFromAnotherConnection() throws { + let (storage, defaults, _) = try makeStorage() + let requested = UUID() + let foreign = UUID() + store( + """ + [{"connectionId":"\(foreign.uuidString)","database":"private","environment":"production"}] + """, + in: defaults + ) + + #expect(storage.favorites(for: requested).isEmpty) + #expect(storage.favorites(for: foreign).map(\.database) == ["private"]) + } + + @Test("Deleting a connection removes its favorites and leaves the others alone") + func removeConnectionFavorites() throws { + let (storage, _, _) = try makeStorage() + let deleted = UUID() + let kept = UUID() + storage.setFavorite(database: "app", environment: .production, connectionId: deleted) + storage.setFavorite(database: "app", environment: .production, connectionId: kept) + + storage.removeFavorites(for: deleted) + + #expect(storage.favorites(for: deleted).isEmpty) + #expect(storage.favorites(for: kept).map(\.database) == ["app"]) + } + + // MARK: - Change notification + + @Test("Re-picking the environment a database already has changes nothing") + func settingTheSameEnvironmentIsANoOp() throws { + let (storage, _, metadata) = try makeStorage() + let connectionId = UUID() + storage.setFavorite(database: "app", environment: .production, connectionId: connectionId) + metadata.clearDirty(type: .favoriteDatabase) + + var notifications = 0 + let observer = NotificationCenter.default.addObserver( + forName: .favoriteDatabasesDidChange, object: nil, queue: nil + ) { _ in notifications += 1 } + defer { NotificationCenter.default.removeObserver(observer) } + + storage.setFavorite(database: "app", environment: .production, connectionId: connectionId) + + #expect(notifications == 0) + #expect(metadata.dirtyIds(for: .favoriteDatabase).isEmpty) + } + + @Test("Removing a database that is not a favorite changes nothing") + func removingAnAbsentFavoriteIsANoOp() throws { + let (storage, _, metadata) = try makeStorage() + let connectionId = UUID() + + storage.removeFavorite(database: "missing", connectionId: connectionId) + + #expect(metadata.tombstones(for: .favoriteDatabase).isEmpty) + } + + // MARK: - Sync + + @Test("Adding a favorite marks its sync id dirty") + func addMarksDirty() throws { + let (storage, _, metadata) = try makeStorage() + let connectionId = UUID() + storage.setFavorite(database: "app", environment: .development, connectionId: connectionId) + + let entry = FavoriteDatabaseEntry( + connectionId: connectionId, + database: "app", + environment: .development + ) + #expect(metadata.dirtyIds(for: .favoriteDatabase) == [FavoriteDatabasesStorage.syncId(for: entry)]) + } + + /// The record is keyed on identity alone. Hashing the environment into it would orphan the old + /// record on every re-tag and push a second one beside it. + @Test("Re-tagging a database keeps its sync id") + func syncIdIgnoresEnvironment() { + let connectionId = UUID() + let development = FavoriteDatabaseEntry( + connectionId: connectionId, + database: "app", + environment: .development + ) + let production = FavoriteDatabaseEntry( + connectionId: connectionId, + database: "app", + environment: .production ) #expect( - storage.favorites(for: connectionId).first?.environment - == FavoriteDatabaseEnvironment.none + FavoriteDatabasesStorage.syncId(for: development) + == FavoriteDatabasesStorage.syncId(for: production) ) } - @Test("Malformed storage is contained to the affected connection") - func malformedStorageReturnsEmpty() throws { - let (storage, defaults) = try makeStorage() + @Test("Two connections with the same database name get different sync ids") + func syncIdIncludesConnection() { + let first = FavoriteDatabaseEntry(connectionId: UUID(), database: "app", environment: .development) + let second = FavoriteDatabaseEntry(connectionId: UUID(), database: "app", environment: .development) + + #expect(FavoriteDatabasesStorage.syncId(for: first) != FavoriteDatabasesStorage.syncId(for: second)) + } + + @Test("Removing a favorite creates a sync tombstone") + func removeCreatesTombstone() throws { + let (storage, _, metadata) = try makeStorage() + let connectionId = UUID() + storage.setFavorite(database: "app", environment: .development, connectionId: connectionId) + storage.removeFavorite(database: "app", connectionId: connectionId) + + let entry = FavoriteDatabaseEntry( + connectionId: connectionId, + database: "app", + environment: .development + ) + let id = FavoriteDatabasesStorage.syncId(for: entry) + #expect(metadata.dirtyIds(for: .favoriteDatabase).isEmpty) + #expect(metadata.tombstones(for: .favoriteDatabase).contains { $0.id == id }) + } + + @Test("Remote apply helpers track no local change") + func withoutSyncTracksNothing() throws { + let (storage, _, metadata) = try makeStorage() let connectionId = UUID() - defaults.set( - Data("not-json".utf8), - forKey: "com.TablePro.favoriteDatabases.\(connectionId.uuidString)" + let entry = FavoriteDatabaseEntry( + connectionId: connectionId, + database: "orders", + environment: .testing ) + storage.setFavoriteWithoutSync(entry) + #expect(storage.favorites(for: connectionId).first?.environment == .testing) + + storage.removeFavoriteWithoutSync(id: FavoriteDatabasesStorage.syncId(for: entry)) #expect(storage.favorites(for: connectionId).isEmpty) + #expect(metadata.dirtyIds(for: .favoriteDatabase).isEmpty) + #expect(metadata.tombstones(for: .favoriteDatabase).isEmpty) } - @Test("Stored entries cannot cross connection boundaries") - func ignoresEntriesFromAnotherConnection() throws { - let (storage, defaults) = try makeStorage() - let requestedConnectionId = UUID() - let foreignConnectionId = UUID() - let json = """ - [{"connectionId":"\(foreignConnectionId.uuidString)","database":"private","environment":"production"}] - """ - defaults.set( - Data(json.utf8), - forKey: "com.TablePro.favoriteDatabases.\(requestedConnectionId.uuidString)" + /// A remote apply carries a payload, so it has to overwrite rather than insert-if-absent. + @Test("A remote apply overwrites the local environment") + func remoteApplyOverwritesEnvironment() throws { + let (storage, _, _) = try makeStorage() + let connectionId = UUID() + storage.setFavorite(database: "app", environment: .development, connectionId: connectionId) + + storage.setFavoriteWithoutSync( + FavoriteDatabaseEntry(connectionId: connectionId, database: "app", environment: .production) ) - #expect(storage.favorites(for: requestedConnectionId).isEmpty) + #expect(storage.favorites(for: connectionId).map(\.environment) == [.production]) } - @Test("Deleting a connection removes its persisted favorites") - func removeConnectionFavorites() throws { - let (storage, defaults) = try makeStorage() + @Test("Deleting a connection remotely leaves no tombstone to push back") + func remoteConnectionDeleteTracksNothing() throws { + let (storage, _, metadata) = try makeStorage() let connectionId = UUID() - storage.setFavorite(database: "app", environment: .production, connectionId: connectionId) + storage.setFavoriteWithoutSync( + FavoriteDatabaseEntry(connectionId: connectionId, database: "app", environment: .production) + ) - storage.removeFavorites(for: connectionId) + storage.removeFavoritesWithoutSync(for: connectionId) #expect(storage.favorites(for: connectionId).isEmpty) - #expect(defaults.object(forKey: "com.TablePro.favoriteDatabases.\(connectionId.uuidString)") == nil) + #expect(metadata.tombstones(for: .favoriteDatabase).isEmpty) } } diff --git a/TableProTests/Core/Sync/FavoriteDatabaseSyncTests.swift b/TableProTests/Core/Sync/FavoriteDatabaseSyncTests.swift new file mode 100644 index 000000000..3abd850c2 --- /dev/null +++ b/TableProTests/Core/Sync/FavoriteDatabaseSyncTests.swift @@ -0,0 +1,128 @@ +// +// FavoriteDatabaseSyncTests.swift +// TableProTests +// + +import CloudKit +import Foundation +import Testing +import TableProSyncTransport + +@testable import TablePro + +@Suite("Favorite database sync") +struct FavoriteDatabaseSyncTests { + private static let zoneID = CKRecordZone.ID( + zoneName: "TableProSync", + ownerName: CKCurrentUserDefaultName + ) + + /// `FavoriteDatabase` is declared but not deployed to the CloudKit Production schema, so every + /// field is unverified and the gated subscript drops every write. That is what keeps the type + /// inert: nothing reaches CloudKit until the schema ships and both sets flip together. + @Test("The record type is declared but withheld until the schema is deployed") + func recordTypeIsWithheld() { + #expect(SyncRecordType.allCases.contains(.favoriteDatabase)) + #expect(!SyncRecordType.favoriteDatabase.isWritable) + #expect(FavoriteDatabaseSyncField.writableKeys.isEmpty) + #expect(!FavoriteDatabaseSyncField.declaredKeys.isEmpty) + } + + @Test("A record of the withheld type is never published") + func recordsAreNotPublished() { + let record = CKRecord( + recordType: SyncRecordType.favoriteDatabase.rawValue, + recordID: CKRecord.ID( + recordName: SyncRecordType.favoriteDatabase.recordName(for: "abc"), + zoneID: Self.zoneID + ) + ) + + #expect(SyncSchemaGate.publishable(records: [record]).isEmpty) + #expect(SyncSchemaGate.withheldRecordTypes(in: [record]) == ["FavoriteDatabase"]) + #expect(SyncSchemaGate.publishable(deletions: [record.recordID]).isEmpty) + } + + /// `FavoriteDatabase_` has to beat `Favorite_` when a record name is parsed back, which the + /// longest-prefix ordering guarantees. + @Test("A record name round trips to the right type") + func recordNameRoundTrips() throws { + let name = SyncRecordType.favoriteDatabase.recordName(for: "abc123") + let parsed = try #require(SyncRecordType.parse(recordName: name)) + + #expect(parsed.type == .favoriteDatabase) + #expect(parsed.id == "abc123") + } + + @Test("The type is in scope for sync rather than device-local") + func syncScope() { + #expect(SyncRecordType.favoriteDatabase.syncScope == .synced) + } + + @Test("Every declared field carries a key") + func declaredKeys() { + #expect( + FavoriteDatabaseSyncField.declaredKeys + == ["connectionId", "database", "environment", "modifiedAtLocal", "schemaVersion"] + ) + } + + /// The mapper's decode has to survive an environment a future build introduces, or one record + /// from a newer device would drop the favorite instead of keeping it untagged. + @Test("An unknown remote environment decodes as Unassigned") + func unknownEnvironmentDecodes() throws { + let record = CKRecord( + recordType: SyncRecordType.favoriteDatabase.rawValue, + recordID: CKRecord.ID( + recordName: SyncRecordType.favoriteDatabase.recordName(for: "abc"), + zoneID: Self.zoneID + ) + ) + let connectionId = UUID() + record["connectionId"] = connectionId.uuidString + record["database"] = "app" + record["environment"] = "staging" + + let entry = try SyncRecordMapper.favoriteDatabase(from: record) + + #expect(entry.connectionId == connectionId) + #expect(entry.database == "app") + #expect(entry.environment == .unassigned) + } + + @Test("A record with no database is refused rather than decoded to an empty favorite") + func missingDatabaseThrows() { + let record = CKRecord( + recordType: SyncRecordType.favoriteDatabase.rawValue, + recordID: CKRecord.ID( + recordName: SyncRecordType.favoriteDatabase.recordName(for: "abc"), + zoneID: Self.zoneID + ) + ) + record["connectionId"] = UUID().uuidString + + #expect(throws: (any Error).self) { + try SyncRecordMapper.favoriteDatabase(from: record) + } + } + + /// Encoding writes through the gated subscript, so an unverified field lands nowhere. The record + /// is still well formed and correctly named; only its payload waits for the deploy. + @Test("Encoding produces the right record identity and writes no undeployed field") + func encodeIsInert() { + let entry = FavoriteDatabaseEntry( + connectionId: UUID(), + database: "app", + environment: .production + ) + let record = SyncRecordMapper.toCKRecord(favoriteDatabase: entry, in: Self.zoneID) + + #expect(record.recordType == "FavoriteDatabase") + #expect( + record.recordID.recordName + == SyncRecordType.favoriteDatabase.recordName(for: FavoriteDatabasesStorage.syncId(for: entry)) + ) + #expect(record["database"] == nil) + #expect(record["environment"] == nil) + } +} diff --git a/TableProTests/Models/FavoriteDatabaseGroupingTests.swift b/TableProTests/Models/FavoriteDatabaseGroupingTests.swift index 99a9a58be..cf3a9b97a 100644 --- a/TableProTests/Models/FavoriteDatabaseGroupingTests.swift +++ b/TableProTests/Models/FavoriteDatabaseGroupingTests.swift @@ -27,14 +27,14 @@ struct FavoriteDatabaseGroupingTests { entry("prod", .production), entry("dev10", .development), entry("dev2", .development), - entry("misc", .none), + entry("misc", .unassigned), entry("test", .testing) ], searchText: "", filter: .all ) - #expect(groups.map(\.environment) == [.development, .testing, .production, .none]) + #expect(groups.map(\.environment) == [.development, .testing, .production, .unassigned]) #expect(groups.first?.entries.map(\.database) == ["dev2", "dev10"]) } @@ -42,7 +42,7 @@ struct FavoriteDatabaseGroupingTests { func filtersByEnvironment() { let entries: Set = [ entry("dev", .development), - entry("misc", .none), + entry("misc", .unassigned), entry("prod", .production) ] let groups = FavoriteDatabaseGrouping.groups( @@ -62,8 +62,8 @@ struct FavoriteDatabaseGroupingTests { #expect(unassigned.first?.entries.map(\.database) == ["misc"]) } - @Test("Search matches a database or its environment title") - func searchMatchesNamesAndEnvironment() { + @Test("Search matches a database name") + func searchMatchesNames() { let entries: Set = [ entry("billing", .development), entry("warehouse", .production) @@ -74,14 +74,27 @@ struct FavoriteDatabaseGroupingTests { searchText: "bill", filter: .all ) - let environmentMatch = FavoriteDatabaseGrouping.groups( + + #expect(nameMatch.flatMap(\.entries).map(\.database) == ["billing"]) + } + + /// The search field is shared with saved queries and favorite tables, so matching the localized + /// environment title meant typing "product" to find a `products` table also listed every + /// Production database. The environment is already selectable in the filter above the list. + @Test("Search does not match the environment title") + func searchIgnoresEnvironmentTitle() { + let entries: Set = [ + entry("billing", .development), + entry("warehouse", .production) + ] + + let byTitle = FavoriteDatabaseGrouping.groups( entries: entries, - searchText: "Production", + searchText: FavoriteDatabaseEnvironment.production.title, filter: .all ) - #expect(nameMatch.flatMap(\.entries).map(\.database) == ["billing"]) - #expect(environmentMatch.flatMap(\.entries).map(\.database) == ["warehouse"]) + #expect(byTitle.isEmpty) } @Test("No matches produce no empty groups") diff --git a/TableProTests/Models/SharedSidebarStateTests.swift b/TableProTests/Models/SharedSidebarStateTests.swift index 8f75b4343..55ab1a3da 100644 --- a/TableProTests/Models/SharedSidebarStateTests.swift +++ b/TableProTests/Models/SharedSidebarStateTests.swift @@ -103,8 +103,8 @@ struct SharedSidebarStateTests { let restored = SharedSidebarState.forConnection(id) #expect(restored.favoriteDatabaseEnvironmentFilter == .testing) - restored.favoriteDatabaseEnvironmentFilter = .all SharedSidebarState.removeConnection(id) + SidebarPersistenceKey.removeAll(connectionId: id) } @Test("filter text is independent across different connections") diff --git a/TableProTests/ViewModels/FavoritesExpansionStateTests.swift b/TableProTests/ViewModels/FavoritesExpansionStateTests.swift new file mode 100644 index 000000000..0bfab919b --- /dev/null +++ b/TableProTests/ViewModels/FavoritesExpansionStateTests.swift @@ -0,0 +1,93 @@ +// +// FavoritesExpansionStateTests.swift +// TableProTests +// + +import Foundation +import Testing + +@testable import TablePro + +@MainActor +@Suite("FavoritesExpansionState") +struct FavoritesExpansionStateTests { + private func makeState() throws -> (FavoritesExpansionState, UserDefaults, String) { + let suite = "FavoritesExpansionStateTests.\(UUID().uuidString)" + let defaults = try #require(UserDefaults(suiteName: suite)) + defaults.removePersistentDomain(forName: suite) + return (FavoritesExpansionState(defaults: defaults), defaults, suite) + } + + @Test("A group is expanded until it is collapsed") + func collapsingAGroup() throws { + let (state, _, _) = try makeState() + let connectionId = UUID() + + #expect(state.isDatabaseEnvironmentExpanded(.production, for: connectionId)) + + state.setDatabaseEnvironmentExpanded(.production, expanded: false, for: connectionId) + #expect(!state.isDatabaseEnvironmentExpanded(.production, for: connectionId)) + #expect(state.isDatabaseEnvironmentExpanded(.testing, for: connectionId)) + } + + @Test("Collapsed groups survive a reload") + func collapsedGroupsPersist() throws { + let (state, defaults, _) = try makeState() + let connectionId = UUID() + state.setDatabaseEnvironmentExpanded(.development, expanded: false, for: connectionId) + + let reloaded = FavoritesExpansionState(defaults: defaults) + #expect(!reloaded.isDatabaseEnvironmentExpanded(.development, for: connectionId)) + } + + /// The bug: `Set` fails the whole payload on one unknown case, so a + /// build that added an environment and was then rolled back discarded the collapsed state of + /// every group of every connection, permanently, from the next write onward. + @Test("One unrecognized environment does not discard the other connections") + func unknownEnvironmentIsSkipped() throws { + let known = UUID() + let partial = UUID() + let stored: [UUID: Set] = [ + known: ["production"], + partial: ["staging", "testing"] + ] + + let decoded = FavoritesExpansionState.decodeCollapsedEnvironments( + try JSONEncoder().encode(stored) + ) + + #expect(decoded[known] == [.production]) + #expect(decoded[partial] == [.testing]) + } + + @Test("A connection whose every collapsed environment is unknown drops out entirely") + func fullyUnknownConnectionDropsOut() throws { + let stored: [UUID: Set] = [UUID(): ["staging"]] + + #expect( + FavoritesExpansionState + .decodeCollapsedEnvironments(try JSONEncoder().encode(stored)) + .isEmpty + ) + } + + @Test("Malformed data reads as no collapsed groups") + func malformedDataIsEmpty() { + #expect(FavoritesExpansionState.decodeCollapsedEnvironments(Data("not-json".utf8)).isEmpty) + #expect(FavoritesExpansionState.decodeCollapsedEnvironments(nil).isEmpty) + } + + @Test("Deleting a connection forgets its groups and leaves the others alone") + func removeConnection() throws { + let (state, _, _) = try makeState() + let deleted = UUID() + let kept = UUID() + state.setDatabaseEnvironmentExpanded(.production, expanded: false, for: deleted) + state.setDatabaseEnvironmentExpanded(.production, expanded: false, for: kept) + + state.removeConnection(deleted) + + #expect(state.isDatabaseEnvironmentExpanded(.production, for: deleted)) + #expect(!state.isDatabaseEnvironmentExpanded(.production, for: kept)) + } +} diff --git a/TableProTests/ViewModels/QuickSwitcherViewModelTests.swift b/TableProTests/ViewModels/QuickSwitcherViewModelTests.swift index fde88ec77..7de433a51 100644 --- a/TableProTests/ViewModels/QuickSwitcherViewModelTests.swift +++ b/TableProTests/ViewModels/QuickSwitcherViewModelTests.swift @@ -49,6 +49,7 @@ struct QuickSwitcherViewModelTests { schemaProviderRegistry: SchemaProviderRegistry(), sqlFavoriteManager: sqlFavoriteManager ?? live.sqlFavoriteManager, favoriteTablesStorage: live.favoriteTablesStorage, + favoriteDatabasesStorage: live.favoriteDatabasesStorage, aiChatStorage: live.aiChatStorage, aiKeyStorage: live.aiKeyStorage, groupStorage: live.groupStorage, diff --git a/TableProTests/ViewModels/WelcomeViewModelTests.swift b/TableProTests/ViewModels/WelcomeViewModelTests.swift index 118df2f33..d37ef640e 100644 --- a/TableProTests/ViewModels/WelcomeViewModelTests.swift +++ b/TableProTests/ViewModels/WelcomeViewModelTests.swift @@ -84,6 +84,7 @@ final class WelcomeViewModelTests: XCTestCase { schemaProviderRegistry: live.schemaProviderRegistry, sqlFavoriteManager: live.sqlFavoriteManager, favoriteTablesStorage: live.favoriteTablesStorage, + favoriteDatabasesStorage: live.favoriteDatabasesStorage, aiChatStorage: live.aiChatStorage, aiKeyStorage: live.aiKeyStorage, groupStorage: groupStorage, diff --git a/TableProTests/Views/Sidebar/DatabaseTreeMenuSpecTests.swift b/TableProTests/Views/Sidebar/DatabaseTreeMenuSpecTests.swift index e18952919..6f1dcceec 100644 --- a/TableProTests/Views/Sidebar/DatabaseTreeMenuSpecTests.swift +++ b/TableProTests/Views/Sidebar/DatabaseTreeMenuSpecTests.swift @@ -25,7 +25,7 @@ struct DatabaseTreeMenuSpecTests { selectedContainers: [DatabaseContainerRef] = [], isReadOnly: Bool = false, isFavorite: Bool = false, - favoriteDatabaseEnvironment: FavoriteDatabaseEnvironment? = nil, + favoriteDatabaseEnvironments: [String: FavoriteDatabaseEnvironment] = [:], activeDatabase: String? = "app", activeSchema: String? = "public", canReachOtherDatabases: Bool = true, @@ -57,7 +57,7 @@ struct DatabaseTreeMenuSpecTests { schemaEntityNamePlural: "Schemas", objectKindTitles: [.table: "Tables"], isFavorite: isFavorite, - favoriteDatabaseEnvironment: favoriteDatabaseEnvironment, + favoriteDatabaseEnvironments: favoriteDatabaseEnvironments, showObjectIcons: true, showObjectComments: false, rowSize: .matchSystem, @@ -299,9 +299,9 @@ struct DatabaseTreeMenuSpecTests { #expect(titles(items).contains(String(localized: "Add to Favorites"))) for environment in FavoriteDatabaseEnvironment.allCases { - #expect(issued.contains(.setFavoriteDatabase(database: "analytics", environment: environment))) + #expect(issued.contains(.setFavoriteDatabases(databases: ["analytics"], environment: environment))) } - #expect(!issued.contains(.removeFavoriteDatabase("analytics"))) + #expect(!issued.contains(.removeFavoriteDatabases(["analytics"]))) } @Test("A favorite database can change environment or be removed") @@ -309,13 +309,64 @@ struct DatabaseTreeMenuSpecTests { let database = DatabaseMetadata.minimal(name: "analytics", isSystem: false) let items = DatabaseTreeMenuSpec.items(for: context( clicked: .database(database), - favoriteDatabaseEnvironment: .production + favoriteDatabaseEnvironments: ["analytics": .production] )) let issued = commands(items) #expect(titles(items).contains(String(localized: "Environment"))) - #expect(issued.contains(.removeFavoriteDatabase("analytics"))) - #expect(issued.contains(.setFavoriteDatabase(database: "analytics", environment: .development))) + #expect(issued.contains(.removeFavoriteDatabases(["analytics"]))) + #expect(issued.contains(.setFavoriteDatabases(databases: ["analytics"], environment: .development))) + } + + /// A right-click inside a multi-selection acts on the whole selection, which is what + /// `NSTableView.clickedRow` documents and what `FieldDrivenList` already does. The favorite + /// items used to disappear entirely once a second database was selected. + @Test("A multi-database selection still offers the favorite items, for every database") + func favoriteItemsSurviveMultiSelection() { + let clicked = DatabaseMetadata.minimal(name: "analytics", isSystem: false) + let items = DatabaseTreeMenuSpec.items(for: context( + clicked: .database(clicked), + selectedContainers: [ + .database("analytics", isSystem: false), + .database("reporting", isSystem: false) + ] + )) + let issued = commands(items) + + #expect(titles(items).contains(String(localized: "Add to Favorites"))) + #expect(issued.contains( + .setFavoriteDatabases(databases: ["analytics", "reporting"], environment: .production) + )) + } + + /// Retagging is only what the menu offers when every target is already a favorite; a selection + /// that mixes the two still says "Add to Favorites", and no environment is checked. + @Test("A mixed selection offers Add to Favorites with no environment checked") + func mixedSelectionOffersAdd() { + let clicked = DatabaseMetadata.minimal(name: "analytics", isSystem: false) + let items = DatabaseTreeMenuSpec.items(for: context( + clicked: .database(clicked), + selectedContainers: [ + .database("analytics", isSystem: false), + .database("reporting", isSystem: false) + ], + favoriteDatabaseEnvironments: ["analytics": .production] + )) + + #expect(titles(items).contains(String(localized: "Add to Favorites"))) + #expect(commands(items).contains(.removeFavoriteDatabases(["analytics", "reporting"]))) + } + + /// An engine with no database dimension names no database on its container refs, and a favorite + /// that names nothing is unreachable. + @Test("A schema row offers no favorite items") + func schemaRowOffersNoFavoriteItems() { + let items = DatabaseTreeMenuSpec.items( + for: context(clicked: .schema(database: "app", schema: "public")) + ) + + #expect(!titles(items).contains(String(localized: "Add to Favorites"))) + #expect(!titles(items).contains(String(localized: "Environment"))) } // MARK: - Shape diff --git a/TableProTests/Views/Sidebar/FavoriteDatabaseMenuTests.swift b/TableProTests/Views/Sidebar/FavoriteDatabaseMenuTests.swift new file mode 100644 index 000000000..069f7a200 --- /dev/null +++ b/TableProTests/Views/Sidebar/FavoriteDatabaseMenuTests.swift @@ -0,0 +1,91 @@ +// +// FavoriteDatabaseMenuTests.swift +// TableProTests +// + +import Foundation +import Testing + +@testable import TablePro + +@Suite("FavoriteDatabaseMenu") +struct FavoriteDatabaseMenuTests { + @Test("One database that is not a favorite offers Add to Favorites with nothing checked") + func singleNonFavorite() { + let state = FavoriteDatabaseSelectionState(environments: [nil]) + + #expect(FavoriteDatabaseMenu.submenuTitle(for: state) == String(localized: "Add to Favorites")) + #expect(!state.hasFavorite) + #expect(FavoriteDatabaseMenu.environmentItems(for: state).allSatisfy { !$0.isOn }) + } + + @Test("One favorite offers Environment with its own tag checked") + func singleFavorite() { + let state = FavoriteDatabaseSelectionState(environments: [.production]) + + #expect(FavoriteDatabaseMenu.submenuTitle(for: state) == String(localized: "Environment")) + #expect(state.hasFavorite) + let checked = FavoriteDatabaseMenu.environmentItems(for: state).filter(\.isOn) + #expect(checked.map(\.environment) == [.production]) + } + + @Test("A selection that agrees on its tag keeps the checkmark") + func uniformSelection() { + let state = FavoriteDatabaseSelectionState(environments: [.testing, .testing]) + + #expect(FavoriteDatabaseMenu.submenuTitle(for: state) == String(localized: "Environment")) + #expect(FavoriteDatabaseMenu.environmentItems(for: state).filter(\.isOn).map(\.environment) == [.testing]) + } + + /// Checking one option would claim every selected database carries it. + @Test("A selection that disagrees on its tag checks nothing") + func mixedEnvironments() { + let state = FavoriteDatabaseSelectionState(environments: [.testing, .production]) + + #expect(FavoriteDatabaseMenu.submenuTitle(for: state) == String(localized: "Environment")) + #expect(FavoriteDatabaseMenu.environmentItems(for: state).allSatisfy { !$0.isOn }) + } + + @Test("A selection where only some are favorites still offers Add to Favorites") + func partiallyFavorite() { + let state = FavoriteDatabaseSelectionState(environments: [.production, nil]) + + #expect(FavoriteDatabaseMenu.submenuTitle(for: state) == String(localized: "Add to Favorites")) + #expect(state.hasFavorite) + #expect(!state.isEntirelyFavorite) + #expect(FavoriteDatabaseMenu.environmentItems(for: state).allSatisfy { !$0.isOn }) + } + + @Test("An empty selection has nothing to offer") + func emptySelection() { + let state = FavoriteDatabaseSelectionState(environments: []) + + #expect(state.isEmpty) + #expect(!state.hasFavorite) + #expect(!state.isEntirelyFavorite) + } + + @Test("Every environment gets an item, in declaration order") + func coversEveryEnvironment() { + let items = FavoriteDatabaseMenu.environmentItems( + for: FavoriteDatabaseSelectionState(environments: [nil]) + ) + + #expect(items.map(\.environment) == FavoriteDatabaseEnvironment.allCases) + #expect(items.map(\.title) == FavoriteDatabaseEnvironment.allCases.map(\.title)) + } + + /// One bucket, one name. The group header, the filter popup and both menus used to disagree, + /// showing "No Environment" beside a group labelled "Unassigned". + @Test("The unassigned bucket has exactly one name everywhere") + func unassignedHasOneName() { + let menuTitle = FavoriteDatabaseMenu.environmentItems( + for: FavoriteDatabaseSelectionState(environments: [nil]) + ) + .first { $0.environment == .unassigned }? + .title + + #expect(menuTitle == FavoriteDatabaseEnvironment.unassigned.title) + #expect(menuTitle == FavoriteDatabaseEnvironmentFilter.unassigned.title) + } +} diff --git a/TableProTests/Views/Sidebar/FavoritesEmptyStateTests.swift b/TableProTests/Views/Sidebar/FavoritesEmptyStateTests.swift new file mode 100644 index 000000000..c50a47d16 --- /dev/null +++ b/TableProTests/Views/Sidebar/FavoritesEmptyStateTests.swift @@ -0,0 +1,81 @@ +// +// FavoritesEmptyStateTests.swift +// TableProTests +// + +import Foundation +import Testing + +@testable import TablePro + +@Suite("FavoritesEmptyState") +struct FavoritesEmptyStateTests { + private func input( + isInitialLoadComplete: Bool = true, + hasAnyFavorite: Bool = true, + hasVisibleContent: Bool = false, + searchText: String = "", + isEnvironmentFiltered: Bool = false + ) -> FavoritesEmptyState.Input { + FavoritesEmptyState.Input( + isInitialLoadComplete: isInitialLoadComplete, + hasAnyFavorite: hasAnyFavorite, + hasVisibleContent: hasVisibleContent, + searchText: searchText, + isEnvironmentFiltered: isEnvironmentFiltered + ) + } + + @Test("Anything visible wins over every empty state") + func contentWins() { + #expect( + FavoritesEmptyState.resolve(input( + hasVisibleContent: true, + searchText: "nothing matches this", + isEnvironmentFiltered: true + )) == .content + ) + } + + @Test("Nothing loaded yet and nothing stored reads as loading") + func loading() { + #expect( + FavoritesEmptyState.resolve(input(isInitialLoadComplete: false, hasAnyFavorite: false)) + == .loading + ) + } + + @Test("A connection with no favorites at all gets the onboarding state") + func noFavorites() { + #expect(FavoritesEmptyState.resolve(input(hasAnyFavorite: false)) == .noFavorites) + } + + @Test("A failed search reports the term the user typed") + func searchMiss() { + #expect(FavoritesEmptyState.resolve(input(searchText: "orders")) == .noSearchMatch("orders")) + } + + /// The bug: an environment filter that matched nothing rendered `ContentUnavailableView.search` + /// for a search the user never ran, so a persisted filter greeted them with "No Results" and an + /// empty query on the next launch. + @Test("A filter miss with no search term is a filter state, not a search state") + func filterMissIsNotASearchMiss() { + #expect( + FavoritesEmptyState.resolve(input(searchText: "", isEnvironmentFiltered: true)) + == .noFilterMatch + ) + } + + @Test("A search term wins over the filter when both are narrowing") + func searchWinsOverFilter() { + #expect( + FavoritesEmptyState.resolve(input(searchText: "app", isEnvironmentFiltered: true)) + == .noSearchMatch("app") + ) + } + + @Test("Favorites exist, nothing is narrowing, and nothing shows: still the onboarding state") + func neitherNarrowing() { + #expect(FavoritesEmptyState.resolve(input()) == .noFavorites) + } +} diff --git a/TableProTests/Views/Sidebar/SidebarOutlineScaffoldTests.swift b/TableProTests/Views/Sidebar/SidebarOutlineScaffoldTests.swift index 69c504ab2..be47c4f29 100644 --- a/TableProTests/Views/Sidebar/SidebarOutlineScaffoldTests.swift +++ b/TableProTests/Views/Sidebar/SidebarOutlineScaffoldTests.swift @@ -732,7 +732,7 @@ struct DatabaseTreeFavoriteRefreshTests { ) settle(window) - #expect(coordinator.favoriteDatabaseEnvironment(for: "shop") == .production) + #expect(coordinator.favoriteDatabaseEnvironments()["shop"] == .production) #expect(cell.hostedView === host) let favoritePixels = try trailingPixels(of: cell) #expect(unfavoritePixels != favoritePixels) @@ -740,7 +740,7 @@ struct DatabaseTreeFavoriteRefreshTests { databaseStorage.removeFavorite(database: "shop", connectionId: connectionId) settle(window) - #expect(coordinator.favoriteDatabaseEnvironment(for: "shop") == nil) + #expect(coordinator.favoriteDatabaseEnvironments()["shop"] == nil) #expect(cell.hostedView === host) #expect(try trailingPixels(of: cell) != favoritePixels) } diff --git a/docs/features/favorites.mdx b/docs/features/favorites.mdx index c4892c14b..67f0cdb05 100644 --- a/docs/features/favorites.mdx +++ b/docs/features/favorites.mdx @@ -7,15 +7,21 @@ The Favorites tab keeps pinned databases and tables beside saved SQL. The sideba ## Database Favorites -In Tree layout, right-click a database and choose **Add to Favorites**, then assign it to Development, Testing, Production, or Unassigned. A filled star marks the database in the tree. +Mark a database as a favorite from any of three places, then assign it to Development, Testing, Production, or Unassigned: -Favorite databases appear first in the Favorites tab, grouped by environment. Use the Environment menu to show one group, and use the sidebar search field to filter by database or environment name. Double-click a database, or select it and press Return, to make it active. Right-click it to change its environment or remove it. +- **The database switcher**: click the database name in the toolbar, then right-click a row +- **Tree layout**: hover a database row and click the star, or right-click the row +- **The menu bar**: **Database > Favorite Database**, which works in every sidebar layout + +Right-clicking a database that sits inside a multiple selection acts on the whole selection. A filled star marks the database in the tree and in the switcher. + +Favorite databases appear first in the Favorites tab, grouped by environment. Use the Environment menu to show one group, and use the sidebar search field to filter by database name. Double-click a database, or select it and press Return, to make it active. Right-click it to change its environment or remove it. Favorite databases grouped into Development, Testing, and Production in the Favorites sidebar -Database favorites are stored locally for each connection. Database names that no longer exist stay in Favorites so you can remove them; trying to activate one shows the database driver's normal switch error. +Database favorites are scoped to the connection. Database names that no longer exist stay in Favorites so you can remove them; trying to activate one shows the database driver's normal switch error. ## Table Favorites diff --git a/docs/features/icloud-sync.mdx b/docs/features/icloud-sync.mdx index 110cca65a..b0fea3292 100644 --- a/docs/features/icloud-sync.mdx +++ b/docs/features/icloud-sync.mdx @@ -14,6 +14,7 @@ TablePro syncs your connections, groups, table favorites, saved queries, setting | **Groups & Tags** | Yes | Full connection organization, including nested group hierarchy and sort order | | **SSH Profiles** | Yes | Named [SSH profiles](/features/ssh-profiles). Has its own toggle. | | **Table Favorites** | Yes | Favorited table names shown in the Favorites tab and pinned in table lists | +| **Database Favorites** | Yes | Favorited databases and their Development / Testing / Production tags. Has its own toggle. | | **Saved Queries** | Yes | Saved SQL queries and their folders. Has its own toggle. | | **Settings** | Yes | General, Appearance, Editor, Data Grid, History, Tabs, Keyboard, and AI settings, plus custom AI slash commands and saved per-table column widths and order | | **Linked SQL Folders** | No | Folder paths are per-Mac. Link the same Git repo on each Mac after cloning. Cached file metadata (`linked_sql_index.db`) is also local. | @@ -34,7 +35,7 @@ Press `Cmd+,`, open **Settings > Account**, toggle iCloud Sync on, choose which iCloud Sync settings -Connections (with a nested Passwords opt-in), Groups & Tags, SSH Profiles, Settings, Table Favorites, and Saved Queries each have their own toggle. Custom AI slash commands and saved column layouts ride along with the Settings toggle. +Connections (with a nested Passwords opt-in), Groups & Tags, SSH Profiles, Settings, Table Favorites, Database Favorites, and Saved Queries each have their own toggle. Custom AI slash commands and saved column layouts ride along with the Settings toggle. ## Excluding individual connections From 556abde254fc2762de86a767e90a67a7f53bb705 Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Thu, 20 Aug 2026 18:14:01 +0700 Subject: [PATCH 5/8] fix(sync): keep a local-only connection's database favorites out of iCloud --- TablePro/Core/Sync/SyncCoordinator.swift | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/TablePro/Core/Sync/SyncCoordinator.swift b/TablePro/Core/Sync/SyncCoordinator.swift index a1b47b936..bf77d746b 100644 --- a/TablePro/Core/Sync/SyncCoordinator.swift +++ b/TablePro/Core/Sync/SyncCoordinator.swift @@ -1013,6 +1013,9 @@ final class SyncCoordinator { } } + /// A connection the user marked local only never reaches iCloud, and neither do the database + /// names hanging off it. Tombstones are not filtered: a deletion only ever removes something, + /// and a connection can be marked local only after its favorites were already pushed. private func collectDirtyDatabaseFavorites( into records: inout [CKRecord], deletions: inout [CKRecord.ID], @@ -1020,8 +1023,13 @@ final class SyncCoordinator { ) { let dirtyIds = changeTracker.dirtyRecords(for: .favoriteDatabase) if !dirtyIds.isEmpty { + let localOnlyIds = Set( + services.connectionStorage.loadConnections().filter(\.localOnly).map(\.id) + ) let favorites = services.favoriteDatabasesStorage.loadFavorites() - for entry in favorites where dirtyIds.contains(FavoriteDatabasesStorage.syncId(for: entry)) { + for entry in favorites + where dirtyIds.contains(FavoriteDatabasesStorage.syncId(for: entry)) + && !localOnlyIds.contains(entry.connectionId) { records.append(SyncRecordMapper.toCKRecord(favoriteDatabase: entry, in: zoneID)) } } From c19929c12de354880c016a521287fd5d4a63e90e Mon Sep 17 00:00:00 2001 From: sophiathedev Date: Sat, 22 Aug 2026 10:44:41 +0700 Subject: [PATCH 6/8] docs(favorites): add light and dark screenshots --- docs/features/favorites.mdx | 3 ++- docs/images/favorite-databases-dark.png | Bin 0 -> 230156 bytes docs/images/favorite-databases.png | Bin 195255 -> 215510 bytes 3 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 docs/images/favorite-databases-dark.png diff --git a/docs/features/favorites.mdx b/docs/features/favorites.mdx index 67f0cdb05..518386b8b 100644 --- a/docs/features/favorites.mdx +++ b/docs/features/favorites.mdx @@ -18,7 +18,8 @@ Right-clicking a database that sits inside a multiple selection acts on the whol Favorite databases appear first in the Favorites tab, grouped by environment. Use the Environment menu to show one group, and use the sidebar search field to filter by database name. Double-click a database, or select it and press Return, to make it active. Right-click it to change its environment or remove it. - Favorite databases grouped into Development, Testing, and Production in the Favorites sidebar + Favorite databases grouped into Development, Testing, and Production in the Favorites sidebar + Favorite databases grouped into Development, Testing, and Production in the Favorites sidebar Database favorites are scoped to the connection. Database names that no longer exist stay in Favorites so you can remove them; trying to activate one shows the database driver's normal switch error. diff --git a/docs/images/favorite-databases-dark.png b/docs/images/favorite-databases-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..bfd383d31e8950c05eb88ecc3d8d5c98285b5fb0 GIT binary patch literal 230156 zcmb^Zb9f$G)ISajM&|G@LOxl1g={73OL(B^YL%#GxFloy?&d zOb@@(KjcK@2M(f{HJNG($eo7pR0||TIhr!8@0KJ+l_tCkTB4x04?)}#MO+oY;h@m{ zJ}LJuMR9Ha^^oMNkKZ1o+5nTrFsM-rODg~VyUfr#oo7qLFV1p9)yah5ek$V-PwymV z5}ELMB0p-$*r?AMI3TDPFc7E7Y3YTKk_yZDYyeJ-Jy-^!Y|_c-ZMe%CAwL1k{t!fS z2`7@iP@4#*enBamH2!*_%*n`54TLT1cpe73;k`5)v6GATMJ5xS3B>m#dYl`<@9&!N ziQS5a#w(h{8*zMl8fj=b;EZTn0RTrM(td12@e${(-Vhrln7ZcpJ~k%Nawc?`FjHd5 z>Mkh)>dCkd1Mtg>yFWsWhhj{_J>!KRl>F3u!l=}jNI?Ck{4rq`C=wiyLtI6!e*EgI zffNM|EM0P}l}JD=-g4x%?DQ|UqOqeGkH)VZdKGQyk=lUW^6(T~yIA_{)6AjzSOMfwK3{{30{@qaIz$}fT(Qaz&{(1gFhfF&4eF1{q$K#H zpT*;l-up=S$^n?dbmb#&{*wrG`k3%0y`h)`7g01%)ntrum;$gwACYVw!PX$|d;5OP zBdD2YMtj2!T@GYlq)kbB2sBF_5U*v@(IrG*F#%izUvs~`6!>QmtU+6~ZoM_LtAvhl zps<6$H^XFx20izt>k^IPU1_JIEl{3ziC)a3VAtkzC@PF#Mi2~`-AKT3!!07AnO1g9 z#EvZ9#QQjldx=d>zEV94Ermok_ILKd8x+@UFKL#eSp#TJC>Np{j6;(>Oa^$dbsYQZ z2H>9(!Cb|v(&^>Z(j{AzJCtK*#Z~n?E!;Y#j6$ABGTXJdgvoIa2Bp z>u^9u-eZrh@2Jc!x;`_kb~#ANij2gS;HT^FxJpI9eZvP+>5P^3VJ~nX7d$C2 z*#NHuT)W#%0qic|H5aP>^Y%{+2YelH^&Z=1uht&tDG0qF1jx^Eh}gXXH%KV`$Ti}b zNNig{;KaWqXcD3dh|Hn5;Y9R4ioKgIH4bk*b(2yTCFf2+XvR3#V3~T7KKK*bRplen*7cx5;TgSOY6e6y^b3 z2DZV0ylPY$utY^oLA(V_gmUJ9vsM*vw$=ZZzD_6h8qzXX_ERTVBmoM<8I5_)dL z#F)X6+8os!-kj-;g5$biQ1#30ki4ZU{nuH(D=tZ=_a*I+l5bgt<-c_LPD4&ZUd0B*dc>6S;lwDS zyrR4|=e-bC{$#b%Ud^fslKc2h%Bn@rQ!dfw!A zPHXb3xvqt-z3)(n*|s(FY|+YI1nqQ+ZH95%kGniPt9`3fQ*~4K9{dLPI*e8O+H+iS z%zZ{Vrb@3hR|r>#7~w$Sjy_-UBI9P`c;m$F$V>EX<-sa!f3FvF3iV>0Vm!Gf3JZD2 zECrTtroA~6ZWDlgs(oq{OOzmTy38e>%fiTx$YImEQ8@Jw>o3Pmm9~{RYisK!c5rsQ zXXs~^XE^Isb*@X(C#EON_}~csvBCHi_~$(9JlDMU-fzEle%Zg;3eXF zWq4k9GEf{iS=P+gs2~FkSFg(6^_u$2llA7*VKKNG(`rAL|mlT}w~D#QWf7 zD$(%B(9tm25TW<9*Yp=Hl7)yx|JN|?_>}mB;UY@Jfk-VBSN0VyFSDCT#{RT}w9>Sp z8Wf}bf$SLLe%aWvNN>Dzf-d4Wx6iVliNDdtXQzGD$aoB_b&=*i?(DAcnO1@cbiR22s0-g8A#e_!ICCeR(WPU zBlp*HCeyoYL2C(p1y_Zxg9l*RFh0%B+YM4*|}*r@5X z9oS3mPfkc)RC}x})vRb}b-3+gMY6_TtX)W{e6?P`aWx;+9cd~ru2e5SFNLhK*f6Lu z+zp9M)=X9}dnvoKV_9o<+0Kydl}%-PwzXR_sxPz|eXiK5U~l|jZ(ZJ4O1CMurdR!X z8Pktf>~HX{&^BvezC0n{M%vbDWn?Y4(7L#=fVEIjB7Tf^%iE^xuD^y-UEI?1&2Uw3 zZ==@NAjfF4j$qcWy^-I>e--pDFeHb@f5jutvAQ0~GIMrmF=>8oK67o&lk!GEJ5qhL zCkM}eW8P{-%T?q4B7$U&WI+653_AWPKRNG$H_!D$U*n-|le`R{CzHiwyWo;wNW zh1;oMbni~V?z=DZ!(~~E$d&8O*F1@`2*~Z&?hK5(Mn8dH@JWs3i#aKkvu^ zufKnB!1H&Tzpr2kAs`UIJ7nPLkqh{rw_&Do!TzWGu@(3XL{M2+QWAJoHg+;KwR5(x zcOk$;nC2z(mi)L<@X_*4fj} z#n6M+&Y9%zPX4DK5mRSlCrbwxOM5%Q-~AdI*}J;%5)=O(=zo8I&(qYy^52o{oc~!C zaDnu{pU^YXG0^{S-@v9kziYV^EImwZG({|Jfiwe-!NK z%nVE{e>VN&(f@B#RcBKtVS8KPpe}s>GVGtme?I)DArJlUwf{kjzX|0IrAV}8G1kh#6PxjUI~Ny|$2g|RCZR&|}9U7ttWc%sU?+7u<1YtJ?522s^gtobHX ztBgfUdx~glbCR1Uil-teX{u-}ERGvHK#WHmANF8bt`aW+v0N2KsfrX`IwB#WS|U+S zj2x*t7||~;6Z2idR7R9K`Gwd=WT0POvBf6!mp%)xP0f~H^XmHR@y9KroS?6Q5O^xJKCe%HqNN@tiY$$(kUIz{ zFc%Q}ToOgG;1U7<=~!V8Tv{cr_9xLoeWWbK-iJS$HlF7`ZwD*8<=l1>66m__57!-a zV~I&|1@EMT;?g~Uox~E7f&5R4|4q9948Zk()vJC)l2=D%yT@MMB;V=|Sps2SeR_c3 zRIV=-wU-T!J}xa65puW=cI1H6=P}G};{PT|KtUXa1LR@ZBaT0;M~hBlSS`9|w)#9m zu-eAgmctx`#^5X#lVWq~d>=+j_yuJfZ>g8~pQ!trIl1GIGKy4g=E906n=r+)+KJ;T zCb9zjUN;4Px210n5+bi+OiPRz={pVok(I#aPBGn$8Zx@NrBeEtoY#q}%M!W=fG5Mg zyCWqXMenEx(K98ad1{>WE!O`&*3}mQnF{6jCDZ5zG6 zaI;KO0l!<;_G=AeF zezN^(LMMW-fX>pR+=$v3oXL1_K17i`Oo;ysWDux;08Edr5JQJL_W@#Lbo9axb`e*+5gme1IGxAg{K5whIZ^2GcSi}oQ zV&n|{{~uOlB1BkZbe}wkZTFSadGAT4clp%|eM*>T6Y*1rDDm?*ULm{0|IDE{0SRzF zb>yW)@a)wzuXn3R1IatOx4>QDS5Tq#73D5@bn2U&j*uv-wsm5H9t ztZephBunJ8vC9TzKREsyXx>}$ic_XJuGNbMvE74YD{Suo0t=qK8{sFBjdKmS&ktf( zl?@pFEVj`xVGXpjq^EFQwM6e1t1f)!P>f)If`?Ne;PwT#8A=B5FE#5S0BWfgJ|v!t zE5`no-X7>_Lu?e?ZUz~f0P=3R?kDhzXM>>x>Qx$gr(HQz1+Iq)jH&S`b29YEQVrA< zq(@l`$%``GttLs5nWWbuaU#XH)f>ckiTDUqK^(<7R6=R(gv95(1~hh>-^xUW-g5WT zdVs1bgsO_mnu9G+ju_V&1Rv^pm|HuTF3pnlWj%VuiA?`jG7ITl>6%}hf;Dms}406F0MtI*75YJ;J%_Cv#GSo%m zg7lRiw@(4Tjn_EYTd`gDZ}7O}Zb;vuRfhAL4x2{tBit;5U}_1&=pr|CqCFk!Ol`&t z`Gdc?7mylxPi|BtvFtY3u3!+WsH6MK%ye*gEV$dzLq@L|=9~sjl7AR}A;NAiKS%{E zvVXZ1Cvb*h;BR@hNm9hX0J{l`B ze!2O@j;l--H1y|6RziSWu?@5nqI`LGY%1YpV?S!^G^_rL!suy>A6QqfKjY0<Rd_D!Pz1I|mAW`V)-x1GpbbX%2| zj%T!*%jPv6xRo!FIDu@Ec)`tg*g)V7`IA@@qPYrRZZwq2ka|5I3$6LV8LnG7hzjia zTg>GCrF8BqB59`f-Ua+dlw?SzS?KdCIcLc` zuTDE<7V1M6s_~zgwI~M9%PR;?ae=PQ+N!aMt-LGT?PpQ( z|Km`6Lm6hbzL_r3$gCSBRy#@Y2AOHPVWXb|2l5%gXaFM$#X5T9a z+8R5>K0cczJ>3XuD}Che&pouF2|qY>;c}oGSO2L-If2Ci)w018u!5oKV$x2c*5e z$dEY#oxkDs<=y52I#`lWf77$eJs)v2%HhoP_w%5EZ(R{v;%1j+d5_YKYr#3~Bq5tDG{w ztxzYY4EDeLj}v%92J-rCqs=YOsS#|oN7fA8IaMIr7dX3}v;6*~T?o(`Cc5qYQ*&56 zQ?YytDWl+$Pf&#~F{DS_P@P|$R zB1)((dSkJ}B4Hf5^;mu86WCvd6Ah#z7wEyikO#WlIY5Qg;vbtP^ara0dC0rpW_UV1 zgEL$j!C>w;n9Myz2<1BwXy~sF(v6gyGXlaAw?ht~yo9qYn~4zyBGUveX}NQvd;9($@lEXMC>% zx)^Vp!h5+OP&)_rfxDuheAZ)1c8J5%KuwhCrfCN5P2a?dD(bGsVY`C8-{F8Z6^qOK z23trR%gt-vDu3xy)PIlz4jn4s=vV{Uy7e9r5s~yp@j;vPQl9Oii(}Q^N1dRrNY7rR z{);20A%t`aiNRL<+RaVGdZVf5F2mdeg2F}c7B_+y*^#4 zc9vQ^4UhXIPAVQi%N0+c^&?Kr0=q_K1Jy{Or>9ppH8s7eVxeHxR#&e&Iy#z*!Q-w^e#(>~ zMG^f=LZ*tq33DeKLplZfucP7MY`@y;wKG7XrY2b+`5NwowESyh0$<314Dj3JFZwh7 zAbf|a?qYdAH|*R6O21E=v5dVpSscu7=|8BJ!fVU*@Z;!r*oVC|QSq{v-cwWyB%4R4P#Zv$^TLM)5{Qb9zk;t7j=UDI+g1|aF)4bv|Fv4WplONPm=q5R%2g$MVW8(u1Aag!I6XnMoPhYtLm0W3?t7P_v`QI>iii-XUWq>(Ji9c_(|^e^gn56OxqICkOS|f95lWcz?N5W^PXuF6Pt^0X^xc4A4Iv7AAygpG zD~HG9Dw(Oh_@X(ls#+?&NaskHXQ0z!Rj84tj{}|i)aupX`|PGFj$};fgZ1h6%y&pY z!}j~?g$NR3#-3Wa&?3d^LW&CtM94dn%dTpfRLN0(Rs&$j6Xs8szPS<7rqzh;OM#q7 zne1j6y^z0&7WB+bO;Ns^{HX8eXBhtw6Q4)?y*T;1M8PmCKaa$}0zirgAJ|y3ADW0V z_@~wv00avIsT1r>@61SHyAHqB(yApWfl#NQh~@khh^X-l_I={gc1dN%!JwNiV%~|* zjs!1#n23WxPKLOY_6B<%LUpgc!)Bg=mok{5w8{FOajN+|Z4KO3w@VH&o9N`R;6fyb z{`;f5$r1@tp>DigNal587a0pSp$K^|=&ob3*Jd)0Es|}wD!49Ff@IW-wwYuUAsLD3 zZ^TSmIg?4)uZaSFhylBgF?gap^j(IWJ|%-OSa=w|-vr{3Vbr$v$8!i4$QnL8*{(Lu zBKul=!D9T2ssw=y6;tNcMGpHDS*o%4>#DJ5>#CZXo+B9ngNu9P+H+5E$Ma9OI4%$d zQj@1Y!O5{);^!S&M@%~HuC#S%vZO6JT;%eNy=M1hjdo4zD!U4hXi(_|$6DdZ45R+= z;Gxq58jl`7M8#>6{Nd0M1}Z=TH6ChtlnUgI5O;NJtJLi@u@@se**2>4-h{Gtqs_0^ z9|0gY^k`^kMq#BgXyNh1ry|8hGV+#+x%am9~6dhucuU1EeC5|+7E&J@h?sa_orpFp$0E@ZVHZzmZ zOs7o2)V$CCY4XZXWS5{bgL|h9tDZWAsj8qq)z8)MU2omZcR$M=JC3ak9Fxs%EqBXe znu#B(=+=|}1~UcRDHX(Q+3jRWksZ5N##9}tR22>@kG@7y!~(IZXFQvgTZQ_vy0^`C zm5tX~LqE>{Z|`Y^6_f>~w^}GR#Km_#MxkQT{cuL~w0@Rw{=0E;)VU$c3MF+{xe~Q{ zrIq`phztiNi$(6y3}+3r+~7?Dm_cv`y?S|^B-C-Dyon+GrrDG^C=|WmzYzF_JS@h` zKL^X;^oQdJicD$nJLT{*V>Lu`w9w7KwE<~5vd|K1Kb_gUa;4SP8fWH5taNI)Aen^$ zVLfYa3n|vO(_Fro*Dnxj?_a-aRWSCj>F$9W=+sp#n;t(S0-+#DfVp|H*ikA7v}F}7EjLi585C7j_d0Yp5w z!1KL=;}kaPy{HzXOs!n6PK;Ln%`}65|1K${Bl=$JJrO4GWA!?%S*ZPV8eRqM?K)^=X7Hjo`CfMb8g*kg zGOExt+jN+i!-?RwZWa?MkaI0lQ_-RxraOL<3xoLzZFZzn){;jU^isuqv7@RZXr$Z< z-6p#22PUY1kMKAN>4^FIzv)kD12EM1HgsPhXm%g^i$U2VOh)KHe7F(aMT&Aq>PX zvYv>cr?OM;EJFi^;T3m>m`Mv|%r{ml_?#9v(S?ReL)mhc`R!=G= zr6Mla*VfX5t_-Tu1LFOrl0jQ*70Jb(((?OCCq1>Sg!#g$_=RfAmX*!}xCYy^GAgaE z3b?R~gg?y_X`D9D41d+W&qq{35#eT#fS*?-&O4vg&O=4&fMnkvD-7d9(~p92Mat4_ zfwXO4{;Cd(MAjHxUoEMa%3=OO>i12!4|6RhZt!gjil)8GF-t%A;OWRjbzj!@Ymbc& zK`#}3ZXzzDQS%Yu*B{M&LE-b1*teMG9bsxj5wvL3<7qUXYj&C=pZl8kUmmaL%{)V3 zdJL7umKcpy!go*rJ05h~{uQa(=5x5tqYWJb)j3U4A2=;umL`q4k*Z$Oj*atr0n?pm zc|k;a451u2+q+AP;4W{$AKk#w%HxjR1qN4ZpaCwB91Ci6IOpw~?W{tn3ItI_;OB28 z@gz6A5yjG*g{YD&_XCFzL*tCwLs+6)?JsHjn^+%LU}Uafr22G~sJtLO@7h~66nCmU zXUV(5FUZ}k=F*@RCDH9~u|E-ygaqKz>j3l8D)(pW4Hg@anwbtnD(rdaVWDhcAdu*U zikdbsLoQ7pZclVk5;-mu1$Hq%2oiD9Y=R1EC|e@QolPlVF?*?NqL*pV5MXq;QW zCOh5T7s%I7`pp*cbCK+&P}@V2x-BYd9^Yqwb-r9lTNr$8zz|J6@w+Hq&WYDxdKJ4UZGNEdMH%S*v?Te=yiKk_z@m6mm3Zd;%w-I)0t=J z@DtvQ85OOx%bQntfMKl|h;5i&hgYf5cd)AGBkBdwIc=~7)^S*B9c&lkNaTrXAee1|HnUqzfAWH0$T@UF@#y{R6}daSA#PSZqf^b9`_ z5&5$-U+aB>mbgBLIz6If=1jG8`@+5izOVBeTf2WMJcf=P)*l(8H~~5&0e{jjVH&&M zLor&1C>sTEaC=JF&P24Lz&uCrs)B;$#VY&_0PLwaJ1_ZYt*{P#EG5DL$rJ=OYGG7E zKG;Gn3Iui=uTHe!W7Y><6wrglR!PtBONMR2^JyV@+<-X>P(=dv>;(Dcn8BcK%2~Bq zxviNQxttBAWs)Ax_0}o?igKgNxXOO*r7vWD`vGN0hd~_bmZGtx?{&(!SF)pwlmpIc z@Gq4pFk_jKwSY8CV~yqmnA_wi`Q5fMWMOCD=euc7;Wu`hHN+~EWm2CfH1-c`?LJd6J9G`k;!u1IR>~q>gFnzRjMF(TANTFm+;4Gp1T+8H^g$*?@s++e*}DymPz*4F9wx*_eUQkBDOJVGBI z)^A-tH_W)bnXn$zQ3Si?NzGIhUylq=ys=Sx0?7xCI8aO-B2EU$Zk(Z_wGe>_NxW>s zRm9!aUgv4=NJ|sUEJ2gH^|;yDAvXS%7EG5C3mF~`OGQ9|L32Xyf)xHMVXM=blb$#8 zG`Swzmt~^Q=hZa*TiY8g&KRpQBGeFp_PNgH`$tx~aWtCkBDP6V>j7`Cs`g_^DLxaK ztkf>QuxQ5Y;-yUUS(pz0vG?qtK2Ah=2qOapmkJaBuXQg-Dy49Utw&uqtipjNi(DFv zUoRu7WxFywmnC4ac+6VbB>Igu=~_h6#yu-f2Aa2~*L&kyJJDii^@p>r#!%D~C+*i0 zrOM*zJQQ|WI!mK+WOYtZitw%P+Dy?}KC1mY?S|C4s-hNJ0@&=|YdkXx=d z!Yw&!`0olS;Q{!gsnff3fgVEx8tXjf|#~g@&hQ6$oaj86*L<)#t^JFOAM;d<<*3oUE*?_k{9e-T@-%^R{US=GzCA9J)%VWyvAH=)3d&c;XM-@#mZl9kZLt zwxb`!Q(d{0(+S6$`t_f<;n3+l*pj|7xmq!Nh4q9V9ij3$ATqL_%woJnEWnFpfgZft zijeCZqYI_YJzuUXMy2bxkq%C$)Wc1Q=?=vZ%C#BKHfpUKT^)7)#Xj~0YTNV&jwV2i zxEJPw^kMahm5!^b>Q)~n|L0y1{9lVcEDkaw7V73(4LS7$!b>gJds3!658=>wJ78fW z%4}=7fIK0wj8tq0ML(hzAJU(>9?y0|%K=t;3hlP)yauJ-q z(>j}<;E`6R@nJ|it9f{tucnde zhHV^k-c!~?+SAc#hU%+2jMkWFL4DAX_nfcQXq5SU<71VkU*rhacRvcAQnjuZ;rZrh zfEElayF_jlq6IZ5?-TV@Q*2Ezd@`PkHs*r-B|>jrIb2jz;`5kIBR$}tsgHZlwY=ST znrdxL2;6JsJ4Ix!n}Ra=Y0!{Uea$z;j*G?Axz8VH7fCXRDPJmV?o-kErtdO@`A@rL zO1_PW6OcX;qZ}oOT!by~o_3cG<@tZ+P}I&(oeyqEUTQ`bjeYfbd)!eN&Ea(Gv$a=Q&qB!vD3hQ>YD;4_&@yp&Bz z?~`w=g$%<{j+>1x)vX<)C5j1O!nEq#qMwKfBUhIvP&$PzR{KB*8fgs++PmP0Q-&T0 zvhiN5e+UZ1vdOd@xX~hYLJ>~)4xh3yx~0-a-WYaXlWXhw2hlLQp^-!}n8C8UZ}@0_ zFO?iUV)Z4*1;4@LcAeYqsen2_GFz(t1|@4DLjL0O%^;i)a{peBZNaW0?rsL&XJP(e zI`N5B%sMHn)>?1w&V!{k^gDN>-iFVy+k2ITP41P?k5P;Szo59v}O0yWJ z$?Wx41Q>V&$#N8H>*c3?jW(yGeRrJuYrRk!<8{0jnqxwa)7TPU`d(-$+>0gU3Xj#P z0Nr~cgI}M1HF)rJ&T{rd@%Z#tUnm(($q+4q4ISYqR*C*8r)5I&ek|YH(h9s2*ezzA z%qDJ)TlJ^N1^5>rmOh0d^@T>>ri^{K(WlX)iQaKd*Q+FaF)m~(Cp2`IPN7jPGyTrp zhQpBCg%8d+WWZZnQ9kG0GO68UH@m=EZDWx}myt=Ci*PN+^w%DrVS0ey(c|u`yK>f$ zk9dXmE7zioI_!$FE52`@*7M4I<$e|f5HzKoL+_FmzPHfx)t2e5twoPNl*~^Wl>JXlICo`1;yHS#*D`^8}Rtad0ny3et?w03fSWo(y!Qr$M*8c$bSVo+eS~}}H#ISe30vW~_`%Ty# z-4UAxUsxJ>7R6$wL81Z-?IP!Fy)9BsCdx?2IT3N!qI9Zdc@VH&u$#tdx7f4%0;;Oy zv8^9tj0*|S<8lXhs2K)sT=ZFe@^cM1Q12Z90Fz%DV+T{4jZx!7R1Pu8Q}5PBIkHdvHwC_A8tPq@p{-VuR6+=X4(Z3Jb3u z9X!drZb7A<3Qbwo>Ii?7{1(oRYwd>-5FY1h3k2F+;K$b}XTey+yHeEO$mRbFxm$za z(mQ&rrIUOJjru6IF>*{3(c$Zf#WI$xZBvL*xQt5A+AU6nTCL^Z&s*oaX+18y>7|Vd zU(F|8Op@Q$5LR7Z>;^=UCJPWHH2_{=&>vxOOQ@LyeOWF6TfsU+DX)z-a2r?L`W6qZp_aFP_TpISYlN0vjvbb6Kk$RDAE%nTBdMXg93rYkq*?}2_jwEz! z=4u&&yHMoC;4uDKtgqx9|9D-%%_7wTvFDZgq4pXbVM~`dNkM7G!*N7ht)h|WWWL;v zh*@P8X&BP^ZjBoF45M=csZqyd(Fui4Hj!tT%T%|9GK0=sU+`%0D3Z~VTk8-~AZjo1 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 M8!Wo5YrgOQ0P413y#N3J literal 0 HcmV?d00001 diff --git a/docs/images/favorite-databases.png b/docs/images/favorite-databases.png index f2b9737c13cb09857d6d764d77a29e52b2d5d308..b284e57665495302b7af17dcab4b876747e59d54 100644 GIT binary patch literal 215510 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

kYeDmb3uqNa>kzFyiHA9@qL_ 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 GLK6Vll}%az literal 195255 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

X7{uSZsa6i9Z&Y1uF{2XR+`4THR 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ⅅqIeS_ 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 P;NQMoN;~7W>z@99=>?uF From fc24732cff7349fab79d0b87efb5254bc172d6c9 Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Sat, 22 Aug 2026 14:30:23 +0700 Subject: [PATCH 7/8] docs(favorites): rewrite the page against the shipped UI and the house style --- docs/features/favorites.mdx | 74 ++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/docs/features/favorites.mdx b/docs/features/favorites.mdx index 871e255ac..5f95a679f 100644 --- a/docs/features/favorites.mdx +++ b/docs/features/favorites.mdx @@ -1,68 +1,70 @@ --- title: Favorites -description: Save databases and tables, and keep frequently used queries with optional keyword shortcuts +description: Pin the databases and tables you keep returning to, save SQL, and link a folder of .sql files --- -The query you retype every Monday is worth saving once. Give it the keyword `dau`, and from then on typing `dau` in the editor expands the whole statement, with the cursor already where you need to fill something in. +The query you retype every Monday is worth saving once. Give it the keyword `dau`, and typing those three letters in the editor expands the whole statement, with the cursor already sitting where the value goes. -The Favorites tab in the sidebar holds pinned databases and tables, saved SQL, a **Team Library** on a Team license, and any folders of `.sql` files you have linked. +The Favorites tab in the sidebar stacks what you have pinned: databases grouped by environment, tables, saved SQL, and a **Team Library** on a Team license. Linked folders of `.sql` files sit beside the saved queries. ## Database favorites -Mark a database as a favorite from any of three places, then assign it to Development, Testing, Production, or Unassigned: +| From | How | +|------|-----| +| The sidebar, in Tree layout | Hover a database row and click its star | +| The database switcher | Press `Cmd+K` or click the database name in the toolbar, then right-click a row | +| The menu bar | **Database > Favorite Database**, on the database you are in | -- **The database switcher**: click the database name in the toolbar, then right-click a row -- **Tree layout**: hover a database row and click the star, or right-click the row -- **The menu bar**: **Database > Favorite Database**, which works in every sidebar layout +Start with the star. It is the quickest, and it exists only in the Tree layout (**View > Sidebar as Tree**), so reach for the menu bar when the sidebar is a flat list or your hands are on the keyboard. -Right-clicking a database that sits inside a multiple selection acts on the whole selection. A filled star marks the database in the tree and in the switcher. +A right-click sets the environment in one move: **Add to Favorites > Production**. The star files the database under **Unassigned** instead, and any of the three routes retags it later, where the submenu reads **Environment** once the database is already a favorite. Right-clicking a database that sits inside a multiple selection acts on the whole selection. A filled star then marks the database in the tree and in the switcher. -Favorite databases appear first in the Favorites tab, grouped by environment. Use the Environment menu to show one group, and use the sidebar search field to filter by database name. Double-click a database, or select it and press `Return`, to make it active. Right-click it to change its environment or remove it. +Favorite databases come first in the Favorites tab, under one row per environment. The **Environment** menu appears once you have a favorite and narrows the list to a single group, and the sidebar's search field filters by database name. Double-click a database, or select it and press `Return`, to switch to it. Right-click for **Use as Active Database**, a different environment, or **Remove from Favorites**; `Delete` removes it too. Favorite databases grouped into Development, Testing, and Production in the Favorites sidebar Favorite databases grouped into Development, Testing, and Production in the Favorites sidebar -Database favorites are scoped to the connection. Database names that no longer exist stay in Favorites so you can remove them; trying to activate one shows the database driver's normal switch error. +Database favorites belong to the connection they were made in and go when you delete it. One whose database has since been dropped stays in the list until you remove it. ## Table favorites -Hover a table row in the sidebar and a star appears at the end of it. Click the star to pin the table; a filled yellow star marks one that is already pinned, so it stays visible without hovering. Favorites move to the top of their section and appear under **Tables** in the Favorites tab. +Hover a table row in the sidebar and a star appears at its trailing edge. Click the star to pin the table, or right-click the row and choose **Add to Favorites**. A pinned row keeps its star, filled and yellow, without hovering. -Double-click a favorite there to open the table. Its right-click menu has **Open Table**, **Show ER Diagram**, and **Remove from Favorites**. +Pinned tables appear under **Tables** in the Favorites tab. Double-click one, or select it and press `Return`, to open it. The right-click menu there has **Open Table**, **Show ER Diagram**, and **Remove from Favorites**, and `Delete` removes the selection. -Favorites are scoped to the connection, database, and schema, and sync through [iCloud](/features/icloud-sync). One whose table does not exist in the database you are viewing is hidden rather than shown broken. +Table favorites are scoped to the connection, database, and schema, and sync through [iCloud](/features/icloud-sync). One whose table is missing from the database you are browsing is hidden rather than shown broken. ## Recent tables -Turn on **Settings > General > Sidebar > Show recent tables** for a **Recent** section at the top of the sidebar. It records the last 10 tables you opened per connection and database, most recent first; arrowing through preview tabs does not count. Click a row to reopen the table, or right-click to remove one entry or clear the list. Recents stay device-local and survive relaunches. +Turn on **Show recent tables** in [General settings](/customization/general-settings) for a **Recent** section at the top of the object list. It holds the last 10 tables you opened per connection and database, most recent first, and stepping through preview tabs records only the one you stop on. Click a row to reopen the table, or right-click to remove one entry or clear the list. Recents stay on this Mac and survive a relaunch. ## Saving a query | From | How | |------|-----| -| The editor toolbar | Click the star above the editor, or press `Cmd+D` | -| Selected SQL | Right-click > **Save as Favorite** | -| [Query history](/features/query-history) | Right-click an entry > **Save as Favorite** | -| The sidebar | **+** in the Favorites tab, then **New Favorite…** | +| The editor | Click the star above it, press `Cmd+D`, or choose **Query > Save as Favorite** | +| Selected SQL | Right-click the selection, then **Save as Favorite** | +| [Query history](/features/query-history) | Right-click an entry, then **Save as Favorite** | +| The Favorites tab | Right-click empty space in the list, then **New Favorite** | -Give it a name, the SQL, and optionally a keyword and a scope. The **+** menu also carries **New Query**, **New Folder**, and **Add Linked SQL Folder…** +The dialog takes a name, the SQL, and an optional keyword. Select **Global** for a query that names nothing specific to one database, and it is available in every connection. Leave it off and the favorite belongs to the connection you are in, and goes when that connection is deleted, along with its folders. - Creating a new SQL favorite - Creating a new SQL favorite + A dialog with Name, Query, Keyword fields and a Global checkbox + A dialog with Name, Query, Keyword fields and a Global checkbox -A new favorite belongs to the connection you created it in. Select **Global** in the dialog to make it available in all connections, which is what you want for anything that does not name objects only one database has. Deleting a connection deletes the favorites scoped to it. +The Favorites tab has no plus button. The same right-click menu carries **New Query**, **New Folder**, and **Add Linked SQL Folder…** ## Keywords -A keyword is a shorthand you type in the editor. Type its first letters, case does not matter, and it appears in the completion popup as a starred entry with the favorite's name; `Tab` or `Return` inserts the full SQL. Keywords must be unique inside their scope. +A keyword is the shorthand you type in the editor in place of the query. Type its first letters, in any case, and the favorite appears in the completion popup under its own name with a star; `Tab` or `Return` inserts the SQL. See [Autocomplete](/features/autocomplete). Two favorites in one scope cannot share a keyword, and the dialog says so as you type. - Keyword expansion in autocomplete - Keyword expansion in autocomplete + A completion popup with a starred favorite matching the typed keyword + A completion popup with a starred favorite matching the typed keyword Typing a keyword in [Open Quickly](/features/open-quickly) finds the same query without touching the sidebar. @@ -81,31 +83,29 @@ Accepting that keyword leaves the cursor right after `orders.`, ready for a colu ## Working with saved queries -Double-click a favorite, or select it and press `Return`, to insert it into the editor. That is the default; **Run in New Tab** on the right-click menu runs it instead, and the same menu has **Copy Query**, **Edit…**, **Move to** for filing it in a folder, and **Delete**. Arrow keys move between rows, typing jumps to a name, and `Delete` removes the selection. +Double-click a favorite, or select it and press `Return`, to insert it into the editor. **Run in New Tab** on the right-click menu runs it instead, and the rest of that menu is **Insert in Editor**, **Copy Query**, **Edit…**, **Move to** for filing it in a folder, and **Delete**. Arrow keys move between rows, typing jumps to a name, and `Delete` asks before removing the selection. -Create folders from the **+** menu, rename or delete them by right-clicking, and rename in place on the row. Dragging a saved query or a linked file out of the sidebar drops its SQL into the editor or another app. +Folders come from the same background menu. A folder's own menu has **Rename**, **New Favorite…**, **New Subfolder**, and **Delete Folder**, and deleting a folder keeps what was inside it, moved up to the parent level. Drag a saved query or a linked file out of the sidebar to drop its SQL into the editor or another app. ## Team Library -On a Team license the Favorites tab gains a **Team Library** section holding queries your team shared. Double-click one, or select it and press `Return`, to run it in a new tab. To share yours, click **+ > Publish Saved Queries to Team…** See [Team Plan](/features/team). +On a Team license the Favorites tab gains a **Team Library** section holding the queries your team published. Double-click one, or select it and press `Return`, to run it in a new tab. To publish your own, right-click empty space and choose **Publish Saved Queries to Team…**, which replaces everything you published before. See [Team Plan](/features/team). ## Linked SQL folders -Link a folder of `.sql` files on disk and they appear in the Favorites sidebar next to your saved queries. The point is a Git repo of shared queries: clone it, link it, and the team's queries stay one click away and current with `git pull`. +Link a folder of `.sql` files on disk and they appear in the Favorites sidebar next to your saved queries. The point is a Git repo of shared queries: clone it, link it, and a `git pull` keeps the team's queries current. This is not [Linked Folders](/features/connection-sharing#linked-folders), which watches a folder of shared `.tablepro` connection files. -Click **+** in the Favorites sidebar and choose **Add Linked SQL Folder…** Pick any folder; `.sql`, `.psql`, and `.pgsql` files are indexed, subfolders nest the way they do on disk, and hidden files are skipped. Folders are global, so every connection's Favorites tab shows them, and a large repo is fine: only the first 4 KB of each file is read to build the sidebar. +Right-click empty space in the Favorites tab, choose **Add Linked SQL Folder…**, and pick any folder. `.sql`, `.psql`, and `.pgsql` files are indexed, subfolders nest the way they do on disk, and hidden files are skipped. Linked folders are global, so every connection's Favorites tab shows them, and a large repo stays cheap: only the first 4 KB of each file is read to build the sidebar. ### Editing files -Click a linked file to open it as an ordinary editor tab. `Cmd+S` writes back in the file's original encoding, detected on load from UTF-8, UTF-16, ISO Latin-1, and a few others. - -A file changed on disk after you opened it, by a `git pull` or a merge, shows a yellow banner above the editor with **Reload from Disk**. Save anyway and a side-by-side diff sheet offers **Keep My Changes**, **Reload from Disk**, and **Cancel**. Files added and removed outside TablePro reach the sidebar a second or two later on their own. +Click a linked file to open it as an ordinary editor tab. `Cmd+S` writes back in the encoding the file was read with, detected from the file itself and falling back to UTF-8, then ISO Latin-1. A file that changed on disk underneath you gets the same banner and diff sheet as any other [SQL file](/features/sql-files#when-the-file-changes-underneath-you). Files added and removed outside TablePro reach the sidebar a second after the change. -A non-UTF-8 file carries a yellow warning triangle in the sidebar. Saving keeps its encoding, and a character that does not fit, an emoji into ISO Latin-1, fails the save with an error rather than losing the character quietly. +A non-UTF-8 file carries a yellow warning triangle in the sidebar. Saving keeps its encoding, and a character that encoding cannot represent, an emoji in an ISO Latin-1 file, fails the save with an error rather than dropping the character. ### Frontmatter @@ -126,12 +126,12 @@ WHERE last_seen > NOW() - INTERVAL 24 HOUR; | `@keyword` | Autocomplete trigger, exactly as for a saved favorite. | | `@description` | Shown in tooltips. Optional. | -The parser stops at the first line that is not frontmatter, so these go at the very top; a UTF-8 BOM is handled. A file without frontmatter still appears, under its filename and with no keyword. The `;;` [cursor marker](#cursor-placement) works in linked files too. +The parser stops at the first line that is not one of these, so they go at the very top; a UTF-8 BOM is handled and the keys are case-insensitive. A file without frontmatter still appears, under its filename and with no keyword. The `;;` [cursor marker](#cursor-placement) works in linked files too. -To change frontmatter without opening the file, right-click the row and choose **Edit Metadata…** The dialog rewrites the leading comment block only and keeps the rest of the file and its encoding. +To change frontmatter without opening the file, right-click the row and choose **Edit Metadata…** The dialog rewrites the leading comment block and leaves the rest of the file, and its encoding, alone. ### Managing linked files -Press `Delete` on a linked file, or right-click > **Move File to Trash**: it goes to the macOS Trash and stays recoverable. Right-click a folder's root row for **Disable**, **Reload**, **Copy Path**, **Show in Finder**, **Add Another SQL Folder…**, and **Remove from Sidebar**. Removing unlinks the folder; the files stay where they are. +Press `Delete` on a linked file, or right-click and choose **Move File to Trash**: it goes to the macOS Trash and stays recoverable. The same menu has **Open in Editor**, **Edit Metadata…**, **Copy Query**, and **Show in Finder**. A folder's root row carries **Show in Finder**, **Copy Path**, **Disable**, **Reload**, **Add Another SQL Folder…**, and **Remove from Sidebar**. Removing unlinks the folder and leaves the files where they are. Linked folder paths are the one part of Favorites that does not sync, so each Mac links its own copy of a shared repo. From 00aa240d89ff0209bd14695a5667280e9e4cb14e Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Sat, 22 Aug 2026 14:36:52 +0700 Subject: [PATCH 8/8] docs(favorites): cut the page to short scannable paragraphs --- docs/features/favorites.mdx | 68 ++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 28 deletions(-) diff --git a/docs/features/favorites.mdx b/docs/features/favorites.mdx index 5f95a679f..d699d845a 100644 --- a/docs/features/favorites.mdx +++ b/docs/features/favorites.mdx @@ -3,42 +3,44 @@ title: Favorites description: Pin the databases and tables you keep returning to, save SQL, and link a folder of .sql files --- -The query you retype every Monday is worth saving once. Give it the keyword `dau`, and typing those three letters in the editor expands the whole statement, with the cursor already sitting where the value goes. +The query you retype every Monday is worth saving once. Give it the keyword `dau`: type those three letters in the editor and the whole statement expands, cursor already in place. -The Favorites tab in the sidebar stacks what you have pinned: databases grouped by environment, tables, saved SQL, and a **Team Library** on a Team license. Linked folders of `.sql` files sit beside the saved queries. +The Favorites tab holds databases, tables, saved SQL, a **Team Library** on a Team license, and any linked folders of `.sql` files. ## Database favorites | From | How | |------|-----| | The sidebar, in Tree layout | Hover a database row and click its star | -| The database switcher | Press `Cmd+K` or click the database name in the toolbar, then right-click a row | +| The database switcher | Press `Cmd+K`, then right-click a row | | The menu bar | **Database > Favorite Database**, on the database you are in | -Start with the star. It is the quickest, and it exists only in the Tree layout (**View > Sidebar as Tree**), so reach for the menu bar when the sidebar is a flat list or your hands are on the keyboard. +Start with the star. It lives only in the Tree layout (**View > Sidebar as Tree**), so use the menu bar in a flat list or from the keyboard. -A right-click sets the environment in one move: **Add to Favorites > Production**. The star files the database under **Unassigned** instead, and any of the three routes retags it later, where the submenu reads **Environment** once the database is already a favorite. Right-clicking a database that sits inside a multiple selection acts on the whole selection. A filled star then marks the database in the tree and in the switcher. +The star files the database under **Unassigned**. A right-click sets the environment in one move: **Add to Favorites > Production**. Once a database is a favorite, that submenu reads **Environment**. Right-clicking inside a multiple selection acts on the whole selection. -Favorite databases come first in the Favorites tab, under one row per environment. The **Environment** menu appears once you have a favorite and narrows the list to a single group, and the sidebar's search field filters by database name. Double-click a database, or select it and press `Return`, to switch to it. Right-click for **Use as Active Database**, a different environment, or **Remove from Favorites**; `Delete` removes it too. +In the Favorites tab, databases come first, one row per environment. The **Environment** menu narrows the list to one group; the search field filters by name. Double-click, or press `Return`, to switch to a database. Right-click for **Use as Active Database**, a different environment, or **Remove from Favorites**. `Delete` removes it too. Favorite databases grouped into Development, Testing, and Production in the Favorites sidebar Favorite databases grouped into Development, Testing, and Production in the Favorites sidebar -Database favorites belong to the connection they were made in and go when you delete it. One whose database has since been dropped stays in the list until you remove it. +Database favorites belong to the connection, and go when you delete it. A dropped database stays in the list until you remove it. ## Table favorites -Hover a table row in the sidebar and a star appears at its trailing edge. Click the star to pin the table, or right-click the row and choose **Add to Favorites**. A pinned row keeps its star, filled and yellow, without hovering. +Hover a table row and click the star at its trailing edge, or right-click and choose **Add to Favorites**. A pinned row keeps its star, filled and yellow. -Pinned tables appear under **Tables** in the Favorites tab. Double-click one, or select it and press `Return`, to open it. The right-click menu there has **Open Table**, **Show ER Diagram**, and **Remove from Favorites**, and `Delete` removes the selection. +Pinned tables sit under **Tables** in the Favorites tab. Double-click, or press `Return`, to open one. Its right-click menu has **Open Table**, **Show ER Diagram**, and **Remove from Favorites**; `Delete` removes the selection. Table favorites are scoped to the connection, database, and schema, and sync through [iCloud](/features/icloud-sync). One whose table is missing from the database you are browsing is hidden rather than shown broken. ## Recent tables -Turn on **Show recent tables** in [General settings](/customization/general-settings) for a **Recent** section at the top of the object list. It holds the last 10 tables you opened per connection and database, most recent first, and stepping through preview tabs records only the one you stop on. Click a row to reopen the table, or right-click to remove one entry or clear the list. Recents stay on this Mac and survive a relaunch. +Turn on **Show recent tables** in [General settings](/customization/general-settings) for a **Recent** section at the top of the object list. It holds the last 10 tables per connection and database, newest first, and stepping through preview tabs records only the one you stop on. + +Click a row to reopen the table. Right-click to remove one entry or clear the list. Recents stay on this Mac. ## Saving a query @@ -47,20 +49,22 @@ Turn on **Show recent tables** in [General settings](/customization/general-sett | The editor | Click the star above it, press `Cmd+D`, or choose **Query > Save as Favorite** | | Selected SQL | Right-click the selection, then **Save as Favorite** | | [Query history](/features/query-history) | Right-click an entry, then **Save as Favorite** | -| The Favorites tab | Right-click empty space in the list, then **New Favorite** | +| The Favorites tab | Right-click empty space, then **New Favorite** | -The dialog takes a name, the SQL, and an optional keyword. Select **Global** for a query that names nothing specific to one database, and it is available in every connection. Leave it off and the favorite belongs to the connection you are in, and goes when that connection is deleted, along with its folders. +The dialog takes a name, the SQL, and an optional keyword. Select **Global** for a query that names nothing specific to one database. Leave it off and the favorite belongs to the connection you are in, and goes with it when that connection is deleted. A dialog with Name, Query, Keyword fields and a Global checkbox A dialog with Name, Query, Keyword fields and a Global checkbox -The Favorites tab has no plus button. The same right-click menu carries **New Query**, **New Folder**, and **Add Linked SQL Folder…** +There is no plus button. The same right-click menu carries **New Query**, **New Folder**, and **Add Linked SQL Folder…** ## Keywords -A keyword is the shorthand you type in the editor in place of the query. Type its first letters, in any case, and the favorite appears in the completion popup under its own name with a star; `Tab` or `Return` inserts the SQL. See [Autocomplete](/features/autocomplete). Two favorites in one scope cannot share a keyword, and the dialog says so as you type. +A keyword is what you type instead of the query. Type its first letters, in any case, and the favorite appears in the completion popup with a star; `Tab` or `Return` inserts the SQL. See [Autocomplete](/features/autocomplete). + +Two favorites in one scope cannot share a keyword, and the dialog says so as you type. A completion popup with a starred favorite matching the typed keyword @@ -71,7 +75,7 @@ Typing a keyword in [Open Quickly](/features/open-quickly) finds the same query ### Cursor placement -Put `;;` in the SQL to say where the cursor lands after expansion. The marker is removed on insert: +Put `;;` in the SQL to say where the cursor lands. The marker is removed on insert: ```sql SELECT COUNT(*) @@ -79,37 +83,43 @@ FROM orders WHERE orders.;; ``` -Accepting that keyword leaves the cursor right after `orders.`, ready for a column name. Only the first `;;` counts; without one the cursor lands at the end. +The cursor lands right after `orders.`, ready for a column name. Only the first `;;` counts; without one it lands at the end. ## Working with saved queries -Double-click a favorite, or select it and press `Return`, to insert it into the editor. **Run in New Tab** on the right-click menu runs it instead, and the rest of that menu is **Insert in Editor**, **Copy Query**, **Edit…**, **Move to** for filing it in a folder, and **Delete**. Arrow keys move between rows, typing jumps to a name, and `Delete` asks before removing the selection. +Double-click a favorite, or press `Return`, to insert it into the editor. The right-click menu has **Insert in Editor**, **Run in New Tab**, **Copy Query**, **Edit…**, **Move to**, and **Delete**. Arrow keys move between rows, typing jumps to a name, and `Delete` asks first. -Folders come from the same background menu. A folder's own menu has **Rename**, **New Favorite…**, **New Subfolder**, and **Delete Folder**, and deleting a folder keeps what was inside it, moved up to the parent level. Drag a saved query or a linked file out of the sidebar to drop its SQL into the editor or another app. +Folders come from the same background menu. A folder's own menu has **Rename**, **New Favorite…**, **New Subfolder**, and **Delete Folder**; deleting one moves what was inside up to the parent level. Drag a query or a linked file out of the sidebar to drop its SQL into the editor or another app. ## Team Library -On a Team license the Favorites tab gains a **Team Library** section holding the queries your team published. Double-click one, or select it and press `Return`, to run it in a new tab. To publish your own, right-click empty space and choose **Publish Saved Queries to Team…**, which replaces everything you published before. See [Team Plan](/features/team). +On a Team license the Favorites tab gains a **Team Library** section holding what your team published. Double-click one, or press `Return`, to run it in a new tab. + +To publish your own, right-click empty space and choose **Publish Saved Queries to Team…** It replaces everything you published before. See [Team Plan](/features/team). ## Linked SQL folders -Link a folder of `.sql` files on disk and they appear in the Favorites sidebar next to your saved queries. The point is a Git repo of shared queries: clone it, link it, and a `git pull` keeps the team's queries current. +Link a folder of `.sql` files on disk and they appear next to your saved queries. The point is a Git repo of shared queries: clone it, link it, and a `git pull` keeps the team current. This is not [Linked Folders](/features/connection-sharing#linked-folders), which watches a folder of shared `.tablepro` connection files. -Right-click empty space in the Favorites tab, choose **Add Linked SQL Folder…**, and pick any folder. `.sql`, `.psql`, and `.pgsql` files are indexed, subfolders nest the way they do on disk, and hidden files are skipped. Linked folders are global, so every connection's Favorites tab shows them, and a large repo stays cheap: only the first 4 KB of each file is read to build the sidebar. +Right-click empty space, choose **Add Linked SQL Folder…**, and pick any folder. `.sql`, `.psql`, and `.pgsql` are indexed, subfolders nest the way they do on disk, and hidden files are skipped. + +Linked folders are global, so every connection shows them. Only the first 4 KB of each file is read to build the sidebar, so a large repo stays cheap. ### Editing files -Click a linked file to open it as an ordinary editor tab. `Cmd+S` writes back in the encoding the file was read with, detected from the file itself and falling back to UTF-8, then ISO Latin-1. A file that changed on disk underneath you gets the same banner and diff sheet as any other [SQL file](/features/sql-files#when-the-file-changes-underneath-you). Files added and removed outside TablePro reach the sidebar a second after the change. +Click a linked file to open it as an ordinary editor tab. `Cmd+S` writes back in the encoding the file was read with, detected from the file itself and falling back to UTF-8, then ISO Latin-1. + +A file changed on disk gets the same banner and diff sheet as any other [SQL file](/features/sql-files#when-the-file-changes-underneath-you). Files added and removed outside TablePro reach the sidebar a second later. -A non-UTF-8 file carries a yellow warning triangle in the sidebar. Saving keeps its encoding, and a character that encoding cannot represent, an emoji in an ISO Latin-1 file, fails the save with an error rather than dropping the character. +A non-UTF-8 file carries a yellow warning triangle. Saving keeps its encoding, and a character it cannot represent, an emoji in an ISO Latin-1 file, fails the save with an error rather than dropping the character. ### Frontmatter -Leading SQL comments set the display name, the keyword, and the tooltip: +Leading SQL comments set the name, the keyword, and the tooltip: ```sql -- @name: Active Users (24h) @@ -126,12 +136,14 @@ WHERE last_seen > NOW() - INTERVAL 24 HOUR; | `@keyword` | Autocomplete trigger, exactly as for a saved favorite. | | `@description` | Shown in tooltips. Optional. | -The parser stops at the first line that is not one of these, so they go at the very top; a UTF-8 BOM is handled and the keys are case-insensitive. A file without frontmatter still appears, under its filename and with no keyword. The `;;` [cursor marker](#cursor-placement) works in linked files too. +The parser stops at the first line that is not one of these, so they go at the very top. Keys are case-insensitive and a UTF-8 BOM is handled. A file without frontmatter appears under its filename with no keyword. The `;;` [cursor marker](#cursor-placement) works here too. -To change frontmatter without opening the file, right-click the row and choose **Edit Metadata…** The dialog rewrites the leading comment block and leaves the rest of the file, and its encoding, alone. +Right-click a row and choose **Edit Metadata…** to change frontmatter without opening the file. The dialog rewrites the leading comment block and leaves the rest, and the encoding, alone. ### Managing linked files -Press `Delete` on a linked file, or right-click and choose **Move File to Trash**: it goes to the macOS Trash and stays recoverable. The same menu has **Open in Editor**, **Edit Metadata…**, **Copy Query**, and **Show in Finder**. A folder's root row carries **Show in Finder**, **Copy Path**, **Disable**, **Reload**, **Add Another SQL Folder…**, and **Remove from Sidebar**. Removing unlinks the folder and leaves the files where they are. +Press `Delete` on a linked file, or right-click and choose **Move File to Trash**: it goes to the macOS Trash and stays recoverable. The rest of that menu is **Open in Editor**, **Edit Metadata…**, **Copy Query**, and **Show in Finder**. + +A folder's root row carries **Show in Finder**, **Copy Path**, **Disable**, **Reload**, **Add Another SQL Folder…**, and **Remove from Sidebar**. Removing unlinks the folder and leaves the files where they are. -Linked folder paths are the one part of Favorites that does not sync, so each Mac links its own copy of a shared repo. +Linked folder paths are the one part of Favorites that does not sync, so each Mac links its own copy.