From 12d3bd20f5dbefad89a78f2f37dd17b69f314ac2 Mon Sep 17 00:00:00 2001 From: Davide Date: Wed, 23 Oct 2024 18:40:09 +0200 Subject: [PATCH] Highlight selected server (#752) Use provider-aware ID. --- Passepartout/Library/Sources/AppUI/Domain/Issue.swift | 2 +- .../AppUI/Views/Provider/VPNProviderServerView.swift | 1 + .../Provider/iOS/VPNProviderServerView+iOS.swift | 11 +++++++++-- .../Provider/macOS/VPNProviderServerView+macOS.swift | 4 +++- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Passepartout/Library/Sources/AppUI/Domain/Issue.swift b/Passepartout/Library/Sources/AppUI/Domain/Issue.swift index 668ceec6..9cd645dc 100644 --- a/Passepartout/Library/Sources/AppUI/Domain/Issue.swift +++ b/Passepartout/Library/Sources/AppUI/Domain/Issue.swift @@ -57,7 +57,7 @@ struct Issue: Identifiable { purchasedProducts: Set, appLog: Data? = nil, tunnelLog: Data? = nil, - providerId: ProviderID? + providerId: ProviderID? = nil ) { id = UUID() self.appLine = appLine diff --git a/Passepartout/Library/Sources/AppUI/Views/Provider/VPNProviderServerView.swift b/Passepartout/Library/Sources/AppUI/Views/Provider/VPNProviderServerView.swift index a5b45554..b3a8c5a5 100644 --- a/Passepartout/Library/Sources/AppUI/Views/Provider/VPNProviderServerView.swift +++ b/Passepartout/Library/Sources/AppUI/Views/Provider/VPNProviderServerView.swift @@ -60,6 +60,7 @@ struct VPNProviderServerView: View where Configuration: ProviderC debugChanges() return Subview( manager: manager, + selectedServer: selectedEntity?.server, filters: $filters, onSelect: selectServer ) diff --git a/Passepartout/Library/Sources/AppUI/Views/Provider/iOS/VPNProviderServerView+iOS.swift b/Passepartout/Library/Sources/AppUI/Views/Provider/iOS/VPNProviderServerView+iOS.swift index 6228c502..550476c1 100644 --- a/Passepartout/Library/Sources/AppUI/Views/Provider/iOS/VPNProviderServerView+iOS.swift +++ b/Passepartout/Library/Sources/AppUI/Views/Provider/iOS/VPNProviderServerView+iOS.swift @@ -34,6 +34,8 @@ extension VPNProviderServerView { @ObservedObject var manager: VPNProviderManager + let selectedServer: VPNServer? + @Binding var filters: VPNFilters @@ -85,7 +87,7 @@ private extension VPNProviderServerView.Subview { countryServers(for: code) .map { servers in DisclosureGroup { - ForEach(servers, id: \.serverId, content: serverView) + ForEach(servers, id: \.id, content: serverView) } label: { HStack { ThemeCountryFlag(code: code) @@ -99,7 +101,12 @@ private extension VPNProviderServerView.Subview { Button { onSelect(server) } label: { - Text(server.hostname ?? server.id) + HStack { + Text(server.hostname ?? server.serverId) + Spacer() + ThemeImage(.marked) + .opacity(server.id == selectedServer?.id ? 1.0 : 0.0) + } } } diff --git a/Passepartout/Library/Sources/AppUI/Views/Provider/macOS/VPNProviderServerView+macOS.swift b/Passepartout/Library/Sources/AppUI/Views/Provider/macOS/VPNProviderServerView+macOS.swift index a03aa455..938889e0 100644 --- a/Passepartout/Library/Sources/AppUI/Views/Provider/macOS/VPNProviderServerView+macOS.swift +++ b/Passepartout/Library/Sources/AppUI/Views/Provider/macOS/VPNProviderServerView+macOS.swift @@ -34,6 +34,8 @@ extension VPNProviderServerView { @ObservedObject var manager: VPNProviderManager + let selectedServer: VPNServer? + @Binding var filters: VPNFilters @@ -50,7 +52,7 @@ extension VPNProviderServerView { private extension VPNProviderServerView.Subview { var tableView: some View { - Table(manager.filteredServers) { + Table(manager.filteredServers, selection: .constant(selectedServer?.id)) { TableColumn(Strings.Global.region) { server in HStack { ThemeCountryFlag(code: server.provider.countryCode)