@jimrising/easymerchantsdk-react-native 1.9.3 → 1.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,7 +7,7 @@ To add the path of sdk in your project. Open your `package.json` file and inside
7
7
 
8
8
  ```json
9
9
  "dependencies": {
10
- "@jimrising/easymerchantsdk-react-native": "^1.9.3"
10
+ "@jimrising/easymerchantsdk-react-native": "^1.9.4"
11
11
  },
12
12
  ```
13
13
 
@@ -2,8 +2,8 @@
2
2
  #import <React/RCTLog.h>
3
3
  #import <React/RCTBridgeModule.h>
4
4
 
5
- #import <easymerchantsdk-Swift.h>
6
- //#import <easymerchantsdk/easymerchantsdk-Swift.h>
5
+ //#import <easymerchantsdk-Swift.h>
6
+ #import <easymerchantsdk/easymerchantsdk-Swift.h>
7
7
 
8
8
  @interface EasyMerchantSdk ()
9
9
  @property (nonatomic, strong) EasyMerchantSdkPlugin *sdkPluginInstance;
@@ -45,7 +45,6 @@ public class EasyMerchantSdkPlugin: NSObject, RCTBridgeModule {
45
45
  }
46
46
  }
47
47
 
48
- // MARK: - configureEnvironment(...) Exposed to RN
49
48
  @objc public func configureEnvironment(_ env: String, apiKey: String, apiSecret: String) {
50
49
  switch env.lowercased() {
51
50
  case "production": EnvironmentConfig.setEnvironment(.production)
@@ -0,0 +1,167 @@
1
+ //
2
+ // PaymentStatusWebViewVC.swift
3
+ // EasyPay
4
+ //
5
+ // Created by Mony's Mac on 17/07/25.
6
+ //
7
+
8
+ //import UIKit
9
+ //import WebKit
10
+ //
11
+ //class PaymentStatusWebViewVC: UIViewController {
12
+ //
13
+ // var urlString: String?
14
+ // private var webView: WKWebView!
15
+ //
16
+ // override func viewDidLoad() {
17
+ // super.viewDidLoad()
18
+ // setupWebView()
19
+ // loadRequestedURL()
20
+ // }
21
+ //
22
+ // private func setupWebView() {
23
+ // webView = WKWebView(frame: self.view.bounds)
24
+ // webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
25
+ // self.view.addSubview(webView)
26
+ // }
27
+ //
28
+ // private func loadRequestedURL() {
29
+ // guard let urlString = urlString, let url = URL(string: urlString) else {
30
+ // print("Invalid URL string: \(String(describing: urlString))")
31
+ // return
32
+ // }
33
+ // let request = URLRequest(url: url)
34
+ // webView.load(request)
35
+ // }
36
+ //
37
+ //}
38
+
39
+
40
+ import UIKit
41
+ import WebKit
42
+
43
+ class PaymentStatusWebViewVC: UIViewController, WKNavigationDelegate {
44
+
45
+ var urlString: String?
46
+ private var webView: WKWebView!
47
+ private var closeButton: UIButton!
48
+ private var activityIndicator: UIActivityIndicatorView!
49
+ private var didShowCloseButton = false // 👈 Flag
50
+
51
+ override func viewDidLoad() {
52
+ super.viewDidLoad()
53
+ setupWebView()
54
+ setupCloseButton()
55
+ setupActivityIndicator()
56
+ loadRequestedURL()
57
+ }
58
+
59
+ private func setupWebView() {
60
+ webView = WKWebView(frame: self.view.bounds)
61
+ webView.navigationDelegate = self
62
+ webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
63
+ self.view.addSubview(webView)
64
+ }
65
+
66
+ private func setupCloseButton() {
67
+ closeButton = UIButton(type: .system)
68
+ if let closeImage = UIImage(systemName: "xmark.circle.fill") {
69
+ closeButton.setImage(closeImage, for: .normal)
70
+ closeButton.tintColor = .systemGray
71
+ } else {
72
+ closeButton.setTitle("✕", for: .normal)
73
+ closeButton.setTitleColor(.systemGray, for: .normal)
74
+ closeButton.titleLabel?.font = UIFont.systemFont(ofSize: 24, weight: .bold)
75
+ }
76
+ closeButton.frame = CGRect(x: self.view.bounds.width - 50, y: 50, width: 40, height: 40)
77
+ closeButton.autoresizingMask = [.flexibleLeftMargin, .flexibleBottomMargin]
78
+ closeButton.addTarget(self, action: #selector(closeButtonTapped), for: .touchUpInside)
79
+ closeButton.isHidden = true
80
+ self.view.addSubview(closeButton)
81
+ }
82
+
83
+ private func setupActivityIndicator() {
84
+ activityIndicator = UIActivityIndicatorView(style: .large)
85
+ activityIndicator.center = self.view.center
86
+ activityIndicator.hidesWhenStopped = true
87
+ self.view.addSubview(activityIndicator)
88
+ }
89
+
90
+ private func loadRequestedURL() {
91
+ guard let urlString = urlString, let url = URL(string: urlString) else {
92
+ print("Invalid URL string: \(String(describing: urlString))")
93
+ return
94
+ }
95
+ let request = URLRequest(url: url)
96
+ webView.load(request)
97
+ }
98
+
99
+ @objc private func closeButtonTapped() {
100
+ self.navigationController?.popViewController(animated: true)
101
+ }
102
+
103
+ // MARK: - WKNavigationDelegate
104
+ func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
105
+ print("WebView didStartProvisionalNavigation called")
106
+ activityIndicator.startAnimating()
107
+ closeButton.isHidden = true
108
+ didShowCloseButton = false // 👈 Reset the flag
109
+ }
110
+
111
+ func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
112
+ print("WebView didFinish called")
113
+ if !didShowCloseButton {
114
+ waitForPageToBeReady()
115
+ } else {
116
+ print("Close button already shown, skipping waitForPageToBeReady")
117
+ }
118
+ }
119
+
120
+ func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
121
+ activityIndicator.stopAnimating()
122
+ closeButton.isHidden = false
123
+ print("WebView failed with error: \(error.localizedDescription)")
124
+ }
125
+
126
+ func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
127
+ activityIndicator.stopAnimating()
128
+ closeButton.isHidden = false
129
+ print("WebView failed provisional navigation: \(error.localizedDescription)")
130
+ }
131
+
132
+ private func waitForPageToBeReady() {
133
+ webView.evaluateJavaScript("document.readyState") { [weak self] result, error in
134
+ guard let self = self else { return }
135
+ if let state = result as? String {
136
+ print("Page readyState:", state)
137
+ if state == "complete" {
138
+ self.checkIfPaymentUILoaded()
139
+ } else {
140
+ DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
141
+ self.waitForPageToBeReady()
142
+ }
143
+ }
144
+ }
145
+ }
146
+ }
147
+
148
+ private func checkIfPaymentUILoaded() {
149
+ guard !didShowCloseButton else { return }
150
+
151
+ // Replace '.loader' with your actual loader class or ID
152
+ let js = "document.querySelector('.loader') == null"
153
+ webView.evaluateJavaScript(js) { [weak self] result, error in
154
+ guard let self = self else { return }
155
+ if let loaded = result as? Bool, loaded == true {
156
+ print("Payment UI fully loaded")
157
+ self.activityIndicator.stopAnimating()
158
+ self.closeButton.isHidden = false
159
+ self.didShowCloseButton = true // 👈 Mark as shown
160
+ } else {
161
+ DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
162
+ self.checkIfPaymentUILoaded()
163
+ }
164
+ }
165
+ }
166
+ }
167
+ }
@@ -14,7 +14,7 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
14
14
  @IBOutlet weak var viewMain: UIView!
15
15
  @IBOutlet weak var lblCompleteAuthentication: UILabel!
16
16
  @IBOutlet weak var btnDone: UIButton!
17
- @IBOutlet weak var lblPaymentLink: UILabel!
17
+ // @IBOutlet weak var lblPaymentLink: UILabel!
18
18
  @IBOutlet weak var lblBillingInfoData: UILabel!
19
19
 
20
20
  @IBOutlet weak var viewPaymentDetails: UIStackView!
@@ -36,6 +36,8 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
36
36
  @IBOutlet weak var lblPaymentMethodValue: UILabel!
37
37
  @IBOutlet weak var lblStatus: UILabel!
38
38
 
39
+ @IBOutlet weak var btnContinue: UIButton!
40
+
39
41
  var easyPayDelegate: EasyPayViewControllerDelegate?
40
42
  var redirectURL: String?
41
43
  var chargeData: [String: Any] = [:]
@@ -49,7 +51,7 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
49
51
  var apiStatusCheckTimer: Timer?
50
52
  // New property for the 1-minute countdown
51
53
  var oneMinuteCountdownTimer: DispatchSourceTimer?
52
- var countdownRemaining: Int = 120 // 120 seconds
54
+ var countdownRemaining: Int = 150 // 120 seconds
53
55
 
54
56
  var additionalInfoData: [FieldItem]?
55
57
  var billingInfoData: [FieldItem]?
@@ -58,18 +60,20 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
58
60
  // Dispatch group to wait for initial API call
59
61
  let initialAPIGroup = DispatchGroup()
60
62
 
61
- // var amount: Int?
63
+ // var amount: Int?
62
64
  var amount: Double?
63
65
 
64
66
  var cardApiParams: [String: Any]?
65
67
 
66
68
  var request: Request!
67
69
 
70
+ var didTapContinue = false
71
+
68
72
  override func viewDidLoad() {
69
73
  super.viewDidLoad()
70
74
  uiFinishingTouchElements()
71
75
 
72
- setupTapOnLabel()
76
+ // setupTapOnLabel()
73
77
 
74
78
  // Initially hide done image and show loading image
75
79
  imgViewPaymentDone.isHidden = true
@@ -111,11 +115,14 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
111
115
  if countdownRemaining > 0 {
112
116
  imgViewLoading.isHidden = false
113
117
  imgViewPaymentDone.isHidden = true
114
- lblCompleteAuthentication.text = "Click the link below to complete 3DS Authentication.!"
118
+ // lblCompleteAuthentication.text = "Click the link below to complete 3DS Authentication.!"
119
+ if !didTapContinue {
120
+ lblCompleteAuthentication.text = "Tap Continue to proceed with 3D Secure authentication."
121
+ }
115
122
  btnDone.isHidden = true
116
123
 
117
124
  if apiStatusCheckTimer == nil {
118
- apiStatusCheckTimer = Timer.scheduledTimer(withTimeInterval: 10.0, repeats: true) { [weak self] _ in
125
+ apiStatusCheckTimer = Timer.scheduledTimer(withTimeInterval: 5.0, repeats: true) { [weak self] _ in
119
126
  guard let self = self else { return }
120
127
  if self.countdownRemaining > 0 {
121
128
  self.checkThreeDSecureStatus(completion: nil)
@@ -129,9 +136,12 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
129
136
  imgViewPaymentDone.isHidden = false
130
137
  imgViewPaymentDone.image = UIImage(systemName: "exclamationmark.circle.fill")
131
138
  imgViewPaymentDone.tintColor = .systemRed
132
- lblCompleteAuthentication.text = "Click the link below to complete 3DS Authentication.!"
139
+ // lblCompleteAuthentication.text = "Click the link below to complete 3DS Authentication.!"
140
+ if !didTapContinue {
141
+ lblCompleteAuthentication.text = "Tap Continue to proceed with 3D Secure authentication."
142
+ }
133
143
  btnDone.isHidden = false
134
- lblPaymentLink.isHidden = false
144
+ // lblPaymentLink.isHidden = false
135
145
  viewPaymentDetails.isHidden = false
136
146
 
137
147
  apiStatusCheckTimer?.invalidate()
@@ -139,6 +149,64 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
139
149
  }
140
150
  }
141
151
 
152
+ // override func viewWillAppear(_ animated: Bool) {
153
+ // super.viewWillAppear(animated)
154
+ // uiFinishingTouchElements()
155
+ //
156
+ // // Restart rotating animation if missing
157
+ // if !imgViewLoading.isHidden && imgViewLoading.layer.animation(forKey: "rotationAnimation") == nil {
158
+ // startRotatingImage()
159
+ // }
160
+ //
161
+ // // Check if chargeId already exists (success)
162
+ // if let chargeId = (threeDSecureStatusResponse?["data"] as? [String: Any])?["charge_id"] as? String,
163
+ // !chargeId.isEmpty {
164
+ // // ✅ Charge already found - no further API checks needed
165
+ // return
166
+ // }
167
+ //
168
+ // // If user came back after tapping Continue
169
+ // if didTapContinue {
170
+ // lblCompleteAuthentication.text = "Waiting for 3DS Authentication..."
171
+ // btnContinue.isHidden = true
172
+ // imgViewLoading.isHidden = false
173
+ // imgViewPaymentDone.isHidden = true
174
+ // startRotatingImage()
175
+ // } else {
176
+ // // Initial load or user hasn’t tapped Continue yet
177
+ // lblCompleteAuthentication.text = "Tap Continue to proceed with 3D Secure authentication."
178
+ // btnContinue.isHidden = false
179
+ // }
180
+ //
181
+ // btnDone.isHidden = true
182
+ // viewPaymentDetails.isHidden = true
183
+ //
184
+ // if countdownRemaining > 0 {
185
+ // if apiStatusCheckTimer == nil {
186
+ // apiStatusCheckTimer = Timer.scheduledTimer(withTimeInterval: 5.0, repeats: true) { [weak self] _ in
187
+ // guard let self = self else { return }
188
+ // if self.countdownRemaining > 0 {
189
+ // self.checkThreeDSecureStatus(completion: nil)
190
+ // }
191
+ // }
192
+ // }
193
+ // } else {
194
+ // // Countdown expired, stop API check
195
+ // apiStatusCheckTimer?.invalidate()
196
+ // apiStatusCheckTimer = nil
197
+ //
198
+ // imgViewLoading.layer.removeAllAnimations()
199
+ // imgViewLoading.isHidden = true
200
+ // imgViewPaymentDone.isHidden = false
201
+ // imgViewPaymentDone.image = UIImage(systemName: "exclamationmark.circle.fill")
202
+ // imgViewPaymentDone.tintColor = .systemRed
203
+ //
204
+ // lblCompleteAuthentication.text = "Tap Continue to proceed with 3D Secure authentication."
205
+ // btnDone.isHidden = false
206
+ // viewPaymentDetails.isHidden = false
207
+ // }
208
+ // }
209
+
142
210
  override func viewWillDisappear(_ animated: Bool) {
143
211
  super.viewWillDisappear(animated)
144
212
  apiStatusCheckTimer?.invalidate()
@@ -147,15 +215,6 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
147
215
  oneMinuteCountdownTimer = nil
148
216
  }
149
217
 
150
- // func startRotatingImage() {
151
- // let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation")
152
- // rotationAnimation.toValue = CGFloat.pi * 2 // 360 degrees in radians
153
- // rotationAnimation.duration = 1 // Adjust the duration as needed
154
- // rotationAnimation.isCumulative = true
155
- // rotationAnimation.repeatCount = .infinity // Continuous rotation
156
- // imgViewLoading.layer.add(rotationAnimation, forKey: "rotationAnimation")
157
- // }
158
-
159
218
  private func showHourglassGIF() {
160
219
  guard let bundlePath = Bundle.easyPayBundle.path(forResource: "hourglass", ofType: "gif"),
161
220
  let gifData = try? Data(contentsOf: URL(fileURLWithPath: bundlePath)),
@@ -166,7 +225,7 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
166
225
 
167
226
  var images: [UIImage] = []
168
227
  var duration: Double = 0
169
-
228
+
170
229
  let frameCount = CGImageSourceGetCount(source)
171
230
  for i in 0..<frameCount {
172
231
  if let cgImage = CGImageSourceCreateImageAtIndex(source, i, nil) {
@@ -175,7 +234,7 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
175
234
  images.append(UIImage(cgImage: cgImage))
176
235
  }
177
236
  }
178
-
237
+
179
238
  if !images.isEmpty {
180
239
  let animatedImage = UIImage.animatedImage(with: images, duration: duration)
181
240
  imgViewLoading.image = animatedImage
@@ -185,20 +244,20 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
185
244
 
186
245
  private func getFrameDuration(from source: CGImageSource, index: Int) -> Double {
187
246
  let defaultFrameDuration = 0.1
188
-
247
+
189
248
  guard let properties = CGImageSourceCopyPropertiesAtIndex(source, index, nil) as? [CFString: Any],
190
249
  let gifProperties = properties[kCGImagePropertyGIFDictionary] as? [CFString: Any] else {
191
250
  return defaultFrameDuration
192
251
  }
193
-
252
+
194
253
  if let unclampedDelay = gifProperties[kCGImagePropertyGIFUnclampedDelayTime] as? Double, unclampedDelay > 0 {
195
254
  return unclampedDelay
196
255
  }
197
-
256
+
198
257
  if let delay = gifProperties[kCGImagePropertyGIFDelayTime] as? Double, delay > 0 {
199
258
  return delay
200
259
  }
201
-
260
+
202
261
  return defaultFrameDuration
203
262
  }
204
263
 
@@ -206,31 +265,29 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
206
265
  showHourglassGIF()
207
266
  }
208
267
 
209
- private func setupTapOnLabel() {
210
- if let url = redirectURL {
211
- lblPaymentLink.text = url
212
- }
213
- lblPaymentLink.textColor = .systemBlue
214
- lblPaymentLink.isUserInteractionEnabled = true
215
-
216
- let tapGesture = UITapGestureRecognizer(target: self, action: #selector(linkTapped))
217
- lblPaymentLink.addGestureRecognizer(tapGesture)
218
- }
219
-
220
- @objc private func linkTapped() {
221
- guard let text = lblPaymentLink.text,
222
- let url = URL(string: text),
223
- UIApplication.shared.canOpenURL(url) else {
268
+ @IBAction func actionBtnContinue(_ sender: UIButton) {
269
+ guard let urlStr = redirectURL, !urlStr.isEmpty else {
270
+ print("Redirect URL is nil or empty")
224
271
  return
225
272
  }
226
- UIApplication.shared.open(url, options: [:], completionHandler: nil)
273
+
274
+ didTapContinue = true
275
+ lblCompleteAuthentication.text = "Wating for 3DS Authentication..."
276
+ btnContinue.isHidden = true
277
+
278
+ let vc = easymerchantsdk.instantiateViewController(withIdentifier: "PaymentStatusWebViewVC") as! PaymentStatusWebViewVC
279
+ vc.urlString = urlStr // Pass the URL to WebView VC
280
+ self.navigationController?.pushViewController(vc, animated: true)
227
281
  }
228
282
 
229
283
  private func startOneMinuteCountdownAndAPICheck() {
230
284
  startRotatingImage()
231
285
  imgViewPaymentDone.isHidden = true
232
286
  imgViewLoading.isHidden = false
233
- lblCompleteAuthentication.text = "Click the link below to complete 3DS Authentication.!"
287
+ // lblCompleteAuthentication.text = "Click the link below to complete 3DS Authentication.!"
288
+ if !didTapContinue {
289
+ lblCompleteAuthentication.text = "Tap Continue to proceed with 3D Secure authentication."
290
+ }
234
291
  btnDone.isHidden = true
235
292
 
236
293
  apiStatusCheckTimer?.invalidate()
@@ -241,7 +298,7 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
241
298
  self?.initialAPIGroup.leave()
242
299
  }
243
300
 
244
- countdownRemaining = 120
301
+ countdownRemaining = 150
245
302
 
246
303
  oneMinuteCountdownTimer = DispatchSource.makeTimerSource(queue: .main)
247
304
  oneMinuteCountdownTimer?.schedule(deadline: .now(), repeating: .seconds(1))
@@ -257,9 +314,12 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
257
314
  self.imgViewLoading.layer.removeAllAnimations()
258
315
  self.imgViewLoading.isHidden = true
259
316
  self.imgViewPaymentDone.isHidden = false
260
- self.lblCompleteAuthentication.text = "Click the link below to complete 3DS Authentication.!"
317
+ // self.lblCompleteAuthentication.text = "Click the link below to complete 3DS Authentication.!"
318
+ if !self.didTapContinue {
319
+ self.lblCompleteAuthentication.text = "Tap Continue to proceed with 3D Secure authentication."
320
+ }
261
321
  self.btnDone.isHidden = false
262
- self.lblPaymentLink.isHidden = false
322
+ // self.lblPaymentLink.isHidden = false
263
323
  self.viewPaymentDetails.isHidden = false
264
324
 
265
325
  if let json = self.threeDSecureStatusResponse,
@@ -287,7 +347,7 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
287
347
  self.lblTransactionId.text = "\(transactionId)"
288
348
  self.lblSubscriptionId.text = "\(subscriptionId)"
289
349
  self.lblDate.text = "\(formattedDate)"
290
- // self.lblTotal.text = "$\(self.amount ?? 0)"
350
+ // self.lblTotal.text = "$\(self.amount ?? 0)"
291
351
  let rawAmount = Double(self.request?.amount ?? 0)
292
352
  let amountText = String(format: "$%.2f", rawAmount)
293
353
  self.lblTotal.text = "\(amountText)"
@@ -305,33 +365,33 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
305
365
  self.checkThreeDSecureStatus(completion: nil)
306
366
  }
307
367
  }
308
-
368
+
309
369
  @IBAction func actionBtnDone(_ sender: UIButton) {
310
370
  var resultBillingInfo: [String: Any]? = nil
311
371
  var resultAdditionalInfo: [String: Any]? = nil
312
-
372
+
313
373
  // Extract last 4 digits and format as ****4242
314
374
  if let cardNumber = cardApiParams?["card_number"] as? String, cardNumber.count >= 4 {
315
375
  let last4 = String(cardNumber.suffix(4))
316
376
  let masked = "****\(last4)"
317
377
  chargeData["card_number_last_4"] = masked
318
378
  }
319
-
379
+
320
380
  // Assign billing info if non-empty
321
381
  if let billing = billingInfo, !billing.isEmpty {
322
382
  resultBillingInfo = billing
323
383
  }
324
-
384
+
325
385
  // Combine 3DS status into additionalInfo if needed
326
386
  var combinedAdditionalInfo = additionalInfo ?? [:]
327
387
  if let threeDS = threeDSecureStatusResponse {
328
388
  combinedAdditionalInfo["threeDSecureStatus"] = threeDS
329
389
  }
330
-
390
+
331
391
  if !combinedAdditionalInfo.isEmpty {
332
392
  resultAdditionalInfo = combinedAdditionalInfo
333
393
  }
334
-
394
+
335
395
  //Pass updated chargeData with masked_card_number
336
396
  let result = SDKResult(
337
397
  type: .success,
@@ -339,10 +399,10 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
339
399
  billingInfo: resultBillingInfo,
340
400
  additionalInfo: resultAdditionalInfo
341
401
  )
342
-
402
+
343
403
  // Notify delegate and dismiss
344
404
  easyPayDelegate?.easyPayController(self.navigationController as! EasyPayViewController, didFinishWith: result)
345
-
405
+
346
406
  if let easyPayVC = self.navigationController as? EasyPayViewController {
347
407
  easyPayVC.dismiss(animated: true, completion: {
348
408
  if let delegate = easyPayVC.easyPayDelegate {
@@ -368,11 +428,14 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
368
428
  btnDone.backgroundColor = uiColor
369
429
  imgViewLoading.image = UIImage(systemName: "arrow.2.circlepath")?.withRenderingMode(.alwaysTemplate)
370
430
  imgViewLoading.tintColor = uiColor
431
+
432
+ btnContinue.backgroundColor = uiColor
371
433
  }
372
434
 
373
435
  if let primaryBtnFontColor = UserStoreSingleton.shared.primary_btn_font_col,
374
436
  let secondaryUIColor = UIColor(hex: primaryBtnFontColor) {
375
437
  btnDone.setTitleColor(secondaryUIColor, for: .normal)
438
+ btnContinue.setTitleColor(secondaryUIColor, for: .normal)
376
439
  }
377
440
 
378
441
  if let primaryFontColor = UserStoreSingleton.shared.primary_font_col,
@@ -413,7 +476,7 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
413
476
  let fontSizeDouble = Double(fontSizeString) { // Convert String to Double
414
477
  let fontSize = CGFloat(fontSizeDouble) // Convert Double to CGFloat
415
478
  lblCompleteAuthentication.font = UIFont.systemFont(ofSize: fontSize, weight: .semibold)
416
- lblPaymentLink.font = UIFont.systemFont(ofSize: fontSize, weight: .medium)
479
+ // lblPaymentLink.font = UIFont.systemFont(ofSize: fontSize, weight: .medium)
417
480
  lblBillingInfoData.font = UIFont.systemFont(ofSize: fontSize, weight: .medium)
418
481
  }
419
482
 
@@ -504,7 +567,7 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
504
567
  self.lblTransactionId.text = transactionId
505
568
  self.lblSubscriptionId.text = subscriptionId
506
569
  self.lblDate.text = formattedDate
507
- // self.lblTotal.text = "$\(self.amount ?? 0)"
570
+ // self.lblTotal.text = "$\(self.amount ?? 0)"
508
571
  let rawAmount = Double(self.request?.amount ?? 0)
509
572
  let amountText = String(format: "$%.2f", rawAmount)
510
573
  self.lblTotal.text = "\(amountText)"
@@ -525,9 +588,10 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
525
588
  self.imgViewPaymentDone.isHidden = false
526
589
  self.lblCompleteAuthentication.text = "Payment Failed"
527
590
  self.btnDone.isHidden = false
528
- self.lblPaymentLink.isHidden = false
591
+ // self.lblPaymentLink.isHidden = false
529
592
  self.viewPaymentDetails.isHidden = false
530
593
 
594
+ self.btnContinue.isHidden = true
531
595
  }
532
596
  else if status.lowercased() == "completed" {
533
597
  // Success case
@@ -542,8 +606,10 @@ class ThreeDSecurePaymentDoneVC: BaseVC {
542
606
  self.imgViewPaymentDone.isHidden = false
543
607
  self.lblCompleteAuthentication.text = "Authentication Completed"
544
608
  self.btnDone.isHidden = false
545
- self.lblPaymentLink.isHidden = false
609
+ // self.lblPaymentLink.isHidden = false
546
610
  self.viewPaymentDetails.isHidden = false
611
+
612
+ self.btnContinue.isHidden = true
547
613
  } else {
548
614
  // Still waiting
549
615
  self.imgViewPaymentDone.image = UIImage(systemName: "exclamationmark.circle.fill")
@@ -1,6 +1,6 @@
1
1
  Pod::Spec.new do |s|
2
2
  s.name = 'easymerchantsdk'
3
- s.version = '1.9.3'
3
+ s.version = '1.9.4'
4
4
  s.summary = 'A React Native SDK for Easy Merchant.'
5
5
  s.description = <<-DESC
6
6
  A React Native SDK to enable Easy Merchant functionality in mobile applications.
@@ -1858,7 +1858,7 @@
1858
1858
  <action selector="actionBtnCancel:" destination="lAS-6T-hJb" eventType="touchUpInside" id="Q1V-aH-8oh"/>
1859
1859
  </connections>
1860
1860
  </button>
1861
- <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Enter OTP sent to your email." lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WUH-7b-0Y6">
1861
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Enter OTP (One Time Pin) sent to your email." lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WUH-7b-0Y6">
1862
1862
  <rect key="frame" x="0.0" y="64" width="361" height="17"/>
1863
1863
  <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
1864
1864
  <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@@ -2014,7 +2014,7 @@
2014
2014
  </subviews>
2015
2015
  </stackView>
2016
2016
  <stackView opaque="NO" contentMode="scaleToFill" spacing="4" translatesAutoresizingMaskIntoConstraints="NO" id="sdw-RP-gcM">
2017
- <rect key="frame" x="60.000000000000014" y="166" width="241.33333333333337" height="20"/>
2017
+ <rect key="frame" x="9.6666666666666572" y="166" width="341.66666666666674" height="20"/>
2018
2018
  <subviews>
2019
2019
  <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="exclamationmark.circle" catalog="system" translatesAutoresizingMaskIntoConstraints="NO" id="nu3-EO-H0C">
2020
2020
  <rect key="frame" x="0.0" y="0.66666666666666607" width="20" height="18.666666666666671"/>
@@ -2033,14 +2033,14 @@
2033
2033
  <color key="textColor" name="E93939"/>
2034
2034
  <nil key="highlightedColor"/>
2035
2035
  </label>
2036
- <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Untill Resend OTP" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bVl-dP-xS7">
2037
- <rect key="frame" x="66.666666666666657" y="0.0" width="116.66666666666666" height="20"/>
2036
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Untill Resend OTP (One Time Pin)" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bVl-dP-xS7">
2037
+ <rect key="frame" x="66.666666666666657" y="0.0" width="216.99999999999997" height="20"/>
2038
2038
  <fontDescription key="fontDescription" type="system" pointSize="14"/>
2039
2039
  <color key="textColor" white="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
2040
2040
  <nil key="highlightedColor"/>
2041
2041
  </label>
2042
2042
  <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fJY-dZ-dQ4">
2043
- <rect key="frame" x="187.33333333333331" y="0.0" width="54" height="20"/>
2043
+ <rect key="frame" x="287.66666666666663" y="0.0" width="54" height="20"/>
2044
2044
  <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="15"/>
2045
2045
  <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
2046
2046
  <state key="normal" title="Resend"/>
@@ -2526,7 +2526,7 @@
2526
2526
  <action selector="actionBtnCloseOTPView:" destination="sRX-zZ-F0N" eventType="touchUpInside" id="v96-li-8NR"/>
2527
2527
  </connections>
2528
2528
  </button>
2529
- <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Enter OTP sent to your email." lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qbG-zh-fHY">
2529
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Enter OTP (One Time Pin) sent to your email." lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qbG-zh-fHY">
2530
2530
  <rect key="frame" x="0.0" y="64" width="361" height="17"/>
2531
2531
  <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
2532
2532
  <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@@ -2689,7 +2689,7 @@
2689
2689
  <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
2690
2690
  </stackView>
2691
2691
  <stackView opaque="NO" contentMode="scaleToFill" spacing="4" translatesAutoresizingMaskIntoConstraints="NO" id="AeV-da-AJY">
2692
- <rect key="frame" x="60.000000000000014" y="162" width="241.33333333333337" height="20"/>
2692
+ <rect key="frame" x="9.6666666666666572" y="162" width="341.66666666666674" height="20"/>
2693
2693
  <subviews>
2694
2694
  <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="exclamationmark.circle" catalog="system" translatesAutoresizingMaskIntoConstraints="NO" id="Zh1-6r-P0R">
2695
2695
  <rect key="frame" x="0.0" y="0.66666666666666607" width="20" height="18.666666666666671"/>
@@ -2708,14 +2708,14 @@
2708
2708
  <color key="textColor" name="E93939"/>
2709
2709
  <nil key="highlightedColor"/>
2710
2710
  </label>
2711
- <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Untill Resend OTP" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HVT-os-4oM">
2712
- <rect key="frame" x="66.666666666666657" y="0.0" width="116.66666666666666" height="20"/>
2711
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Untill Resend OTP (One Time Pin)" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HVT-os-4oM">
2712
+ <rect key="frame" x="66.666666666666657" y="0.0" width="216.99999999999997" height="20"/>
2713
2713
  <fontDescription key="fontDescription" type="system" pointSize="14"/>
2714
2714
  <color key="textColor" white="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
2715
2715
  <nil key="highlightedColor"/>
2716
2716
  </label>
2717
2717
  <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Zcz-Wj-WPL">
2718
- <rect key="frame" x="187.33333333333331" y="0.0" width="54" height="20"/>
2718
+ <rect key="frame" x="287.66666666666663" y="0.0" width="54" height="20"/>
2719
2719
  <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="15"/>
2720
2720
  <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
2721
2721
  <state key="normal" title="Resend"/>
@@ -8521,7 +8521,7 @@
8521
8521
  </viewController>
8522
8522
  <placeholder placeholderIdentifier="IBFirstResponder" id="7TL-sr-fJN" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
8523
8523
  </objects>
8524
- <point key="canvasLocation" x="1687.7862595419847" y="-2240.1408450704225"/>
8524
+ <point key="canvasLocation" x="1689" y="-1979"/>
8525
8525
  </scene>
8526
8526
  <!--Country ListVC-->
8527
8527
  <scene sceneID="jB5-M3-ztU">
@@ -8618,6 +8618,21 @@
8618
8618
  </objects>
8619
8619
  <point key="canvasLocation" x="3554.9618320610684" y="764.78873239436621"/>
8620
8620
  </scene>
8621
+ <!--Payment Status Web ViewVC-->
8622
+ <scene sceneID="0pT-Qc-aGH">
8623
+ <objects>
8624
+ <viewController storyboardIdentifier="PaymentStatusWebViewVC" useStoryboardIdentifierAsRestorationIdentifier="YES" id="7QX-wf-RDe" customClass="PaymentStatusWebViewVC" customModule="EasyPay" customModuleProvider="target" sceneMemberID="viewController">
8625
+ <view key="view" contentMode="scaleToFill" id="lwu-Wr-RxY">
8626
+ <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
8627
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
8628
+ <viewLayoutGuide key="safeArea" id="Dyf-Qi-pah"/>
8629
+ <color key="backgroundColor" systemColor="systemBackgroundColor"/>
8630
+ </view>
8631
+ </viewController>
8632
+ <placeholder placeholderIdentifier="IBFirstResponder" id="Bg1-Rj-mEd" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
8633
+ </objects>
8634
+ <point key="canvasLocation" x="4366" y="765"/>
8635
+ </scene>
8621
8636
  <!--Grail PayVC-->
8622
8637
  <scene sceneID="OTL-Ro-rHx">
8623
8638
  <objects>
@@ -8645,7 +8660,7 @@
8645
8660
  <rect key="frame" x="0.0" y="59" width="393" height="759"/>
8646
8661
  <subviews>
8647
8662
  <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="of6-7s-ppt">
8648
- <rect key="frame" x="0.0" y="0.0" width="393" height="840.66666666666663"/>
8663
+ <rect key="frame" x="0.0" y="0.0" width="393" height="847.66666666666663"/>
8649
8664
  <subviews>
8650
8665
  <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="payment_done_icon" translatesAutoresizingMaskIntoConstraints="NO" id="5Tx-1L-CH6">
8651
8666
  <rect key="frame" x="96.666666666666686" y="100" width="200" height="200"/>
@@ -8672,7 +8687,7 @@
8672
8687
  </userDefinedRuntimeAttributes>
8673
8688
  </imageView>
8674
8689
  <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="Ohk-Hy-7Yw">
8675
- <rect key="frame" x="16" y="330" width="361" height="380.66666666666674"/>
8690
+ <rect key="frame" x="16" y="330" width="361" height="317.66666666666674"/>
8676
8691
  <subviews>
8677
8692
  <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Please complete 3DS Authentication.!!" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="44r-2b-XpZ">
8678
8693
  <rect key="frame" x="0.0" y="0.0" width="361" height="21.666666666666668"/>
@@ -8680,14 +8695,14 @@
8680
8695
  <nil key="textColor"/>
8681
8696
  <nil key="highlightedColor"/>
8682
8697
  </label>
8683
- <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="https://pay.sandbox.datatrans.com/v1/start/250520111437066423" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kA9-ug-dAE">
8684
- <rect key="frame" x="0.0" y="41.666666666666686" width="361" height="43"/>
8698
+ <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="https://pay.sandbox.datatrans.com/v1/start/250520111437066423" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kA9-ug-dAE">
8699
+ <rect key="frame" x="0.0" y="31.666666666666686" width="361" height="0.0"/>
8685
8700
  <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
8686
8701
  <color key="textColor" systemColor="systemBlueColor"/>
8687
8702
  <nil key="highlightedColor"/>
8688
8703
  </label>
8689
8704
  <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="yzR-Bj-iWJ">
8690
- <rect key="frame" x="0.0" y="104.66666666666669" width="361" height="276"/>
8705
+ <rect key="frame" x="0.0" y="41.666666666666686" width="361" height="276"/>
8691
8706
  <subviews>
8692
8707
  <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="iQK-sH-tNj">
8693
8708
  <rect key="frame" x="0.0" y="0.0" width="361" height="17"/>
@@ -8707,7 +8722,7 @@
8707
8722
  </subviews>
8708
8723
  </stackView>
8709
8724
  <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="B5B-GV-fPO">
8710
- <rect key="frame" x="0.0" y="36.999999999999943" width="361" height="17"/>
8725
+ <rect key="frame" x="0.0" y="37" width="361" height="17"/>
8711
8726
  <subviews>
8712
8727
  <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Status" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hBk-dc-bQp">
8713
8728
  <rect key="frame" x="0.0" y="0.0" width="175.66666666666666" height="17"/>
@@ -8724,7 +8739,7 @@
8724
8739
  </subviews>
8725
8740
  </stackView>
8726
8741
  <stackView opaque="NO" contentMode="scaleToFill" distribution="fillProportionally" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="Z8c-rX-6Ew">
8727
- <rect key="frame" x="0.0" y="73.999999999999943" width="361" height="17"/>
8742
+ <rect key="frame" x="0.0" y="74" width="361" height="17"/>
8728
8743
  <subviews>
8729
8744
  <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Transaction Id" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="p3D-xt-AyD">
8730
8745
  <rect key="frame" x="0.0" y="0.0" width="110" height="17"/>
@@ -8846,49 +8861,74 @@
8846
8861
  </subviews>
8847
8862
  </stackView>
8848
8863
  <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cgi-Hk-KmE">
8849
- <rect key="frame" x="0.0" y="380.66666666666663" width="361" height="0.0"/>
8864
+ <rect key="frame" x="0.0" y="317.66666666666663" width="361" height="0.0"/>
8850
8865
  <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
8851
8866
  <nil key="textColor"/>
8852
8867
  <nil key="highlightedColor"/>
8853
8868
  </label>
8854
8869
  </subviews>
8855
8870
  </stackView>
8856
- <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jjf-42-5hm">
8857
- <rect key="frame" x="16" y="740.66666666666663" width="361" height="50"/>
8858
- <color key="backgroundColor" name="AccentColor"/>
8859
- <constraints>
8860
- <constraint firstAttribute="height" constant="50" id="5zM-ST-y6f"/>
8861
- </constraints>
8862
- <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
8863
- <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
8864
- <state key="normal" title="Done">
8865
- <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
8866
- </state>
8867
- <userDefinedRuntimeAttributes>
8868
- <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
8869
- <integer key="value" value="6"/>
8870
- </userDefinedRuntimeAttribute>
8871
- </userDefinedRuntimeAttributes>
8872
- <connections>
8873
- <action selector="actionBtnDone:" destination="MNa-QR-pOX" eventType="touchUpInside" id="raa-Hw-NN1"/>
8874
- </connections>
8875
- </button>
8871
+ <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="6Wx-cR-b67">
8872
+ <rect key="frame" x="16" y="677.66666666666663" width="361" height="120"/>
8873
+ <subviews>
8874
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OJr-O3-6g0">
8875
+ <rect key="frame" x="0.0" y="0.0" width="361" height="50"/>
8876
+ <color key="backgroundColor" name="AccentColor"/>
8877
+ <constraints>
8878
+ <constraint firstAttribute="height" constant="50" id="nUs-0h-8OU"/>
8879
+ </constraints>
8880
+ <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
8881
+ <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
8882
+ <state key="normal" title="Continue">
8883
+ <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
8884
+ </state>
8885
+ <userDefinedRuntimeAttributes>
8886
+ <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
8887
+ <integer key="value" value="6"/>
8888
+ </userDefinedRuntimeAttribute>
8889
+ </userDefinedRuntimeAttributes>
8890
+ <connections>
8891
+ <action selector="actionBtnContinue:" destination="MNa-QR-pOX" eventType="touchUpInside" id="LLB-ri-KnR"/>
8892
+ </connections>
8893
+ </button>
8894
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jjf-42-5hm">
8895
+ <rect key="frame" x="0.0" y="70" width="361" height="50"/>
8896
+ <color key="backgroundColor" name="AccentColor"/>
8897
+ <constraints>
8898
+ <constraint firstAttribute="height" constant="50" id="5zM-ST-y6f"/>
8899
+ </constraints>
8900
+ <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
8901
+ <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
8902
+ <state key="normal" title="Done">
8903
+ <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
8904
+ </state>
8905
+ <userDefinedRuntimeAttributes>
8906
+ <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
8907
+ <integer key="value" value="6"/>
8908
+ </userDefinedRuntimeAttribute>
8909
+ </userDefinedRuntimeAttributes>
8910
+ <connections>
8911
+ <action selector="actionBtnDone:" destination="MNa-QR-pOX" eventType="touchUpInside" id="raa-Hw-NN1"/>
8912
+ </connections>
8913
+ </button>
8914
+ </subviews>
8915
+ </stackView>
8876
8916
  </subviews>
8877
8917
  <color key="backgroundColor" systemColor="systemBackgroundColor"/>
8878
8918
  <constraints>
8879
8919
  <constraint firstItem="5Tx-1L-CH6" firstAttribute="top" secondItem="of6-7s-ppt" secondAttribute="top" constant="100" id="1dA-SQ-pRy"/>
8880
- <constraint firstItem="jjf-42-5hm" firstAttribute="leading" secondItem="of6-7s-ppt" secondAttribute="leading" constant="16" id="6do-oa-aNm"/>
8881
- <constraint firstAttribute="bottom" secondItem="jjf-42-5hm" secondAttribute="bottom" constant="50" id="B75-y8-38k"/>
8882
- <constraint firstItem="jjf-42-5hm" firstAttribute="top" secondItem="Ohk-Hy-7Yw" secondAttribute="bottom" constant="30" id="GNt-BB-7aJ"/>
8920
+ <constraint firstAttribute="trailing" secondItem="6Wx-cR-b67" secondAttribute="trailing" constant="16" id="AlF-jt-tii"/>
8921
+ <constraint firstAttribute="bottom" secondItem="6Wx-cR-b67" secondAttribute="bottom" constant="50" id="DIJ-5h-fxg"/>
8883
8922
  <constraint firstItem="Ohk-Hy-7Yw" firstAttribute="top" secondItem="5Tx-1L-CH6" secondAttribute="bottom" constant="30" id="KmH-82-CCB"/>
8884
8923
  <constraint firstItem="xHM-Ip-TLk" firstAttribute="bottom" secondItem="5Tx-1L-CH6" secondAttribute="bottom" id="NvQ-vm-Hc4"/>
8885
8924
  <constraint firstItem="Ohk-Hy-7Yw" firstAttribute="leading" secondItem="of6-7s-ppt" secondAttribute="leading" constant="16" id="U6Y-Q0-P3C"/>
8886
8925
  <constraint firstItem="xHM-Ip-TLk" firstAttribute="trailing" secondItem="5Tx-1L-CH6" secondAttribute="trailing" id="Wbt-Fa-zOh"/>
8926
+ <constraint firstItem="6Wx-cR-b67" firstAttribute="leading" secondItem="of6-7s-ppt" secondAttribute="leading" constant="16" id="XOq-fy-wuA"/>
8887
8927
  <constraint firstItem="xHM-Ip-TLk" firstAttribute="top" secondItem="5Tx-1L-CH6" secondAttribute="top" id="fPa-Z8-a19"/>
8928
+ <constraint firstItem="6Wx-cR-b67" firstAttribute="top" secondItem="Ohk-Hy-7Yw" secondAttribute="bottom" constant="30" id="h6t-BT-oFz"/>
8888
8929
  <constraint firstAttribute="trailing" secondItem="Ohk-Hy-7Yw" secondAttribute="trailing" constant="16" id="nAq-ay-Mu8"/>
8889
8930
  <constraint firstItem="xHM-Ip-TLk" firstAttribute="leading" secondItem="5Tx-1L-CH6" secondAttribute="leading" id="rLn-nz-9Qc"/>
8890
8931
  <constraint firstItem="5Tx-1L-CH6" firstAttribute="centerX" secondItem="of6-7s-ppt" secondAttribute="centerX" id="tgN-13-EBn"/>
8891
- <constraint firstAttribute="trailing" secondItem="jjf-42-5hm" secondAttribute="trailing" constant="16" id="z9V-0g-F79"/>
8892
8932
  </constraints>
8893
8933
  </view>
8894
8934
  </subviews>
@@ -8911,6 +8951,7 @@
8911
8951
  </constraints>
8912
8952
  </view>
8913
8953
  <connections>
8954
+ <outlet property="btnContinue" destination="OJr-O3-6g0" id="7yL-Uk-dp2"/>
8914
8955
  <outlet property="btnDone" destination="jjf-42-5hm" id="nbh-pe-pKj"/>
8915
8956
  <outlet property="imgViewLoading" destination="xHM-Ip-TLk" id="wqg-U3-Md1"/>
8916
8957
  <outlet property="imgViewPaymentDone" destination="5Tx-1L-CH6" id="MWJ-KK-Zsw"/>
@@ -8920,7 +8961,6 @@
8920
8961
  <outlet property="lblCompleteAuthentication" destination="44r-2b-XpZ" id="nDD-SL-1wb"/>
8921
8962
  <outlet property="lblDate" destination="MVu-L1-M41" id="Ps7-Ff-IyK"/>
8922
8963
  <outlet property="lblDateHeading" destination="bDb-6q-bEm" id="9a4-lm-bVV"/>
8923
- <outlet property="lblPaymentLink" destination="kA9-ug-dAE" id="css-ur-Ut5"/>
8924
8964
  <outlet property="lblPaymentMethodHeading" destination="84t-33-Wrw" id="gpb-ha-pdV"/>
8925
8965
  <outlet property="lblPaymentMethodValue" destination="90T-ex-9wU" id="qSy-OI-6R9"/>
8926
8966
  <outlet property="lblReferenceIdHeading" destination="SJg-Ax-BoO" id="x9t-Bn-2ab"/>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jimrising/easymerchantsdk-react-native",
3
- "version": "1.9.3",
3
+ "version": "1.9.4",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {