// // RefreshInfrastructureButton.swift // Passepartout // // Created by Davide De Rosa on 11/25/24. // Copyright (c) 2024 Davide De Rosa. All rights reserved. // // https://github.com/passepartoutvpn // // This file is part of Passepartout. // // Passepartout is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Passepartout is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Passepartout. If not, see <http://www.gnu.org/licenses/>. // import PassepartoutKit import SwiftUI public struct RefreshInfrastructureButton<Label>: View where Label: View { @EnvironmentObject private var providerManager: ProviderManager private let apis: [APIMapper] private let providerId: ProviderID private let label: () -> Label public init(apis: [APIMapper], providerId: ProviderID, label: @escaping () -> Label) { self.apis = apis self.providerId = providerId self.label = label } public var body: some View { Button { Task { try await providerManager.fetchVPNInfrastructure(from: apis, for: providerId) } } label: { label() } } } extension RefreshInfrastructureButton where Label == RefreshInfrastructureButtonProgressView { public init(apis: [APIMapper], providerId: ProviderID) { self.apis = apis self.providerId = providerId label = { RefreshInfrastructureButtonProgressView() } } } public struct RefreshInfrastructureButtonProgressView: View { @EnvironmentObject private var providerManager: ProviderManager public var body: some View { #if os(iOS) HStack { Text(Strings.Views.Providers.refreshInfrastructure) if providerManager.isLoading { Spacer() ProgressView() } } #else Text(Strings.Views.Providers.refreshInfrastructure) #endif } }