@@ -269,13 +269,12 @@ struct StandaloneUrlView: View {
269269 Button {
270270 isFocused = false
271271
272- if let configuration = viewModel. configurePayment ( ) ,
273- let sessionURL = URL ( string: viewModel. sessionApiUrl) {
274- viewModel. nativePayment = SwedbankPaySDK . NativePayment ( orderInfo: configuration. orderInfo)
272+ if let sessionURL = URL ( string: viewModel. sessionApiUrl) {
273+ viewModel. nativePayment = SwedbankPaySDK . SwedbankPayPaymentSession ( )
275274 viewModel. nativePayment? . delegate = viewModel
276275
277- viewModel. nativePayment? . startPaymentSession ( sessionURL: sessionURL)
278276 viewModel. isLoadingNativePayment = true
277+ viewModel. nativePayment? . fetchPaymentSession ( sessionURL: sessionURL)
279278 viewModel. paymentResultIcon = nil
280279 viewModel. paymentResultMessage = nil
281280 }
@@ -292,8 +291,8 @@ struct StandaloneUrlView: View {
292291 . cornerRadius ( 30 )
293292 . padding ( . top, 10 )
294293
295- if let availableInstrument = viewModel. availableInstrument {
296- ForEach ( availableInstrument , id: \. self) { instrument in
294+ if let availableInstruments = viewModel. availableInstruments {
295+ ForEach ( availableInstruments , id: \. self) { instrument in
297296 switch instrument {
298297 case . swish( let prefills) :
299298 VStack ( spacing: 4 ) {
@@ -327,9 +326,9 @@ struct StandaloneUrlView: View {
327326
328327 Button {
329328 isFocused = false
330-
331- viewModel. nativePayment? . makePaymentAttempt ( instrument: . swish( msisdn: viewModel. swishNumber) )
329+
332330 viewModel. isLoadingNativePayment = true
331+ viewModel. nativePayment? . makeNativePaymentAttempt ( instrument: . swish( msisdn: viewModel. swishNumber) )
333332 } label: {
334333 Text ( " stand_alone_url_payment_swish " )
335334 . smallFont ( )
@@ -346,8 +345,8 @@ struct StandaloneUrlView: View {
346345 Button {
347346 isFocused = false
348347
349- viewModel. nativePayment? . makePaymentAttempt ( instrument: . swish( msisdn: nil ) )
350348 viewModel. isLoadingNativePayment = true
349+ viewModel. nativePayment? . makeNativePaymentAttempt ( instrument: . swish( msisdn: nil ) )
351350 } label: {
352351 Text ( " stand_alone_url_payment_swish_device " )
353352 . smallFont ( )
@@ -365,8 +364,8 @@ struct StandaloneUrlView: View {
365364 Button {
366365 isFocused = false
367366
368- viewModel. nativePayment? . makePaymentAttempt ( instrument: . swish( msisdn: prefill. msisdn) )
369367 viewModel. isLoadingNativePayment = true
368+ viewModel. nativePayment? . makeNativePaymentAttempt ( instrument: . swish( msisdn: prefill. msisdn) )
370369 } label: {
371370 Text ( " stand_alone_url_payment_swish_prefill \( prefill. msisdn) " )
372371 . smallFont ( )
@@ -380,16 +379,62 @@ struct StandaloneUrlView: View {
380379 . padding ( . top, 10 )
381380 }
382381 }
382+ case . creditCard( prefills: let prefills) :
383+ if let prefills = prefills {
384+ ForEach ( prefills, id: \. rank) { prefill in
385+ Button {
386+ isFocused = false
387+
388+ viewModel. isLoadingNativePayment = true
389+ viewModel. nativePayment? . makeNativePaymentAttempt ( instrument: . creditCard( prefill: prefill) )
390+ } label: {
391+ VStack ( spacing: 0 ) {
392+ Text ( " stand_alone_url_payment_credit_card_prefill \( prefill. cardBrand) " )
393+ Text ( " \( prefill. maskedPan) \( prefill. expiryString) " )
394+ }
395+ . smallFont ( )
396+ . frame ( maxWidth: . infinity)
397+ . frame ( height: 48 )
398+ . accessibilityIdentifier ( " creditCardPrefillButton " )
399+
400+ }
401+ . foregroundColor ( . white)
402+ . background ( . black)
403+ . cornerRadius ( 30 )
404+ . padding ( . top, 10 )
405+ }
406+ }
407+ case . webBased( identifier: let identifier) :
408+ EmptyView ( )
383409 }
384410 }
411+
412+ Button {
413+ isFocused = false
414+
415+ viewModel. paymentSessionSwedbankPayController = viewModel. nativePayment? . createSwedbankPaySDKController ( )
416+ viewModel. paymentSessionSwedbankPayController? . delegate = viewModel
417+ viewModel. displayPaymentSessionSwedbankPayController = true
418+ } label: {
419+ Text ( " Get payment menu " )
420+ . smallFont ( )
421+ . frame ( maxWidth: . infinity)
422+ . frame ( height: 48 )
423+ . accessibilityIdentifier ( " webBasedButton " )
424+
425+ }
426+ . foregroundColor ( . white)
427+ . background ( . black)
428+ . cornerRadius ( 30 )
429+ . padding ( . top, 10 )
385430 }
386431
387432 if viewModel. nativePayment != nil {
388433 Button {
389434 isFocused = false
390435
391- viewModel. nativePayment? . abortPaymentSession ( )
392436 viewModel. isLoadingNativePayment = true
437+ viewModel. nativePayment? . abortPaymentSession ( )
393438 } label: {
394439 Text ( " stand_alone_url_payment_abort " )
395440 . smallFont ( )
@@ -415,8 +460,8 @@ struct StandaloneUrlView: View {
415460 reader. scrollTo ( 0 , anchor: . top)
416461 }
417462 }
418- . onChange ( of: viewModel. availableInstrument ) { _ in
419- guard viewModel. availableInstrument != nil else {
463+ . onChange ( of: viewModel. availableInstruments ) { _ in
464+ guard viewModel. availableInstruments != nil else {
420465 return
421466 }
422467
@@ -429,18 +474,24 @@ struct StandaloneUrlView: View {
429474 SwedbankPayView ( swedbankPayConfiguration: configuration, delegate: viewModel, nativePaymentDelegate: viewModel)
430475 }
431476 }
477+ . sheet ( isPresented: $viewModel. displayPaymentSessionSwedbankPayController) {
478+ SomeView ( viewController: viewModel. paymentSessionSwedbankPayController!)
479+ }
432480 . sheet ( isPresented: $viewModel. displayScannerSheet) {
433481 self . scannerSheet
434482 }
483+ . sheet ( isPresented: $viewModel. show3DSecureViewController) {
484+ SomeView ( viewController: viewModel. paymentSession3DSecureViewController!)
485+ }
435486 . alert ( viewModel. errorTitle ?? " stand_alone_generic_error_title " . localize,
436487 isPresented: $viewModel. showingAlert,
437488 actions: {
438489 Button ( " general_ok " . localize, role: . cancel) { }
439490
440491 if let retry = viewModel. retry {
441492 Button ( " general_retry " . localize) {
442- retry ( )
443493 viewModel. isLoadingNativePayment = true
494+ retry ( )
444495 }
445496 }
446497 } ,
@@ -486,9 +537,9 @@ struct SwedbankPayView: UIViewControllerRepresentable {
486537
487538 private let swedbankPayConfiguration : SwedbankPayConfiguration
488539 private let delegate : SwedbankPaySDKDelegate
489- private let nativePaymentDelegate : SwedbankPaySDKNativePaymentDelegate
540+ private let nativePaymentDelegate : SwedbankPaySDKPaymentSessionDelegate
490541
491- init ( swedbankPayConfiguration: SwedbankPayConfiguration , delegate: SwedbankPaySDKDelegate , nativePaymentDelegate: SwedbankPaySDKNativePaymentDelegate ) {
542+ init ( swedbankPayConfiguration: SwedbankPayConfiguration , delegate: SwedbankPaySDKDelegate , nativePaymentDelegate: SwedbankPaySDKPaymentSessionDelegate ) {
492543 self . swedbankPayConfiguration = swedbankPayConfiguration
493544 self . delegate = delegate
494545 self . nativePaymentDelegate = nativePaymentDelegate
0 commit comments