diff --git a/GME Remit.xcodeproj/project.pbxproj b/GME Remit.xcodeproj/project.pbxproj index 7f6af2b1..7af6385d 100644 --- a/GME Remit.xcodeproj/project.pbxproj +++ b/GME Remit.xcodeproj/project.pbxproj @@ -195,10 +195,12 @@ 540E0CA52A555F4D0023FA8B /* ChooseKycDocumentTypeInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 540E0C9C2A555F4D0023FA8B /* ChooseKycDocumentTypeInteractor.swift */; }; 542326842A1F2A2D0030052F /* SendMoneyExchangeRateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 542326822A1F2A2D0030052F /* SendMoneyExchangeRateViewController.swift */; }; 542326852A1F2A2D0030052F /* SendMoneyExchangeRate.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 542326832A1F2A2D0030052F /* SendMoneyExchangeRate.storyboard */; }; + 5443E40F2A5C7E92009E4B30 /* PageIndicatorCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5443E40E2A5C7E92009E4B30 /* PageIndicatorCollectionViewCell.swift */; }; + 54608DD22A5BF8F40011A1E1 /* TrustdockSDK_Full.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 54F7EE082A5AD62700032FC1 /* TrustdockSDK_Full.xcframework */; }; + 54608DD32A5BF8F40011A1E1 /* TrustdockSDK_Full.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 54F7EE082A5AD62700032FC1 /* TrustdockSDK_Full.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 5482FC6A2A5D3714006110AE /* RePageControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5482FC692A5D3714006110AE /* RePageControl.swift */; }; 54A3127A2A56767F002BBFB8 /* ChooseDocumentRequestModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54A312792A56767F002BBFB8 /* ChooseDocumentRequestModel.swift */; }; 54A3127C2A56965D002BBFB8 /* ChooseDocTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54A3127B2A56965D002BBFB8 /* ChooseDocTableViewCell.swift */; }; - 54F7EE092A5AD62700032FC1 /* TrustdockSDK_Full.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 54F7EE082A5AD62700032FC1 /* TrustdockSDK_Full.xcframework */; }; - 54F7EE0A2A5AD62700032FC1 /* TrustdockSDK_Full.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 54F7EE082A5AD62700032FC1 /* TrustdockSDK_Full.xcframework */; }; 5565FF1D1FE275E5002934E9 /* SanFranciscoDisplay-Heavy.otf in Resources */ = {isa = PBXBuildFile; fileRef = 5565FF071FE275E0002934E9 /* SanFranciscoDisplay-Heavy.otf */; }; 5565FF1E1FE275E5002934E9 /* SanFranciscoText-RegularItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 5565FF081FE275E0002934E9 /* SanFranciscoText-RegularItalic.otf */; }; 5565FF1F1FE275E5002934E9 /* SanFranciscoText-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 5565FF091FE275E0002934E9 /* SanFranciscoText-Regular.otf */; }; @@ -888,6 +890,7 @@ E8E3B7C229D8950500D641EC /* ItrustEkycLibrary.xcframework in Embed Frameworks */, E8E3B7C029D8950300D641EC /* emrtd_sdk.xcframework in Embed Frameworks */, E8E3B7C429D8950700D641EC /* openssl.xcframework in Embed Frameworks */, + 54608DD32A5BF8F40011A1E1 /* TrustdockSDK_Full.xcframework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -1100,6 +1103,8 @@ 540E0C9C2A555F4D0023FA8B /* ChooseKycDocumentTypeInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChooseKycDocumentTypeInteractor.swift; sourceTree = ""; }; 542326822A1F2A2D0030052F /* SendMoneyExchangeRateViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendMoneyExchangeRateViewController.swift; sourceTree = ""; }; 542326832A1F2A2D0030052F /* SendMoneyExchangeRate.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = SendMoneyExchangeRate.storyboard; sourceTree = ""; }; + 5443E40E2A5C7E92009E4B30 /* PageIndicatorCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PageIndicatorCollectionViewCell.swift; sourceTree = ""; }; + 5482FC692A5D3714006110AE /* RePageControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RePageControl.swift; sourceTree = ""; }; 54A312792A56767F002BBFB8 /* ChooseDocumentRequestModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChooseDocumentRequestModel.swift; sourceTree = ""; }; 54A3127B2A56965D002BBFB8 /* ChooseDocTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChooseDocTableViewCell.swift; sourceTree = ""; }; 54F7EE082A5AD62700032FC1 /* TrustdockSDK_Full.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = TrustdockSDK_Full.xcframework; sourceTree = ""; }; @@ -1779,7 +1784,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 54F7EE092A5AD62700032FC1 /* TrustdockSDK_Full.xcframework in Frameworks */, + 54608DD22A5BF8F40011A1E1 /* TrustdockSDK_Full.xcframework in Frameworks */, 282F6A60296483AE00E324FF /* Algorithms in Frameworks */, D99B6A4D22040E440096C1D6 /* LocalAuthentication.framework in Frameworks */, CC9B671D5DDC9BB476C2775F /* Pods_GME_Remit.framework in Frameworks */, @@ -1804,7 +1809,6 @@ buildActionMask = 2147483647; files = ( B28F83785E653C4FCC6E5788 /* Pods_GMERemittanceUITests.framework in Frameworks */, - 54F7EE0A2A5AD62700032FC1 /* TrustdockSDK_Full.xcframework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1958,6 +1962,7 @@ 244C69B629B7A01600D7B69A /* HomeAccountDetailView.swift */, 24A4501F29B831EF0049CE29 /* HomeExchangeRateView.swift */, 247222DD29C7419800732E55 /* HomeCarouselView.swift */, + 5482FC692A5D3714006110AE /* RePageControl.swift */, ); path = Custom; sourceTree = ""; @@ -2247,11 +2252,11 @@ 3DE940CE478E7407EB7DE7CE /* Frameworks */ = { isa = PBXGroup; children = ( - 54F7EE082A5AD62700032FC1 /* TrustdockSDK_Full.xcframework */, E8E3B7B929D894AD00D641EC /* ItrustEkycLibrary.xcframework */, E8E3B7BD29D894D100D641EC /* openssl.xcframework */, E8E3B7BB29D894BB00D641EC /* libjeid.xcframework */, E8E3B7B729D8949E00D641EC /* emrtd_sdk.xcframework */, + 54F7EE082A5AD62700032FC1 /* TrustdockSDK_Full.xcframework */, 28753FB2292E613800541B07 /* CoreNFC.framework */, D99B6A4C22040E440096C1D6 /* LocalAuthentication.framework */, 754C503578F5B5FFF3758D6E /* Pods_GME_Remit.framework */, @@ -6445,6 +6450,7 @@ D923EBB8215C7421008A3026 /* HomeCollectionCollectionViewCell.swift */, 24A4502129B83A710049CE29 /* HomeExchangeRateCollectionViewCell.swift */, 247222DF29C7425700732E55 /* CarouselCell.swift */, + 5443E40E2A5C7E92009E4B30 /* PageIndicatorCollectionViewCell.swift */, ); path = Cell; sourceTree = ""; @@ -8061,6 +8067,7 @@ 736A8C422277EB2A00337A50 /* BiometricNotificationServiceType.swift in Sources */, 73149F6822E5AF8000D66B26 /* LauncherScreenPresenter.swift in Sources */, 73B6D6882306402200A0CB6E /* PaymentMethodModel.swift in Sources */, + 5443E40F2A5C7E92009E4B30 /* PageIndicatorCollectionViewCell.swift in Sources */, D9D2242B22407EBA00C7313D /* ResendListModel.swift in Sources */, 89739E4524459A630016251B /* SendMoneyExchangeRateService.swift in Sources */, 73D3F3E5270C65B5006C3F97 /* CDDIViewControllerViewInterface.swift in Sources */, @@ -8158,6 +8165,7 @@ 73210DB122FBF4B000715D6C /* ObservableType+Ext.swift in Sources */, D96BD119216479E200DFE7D8 /* WalletStatementInteractor.swift in Sources */, D9031140214786EA00AD5BA9 /* ForgotPasswordInteractorIO.swift in Sources */, + 5482FC6A2A5D3714006110AE /* RePageControl.swift in Sources */, 89EA0D80243EC1C5003ACCC8 /* ChangePersonalInformationModuleInterface.swift in Sources */, 7EDBFBDC24B2C5DA00AD5D4D /* RedeemCashPickUpInteractorIO.swift in Sources */, D96A4FD821460B4A00CFD507 /* SplashScreenInteractorIO.swift in Sources */, @@ -9019,7 +9027,7 @@ CODE_SIGN_ENTITLEMENTS = "GME Remit.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 4; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = 68KRG7GPAV; ENABLE_BITCODE = NO; @@ -9065,12 +9073,11 @@ CODE_SIGN_ENTITLEMENTS = "GME Remit/GME RemitRelease.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 4; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = 68KRG7GPAV; ENABLE_BITCODE = NO; EXCLUDED_ARCHS = ""; - "EXCLUDED_ARCHS[sdk=*]" = arm64; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/GME\\ Remit/ThirdParty/virtualKeyboard/mtk_module", diff --git a/GME Remit/Modules/BeneficiaryDetail/User Interface/View/BeneficiaryDetail.storyboard b/GME Remit/Modules/BeneficiaryDetail/User Interface/View/BeneficiaryDetail.storyboard index f822eae6..e4846742 100644 --- a/GME Remit/Modules/BeneficiaryDetail/User Interface/View/BeneficiaryDetail.storyboard +++ b/GME Remit/Modules/BeneficiaryDetail/User Interface/View/BeneficiaryDetail.storyboard @@ -158,7 +158,9 @@ - + + + @@ -205,8 +207,8 @@ - + diff --git a/GME Remit/Modules/BeneficiaryDetail/User Interface/View/BeneficiaryDetailViewController.swift b/GME Remit/Modules/BeneficiaryDetail/User Interface/View/BeneficiaryDetailViewController.swift index dc83e9e1..22accef6 100644 --- a/GME Remit/Modules/BeneficiaryDetail/User Interface/View/BeneficiaryDetailViewController.swift +++ b/GME Remit/Modules/BeneficiaryDetail/User Interface/View/BeneficiaryDetailViewController.swift @@ -107,7 +107,9 @@ class BeneficiaryDetailViewController: UIViewController { tableView.dataSource = self tableView.register(UINib(nibName: BeneficiaryDetailHeaderView.identifier, bundle: nil), forHeaderFooterViewReuseIdentifier: BeneficiaryDetailHeaderView.identifier) continueButton.set(cornerRadius: 10) - continueButton.setTitle("continue_text".localized(), for: .normal) + continueButton.titleLabel?.font = .sanfrancisco(.semibold, size: 20) + + continueButton.setTitle("continue_text".localized() + " ", for: .normal) //updateButton.set(cornerRadius: 10) //updateButton.set(borderWidth: 2, of: .init(hex: "#2E89FF")) } diff --git a/GME Remit/Modules/ExchangeRates/User Interface/View/ExchangeRatesViewController.swift b/GME Remit/Modules/ExchangeRates/User Interface/View/ExchangeRatesViewController.swift index 54a2d962..20fade69 100644 --- a/GME Remit/Modules/ExchangeRates/User Interface/View/ExchangeRatesViewController.swift +++ b/GME Remit/Modules/ExchangeRates/User Interface/View/ExchangeRatesViewController.swift @@ -99,6 +99,9 @@ class ExchangeRatesViewController: UIViewController { var calcBy = "" + + + private var exchangeRateModels: [ExchangeRateModel]? { didSet { let countryCode = GMEDB.shared.user.string(.countryCode) diff --git a/GME Remit/Modules/Home/User Interface/View/Cell/PageIndicatorCollectionViewCell.swift b/GME Remit/Modules/Home/User Interface/View/Cell/PageIndicatorCollectionViewCell.swift new file mode 100644 index 00000000..a81da72b --- /dev/null +++ b/GME Remit/Modules/Home/User Interface/View/Cell/PageIndicatorCollectionViewCell.swift @@ -0,0 +1,53 @@ +// + +import UIKit + +class PageIndicatorCollectionViewCell: UICollectionViewCell { + + static let identifier: String = "CarouselCollectionCellID" + + let pageControl: CustomPageControl = { + let view = CustomPageControl(frame: .zero) + view.backgroundColor = .themeWhite + view.currentPageIndicatorTintColor = .theme2E89FF + view.pageIndicatorTintColor = .themeGray2 + view.translatesAutoresizingMaskIntoConstraints = false + return view + }() + + var count: Int = 0 { + didSet { + pageControl.numberOfPages = count + setup() + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + + + func setup(){ + let _pageControl = pageControl + self.backgroundColor = .themeWhite + self.addSubview(_pageControl) + _pageControl.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true + _pageControl.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0).isActive = true + _pageControl.heightAnchor.constraint(equalToConstant: 30).isActive = true + } + + @objc open dynamic var currentIndex: Int = 0 { + didSet { + updateAccessoryViews() + } + } + + + func updateAccessoryViews() { + pageControl.currentPage = currentIndex + + } +} diff --git a/GME Remit/Modules/Home/User Interface/View/Custom/HomeCarouselView.swift b/GME Remit/Modules/Home/User Interface/View/Custom/HomeCarouselView.swift index 0eebf21f..7aebee33 100644 --- a/GME Remit/Modules/Home/User Interface/View/Custom/HomeCarouselView.swift +++ b/GME Remit/Modules/Home/User Interface/View/Custom/HomeCarouselView.swift @@ -26,7 +26,7 @@ class HomeCarouselView: UIView { private let pageControl: CustomPageControl = { let view = CustomPageControl(frame: .zero) view.backgroundColor = .themeWhite - view.currentPageIndicatorTintColor = .themeBlack + view.currentPageIndicatorTintColor = .theme2E89FF view.pageIndicatorTintColor = .themeGray2 view.translatesAutoresizingMaskIntoConstraints = false return view diff --git a/GME Remit/Modules/Home/User Interface/View/Custom/HomeExchangeRateView.swift b/GME Remit/Modules/Home/User Interface/View/Custom/HomeExchangeRateView.swift index aed05b60..20c5466a 100644 --- a/GME Remit/Modules/Home/User Interface/View/Custom/HomeExchangeRateView.swift +++ b/GME Remit/Modules/Home/User Interface/View/Custom/HomeExchangeRateView.swift @@ -24,7 +24,25 @@ class HomeExchangeRateView: UIView { view.translatesAutoresizingMaskIntoConstraints = false return view }() + + + var defaultPageControl: UIPageControl = { + let control = UIPageControl(frame: .zero) + control.pageIndicatorTintColor = .themeGray2 + control.currentPageIndicatorTintColor = .theme2E89FF + control.translatesAutoresizingMaskIntoConstraints = false + return control + }() + + var pageControl: ReCustomPageControl = { + let view = ReCustomPageControl(frame: .zero) + view.backgroundColor = .themeWhite + view.currentPageIndicatorTintColor = .theme2E89FF + view.pageIndicatorTintColor = .themeGray2 + view.translatesAutoresizingMaskIntoConstraints = false + return view + }() private let collectionView: UICollectionView = { let flowlayout = UICollectionViewFlowLayout() @@ -37,6 +55,7 @@ class HomeExchangeRateView: UIView { colView.register(HomeExchangeRateCollectionViewCell.self, forCellWithReuseIdentifier: "HomeExchangeRateCollectionViewCell") + colView.register(PageIndicatorCollectionViewCell.self, forCellWithReuseIdentifier: "PageIndicatorCollectionViewCell") colView.backgroundColor = .white colView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 8, right: 0) colView.showsHorizontalScrollIndicator = false @@ -101,15 +120,44 @@ class HomeExchangeRateView: UIView { private var exchangeRateModels: [ExchangeRateModel]? private var selectedExchangeRateModel: ExchangeRateModel? { didSet { + self.selectedPaymentModeIndex = 0 + self.defaultPageControl.isHidden = (selectedExchangeRateModel?.availableServices?.count ?? 0) <= 2 selectedExchangeRateModel(selectedExchangeRateModel) +// updateAccessoryViews() + } } var calcBy = "" - var selectedPaymentModeIndex = 0 + var selectedPaymentModeIndex = 0 { + didSet { + updateAccessoryViews() + } + } + var openCountryList: (() -> ())? var tappedCalculateExchangeRate: ((ExchangeRateRequestModel) ->())? var tappedContinueButton: (() ->())? + +// @objc open dynamic var currentIndex: Int = 0 { +// didSet { +// DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { +// self.updateAccessoryViews() +// } +// } +// } + + + func updateAccessoryViews() { + + self.defaultPageControl.numberOfPages = self.selectedExchangeRateModel?.availableServices?.count ?? 0 + defaultPageControl.currentPage = selectedPaymentModeIndex + +// self.defaultPageControl.setNeedsLayout() +// self.defaultPageControl.layoutIfNeeded() + + } + override init(frame: CGRect) { super.init(frame: .zero) setup() @@ -119,6 +167,12 @@ class HomeExchangeRateView: UIView { fatalError("init(coder:) has not been implemented") } +// override open func layoutSubviews() { +// super.layoutSubviews() +// selectedPaymentModeIndex = 0 +// +// } + func setup() { uiSetup() uiPropertiesSetup() @@ -151,13 +205,22 @@ class HomeExchangeRateView: UIView { guranteedView.spacing = 3 guranteedView.distribution = .fill + + containerView.addSubviews(collectionView, + defaultPageControl, sendMoneyView, recivedMoneyView, transferFeeIncluded, guranteedView, continueButton) + +// +// pageControl.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true +// pageControl.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0).isActive = true +// pageControl.heightAnchor.constraint(equalToConstant: 30).isActive = true + collectionView.anchor( top: containerView.topAnchor, @@ -169,9 +232,21 @@ class HomeExchangeRateView: UIView { height: 30 ) + defaultPageControl.anchor(top: collectionView.bottomAnchor, + paddingTop: 0, + left: containerView.leadingAnchor, + paddingLeft: 0, + right: containerView.trailingAnchor, + paddingRight: 0, + height: 22 + //(selectedExchangeRateModel?.availableServices?.count ?? 0) > 0 ? 30 : 0 + ) + +// collectionView.bottomAnchor.constraint(equalTo: pageControl.topAnchor, constant: 0).isActive = true + sendMoneyView.anchor( - top: collectionView.bottomAnchor, - paddingTop: 16, + top: defaultPageControl.bottomAnchor, + paddingTop: 0, left: containerView.leadingAnchor, paddingLeft: 0, right: containerView.trailingAnchor, @@ -229,10 +304,11 @@ class HomeExchangeRateView: UIView { } func uiPropertiesSetup() { + transferFeeIncludedText.text = "" guranteedRateText.text = "" - continueButton.setTitle("send_money_title_text".localized(), for: .normal) - continueButton.setImage(UIImage(systemName: "arrow.backward"), for: .normal) + continueButton.setTitle("send_money_title_text".localized() + " ", for: .normal) + continueButton.setImage(UIImage(named: "ic_arrow_right_white"), for: .normal) continueButton.semanticContentAttribute = .forceRightToLeft continueButton.backgroundColor = .theme2E89FF continueButton.titleLabel?.font = .sanfrancisco(.semibold, size: 20) @@ -277,7 +353,6 @@ class HomeExchangeRateView: UIView { recivedMoneyView.didSelectCountry = { [weak self] in self?.sendMoneyView.resignFirstResponder() self?.recivedMoneyView.resignFirstResponder() - self?.selectedPaymentModeIndex = 0 self?.openCountryList?() } @@ -366,6 +441,8 @@ class HomeExchangeRateView: UIView { calculateExchangeRate() DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { self.collectionView.reloadData() +// self.selectedPaymentModeIndex = self.selectedPaymentModeIndex + } } @@ -398,7 +475,9 @@ extension HomeExchangeRateView: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return self.selectedExchangeRateModel?.availableServices?.count ?? 0 } @@ -406,24 +485,26 @@ extension HomeExchangeRateView: UICollectionViewDelegate, _ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath ) -> UICollectionViewCell { - let service = self.selectedExchangeRateModel?.availableServices?.elementAt(index: indexPath.row) - guard let index = PaymentMode.init(rawValue: service?.id ?? "") else { - return UICollectionViewCell() - } - - switch index { - case .bankDeposite: - return configureBankDepositeCell(collectionView: collectionView, indexPath: indexPath) - case .cashDelivery: - return configureCashDeliveryCell(collectionView: collectionView, indexPath: indexPath) - case .homeDelivery: - return configureHomeDeliveryCell(collectionView: collectionView, indexPath: indexPath) - case .mobileWallet: - return configureWalletDeliveryCell(collectionView: collectionView, indexPath: indexPath) - case .cardPayment: - return configureCardPaymentCell(collectionView: collectionView, indexPath: indexPath) - } + + let service = self.selectedExchangeRateModel?.availableServices?.elementAt(index: indexPath.row) + guard let index = PaymentMode.init(rawValue: service?.id ?? "") else { + return UICollectionViewCell() + } + + switch index { + case .bankDeposite: + return configureBankDepositeCell(collectionView: collectionView, indexPath: indexPath) + case .cashDelivery: + return configureCashDeliveryCell(collectionView: collectionView, indexPath: indexPath) + case .homeDelivery: + return configureHomeDeliveryCell(collectionView: collectionView, indexPath: indexPath) + case .mobileWallet: + return configureWalletDeliveryCell(collectionView: collectionView, indexPath: indexPath) + case .cardPayment: + return configureCardPaymentCell(collectionView: collectionView, indexPath: indexPath) + } + } @@ -516,9 +597,12 @@ extension HomeExchangeRateView: UICollectionViewDelegate, } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { - let element = self.selectedExchangeRateModel?.availableServices?.elementAt( - index: indexPath.row)?.subtitle ?? "" - return CGSize(width: element.size(withAttributes: [NSAttributedString.Key.font : UIFont.sanfrancisco(.semibold, size: 16)]).width + 25, height: collectionView.frame.height) + + let element = self.selectedExchangeRateModel?.availableServices?.elementAt( + index: indexPath.row)?.subtitle ?? "" + return CGSize(width: element.size(withAttributes: [NSAttributedString.Key.font : UIFont.sanfrancisco(.semibold, size: 16)]).width + 25, height: collectionView.frame.height) + + } @@ -535,9 +619,10 @@ extension HomeExchangeRateView: UICollectionViewDelegate, // } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - self.selectedPaymentModeIndex = indexPath.row - self.collectionView.reloadData() - self.calculateExchangeRate() + + self.selectedPaymentModeIndex = indexPath.row + self.collectionView.reloadData() + self.calculateExchangeRate() } } diff --git a/GME Remit/Modules/Home/User Interface/View/Custom/RePageControl.swift b/GME Remit/Modules/Home/User Interface/View/Custom/RePageControl.swift new file mode 100644 index 00000000..d7eaf0ef --- /dev/null +++ b/GME Remit/Modules/Home/User Interface/View/Custom/RePageControl.swift @@ -0,0 +1,137 @@ +// + +import Foundation +import UIKit + +@IBDesignable +class ReCustomPageControl: UIControl { + //MARK:- Properties + + private var numberOfDots = [UIView]() { + didSet{ + if numberOfDots.count == numberOfPages { + setupViews() + } + } + } + + @IBInspectable var numberOfPages: Int = 0 { + didSet{ + + for tag in 0 ..< numberOfPages { + let dot = getDotView() + dot.tag = tag + dot.backgroundColor = pageIndicatorTintColor + self.numberOfDots.append(dot) + } + } + } + + var currentPage: Int = 0 { + didSet{ + onPageControlSwipe() + } + } + + @IBInspectable var pageIndicatorTintColor: UIColor? = .blue + @IBInspectable var currentPageIndicatorTintColor: UIColor? = .green + + private lazy var stackView = UIStackView.init(frame: self.bounds) + private lazy var constantSpace = ((stackView.spacing) * CGFloat(numberOfPages - 1) + ((self.bounds.height * 0.45) * CGFloat(numberOfPages)) - self.bounds.width) + + + override var bounds: CGRect { + didSet{ + self.numberOfDots.forEach { (dot) in + self.setupDotAppearance(dot: dot) + } + } + } + + //MARK:- Intialisers + convenience init() { + self.init(frame: .zero) + } + + func refreshPagerView() { + numberOfDots = [] + + + } + + + init(withNoOfPages pages: Int) { + self.numberOfPages = pages + self.currentPage = 0 + super.init(frame: .zero) + setupViews() + } + + override init(frame: CGRect) { + super.init(frame: frame) + setupViews() + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + + } + private func setupViews() { + + self.numberOfDots.forEach { (dot) in + self.stackView.addArrangedSubview(dot) + } + + stackView.alignment = .center + stackView.axis = .horizontal + stackView.distribution = .fillEqually + stackView.spacing = 8 + stackView.translatesAutoresizingMaskIntoConstraints = false + self.addSubview(stackView) + + self.addConstraints([ + stackView.centerXAnchor.constraint(equalTo: self.centerXAnchor), + stackView.centerYAnchor.constraint(equalTo: self.centerYAnchor), + stackView.heightAnchor.constraint(equalTo: self.heightAnchor), + ]) + + self.numberOfDots.forEach { dot in + self.addConstraints([ + dot.centerYAnchor.constraint(equalTo: self.stackView.centerYAnchor), + dot.widthAnchor.constraint(equalToConstant: 7), + dot.heightAnchor.constraint(equalToConstant: 7), + ]) + } + self.numberOfDots.forEach { dot in + dot.layer.cornerRadius = dot.bounds.height / 2 + } + } + + @objc private func onPageControlSwipe() { + _ = numberOfDots.map { (dot) in + setupDotAppearance(dot: dot) + if dot.tag == currentPage { + UIView.animate(withDuration: 0.2, animations: { + dot.layer.cornerRadius = dot.bounds.height / 5 + dot.transform = CGAffineTransform.init(scaleX: 2, y: 1) + dot.backgroundColor = self.currentPageIndicatorTintColor + }) + } + } + } + + //MARK: Helper methods... + private func getDotView() -> UIView { + let dot = UIView() + dot.translatesAutoresizingMaskIntoConstraints = false + self.setupDotAppearance(dot: dot) + return dot + } + + private func setupDotAppearance(dot: UIView) { + dot.transform = .identity + dot.layer.cornerRadius = dot.bounds.height / 2 + dot.layer.masksToBounds = true + dot.backgroundColor = pageIndicatorTintColor + } +} diff --git a/GME Remit/Modules/Home/User Interface/View/HomeViewController.swift b/GME Remit/Modules/Home/User Interface/View/HomeViewController.swift index 11a4b28c..8478daee 100644 --- a/GME Remit/Modules/Home/User Interface/View/HomeViewController.swift +++ b/GME Remit/Modules/Home/User Interface/View/HomeViewController.swift @@ -939,6 +939,7 @@ extension HomeViewController: HomeViewInterface { self.user = model.loginResponse self.exchangeRateModels = rates self.exchangeRateView.set(rates) + self.exchangeRateView.updateAccessoryViews() } func show(error: String) { @@ -1167,6 +1168,7 @@ extension HomeViewController: TablePresenterDelegate { if let exchangeRateModel = model as? ExchangeRateModel { self.exchangeRateModel = exchangeRateModel self.exchangeRateView.set(exchangeRateModel) + self.exchangeRateView.updateAccessoryViews() //reload(0, Sections.collection.rawValue) } } diff --git a/GME Remit/Modules/Main/User Interface/View/MainViewController.swift b/GME Remit/Modules/Main/User Interface/View/MainViewController.swift index cd24de34..94c31a1a 100644 --- a/GME Remit/Modules/Main/User Interface/View/MainViewController.swift +++ b/GME Remit/Modules/Main/User Interface/View/MainViewController.swift @@ -71,8 +71,8 @@ class MainViewController: UITabBarController { } private func setupLayout() { - customTabBar.widthAnchor.constraint(equalToConstant: 168).isActive = true - customTabBar.heightAnchor.constraint(equalToConstant: 48).isActive = true + customTabBar.widthAnchor.constraint(equalToConstant: 220).isActive = true + customTabBar.heightAnchor.constraint(equalToConstant: 58).isActive = true customTabBar.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true customTabBar.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -8).isActive = true } diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/ChooseKycDocumentType/View/ChooseDocTableViewCell.swift b/GME Remit/Modules/RegisterModules/UserAuthentication/ChooseKycDocumentType/View/ChooseDocTableViewCell.swift index c8b27189..93a97b8c 100644 --- a/GME Remit/Modules/RegisterModules/UserAuthentication/ChooseKycDocumentType/View/ChooseDocTableViewCell.swift +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/ChooseKycDocumentType/View/ChooseDocTableViewCell.swift @@ -28,19 +28,19 @@ class ChooseDocTableViewCell: UITableViewCell { } private func setUp() { + containerView.backgroundColor = .lightBlueColor + containerView.set(cornerRadius: 10) - containerView.backgroundColor = .white selectedButton.setTitle("", for: .normal) } func isSelected(_ status:Bool) { if status{ - containerView.backgroundColor = .lightBlueColor selectedButton.tintColor = .themeRed selectedButton.setImage(UIImage(systemName: "largecircle.fill.circle"), for: .normal) } else { - containerView.backgroundColor = .white +// containerView.backgroundColor = .white selectedButton.tintColor = .themeGray1 selectedButton.setImage(UIImage(systemName: "circle"), for: .normal) diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/KYCVerifyStep1/User Interface/View/KYCVerifyStep1.storyboard b/GME Remit/Modules/RegisterModules/UserAuthentication/KYCVerifyStep1/User Interface/View/KYCVerifyStep1.storyboard index 0b9a1490..4d722942 100644 --- a/GME Remit/Modules/RegisterModules/UserAuthentication/KYCVerifyStep1/User Interface/View/KYCVerifyStep1.storyboard +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/KYCVerifyStep1/User Interface/View/KYCVerifyStep1.storyboard @@ -44,7 +44,7 @@ - + @@ -69,28 +69,28 @@ - + - + - + - + - + - + - - + + diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/KYCVerifyStep1/User Interface/View/KYCVerifyStep1ViewController.swift b/GME Remit/Modules/RegisterModules/UserAuthentication/KYCVerifyStep1/User Interface/View/KYCVerifyStep1ViewController.swift index ec54bc57..f87ca639 100644 --- a/GME Remit/Modules/RegisterModules/UserAuthentication/KYCVerifyStep1/User Interface/View/KYCVerifyStep1ViewController.swift +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/KYCVerifyStep1/User Interface/View/KYCVerifyStep1ViewController.swift @@ -70,6 +70,7 @@ class KYCVerifyStep1ViewController: UIViewController { private var isSelected = false private var isForeigner = true + private var isFromSDKError = false; @IBOutlet weak var chooseDocStackView: UIStackView! @IBOutlet weak var chooseDocTableView: UITableView! @@ -157,12 +158,15 @@ class KYCVerifyStep1ViewController: UIViewController { self.chooseDocStackView.isHidden = self.step != .choose self.personalInformationStack.isHidden = self.step != .first - if self.redirectToKYC != "EKYC" { + let selectedDocConfig = getKycDocFromPref() + + if ((selectedDocConfig?.doc_type?.lowercased() == "mkyc")) { self.uploadPictureStack.isHidden = self.step != .upload } else { self.uploadPictureStack.isHidden = true if self.step == .upload { if trustDockCalled == false { +// initializeSDK() self.openSDK() } } @@ -825,7 +829,7 @@ extension KYCVerifyStep1ViewController { output.docSaveSuccess .drive(onNext: {[weak self] (message) in guard let self = self else {return} - self.delegate?.newRegister(self, isFromNo: false, currentStep: .choose, nextStep: .first) + self.initializeSDK() }).disposed(by: disposeBag) output.gpsAddress.drive(onNext: {[weak self] in @@ -962,7 +966,7 @@ extension KYCVerifyStep1ViewController { } private func setMultiLanguages() { - chooseDocSaveButton.setTitle("save_and_next_text".localized(), for: .normal) + chooseDocSaveButton.setTitle("next_text".localized(), for: .normal) self.personalInformationLabel.text = "personal_information_text".localized() self.employerNameTxtField.placeholder = "employerName_text".localized() @@ -1006,12 +1010,12 @@ extension KYCVerifyStep1ViewController { //MARK: Saving Selected doc in Pref because Task was urgent and it was time consuming to work on this architecture extension KYCVerifyStep1ViewController { - private func saveKycDocOnPref() { - let _selected = docType.elementAt(index: selectedIndex) + private func saveKycDocOnPref(_selected: DocumentOptions?) { +// let _selected = docType.elementAt(index: selectedIndex) let jsonEncoder = JSONEncoder() do{ - let jsonData = try jsonEncoder.encode(_selected) + let jsonData = try jsonEncoder.encode(_selected ?? docType.elementAt(index: selectedIndex)) let json = String(data: jsonData, encoding: String.Encoding.utf8) @@ -1079,6 +1083,42 @@ extension KYCVerifyStep1ViewController { return nil } + private func saveTrustDocResposeOnPref() { + + let jsonEncoder = JSONEncoder() + do{ + let jsonData = try jsonEncoder.encode(trustDockResponse) + + let json = String(data: jsonData, encoding: String.Encoding.utf8) + + UserDefaults.standard.setValue(json, forKey: "TrustDocConfig") + } + catch{ + fatalError("Unable To Convert in Json") + } + + + + + } + + private func getTrustDocResposeFromPref() -> TrustDockResponse? { + + + if let selectedDoc = UserDefaults.standard.value(forKey: "TrustDocConfig") as? AnyObject, (selectedDoc != nil) { + let jsonDecoder = JSONDecoder() + do{ + let convertedData = try jsonDecoder.decode(TrustDockResponse.self, from: (selectedDoc).data(using: String.Encoding.utf8.rawValue)!) + return convertedData + }catch{ + print("Error") + } + + } + + return nil + } + } // MARK: CLLocationManagerDelegate @@ -1218,7 +1258,7 @@ extension KYCVerifyStep1ViewController: UITableViewDataSource, UITableViewDelega // self.selectedIndex = indexPath.row onDocSelPub.onNext(selectedOption!) - saveKycDocOnPref() + saveKycDocOnPref(_selected: selectedOption) self.chooseDocTableView.reloadSections(IndexSet(integer: 0), with: .none) } @@ -1254,7 +1294,11 @@ extension KYCVerifyStep1ViewController: WKNavigationDelegate, UIScrollViewDelega } extension KYCVerifyStep1ViewController { func openSDK() { - if self.trustDockResponse?.messgae?.lowercased() == "accepted" { + let trustDocResponse = getTrustDocResposeFromPref() + + if trustDocResponse?.messgae?.lowercased() == "accepted" { + + DispatchQueue.main.async { [self] in var trustDocPlans: [TrustdockPlan] = [] @@ -1276,7 +1320,7 @@ extension KYCVerifyStep1ViewController { // let withoutNFC = [TrustdockPlan(id:"039cfef5-0248-44c4-8464-25baef241f05")] - let params = TrustdockVerificationParams(publicId: self.trustDockResponse?.publicId ?? "", + let params = TrustdockVerificationParams(publicId: trustDocResponse?.publicId ?? "", nativeAppSdkToken: selectedDocConfig?.sdk_Token ?? "", plans: trustDocPlans) TrustdockVerificationSDK.start(parentVC: self, params: params) @@ -1301,43 +1345,62 @@ extension KYCVerifyStep1ViewController { } fileprivate func initializeSDK() { - self.showProgressHud(loadingColor: .gray) - let requestParams = NSMutableDictionary() - let selectedDocConfig = getKycDocConfigFromPref() + let selectedDocConfig = getKycDocFromPref() - - let url = URL(string: selectedDocConfig?.url ?? "")! - - var request = URLRequest(url: url) - request.httpMethod = "POST" - request.httpBody = try? JSONSerialization.data(withJSONObject: requestParams, options: .prettyPrinted) - - request.addValue("application/json", forHTTPHeaderField: "Content-Type") - request.addValue("Bearer \(selectedDocConfig?.authorization_key ?? "")", forHTTPHeaderField: "Authorization") - - let session = URLSession.shared.dataTask(with: request) {[unowned self] (data, response, error) in - guard let data = data, error == nil else { - let errorMessage = error?.localizedDescription ?? TrustDockSDKError.unknownError.localizedDescription - self.hideProgressHud() - return - } - do { - let jsonData = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] - - let statusCode = (response as! HTTPURLResponse).statusCode - - let publicId = jsonData?["public_id"] as? String - let id = jsonData?["id"] as? String - let successMessage = (jsonData?["state"] as? String) - self.trustDockResponse = TrustDockResponse(id: id ?? "", publicID: publicId ?? "", message: successMessage ?? "", statusCode: statusCode) - self.hideProgressHud() - self.openSDK() - } catch { - self.hideProgressHud() + if ((selectedDocConfig?.doc_type?.lowercased() != "mkyc")) { + self.showProgressHud(loadingColor: .gray) + let requestParams = NSMutableDictionary() + + let selectedDocConfig = getKycDocConfigFromPref() + + + let url = URL(string: selectedDocConfig?.url ?? "")! + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.httpBody = try? JSONSerialization.data(withJSONObject: requestParams, options: .prettyPrinted) + + request.addValue("application/json", forHTTPHeaderField: "Content-Type") + request.addValue("Bearer \(selectedDocConfig?.authorization_key ?? "")", forHTTPHeaderField: "Authorization") + + let session = URLSession.shared.dataTask(with: request) {[unowned self] (data, response, error) in + guard let data = data, error == nil else { + let errorMessage = error?.localizedDescription ?? TrustDockSDKError.unknownError.localizedDescription + self.hideProgressHud() + return + } + do { + let jsonData = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] + + let statusCode = (response as! HTTPURLResponse).statusCode + + let publicId = jsonData?["public_id"] as? String + let id = jsonData?["id"] as? String + let successMessage = (jsonData?["state"] as? String) + self.trustDockResponse = TrustDockResponse(id: id ?? "", publicID: publicId ?? "", message: successMessage ?? "", statusCode: statusCode) + self.saveTrustDocResposeOnPref() + self.hideProgressHud() + if isFromSDKError { + self.openSDK() + + } + else { + self.delegate?.newRegister(self, isFromNo: false, currentStep: .choose, nextStep: .first) + } + + + } catch { + self.hideProgressHud() + } } + session.resume() } - session.resume() + else { + self.delegate?.newRegister(self, isFromNo: false, currentStep: .choose, nextStep: .first) + + } + } } extension KYCVerifyStep1ViewController: TrustdockVerificationDelegate { @@ -1368,6 +1431,7 @@ extension KYCVerifyStep1ViewController: TrustdockVerificationDelegate { message: "EKYC process was unsuccessful. Click Retry to try again. Click No to select manual KYC process.", rightButtonTitle: "RETRY", leftButtonTitle: "NO", rightButtonAction: { + self.isFromSDKError = true self.initializeSDK() }, leftButtonAction: { self.presenter.callCustomerInfoAgreement(flag: false) @@ -1380,6 +1444,7 @@ extension KYCVerifyStep1ViewController: TrustdockVerificationDelegate { message: "EKYC process using NFC was unsuccessful. Click Retry to try again. Click No to select Non-NFC process.", rightButtonTitle: "RETRY", leftButtonTitle: "NO", rightButtonAction: { + self.isFromSDKError = true self.initializeSDK() }, leftButtonAction: { //open sdk without nfc @@ -1464,7 +1529,7 @@ extension TrustdockVerificationError { } } } -class TrustDockResponse { +class TrustDockResponse: Codable { var id: String? var publicId: String? var messgae: String? diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/KYCVerifyStep1/User Interface/Wireframe/KYCVerifyStep1Wireframe.swift b/GME Remit/Modules/RegisterModules/UserAuthentication/KYCVerifyStep1/User Interface/Wireframe/KYCVerifyStep1Wireframe.swift index ba88cd82..f3024319 100644 --- a/GME Remit/Modules/RegisterModules/UserAuthentication/KYCVerifyStep1/User Interface/Wireframe/KYCVerifyStep1Wireframe.swift +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/KYCVerifyStep1/User Interface/Wireframe/KYCVerifyStep1Wireframe.swift @@ -47,7 +47,7 @@ extension KYCVerifyStep1Wireframe: KYCVerifyStep1WireframeInput { return viewController } - func getMainView(with delegate: NewRegisterDelegate?, step: NewRegisterViewController.Step = .first, customerType: String, trustdockModel: TrustDockResponse, redirectTo: String, useNFC: String, fullName: String, dob: String) -> UIViewController { + func getMainView(with delegate: NewRegisterDelegate?, step: NewRegisterViewController.Step = .first, customerType: String, trustdockModel: TrustDockResponse?, redirectTo: String, useNFC: String, fullName: String, dob: String) -> UIViewController { self.delegate = delegate self.customerType = customerType self.trustdockModel = trustdockModel diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/User Interface/Wireframe/NewRegisterWireframe.swift b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/User Interface/Wireframe/NewRegisterWireframe.swift index e6eed8db..d928efaf 100644 --- a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/User Interface/Wireframe/NewRegisterWireframe.swift +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/User Interface/Wireframe/NewRegisterWireframe.swift @@ -45,18 +45,18 @@ extension NewRegisterWireframe: NewRegisterWireframeInput { step3VC = ExistingUserKycWireframe().getMainView(with: self, step: .terms) // stepChooseDocVC = KYCVerifyStep1Wireframe().getMainView(with: self, step: .choose, customerType: self.customerType, trustdockModel: trustDockModel, redirectTo: redirectTo, useNFC: useNFC, fullName: fullName, dob: dob) } else { - if let trustDockModel = trustDockModel { +// if let trustDockModel = trustDockModel { step1VC = KYCVerifyStep1Wireframe().getMainView(with: self, step: .first, customerType: self.customerType, trustdockModel: trustDockModel, redirectTo: redirectTo, useNFC: useNFC, fullName: fullName, dob: dob) step2VC = KYCVerifyStep1Wireframe().getMainView(with: self, step: .upload, customerType: self.customerType, trustdockModel: trustDockModel, redirectTo: redirectTo, useNFC: useNFC, fullName: fullName, dob: dob) step3VC = KYCVerifyStep1Wireframe().getMainView(with: self, step: .terms, customerType: self.customerType, trustdockModel: trustDockModel, redirectTo: redirectTo, useNFC: useNFC, fullName: fullName, dob: dob) stepChooseDocVC = KYCVerifyStep1Wireframe().getMainView(with: self, step: .choose, customerType: self.customerType, trustdockModel: trustDockModel, redirectTo: redirectTo, useNFC: useNFC, fullName: fullName, dob: dob) - } else { - stepChooseDocVC = KYCVerifyStep1Wireframe().getMainViewWithoutTrustDock(with: self, step: .first, customerType: self.customerType, redirectTo: self.redirectTo, fullName: fullName, dob: dob) - step1VC = KYCVerifyStep1Wireframe().getMainViewWithoutTrustDock(with: self, step: .first, customerType: self.customerType, redirectTo: self.redirectTo, fullName: fullName, dob: dob) - step2VC = KYCVerifyStep1Wireframe().getMainViewWithoutTrustDock(with: self, step: .upload, customerType: self.customerType, redirectTo: self.redirectTo, fullName: fullName, dob: dob) - step3VC = KYCVerifyStep1Wireframe().getMainViewWithoutTrustDock(with: self, step: .terms, customerType: self.customerType, redirectTo: self.redirectTo, fullName: fullName, dob: dob) - } +// } else { +// stepChooseDocVC = KYCVerifyStep1Wireframe().getMainViewWithoutTrustDock(with: self, step: .choose, customerType: self.customerType, redirectTo: self.redirectTo, fullName: fullName, dob: dob) +// step1VC = KYCVerifyStep1Wireframe().getMainViewWithoutTrustDock(with: self, step: .first, customerType: self.customerType, redirectTo: self.redirectTo, fullName: fullName, dob: dob) +// step2VC = KYCVerifyStep1Wireframe().getMainViewWithoutTrustDock(with: self, step: .upload, customerType: self.customerType, redirectTo: self.redirectTo, fullName: fullName, dob: dob) +// step3VC = KYCVerifyStep1Wireframe().getMainViewWithoutTrustDock(with: self, step: .terms, customerType: self.customerType, redirectTo: self.redirectTo, fullName: fullName, dob: dob) +// } } let service = NewRegisterService() diff --git a/GME Remit/Supported Files/Assets.xcassets/.DS_Store b/GME Remit/Supported Files/Assets.xcassets/.DS_Store index 2b8a6c91..a50fa43e 100644 Binary files a/GME Remit/Supported Files/Assets.xcassets/.DS_Store and b/GME Remit/Supported Files/Assets.xcassets/.DS_Store differ diff --git a/GME Remit/Supported Files/Assets.xcassets/ic_arrow_right_white.imageset/Contents.json b/GME Remit/Supported Files/Assets.xcassets/ic_arrow_right_white.imageset/Contents.json new file mode 100644 index 00000000..23a0f39b --- /dev/null +++ b/GME Remit/Supported Files/Assets.xcassets/ic_arrow_right_white.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "long-arrow-pointing-to-the-right.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GME Remit/Supported Files/Assets.xcassets/ic_arrow_right_white.imageset/long-arrow-pointing-to-the-right.png b/GME Remit/Supported Files/Assets.xcassets/ic_arrow_right_white.imageset/long-arrow-pointing-to-the-right.png new file mode 100644 index 00000000..7423dfbc Binary files /dev/null and b/GME Remit/Supported Files/Assets.xcassets/ic_arrow_right_white.imageset/long-arrow-pointing-to-the-right.png differ diff --git a/GME Remit/Utilities/ExchangeRateCustomView.swift b/GME Remit/Utilities/ExchangeRateCustomView.swift index 464094cb..83a3d300 100644 --- a/GME Remit/Utilities/ExchangeRateCustomView.swift +++ b/GME Remit/Utilities/ExchangeRateCustomView.swift @@ -54,7 +54,7 @@ class ExchangeRateCustomView: UIView { var dropdownIcon: UIImageView = { let dropdownIconImageView = UIImageView() - dropdownIconImageView.image = UIImage.init(named: "dropdown") + dropdownIconImageView.image = UIImage.init(named: "dropdown_white") dropdownIconImageView.translatesAutoresizingMaskIntoConstraints = false dropdownIconImageView.clipsToBounds = true dropdownIconImageView.contentMode = .center diff --git a/GME Remit/Utilities/TabBar Helper/CustomItemTabView.swift b/GME Remit/Utilities/TabBar Helper/CustomItemTabView.swift index 04c9035f..076bf4ed 100644 --- a/GME Remit/Utilities/TabBar Helper/CustomItemTabView.swift +++ b/GME Remit/Utilities/TabBar Helper/CustomItemTabView.swift @@ -58,7 +58,7 @@ final class CustomItemTabView: UIView { containerView.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true containerView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true containerView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true - containerView.heightAnchor.constraint(equalToConstant: 46).isActive = true + containerView.heightAnchor.constraint(equalToConstant: 60).isActive = true underlineView.topAnchor.constraint(equalTo: self.containerView.topAnchor, constant: 0).isActive = true diff --git a/GME Remit/Utilities/TabBar Helper/CustomTabBar.swift b/GME Remit/Utilities/TabBar Helper/CustomTabBar.swift index 4e3f41f7..5d2b2b8b 100644 --- a/GME Remit/Utilities/TabBar Helper/CustomTabBar.swift +++ b/GME Remit/Utilities/TabBar Helper/CustomTabBar.swift @@ -54,7 +54,7 @@ final class CustomTabBar: UIStackView { alignment = .top backgroundColor = .themeWhite - setupCornerRadius(20) + setupCornerRadius(29) customItemViews.forEach { $0.translatesAutoresizingMaskIntoConstraints = false