From 9363cc4f35f1eecabe078ab00e81ef20ba0ff70f Mon Sep 17 00:00:00 2001 From: Victoria Park Date: Tue, 12 Dec 2023 09:25:17 -0800 Subject: [PATCH] Rich PR feedback --- .../CardVaultViews/CardVaultView.swift | 7 +--- .../UpdateSetupTokenResultView.swift | 4 +-- .../CardVaultViews/UpdateSetupTokenView.swift | 2 +- .../PayPalVaultResultView.swift | 2 +- .../PayPalVaultViews/PayPalVaultView.swift | 7 +--- .../VaultViews/SetupTokenResultView.swift | 2 +- Demo/Demo/ViewModels/CardVaultViewModel.swift | 30 +++-------------- .../ViewModels/PayPalVaultViewModel.swift | 22 ++----------- Demo/Demo/ViewModels/VaultState.swift | 32 ++++++++++++++++--- 9 files changed, 41 insertions(+), 67 deletions(-) diff --git a/Demo/Demo/SwiftUIComponents/CardVaultViews/CardVaultView.swift b/Demo/Demo/SwiftUIComponents/CardVaultViews/CardVaultView.swift index 6efc7f3bc..67c800531 100644 --- a/Demo/Demo/SwiftUIComponents/CardVaultViews/CardVaultView.swift +++ b/Demo/Demo/SwiftUIComponents/CardVaultViews/CardVaultView.swift @@ -20,7 +20,7 @@ struct CardVaultView: View { UpdateSetupTokenView(cardVaultViewModel: cardVaultViewModel, setupToken: setupToken.id) } UpdateSetupTokenResultView(cardVaultViewModel: cardVaultViewModel) - if let updateSetupToken = cardVaultViewModel.updateSetupToken { + if let updateSetupToken = cardVaultViewModel.state.updateSetupToken { CreatePaymentTokenView( vaultViewModel: cardVaultViewModel, selectedMerchantIntegration: DemoSettings.merchantIntegration, @@ -53,11 +53,6 @@ struct CardVaultView: View { scrollView.scrollTo("bottomView") } } - .onChange(of: cardVaultViewModel.updateSetupToken) { _ in - withAnimation { - scrollView.scrollTo("bottomView") - } - } } } } diff --git a/Demo/Demo/SwiftUIComponents/CardVaultViews/UpdateSetupTokenResultView.swift b/Demo/Demo/SwiftUIComponents/CardVaultViews/UpdateSetupTokenResultView.swift index 3181bf27e..db0c78eea 100644 --- a/Demo/Demo/SwiftUIComponents/CardVaultViews/UpdateSetupTokenResultView.swift +++ b/Demo/Demo/SwiftUIComponents/CardVaultViews/UpdateSetupTokenResultView.swift @@ -5,7 +5,7 @@ struct UpdateSetupTokenResultView: View { @ObservedObject var cardVaultViewModel: CardVaultViewModel var body: some View { - switch cardVaultViewModel.updateSetupTokenResponse { + switch cardVaultViewModel.state.updateSetupTokenResponse { case .idle, .loading: EmptyView() case .loaded(let updateSetupTokenResponse): @@ -15,7 +15,7 @@ struct UpdateSetupTokenResultView: View { } } - func getSuccessView(updateSetupTokenResponse: CardVaultViewModel.UpdateSetupTokenResult) -> some View { + func getSuccessView(updateSetupTokenResponse: UpdateSetupTokenResult) -> some View { VStack(spacing: 16) { HStack { Text("Vault Success") diff --git a/Demo/Demo/SwiftUIComponents/CardVaultViews/UpdateSetupTokenView.swift b/Demo/Demo/SwiftUIComponents/CardVaultViews/UpdateSetupTokenView.swift index c1729527e..f0693c99d 100644 --- a/Demo/Demo/SwiftUIComponents/CardVaultViews/UpdateSetupTokenView.swift +++ b/Demo/Demo/SwiftUIComponents/CardVaultViews/UpdateSetupTokenView.swift @@ -50,7 +50,7 @@ struct UpdateSetupTokenView: View { } } .buttonStyle(RoundedBlueButtonStyle()) - if case .loading = cardVaultViewModel.updateSetupTokenResponse { + if case .loading = cardVaultViewModel.state.updateSetupTokenResponse { CircularProgressView() } } diff --git a/Demo/Demo/SwiftUIComponents/PayPalVaultViews/PayPalVaultResultView.swift b/Demo/Demo/SwiftUIComponents/PayPalVaultViews/PayPalVaultResultView.swift index f167d55e1..9589e1c7e 100644 --- a/Demo/Demo/SwiftUIComponents/PayPalVaultViews/PayPalVaultResultView.swift +++ b/Demo/Demo/SwiftUIComponents/PayPalVaultViews/PayPalVaultResultView.swift @@ -6,7 +6,7 @@ struct PayPalVaultResultView: View { @ObservedObject var paypalVaultViewModel: PayPalVaultViewModel var body: some View { - switch paypalVaultViewModel.paypalVaultTokenResponse { + switch paypalVaultViewModel.state.paypalVaultTokenResponse { case .idle, .loading: EmptyView() case .loaded(let vaultResult): diff --git a/Demo/Demo/SwiftUIComponents/PayPalVaultViews/PayPalVaultView.swift b/Demo/Demo/SwiftUIComponents/PayPalVaultViews/PayPalVaultView.swift index 9d90c1b68..ca8980d64 100644 --- a/Demo/Demo/SwiftUIComponents/PayPalVaultViews/PayPalVaultView.swift +++ b/Demo/Demo/SwiftUIComponents/PayPalVaultViews/PayPalVaultView.swift @@ -24,7 +24,7 @@ struct PayPalVaultView: View { .padding() } PayPalVaultResultView(paypalVaultViewModel: paypalVaultViewModel) - if let paypalVaultResult = paypalVaultViewModel.paypalVaultToken { + if let paypalVaultResult = paypalVaultViewModel.state.paypalVaultToken { CreatePaymentTokenView( vaultViewModel: paypalVaultViewModel, selectedMerchantIntegration: DemoSettings.merchantIntegration, @@ -57,11 +57,6 @@ struct PayPalVaultView: View { scrollView.scrollTo("bottomView") } } - .onChange(of: paypalVaultViewModel.paypalVaultToken) { _ in - withAnimation { - scrollView.scrollTo("bottomView") - } - } } } } diff --git a/Demo/Demo/SwiftUIComponents/VaultViews/SetupTokenResultView.swift b/Demo/Demo/SwiftUIComponents/VaultViews/SetupTokenResultView.swift index 75d27f368..6659d52d4 100644 --- a/Demo/Demo/SwiftUIComponents/VaultViews/SetupTokenResultView.swift +++ b/Demo/Demo/SwiftUIComponents/VaultViews/SetupTokenResultView.swift @@ -30,7 +30,7 @@ struct SetupTokenResultView: View { LeadingText("\(setupTokenResponse.status)") if let url = setupTokenResponse.paypalURL { LeadingText("PayPalURL", weight: .bold) - LeadingText("\(setupTokenResponse.paypalURL ?? "No url")") + LeadingText("\(url)") } } .frame(maxWidth: .infinity) diff --git a/Demo/Demo/ViewModels/CardVaultViewModel.swift b/Demo/Demo/ViewModels/CardVaultViewModel.swift index a7b814812..cd9238ec3 100644 --- a/Demo/Demo/ViewModels/CardVaultViewModel.swift +++ b/Demo/Demo/ViewModels/CardVaultViewModel.swift @@ -4,27 +4,11 @@ import CorePayments class CardVaultViewModel: VaultViewModel, CardVaultDelegate { - struct UpdateSetupTokenResult: Decodable, Equatable { - - var id: String - var status: String - } - - @Published var updateSetupToken: UpdateSetupTokenResult? - - @Published var updateSetupTokenResponse: LoadingState = .idle { - didSet { - if case .loaded(let value) = updateSetupTokenResponse { - updateSetupToken = value - } - } - } - let configManager = CoreConfigManager(domain: "Card Vault") func vault(card: Card, setupToken: String) async { DispatchQueue.main.async { - self.updateSetupTokenResponse = .loading + self.state.updateSetupTokenResponse = .loading } do { let config = try await configManager.getCoreConfig() @@ -33,7 +17,7 @@ class CardVaultViewModel: VaultViewModel, CardVaultDelegate { let cardVaultRequest = CardVaultRequest(card: card, setupTokenID: setupToken) cardClient.vault(cardVaultRequest) } catch { - updateSetupTokenResponse = .error(message: error.localizedDescription) + self.state.updateSetupTokenResponse = .error(message: error.localizedDescription) print("failed in updating setup token. \(error.localizedDescription)") } } @@ -49,7 +33,7 @@ class CardVaultViewModel: VaultViewModel, CardVaultDelegate { func setUpTokenSuccessResult(vaultResult: CardPayments.CardVaultResult) { DispatchQueue.main.async { - self.updateSetupTokenResponse = .loaded( + self.state.updateSetupTokenResponse = .loaded( UpdateSetupTokenResult(id: vaultResult.setupTokenID, status: vaultResult.status) ) } @@ -57,16 +41,10 @@ class CardVaultViewModel: VaultViewModel, CardVaultDelegate { func setUpdateSetupTokenFailureResult(vaultError: CorePayments.CoreSDKError) { DispatchQueue.main.async { - self.updateSetupTokenResponse = .error(message: vaultError.localizedDescription) + self.state.updateSetupTokenResponse = .error(message: vaultError.localizedDescription) } } - override func resetState() { - super.resetState() - updateSetupToken = nil - updateSetupTokenResponse = .idle - } - // MARK: - CardVault Delegate func card(_ cardClient: CardPayments.CardClient, didFinishWithVaultResult vaultResult: CardPayments.CardVaultResult) { diff --git a/Demo/Demo/ViewModels/PayPalVaultViewModel.swift b/Demo/Demo/ViewModels/PayPalVaultViewModel.swift index 322332e76..ebe0e8237 100644 --- a/Demo/Demo/ViewModels/PayPalVaultViewModel.swift +++ b/Demo/Demo/ViewModels/PayPalVaultViewModel.swift @@ -4,16 +4,6 @@ import CorePayments class PayPalVaultViewModel: VaultViewModel, PayPalVaultDelegate { - @Published var paypalVaultToken: PayPalVaultResult? - - @Published var paypalVaultTokenResponse: LoadingState = .idle { - didSet { - if case .loaded(let value) = paypalVaultTokenResponse { - paypalVaultToken = value - } - } - } - let configManager = CoreConfigManager(domain: "PayPal Vault") func vault(url: String) async { @@ -21,7 +11,7 @@ class PayPalVaultViewModel: VaultViewModel, PayPalVaultDelegate { return } DispatchQueue.main.async { - self.paypalVaultTokenResponse = .loading + self.state.paypalVaultTokenResponse = .loading } do { let config = try await configManager.getCoreConfig() @@ -33,12 +23,6 @@ class PayPalVaultViewModel: VaultViewModel, PayPalVaultDelegate { } } - override func resetState() { - super.resetState() - paypalVaultToken = nil - paypalVaultTokenResponse = .idle - } - // MARK: - PayPalVault Delegate func paypal( @@ -46,7 +30,7 @@ class PayPalVaultViewModel: VaultViewModel, PayPalVaultDelegate { didFinishWithVaultResult paypalVaultResult: PayPalVaultResult ) { DispatchQueue.main.async { - self.paypalVaultTokenResponse = .loaded(paypalVaultResult) + self.state.paypalVaultTokenResponse = .loaded(paypalVaultResult) } } @@ -56,7 +40,7 @@ class PayPalVaultViewModel: VaultViewModel, PayPalVaultDelegate { ) { DispatchQueue.main.async { - self.paypalVaultTokenResponse = .error(message: vaultError.localizedDescription) + self.state.paypalVaultTokenResponse = .error(message: vaultError.localizedDescription) } } diff --git a/Demo/Demo/ViewModels/VaultState.swift b/Demo/Demo/ViewModels/VaultState.swift index e6bf7e0e0..933ea725f 100644 --- a/Demo/Demo/ViewModels/VaultState.swift +++ b/Demo/Demo/ViewModels/VaultState.swift @@ -2,16 +2,20 @@ import Foundation import CardPayments import PayPalWebPayments -struct VaultState: Equatable { +struct UpdateSetupTokenResult: Decodable, Equatable { - struct UpdateSetupTokenResult: Decodable, Equatable { + var id: String + var status: String +} - var id: String - var status: String - } +struct VaultState: Equatable { var setupToken: SetUpTokenResponse? var paymentToken: PaymentTokenResponse? + // result for card vault + var updateSetupToken: UpdateSetupTokenResult? + // result for paypal vault + var paypalVaultToken: PayPalVaultResult? var setupTokenResponse: LoadingState = .idle { didSet { @@ -28,6 +32,24 @@ struct VaultState: Equatable { } } } + + // response from Card Vault + var updateSetupTokenResponse: LoadingState = .idle { + didSet { + if case .loaded(let value) = updateSetupTokenResponse { + updateSetupToken = value + } + } + } + + // response from PayPal Vault + var paypalVaultTokenResponse: LoadingState = .idle { + didSet { + if case .loaded(let value) = paypalVaultTokenResponse { + paypalVaultToken = value + } + } + } } enum LoadingState: Equatable {