InKwon James Kim
5 years ago
39 changed files with 66 additions and 3143 deletions
-
254GME Remit.xcodeproj/project.pbxproj
-
28GME Remit/Models/Response/SendMoneyCountryViewModel.swift
-
2GME Remit/Models/Response/SendMoneyDistrictViewModel.swift
-
0GME Remit/Models/Response/SendMoneyProvinceViewModel.swift
-
4GME Remit/Models/Response/SendMoneyRelationViewModel.swift
-
0GME Remit/Models/Response/SendMoneyTransFerReasonViewModel.swift
-
47GME Remit/Modules/RecipientModules/AddReciepient/Application Logic/Interactor/AddReciepientInteractor.swift
-
18GME Remit/Modules/RecipientModules/AddReciepient/Application Logic/Interactor/AddReciepientInteractorIO.swift
-
21GME Remit/Modules/RecipientModules/AddReciepient/Application Logic/Service/AddReciepientService.swift
-
57GME Remit/Modules/RecipientModules/AddReciepient/Application Logic/Service/AddReciepientServiceType.swift
-
12GME Remit/Modules/RecipientModules/AddReciepient/Module Interface/AddReciepientModuleInterface.swift
-
BINGME Remit/Modules/RecipientModules/AddReciepient/User Interface/Presenter/.DS_Store
-
143GME Remit/Modules/RecipientModules/AddReciepient/User Interface/Presenter/AddReciepientPresenter.swift
-
BINGME Remit/Modules/RecipientModules/AddReciepient/User Interface/View/.DS_Store
-
468GME Remit/Modules/RecipientModules/AddReciepient/User Interface/View/AddReciepient.storyboard
-
493GME Remit/Modules/RecipientModules/AddReciepient/User Interface/View/AddReciepientViewController.swift
-
19GME Remit/Modules/RecipientModules/AddReciepient/User Interface/View/AddReciepientViewInterface.swift
-
BINGME Remit/Modules/RecipientModules/AddReciepient/User Interface/View/ViewModels/.DS_Store
-
135GME Remit/Modules/RecipientModules/AddReciepient/User Interface/View/ViewModels/SendMoneyCountryViewModel.swift
-
40GME Remit/Modules/RecipientModules/AddReciepient/User Interface/Wireframe/AddReciepientWireframe.swift
-
13GME Remit/Modules/RecipientModules/AddReciepient/User Interface/Wireframe/AddReciepientWireframeInput.swift
-
BINGME Remit/Modules/RecipientModules/EditReciepient/Application Logic/Interactor/.DS_Store
-
50GME Remit/Modules/RecipientModules/EditReciepient/Application Logic/Interactor/EditReciepientInteractor.swift
-
19GME Remit/Modules/RecipientModules/EditReciepient/Application Logic/Interactor/EditReciepientInteractorIO.swift
-
18GME Remit/Modules/RecipientModules/EditReciepient/Application Logic/Service/EditReciepientService.swift
-
13GME Remit/Modules/RecipientModules/EditReciepient/Application Logic/Service/EditReciepientServiceType.swift
-
12GME Remit/Modules/RecipientModules/EditReciepient/Module Interface/EditReciepientModuleInterface.swift
-
BINGME Remit/Modules/RecipientModules/EditReciepient/User Interface/Presenter/.DS_Store
-
178GME Remit/Modules/RecipientModules/EditReciepient/User Interface/Presenter/EditReciepientPresenter.swift
-
33GME Remit/Modules/RecipientModules/EditReciepient/User Interface/Presenter/EditRecipientRecipientViewModel.swift
-
BINGME Remit/Modules/RecipientModules/EditReciepient/User Interface/View/.DS_Store
-
466GME Remit/Modules/RecipientModules/EditReciepient/User Interface/View/EditReciepient.storyboard
-
536GME Remit/Modules/RecipientModules/EditReciepient/User Interface/View/EditReciepientViewController.swift
-
19GME Remit/Modules/RecipientModules/EditReciepient/User Interface/View/EditReciepientViewInterface.swift
-
54GME Remit/Modules/RecipientModules/EditReciepient/User Interface/Wireframe/EditReciepientWireframe.swift
-
13GME Remit/Modules/RecipientModules/EditReciepient/User Interface/Wireframe/EditReciepientWireframeInput.swift
-
21GME Remit/Modules/RecipientModules/Recipients/User Interface/View/Recipients.storyboard
-
9GME Remit/Modules/RecipientModules/Recipients/User Interface/View/RecipientsViewController.swift
-
14GME Remit/Modules/RecipientModules/Recipients/User Interface/View/ViewModel/RecipientsViewModel.swift
@ -0,0 +1,28 @@ |
|||
// |
|||
// SendMoneyCountryStructure.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 26/08/2018. |
|||
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
class SendMoneyCountryViewModel { |
|||
var id: String? |
|||
var name: String? |
|||
var title: String? |
|||
var code: String? |
|||
var proviencesRequired: String? |
|||
var proviences: [SendMoneyProvienceViewModel]? |
|||
} |
|||
|
|||
extension SendMoneyCountryViewModel: TablePresenterProtocol { |
|||
var cellTitle: String? { |
|||
return name |
|||
} |
|||
|
|||
var cellImage: UIImage? { |
|||
return CountryEnum(rawValue: code?.lowercased() ?? "")?.flag |
|||
} |
|||
} |
@ -1,47 +0,0 @@ |
|||
// |
|||
// AddReciepientInteractor.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 26/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
class AddReciepientInteractor { |
|||
|
|||
// MARK: Properties |
|||
|
|||
weak var output: AddReciepientInteractorOutput? |
|||
private let service: AddReciepientServiceType |
|||
|
|||
// MARK: Initialization |
|||
|
|||
init(service: AddReciepientServiceType) { |
|||
self.service = service |
|||
} |
|||
|
|||
// MARK: Converting entities |
|||
|
|||
} |
|||
|
|||
// MARK: AddReciepient interactor input interface |
|||
|
|||
extension AddReciepientInteractor: AddReciepientInteractorInput { |
|||
func viewIsReady() { |
|||
self.service.fetch(success: { (model) in |
|||
self.output?.show(model: model) |
|||
}) { (error) in |
|||
self.output?.show(error: error) |
|||
} |
|||
} |
|||
|
|||
func save(reciepient: Recipient) { |
|||
let myUsername = Utility.getMyUserName() |
|||
self.service.save(model: reciepient.serialize(), username: myUsername, success: { (reciepient) in |
|||
self.output?.success() |
|||
}) { (error) in |
|||
self.output?.show(error: error) |
|||
} |
|||
} |
|||
} |
@ -1,18 +0,0 @@ |
|||
// |
|||
// AddReciepientInteractorIO.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 26/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
protocol AddReciepientInteractorInput: class { |
|||
func viewIsReady() |
|||
func save(reciepient: Recipient) |
|||
} |
|||
|
|||
protocol AddReciepientInteractorOutput: class { |
|||
func show(error: Error) |
|||
func show(model: SendMoneyModel?) |
|||
func success() |
|||
} |
@ -1,21 +0,0 @@ |
|||
// |
|||
// AddReciepientService.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 26/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
import Alamofire |
|||
|
|||
class AddReciepientService: AddReciepientServiceType { |
|||
|
|||
// MARK: Properties |
|||
|
|||
// MARK: Initialization |
|||
|
|||
// MARK: Data management |
|||
} |
|||
|
|||
|
@ -1,57 +0,0 @@ |
|||
// |
|||
// AddReciepientServiceType.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 26/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
protocol AddReciepientServiceType: class, FetchSendMoneyInformation, SaveReciepientService { |
|||
|
|||
} |
|||
|
|||
|
|||
protocol FetchSendMoneyInformation: ApiServiceType { |
|||
func fetch(success: @escaping (SendMoneyModel?) -> (), failure: @escaping (Error) -> () ) |
|||
} |
|||
|
|||
extension FetchSendMoneyInformation { |
|||
func fetch(success: @escaping (SendMoneyModel?) -> (), failure: @escaping (Error) -> () ) { |
|||
let url = baseUrl + "/mobile/loadform/receiver" |
|||
auth.request(method: .get, url: url, params: nil, success: { (response: SendMoneyInformationContainer) in |
|||
if (response.errorCode ?? "") == "1" { |
|||
let error = NSError.init(domain: "Network", code: 0, userInfo: [NSLocalizedDescriptionKey : response.message ?? ""]) |
|||
failure(error) |
|||
}else { |
|||
let model = response.data |
|||
success(model) |
|||
} |
|||
}) { (error) in |
|||
failure(error) |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
protocol SaveReciepientService: ApiServiceType { |
|||
func save(model:[String: String], username: String, success: @escaping (Recipient?) -> (), failure: @escaping (Error) -> ()) |
|||
} |
|||
|
|||
extension SaveReciepientService { |
|||
func save(model:[String: String], username: String, success: @escaping (Recipient?) -> (), failure: @escaping (Error) -> ()) { |
|||
let url = baseUrl + "/mobile/receiver/save/" + username |
|||
auth.request(method: .post, url: url, params: model, success: { (response: RecipientContainer) in |
|||
if (response.errorCode ?? "") == "1" { |
|||
let error = NSError.init(domain: "Network", code: 0, userInfo: [NSLocalizedDescriptionKey : response.message ?? ""]) |
|||
failure(error) |
|||
}else { |
|||
let model = response.data |
|||
success(model) |
|||
} |
|||
}) { (error) in |
|||
failure(error) |
|||
} |
|||
} |
|||
} |
@ -1,12 +0,0 @@ |
|||
// |
|||
// AddReciepientModuleInterface.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 26/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
protocol AddReciepientModuleInterface: class { |
|||
func viewIsReady() |
|||
func save(model: ReceipientViewModel) |
|||
} |
@ -1,143 +0,0 @@ |
|||
// |
|||
// AddReciepientPresenter.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 26/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
class AddReciepientPresenter { |
|||
|
|||
// MARK: Properties |
|||
|
|||
var transferReasons: [TransferReason] = [] |
|||
var relations: [Relation] = [] |
|||
var countries: [CountryModel] = [] |
|||
|
|||
weak var view: AddReciepientViewInterface? |
|||
var interactor: AddReciepientInteractorInput? |
|||
var wireframe: AddReciepientWireframeInput? |
|||
|
|||
// MARK: Converting entities |
|||
|
|||
func convert(models: [CountryModel]) { |
|||
let viewmodels: [SendMoneyCountryViewModel] = models.map({ |
|||
let viewmodel = SendMoneyCountryViewModel() |
|||
viewmodel.name = $0.name |
|||
viewmodel.code = $0.code |
|||
viewmodel.id = $0.id |
|||
viewmodel.proviencesRequired = $0.provienceRequired |
|||
viewmodel.proviences = self.convert(models: $0.proviences ?? []) |
|||
return viewmodel |
|||
}) |
|||
self.view?.show(countries: viewmodels) |
|||
} |
|||
|
|||
func convert(models: [Provience]) -> [SendMoneyProvienceViewModel] { |
|||
return models.map({ |
|||
var viewmodel = SendMoneyProvienceViewModel() |
|||
viewmodel.name = $0.name |
|||
viewmodel.id = $0.id |
|||
viewmodel.districts = self.convert(models: $0.districts ?? []) |
|||
return viewmodel |
|||
}) |
|||
} |
|||
|
|||
func convert(models: [District]) -> [SendMoneyDistrictViewModel] { |
|||
let viewmodels: [SendMoneyDistrictViewModel] = models.map({ |
|||
let viewmodel = SendMoneyDistrictViewModel() |
|||
viewmodel.name = $0.name |
|||
viewmodel.id = $0.id |
|||
return viewmodel |
|||
}) |
|||
return viewmodels |
|||
} |
|||
|
|||
func convert(models: [TransferReason]) { |
|||
let viewmodels: [SendMoneyTransferReasonViewModel] = models.map({ |
|||
var viewmodel = SendMoneyTransferReasonViewModel() |
|||
viewmodel.title = $0.title |
|||
viewmodel.id = $0.id |
|||
return viewmodel |
|||
}) |
|||
|
|||
self.view?.show(transferReasons: viewmodels) |
|||
} |
|||
|
|||
func convert(models: [Relation]) { |
|||
let viewmodels: [SendMoneyRelationViewModel] = models.map({ |
|||
var viemodel = SendMoneyRelationViewModel() |
|||
viemodel.title = $0.title |
|||
viemodel.id = $0.id |
|||
return viemodel |
|||
}) |
|||
self.view?.show(relations: viewmodels) |
|||
} |
|||
|
|||
func convert(model: ReceipientViewModel) { |
|||
var reciepient = Recipient() |
|||
reciepient.firstName = model.firstName |
|||
reciepient.middleName = model.middleName |
|||
reciepient.lastName = model.lastName |
|||
reciepient.countryID = model.countryId |
|||
reciepient.stateID = model.stateId |
|||
reciepient.districtID = model.districtId |
|||
reciepient.city = model.city |
|||
reciepient.address = model.address |
|||
reciepient.relationshipID = model.relationId |
|||
reciepient.purposeOfRemitID = model.reasonId |
|||
reciepient.mobile = model.mobileNumber |
|||
reciepient.email = model.email |
|||
reciepient.idType = model.idType |
|||
reciepient.idNumber = model.idNumber |
|||
|
|||
self.interactor?.save(reciepient: reciepient) |
|||
} |
|||
|
|||
} |
|||
|
|||
// MARK: AddReciepient module interface |
|||
|
|||
extension AddReciepientPresenter: AddReciepientModuleInterface { |
|||
func viewIsReady() { |
|||
self.view?.showLoading() |
|||
self.interactor?.viewIsReady() |
|||
} |
|||
|
|||
func save(model: ReceipientViewModel) { |
|||
self.convert(model: model) |
|||
} |
|||
} |
|||
|
|||
// MARK: AddReciepient interactor output interface |
|||
|
|||
extension AddReciepientPresenter: AddReciepientInteractorOutput { |
|||
|
|||
func show(model: SendMoneyModel?) { |
|||
self.transferReasons = model?.transferReasons ?? [] |
|||
self.relations = model?.relations ?? [] |
|||
self.countries = model?.countries ?? [] |
|||
|
|||
//TODO: set IDTYPES |
|||
self.view?.setReceiverIDTypes(with: model?.receiverIDTypes) |
|||
|
|||
self.view?.hideLoading() |
|||
|
|||
self.convert(models: self.countries) |
|||
self.convert(models: self.transferReasons) |
|||
self.convert(models: self.relations) |
|||
|
|||
} |
|||
|
|||
func show(error: Error) { |
|||
self.view?.hideLoading() |
|||
self.view?.show(error: error.localizedDescription) |
|||
} |
|||
|
|||
func success() { |
|||
print("successfully added") |
|||
self.wireframe?.dismiss() |
|||
} |
|||
} |
@ -1,468 +0,0 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES"> |
|||
<device id="retina4_7" orientation="portrait"> |
|||
<adaptation id="fullscreen"/> |
|||
</device> |
|||
<dependencies> |
|||
<deployment identifier="iOS"/> |
|||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/> |
|||
<capability name="Safe area layout guides" minToolsVersion="9.0"/> |
|||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
|||
</dependencies> |
|||
<customFonts key="customFonts"> |
|||
<array key="SanFranciscoDisplay-Regular.otf"> |
|||
<string>SanFranciscoDisplay-Regular</string> |
|||
</array> |
|||
<array key="SanFranciscoText-Regular.otf"> |
|||
<string>SanFranciscoText-Regular</string> |
|||
</array> |
|||
</customFonts> |
|||
<scenes> |
|||
<!--Add Reciepient View Controller--> |
|||
<scene sceneID="ZG4-BZ-Fvd"> |
|||
<objects> |
|||
<viewController storyboardIdentifier="AddReciepientViewController" id="qUw-b7-h89" customClass="AddReciepientViewController" customModule="GME_Remit" customModuleProvider="target" sceneMemberID="viewController"> |
|||
<view key="view" contentMode="scaleToFill" id="c8w-qG-Ce8"> |
|||
<rect key="frame" x="0.0" y="0.0" width="375" height="1100"/> |
|||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
|||
<subviews> |
|||
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" keyboardDismissMode="onDrag" translatesAutoresizingMaskIntoConstraints="NO" id="2cy-hR-Fme"> |
|||
<rect key="frame" x="0.0" y="0.0" width="375" height="1100"/> |
|||
<subviews> |
|||
<view contentMode="scaleToFill" placeholderIntrinsicWidth="375" placeholderIntrinsicHeight="900" translatesAutoresizingMaskIntoConstraints="NO" id="MHV-aS-FoL"> |
|||
<rect key="frame" x="0.0" y="0.0" width="375" height="1078"/> |
|||
<subviews> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" spacing="30" translatesAutoresizingMaskIntoConstraints="NO" id="bJg-iS-Pg8"> |
|||
<rect key="frame" x="10" y="0.0" width="355" height="1048"/> |
|||
<subviews> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="Lsn-v9-r4g"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="968"/> |
|||
<subviews> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="Fgq-xq-dmN" userLabel="TitleStackView"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="63"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Who are you sending money to?" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5JE-5D-wSW"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="63"/> |
|||
<color key="backgroundColor" red="0.90588235289999997" green="0.92941176469999998" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="63" id="375-5c-DNf"/> |
|||
</constraints> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="18"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="4GX-ko-nbw" userLabel="ContentStackView"> |
|||
<rect key="frame" x="0.0" y="68" width="355" height="900"/> |
|||
<subviews> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="e8u-s3-fVl"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="First Name" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RPh-p3-dap"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter receiver's full name" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="ydp-IU-Ddb"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="afy-81-2it"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits" keyboardType="alphabet"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="BQc-tA-RUn"> |
|||
<rect key="frame" x="0.0" y="70" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Middle Name (Optional)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Lwa-xS-Mou"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter receiver's middle name" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="Bgi-hL-Wf6"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="tLl-P0-Zbh"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits" keyboardType="alphabet"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="A3K-Ig-mN9"> |
|||
<rect key="frame" x="0.0" y="140" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Last Name" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aos-AF-iaO"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter receiver's last name" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="xvn-Xq-Poa"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="Ls2-ds-JKU"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits" keyboardType="alphabet"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="kmX-kn-0uS"> |
|||
<rect key="frame" x="0.0" y="210" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Country" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gnB-aR-bJE"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Select" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="rTf-lL-eJb"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="69q-4x-Lyu"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="Uwb-JF-Lu9"> |
|||
<rect key="frame" x="0.0" y="280" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="State/Province" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hX8-qF-mLG"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Select" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="SpT-9V-3C8"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="Tby-y3-sva"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="EtN-9R-GQt"> |
|||
<rect key="frame" x="0.0" y="350" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="District" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QCa-CZ-ElQ"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Select" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="6qj-la-Mgu"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="pSC-rQ-oQk"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="fh8-Q6-q8A"> |
|||
<rect key="frame" x="0.0" y="420" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="City" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="woC-KH-z7x"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter receiver's City" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="cHL-Cf-h5a"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="UAG-D4-uH5"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits" keyboardType="alphabet"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="blF-qq-qJe"> |
|||
<rect key="frame" x="0.0" y="490" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Address" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Y1V-LP-rwg"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter receiver's Address" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="R9T-Lf-bM4"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="FVQ-W0-QKk"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits" keyboardType="alphabet"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="O4c-KR-vEE"> |
|||
<rect key="frame" x="0.0" y="560" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Relation" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aVB-K7-liY"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Select" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="vZS-DH-n7I"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="9YL-SW-YnM"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="7Tk-n4-kZ1"> |
|||
<rect key="frame" x="0.0" y="630" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Mobile No." textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="s2u-oR-Os8"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter receiver's mobile number" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="vAR-h8-elx"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="HQh-Pf-Mui"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits" keyboardType="phonePad"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView hidden="YES" opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="2Kh-Q2-iMo"> |
|||
<rect key="frame" x="0.0" y="695" width="355" height="43"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Email (Optional)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rIa-a1-cYb"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="0.0"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter receiver's email address" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="ipS-s7-o8E"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="106-th-a9p"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits" keyboardType="emailAddress"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="iLj-pG-L6B"> |
|||
<rect key="frame" x="0.0" y="700" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Transfer Reason" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="F7d-NL-98o"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Select" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="LWI-ug-ZGq"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="Vvx-Qi-ol9"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="I2d-JJ-OvN" userLabel="IDType"> |
|||
<rect key="frame" x="0.0" y="770" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ID Type (Optional)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LCW-9T-FLU"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Select" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Aqq-Xq-pZT"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="gBF-W7-Tev"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="NH9-gT-qAV" userLabel="IDValue"> |
|||
<rect key="frame" x="0.0" y="840" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ID Number (Optional)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zyl-vG-rKF"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter receiver's ID value" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="1YP-BG-HGJ"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="uF9-AD-1Sx"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits" keyboardType="numbersAndPunctuation"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
</subviews> |
|||
</stackView> |
|||
</subviews> |
|||
</stackView> |
|||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="BKY-7W-R56"> |
|||
<rect key="frame" x="77.5" y="998" width="200" height="50"/> |
|||
<color key="backgroundColor" red="0.92941176469999998" green="0.10980392160000001" blue="0.14117647059999999" alpha="1" colorSpace="calibratedRGB"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="50" id="H0T-Sg-A4P"/> |
|||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="200" id="MDg-xE-elg"/> |
|||
</constraints> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="18"/> |
|||
<state key="normal" title="Save "> |
|||
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
|||
</state> |
|||
<userDefinedRuntimeAttributes> |
|||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius"> |
|||
<integer key="value" value="25"/> |
|||
</userDefinedRuntimeAttribute> |
|||
</userDefinedRuntimeAttributes> |
|||
<connections> |
|||
<action selector="save:" destination="qUw-b7-h89" eventType="touchUpInside" id="OBq-sC-mBT"/> |
|||
</connections> |
|||
</button> |
|||
</subviews> |
|||
<constraints> |
|||
<constraint firstItem="Lsn-v9-r4g" firstAttribute="top" secondItem="bJg-iS-Pg8" secondAttribute="top" id="Fel-kh-Gh3"/> |
|||
<constraint firstAttribute="trailing" secondItem="Lsn-v9-r4g" secondAttribute="trailing" id="g5C-L7-N6L"/> |
|||
<constraint firstItem="BKY-7W-R56" firstAttribute="top" secondItem="Lsn-v9-r4g" secondAttribute="bottom" constant="30" id="kmT-FY-Qoy"/> |
|||
<constraint firstItem="Lsn-v9-r4g" firstAttribute="leading" secondItem="bJg-iS-Pg8" secondAttribute="leading" id="y0q-5R-KpG"/> |
|||
</constraints> |
|||
</stackView> |
|||
</subviews> |
|||
<color key="backgroundColor" red="0.90588235289999997" green="0.92941176469999998" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/> |
|||
<constraints> |
|||
<constraint firstItem="bJg-iS-Pg8" firstAttribute="leading" secondItem="MHV-aS-FoL" secondAttribute="leading" constant="10" id="OPe-2w-OP2"/> |
|||
<constraint firstAttribute="bottom" secondItem="bJg-iS-Pg8" secondAttribute="bottom" constant="30" id="U7a-4z-kCt"/> |
|||
<constraint firstItem="bJg-iS-Pg8" firstAttribute="top" secondItem="MHV-aS-FoL" secondAttribute="top" id="fEk-hQ-40p"/> |
|||
<constraint firstAttribute="trailing" secondItem="bJg-iS-Pg8" secondAttribute="trailing" constant="10" id="up5-gF-o1R"/> |
|||
</constraints> |
|||
</view> |
|||
</subviews> |
|||
<constraints> |
|||
<constraint firstAttribute="trailing" secondItem="MHV-aS-FoL" secondAttribute="trailing" id="1ud-I2-6Lb"/> |
|||
<constraint firstItem="MHV-aS-FoL" firstAttribute="leading" secondItem="2cy-hR-Fme" secondAttribute="leading" id="90P-CP-PlW"/> |
|||
<constraint firstItem="MHV-aS-FoL" firstAttribute="width" secondItem="2cy-hR-Fme" secondAttribute="width" id="Sym-CB-EJL"/> |
|||
<constraint firstItem="MHV-aS-FoL" firstAttribute="top" secondItem="2cy-hR-Fme" secondAttribute="top" id="bi9-on-vM7"/> |
|||
<constraint firstAttribute="bottom" secondItem="MHV-aS-FoL" secondAttribute="bottom" constant="1" id="txH-Zh-JFi"/> |
|||
</constraints> |
|||
</scrollView> |
|||
</subviews> |
|||
<color key="backgroundColor" red="0.90588235289999997" green="0.92941176469999998" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/> |
|||
<constraints> |
|||
<constraint firstItem="2cy-hR-Fme" firstAttribute="trailing" secondItem="Zop-On-Gen" secondAttribute="trailing" id="AdC-nH-U3C"/> |
|||
<constraint firstItem="2cy-hR-Fme" firstAttribute="bottom" secondItem="Zop-On-Gen" secondAttribute="bottom" id="POR-FA-cfC"/> |
|||
<constraint firstItem="2cy-hR-Fme" firstAttribute="top" secondItem="c8w-qG-Ce8" secondAttribute="top" id="f4T-NC-tiu"/> |
|||
<constraint firstItem="2cy-hR-Fme" firstAttribute="leading" secondItem="Zop-On-Gen" secondAttribute="leading" id="oY6-nd-Hs8"/> |
|||
</constraints> |
|||
<viewLayoutGuide key="safeArea" id="Zop-On-Gen"/> |
|||
</view> |
|||
<navigationItem key="navigationItem" id="tLQ-eY-0WT"> |
|||
<barButtonItem key="leftBarButtonItem" systemItem="stop" id="gzw-iW-Xbh"> |
|||
<color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
|||
<connections> |
|||
<action selector="touchClose:" destination="qUw-b7-h89" id="16f-VI-FRO"/> |
|||
</connections> |
|||
</barButtonItem> |
|||
</navigationItem> |
|||
<size key="freeformSize" width="375" height="1100"/> |
|||
<connections> |
|||
<outlet property="addressTextField" destination="R9T-Lf-bM4" id="BLz-cZ-WDi"/> |
|||
<outlet property="addressTitleLabel" destination="Y1V-LP-rwg" id="nI3-Z7-OcO"/> |
|||
<outlet property="cityTextField" destination="cHL-Cf-h5a" id="w9z-Ri-H3k"/> |
|||
<outlet property="cityTitleLabel" destination="woC-KH-z7x" id="yrM-iQ-Hqc"/> |
|||
<outlet property="countryNameTitleLabel" destination="gnB-aR-bJE" id="SgA-g3-1cr"/> |
|||
<outlet property="countryTextField" destination="rTf-lL-eJb" id="Y3T-Mm-ixS"/> |
|||
<outlet property="districtStackView" destination="EtN-9R-GQt" id="Usa-Zf-0eQ"/> |
|||
<outlet property="districtTextField" destination="6qj-la-Mgu" id="utY-Qw-TW7"/> |
|||
<outlet property="districtTitleLabel" destination="QCa-CZ-ElQ" id="9hB-yU-EZQ"/> |
|||
<outlet property="emailTextField" destination="ipS-s7-o8E" id="Wq1-Uf-JZ6"/> |
|||
<outlet property="firstNameTextField" destination="ydp-IU-Ddb" id="e3J-N4-YFB"/> |
|||
<outlet property="firstNameTitleLabel" destination="RPh-p3-dap" id="44g-gl-VAn"/> |
|||
<outlet property="headerTItleLabel" destination="5JE-5D-wSW" id="WeN-0w-VRr"/> |
|||
<outlet property="idNumberTextField" destination="1YP-BG-HGJ" id="tCU-4M-yUa"/> |
|||
<outlet property="idNumberTitleLabel" destination="zyl-vG-rKF" id="x7J-om-P54"/> |
|||
<outlet property="idTypeTextField" destination="Aqq-Xq-pZT" id="GCh-J8-0vU"/> |
|||
<outlet property="idTypeTitleLabel" destination="LCW-9T-FLU" id="eRu-iS-2Oo"/> |
|||
<outlet property="lastNameTextField" destination="xvn-Xq-Poa" id="N7h-0x-nDv"/> |
|||
<outlet property="lastNametitleLabel" destination="aos-AF-iaO" id="cHA-Hj-l7c"/> |
|||
<outlet property="middleNameTextField" destination="Bgi-hL-Wf6" id="TkH-5j-dq6"/> |
|||
<outlet property="middleNameTitleLabel" destination="Lwa-xS-Mou" id="l4m-Vv-q2P"/> |
|||
<outlet property="mobileTextField" destination="vAR-h8-elx" id="MjH-nq-c98"/> |
|||
<outlet property="mobileTitleLabel" destination="s2u-oR-Os8" id="JIR-vw-QzN"/> |
|||
<outlet property="provienceStackView" destination="Uwb-JF-Lu9" id="xOP-ad-oDa"/> |
|||
<outlet property="relationTextField" destination="vZS-DH-n7I" id="L6v-QI-VNp"/> |
|||
<outlet property="relationTitleLabel" destination="aVB-K7-liY" id="O6y-4R-eTd"/> |
|||
<outlet property="saveButton" destination="BKY-7W-R56" id="L0d-XR-kgw"/> |
|||
<outlet property="scrollView" destination="2cy-hR-Fme" id="qms-TX-vgv"/> |
|||
<outlet property="stateProvinceTextField" destination="SpT-9V-3C8" id="eV6-zF-NWg"/> |
|||
<outlet property="stateTitleLabel" destination="hX8-qF-mLG" id="In4-Zh-xLw"/> |
|||
<outlet property="transferReasonTextField" destination="LWI-ug-ZGq" id="2wH-pT-rE9"/> |
|||
<outlet property="transferTitleLabel" destination="F7d-NL-98o" id="Lz2-UX-ubs"/> |
|||
</connections> |
|||
</viewController> |
|||
<placeholder placeholderIdentifier="IBFirstResponder" id="Xhm-p5-X8Q" userLabel="First Responder" sceneMemberID="firstResponder"/> |
|||
</objects> |
|||
<point key="canvasLocation" x="6138.4057971014499" y="97.098214285714278"/> |
|||
</scene> |
|||
<!--Navigation Controller--> |
|||
<scene sceneID="lM5-1D-ORq"> |
|||
<objects> |
|||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="uK7-c5-BbW" sceneMemberID="viewController"> |
|||
<toolbarItems/> |
|||
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="V11-QE-3bn"> |
|||
<rect key="frame" x="0.0" y="20" width="375" height="44"/> |
|||
<autoresizingMask key="autoresizingMask"/> |
|||
</navigationBar> |
|||
<nil name="viewControllers"/> |
|||
<connections> |
|||
<segue destination="qUw-b7-h89" kind="relationship" relationship="rootViewController" id="SzN-4G-9E8"/> |
|||
</connections> |
|||
</navigationController> |
|||
<placeholder placeholderIdentifier="IBFirstResponder" id="gNb-BS-V8g" userLabel="First Responder" sceneMemberID="firstResponder"/> |
|||
</objects> |
|||
<point key="canvasLocation" x="5228.985507246377" y="97.098214285714278"/> |
|||
</scene> |
|||
</scenes> |
|||
<color key="tintColor" red="0.78177064659999995" green="0.55228364470000002" blue="0.018981300289999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|||
</document> |
@ -1,493 +0,0 @@ |
|||
// |
|||
// AddReciepientViewController.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 26/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import UIKit |
|||
import IQKeyboardManagerSwift |
|||
|
|||
class AddReciepientViewController: UIViewController { |
|||
|
|||
// MARK: IBOutlets |
|||
@IBOutlet private weak var scrollView: UIScrollView! |
|||
|
|||
@IBOutlet private weak var firstNameTextField: UITextField! |
|||
@IBOutlet private weak var middleNameTextField: UITextField! |
|||
@IBOutlet private weak var lastNameTextField: UITextField! |
|||
@IBOutlet private weak var countryTextField: UITextField! |
|||
@IBOutlet private weak var stateProvinceTextField: UITextField! |
|||
@IBOutlet private weak var districtTextField: UITextField! |
|||
@IBOutlet private weak var addressTextField: UITextField! |
|||
@IBOutlet private weak var relationTextField: UITextField! |
|||
@IBOutlet private weak var mobileTextField: UITextField! |
|||
@IBOutlet private weak var emailTextField: UITextField! |
|||
@IBOutlet private weak var transferReasonTextField: UITextField! |
|||
@IBOutlet private weak var cityTextField: UITextField! |
|||
|
|||
@IBOutlet private weak var saveButton: UIButton! |
|||
|
|||
@IBOutlet private weak var provienceStackView: UIStackView! |
|||
@IBOutlet private weak var districtStackView: UIStackView! |
|||
|
|||
// titles |
|||
@IBOutlet private weak var headerTItleLabel: UILabel! |
|||
@IBOutlet private weak var firstNameTitleLabel: UILabel! |
|||
@IBOutlet private weak var middleNameTitleLabel: UILabel! |
|||
@IBOutlet private weak var lastNametitleLabel: UILabel! |
|||
@IBOutlet private weak var countryNameTitleLabel: UILabel! |
|||
@IBOutlet private weak var stateTitleLabel: UILabel! |
|||
@IBOutlet private weak var districtTitleLabel: UILabel! |
|||
@IBOutlet private weak var addressTitleLabel: UILabel! |
|||
@IBOutlet private weak var relationTitleLabel: UILabel! |
|||
@IBOutlet private weak var mobileTitleLabel: UILabel! |
|||
@IBOutlet private weak var transferTitleLabel: UILabel! |
|||
@IBOutlet private weak var cityTitleLabel: UILabel! |
|||
|
|||
// Optional |
|||
@IBOutlet weak var idTypeTitleLabel: UILabel! |
|||
@IBOutlet weak var idTypeTextField: UITextField! |
|||
|
|||
@IBOutlet weak var idNumberTitleLabel: UILabel! |
|||
@IBOutlet weak var idNumberTextField: UITextField! |
|||
|
|||
|
|||
// MARK: Properties |
|||
var presenter: AddReciepientModuleInterface? |
|||
|
|||
private var countries: [SendMoneyCountryViewModel]? |
|||
private var transferReasons: [SendMoneyTransferReasonViewModel]? |
|||
private var relations: [SendMoneyRelationViewModel]? |
|||
private var receiverIDTypes: [ReceiverIdType]? |
|||
private var idTypes = [" --- Select ID Type --- "] |
|||
|
|||
private var reciepient: ReceipientViewModel? |
|||
|
|||
private var selectedIDType: ReceiverIdType? { |
|||
didSet { |
|||
reciepient?.idType = selectedIDType?.id |
|||
idTypeTextField.text = selectedIDType?.text |
|||
|
|||
idNumberTextField.isEnabled = selectedIDType != nil ? true : false |
|||
|
|||
if !idNumberTextField.isEnabled { |
|||
idNumberTextField.text = nil |
|||
} |
|||
} |
|||
} |
|||
|
|||
private var selectedCountry: SendMoneyCountryViewModel? { |
|||
didSet { |
|||
self.countryTextField.text = selectedCountry?.name |
|||
let shouldShowProvienceField = (selectedCountry?.proviencesRequired ?? "" ) == "true" |
|||
self.provienceStackView.isHidden = !shouldShowProvienceField |
|||
self.districtStackView.isHidden = !shouldShowProvienceField |
|||
self.reciepient?.countryId = self.selectedCountry?.id |
|||
|
|||
mobileTextField.setCoutryFlag(with: selectedCountry?.code) |
|||
} |
|||
} |
|||
|
|||
private var selectedProvience: SendMoneyProvienceViewModel? { |
|||
didSet { |
|||
self.stateProvinceTextField.text = selectedProvience?.name |
|||
self.reciepient?.stateId = self.selectedProvience?.id |
|||
} |
|||
} |
|||
|
|||
private var selectedDistrict: SendMoneyDistrictViewModel? { |
|||
didSet { |
|||
self.districtTextField.text = selectedDistrict?.name |
|||
self.reciepient?.districtId = self.selectedDistrict?.id |
|||
} |
|||
} |
|||
|
|||
private var selectedRelation: SendMoneyRelationViewModel? { |
|||
didSet { |
|||
self.relationTextField.text = selectedRelation?.title |
|||
self.reciepient?.relationId = self.selectedRelation?.id |
|||
} |
|||
} |
|||
|
|||
private var selectedTransferReason: SendMoneyTransferReasonViewModel? { |
|||
didSet { |
|||
self.transferReasonTextField.text = selectedTransferReason?.title |
|||
self.reciepient?.reasonId = selectedTransferReason?.id |
|||
} |
|||
} |
|||
|
|||
|
|||
// MARK: VC's Life cycle |
|||
|
|||
override func viewDidLoad() { |
|||
super.viewDidLoad() |
|||
self.setup() |
|||
self.setupDelegates() |
|||
self.setupTargets() |
|||
self.reciepient = ReceipientViewModel() |
|||
self.presenter?.viewIsReady() |
|||
} |
|||
|
|||
override func viewWillAppear(_ animated: Bool) { |
|||
super.viewWillAppear(animated) |
|||
self.navigationItem.title = "add_recipient_text".localized() |
|||
} |
|||
|
|||
// Trying to show keyboard from viewDidLoad where the view might not be loaded fully. |
|||
// So try to move becomeFirstResponse related code to viewDidAppear where view loaded fully. |
|||
override func viewDidAppear(_ animated: Bool) { |
|||
super.viewDidAppear(animated) |
|||
self.firstNameTextField.becomeFirstResponder() |
|||
} |
|||
|
|||
override func viewWillDisappear(_ animated: Bool) { |
|||
super.viewWillAppear(animated) |
|||
self.navigationItem.title = "" |
|||
} |
|||
|
|||
// MARK: IBActions |
|||
|
|||
@IBAction private func save(_ sender: UIButton) { |
|||
if let reciepient = self.reciepient { |
|||
if let code = selectedCountry?.code?.lowercased(), |
|||
let countryCode = CountryEnum(rawValue: code), |
|||
let mobileNumber = mobileTextField.text { |
|||
|
|||
reciepient.mobileNumber = countryCode.phoneCode + mobileNumber |
|||
} |
|||
|
|||
self.presenter?.save(model: reciepient) |
|||
} |
|||
} |
|||
|
|||
@IBAction func touchClose(_ sender: UIBarButtonItem) { |
|||
dismiss(animated: true, completion: nil) |
|||
} |
|||
|
|||
// MARK: Other Functions |
|||
|
|||
private func setTextField(){ |
|||
self.firstNameTextField.keyboardType = .asciiCapable |
|||
self.firstNameTextField.returnKeyType = .next |
|||
self.firstNameTextField.autocorrectionType = .no |
|||
|
|||
self.middleNameTextField.keyboardType = .asciiCapable |
|||
self.middleNameTextField.returnKeyType = .next |
|||
self.middleNameTextField.autocorrectionType = .no |
|||
|
|||
self.lastNameTextField.keyboardType = .asciiCapable |
|||
self.lastNameTextField.returnKeyType = .next |
|||
self.lastNameTextField.autocorrectionType = .no |
|||
|
|||
self.addressTextField.keyboardType = .asciiCapable |
|||
self.addressTextField.returnKeyType = .next |
|||
self.addressTextField.autocorrectionType = .no |
|||
|
|||
// for pickerView |
|||
let pickerView = UIPickerView() |
|||
idTypeTextField.inputView = pickerView |
|||
pickerView.delegate = self |
|||
pickerView.dataSource = self |
|||
|
|||
} |
|||
|
|||
private func setup() { |
|||
// all setup should be done here |
|||
self.setupNavigation() |
|||
self.configureView() |
|||
self.configureLanguage() |
|||
self.setTextField() |
|||
|
|||
} |
|||
|
|||
private func configureLanguage() { |
|||
self.headerTItleLabel.text = "who_to_send_text".localized() |
|||
self.firstNameTitleLabel.text = "first_name_text".localized() |
|||
self.middleNameTitleLabel.text = "enter_receiver_middlename_text".localized() |
|||
self.lastNametitleLabel.text = "last_name_text".localized() |
|||
self.countryNameTitleLabel.text = "country_text".localized() |
|||
self.stateTitleLabel.text = "state_text".localized() |
|||
self.districtTitleLabel.text = "district_text".localized() |
|||
self.addressTitleLabel.text = "address_text".localized() |
|||
self.relationTitleLabel.text = "relation_text".localized() |
|||
self.mobileTitleLabel.text = "mobile_number_text".localized() |
|||
self.transferTitleLabel.text = "transfer_reason_text".localized() |
|||
|
|||
cityTitleLabel.text = "city_text".localized() |
|||
|
|||
saveButton.setTitle("save_text".localized(), for: .normal) |
|||
|
|||
idTypeTitleLabel.text = "id_type_title_text".localized() |
|||
idNumberTitleLabel.text = "id_number_title_text".localized() |
|||
idTypeTextField.placeholder = "placeholder_enter_id_type_text".localized() |
|||
idNumberTextField.placeholder = "placeholder_enter_id_number_text".localized() |
|||
|
|||
|
|||
// placeholders |
|||
|
|||
self.firstNameTextField.placeholder = "placeholder_enter_receiver_firstname_text".localized() |
|||
self.middleNameTextField.placeholder = "placeholder_enter_receiver_middle_text".localized() |
|||
self.lastNameTextField.placeholder = "placeholder_enter_receiver_lastname_text".localized() |
|||
self.countryTextField.placeholder = "placeholder_select_country_text".localized() |
|||
self.stateProvinceTextField.placeholder = "state_placeholder_text".localized() |
|||
self.districtTextField.placeholder = "district_placeholder_text".localized() |
|||
self.addressTextField.placeholder = "placeholder_enter_receiver_address_text".localized() |
|||
self.relationTextField.placeholder = "placeholder_select_relation_text".localized() |
|||
self.mobileTextField.placeholder = "placeholder_enter_reciever_mobile_number_text".localized() |
|||
self.transferReasonTextField.placeholder = "placeholder_select_transfer_reason_text".localized() |
|||
cityTextField.placeholder = "placeholder_enter_city_text".localized() |
|||
} |
|||
|
|||
private func configureView() { |
|||
self.provienceStackView.isHidden = true |
|||
self.districtStackView.isHidden = true |
|||
} |
|||
|
|||
private func setupDelegates() { |
|||
self.countryTextField.delegate = self |
|||
self.stateProvinceTextField.delegate = self |
|||
self.districtTextField.delegate = self |
|||
self.relationTextField.delegate = self |
|||
self.transferReasonTextField.delegate = self |
|||
|
|||
self.firstNameTextField.delegate = self |
|||
self.middleNameTextField.delegate = self |
|||
self.lastNameTextField.delegate = self |
|||
self.countryTextField.delegate = self |
|||
self.stateProvinceTextField.delegate = self |
|||
self.districtTextField.delegate = self |
|||
self.addressTextField.delegate = self |
|||
self.relationTextField.delegate = self |
|||
self.mobileTextField.delegate = self |
|||
} |
|||
|
|||
private func setupTargets() { |
|||
[firstNameTextField, middleNameTextField, lastNameTextField, countryTextField, stateProvinceTextField, districtTextField, addressTextField, relationTextField, mobileTextField, emailTextField, transferReasonTextField, cityTextField, idNumberTextField].forEach({ |
|||
$0.addTarget(self, action: #selector(self.textFieldChanged(sender:)), for: UIControl.Event.editingChanged) |
|||
}) |
|||
} |
|||
|
|||
@objc private func textFieldChanged(sender: UITextField) { |
|||
sender.removeNonASCII() |
|||
|
|||
switch sender { |
|||
case firstNameTextField: |
|||
self.reciepient?.firstName = firstNameTextField.text |
|||
case middleNameTextField: |
|||
self.reciepient?.middleName = middleNameTextField.text |
|||
case lastNameTextField: () |
|||
//FIXME |
|||
// self.reciepient?.lastName1 = lastNameTextField.text |
|||
case cityTextField: |
|||
self.reciepient?.city = cityTextField.text |
|||
case addressTextField: |
|||
self.reciepient?.address = addressTextField.text |
|||
case mobileTextField: |
|||
self.reciepient?.mobileNumber = mobileTextField.text |
|||
case emailTextField: |
|||
self.reciepient?.email = emailTextField.text |
|||
case idNumberTextField: |
|||
reciepient?.idNumber = idNumberTextField.text |
|||
default: |
|||
break |
|||
} |
|||
} |
|||
|
|||
private func setupNavigation() { |
|||
self.navigationItem.backBarButtonItem?.image = |
|||
#imageLiteral(resourceName: "backIconBlack") |
|||
self.navigationController?.navigationBar.tintColor = UIColor.black |
|||
} |
|||
|
|||
private func showCountryPickerview() { |
|||
TablePresenterWireframe().openWith( |
|||
tag: 0, |
|||
delegate: self, |
|||
model: countries, |
|||
source: self |
|||
) |
|||
} |
|||
|
|||
private func showProviencePickerview() { |
|||
TablePresenterWireframe().openWith( |
|||
tag: 1, |
|||
delegate: self, |
|||
model: self.selectedCountry?.proviences, |
|||
source: self |
|||
) |
|||
} |
|||
|
|||
private func showDistrictPickerview() { |
|||
TablePresenterWireframe().openWith( |
|||
tag: 2, |
|||
delegate: self, |
|||
model: selectedProvience?.districts, |
|||
source: self |
|||
) |
|||
} |
|||
|
|||
private func showRelationPickerView() { |
|||
TablePresenterWireframe().openWith( |
|||
tag: 3, |
|||
delegate: self, |
|||
model: relations, |
|||
source: self |
|||
) |
|||
} |
|||
|
|||
private func showTransferReasonPickerView() { |
|||
TablePresenterWireframe().openWith( |
|||
tag: 4, |
|||
delegate: self, |
|||
model: self.transferReasons, |
|||
source: self |
|||
) |
|||
} |
|||
|
|||
internal func showLoading() { |
|||
self.showProgressHud() |
|||
} |
|||
|
|||
internal func hideLoading() { |
|||
self.hideProgressHud() |
|||
} |
|||
|
|||
internal func show(error: String) { |
|||
self.alert(type: .error, message: error) |
|||
} |
|||
} |
|||
|
|||
// MARK: AddReciepientViewInterface |
|||
extension AddReciepientViewController: AddReciepientViewInterface { |
|||
func show(countries: [SendMoneyCountryViewModel]) { |
|||
self.countries = countries |
|||
} |
|||
|
|||
func show(transferReasons: [SendMoneyTransferReasonViewModel]) { |
|||
self.transferReasons = transferReasons |
|||
} |
|||
|
|||
func show(relations: [SendMoneyRelationViewModel]) { |
|||
self.relations = relations |
|||
} |
|||
|
|||
func setReceiverIDTypes(with model: [ReceiverIdType]?) { |
|||
receiverIDTypes = model |
|||
|
|||
guard let types = receiverIDTypes?.compactMap ({ $0.text }) else { |
|||
return |
|||
} |
|||
|
|||
idTypes.append(contentsOf: types) |
|||
|
|||
print("idTypes count: \(idTypes.count)") |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
// MARK: - UITextFieldDelegate |
|||
extension AddReciepientViewController: UITextFieldDelegate { |
|||
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { |
|||
switch textField { |
|||
case countryTextField: |
|||
showCountryPickerview() |
|||
return false |
|||
case stateProvinceTextField: |
|||
self.showProviencePickerview() |
|||
return false |
|||
case districtTextField: |
|||
self.showDistrictPickerview() |
|||
return false |
|||
case relationTextField: |
|||
self.showRelationPickerView() |
|||
return false |
|||
case transferReasonTextField: |
|||
self.showTransferReasonPickerView() |
|||
return false |
|||
default: |
|||
return true |
|||
} |
|||
} |
|||
} |
|||
|
|||
// MARK: - UIPickerViewDataSource |
|||
extension AddReciepientViewController: UIPickerViewDataSource { |
|||
func numberOfComponents(in pickerView: UIPickerView) -> Int { |
|||
return 1 |
|||
} |
|||
|
|||
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { |
|||
return idTypes.count |
|||
} |
|||
} |
|||
|
|||
extension AddReciepientViewController: UIPickerViewDelegate { |
|||
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { |
|||
return idTypes[row] |
|||
} |
|||
|
|||
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { |
|||
selectedIDType = row > 0 ? receiverIDTypes?[row - 1] : nil |
|||
} |
|||
} |
|||
|
|||
|
|||
// MARK: - TablePresenterDelegate |
|||
extension AddReciepientViewController: TablePresenterDelegate { |
|||
func tablePresenterView(_ viewController: TablePresenterViewController) -> TablePresenterConfiguration { |
|||
let title: String |
|||
let searchPlaceholder: String |
|||
|
|||
switch viewController.view.tag { |
|||
case 0: |
|||
title = "select_country_text".localized() |
|||
searchPlaceholder = "search_country_text".localized() |
|||
|
|||
case 1: |
|||
title = "province_placeholder_text".localized() |
|||
searchPlaceholder = "search_province_text".localized() |
|||
|
|||
case 2: |
|||
title = "select_district_text".localized() |
|||
searchPlaceholder = "search_district_text".localized() |
|||
|
|||
case 3: |
|||
title = "select_relation_text".localized() |
|||
searchPlaceholder = "search_relation_text".localized() |
|||
|
|||
case 4: |
|||
title = "select_transfer_reason_text".localized() |
|||
searchPlaceholder = "search_transfer_reason_text".localized() |
|||
|
|||
default: |
|||
title = "" |
|||
searchPlaceholder = "" |
|||
} |
|||
|
|||
return TablePresenterConfiguration( |
|||
presenterTitle: title, |
|||
closeButtonTitle: "cancel_text".localized(), |
|||
notFoundTitle: "no_result_found_text".localized(), |
|||
searchBarPlaceHolder: searchPlaceholder, |
|||
isUseSearchBar: true |
|||
) |
|||
} |
|||
|
|||
func tablePresenterView( |
|||
_ viewController: TablePresenterViewController, |
|||
didSelectModel model: TablePresenterProtocol? |
|||
) { |
|||
switch viewController.view.tag { |
|||
case 0: selectedCountry = model as? SendMoneyCountryViewModel |
|||
case 1: selectedProvience = model as? SendMoneyProvienceViewModel |
|||
case 2: selectedDistrict = model as? SendMoneyDistrictViewModel |
|||
case 3: selectedRelation = model as? SendMoneyRelationViewModel |
|||
case 4: selectedTransferReason = model as? SendMoneyTransferReasonViewModel |
|||
default: break |
|||
} |
|||
} |
|||
|
|||
} |
@ -1,19 +0,0 @@ |
|||
// |
|||
// AddReciepientViewInterface.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 26/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
protocol AddReciepientViewInterface: class { |
|||
func show(error: String) |
|||
func show(countries: [SendMoneyCountryViewModel]) |
|||
func show(transferReasons: [SendMoneyTransferReasonViewModel]) |
|||
func show(relations: [SendMoneyRelationViewModel]) |
|||
func showLoading() |
|||
func hideLoading() |
|||
|
|||
func setReceiverIDTypes(with model: [ReceiverIdType]?) |
|||
|
|||
} |
@ -1,135 +0,0 @@ |
|||
// |
|||
// SendMoneyCountryStructure.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 26/08/2018. |
|||
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
|
|||
|
|||
|
|||
class SendMoneyCountryViewModel { |
|||
var id: String? |
|||
var name: String? |
|||
var title: String? |
|||
var code: String? |
|||
var proviencesRequired: String? |
|||
var proviences: [SendMoneyProvienceViewModel]? |
|||
} |
|||
|
|||
extension SendMoneyCountryViewModel: TablePresenterProtocol { |
|||
var cellTitle: String? { |
|||
return name |
|||
} |
|||
|
|||
var cellImage: UIImage? { |
|||
return CountryEnum(rawValue: code?.lowercased() ?? "")?.flag |
|||
} |
|||
} |
|||
|
|||
/* |
|||
code: AZ // image: Optional(<UIImage: 0x600003517640> size {512, 512} orientation 0 scale 1.000000) |
|||
code: AZ // image: Optional(<UIImage: 0x600003517640> size {512, 512} orientation 0 scale 1.000000) |
|||
code: BH // image: Optional(<UIImage: 0x60000350eca0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: BH // image: Optional(<UIImage: 0x60000350eca0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: BD // image: Optional(<UIImage: 0x600003514af0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: BD // image: Optional(<UIImage: 0x600003514af0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: BY // image: Optional(<UIImage: 0x60000350a5a0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: BY // image: Optional(<UIImage: 0x60000350a5a0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: BW // image: Optional(<UIImage: 0x600003508460> size {512, 512} orientation 0 scale 1.000000) |
|||
code: BW // image: Optional(<UIImage: 0x600003508460> size {512, 512} orientation 0 scale 1.000000) |
|||
code: KH // image: Optional(<UIImage: 0x60000350d340> size {512, 512} orientation 0 scale 1.000000) |
|||
code: KH // image: Optional(<UIImage: 0x60000350d340> size {512, 512} orientation 0 scale 1.000000) |
|||
code: CG // image: nil |
|||
code: CG // image: nil |
|||
code: ET // image: Optional(<UIImage: 0x600003500bd0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: ET // image: Optional(<UIImage: 0x600003500bd0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: GM // image: Optional(<UIImage: 0x6000035161b0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: GM // image: Optional(<UIImage: 0x6000035161b0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: GE // image: Optional(<UIImage: 0x60000352df10> size {512, 512} orientation 0 scale 1.000000) |
|||
code: GE // image: Optional(<UIImage: 0x60000352df10> size {512, 512} orientation 0 scale 1.000000) |
|||
code: GH // image: Optional(<UIImage: 0x600003515ff0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: GH // image: Optional(<UIImage: 0x600003515ff0> size {512, 512} orientation 0 scale 1.000000) |
|||
2019-07-25 00:17:03.840151+0900 GME Remit[11447:90229] [UIWorkIntervalTiming] workIntervalStart: startTimestamp > targetTimestamp; rolling forward by 0.100000 |
|||
code: BY // image: Optional(<UIImage: 0x60000350c0e0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: BY // image: Optional(<UIImage: 0x60000350c0e0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: GH // image: Optional(<UIImage: 0x60000352d810> size {512, 512} orientation 0 scale 1.000000) |
|||
code: GH // image: Optional(<UIImage: 0x60000352d810> size {512, 512} orientation 0 scale 1.000000) |
|||
code: IN // image: Optional(<UIImage: 0x600003520d20> size {512, 512} orientation 0 scale 1.000000) |
|||
code: IN // image: Optional(<UIImage: 0x600003520d20> size {512, 512} orientation 0 scale 1.000000) |
|||
code: ID // image: Optional(<UIImage: 0x60000353fa30> size {256, 256} orientation 0 scale 2.000000) |
|||
code: ID // image: Optional(<UIImage: 0x60000353fa30> size {256, 256} orientation 0 scale 2.000000) |
|||
2019-07-25 00:17:06.614343+0900 GME Remit[11447:90229] [UIWorkIntervalTiming] workIntervalStart: startTimestamp > targetTimestamp; rolling forward by 0.650000 |
|||
code: KZ // image: Optional(<UIImage: 0x60000352cbd0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: KZ // image: Optional(<UIImage: 0x60000352cbd0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: KE // image: Optional(<UIImage: 0x600003513db0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: KE // image: Optional(<UIImage: 0x600003513db0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: KW // image: Optional(<UIImage: 0x6000035236b0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: KW // image: Optional(<UIImage: 0x6000035236b0> size {512, 512} orientation 0 scale 1.000000) |
|||
2019-07-25 00:17:07.858126+0900 GME Remit[11447:90229] [WindowServer] display_timer_callback: unexpected state (now:294e8e0d6f6 < expected:294e9da3951) |
|||
code: KG // image: Optional(<UIImage: 0x600003501490> size {512, 512} orientation 0 scale 1.000000) |
|||
code: KG // image: Optional(<UIImage: 0x600003501490> size {512, 512} orientation 0 scale 1.000000) |
|||
code: MY // image: Optional(<UIImage: 0x60000350ce00> size {512, 512} orientation 0 scale 1.000000) |
|||
code: MY // image: Optional(<UIImage: 0x60000350ce00> size {512, 512} orientation 0 scale 1.000000) |
|||
code: MD // image: Optional(<UIImage: 0x6000035280e0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: MD // image: Optional(<UIImage: 0x6000035280e0> size {512, 512} orientation 0 scale 1.000000) |
|||
2019-07-25 00:17:08.685048+0900 GME Remit[11447:90229] [UIWorkIntervalTiming] workIntervalStart: startTimestamp > targetTimestamp; rolling forward by 0.083333 |
|||
code: MN // image: Optional(<UIImage: 0x60000352f090> size {512, 512} orientation 0 scale 1.000000) |
|||
code: MN // image: Optional(<UIImage: 0x60000352f090> size {512, 512} orientation 0 scale 1.000000) |
|||
code: MA // image: Optional(<UIImage: 0x600003513e90> size {512, 512} orientation 0 scale 1.000000) |
|||
code: MA // image: Optional(<UIImage: 0x600003513e90> size {512, 512} orientation 0 scale 1.000000) |
|||
code: MM // image: Optional(<UIImage: 0x60000352cbd0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: MM // image: Optional(<UIImage: 0x60000352cbd0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: NP // image: Optional(<UIImage: 0x600003517d40> size {512, 512} orientation 0 scale 1.000000) |
|||
code: NP // image: Optional(<UIImage: 0x600003517d40> size {512, 512} orientation 0 scale 1.000000) |
|||
code: NG // image: Optional(<UIImage: 0x6000035153b0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: NG // image: Optional(<UIImage: 0x6000035153b0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: OM // image: Optional(<UIImage: 0x600003522fb0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: OM // image: Optional(<UIImage: 0x600003522fb0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: PK // image: Optional(<UIImage: 0x60000352fa30> size {512, 512} orientation 0 scale 1.000000) |
|||
code: PK // image: Optional(<UIImage: 0x60000352fa30> size {512, 512} orientation 0 scale 1.000000) |
|||
code: PH // image: Optional(<UIImage: 0x60000350cc40> size {512, 512} orientation 0 scale 1.000000) |
|||
code: PH // image: Optional(<UIImage: 0x60000350cc40> size {512, 512} orientation 0 scale 1.000000) |
|||
code: QA // image: Optional(<UIImage: 0x60000352afb0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: QA // image: Optional(<UIImage: 0x60000352afb0> size {512, 512} orientation 0 scale 1.000000) |
|||
2019-07-25 00:17:10.467533+0900 GME Remit[11447:90229] [UIWorkIntervalTiming] workIntervalStart: startTimestamp > targetTimestamp; rolling forward by 0.050000 |
|||
code: RU // image: Optional(<UIImage: 0x600003502bc0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: RU // image: Optional(<UIImage: 0x600003502bc0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: RW // image: Optional(<UIImage: 0x600003508380> size {512, 512} orientation 0 scale 1.000000) |
|||
code: RW // image: Optional(<UIImage: 0x600003508380> size {512, 512} orientation 0 scale 1.000000) |
|||
code: SN // image: Optional(<UIImage: 0x6000035088c0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: SN // image: Optional(<UIImage: 0x6000035088c0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: SC // image: Optional(<UIImage: 0x6000035089a0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: SC // image: Optional(<UIImage: 0x6000035089a0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: SL // image: Optional(<UIImage: 0x600003514a10> size {512, 512} orientation 0 scale 1.000000) |
|||
code: SL // image: Optional(<UIImage: 0x600003514a10> size {512, 512} orientation 0 scale 1.000000) |
|||
code: SG // image: Optional(<UIImage: 0x600003509340> size {512, 512} orientation 0 scale 1.000000) |
|||
code: SG // image: Optional(<UIImage: 0x600003509340> size {512, 512} orientation 0 scale 1.000000) |
|||
code: ZA // image: Optional(<UIImage: 0x600003521b20> size {512, 512} orientation 0 scale 1.000000) |
|||
code: ZA // image: Optional(<UIImage: 0x600003521b20> size {512, 512} orientation 0 scale 1.000000) |
|||
code: LK // image: Optional(<UIImage: 0x60000350fb10> size {512, 512} orientation 0 scale 1.000000) |
|||
code: LK // image: Optional(<UIImage: 0x60000350fb10> size {512, 512} orientation 0 scale 1.000000) |
|||
code: TJ // image: Optional(<UIImage: 0x60000352cf50> size {512, 512} orientation 0 scale 1.000000) |
|||
code: TJ // image: Optional(<UIImage: 0x60000352cf50> size {512, 512} orientation 0 scale 1.000000) |
|||
code: TH // image: Optional(<UIImage: 0x60000350f170> size {512, 512} orientation 0 scale 1.000000) |
|||
code: TH // image: Optional(<UIImage: 0x60000350f170> size {512, 512} orientation 0 scale 1.000000) |
|||
code: TN // image: Optional(<UIImage: 0x60000352a990> size {512, 512} orientation 0 scale 1.000000) |
|||
code: TN // image: Optional(<UIImage: 0x60000352a990> size {512, 512} orientation 0 scale 1.000000) |
|||
code: UG // image: Optional(<UIImage: 0x600003502d80> size {512, 512} orientation 0 scale 1.000000) |
|||
code: UG // image: Optional(<UIImage: 0x600003502d80> size {512, 512} orientation 0 scale 1.000000) |
|||
code: AE // image: Optional(<UIImage: 0x60000352b330> size {512, 512} orientation 0 scale 1.000000) |
|||
code: AE // image: Optional(<UIImage: 0x60000352b330> size {512, 512} orientation 0 scale 1.000000) |
|||
2019-07-25 00:17:12.511614+0900 GME Remit[11447:90229] [UIWorkIntervalTiming] workIntervalStart: startTimestamp > targetTimestamp; rolling forward by 0.100000 |
|||
code: UZ // image: Optional(<UIImage: 0x600003520700> size {512, 512} orientation 0 scale 1.000000) |
|||
code: UZ // image: Optional(<UIImage: 0x600003520700> size {512, 512} orientation 0 scale 1.000000) |
|||
code: VN // image: Optional(<UIImage: 0x60000353bdb0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: VN // image: Optional(<UIImage: 0x60000353bdb0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: YE // image: Optional(<UIImage: 0x6000035018f0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: YE // image: Optional(<UIImage: 0x6000035018f0> size {512, 512} orientation 0 scale 1.000000) |
|||
code: TN // image: Optional(<UIImage: 0x60000352a990> size {512, 512} orientation 0 scale 1.000000) |
|||
code: TN // image: Optional(<UIImage: 0x60000352a990> size {512, 512} orientation 0 scale 1.000000) |
|||
|
|||
*/ |
@ -1,40 +0,0 @@ |
|||
// |
|||
// AddReciepientWireframe.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 26/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import UIKit |
|||
|
|||
class AddReciepientWireframe { |
|||
weak var view: UIViewController! |
|||
} |
|||
|
|||
extension AddReciepientWireframe: AddReciepientWireframeInput { |
|||
|
|||
var storyboardName: String {return "AddReciepient"} |
|||
|
|||
func getMainView() -> UIViewController { |
|||
let service = AddReciepientService() |
|||
let interactor = AddReciepientInteractor(service: service) |
|||
let presenter = AddReciepientPresenter() |
|||
let viewController = viewControllerFromStoryboard(of: AddReciepientViewController.self) |
|||
|
|||
viewController.presenter = presenter |
|||
interactor.output = presenter |
|||
presenter.interactor = interactor |
|||
presenter.wireframe = self |
|||
presenter.view = viewController |
|||
|
|||
self.view = viewController |
|||
return viewController |
|||
} |
|||
|
|||
func dismiss() { |
|||
if let navigation = self.view.navigationController { |
|||
navigation.popViewController(animated: true) |
|||
} |
|||
} |
|||
} |
@ -1,13 +0,0 @@ |
|||
// |
|||
// AddReciepientWireframeInput.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 26/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
protocol AddReciepientWireframeInput: WireframeInput { |
|||
func dismiss() |
|||
} |
@ -1,50 +0,0 @@ |
|||
// |
|||
// EditReciepientInteractor.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 28/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
class EditReciepientInteractor { |
|||
|
|||
// MARK: Properties |
|||
|
|||
weak var output: EditReciepientInteractorOutput? |
|||
private let service: EditReciepientServiceType |
|||
var reciepient: Recipient |
|||
// MARK: Initialization |
|||
|
|||
init(service: EditReciepientServiceType, reciepient: Recipient) { |
|||
self.service = service |
|||
self.reciepient = reciepient |
|||
} |
|||
|
|||
// MARK: Converting entities |
|||
|
|||
} |
|||
|
|||
// MARK: EditReciepient interactor input interface |
|||
|
|||
extension EditReciepientInteractor: EditReciepientInteractorInput { |
|||
func viewIsReady() { |
|||
|
|||
self.service.fetch(success: { (model) in |
|||
self.output?.show(model: model) |
|||
self.output?.show(recipient: self.reciepient) |
|||
}) { (error) in |
|||
self.output?.show(error: error) |
|||
} |
|||
} |
|||
|
|||
func save(reciepient: Recipient) { |
|||
let myUsername = GMEDB.shared.user.string(.userId) ?? "" |
|||
self.service.save(model: reciepient.serialize(), username: myUsername, success: { (reciepient) in |
|||
self.output?.success() |
|||
}) { (error) in |
|||
self.output?.show(error: error) |
|||
} |
|||
} |
|||
} |
@ -1,19 +0,0 @@ |
|||
// |
|||
// EditReciepientInteractorIO.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 28/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
protocol EditReciepientInteractorInput: class { |
|||
func viewIsReady() |
|||
func save(reciepient: Recipient) |
|||
} |
|||
|
|||
protocol EditReciepientInteractorOutput: class { |
|||
func show(error: Error) |
|||
func show(model: SendMoneyModel?) |
|||
func success() |
|||
func show(recipient: Recipient) |
|||
} |
@ -1,18 +0,0 @@ |
|||
// |
|||
// EditReciepientService.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 28/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
class EditReciepientService: EditReciepientServiceType { |
|||
|
|||
// MARK: Properties |
|||
|
|||
// MARK: Initialization |
|||
|
|||
// MARK: Data management |
|||
} |
@ -1,13 +0,0 @@ |
|||
// |
|||
// EditReciepientServiceType.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 28/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
protocol EditReciepientServiceType: class, FetchSendMoneyInformation, SaveReciepientService { |
|||
|
|||
} |
@ -1,12 +0,0 @@ |
|||
// |
|||
// EditReciepientModuleInterface.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 28/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
protocol EditReciepientModuleInterface: class { |
|||
func viewIsReady() |
|||
func save(model: EditRecipientRecipientViewModel) |
|||
} |
@ -1,178 +0,0 @@ |
|||
// |
|||
// EditReciepientPresenter.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 28/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
class EditReciepientPresenter { |
|||
|
|||
// MARK: Properties |
|||
|
|||
var transferReasons: [TransferReason] = [] |
|||
var relations: [Relation] = [] |
|||
var countries: [CountryModel] = [] |
|||
|
|||
|
|||
weak var view: EditReciepientViewInterface? |
|||
var interactor: EditReciepientInteractorInput? |
|||
var wireframe: EditReciepientWireframeInput? |
|||
|
|||
// MARK: Converting entities |
|||
|
|||
func convert(models: [CountryModel]) { |
|||
let viewmodels: [SendMoneyCountryViewModel] = models.map({ |
|||
let viewmodel = SendMoneyCountryViewModel() |
|||
viewmodel.name = $0.name |
|||
viewmodel.code = $0.code |
|||
viewmodel.id = $0.id |
|||
viewmodel.proviencesRequired = $0.provienceRequired |
|||
viewmodel.proviences = self.convert(models: $0.proviences ?? []) |
|||
return viewmodel |
|||
}) |
|||
self.view?.show(countries: viewmodels) |
|||
} |
|||
|
|||
func convert(models: [Provience]) -> [SendMoneyProvienceViewModel] { |
|||
return models.map({ |
|||
var viewmodel = SendMoneyProvienceViewModel() |
|||
viewmodel.name = $0.name |
|||
viewmodel.id = $0.id |
|||
viewmodel.districts = self.convert(models: $0.districts ?? []) |
|||
return viewmodel |
|||
}) |
|||
} |
|||
|
|||
func convert(models: [District]) -> [SendMoneyDistrictViewModel] { |
|||
let viewmodels: [SendMoneyDistrictViewModel] = models.map({ |
|||
let viewmodel = SendMoneyDistrictViewModel() |
|||
viewmodel.name = $0.name |
|||
viewmodel.id = $0.id |
|||
return viewmodel |
|||
}) |
|||
return viewmodels |
|||
} |
|||
|
|||
func convert(models: [TransferReason]) { |
|||
let viewmodels: [SendMoneyTransferReasonViewModel] = models.map({ |
|||
var viewmodel = SendMoneyTransferReasonViewModel() |
|||
viewmodel.title = $0.title |
|||
viewmodel.id = $0.id |
|||
return viewmodel |
|||
}) |
|||
|
|||
self.view?.show(transferReasons: viewmodels) |
|||
} |
|||
|
|||
func convert(models: [Relation]) { |
|||
let viewmodels: [SendMoneyRelationViewModel] = models.map({ |
|||
var viemodel = SendMoneyRelationViewModel() |
|||
viemodel.title = $0.title |
|||
viemodel.id = $0.id |
|||
return viemodel |
|||
}) |
|||
self.view?.show(relations: viewmodels) |
|||
} |
|||
|
|||
func convert(model: EditRecipientRecipientViewModel) { |
|||
var reciepient = Recipient() |
|||
reciepient.receiverID = model.id |
|||
reciepient.firstName = model.firstName |
|||
reciepient.middleName = model.middleName |
|||
reciepient.lastName = model.lastName |
|||
|
|||
reciepient.countryID = model.countryId |
|||
reciepient.country = model.country |
|||
reciepient.stateID = model.stateId |
|||
reciepient.state = model.state |
|||
reciepient.district = model.district |
|||
reciepient.districtID = model.districtId |
|||
reciepient.city = model.city |
|||
reciepient.address = model.address |
|||
reciepient.relationship = model.relation |
|||
reciepient.relationshipID = model.relationId |
|||
reciepient.purposeOfRemit = model.reason |
|||
reciepient.purposeOfRemitID = model.reasonId |
|||
reciepient.mobile = model.mobileNumber |
|||
reciepient.email = model.email |
|||
reciepient.idType = model.idType |
|||
reciepient.idNumber = model.idNumber |
|||
self.interactor?.save(reciepient: reciepient) |
|||
} |
|||
|
|||
func convert(model: Recipient) { |
|||
let reciepient = EditRecipientRecipientViewModel() |
|||
reciepient.id = model.receiverID |
|||
reciepient.firstName = model.firstName |
|||
reciepient.middleName = model.middleName |
|||
reciepient.lastName = model.lastName |
|||
reciepient.country = model.country |
|||
reciepient.countryId = model.countryID |
|||
reciepient.state = model.state |
|||
reciepient.stateId = model.stateID |
|||
reciepient.city = model.city |
|||
reciepient.address = model.address |
|||
reciepient.relation = model.relationship |
|||
reciepient.relationId = model.relationshipID |
|||
reciepient.reason = model.purposeOfRemit |
|||
reciepient.reasonId = model.purposeOfRemitID |
|||
reciepient.mobileNumber = model.mobile |
|||
reciepient.email = model.email |
|||
reciepient.district = model.district |
|||
reciepient.districtId = model.districtID |
|||
reciepient.idType = model.idType |
|||
reciepient.idNumber = model.idNumber |
|||
|
|||
self.view?.show(recipient: reciepient) |
|||
} |
|||
} |
|||
|
|||
// MARK: EditReciepient module interface |
|||
|
|||
extension EditReciepientPresenter: EditReciepientModuleInterface { |
|||
func viewIsReady() { |
|||
self.view?.showLoading() |
|||
self.interactor?.viewIsReady() |
|||
} |
|||
|
|||
func save(model: EditRecipientRecipientViewModel) { |
|||
self.convert(model: model) |
|||
} |
|||
} |
|||
|
|||
// MARK: EditReciepient interactor output interface |
|||
|
|||
extension EditReciepientPresenter: EditReciepientInteractorOutput { |
|||
func show(model: SendMoneyModel?) { |
|||
self.transferReasons = model?.transferReasons ?? [] |
|||
self.relations = model?.relations ?? [] |
|||
self.countries = model?.countries ?? [] |
|||
|
|||
//TODO: set IDTYPES |
|||
self.view?.setReceiverIDTypes(with: model?.receiverIDTypes) |
|||
|
|||
self.view?.hideLoading() |
|||
|
|||
self.convert(models: self.countries) |
|||
self.convert(models: self.transferReasons) |
|||
self.convert(models: self.relations) |
|||
|
|||
} |
|||
|
|||
func show(error: Error) { |
|||
self.view?.hideLoading() |
|||
self.view?.show(error: error.localizedDescription) |
|||
} |
|||
|
|||
func success() { |
|||
print("successfully added") |
|||
self.wireframe?.dismiss() |
|||
} |
|||
|
|||
func show(recipient: Recipient) { |
|||
self.convert(model: recipient) |
|||
} |
|||
} |
@ -1,33 +0,0 @@ |
|||
// |
|||
// EditRecipientRecipientViewModel.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 28/08/2018. |
|||
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
class EditRecipientRecipientViewModel { |
|||
var id: String? |
|||
var firstName: String? |
|||
var middleName: String? |
|||
var lastName: String? |
|||
var country: String? |
|||
var state: String? |
|||
var stateId: String? |
|||
var city: String? |
|||
var address: String? |
|||
var district: String? |
|||
var districtId: String? |
|||
var relation: String? |
|||
var relationId: String? |
|||
var mobileNumber: String? |
|||
var email: String? |
|||
var recipientId: String? |
|||
var reason: String? |
|||
var reasonId: String? |
|||
var countryId: String? |
|||
var idType: String? |
|||
var idNumber: String? |
|||
} |
@ -1,466 +0,0 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES"> |
|||
<device id="retina4_7" orientation="portrait"> |
|||
<adaptation id="fullscreen"/> |
|||
</device> |
|||
<dependencies> |
|||
<deployment identifier="iOS"/> |
|||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/> |
|||
<capability name="Safe area layout guides" minToolsVersion="9.0"/> |
|||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
|||
</dependencies> |
|||
<customFonts key="customFonts"> |
|||
<array key="SanFranciscoDisplay-Regular.otf"> |
|||
<string>SanFranciscoDisplay-Regular</string> |
|||
</array> |
|||
<array key="SanFranciscoText-Regular.otf"> |
|||
<string>SanFranciscoText-Regular</string> |
|||
</array> |
|||
</customFonts> |
|||
<scenes> |
|||
<!--Edit Reciepient View Controller--> |
|||
<scene sceneID="lea-Vo-MFn"> |
|||
<objects> |
|||
<viewController storyboardIdentifier="EditReciepientViewController" id="kMF-hK-7F1" customClass="EditReciepientViewController" customModule="GME_Remit" customModuleProvider="target" sceneMemberID="viewController"> |
|||
<view key="view" contentMode="scaleToFill" id="yoy-Sr-xLN"> |
|||
<rect key="frame" x="0.0" y="0.0" width="375" height="1100"/> |
|||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
|||
<subviews> |
|||
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3nW-iI-E46"> |
|||
<rect key="frame" x="0.0" y="0.0" width="375" height="1100"/> |
|||
<subviews> |
|||
<view contentMode="scaleToFill" placeholderIntrinsicWidth="375" placeholderIntrinsicHeight="1100" translatesAutoresizingMaskIntoConstraints="NO" id="M1b-5m-MXH"> |
|||
<rect key="frame" x="0.0" y="0.0" width="375" height="1148"/> |
|||
<subviews> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" spacing="30" translatesAutoresizingMaskIntoConstraints="NO" id="akh-17-UFk"> |
|||
<rect key="frame" x="10" y="0.0" width="355" height="1118"/> |
|||
<subviews> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="z9e-FF-DG8"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="1038"/> |
|||
<subviews> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="pjd-YW-ZnH"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="63"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Who are you sending money to?" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Gt4-fi-XBm"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="63"/> |
|||
<color key="backgroundColor" red="0.90588235289999997" green="0.92941176469999998" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="63" id="JEL-6w-EYR"/> |
|||
</constraints> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="18"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="e9s-tP-DdN"> |
|||
<rect key="frame" x="0.0" y="68" width="355" height="970"/> |
|||
<subviews> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="a7v-9T-Kcl"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="First Name" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uA5-jW-mEK"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter receiver's first name" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="9Hx-oK-GHi"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="BFc-f4-Df9"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits" keyboardType="alphabet"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="XxH-Jy-JZG"> |
|||
<rect key="frame" x="0.0" y="70" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Middle Name (Optional)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="K3e-7G-CJy"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter receiver's middle name" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="Eej-kG-wrd"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="hyU-Gu-CK0"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits" keyboardType="alphabet"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="5rx-Wn-cUa"> |
|||
<rect key="frame" x="0.0" y="140" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Last Name" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tkw-bR-Oy9"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter receiver's last name" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="Wd8-zG-klN"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="uAd-ed-1fn"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits" keyboardType="alphabet"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="QCh-a4-Tx8"> |
|||
<rect key="frame" x="0.0" y="210" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Country" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="alw-ys-yay"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Select" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="DdO-f1-13k"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="dF5-bD-WvK"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="Ju9-Yd-QNB"> |
|||
<rect key="frame" x="0.0" y="280" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="State/Province" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2Ta-4K-fuz"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Select" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="3aF-XI-LRm"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="L5Y-xb-hga"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="3v6-GM-odc"> |
|||
<rect key="frame" x="0.0" y="350" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="District" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1Oh-OJ-MbF"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Select" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="c9l-2n-RJY"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="7dg-OF-1iL"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="bzY-A3-FCG"> |
|||
<rect key="frame" x="0.0" y="420" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="City" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qfo-M5-t8w"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter receiver's city" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="N3C-4L-Ki7"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="ZJj-ea-FF9"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits" keyboardType="alphabet"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="9F3-Xx-a4b"> |
|||
<rect key="frame" x="0.0" y="490" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Address" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LNf-pd-Eek"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter receiver's Address" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="vGP-fz-jbt"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="aT8-I4-gb5"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits" keyboardType="alphabet"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="gkA-0g-al0"> |
|||
<rect key="frame" x="0.0" y="560" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Relation" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cpR-Ig-Yjj"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Select" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="cpV-EL-0Z1"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="4Mm-K7-RVg"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="tiu-zQ-uyv"> |
|||
<rect key="frame" x="0.0" y="630" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Mobile No." textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0EU-CA-Xqg"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter receiver's mobile number" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="I91-DE-eBH"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="foA-9z-yu9"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits" keyboardType="phonePad"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="0Pw-sK-dSz"> |
|||
<rect key="frame" x="0.0" y="700" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Email (Optional)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VuB-gh-lpj"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter receiver's email address" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="9ed-NF-4Bh"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="gjZ-nr-ohs"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits" keyboardType="emailAddress"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="LKF-1o-Pqq"> |
|||
<rect key="frame" x="0.0" y="770" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Transfer Reason" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Lea-V1-U7a"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Select" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="mXe-ay-5tu"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="TWh-Sv-GdZ"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="y6j-nq-IbR" userLabel="IDType"> |
|||
<rect key="frame" x="0.0" y="840" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ID Type (Optional)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0Ex-bx-3lb"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Select" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="1WU-BO-ZpU"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="C3g-2v-oL8"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="BYi-if-5GJ" userLabel="IDValue"> |
|||
<rect key="frame" x="0.0" y="910" width="355" height="60"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ID Value (Optional)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="87k-Ld-cG5"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="17"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="14"/> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<textField opaque="NO" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter receiver's ID number" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="Ltw-9N-ptX"> |
|||
<rect key="frame" x="0.0" y="17" width="355" height="43"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="43" id="dby-rF-LPT"/> |
|||
</constraints> |
|||
<color key="textColor" red="0.2901960784" green="0.2901960784" blue="0.2901960784" alpha="1" colorSpace="calibratedRGB"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<textInputTraits key="textInputTraits"/> |
|||
</textField> |
|||
</subviews> |
|||
</stackView> |
|||
</subviews> |
|||
</stackView> |
|||
</subviews> |
|||
</stackView> |
|||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hBn-N7-WLX"> |
|||
<rect key="frame" x="77.5" y="1068" width="200" height="50"/> |
|||
<color key="backgroundColor" red="0.92941176469999998" green="0.10980392160000001" blue="0.14117647059999999" alpha="1" colorSpace="calibratedRGB"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="50" id="Pf2-eV-pfK"/> |
|||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="200" id="Vvb-MP-l4m"/> |
|||
</constraints> |
|||
<fontDescription key="fontDescription" name="SanFranciscoText-Regular" family="San Francisco Text" pointSize="18"/> |
|||
<state key="normal" title="Save "> |
|||
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
|||
</state> |
|||
<userDefinedRuntimeAttributes> |
|||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius"> |
|||
<integer key="value" value="25"/> |
|||
</userDefinedRuntimeAttribute> |
|||
</userDefinedRuntimeAttributes> |
|||
<connections> |
|||
<action selector="save:" destination="kMF-hK-7F1" eventType="touchUpInside" id="D6V-Ym-MO4"/> |
|||
</connections> |
|||
</button> |
|||
</subviews> |
|||
<constraints> |
|||
<constraint firstItem="z9e-FF-DG8" firstAttribute="top" secondItem="akh-17-UFk" secondAttribute="top" id="35H-UP-oGI"/> |
|||
<constraint firstAttribute="trailing" secondItem="z9e-FF-DG8" secondAttribute="trailing" id="EtU-2z-bzD"/> |
|||
<constraint firstItem="hBn-N7-WLX" firstAttribute="top" secondItem="z9e-FF-DG8" secondAttribute="bottom" constant="30" id="REn-Yx-r0i"/> |
|||
<constraint firstItem="z9e-FF-DG8" firstAttribute="leading" secondItem="akh-17-UFk" secondAttribute="leading" id="gZR-eI-pdM"/> |
|||
</constraints> |
|||
</stackView> |
|||
</subviews> |
|||
<color key="backgroundColor" red="0.90588235289999997" green="0.92941176469999998" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/> |
|||
<constraints> |
|||
<constraint firstItem="akh-17-UFk" firstAttribute="top" secondItem="M1b-5m-MXH" secondAttribute="top" id="Jcl-xd-Byn"/> |
|||
<constraint firstAttribute="trailing" secondItem="akh-17-UFk" secondAttribute="trailing" constant="10" id="Ld3-Yf-MaS"/> |
|||
<constraint firstItem="akh-17-UFk" firstAttribute="leading" secondItem="M1b-5m-MXH" secondAttribute="leading" constant="10" id="SdE-uQ-cgJ"/> |
|||
<constraint firstAttribute="bottom" secondItem="akh-17-UFk" secondAttribute="bottom" constant="30" id="ZJE-3z-IvH"/> |
|||
</constraints> |
|||
</view> |
|||
</subviews> |
|||
<constraints> |
|||
<constraint firstItem="M1b-5m-MXH" firstAttribute="width" secondItem="3nW-iI-E46" secondAttribute="width" id="OJH-xN-4FE"/> |
|||
<constraint firstAttribute="trailing" secondItem="M1b-5m-MXH" secondAttribute="trailing" id="RCv-dS-Gyh"/> |
|||
<constraint firstItem="M1b-5m-MXH" firstAttribute="top" secondItem="3nW-iI-E46" secondAttribute="top" id="Sr9-ko-AKR"/> |
|||
<constraint firstAttribute="bottom" secondItem="M1b-5m-MXH" secondAttribute="bottom" constant="1" id="lR1-0V-0z4"/> |
|||
<constraint firstItem="M1b-5m-MXH" firstAttribute="leading" secondItem="3nW-iI-E46" secondAttribute="leading" id="pg5-Ph-Mxb"/> |
|||
</constraints> |
|||
</scrollView> |
|||
</subviews> |
|||
<color key="backgroundColor" red="0.90588235289999997" green="0.92941176469999998" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/> |
|||
<constraints> |
|||
<constraint firstItem="3nW-iI-E46" firstAttribute="leading" secondItem="3Iv-qS-bw4" secondAttribute="leading" id="Cm8-Qj-P3n"/> |
|||
<constraint firstItem="3nW-iI-E46" firstAttribute="trailing" secondItem="3Iv-qS-bw4" secondAttribute="trailing" id="Fzh-Lq-bo0"/> |
|||
<constraint firstItem="3Iv-qS-bw4" firstAttribute="bottom" secondItem="3nW-iI-E46" secondAttribute="bottom" id="U86-gg-H9I"/> |
|||
<constraint firstItem="3nW-iI-E46" firstAttribute="top" secondItem="yoy-Sr-xLN" secondAttribute="top" id="YB6-t2-bit"/> |
|||
</constraints> |
|||
<viewLayoutGuide key="safeArea" id="3Iv-qS-bw4"/> |
|||
</view> |
|||
<navigationItem key="navigationItem" id="LaZ-5l-poO"> |
|||
<barButtonItem key="leftBarButtonItem" systemItem="stop" id="N9z-U9-oZS"> |
|||
<color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
|||
<connections> |
|||
<action selector="touchClose:" destination="kMF-hK-7F1" id="YIj-Ux-Ee8"/> |
|||
</connections> |
|||
</barButtonItem> |
|||
</navigationItem> |
|||
<size key="freeformSize" width="375" height="1100"/> |
|||
<connections> |
|||
<outlet property="addressTextField" destination="vGP-fz-jbt" id="1pN-zR-qH8"/> |
|||
<outlet property="addressTitleLabel" destination="LNf-pd-Eek" id="fa3-08-4RQ"/> |
|||
<outlet property="cityTextField" destination="N3C-4L-Ki7" id="ilJ-we-lbg"/> |
|||
<outlet property="cityTitleLabel" destination="qfo-M5-t8w" id="N7d-e3-1rB"/> |
|||
<outlet property="countryNameTitleLabel" destination="alw-ys-yay" id="vRQ-Oa-Pfm"/> |
|||
<outlet property="countryTextField" destination="DdO-f1-13k" id="wBn-TT-uSg"/> |
|||
<outlet property="districtStackView" destination="3v6-GM-odc" id="cOf-hf-cya"/> |
|||
<outlet property="districtTextField" destination="c9l-2n-RJY" id="fro-Am-Qzk"/> |
|||
<outlet property="districtTitleLabel" destination="1Oh-OJ-MbF" id="mbC-V4-ERq"/> |
|||
<outlet property="emailTextField" destination="9ed-NF-4Bh" id="JKY-4a-kGk"/> |
|||
<outlet property="firstNameTextField" destination="9Hx-oK-GHi" id="p0R-9y-ddA"/> |
|||
<outlet property="firstNameTitleLabel" destination="uA5-jW-mEK" id="LW5-dY-6u1"/> |
|||
<outlet property="headerTItleLabel" destination="Gt4-fi-XBm" id="ZxT-SD-W8B"/> |
|||
<outlet property="idNumberTextField" destination="Ltw-9N-ptX" id="wsj-ox-uHZ"/> |
|||
<outlet property="idNumberTitleLabel" destination="87k-Ld-cG5" id="POX-We-zdJ"/> |
|||
<outlet property="idTypeTextField" destination="1WU-BO-ZpU" id="8gL-nW-9Ny"/> |
|||
<outlet property="idTypeTitleLabel" destination="0Ex-bx-3lb" id="yqu-dL-fTh"/> |
|||
<outlet property="lastNameTextField" destination="Wd8-zG-klN" id="SwR-Rv-7au"/> |
|||
<outlet property="lastNametitleLabel" destination="tkw-bR-Oy9" id="O5M-hY-gva"/> |
|||
<outlet property="middleNameTextField" destination="Eej-kG-wrd" id="qZZ-WV-0Fb"/> |
|||
<outlet property="middleNameTitleLabel" destination="K3e-7G-CJy" id="ejQ-T4-Hhb"/> |
|||
<outlet property="mobileTextField" destination="I91-DE-eBH" id="lCt-uX-rjw"/> |
|||
<outlet property="mobileTitleLabel" destination="0EU-CA-Xqg" id="qPr-EH-xwc"/> |
|||
<outlet property="provienceStackView" destination="Ju9-Yd-QNB" id="YnN-ze-HYG"/> |
|||
<outlet property="relationTextField" destination="cpV-EL-0Z1" id="GlD-vw-GUi"/> |
|||
<outlet property="relationTitleLabel" destination="cpR-Ig-Yjj" id="hHf-aF-nEf"/> |
|||
<outlet property="saveButton" destination="hBn-N7-WLX" id="d0E-Jg-y6d"/> |
|||
<outlet property="stateProvinceTextField" destination="3aF-XI-LRm" id="HeN-hq-hZ8"/> |
|||
<outlet property="stateTitleLabel" destination="2Ta-4K-fuz" id="dMe-e9-Mz4"/> |
|||
<outlet property="transferReasonTextField" destination="mXe-ay-5tu" id="49A-we-hRd"/> |
|||
<outlet property="transferTitleLabel" destination="Lea-V1-U7a" id="0Qg-Ga-3Rr"/> |
|||
</connections> |
|||
</viewController> |
|||
<placeholder placeholderIdentifier="IBFirstResponder" id="L82-2L-Rzd" userLabel="First Responder" sceneMemberID="firstResponder"/> |
|||
</objects> |
|||
<point key="canvasLocation" x="6168.8000000000002" y="100.74962518740631"/> |
|||
</scene> |
|||
<!--Navigation Controller--> |
|||
<scene sceneID="SGX-0a-Mas"> |
|||
<objects> |
|||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="Lf4-Nk-n85" sceneMemberID="viewController"> |
|||
<toolbarItems/> |
|||
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="yVa-5W-WN4"> |
|||
<rect key="frame" x="0.0" y="20" width="375" height="44"/> |
|||
<autoresizingMask key="autoresizingMask"/> |
|||
</navigationBar> |
|||
<nil name="viewControllers"/> |
|||
<connections> |
|||
<segue destination="kMF-hK-7F1" kind="relationship" relationship="rootViewController" id="vQw-j4-oqI"/> |
|||
</connections> |
|||
</navigationController> |
|||
<placeholder placeholderIdentifier="IBFirstResponder" id="py8-2F-JDg" userLabel="First Responder" sceneMemberID="firstResponder"/> |
|||
</objects> |
|||
<point key="canvasLocation" x="5229.6000000000004" y="100.29985007496252"/> |
|||
</scene> |
|||
</scenes> |
|||
<color key="tintColor" red="0.78177064659999995" green="0.55228364470000002" blue="0.018981300289999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|||
</document> |
@ -1,536 +0,0 @@ |
|||
// |
|||
// EditReciepientViewController.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 28/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import UIKit |
|||
|
|||
class EditReciepientViewController: UIViewController { |
|||
|
|||
struct StringConstants { |
|||
let headerText = "who_to_send_text".localized() |
|||
let firstNameText = "first_name_text".localized() |
|||
let middleNameText = "enter_receiver_middlename_text".localized() |
|||
let lastNameText = "last_name_text".localized() |
|||
let countryNameText = "country_text".localized() |
|||
let stateText = "state_text".localized() |
|||
let districtText = "district_text".localized() |
|||
let addressText = "address_text".localized() |
|||
let relationText = "relation_text".localized() |
|||
let mobileText = "mobile_number_text".localized() |
|||
let transferText = "transfer_reason_text".localized() |
|||
let cityText = "city_text".localized() |
|||
let saveText = "save_text".localized() |
|||
// placeholder |
|||
let firstnamePlaceholder = "placeholder_enter_receiver_firstname_text".localized() |
|||
let lastnamePlaceholder = "placeholder_enter_receiver_middle_text".localized() |
|||
let middlenamePlaceholder = "placeholder_enter_receiver_lastname_text".localized() |
|||
let countryPlaceholder = "placeholder_select_country_text".localized() |
|||
let statePlaceholder = "state_placeholder_text".localized() |
|||
let districtPlaceholder = "district_placeholder_text".localized() |
|||
let addressPlaceholder = "placeholder_enter_receiver_address_text".localized() |
|||
let relationPlaceholder = "placeholder_select_relation_text".localized() |
|||
let mobilePlaceholder = "placeholder_enter_reciever_mobile_number_text".localized() |
|||
let transferPlaceholder = "placeholder_select_transfer_reason_text".localized() |
|||
let cityPlaceholder = "placeholder_enter_city_text".localized() |
|||
} |
|||
|
|||
// MARK: IBOutlets |
|||
@IBOutlet weak var firstNameTextField: UITextField! |
|||
@IBOutlet weak var middleNameTextField: UITextField! |
|||
@IBOutlet weak var lastNameTextField: UITextField! |
|||
@IBOutlet weak var countryTextField: UITextField! |
|||
@IBOutlet weak var stateProvinceTextField: UITextField! |
|||
@IBOutlet weak var districtTextField: UITextField! |
|||
@IBOutlet weak var addressTextField: UITextField! |
|||
@IBOutlet weak var relationTextField: UITextField! |
|||
@IBOutlet weak var mobileTextField: UITextField! |
|||
@IBOutlet weak var emailTextField: UITextField! |
|||
@IBOutlet weak var transferReasonTextField: UITextField! |
|||
@IBOutlet weak var cityTextField: UITextField! |
|||
|
|||
@IBOutlet weak var saveButton: UIButton! |
|||
|
|||
@IBOutlet weak var provienceStackView: UIStackView! |
|||
@IBOutlet weak var districtStackView: UIStackView! |
|||
|
|||
|
|||
// titles |
|||
@IBOutlet weak var headerTItleLabel: UILabel! |
|||
@IBOutlet weak var firstNameTitleLabel: UILabel! |
|||
@IBOutlet weak var middleNameTitleLabel: UILabel! |
|||
@IBOutlet weak var lastNametitleLabel: UILabel! |
|||
@IBOutlet weak var countryNameTitleLabel: UILabel! |
|||
@IBOutlet weak var stateTitleLabel: UILabel! |
|||
@IBOutlet weak var districtTitleLabel: UILabel! |
|||
@IBOutlet weak var addressTitleLabel: UILabel! |
|||
@IBOutlet weak var relationTitleLabel: UILabel! |
|||
@IBOutlet weak var mobileTitleLabel: UILabel! |
|||
@IBOutlet weak var transferTitleLabel: UILabel! |
|||
@IBOutlet weak var cityTitleLabel: UILabel! |
|||
|
|||
// Optional |
|||
@IBOutlet weak var idTypeTitleLabel: UILabel! |
|||
@IBOutlet weak var idTypeTextField: UITextField! |
|||
|
|||
@IBOutlet weak var idNumberTitleLabel: UILabel! |
|||
@IBOutlet weak var idNumberTextField: UITextField! |
|||
|
|||
|
|||
// MARK: Properties |
|||
|
|||
var presenter: EditReciepientModuleInterface? |
|||
var countries: [SendMoneyCountryViewModel]? |
|||
var transferReasons: [SendMoneyTransferReasonViewModel]? |
|||
var relations: [SendMoneyRelationViewModel]? |
|||
|
|||
private var receiverIDTypes: [ReceiverIdType]? |
|||
|
|||
private var idTypes = [" --- Select ID Type --- "] |
|||
|
|||
private var selectedIDType: ReceiverIdType? { |
|||
didSet { |
|||
reciepient?.idType = selectedIDType?.id |
|||
idTypeTextField.text = selectedIDType?.text |
|||
|
|||
idNumberTextField.isEnabled = selectedIDType != nil ? true : false |
|||
|
|||
if !idNumberTextField.isEnabled { |
|||
idNumberTextField.text = nil |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
var reciepient: EditRecipientRecipientViewModel? { |
|||
didSet { |
|||
self.populateInformations() |
|||
} |
|||
} |
|||
|
|||
var selectedCountry: SendMoneyCountryViewModel? { |
|||
didSet { |
|||
self.countryTextField.text = selectedCountry?.name |
|||
let shouldShowProvienceField = (selectedCountry?.proviencesRequired ?? "" ) == "true" |
|||
|
|||
self.configureView(isHidden: !shouldShowProvienceField) |
|||
|
|||
self.reciepient?.countryId = self.selectedCountry?.id |
|||
self.reciepient?.country = self.selectedCountry?.name |
|||
|
|||
mobileTextField.setCoutryFlag(with: selectedCountry?.code) |
|||
} |
|||
} |
|||
|
|||
var selectedProvience: SendMoneyProvienceViewModel? { |
|||
didSet { |
|||
self.stateProvinceTextField.text = selectedProvience?.name |
|||
self.reciepient?.stateId = self.selectedProvience?.id |
|||
} |
|||
} |
|||
|
|||
var selectedDistrict: SendMoneyDistrictViewModel? { |
|||
didSet { |
|||
self.districtTextField.text = selectedDistrict?.name |
|||
self.reciepient?.districtId = self.selectedDistrict?.id |
|||
} |
|||
} |
|||
|
|||
var selectedRelation: SendMoneyRelationViewModel? { |
|||
didSet { |
|||
self.relationTextField.text = selectedRelation?.title |
|||
self.reciepient?.relationId = self.selectedRelation?.id |
|||
} |
|||
} |
|||
|
|||
var selectedTransferReason: SendMoneyTransferReasonViewModel? { |
|||
didSet { |
|||
self.transferReasonTextField.text = selectedTransferReason?.title |
|||
self.reciepient?.reasonId = selectedTransferReason?.id |
|||
} |
|||
} |
|||
|
|||
// MARK: VC's Life cycle |
|||
|
|||
override func viewDidLoad() { |
|||
super.viewDidLoad() |
|||
self.setup() |
|||
self.setupDelegates() |
|||
self.setupTargets() |
|||
self.presenter?.viewIsReady() |
|||
} |
|||
|
|||
override func viewWillAppear(_ animated: Bool) { |
|||
super.viewWillAppear(animated) |
|||
self.navigationItem.title = "Edit Receipient" |
|||
} |
|||
|
|||
// MARK: IBActions |
|||
@IBAction func save(_ sender: UIButton) { |
|||
self.view.endEditing(true) |
|||
if let reciepient = self.reciepient { |
|||
guard |
|||
let code = selectedCountry?.code?.lowercased(), |
|||
let countryCode = CountryEnum(rawValue: code), |
|||
let mobileNumber = mobileTextField.text else { return } |
|||
|
|||
reciepient.mobileNumber = countryCode.phoneCode + mobileNumber |
|||
|
|||
self.presenter?.save(model: reciepient) |
|||
} |
|||
} |
|||
|
|||
@IBAction func touchClose(_ sender: UIBarButtonItem) { |
|||
dismiss(animated: true, completion: nil) |
|||
} |
|||
// MARK: Other Functions |
|||
|
|||
|
|||
private func setup() { |
|||
// all setup should be done here |
|||
self.setupNavigation() |
|||
self.configureView(isHidden: true) |
|||
self.configureLanguage() |
|||
|
|||
// for pickerView |
|||
let pickerView = UIPickerView() |
|||
idTypeTextField.inputView = pickerView |
|||
pickerView.delegate = self |
|||
pickerView.dataSource = self |
|||
|
|||
} |
|||
|
|||
private func configureLanguage() { |
|||
self.headerTItleLabel.text = StringConstants().headerText |
|||
self.firstNameTitleLabel.text = StringConstants().firstNameText |
|||
self.middleNameTitleLabel.text = StringConstants().middleNameText |
|||
self.lastNametitleLabel.text = StringConstants().lastNameText |
|||
self.countryNameTitleLabel.text = StringConstants().countryNameText |
|||
self.stateTitleLabel.text = StringConstants().stateText |
|||
self.districtTitleLabel.text = StringConstants().districtText |
|||
self.addressTitleLabel.text = StringConstants().addressText |
|||
self.relationTitleLabel.text = StringConstants().relationText |
|||
self.mobileTitleLabel.text = StringConstants().mobileText |
|||
self.transferTitleLabel.text = StringConstants().transferText |
|||
idTypeTitleLabel.text = "id_type_title_text".localized() |
|||
idNumberTitleLabel.text = "id_number_title_text".localized() |
|||
idTypeTextField.placeholder = "placeholder_enter_id_type_text".localized() |
|||
idNumberTextField.placeholder = "placeholder_enter_id_number_text".localized() |
|||
|
|||
cityTitleLabel.text = StringConstants().cityText |
|||
saveButton.setTitle(StringConstants().saveText, for: .normal) |
|||
|
|||
// placeholders |
|||
|
|||
self.firstNameTextField.placeholder = StringConstants().firstnamePlaceholder |
|||
self.middleNameTextField.placeholder = StringConstants().middlenamePlaceholder |
|||
self.lastNameTextField.placeholder = StringConstants().lastnamePlaceholder |
|||
self.countryTextField.placeholder = StringConstants().countryPlaceholder |
|||
self.stateProvinceTextField.placeholder = StringConstants().statePlaceholder |
|||
self.districtTextField.placeholder = StringConstants().districtPlaceholder |
|||
self.addressTextField.placeholder = StringConstants().addressPlaceholder |
|||
self.relationTextField.placeholder = StringConstants().relationPlaceholder |
|||
self.mobileTextField.placeholder = StringConstants().mobilePlaceholder |
|||
self.transferReasonTextField.placeholder = StringConstants().transferPlaceholder |
|||
cityTextField.placeholder = StringConstants().cityPlaceholder |
|||
} |
|||
|
|||
private func configureView(isHidden: Bool) { |
|||
self.provienceStackView.isHidden = isHidden |
|||
self.districtStackView.isHidden = isHidden |
|||
} |
|||
|
|||
private func setupDelegates() { |
|||
self.countryTextField.delegate = self |
|||
self.stateProvinceTextField.delegate = self |
|||
self.districtTextField.delegate = self |
|||
self.relationTextField.delegate = self |
|||
self.transferReasonTextField.delegate = self |
|||
} |
|||
|
|||
private func setupTargets() { |
|||
[firstNameTextField, middleNameTextField, lastNameTextField, countryTextField, stateProvinceTextField, districtTextField, addressTextField, relationTextField, mobileTextField, emailTextField, transferReasonTextField, cityTextField, idNumberTextField].forEach({ |
|||
$0?.addTarget(self, action: #selector(self.textFieldChanged(sender:)), for: UIControl.Event.editingChanged) |
|||
}) |
|||
} |
|||
|
|||
@objc private func textFieldChanged(sender: UITextField) { |
|||
sender.removeNonASCII() |
|||
|
|||
switch sender { |
|||
case firstNameTextField: |
|||
self.reciepient?.firstName = firstNameTextField.text! |
|||
case middleNameTextField: |
|||
self.reciepient?.middleName = middleNameTextField.text! |
|||
case lastNameTextField: () |
|||
//FIXME |
|||
// self.reciepient?.lastName = lastNameTextField.text! |
|||
case cityTextField: |
|||
self.reciepient?.city = cityTextField.text! |
|||
case addressTextField: |
|||
self.reciepient?.address = addressTextField.text! |
|||
case mobileTextField: |
|||
self.reciepient?.mobileNumber = mobileTextField.text! |
|||
case emailTextField: |
|||
self.reciepient?.email = emailTextField.text! |
|||
case idNumberTextField: |
|||
reciepient?.idNumber = idNumberTextField.text |
|||
default: |
|||
break |
|||
} |
|||
} |
|||
|
|||
private func populateInformations() { |
|||
self.firstNameTextField.text = self.reciepient?.firstName |
|||
self.middleNameTextField.text = self.reciepient?.middleName |
|||
//FIXME |
|||
// self.lastNameTextField.text = self.reciepient?.lastName |
|||
|
|||
let relation = self.relations?.filter({ |
|||
$0.title == self.reciepient?.relation |
|||
}).first?.title |
|||
|
|||
self.relationTextField.text = relation |
|||
self.emailTextField.text = self.reciepient?.email |
|||
|
|||
let transferReason = self.transferReasons?.filter({ |
|||
$0.title == self.reciepient?.reason |
|||
}).first?.title |
|||
|
|||
self.transferReasonTextField.text = transferReason |
|||
|
|||
self.cityTextField.text = reciepient?.city |
|||
self.addressTextField.text = reciepient?.address |
|||
|
|||
|
|||
self.selectedIDType = receiverIDTypes? |
|||
.filter{ $0.id == self.reciepient?.idType} |
|||
.first |
|||
|
|||
self.idNumberTextField.text = reciepient?.idNumber |
|||
|
|||
|
|||
// For sync country in reciepient model |
|||
self.selectedCountry = self.countries?.filter{ |
|||
$0.name == self.reciepient?.country |
|||
}.first |
|||
|
|||
// For sync provience in reciepient model |
|||
self.selectedProvience = self.selectedCountry?.proviences?.filter{ |
|||
$0.id == self.reciepient?.stateId |
|||
}.first |
|||
|
|||
// For sync district in reciepient model |
|||
self.selectedDistrict = self.selectedProvience?.districts?.filter{ |
|||
$0.id == self.reciepient?.districtId |
|||
}.first |
|||
|
|||
guard |
|||
let code = selectedCountry?.code?.lowercased(), |
|||
let countryCode = CountryEnum(rawValue: code) else { return } |
|||
|
|||
self.mobileTextField.text = self.reciepient?.mobileNumber?.replacingOccurrences(of: countryCode.phoneCode, with: "") |
|||
|
|||
|
|||
|
|||
} |
|||
|
|||
private func setupNavigation() { |
|||
self.navigationItem.backBarButtonItem?.image = |
|||
#imageLiteral(resourceName: "backIconBlack") |
|||
self.navigationController?.navigationBar.tintColor = UIColor.black |
|||
} |
|||
|
|||
private func showCountryPickerview() { |
|||
TablePresenterWireframe().openWith( |
|||
tag: 0, |
|||
delegate: self, |
|||
model: countries, |
|||
source: self |
|||
) |
|||
} |
|||
|
|||
private func showProviencePickerview() { |
|||
TablePresenterWireframe().openWith( |
|||
tag: 1, |
|||
delegate: self, |
|||
model: self.selectedCountry?.proviences, |
|||
source: self |
|||
) |
|||
} |
|||
|
|||
private func showDistrictPickerview() { |
|||
TablePresenterWireframe().openWith( |
|||
tag: 2, |
|||
delegate: self, |
|||
model: selectedProvience?.districts, |
|||
source: self |
|||
) |
|||
} |
|||
|
|||
private func showRelationPickerView() { |
|||
TablePresenterWireframe().openWith( |
|||
tag: 3, |
|||
delegate: self, |
|||
model: relations, |
|||
source: self |
|||
) |
|||
} |
|||
|
|||
private func showTransferReasonPickerView() { |
|||
TablePresenterWireframe().openWith( |
|||
tag: 4, |
|||
delegate: self, |
|||
model: self.transferReasons, |
|||
source: self |
|||
) |
|||
} |
|||
|
|||
|
|||
func showLoading() { |
|||
self.showProgressHud() |
|||
} |
|||
|
|||
func hideLoading() { |
|||
self.hideProgressHud() |
|||
} |
|||
|
|||
func show(error: String) { |
|||
self.alert(type: .error, message: error) |
|||
} |
|||
|
|||
|
|||
|
|||
} |
|||
|
|||
// MARK: EditReciepientViewInterface |
|||
extension EditReciepientViewController: EditReciepientViewInterface { |
|||
func show(countries: [SendMoneyCountryViewModel]) { |
|||
self.countries = countries |
|||
} |
|||
|
|||
func show(transferReasons: [SendMoneyTransferReasonViewModel]) { |
|||
self.transferReasons = transferReasons |
|||
} |
|||
|
|||
func show(relations: [SendMoneyRelationViewModel]) { |
|||
self.relations = relations |
|||
} |
|||
|
|||
func show(recipient: EditRecipientRecipientViewModel) { |
|||
self.reciepient = recipient |
|||
} |
|||
|
|||
func setReceiverIDTypes(with model: [ReceiverIdType]?) { |
|||
receiverIDTypes = model |
|||
|
|||
guard let types = receiverIDTypes?.compactMap ({ $0.text }) else { |
|||
return |
|||
} |
|||
|
|||
idTypes.append(contentsOf: types) |
|||
|
|||
} |
|||
} |
|||
|
|||
extension EditReciepientViewController: UITextFieldDelegate { |
|||
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { |
|||
switch textField { |
|||
case countryTextField: |
|||
showCountryPickerview() |
|||
return false |
|||
case stateProvinceTextField: |
|||
self.showProviencePickerview() |
|||
return false |
|||
case districtTextField: |
|||
self.showDistrictPickerview() |
|||
return false |
|||
case relationTextField: |
|||
self.showRelationPickerView() |
|||
return false |
|||
case transferReasonTextField: |
|||
self.showTransferReasonPickerView() |
|||
return false |
|||
default: |
|||
return true |
|||
} |
|||
} |
|||
} |
|||
|
|||
// MARK: - TablePresenterDelegate |
|||
extension EditReciepientViewController: TablePresenterDelegate { |
|||
func tablePresenterView(_ viewController: TablePresenterViewController) -> TablePresenterConfiguration { |
|||
let title: String |
|||
let searchPlaceholder: String |
|||
|
|||
switch viewController.view.tag { |
|||
case 0: |
|||
title = "select_country_text".localized() |
|||
searchPlaceholder = "search_country_text".localized() |
|||
|
|||
case 1: |
|||
title = "province_placeholder_text".localized() |
|||
searchPlaceholder = "search_province_text".localized() |
|||
|
|||
case 2: |
|||
title = "select_district_text".localized() |
|||
searchPlaceholder = "search_district_text".localized() |
|||
|
|||
case 3: |
|||
title = "select_relation_text".localized() |
|||
searchPlaceholder = "search_relation_text".localized() |
|||
|
|||
case 4: |
|||
title = "select_transfer_reason_text".localized() |
|||
searchPlaceholder = "search_transfer_reason_text".localized() |
|||
|
|||
default: |
|||
title = "" |
|||
searchPlaceholder = "" |
|||
} |
|||
|
|||
return TablePresenterConfiguration( |
|||
presenterTitle: title, |
|||
closeButtonTitle: "cancel_text".localized(), |
|||
notFoundTitle: "no_result_found_text".localized(), |
|||
searchBarPlaceHolder: searchPlaceholder, |
|||
isUseSearchBar: true |
|||
) |
|||
} |
|||
|
|||
func tablePresenterView(_ viewController: TablePresenterViewController, didSelectModel model: TablePresenterProtocol?) { |
|||
switch viewController.view.tag { |
|||
case 0: selectedCountry = model as? SendMoneyCountryViewModel |
|||
case 1: selectedProvience = model as? SendMoneyProvienceViewModel |
|||
case 2: selectedDistrict = model as? SendMoneyDistrictViewModel |
|||
case 3: selectedRelation = model as? SendMoneyRelationViewModel |
|||
case 4: selectedTransferReason = model as? SendMoneyTransferReasonViewModel |
|||
default: break |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
// MARK: - UIPickerViewDataSource |
|||
extension EditReciepientViewController: UIPickerViewDataSource { |
|||
func numberOfComponents(in pickerView: UIPickerView) -> Int { |
|||
return 1 |
|||
} |
|||
|
|||
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { |
|||
return idTypes.count |
|||
} |
|||
} |
|||
|
|||
extension EditReciepientViewController: UIPickerViewDelegate { |
|||
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { |
|||
return idTypes[row] |
|||
} |
|||
|
|||
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { |
|||
selectedIDType = row > 0 ? receiverIDTypes?[row - 1] : nil |
|||
} |
|||
} |
@ -1,19 +0,0 @@ |
|||
// |
|||
// EditReciepientViewInterface.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 28/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
protocol EditReciepientViewInterface: class { |
|||
func show(error: String) |
|||
func show(countries: [SendMoneyCountryViewModel]) |
|||
func show(transferReasons: [SendMoneyTransferReasonViewModel]) |
|||
func show(relations: [SendMoneyRelationViewModel]) |
|||
func show(recipient: EditRecipientRecipientViewModel) |
|||
func showLoading() |
|||
func hideLoading() |
|||
|
|||
func setReceiverIDTypes(with model: [ReceiverIdType]?) |
|||
} |
@ -1,54 +0,0 @@ |
|||
// |
|||
// EditReciepientWireframe.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 28/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import UIKit |
|||
|
|||
class EditReciepientWireframe { |
|||
weak var view: UIViewController! |
|||
var receipient: Recipient! |
|||
} |
|||
|
|||
extension EditReciepientWireframe: EditReciepientWireframeInput { |
|||
|
|||
var storyboardName: String {return "EditReciepient"} |
|||
|
|||
func getMainView() -> UIViewController { |
|||
let service = EditReciepientService() |
|||
let interactor = EditReciepientInteractor.init(service: service, reciepient: receipient) |
|||
let presenter = EditReciepientPresenter() |
|||
let viewController = viewControllerFromStoryboard(of: EditReciepientViewController.self) |
|||
|
|||
viewController.presenter = presenter |
|||
interactor.output = presenter |
|||
presenter.interactor = interactor |
|||
presenter.wireframe = self |
|||
presenter.view = viewController |
|||
|
|||
self.view = viewController |
|||
return viewController |
|||
} |
|||
|
|||
func edit(reciepient: Recipient, source: UINavigationController) { |
|||
self.receipient = reciepient |
|||
self.pushMainView(in: source) |
|||
} |
|||
|
|||
func editWithNavigation(who recipient: Recipient, on base: UIViewController) { |
|||
self.receipient = recipient |
|||
let navigationVC = UINavigationController(rootViewController: getMainView()) |
|||
|
|||
base.present(navigationVC, animated: true, completion: nil) |
|||
} |
|||
|
|||
func dismiss() { |
|||
if let navigation = self.view.navigationController { |
|||
navigation.popViewController(animated: true) |
|||
} |
|||
} |
|||
} |
|||
|
@ -1,13 +0,0 @@ |
|||
// |
|||
// EditReciepientWireframeInput.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 28/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
protocol EditReciepientWireframeInput: WireframeInput { |
|||
func dismiss() |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue