Browse Source

App name, login screen changes and registeration changes

master
puranpanthi 1 year ago
parent
commit
01791ce331
  1. 56
      GME Remit.xcodeproj/project.pbxproj
  2. 52
      GME Remit.xcodeproj/xcshareddata/xcschemes/GME Remit.xcscheme
  3. BIN
      GME Remit/.DS_Store
  4. 19
      GME Remit/APIs/RestApiManager.swift
  5. 61
      GME Remit/APIs/Router/APIRouter.swift
  6. 4
      GME Remit/APIs/UrlManager.swift
  7. 2
      GME Remit/Extensions/UIColor+Ext.swift
  8. 19
      GME Remit/Models/Request/NewRegisterRequestModel.swift
  9. 14
      GME Remit/Modules/HowToDeposit/User Interface/View/HowToDeposit.storyboard
  10. 2
      GME Remit/Modules/Login/User Interface/Wireframe/LoginWireframe.swift
  11. 2
      GME Remit/Modules/Profile/PersonalInformation/User Interface/View/PersonalInformationViewController.swift
  12. 16
      GME Remit/Modules/RegisterModules/NewUserRegister/Application Logic/Interactor/NewUserRegisterInteractor.swift
  13. 4
      GME Remit/Modules/RegisterModules/NewUserRegister/Application Logic/Interactor/NewUserRegisterInteractorIO.swift
  14. 24
      GME Remit/Modules/RegisterModules/NewUserRegister/Application Logic/Service/NewUserRegisterServiceType.swift
  15. 2
      GME Remit/Modules/RegisterModules/NewUserRegister/Module Interface/NewUserRegisterModuleInterface.swift
  16. 15
      GME Remit/Modules/RegisterModules/NewUserRegister/User Interface/Presenter/NewUserRegisterPresenter.swift
  17. 265
      GME Remit/Modules/RegisterModules/NewUserRegister/User Interface/View/NewUserRegister.storyboard
  18. 270
      GME Remit/Modules/RegisterModules/NewUserRegister/User Interface/View/NewUserRegisterViewController.swift
  19. 2
      GME Remit/Modules/RegisterModules/NewUserRegister/User Interface/View/NewUserRegisterViewInterface.swift
  20. 94
      GME Remit/Modules/RegisterModules/VerifyIDNumber/User Interface/Presenter/VerifyIDNumberPresenter.swift
  21. 430
      GME Remit/Modules/RegisterModules/VerifyIDNumber/User Interface/View/VerifyIDNumberViewController.swift
  22. 26
      GME Remit/Modules/RegisterModules/VerifyIDNumber/User Interface/View/VerifyIDNumberViewInterface.swift
  23. 88
      GME Remit/Modules/RegisterModules/VerifyIDNumber/User Interface/Wireframe/VerifyIDNumberWireframe.swift
  24. 22
      GME Remit/Modules/RegisterModules/VerifyIDNumber/User Interface/Wireframe/VerifyIDNumberWireframeInput.swift
  25. 62
      GME Remit/Modules/SplashScreen/User Interface/View/SplashScreen.storyboard
  26. 28
      GME Remit/Modules/SplashScreen/User Interface/View/SplashScreenViewController.swift
  27. 2
      GME Remit/Modules/SplashScreen/User Interface/Wireframe/SplashScreenWireframe.swift
  28. 11
      GME Remit/MultiLanguages/en.lproj/Localizable.strings
  29. 225
      GME Remit/Shared/AddressCityViewController.storyboard
  30. 80
      GME Remit/Shared/AddressCityViewController.swift
  31. 110
      GME Remit/Shared/Models/Address.swift
  32. 42
      GME Remit/Shared/Models/PostalData.swift
  33. 61
      GME Remit/Shared/Models/PostalInformation.swift
  34. BIN
      GME Remit/Supported Files/Assets.xcassets/.DS_Store
  35. 21
      GME Remit/Supported Files/Assets.xcassets/IME_london-coin-curve.imageset/Contents.json
  36. BIN
      GME Remit/Supported Files/Assets.xcassets/IME_london-coin-curve.imageset/IME_london-coin-curve.png
  37. 23
      GME Remit/Supported Files/Assets.xcassets/Profilered-round.imageset/Contents.json
  38. BIN
      GME Remit/Supported Files/Assets.xcassets/Profilered-round.imageset/Profilered-round 1.png
  39. BIN
      GME Remit/Supported Files/Assets.xcassets/Profilered-round.imageset/Profilered-round 2.png
  40. BIN
      GME Remit/Supported Files/Assets.xcassets/Profilered-round.imageset/Profilered-round.png
  41. 23
      GME Remit/Supported Files/Assets.xcassets/imeLondon.imageset/Contents.json
  42. BIN
      GME Remit/Supported Files/Assets.xcassets/imeLondon.imageset/imeLondon 1.png
  43. BIN
      GME Remit/Supported Files/Assets.xcassets/imeLondon.imageset/imeLondon 2.png
  44. BIN
      GME Remit/Supported Files/Assets.xcassets/imeLondon.imageset/imeLondon.png
  45. 8
      GME Remit/Supported Files/Assets.xcassets/jme_launch_icon.imageset/Contents.json
  46. BIN
      GME Remit/Supported Files/Assets.xcassets/jme_launch_icon.imageset/jme.png
  47. BIN
      GME Remit/Supported Files/Assets.xcassets/jme_launch_icon.imageset/jme_launch_icon.png
  48. 18
      GME Remit/Supported Files/Base.lproj/LaunchScreen.storyboard
  49. 24
      GME Remit/Supported Files/Colors.xcassets/ThemeBlue.colorset/Contents.json
  50. 28
      GME Remit/Supported Files/Colors.xcassets/ThemeMixedRed.colorset/Contents.json
  51. 18
      GME Remit/Supported Files/Colors.xcassets/ThemeRed.colorset/Contents.json
  52. 12
      GME Remit/Supported Files/Colors.xcassets/ThemeRedDark.colorset/Contents.json
  53. 26
      GME Remit/Supported Files/Colors.xcassets/ThemeWhiteRed.colorset/Contents.json
  54. 32
      GME Remit/Supported Files/Info.plist
  55. 18
      GME Remit/Utilities/TablePresenter/User Interface/View/Cell/TableCell.swift
  56. 4
      Pods/Pods.xcodeproj/project.pbxproj

56
GME Remit.xcodeproj/project.pbxproj

@ -650,6 +650,11 @@
9FD261181FD00458007A511D /* GME RemitUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FD261171FD00458007A511D /* GME RemitUITests.swift */; };
A25AC5E8ABE8F4D673E0E23C /* Pods_GMERemittanceTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAF65434A568194C42395975 /* Pods_GMERemittanceTests.framework */; };
B28F83785E653C4FCC6E5788 /* Pods_GMERemittanceUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 834CF738D8A5B7292E373A1F /* Pods_GMERemittanceUITests.framework */; };
BC0FB8E62AAE260200C9D59A /* PostalInformation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC0FB8E52AAE260200C9D59A /* PostalInformation.swift */; };
BC0FB8E82AAE272A00C9D59A /* PostalData.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC0FB8E72AAE272A00C9D59A /* PostalData.swift */; };
BC0FB8EA2AAE27DF00C9D59A /* Address.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC0FB8E92AAE27DF00C9D59A /* Address.swift */; };
BC0FB9652AB4C74100C9D59A /* AddressCityViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC0FB9642AB4C74100C9D59A /* AddressCityViewController.swift */; };
BC0FB9672AB56CD500C9D59A /* AddressCityViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BC0FB9662AB56CD500C9D59A /* AddressCityViewController.storyboard */; };
BE4B1C97227C926700E923E8 /* NSError+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE4B1C96227C926700E923E8 /* NSError+Ext.swift */; };
BEC9AFFC224FC49C00A2DA06 /* BiometricAuthenticationModuleInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEC9AFE9224FC49C00A2DA06 /* BiometricAuthenticationModuleInterface.swift */; };
BEC9AFFD224FC49C00A2DA06 /* BiometricAuthenticationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEC9AFEC224FC49C00A2DA06 /* BiometricAuthenticationService.swift */; };
@ -1555,7 +1560,7 @@
949C5F7928B2013800E50E31 /* InviteUserViewInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InviteUserViewInterface.swift; sourceTree = "<group>"; };
9F983C0B2024883D001DCB3F /* UIColor+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Ext.swift"; sourceTree = "<group>"; };
9FA00FBD1FEE69AF0049753E /* UIView+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Ext.swift"; sourceTree = "<group>"; };
9FD260F41FD00458007A511D /* JME Remit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "JME Remit.app"; sourceTree = BUILT_PRODUCTS_DIR; };
9FD260F41FD00458007A511D /* IME London.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "IME London.app"; sourceTree = BUILT_PRODUCTS_DIR; };
9FD260F71FD00458007A511D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
9FD260FC1FD00458007A511D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
9FD260FE1FD00458007A511D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
@ -1567,6 +1572,11 @@
9FD261171FD00458007A511D /* GME RemitUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GME RemitUITests.swift"; sourceTree = "<group>"; };
9FD261191FD00458007A511D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
A122A469B588D608F544863C /* Pods-GMERemittanceTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GMERemittanceTests.debug.xcconfig"; path = "Target Support Files/Pods-GMERemittanceTests/Pods-GMERemittanceTests.debug.xcconfig"; sourceTree = "<group>"; };
BC0FB8E52AAE260200C9D59A /* PostalInformation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostalInformation.swift; sourceTree = "<group>"; };
BC0FB8E72AAE272A00C9D59A /* PostalData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostalData.swift; sourceTree = "<group>"; };
BC0FB8E92AAE27DF00C9D59A /* Address.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Address.swift; sourceTree = "<group>"; };
BC0FB9642AB4C74100C9D59A /* AddressCityViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddressCityViewController.swift; sourceTree = "<group>"; };
BC0FB9662AB56CD500C9D59A /* AddressCityViewController.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = AddressCityViewController.storyboard; sourceTree = "<group>"; };
BE4B1C96227C926700E923E8 /* NSError+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSError+Ext.swift"; sourceTree = "<group>"; };
BEC9AFE9224FC49C00A2DA06 /* BiometricAuthenticationModuleInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BiometricAuthenticationModuleInterface.swift; sourceTree = "<group>"; };
BEC9AFEC224FC49C00A2DA06 /* BiometricAuthenticationService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BiometricAuthenticationService.swift; sourceTree = "<group>"; };
@ -4845,6 +4855,8 @@
7EC9DDFF24A9AEBD004A0AD8 /* Models */,
7E364CE924A4455A007D6E02 /* PasswordInputViewController.swift */,
7E364CEA24A4455A007D6E02 /* PasswordInputViewController.xib */,
BC0FB9642AB4C74100C9D59A /* AddressCityViewController.swift */,
BC0FB9662AB56CD500C9D59A /* AddressCityViewController.storyboard */,
);
path = Shared;
sourceTree = "<group>";
@ -4870,7 +4882,10 @@
children = (
7EC9DE0024A9AECE004A0AD8 /* RewardProduct.swift */,
7EC9DE0224A9AEEC004A0AD8 /* Branch.swift */,
BC0FB8E92AAE27DF00C9D59A /* Address.swift */,
7EC9DE0424A9AF65004A0AD8 /* BranchContainer.swift */,
BC0FB8E52AAE260200C9D59A /* PostalInformation.swift */,
BC0FB8E72AAE272A00C9D59A /* PostalData.swift */,
7EC9DE0824A9C1E0004A0AD8 /* BankInformation.swift */,
);
path = Models;
@ -5897,7 +5912,7 @@
9FD260F51FD00458007A511D /* Products */ = {
isa = PBXGroup;
children = (
9FD260F41FD00458007A511D /* JME Remit.app */,
9FD260F41FD00458007A511D /* IME London.app */,
9FD261081FD00458007A511D /* GMERemittanceTests.xctest */,
9FD261131FD00458007A511D /* GMERemittanceUITests.xctest */,
739F817A234ADA75003ABCF3 /* SnapshotUITest.xctest */,
@ -7330,7 +7345,7 @@
282F6A5F296483AE00E324FF /* Algorithms */,
);
productName = GMERemittance;
productReference = 9FD260F41FD00458007A511D /* JME Remit.app */;
productReference = 9FD260F41FD00458007A511D /* IME London.app */;
productType = "com.apple.product-type.application";
};
9FD261071FD00458007A511D /* GMERemittanceTests */ = {
@ -7535,6 +7550,7 @@
5565FF231FE275E5002934E9 /* SanFranciscoText-BoldItalic.otf in Resources */,
5565FF221FE275E5002934E9 /* SanFranciscoDisplay-Light.otf in Resources */,
73149F6B22E5AF8000D66B26 /* LauncherScreen.storyboard in Resources */,
BC0FB9672AB56CD500C9D59A /* AddressCityViewController.storyboard in Resources */,
D9B7ADF92130048E009B0564 /* ExchangeRates.storyboard in Resources */,
73AEFF7A2334A13100A967FB /* TransactionHistoryGroup.storyboard in Resources */,
404654BA24E6666F000E5BFB /* PINKeyboardView.xib in Resources */,
@ -8592,6 +8608,7 @@
D950BED421549242008367A1 /* HomeInteractorIO.swift in Sources */,
73195AB622FD14D500151434 /* SetupRecipientInteractor.swift in Sources */,
7389600A22C2F208003FEA90 /* TablePresenterModuleInterface.swift in Sources */,
BC0FB9652AB4C74100C9D59A /* AddressCityViewController.swift in Sources */,
281EF60728ACCC4D0092E5E6 /* HowToDepositWireframe.swift in Sources */,
73551A5926E5B1290030B302 /* OtpVerificationService.swift in Sources */,
540E0CA42A555F4D0023FA8B /* ChooseKycDocumentTypeInteractorIO.swift in Sources */,
@ -8600,6 +8617,7 @@
049E61A51FF0AE9D00817C76 /* UrlManager.swift in Sources */,
7EDBFC2924B3098E00AD5D4D /* WithdrawFromWalletDetailWireframe.swift in Sources */,
89739E3B24459A630016251B /* SendMoneyReceiptPresenter.swift in Sources */,
BC0FB8E82AAE272A00C9D59A /* PostalData.swift in Sources */,
73341C90238F4FE900394676 /* UILabel+Ext.swift in Sources */,
D9AFE856215C7166005F3A25 /* HomeCollectionTableViewCell.swift in Sources */,
DDCDF66D2A0ACBDB00124D00 /* AllRecipientsWireframeInput.swift in Sources */,
@ -8707,12 +8725,14 @@
738714BB237CE86E0038FCB1 /* InboundReceiptViewController.swift in Sources */,
73168A2322F3D01A00878038 /* TablePresenterProtocol.swift in Sources */,
EC2D9C232826C68E00996921 /* SlipUploadViewController.swift in Sources */,
BC0FB8EA2AAE27DF00C9D59A /* Address.swift in Sources */,
7327567F23B0456400BF66C5 /* ManageAgreementServiceType.swift in Sources */,
D950BEDE215496F6008367A1 /* HomeRemainingLimitTableViewCell.swift in Sources */,
28AB139528E552C200191695 /* NotificationDetailInteractorIO.swift in Sources */,
7388821922CDF20F00592960 /* UITextField+Ext.swift in Sources */,
73B6D68C230640D400A0CB6E /* BranchModel.swift in Sources */,
737262582705A749004086B8 /* RenewIDServiceType.swift in Sources */,
BC0FB8E62AAE260200C9D59A /* PostalInformation.swift in Sources */,
73D3F3E3270C65B5006C3F97 /* CDDIViewControllerViewController.swift in Sources */,
7389601122C2F208003FEA90 /* TablePresenterWireframe.swift in Sources */,
73FBBF2423F231A8009D7627 /* DetailNotificationService.swift in Sources */,
@ -8931,7 +8951,7 @@
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
EXCLUDED_ARCHS = arm64;
FRAMEWORK_SEARCH_PATHS = "";
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
@ -8996,6 +9016,7 @@
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
EXCLUDED_ARCHS = arm64;
FRAMEWORK_SEARCH_PATHS = "";
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
@ -9027,17 +9048,18 @@
CODE_SIGN_ENTITLEMENTS = "GME Remit.entitlements";
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 11;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 68KRG7GPAV;
DEVELOPMENT_TEAM = 926Z34F5DW;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/GME\\ Remit/ThirdParty/virtualKeyboard/mtk_module",
"$(PROJECT_DIR)",
);
INFOPLIST_FILE = "GME Remit/Supported Files/Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = "JME Remit";
INFOPLIST_KEY_CFBundleDisplayName = "IME London";
IPHONEOS_DEPLOYMENT_TARGET = 13.6;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@ -9047,15 +9069,15 @@
"$(inherited)",
"$(PROJECT_DIR)/GME\\ Remit/ThirdParty/virtualKeyboard/mtk_module",
);
MARKETING_VERSION = 1.6.2;
MARKETING_VERSION = 2.0.0;
ONLY_ACTIVE_ARCH = YES;
"OTHER_CODE_SIGN_FLAGS[sdk=*]" = "--generate-entitlement-der";
OTHER_LDFLAGS = (
"$(OTHER_LDFLAGS)",
"-ObjC",
);
PRODUCT_BUNDLE_IDENTIFIER = com.japan.jmeremit;
PRODUCT_NAME = "JME Remit";
PRODUCT_BUNDLE_IDENTIFIER = com.imelondon;
PRODUCT_NAME = "IME London";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "GME Remit/Supported Files/GMERemittance-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@ -9073,11 +9095,11 @@
CODE_SIGN_ENTITLEMENTS = "GME Remit/GME RemitRelease.entitlements";
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 11;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 68KRG7GPAV;
DEVELOPMENT_TEAM = 926Z34F5DW;
ENABLE_BITCODE = NO;
EXCLUDED_ARCHS = "";
EXCLUDED_ARCHS = arm64;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/GME\\ Remit/ThirdParty/virtualKeyboard/mtk_module",
@ -9085,7 +9107,7 @@
);
GCC_OPTIMIZATION_LEVEL = 0;
INFOPLIST_FILE = "GME Remit/Supported Files/Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = "JME Remit";
INFOPLIST_KEY_CFBundleDisplayName = "IME London";
IPHONEOS_DEPLOYMENT_TARGET = 13.6;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@ -9095,14 +9117,14 @@
"$(inherited)",
"$(PROJECT_DIR)/GME\\ Remit/ThirdParty/virtualKeyboard/mtk_module",
);
MARKETING_VERSION = 1.6.2;
MARKETING_VERSION = 2.0.0;
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = (
"$(OTHER_LDFLAGS)",
"-ObjC",
);
PRODUCT_BUNDLE_IDENTIFIER = com.japan.jmeremit;
PRODUCT_NAME = "JME Remit";
PRODUCT_BUNDLE_IDENTIFIER = com.imelondon;
PRODUCT_NAME = "IME London";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "GME Remit/Supported Files/GMERemittance-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";

52
GME Remit.xcodeproj/xcshareddata/xcschemes/GME Remit.xcscheme

@ -15,21 +15,17 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "9FD260F31FD00458007A511D"
BuildableName = "JME Remit.app"
BuildableName = "IME London.app"
BlueprintName = "GME Remit"
ReferencedContainer = "container:GME Remit.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "NO"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "9FD261071FD00458007A511D"
@ -37,9 +33,13 @@
BlueprintName = "GMERemittanceTests"
ReferencedContainer = "container:GME Remit.xcodeproj">
</BuildableReference>
</TestableReference>
<TestableReference
skipped = "NO">
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "NO"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "9FD261121FD00458007A511D"
@ -47,9 +47,13 @@
BlueprintName = "GMERemittanceUITests"
ReferencedContainer = "container:GME Remit.xcodeproj">
</BuildableReference>
</TestableReference>
<TestableReference
skipped = "NO">
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "NO"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "739F8179234ADA75003ABCF3"
@ -57,7 +61,15 @@
BlueprintName = "SnapshotUITest"
ReferencedContainer = "container:GME Remit.xcodeproj">
</BuildableReference>
</TestableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
@ -75,7 +87,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "9FD260F31FD00458007A511D"
BuildableName = "JME Remit.app"
BuildableName = "IME London.app"
BlueprintName = "GME Remit"
ReferencedContainer = "container:GME Remit.xcodeproj">
</BuildableReference>
@ -92,7 +104,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "9FD260F31FD00458007A511D"
BuildableName = "JME Remit.app"
BuildableName = "IME London.app"
BlueprintName = "GME Remit"
ReferencedContainer = "container:GME Remit.xcodeproj">
</BuildableReference>

BIN
GME Remit/.DS_Store

19
GME Remit/APIs/RestApiManager.swift

@ -65,9 +65,15 @@ class RestApiMananger {
let lang = Utility.getLanguageHeader(for: currentLanguage)
//live value
return ["Authorization": "Basic " + ("5220221D2E737FD60C28243:fUjXn2r5" +
":" + getUUID()).toBase64(),
"GME-TOKEN" : "@NcRfTjWnZr4u7x!A%D*G-KaPdSgVkXp",
// return ["Authorization": "Basic " + ("5220221D2E737FD60C28243:fUjXn2r5" +
// ":" + getUUID()).toBase64(),
// "GME-TOKEN" : "@NcRfTjWnZr4u7x!A%D*G-KaPdSgVkXp",
// "Content-Type": "application/json",
// "lang" : lang
// ]
return ["Authorization": "Basic " + ("cGRTSTlvRERKbXNUbThZOTpjUWVUaFdtWjoxMWk=" + getUUID()).toBase64(),
"GME-TOKEN" : "39587YT398@FBQOW8RY3#948R7GB@CNEQW987GF87$TD18$1981..919@@##joghndvberteiru",
"Content-Type": "application/json",
"lang" : lang
]
@ -88,6 +94,13 @@ class RestApiMananger {
let lang = Utility.getLanguageHeader(for: currentLanguage)
//live value
// return [
// "Authorization": "Bearer " + accessCode,
// "GME-TOKEN" : "@NcRfTjWnZr4u7x!A%D*G-KaPdSgVkXp",
// "Content-Type": "application/json",
// "clientId": Utility.getMyKftcClientId(),
// "lang" : lang
// ]
return [
"Authorization": "Bearer " + accessCode,
"GME-TOKEN" : "@NcRfTjWnZr4u7x!A%D*G-KaPdSgVkXp",

61
GME Remit/APIs/Router/APIRouter.swift

@ -55,6 +55,8 @@ enum APIRouter {
// MARK: - New User Registration
case verifyIdNumber(id: String, type: String, fullName: String, dob: String)
case newUserRegister(model: NewUserRegisterModel, fcmToken: String)
case searchPostalCode(id: String, code: String)
case fetchCountryAndGender
case submitKYC(model: KYCSaveInformation)
case requestRegistrationOTP(userId: String)
case requestBeneficiaryOTP(userId: String, receiverID: String)
@ -144,18 +146,28 @@ extension APIRouter: ApiServiceType {
let lang = Utility.getLanguageHeader(for: currentLanguage)
// live value
let authValue = "5220221D2E737FD60C28243:fUjXn2r5:\(uuid)".toBase64()
// let authValue = "5220221D2E737FD60C28243:fUjXn2r5:\(uuid)".toBase64()
let authValue = "cGRTSTlvRERKbXNUbThZOTpjUWVUaFdtWjoxMWk="
// // uat value
// let authValue = "162021E171B825A55C52024823:cQeThWmZ:11i;\(uuid)".toBase64()
// live value
// return [
// "Authorization": "Basic \(authValue)",
// "GME-TOKEN" : "@NcRfTjWnZr4u7x!A%D*G-KaPdSgVkXp",
// "Content-Type": "application/json",
// "lang" : lang,
// "uuid" : self.uuid
// ]
return [
"Authorization": "Basic \(authValue)",
"GME-TOKEN" : "@NcRfTjWnZr4u7x!A%D*G-KaPdSgVkXp",
"GME-TOKEN" : "39587YT398@FBQOW8RY3#948R7GB@CNEQW987GF87$TD18$1981..919@@##joghndvberteiru",
"Content-Type": "application/json",
"clientId": "pdSI9oDDJmsTm8Y9",
"lang" : lang,
"uuid" : self.uuid
"uuid" : "27af9a45-6b32-4866-a859-5ff6e40114e9"
]
// uat value
@ -173,16 +185,25 @@ extension APIRouter: ApiServiceType {
let accessCode = GMEDB.shared.user.string(.accessCode) ?? ""
let currentLanguage = Localize.currentLanguage()
let lang = Utility.getLanguageHeader(for: currentLanguage)
let authValue = "cGRTSTlvRERKbXNUbThZOTpjUWVUaFdtWjoxMWk="
//live token
// return [
// "Authorization": "Bearer " + accessCode,
// "GME-TOKEN" : "@NcRfTjWnZr4u7x!A%D*G-KaPdSgVkXp",
// "Content-Type": "application/json",
// "clientId": Utility.getMyKftcClientId(),
// "lang" : lang,
// "uuid" : self.uuid
// ]
return [
"Authorization": "Bearer " + accessCode,
"GME-TOKEN" : "@NcRfTjWnZr4u7x!A%D*G-KaPdSgVkXp",
"Authorization": "Basic \(authValue)",
"GME-TOKEN" : "39587YT398@FBQOW8RY3#948R7GB@CNEQW987GF87$TD18$1981..919@@##joghndvberteiru",
"Content-Type": "application/json",
"clientId": Utility.getMyKftcClientId(),
"clientId": "pdSI9oDDJmsTm8Y9",
"lang" : lang,
"uuid" : self.uuid
"uuid" : "27af9a45-6b32-4866-a859-5ff6e40114e9"
]
@ -660,6 +681,10 @@ extension APIRouter {
return "\(baseUrlWithoutVersion)v3/validation"
case .newUserRegister:
return "\(baseUrlWithoutVersion)v1/mobile/newUserRegister"
case .searchPostalCode:
return "\(baseUrlWithoutVersion)v3/mobile/AddressLookup"
case .fetchCountryAndGender:
return "\(baseUrlWithoutVersion)v1/mobile/loadForm/login-kyc"
case .requestRegistrationOTP:
return "\(baseUrlWithoutVersion)v1/mobile/requestOTP"
case .requestBeneficiaryOTP:
@ -801,6 +826,10 @@ extension APIRouter {
return .post
case .newUserRegister:
return .post
case .searchPostalCode:
return .post
case .fetchCountryAndGender:
return .get
case .requestRegistrationOTP:
return .post
case .requestBeneficiaryOTP:
@ -966,6 +995,13 @@ extension APIRouter {
"FullName": model.fullName ?? "",
"DOB": model.dob ?? "",
"Password": model.password ?? "",
"Mobilenumber": model.mobileNumber ?? "",
"PostalCode" : model.postalCode ?? "",
"Gender" : model.gender ?? "",
"City" :model.city ?? "",
"Address1": model.address1,
"Address2": model.address2,
"Nationality": model.nationality,
"ConfirmPassword": model.confirmPassword ?? "",
"clientId": Utility.getCliendId(),
"uuid": self.uuid,
@ -977,6 +1013,15 @@ extension APIRouter {
"referralCode": model.referralCode ?? ""
]
case .searchPostalCode(let id, let code):
return [
"UserId": id,
"PostalCode": code
]
case .fetchCountryAndGender:
return nil
case .requestRegistrationOTP(let userId):
return [
"userId": userId,

4
GME Remit/APIs/UrlManager.swift

@ -17,9 +17,9 @@ class UrlManager {
let baseSocialURL = ""
let liveServerUrl = "https://mobile.japanremit.com:8443/api/" // "https://mobile.japanremit.com:8443/api/"
// let liveServerUrl = "https://mobile.japanremit.com:8443/api/" // "https://mobile.japanremit.com:8443/api/"
let testUrl = "https://sandboxapi.japanremit.com:8083/api/" //"http://202.166.220.36:8083/api/"
let liveServerUrl = "http://77.68.15.91:1082/api/"
init() {
switch server {
case .live:

2
GME Remit/Extensions/UIColor+Ext.swift

@ -44,7 +44,7 @@ extension UIColor {
}
class var theme2E89FF: UIColor {
return UIColor.init(hex: "#2E89FF")
return UIColor.init(hex: "#262262")
}
class var themeGreen: UIColor {

19
GME Remit/Models/Request/NewRegisterRequestModel.swift

@ -18,6 +18,15 @@ class NewUserRegisterModel: Serializer {
var confirmPassword: String?
var referralCode: String?
var mobileNumber: String?
var gender: String?
var email: String?
var postalCode: String?
var address1: String?
var address2: String?
var city: String?
var nationality: String?
func serialize() -> [String : String] {
var dict = ["":""]
dict["ResidenceCardNumber"] = self.residenceCardNumber ?? ""
@ -27,6 +36,16 @@ class NewUserRegisterModel: Serializer {
dict["Password"] = self.password ?? ""
dict["ConfirmPassword"] = self.confirmPassword ?? ""
dict["referralCode"] = self.referralCode ?? ""
dict["MobileNumber"] = self.mobileNumber ?? ""
dict["Gender"] = self.gender ?? ""
dict["Email"] = self.email ?? ""
dict["PostalCode"] = self.postalCode ?? ""
dict["Address1"] = self.address1 ?? ""
dict["Address2"] = self.address2 ?? ""
dict["City"] = self.city ?? ""
dict["Nationality"] = self.nationality ?? ""
return dict
}

14
GME Remit/Modules/HowToDeposit/User Interface/View/HowToDeposit.storyboard

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="HSb-ou-7T5">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="HSb-ou-7T5">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
<capability name="Named colors" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
@ -21,7 +21,7 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" bounces="NO" showsHorizontalScrollIndicator="NO" bouncesZoom="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xkA-Ls-Sdm">
<rect key="frame" x="16" y="10" width="343" height="647"/>
<rect key="frame" x="16" y="30" width="343" height="627"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="Wjq-IF-0Xw">
<rect key="frame" x="0.0" y="10" width="343" height="657"/>
@ -30,16 +30,16 @@
<rect key="frame" x="0.0" y="0.0" width="343" height="137"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" verticalHuggingPriority="249" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="DdG-Xj-DJa">
<rect key="frame" x="20" y="50" width="232" height="30"/>
<rect key="frame" x="20" y="50" width="247" height="30"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="JME Remit" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MZj-B5-8iQ">
<rect key="frame" x="0.0" y="0.0" width="149" height="30"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="IME London" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MZj-B5-8iQ">
<rect key="frame" x="0.0" y="0.0" width="164" height="30"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="30"/>
<color key="textColor" name="ThemeBlack"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="jme_logo" translatesAutoresizingMaskIntoConstraints="NO" id="CPq-S7-hat">
<rect key="frame" x="169" y="0.0" width="63" height="30"/>
<rect key="frame" x="184" y="0.0" width="63" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="GHJ-7C-6rh"/>
<constraint firstAttribute="width" constant="63" id="pbO-V2-bek"/>

2
GME Remit/Modules/Login/User Interface/Wireframe/LoginWireframe.swift

@ -13,7 +13,7 @@ import LGSideMenuController
class LoginWireframe {
weak var view: UIViewController!
lazy var mainWireframe = MainWireframe.shared
lazy var registerWireframe = VerifyIDNumberWireframe()
lazy var registerWireframe = NewUserRegisterWireframe()
lazy var forgotPasswordWireframe = ForgotPasswordWireframe()
}

2
GME Remit/Modules/Profile/PersonalInformation/User Interface/View/PersonalInformationViewController.swift

@ -31,7 +31,7 @@ class PersonalInformationViewController: UIViewController {
GMEDB.shared.user.set(model?.email, .email)
addressDetailLabel.text = model?.homeAddress
let configure = TablePresenterConfiguration(presenterTitle: "select_vity_text".localized())
let configure = TablePresenterConfiguration(presenterTitle: "select_city_text".localized())
cityNameTextField.useAsDropDown(with: configure, items: requestModel?.city)
}

16
GME Remit/Modules/RegisterModules/NewUserRegister/Application Logic/Interactor/NewUserRegisterInteractor.swift

@ -79,6 +79,22 @@ extension NewUserRegisterInteractor: NewUserRegisterInteractorInput {
}
func checkPostalCode(code: String, id: String){
service.validatePostalCode(code: code, id: id) { response in
self.output?.postalData(data: response)
} failure: {
self.output?.show(error: $0)
}
}
func getCountryAndGender() {
service.obtainCountryList() { response in
self.output?.genderData(data: response)
} failure: {
self.output?.show(error: $0)
}
}
func validateReferralCode(code: String) {
service.validateReferalCode(code: code) { response in
self.output?.obtained(data: response)

4
GME Remit/Modules/RegisterModules/NewUserRegister/Application Logic/Interactor/NewUserRegisterInteractorIO.swift

@ -11,6 +11,8 @@ protocol NewUserRegisterInteractorInput: class {
func requestOTP(userId: String)
func checkOTP(otp: String, userId: String, customerType: String, model: NewUserRegisterModel)
func validateReferralCode(code: String)
func checkPostalCode(code: String, id: String)
func getCountryAndGender()
}
protocol NewUserRegisterInteractorOutput: class {
@ -19,4 +21,6 @@ protocol NewUserRegisterInteractorOutput: class {
func loggedIn(message: String)
func showOTPView()
func obtained(data: ValidateReferralCodeModel)
func postalData(data: PostalInformation)
func genderData(data: CountryInformation)
}

24
GME Remit/Modules/RegisterModules/NewUserRegister/Application Logic/Service/NewUserRegisterServiceType.swift

@ -34,6 +34,13 @@ protocol UserRegisterService: ApiServiceType {
func validateReferalCode(code: String,
success: @escaping (ValidateReferralCodeModel) -> Void,
failure: @escaping (Error) -> Void)
func validatePostalCode(code: String, id: String,
success: @escaping (PostalInformation) -> Void,
failure: @escaping (Error) -> Void)
func obtainCountryList(success: @escaping (CountryInformation) -> Void,
failure: @escaping (Error) -> Void)
}
extension UserRegisterService {
@ -123,4 +130,21 @@ extension UserRegisterService {
// APIRouter.validateReferralCode.json(params: params, success: success, failure: failure)
}
func validatePostalCode(code: String, id: String, success: @escaping (PostalInformation) -> Void, failure: @escaping (Error) -> Void) {
APIRouter.searchPostalCode(id: id, code: code).request(
needsAuthorization: false, success: { (response: PostalInformation) in
success(response)
}, failure: {failure($0)})
}
func obtainCountryList(success: @escaping (CountryInformation) -> Void, failure: @escaping (Error) -> Void){
APIRouter.fetchCountryAndGender.request(
needsAuthorization: false, success: { (response: CountryInformation) in
success(response)
}, failure: {failure($0)})
}
}

2
GME Remit/Modules/RegisterModules/NewUserRegister/Module Interface/NewUserRegisterModuleInterface.swift

@ -13,4 +13,6 @@ protocol NewUserRegisterModuleInterface: class {
func checkOtp(otp: String, userId: String, customerType: String, model: NewUserRegisterModel)
func requestOtp(userId: String)
func validateReferralCode(code: String)
func searchPostal(code: String, id: String)
func fetchCountryAndGender()
}

15
GME Remit/Modules/RegisterModules/NewUserRegister/User Interface/Presenter/NewUserRegisterPresenter.swift

@ -49,6 +49,13 @@ extension NewUserRegisterPresenter: NewUserRegisterModuleInterface {
func validateReferralCode(code: String) {
interactor?.validateReferralCode(code: code)
}
func searchPostal(code: String, id: String) {
interactor?.checkPostalCode(code: code, id: id)
}
func fetchCountryAndGender() {
interactor?.getCountryAndGender()
}
}
// MARK: NewUserRegister interactor output interface
@ -79,4 +86,12 @@ extension NewUserRegisterPresenter: NewUserRegisterInteractorOutput {
self.view?.obtained(data: data)
}
func postalData(data: PostalInformation) {
self.view?.obtainedPostal(data: data)
}
func genderData(data: CountryInformation) {
self.view?.obtainedGenderList(data: data)
}
}

265
GME Remit/Modules/RegisterModules/NewUserRegister/User Interface/View/NewUserRegister.storyboard

@ -1,9 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="HSb-ou-7T5">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="HSb-ou-7T5">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
<capability name="Image references" minToolsVersion="12.0"/>
<capability name="Named colors" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@ -30,28 +31,26 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Rhf-wh-Xf3">
<rect key="frame" x="0.0" y="0.0" width="375" height="700"/>
<rect key="frame" x="0.0" y="20" width="375" height="680"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Hpz-pK-dJi">
<rect key="frame" x="0.0" y="0.0" width="375" height="774"/>
<rect key="frame" x="0.0" y="0.0" width="375" height="1508"/>
<subviews>
<view opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="BHl-Yz-TsV">
<rect key="frame" x="0.0" y="16" width="375" height="140.5"/>
<rect key="frame" x="0.0" y="16" width="375" height="109.5"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="WRM-UU-RTz">
<rect key="frame" x="20" y="0.0" width="335" height="132.5"/>
<rect key="frame" x="20" y="0.0" width="335" height="101.5"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="jme_logo" translatesAutoresizingMaskIntoConstraints="NO" id="iHQ-wT-AWM">
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="IME_london-coin-curve" translatesAutoresizingMaskIntoConstraints="NO" id="iHQ-wT-AWM">
<rect key="frame" x="0.0" y="0.0" width="335" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="dmh-3C-H35"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="wordWrap" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fco-Lf-bEX">
<rect key="frame" x="0.0" y="70" width="335" height="62.5"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="IME London" textAlignment="center" lineBreakMode="wordWrap" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fco-Lf-bEX">
<rect key="frame" x="0.0" y="70" width="335" height="31.5"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<string key="text">Register to
JME</string>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Medium" family="San Francisco Display" pointSize="26"/>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
@ -77,10 +76,13 @@ JME</string>
</constraints>
</view>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" spacing="35" translatesAutoresizingMaskIntoConstraints="NO" id="PLH-UK-lzh">
<rect key="frame" x="20" y="176.5" width="335" height="305"/>
<rect key="frame" x="20" y="145.5" width="335" height="1070"/>
<subviews>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Referral Code(if any)" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="tgI-Gj-osB" customClass="ValidationTextField" customModule="JME_Remit" customModuleProvider="target">
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Mobile Number" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="OVH-c2-ayv" customClass="ValidationTextField" customModule="JME_Remit" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="335" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="RH1-6p-GRn"/>
</constraints>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="17"/>
<textInputTraits key="textInputTraits"/>
@ -90,15 +92,38 @@ JME</string>
<userDefinedRuntimeAttribute type="color" keyPath="leftImageTintColor">
<color key="value" name="ThemeText"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="image" keyPath="leftImage" value="ic_referralCode"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="referalCodeEditDidEnd:" destination="HSb-ou-7T5" eventType="editingDidEnd" id="qo8-a7-BwQ"/>
<outlet property="delegate" destination="HSb-ou-7T5" id="4rD-I9-uWW"/>
</connections>
</textField>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Email Address" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="4D5-GM-71m" customClass="ValidationTextField" customModule="JME_Remit" customModuleProvider="target">
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Full Name" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="tQC-dM-0PB" customClass="ValidationTextField" customModule="JME_Remit" customModuleProvider="target">
<rect key="frame" x="0.0" y="85" width="335" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="vKU-Pz-zEt"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocapitalizationType="allCharacters"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="isShowTitle" value="NO"/>
<userDefinedRuntimeAttribute type="boolean" keyPath="isUseTitle" value="YES"/>
</userDefinedRuntimeAttributes>
</textField>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Gender" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="07f-ah-yFO" customClass="ValidationTextField" customModule="JME_Remit" customModuleProvider="target">
<rect key="frame" x="0.0" y="170" width="335" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="iFU-K5-4iP"/>
</constraints>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="17"/>
<textInputTraits key="textInputTraits"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="isShowTitle" value="NO"/>
<userDefinedRuntimeAttribute type="boolean" keyPath="isUseTitle" value="YES"/>
<userDefinedRuntimeAttribute type="color" keyPath="leftImageTintColor">
<color key="value" name="ThemeText"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textField>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Email Address" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="4D5-GM-71m" customClass="ValidationTextField" customModule="JME_Remit" customModuleProvider="target">
<rect key="frame" x="0.0" y="255" width="335" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="DaS-oc-eAq"/>
</constraints>
@ -114,8 +139,146 @@ JME</string>
<userDefinedRuntimeAttribute type="image" keyPath="leftImage" value="profile"/>
</userDefinedRuntimeAttributes>
</textField>
<stackView opaque="NO" contentMode="scaleToFill" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="oJC-Zb-Yzn">
<rect key="frame" x="0.0" y="340" width="335" height="50"/>
<subviews>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Postal Code" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="YW9-Xp-YIm" customClass="ValidationTextField" customModule="JME_Remit" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="245" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="hcv-fp-A1C"/>
</constraints>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="17"/>
<textInputTraits key="textInputTraits"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="isShowTitle" value="NO"/>
<userDefinedRuntimeAttribute type="boolean" keyPath="isUseTitle" value="YES"/>
<userDefinedRuntimeAttribute type="color" keyPath="leftImageTintColor">
<color key="value" name="ThemeText"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textField>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gt8-l7-5NO">
<rect key="frame" x="255" y="0.0" width="80" height="50"/>
<color key="backgroundColor" red="0.14901960780000001" green="0.1333333333" blue="0.38431372549999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="Ert-ds-BkS"/>
<constraint firstAttribute="width" constant="80" id="iXO-cK-gJo"/>
</constraints>
<color key="tintColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" title="Search"/>
<connections>
<action selector="searchBtnClicked:" destination="HSb-ou-7T5" eventType="touchUpInside" id="gHc-p9-PzT"/>
</connections>
</button>
</subviews>
</stackView>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Address 1" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="Bqa-5i-WXH" customClass="ValidationTextField" customModule="JME_Remit" customModuleProvider="target">
<rect key="frame" x="0.0" y="425" width="335" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="Fs4-yu-80F"/>
</constraints>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="17"/>
<textInputTraits key="textInputTraits"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="isShowTitle" value="NO"/>
<userDefinedRuntimeAttribute type="boolean" keyPath="isUseTitle" value="YES"/>
<userDefinedRuntimeAttribute type="color" keyPath="leftImageTintColor">
<color key="value" name="ThemeText"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textField>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Address 2" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="2fE-Na-uXU" customClass="ValidationTextField" customModule="JME_Remit" customModuleProvider="target">
<rect key="frame" x="0.0" y="510" width="335" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="RlD-ct-Rro"/>
</constraints>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="17"/>
<textInputTraits key="textInputTraits"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="isShowTitle" value="NO"/>
<userDefinedRuntimeAttribute type="boolean" keyPath="isUseTitle" value="YES"/>
<userDefinedRuntimeAttribute type="color" keyPath="leftImageTintColor">
<color key="value" name="ThemeText"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textField>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="City" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="kJJ-OL-34x" customClass="ValidationTextField" customModule="JME_Remit" customModuleProvider="target">
<rect key="frame" x="0.0" y="595" width="335" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="phN-af-m53"/>
</constraints>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="17"/>
<textInputTraits key="textInputTraits"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="isShowTitle" value="NO"/>
<userDefinedRuntimeAttribute type="boolean" keyPath="isUseTitle" value="YES"/>
<userDefinedRuntimeAttribute type="color" keyPath="leftImageTintColor">
<color key="value" name="ThemeText"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textField>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Nationality" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="Ddf-wq-jrf" customClass="ValidationTextField" customModule="JME_Remit" customModuleProvider="target">
<rect key="frame" x="0.0" y="680" width="335" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="FsK-7L-kik"/>
</constraints>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="17"/>
<textInputTraits key="textInputTraits"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="isShowTitle" value="NO"/>
<userDefinedRuntimeAttribute type="boolean" keyPath="isUseTitle" value="YES"/>
<userDefinedRuntimeAttribute type="color" keyPath="leftImageTintColor">
<color key="value" name="ThemeText"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textField>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Date Of Birth" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="nHC-nw-1v1" customClass="ValidationTextField" customModule="JME_Remit" customModuleProvider="target">
<rect key="frame" x="0.0" y="765" width="335" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="ATX-dq-wTB"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocapitalizationType="allCharacters"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="isShowTitle" value="NO"/>
<userDefinedRuntimeAttribute type="boolean" keyPath="isUseTitle" value="YES"/>
<userDefinedRuntimeAttribute type="image" keyPath="leftImage">
<imageReference key="value" image="ic_calender" renderingMode="hierarchical-single">
<hierarchicalColors>
<color systemColor="labelColor"/>
<color systemColor="secondaryLabelColor"/>
<color systemColor="tertiaryLabelColor"/>
</hierarchicalColors>
</imageReference>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textField>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Referral Code(if any)" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="tgI-Gj-osB" customClass="ValidationTextField" customModule="JME_Remit" customModuleProvider="target">
<rect key="frame" x="0.0" y="850" width="335" height="50"/>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="17"/>
<textInputTraits key="textInputTraits"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="isShowTitle" value="NO"/>
<userDefinedRuntimeAttribute type="boolean" keyPath="isUseTitle" value="YES"/>
<userDefinedRuntimeAttribute type="color" keyPath="leftImageTintColor">
<color key="value" name="ThemeText"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="image" keyPath="leftImage" value="ic_referralCode"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="referalCodeEditDidEnd:" destination="HSb-ou-7T5" eventType="editingDidEnd" id="qo8-a7-BwQ"/>
<outlet property="delegate" destination="HSb-ou-7T5" id="4rD-I9-uWW"/>
</connections>
</textField>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xZH-Yl-C6h">
<rect key="frame" x="0.0" y="170" width="335" height="50"/>
<rect key="frame" x="0.0" y="935" width="335" height="50"/>
<subviews>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="New Password" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Nna-RK-Ap0" customClass="ValidationTextField" customModule="JME_Remit" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="335" height="50"/>
@ -153,7 +316,7 @@ JME</string>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="KTG-JC-m0E">
<rect key="frame" x="0.0" y="255" width="335" height="50"/>
<rect key="frame" x="0.0" y="1020" width="335" height="50"/>
<subviews>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Confirm Password" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="VKi-Ky-lHV" customClass="ValidationTextField" customModule="JME_Remit" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="335" height="50"/>
@ -191,9 +354,13 @@ JME</string>
</constraints>
</view>
</subviews>
<constraints>
<constraint firstItem="nHC-nw-1v1" firstAttribute="trailing" secondItem="tQC-dM-0PB" secondAttribute="trailing" id="7fw-LF-Yta"/>
<constraint firstItem="nHC-nw-1v1" firstAttribute="leading" secondItem="tQC-dM-0PB" secondAttribute="leading" id="8qV-Aw-UUh"/>
</constraints>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" spacing="7" translatesAutoresizingMaskIntoConstraints="NO" id="el6-4W-pEE">
<rect key="frame" x="90.5" y="596.5" width="194.5" height="30"/>
<rect key="frame" x="90.5" y="1330.5" width="194.5" height="30"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Already have an Account?" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ym6-5o-j11">
<rect key="frame" x="0.0" y="0.0" width="153.5" height="30"/>
@ -217,8 +384,8 @@ JME</string>
</constraints>
</stackView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="cZG-8g-5zq">
<rect key="frame" x="20" y="516.5" width="335" height="50"/>
<color key="backgroundColor" red="0.18039215689999999" green="0.53725490200000003" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<rect key="frame" x="20" y="1250.5" width="335" height="50"/>
<color key="backgroundColor" red="0.14901960784313725" green="0.13333333333333333" blue="0.38431372549019605" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="6yO-Zm-VEK"/>
</constraints>
@ -270,17 +437,27 @@ JME</string>
</view>
<size key="freeformSize" width="375" height="700"/>
<connections>
<outlet property="address1TextField" destination="Bqa-5i-WXH" id="gnT-Qs-CQP"/>
<outlet property="address2TextField" destination="2fE-Na-uXU" id="SUB-XH-2nz"/>
<outlet property="backButton" destination="xOQ-F6-pkb" id="LDg-IN-0v7"/>
<outlet property="cityTextField" destination="kJJ-OL-34x" id="KzB-9r-w9R"/>
<outlet property="confirmPasswordToggleButton" destination="fEC-wv-1It" id="MQF-JP-V9w"/>
<outlet property="confirmPasswordTxtField" destination="VKi-Ky-lHV" id="ccg-di-iF9"/>
<outlet property="dobTextField" destination="nHC-nw-1v1" id="GO2-Zp-sdv"/>
<outlet property="existingUserLabel" destination="Ym6-5o-j11" id="BZh-d1-1Ub"/>
<outlet property="fullNameTextField" destination="tQC-dM-0PB" id="uld-6k-t3L"/>
<outlet property="genderTextField" destination="07f-ah-yFO" id="bEY-iQ-ATe"/>
<outlet property="headerTitle" destination="fco-Lf-bEX" id="zrC-eH-Ek5"/>
<outlet property="idTextField" destination="4D5-GM-71m" id="dMo-8T-Dgl"/>
<outlet property="idTextField" destination="4D5-GM-71m" id="Ox7-WK-cHo"/>
<outlet property="loginBttn" destination="Lxk-cQ-atB" id="zqJ-od-TmE"/>
<outlet property="mobileNoTextField" destination="OVH-c2-ayv" id="DmO-nO-Skb"/>
<outlet property="nationalityTextField" destination="Ddf-wq-jrf" id="rbS-cm-AQw"/>
<outlet property="passwordTextField" destination="Nna-RK-Ap0" id="b8l-Kl-gNx"/>
<outlet property="passwordToggleButton" destination="ANf-Iv-c7a" id="F4y-zO-aXy"/>
<outlet property="postalCodeTextField" destination="YW9-Xp-YIm" id="Lcl-pv-tLi"/>
<outlet property="referralCode" destination="tgI-Gj-osB" id="mJv-El-MUI"/>
<outlet property="registerBttn" destination="cZG-8g-5zq" id="Y0v-pc-QTB"/>
<outlet property="searchBtn" destination="gt8-l7-5NO" id="RMo-lO-vR1"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="8je-5K-XuW" userLabel="First Responder" sceneMemberID="firstResponder"/>
@ -289,25 +466,53 @@ JME</string>
</scene>
</scenes>
<designables>
<designable name="07f-ah-yFO">
<size key="intrinsicContentSize" width="81.5" height="34"/>
</designable>
<designable name="2fE-Na-uXU">
<size key="intrinsicContentSize" width="100.5" height="34"/>
</designable>
<designable name="4D5-GM-71m">
<size key="intrinsicContentSize" width="131.5" height="34"/>
</designable>
<designable name="Bqa-5i-WXH">
<size key="intrinsicContentSize" width="98" height="34"/>
</designable>
<designable name="Ddf-wq-jrf">
<size key="intrinsicContentSize" width="107.5" height="34"/>
</designable>
<designable name="Nna-RK-Ap0">
<size key="intrinsicContentSize" width="135" height="34"/>
</designable>
<designable name="OVH-c2-ayv">
<size key="intrinsicContentSize" width="139.5" height="34"/>
</designable>
<designable name="VKi-Ky-lHV">
<size key="intrinsicContentSize" width="161.5" height="34"/>
</designable>
<designable name="YW9-Xp-YIm">
<size key="intrinsicContentSize" width="115" height="34"/>
</designable>
<designable name="kJJ-OL-34x">
<size key="intrinsicContentSize" width="56.5" height="34"/>
</designable>
<designable name="nHC-nw-1v1">
<size key="intrinsicContentSize" width="112.5" height="34"/>
</designable>
<designable name="tQC-dM-0PB">
<size key="intrinsicContentSize" width="92.5" height="34"/>
</designable>
<designable name="tgI-Gj-osB">
<size key="intrinsicContentSize" width="176" height="34"/>
</designable>
</designables>
<color key="tintColor" red="0.78177064659999995" green="0.55228364470000002" blue="0.018981300289999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<resources>
<image name="IME_london-coin-curve" width="1200" height="1200"/>
<image name="Show" width="20" height="14"/>
<image name="back_icon" width="23" height="17"/>
<image name="back_icon" width="24" height="24"/>
<image name="ic_calender" width="19.5" height="19.5"/>
<image name="ic_referralCode" width="38" height="38"/>
<image name="jme_logo" width="93" height="60"/>
<image name="key" width="24" height="24"/>
<image name="profile" width="24" height="24"/>
<namedColor name="ThemeBlue">
@ -316,11 +521,17 @@ JME</string>
<namedColor name="ThemeText">
<color red="0.5490196078431373" green="0.58823529411764708" blue="0.62745098039215685" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</namedColor>
<systemColor name="labelColor">
<color red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</systemColor>
<systemColor name="secondaryLabelColor">
<color red="0.23529411764705882" green="0.23529411764705882" blue="0.2627450980392157" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
</systemColor>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
<systemColor name="tertiaryLabelColor">
<color red="0.23529411764705882" green="0.23529411764705882" blue="0.2627450980392157" alpha="0.29803921568627451" colorSpace="custom" customColorSpace="sRGB"/>
</systemColor>
</resources>
</document>

270
GME Remit/Modules/RegisterModules/NewUserRegister/User Interface/View/NewUserRegisterViewController.swift

@ -7,10 +7,47 @@
//
import UIKit
import RxSwift
class NewUserRegisterViewController: UIViewController {
struct StringConstants {
let mobileTitle = "mobile_text".localized()
let mobilePlaceholder = "mobile_placeholder_text".localized()
let mobileError = "mobile_error_text".localized()
let nameTitle = "full_name_text".localized()
let namePlaceholder = "full_name_placeholder_text".localized()
let nameError = "full_name_error_text".localized()
let genderTitle = "gender_text".localized()
let genderPlaceholder = "gender_placeholder_text".localized()
let genderError = "gender_error_text".localized()
let postalCodeTitle = "postal_code_text".localized()
let postalCodePlaceholder = "postal_code_placeholder_text".localized()
let postalCodeError = "postal_code_error_text".localized()
let address1Title = "address1_text".localized()
let address1Placeholder = "address1_placeholder_text".localized()
let address1Error = "address1_error_text".localized()
let address2Title = "address2_text".localized()
let address2Placeholder = "address2_placeholder_text".localized()
let address2Error = "address2_error_text".localized()
let cityTitle = "city_text".localized()
let cityPlaceholder = "city_placeholder_text".localized()
let cityError = "city_error_text".localized()
let nationalityTitle = "native_country_text".localized()
let nationalityPlaceholder = "native_country_placeholder_text".localized()
let nationalityError = "native_country_error_text".localized()
let dobTitle = "select_dob_text".localized()
let dobPlaceholder = "select_dob_placeholder_text".localized()
let dobError = "select_dob_error_text".localized()
let userIdTitle = "userid_placeholder_text".localized()
let useridPlaceholder = "email_address_text".localized()
let useridError = "user_id_empty_error".localized()
@ -29,13 +66,14 @@ class NewUserRegisterViewController: UIViewController {
let loginText = "login_text".localized()
let registerText = "register_text".localized()
let registerHeader = "register_title_text".localized()
let searchText = "search_text".localized()
}
// MARK: Properties
var customerType: String = ""
var fullName: String = ""
var dob: String = ""
var postalCode: String = ""
var presenter: NewUserRegisterModuleInterface?
private var isValid = false {
@ -50,13 +88,31 @@ class NewUserRegisterViewController: UIViewController {
var registerModel = NewUserRegisterModel()
private var validDic = [
"mobileNumber": false,
"fullName": false,
"gender": false,
"id": false,
"postalCode": false,
"address1": false,
"address2": false,
"city": false,
"country": false,
"dob": false,
"password": false,
"confirmPassword": false
]
// MARK: IBOutlets
@IBOutlet weak var mobileNoTextField: ValidationTextField!
@IBOutlet weak var fullNameTextField: ValidationTextField!
@IBOutlet weak var genderTextField: ValidationTextField!
@IBOutlet weak var idTextField: ValidationTextField!
@IBOutlet weak var postalCodeTextField: ValidationTextField!
@IBOutlet weak var address1TextField: ValidationTextField!
@IBOutlet weak var address2TextField: ValidationTextField!
@IBOutlet weak var cityTextField: ValidationTextField!
@IBOutlet weak var nationalityTextField: ValidationTextField!
@IBOutlet weak var dobTextField: ValidationTextField!
@IBOutlet weak var passwordTextField: ValidationTextField!
@IBOutlet weak var confirmPasswordTxtField: ValidationTextField!
@IBOutlet weak var existingUserLabel: UILabel!
@ -76,9 +132,12 @@ class NewUserRegisterViewController: UIViewController {
@IBOutlet weak var registerBttn: UIButton!
@IBOutlet weak var loginBttn: UIButton!
@IBOutlet weak var searchBtn: UIButton!
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var otpView: UIView!
private let disposeBag = DisposeBag()
// MARK: VC's Life cycle
override func viewDidLoad() {
@ -88,7 +147,7 @@ class NewUserRegisterViewController: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.initializeSDK()
// self.initializeSDK()
}
override func viewWillDisappear(_ animated: Bool) {
@ -103,10 +162,20 @@ class NewUserRegisterViewController: UIViewController {
@IBAction func registerBttnClicked(_ sender: UIButton) {
let model = NewUserRegisterModel()
model.userId = self.idTextField.text
model.dob = self.dob
model.fullName = self.fullName
model.dob = self.dobTextField.text
model.fullName = self.fullNameTextField.text
model.password = self.passwordTextField.text
model.confirmPassword = self.confirmPasswordTxtField.text
model.mobileNumber = self.mobileNoTextField.text
model.gender = self.genderTextField.text
model.email = self.idTextField.text
model.postalCode = self.postalCodeTextField.text
model.address1 = self.address1TextField.text
model.address2 = self.address2TextField.text
model.city = self.cityTextField.text
model.nationality = self.nationalityTextField.text
model.referralCode = isValidReferCode ? self.referralCode.text : ""
self.registerModel = model
self.presenter?.registerUser(model: model)
@ -126,35 +195,95 @@ class NewUserRegisterViewController: UIViewController {
self.presenter?.userLogin()
}
@IBAction func searchBtnClicked(_ sender: Any) {
let userId = self.idTextField.text
let postalCode = self.postalCodeTextField.text
self.postalCode = postalCode ?? ""
self.presenter?.searchPostal(code: postalCode ?? "", id: userId ?? "")
}
@IBAction func referalCodeEditDidEnd(_ sender: Any) {
if let code = referralCode.text, code != "" {
self.presenter?.validateReferralCode(code: code)
}
}
// MARK: Other Functions
var trustDockResponse: TrustDockResponse?
// var trustDockResponse: TrustDockResponse?
private func setup() {
configureLanguage()
presenter?.fetchCountryAndGender()
registerBttn.layer.cornerRadius = 6
searchBtn.layer.cornerRadius = 6
idTextField.returnKeyType = .next
idTextField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
mobileNoTextField.returnKeyType = .next
mobileNoTextField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
passwordTextField.returnKeyType = .next
passwordTextField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
confirmPasswordTxtField.returnKeyType = .next
confirmPasswordTxtField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
dobTextField.useAsDropDown(items: nil)
setDatePicker(textField: dobTextField, useMaximum: true)
dobTextField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
}
private func setDatePicker(textField: UITextField, useMaximum: Bool = false, useMinimum: Bool = false) {
let datePicker = UIDatePicker()
datePicker.datePickerMode = .date
if #available(iOS 13.4, *) {
datePicker.preferredDatePickerStyle = .wheels
}
if useMaximum {
datePicker.maximumDate = Date()
}
if useMinimum {
datePicker.minimumDate = Date()
}
textField.inputView = datePicker
datePicker.rx.controlEvent(.valueChanged).withLatestFrom(datePicker.rx.date) {$1}
.asDriverOnErrorJustComplete()
.drive(onNext: {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
textField.text = dateFormatter.string(from: $0)
textField.sendActions(for: .editingChanged)
}).disposed(by: disposeBag)
}
@objc private func editingChanged(_ textField: ValidationTextField) {
switch textField {
case mobileNoTextField:
validDic["mobileNumber"] = mobileNoTextField.isValid
case fullNameTextField:
validDic["fullName"] = fullNameTextField.isValid
case genderTextField:
validDic["gender"] = genderTextField.isValid
case idTextField:
textField.removeNonASCII()
idTextField.filterForUserIDFormat()
validDic["id"] = idTextField.isValid
case postalCodeTextField:
validDic["postalCode"] = postalCodeTextField.isValid
case address1TextField:
validDic["address1"] = address1TextField.isValid
case address2TextField:
validDic["address2"] = address2TextField.isValid
case cityTextField:
validDic["city"] = cityTextField.isValid
case nationalityTextField:
validDic["country"] = nationalityTextField.isValid
case dobTextField:
validDic["dob"] = dobTextField.isValid
case passwordTextField:
validDic["password"] = passwordTextField.isValid
case confirmPasswordTxtField:
@ -175,6 +304,42 @@ class NewUserRegisterViewController: UIViewController {
idTextField.placeholder = StringConstants().useridPlaceholder
idTextField.validCondition = { !$0.isEmpty }
mobileNoTextField.titleText = StringConstants().mobileTitle
mobileNoTextField.placeholder = StringConstants().mobilePlaceholder
mobileNoTextField.validCondition = { !$0.isEmpty }
fullNameTextField.titleText = StringConstants().nameTitle
fullNameTextField.placeholder = StringConstants().namePlaceholder
fullNameTextField.validCondition = { !$0.isEmpty }
genderTextField.titleText = StringConstants().genderTitle
genderTextField.placeholder = StringConstants().genderPlaceholder
genderTextField.validCondition = { !$0.isEmpty }
postalCodeTextField.titleText = StringConstants().postalCodeTitle
postalCodeTextField.placeholder = StringConstants().postalCodePlaceholder
postalCodeTextField.validCondition = { !$0.isEmpty }
address1TextField.titleText = StringConstants().address1Title
address1TextField.placeholder = StringConstants().address1Placeholder
address1TextField.validCondition = { !$0.isEmpty }
address2TextField.titleText = StringConstants().address2Title
address2TextField.placeholder = StringConstants().address2Placeholder
address2TextField.validCondition = { !$0.isEmpty }
cityTextField.titleText = StringConstants().cityTitle
cityTextField.placeholder = StringConstants().cityPlaceholder
cityTextField.validCondition = { !$0.isEmpty }
nationalityTextField.titleText = StringConstants().nationalityTitle
nationalityTextField.placeholder = StringConstants().nationalityPlaceholder
nationalityTextField.validCondition = { !$0.isEmpty }
dobTextField.titleText = StringConstants().dobTitle
dobTextField.placeholder = StringConstants().dobPlaceholder
dobTextField.validCondition = { !$0.isEmpty }
passwordTextField.titleText = StringConstants().passwordTitle
passwordTextField.placeholder = StringConstants().passwordPlaceholder
passwordTextField.errorMessage = StringConstants().passwordError
@ -236,9 +401,9 @@ extension NewUserRegisterViewController: NewUserRegisterViewInterface {
}
GMEDB.shared.user.set(id, .userId)
KeyChain.shared.save(data: id, key: .temporaryID)
if let trustDockResponse = self.trustDockResponse {
self.presenter?.showKyc(trudDockModel: trustDockResponse)
}
// if let trustDockResponse = self.trustDockResponse {
// self.presenter?.showKyc(trudDockModel: trustDockResponse)
// }
}
}
@ -264,42 +429,75 @@ extension NewUserRegisterViewController: NewUserRegisterViewInterface {
}
fileprivate func initializeSDK() {
// Checking internet connectivity
func obtainedPostal(data: PostalInformation) {
let address = data.data
print(address?.address)
// guard let viewController = UIStoryboard(name: "AddressCityViewController", bundle: nil)
// .instantiateViewController(withIdentifier: "AddressCityViewController") as? AddressCityViewController else {
// return
// }
//
// viewController.model = data.data!
// // viewController.delegate = self
// self.present(viewController, animated: true, completion: nil)
let requestParams = NSMutableDictionary()
self.postalCodeTextField.text = self.postalCode
let url = URL(string: "https://api.trustdock.io/v2/verifications?Authorization=gC8ULGtvqiwkMqTx4NzQexLL")!
let configure = TablePresenterConfiguration(presenterTitle: "Select City")
cityTextField.useAsDropDown(with: configure, items: address?.city)
var request = URLRequest(url: url)
let configure1 = TablePresenterConfiguration(presenterTitle: "Select Address1")
address1TextField.useAsDropDown(with: configure1, items: address?.address)
// Creating URLRequest
// var request = URLRequest(url: URL(string: "https://api.test.trustdock.io/v2/verifications?Authorization =SC5ra2f1GDqMaAVZX289bpuH") ?? "")
request.httpMethod = "POST"
request.httpBody = try? JSONSerialization.data(withJSONObject: requestParams, options: .prettyPrinted)
}
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("Bearer \("gC8ULGtvqiwkMqTx4NzQexLL")", forHTTPHeaderField: "Authorization")
func obtainedGenderList(data: CountryInformation) {
let data = data.data
let session = URLSession.shared.dataTask(with: request) {[unowned self] (data, response, error) in
guard let data = data, error == nil else {
let errorMessage = error?.localizedDescription ?? TrustDockSDKError.unknownError.localizedDescription
let configure = TablePresenterConfiguration(presenterTitle: "Select Gender")
genderTextField.useAsDropDown(with: configure, items: data?.gender)
return
let configure1 = TablePresenterConfiguration(presenterTitle: "Select nationality")
nationalityTextField.useAsDropDown(with: configure1, items: data?.nativeCountry)
}
do {
let jsonData = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
let statusCode = (response as! HTTPURLResponse).statusCode
let publicId = jsonData?["public_id"] as? String
let id = jsonData?["id"] as? String
let successMessage = (jsonData?["state"] as? String)
self.trustDockResponse = TrustDockResponse(id: id ?? "", publicID: publicId ?? "", message: successMessage ?? "", statusCode: statusCode)
} catch {
}
}
session.resume()
}
// fileprivate func initializeSDK() {
// // Checking internet connectivity
//
// let requestParams = NSMutableDictionary()
//
// let url = URL(string: "https://api.trustdock.io/v2/verifications?Authorization=gC8ULGtvqiwkMqTx4NzQexLL")!
//
// var request = URLRequest(url: url)
//
// // Creating URLRequest
// // var request = URLRequest(url: URL(string: "https://api.test.trustdock.io/v2/verifications?Authorization =SC5ra2f1GDqMaAVZX289bpuH") ?? "")
// request.httpMethod = "POST"
// request.httpBody = try? JSONSerialization.data(withJSONObject: requestParams, options: .prettyPrinted)
//
// request.addValue("application/json", forHTTPHeaderField: "Content-Type")
// request.addValue("Bearer \("gC8ULGtvqiwkMqTx4NzQexLL")", forHTTPHeaderField: "Authorization")
//
// let session = URLSession.shared.dataTask(with: request) {[unowned self] (data, response, error) in
// guard let data = data, error == nil else {
// let errorMessage = error?.localizedDescription ?? TrustDockSDKError.unknownError.localizedDescription
//
// return
// }
// do {
// let jsonData = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
//
// let statusCode = (response as! HTTPURLResponse).statusCode
//
// let publicId = jsonData?["public_id"] as? String
// let id = jsonData?["id"] as? String
// let successMessage = (jsonData?["state"] as? String)
// self.trustDockResponse = TrustDockResponse(id: id ?? "", publicID: publicId ?? "", message: successMessage ?? "", statusCode: statusCode)
//
// } catch {
// }
// }
// session.resume()
// }
}

2
GME Remit/Modules/RegisterModules/NewUserRegister/User Interface/View/NewUserRegisterViewInterface.swift

@ -14,4 +14,6 @@ protocol NewUserRegisterViewInterface: class {
func showOtpView()
func success()
func obtained(data: ValidateReferralCodeModel)
func obtainedPostal(data: PostalInformation)
func obtainedGenderList(data: CountryInformation)
}

94
GME Remit/Modules/RegisterModules/VerifyIDNumber/User Interface/Presenter/VerifyIDNumberPresenter.swift

@ -1,48 +1,48 @@
////
//// VerifyIDNumberPresenter.swift
//// GME Remit
////
//// Created by Shiran on 8/4/20.
////Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved.
////
//
// VerifyIDNumberPresenter.swift
// GME Remit
//
// Created by Shiran on 8/4/20.
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
class VerifyIDNumberPresenter {
// MARK: Properties
weak var view: VerifyIDNumberViewInterface?
var interactor: VerifyIDNumberInteractorInput?
var wireframe: VerifyIDNumberWireframeInput?
// MARK: Converting entities
}
// MARK: VerifyIDNumber module interface
extension VerifyIDNumberPresenter: VerifyIDNumberModuleInterface {
func newUserRegister(customerType: String, fullName: String, Dob: String) {
self.wireframe?.newUserRegister(customerType: customerType, fullName: fullName, Dob: Dob)
}
func verifyIdNumber(id: String, type: String, fullName: String, dob: String) {
self.view?.showLoading()
self.interactor?.verifyIdNumber(id: id, type: type, fullName: fullName, dob: dob)
}
}
// MARK: VerifyIDNumber interactor output interface
extension VerifyIDNumberPresenter: VerifyIDNumberInteractorOutput {
func show(error: Error) {
self.view?.hideLoading()
self.view?.show(error: error.localizedDescription)
}
func success(message: String) {
self.view?.hideLoading()
self.view?.show(message: message)
}
}
//import Foundation
//
//class VerifyIDNumberPresenter {
//
// // MARK: Properties
//
// weak var view: VerifyIDNumberViewInterface?
// var interactor: VerifyIDNumberInteractorInput?
// var wireframe: VerifyIDNumberWireframeInput?
//
// // MARK: Converting entities
//}
//
// // MARK: VerifyIDNumber module interface
//
//extension VerifyIDNumberPresenter: VerifyIDNumberModuleInterface {
// func newUserRegister(customerType: String, fullName: String, Dob: String) {
// self.wireframe?.newUserRegister(customerType: customerType, fullName: fullName, Dob: Dob)
// }
//
// func verifyIdNumber(id: String, type: String, fullName: String, dob: String) {
// self.view?.showLoading()
// self.interactor?.verifyIdNumber(id: id, type: type, fullName: fullName, dob: dob)
// }
//
//}
//
//// MARK: VerifyIDNumber interactor output interface
//
//extension VerifyIDNumberPresenter: VerifyIDNumberInteractorOutput {
// func show(error: Error) {
// self.view?.hideLoading()
// self.view?.show(error: error.localizedDescription)
// }
//
// func success(message: String) {
// self.view?.hideLoading()
// self.view?.show(message: message)
// }
//}

430
GME Remit/Modules/RegisterModules/VerifyIDNumber/User Interface/View/VerifyIDNumberViewController.swift

@ -1,216 +1,216 @@
////
//// VerifyIDNumberViewController.swift
//// GME Remit
////
//// Created by Shiran on 8/4/20.
////Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved.
////
//
//import UIKit
//import RxSwift
//import RxCocoa
//import Foundation
//
//class VerifyIDNumberViewController: UIViewController {
//
// struct StringConstants {
// let residenceIdTitle = "residence_id_placeholder".localized()
// let residenceIdPlaceholder = "residence_id_placeholder".localized()
// let residenceIdError = "residence_id_error".localized()
// let headerTitle = "register_title_text".localized()
// let verifyBtnTitle = "verify_text".localized()
// let fullNameText = "full_name_text".localized()
// let fullNameTextPlaceholder = "full_name_placeholder_text".localized()
// let dobText = "dob_text".localized()
// }
//
// // MARK: Properties
//
// var presenter: VerifyIDNumberModuleInterface?
// var customerType: String = "FOREIGNER"
// var idType: String = "RESIDENCE"
// private var isValid = false {
// didSet {
//// verifyBttn.isEnabled = isValid
//// verifyBttn.backgroundColor = isValid ? .themeRed : .themeText
// verifyBttn.isEnabled = true
// verifyBttn.backgroundColor = isValid ? .theme2E89FF : .theme2E89FF
// }
// }
//
// private var validDic = [
// "id": false,
// "dob": false
// ]
//
// // MARK: IBOutlets
// @IBOutlet weak var idNumberTxtField: ValidationTextField!
// @IBOutlet weak var verifyBttn: UIButton!
// @IBOutlet weak var backButton: UIImageView! {
// didSet {
// let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tappedView))
// backButton.addGestureRecognizer(tapGestureRecognizer)
// backButton.isUserInteractionEnabled = true
// }
// }
// @IBOutlet weak var headerTitle: UILabel!
//
// @IBOutlet weak var dobTxtField: ValidationTextField!
// @IBOutlet weak var fullNameTxtField: ValidationTextField!
// @IBOutlet weak var nationalitySwitch: UISegmentedControl!
// private let disposeBag = DisposeBag()
// // MARK: VC's Life cycle
//
// override func viewDidLoad() {
// super.viewDidLoad()
// self.setup()
// }
//
// override func viewWillAppear(_ animated: Bool) {
// super.viewWillAppear(animated)
// }
//
// override func viewWillDisappear(_ animated: Bool) {
// super.viewWillDisappear(animated)
// }
//
// // MARK: IBActions
// @IBAction func verifyBttnClicked(_ sender: UIButton) {
// let idNumber = self.idNumberTxtField.text ?? ""
// let fullName = self.fullNameTxtField.text ?? ""
// let dob = self.dobTxtField.text ?? ""
// self.presenter?.verifyIdNumber(id: idNumber, type: self.idType, fullName: fullName, dob: dob)
// }
//
// // MARK: Other Functions
//
// private func setup() {
//
// let titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black]
// let titleNotSelectedTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
// nationalitySwitch.setTitleTextAttributes(titleTextAttributes, for: .normal)
// nationalitySwitch.setTitleTextAttributes(titleNotSelectedTextAttributes, for: .selected)
//
////
//// nationalitySwitch.defaultConfiguration()
// configureLanguage()
// verifyBttn.layer.cornerRadius = 6
// idNumberTxtField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
//
// dobTxtField.useAsDropDown(items: nil)
// setDatePicker(textField: dobTxtField, useMaximum: true)
//
// dobTxtField.validCondition = { $0.count > 0}
//
// dobTxtField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
//
//
// }
//
// private func setDatePicker(textField: UITextField, useMaximum: Bool = false, useMinimum: Bool = false) {
// let datePicker = UIDatePicker()
// datePicker.datePickerMode = .date
// if #available(iOS 13.4, *) {
// datePicker.preferredDatePickerStyle = .wheels
// }
// if useMaximum {
// datePicker.maximumDate = Date()
// }
//
// if useMinimum {
// datePicker.minimumDate = Date()
// }
//
// textField.inputView = datePicker
//
// datePicker.rx.controlEvent(.valueChanged).withLatestFrom(datePicker.rx.date) {$1}
// .asDriverOnErrorJustComplete()
// .drive(onNext: {
// let dateFormatter = DateFormatter()
// dateFormatter.dateFormat = "yyyy-MM-dd"
// textField.text = dateFormatter.string(from: $0)
// textField.sendActions(for: .editingChanged)
// }).disposed(by: disposeBag)
// }
//
// @objc private func editingChanged(_ textField: ValidationTextField) {
// switch textField {
// case idNumberTxtField:
// textField.removeNonASCII()
// idNumberTxtField.filterForUserIDFormat()
// validDic["id"] = idNumberTxtField.isValid
// case dobTxtField:
// validDic["dob"] = dobTxtField.isValid
// dobTxtField.errorMessage = "empty_field_error_text".localized()
// default: ()
// }
// isValid = validDic.allSatisfy { $0.value }
// }
//
// @objc func tappedView() {
// self.navigationController?.popViewController(animated: true)
// }
//
// func configureLanguage() {
// idNumberTxtField.titleText = StringConstants().residenceIdTitle
// idNumberTxtField.placeholder = StringConstants().residenceIdPlaceholder
// idNumberTxtField.errorMessage = StringConstants().residenceIdError
// idNumberTxtField.validCondition = { !$0.isEmpty}
// dobTxtField.placeholder = StringConstants().dobText
// dobTxtField.titleText = StringConstants().dobText
// fullNameTxtField.placeholder = StringConstants().fullNameTextPlaceholder
// fullNameTxtField.titleText = StringConstants().fullNameText
// headerTitle.text = StringConstants().headerTitle
// verifyBttn.setTitle(StringConstants().verifyBtnTitle, for: .normal)
//
// }
//
// @IBAction func nationalitySwitchButtonClicked(_ sender: UISegmentedControl) {
// switch nationalitySwitch.selectedSegmentIndex {
// case 0:
// idNumberTxtField.titleText = StringConstants().residenceIdTitle
// idNumberTxtField.placeholder = StringConstants().residenceIdPlaceholder
// idNumberTxtField.errorMessage = StringConstants().residenceIdError
// self.customerType = "FOREIGNER"
// self.idType = "RESIDENCE"
// case 1:
// idNumberTxtField.titleText = "scan_driver_license_text".localized()
// idNumberTxtField.placeholder = "driver_license_hint_text".localized()
// idNumberTxtField.errorMessage = "invalid_driver_license_text".localized()
// self.customerType = "RESIDENT"
// self.idType = "DRIVING_LICENCE"
// default:
// idNumberTxtField.titleText = StringConstants().residenceIdTitle
// idNumberTxtField.placeholder = StringConstants().residenceIdPlaceholder
// idNumberTxtField.errorMessage = StringConstants().residenceIdError
// self.customerType = "FOREIGNER"
// self.idType = "RESIDENCE"
// }
// }
//
//}
//
//// MARK: VerifyIDNumberViewInterface
//extension VerifyIDNumberViewController: VerifyIDNumberViewInterface {
// func showLoading() {
// self.showProgressHud()
// }
//
// func hideLoading() {
// self.hideProgressHud()
// }
//
// func show(error: String) {
// self.alert(type: .error, message: error)
// }
//
// func show(message: String) {
// guard let id = self.idNumberTxtField.text else {
// return
// }
// GMEDB.shared.user.set(id, .userId)
// self.presenter?.newUserRegister(customerType: self.customerType, fullName: self.fullNameTxtField.text ?? "", Dob: self.dobTxtField.text ?? "")
// }
//}
//
//
// VerifyIDNumberViewController.swift
// GME Remit
//
// Created by Shiran on 8/4/20.
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
import RxSwift
import RxCocoa
import Foundation
class VerifyIDNumberViewController: UIViewController {
struct StringConstants {
let residenceIdTitle = "residence_id_placeholder".localized()
let residenceIdPlaceholder = "residence_id_placeholder".localized()
let residenceIdError = "residence_id_error".localized()
let headerTitle = "register_title_text".localized()
let verifyBtnTitle = "verify_text".localized()
let fullNameText = "full_name_text".localized()
let fullNameTextPlaceholder = "full_name_placeholder_text".localized()
let dobText = "dob_text".localized()
}
// MARK: Properties
var presenter: VerifyIDNumberModuleInterface?
var customerType: String = "FOREIGNER"
var idType: String = "RESIDENCE"
private var isValid = false {
didSet {
// verifyBttn.isEnabled = isValid
// verifyBttn.backgroundColor = isValid ? .themeRed : .themeText
verifyBttn.isEnabled = true
verifyBttn.backgroundColor = isValid ? .theme2E89FF : .theme2E89FF
}
}
private var validDic = [
"id": false,
"dob": false
]
// MARK: IBOutlets
@IBOutlet weak var idNumberTxtField: ValidationTextField!
@IBOutlet weak var verifyBttn: UIButton!
@IBOutlet weak var backButton: UIImageView! {
didSet {
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tappedView))
backButton.addGestureRecognizer(tapGestureRecognizer)
backButton.isUserInteractionEnabled = true
}
}
@IBOutlet weak var headerTitle: UILabel!
@IBOutlet weak var dobTxtField: ValidationTextField!
@IBOutlet weak var fullNameTxtField: ValidationTextField!
@IBOutlet weak var nationalitySwitch: UISegmentedControl!
private let disposeBag = DisposeBag()
// MARK: VC's Life cycle
override func viewDidLoad() {
super.viewDidLoad()
self.setup()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
}
// MARK: IBActions
@IBAction func verifyBttnClicked(_ sender: UIButton) {
let idNumber = self.idNumberTxtField.text ?? ""
let fullName = self.fullNameTxtField.text ?? ""
let dob = self.dobTxtField.text ?? ""
self.presenter?.verifyIdNumber(id: idNumber, type: self.idType, fullName: fullName, dob: dob)
}
// MARK: Other Functions
private func setup() {
let titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black]
let titleNotSelectedTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
nationalitySwitch.setTitleTextAttributes(titleTextAttributes, for: .normal)
nationalitySwitch.setTitleTextAttributes(titleNotSelectedTextAttributes, for: .selected)
//
// nationalitySwitch.defaultConfiguration()
configureLanguage()
verifyBttn.layer.cornerRadius = 6
idNumberTxtField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
dobTxtField.useAsDropDown(items: nil)
setDatePicker(textField: dobTxtField, useMaximum: true)
dobTxtField.validCondition = { $0.count > 0}
dobTxtField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
}
private func setDatePicker(textField: UITextField, useMaximum: Bool = false, useMinimum: Bool = false) {
let datePicker = UIDatePicker()
datePicker.datePickerMode = .date
if #available(iOS 13.4, *) {
datePicker.preferredDatePickerStyle = .wheels
}
if useMaximum {
datePicker.maximumDate = Date()
}
if useMinimum {
datePicker.minimumDate = Date()
}
textField.inputView = datePicker
datePicker.rx.controlEvent(.valueChanged).withLatestFrom(datePicker.rx.date) {$1}
.asDriverOnErrorJustComplete()
.drive(onNext: {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
textField.text = dateFormatter.string(from: $0)
textField.sendActions(for: .editingChanged)
}).disposed(by: disposeBag)
}
@objc private func editingChanged(_ textField: ValidationTextField) {
switch textField {
case idNumberTxtField:
textField.removeNonASCII()
idNumberTxtField.filterForUserIDFormat()
validDic["id"] = idNumberTxtField.isValid
case dobTxtField:
validDic["dob"] = dobTxtField.isValid
dobTxtField.errorMessage = "empty_field_error_text".localized()
default: ()
}
isValid = validDic.allSatisfy { $0.value }
}
@objc func tappedView() {
self.navigationController?.popViewController(animated: true)
}
func configureLanguage() {
idNumberTxtField.titleText = StringConstants().residenceIdTitle
idNumberTxtField.placeholder = StringConstants().residenceIdPlaceholder
idNumberTxtField.errorMessage = StringConstants().residenceIdError
idNumberTxtField.validCondition = { !$0.isEmpty}
dobTxtField.placeholder = StringConstants().dobText
dobTxtField.titleText = StringConstants().dobText
fullNameTxtField.placeholder = StringConstants().fullNameTextPlaceholder
fullNameTxtField.titleText = StringConstants().fullNameText
headerTitle.text = StringConstants().headerTitle
verifyBttn.setTitle(StringConstants().verifyBtnTitle, for: .normal)
}
@IBAction func nationalitySwitchButtonClicked(_ sender: UISegmentedControl) {
switch nationalitySwitch.selectedSegmentIndex {
case 0:
idNumberTxtField.titleText = StringConstants().residenceIdTitle
idNumberTxtField.placeholder = StringConstants().residenceIdPlaceholder
idNumberTxtField.errorMessage = StringConstants().residenceIdError
self.customerType = "FOREIGNER"
self.idType = "RESIDENCE"
case 1:
idNumberTxtField.titleText = "scan_driver_license_text".localized()
idNumberTxtField.placeholder = "driver_license_hint_text".localized()
idNumberTxtField.errorMessage = "invalid_driver_license_text".localized()
self.customerType = "RESIDENT"
self.idType = "DRIVING_LICENCE"
default:
idNumberTxtField.titleText = StringConstants().residenceIdTitle
idNumberTxtField.placeholder = StringConstants().residenceIdPlaceholder
idNumberTxtField.errorMessage = StringConstants().residenceIdError
self.customerType = "FOREIGNER"
self.idType = "RESIDENCE"
}
}
}
// MARK: VerifyIDNumberViewInterface
extension VerifyIDNumberViewController: VerifyIDNumberViewInterface {
func showLoading() {
self.showProgressHud()
}
func hideLoading() {
self.hideProgressHud()
}
func show(error: String) {
self.alert(type: .error, message: error)
}
func show(message: String) {
guard let id = self.idNumberTxtField.text else {
return
}
GMEDB.shared.user.set(id, .userId)
self.presenter?.newUserRegister(customerType: self.customerType, fullName: self.fullNameTxtField.text ?? "", Dob: self.dobTxtField.text ?? "")
}
}

26
GME Remit/Modules/RegisterModules/VerifyIDNumber/User Interface/View/VerifyIDNumberViewInterface.swift

@ -1,14 +1,14 @@
////
//// VerifyIDNumberViewInterface.swift
//// GME Remit
////
//// Created by Shiran on 8/4/20.
////Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved.
////
//
// VerifyIDNumberViewInterface.swift
// GME Remit
//
// Created by Shiran on 8/4/20.
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved.
//
protocol VerifyIDNumberViewInterface: class {
func showLoading()
func hideLoading()
func show(error: String)
func show(message: String)
}
//protocol VerifyIDNumberViewInterface: class {
// func showLoading()
// func hideLoading()
// func show(error: String)
// func show(message: String)
//}

88
GME Remit/Modules/RegisterModules/VerifyIDNumber/User Interface/Wireframe/VerifyIDNumberWireframe.swift

@ -1,45 +1,45 @@
////
//// VerifyIDNumberWireframe.swift
//// GME Remit
////
//// Created by Shiran on 8/4/20.
////Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved.
////
//
// VerifyIDNumberWireframe.swift
// GME Remit
//
// Created by Shiran on 8/4/20.
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
class VerifyIDNumberWireframe {
weak var view: UIViewController!
}
extension VerifyIDNumberWireframe: VerifyIDNumberWireframeInput {
var storyboardName: String {return "VerifyIDNumber"}
func getMainView() -> UIViewController {
let service = VerifyIDNumberService()
let interactor = VerifyIDNumberInteractor(service: service)
let presenter = VerifyIDNumberPresenter()
let viewController = viewControllerFromStoryboard(of: VerifyIDNumberViewController.self)
viewController.presenter = presenter
interactor.output = presenter
presenter.interactor = interactor
presenter.wireframe = self
presenter.view = viewController
self.view = viewController
return viewController
}
func newUserRegister(customerType: String, fullName: String, Dob: String) {
if let navigation = self.view.navigationController {
let newResigerWireFrame = NewUserRegisterWireframe()
newResigerWireFrame.fullName = fullName
newResigerWireFrame.dob = Dob
newResigerWireFrame.customerType = customerType
newResigerWireFrame.pushMainView(in: navigation)
}
}
}
//import UIKit
//
//class VerifyIDNumberWireframe {
// weak var view: UIViewController!
//}
//
//extension VerifyIDNumberWireframe: VerifyIDNumberWireframeInput {
//
// var storyboardName: String {return "VerifyIDNumber"}
//
// func getMainView() -> UIViewController {
// let service = VerifyIDNumberService()
// let interactor = VerifyIDNumberInteractor(service: service)
// let presenter = VerifyIDNumberPresenter()
// let viewController = viewControllerFromStoryboard(of: VerifyIDNumberViewController.self)
//
// viewController.presenter = presenter
// interactor.output = presenter
// presenter.interactor = interactor
// presenter.wireframe = self
// presenter.view = viewController
//
// self.view = viewController
// return viewController
// }
//
// func newUserRegister(customerType: String, fullName: String, Dob: String) {
// if let navigation = self.view.navigationController {
// let newResigerWireFrame = NewUserRegisterWireframe()
// newResigerWireFrame.fullName = fullName
// newResigerWireFrame.dob = Dob
// newResigerWireFrame.customerType = customerType
// newResigerWireFrame.pushMainView(in: navigation)
//
// }
// }
//}

22
GME Remit/Modules/RegisterModules/VerifyIDNumber/User Interface/Wireframe/VerifyIDNumberWireframeInput.swift

@ -1,13 +1,13 @@
////
//// VerifyIDNumberWireframeInput.swift
//// GME Remit
////
//// Created by Shiran on 8/4/20.
////Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved.
////
//
// VerifyIDNumberWireframeInput.swift
// GME Remit
//import Foundation
//
// Created by Shiran on 8/4/20.
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
protocol VerifyIDNumberWireframeInput: WireframeInput {
func newUserRegister(customerType: String, fullName: String, Dob: String)
}
//protocol VerifyIDNumberWireframeInput: WireframeInput {
// func newUserRegister(customerType: String, fullName: String, Dob: String)
//}

62
GME Remit/Modules/SplashScreen/User Interface/View/SplashScreen.storyboard

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina4_0" orientation="portrait" appearance="dark"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
<capability name="Named colors" minToolsVersion="9.0"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@ -32,16 +32,16 @@
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rya-vW-oho">
<rect key="frame" x="0.0" y="0.0" width="320" height="650"/>
<rect key="frame" x="0.0" y="20" width="320" height="630"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qo1-62-lDK">
<rect key="frame" x="0.0" y="0.0" width="320" height="644"/>
<rect key="frame" x="0.0" y="0.0" width="320" height="652"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="6kh-QB-9Ob">
<rect key="frame" x="20" y="20" width="280" height="116"/>
<rect key="frame" x="20" y="20" width="280" height="120"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ic_logo_white_large" translatesAutoresizingMaskIntoConstraints="NO" id="BNn-h6-EZr">
<rect key="frame" x="83.5" y="0.0" width="113.5" height="41"/>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="imeLondon" translatesAutoresizingMaskIntoConstraints="NO" id="BNn-h6-EZr">
<rect key="frame" x="0.0" y="0.0" width="280" height="45"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
@ -50,7 +50,7 @@
</constraints>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ONN-vO-ntP">
<rect key="frame" x="0.0" y="61" width="280" height="55"/>
<rect key="frame" x="0.0" y="65" width="280" height="55"/>
<subviews>
<view opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="T06-ux-Cea">
<rect key="frame" x="106" y="0.0" width="69" height="55"/>
@ -103,11 +103,11 @@
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Choose Language" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PJF-pZ-Z6B">
<rect key="frame" x="4" y="9.5" width="100" height="36"/>
<rect key="frame" x="4" y="21.5" width="100" height="12"/>
<constraints>
<constraint firstAttribute="width" constant="100" id="g7z-Wp-Dpo"/>
</constraints>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="15"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="10"/>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
@ -135,7 +135,7 @@
</constraints>
</stackView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3lv-7J-Tia">
<rect key="frame" x="20" y="160" width="280" height="310"/>
<rect key="frame" x="20" y="164" width="280" height="310"/>
<subviews>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Tw9-DL-Gef">
<rect key="frame" x="10" y="10" width="260" height="0.0"/>
@ -188,7 +188,7 @@
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZHq-tP-BM6">
<rect key="frame" x="0.0" y="0.0" width="65" height="60"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="flag_japan" translatesAutoresizingMaskIntoConstraints="NO" id="SYh-ap-uaK">
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="flag_united_kingdom" translatesAutoresizingMaskIntoConstraints="NO" id="SYh-ap-uaK">
<rect key="frame" x="10" y="10" width="45" height="40"/>
</imageView>
</subviews>
@ -208,7 +208,7 @@
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="JPY" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="Rez-aH-qE6">
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="GBP" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="Rez-aH-qE6">
<rect key="frame" x="69" y="0.0" width="40" height="60"/>
<constraints>
<constraint firstAttribute="width" constant="40" id="saz-Ir-xZg"/>
@ -258,7 +258,7 @@
<constraint firstItem="iH5-5x-8k4" firstAttribute="top" secondItem="lUQ-xe-VTx" secondAttribute="top" constant="15" id="zFB-Vl-YCT"/>
</constraints>
</view>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="1,000,000" placeholder="10,000,000" textAlignment="center" minimumFontSize="12" translatesAutoresizingMaskIntoConstraints="NO" id="BWr-Qf-rEd" customClass="GMENumberTextField" customModule="JME_Remit" customModuleProvider="target">
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="100" placeholder="10,000,000" textAlignment="center" minimumFontSize="12" translatesAutoresizingMaskIntoConstraints="NO" id="BWr-Qf-rEd" customClass="GMENumberTextField" customModule="JME_Remit" customModuleProvider="target">
<rect key="frame" x="11" y="0.0" width="98" height="60"/>
<color key="tintColor" red="0.78177064659999995" green="0.55228364470000002" blue="0.018981300289999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@ -509,7 +509,7 @@
<constraint firstItem="T4e-Pt-5x4" firstAttribute="leading" secondItem="6a1-Pc-ADK" secondAttribute="leading" id="zcw-Jx-iVh"/>
</constraints>
</view>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="1,000,000" placeholder="10,000,000" textAlignment="center" minimumFontSize="12" translatesAutoresizingMaskIntoConstraints="NO" id="vk9-Ca-pF9" customClass="GMENumberTextField" customModule="JME_Remit" customModuleProvider="target">
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="100,000" placeholder="10,000,000" textAlignment="center" minimumFontSize="12" translatesAutoresizingMaskIntoConstraints="NO" id="vk9-Ca-pF9" customClass="GMENumberTextField" customModule="JME_Remit" customModuleProvider="target">
<rect key="frame" x="11" y="0.0" width="98" height="60"/>
<color key="tintColor" red="0.78177064659999995" green="0.55228364470000002" blue="0.018981300289999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@ -574,7 +574,7 @@
</constraints>
</view>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="L5R-8A-5Dg">
<rect key="frame" x="20" y="478" width="280" height="17"/>
<rect key="frame" x="20" y="482" width="280" height="17"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Current Exchange Rate " textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bai-Kn-j3x">
<rect key="frame" x="0.0" y="0.0" width="280" height="17"/>
@ -593,11 +593,11 @@
</constraints>
</view>
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="j08-6S-3By">
<rect key="frame" x="20" y="503" width="280" height="54"/>
<rect key="frame" x="20" y="507" width="280" height="54"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xXT-1Y-c8Y">
<rect key="frame" x="0.0" y="0.0" width="130" height="54"/>
<color key="backgroundColor" red="0.1803921568627451" green="0.53725490196078429" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="backgroundColor" red="0.14901960784313725" green="0.13333333333333333" blue="0.38431372549019605" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Semibold" family="San Francisco Display" pointSize="18"/>
<inset key="imageEdgeInsets" minX="5" minY="0.0" maxX="5" maxY="0.0"/>
<state key="normal" title="New User"/>
@ -607,7 +607,7 @@
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="G73-dq-xvs">
<rect key="frame" x="150" y="0.0" width="130" height="54"/>
<color key="backgroundColor" red="0.18039215689999999" green="0.53725490200000003" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="backgroundColor" red="0.14901960784313725" green="0.13333333333333333" blue="0.38431372549019605" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="54" id="mc1-xk-L6F"/>
</constraints>
@ -635,18 +635,8 @@
<constraint firstItem="xXT-1Y-c8Y" firstAttribute="height" secondItem="G73-dq-xvs" secondAttribute="height" id="84F-ZN-feM"/>
</constraints>
</stackView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ZWP-4H-GDB">
<rect key="frame" x="36.5" y="573" width="247" height="30"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Medium" family="San Francisco Display" pointSize="15"/>
<state key="normal" title="Existing JME Users without App Login">
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</state>
<connections>
<action selector="existingJMEResgistration:" destination="HSb-ou-7T5" eventType="touchUpInside" id="udA-bE-9pR"/>
</connections>
</button>
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="P8b-PV-4MD">
<rect key="frame" x="255" y="571" width="45" height="45"/>
<rect key="frame" x="255" y="579" width="45" height="45"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="45" id="T0r-Tx-6h7"/>
@ -658,7 +648,7 @@
</connections>
</button>
<stackView opaque="NO" contentMode="scaleToFill" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="2Nn-5E-IA8">
<rect key="frame" x="91" y="611" width="138" height="20"/>
<rect key="frame" x="91" y="569" width="138" height="20"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="App Version" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oxi-rn-1LG">
<rect key="frame" x="0.0" y="0.0" width="66.5" height="20"/>
@ -687,11 +677,10 @@
<constraint firstItem="L5R-8A-5Dg" firstAttribute="top" secondItem="3lv-7J-Tia" secondAttribute="bottom" constant="8" id="7r0-LK-rxy"/>
<constraint firstAttribute="trailing" secondItem="6kh-QB-9Ob" secondAttribute="trailing" constant="20" id="E5r-Vk-rlM"/>
<constraint firstItem="j08-6S-3By" firstAttribute="leading" secondItem="qo1-62-lDK" secondAttribute="leading" constant="20" id="O1b-Dw-HsA"/>
<constraint firstItem="ZWP-4H-GDB" firstAttribute="centerX" secondItem="qo1-62-lDK" secondAttribute="centerX" id="SvJ-Zi-emQ"/>
<constraint firstItem="6kh-QB-9Ob" firstAttribute="leading" secondItem="qo1-62-lDK" secondAttribute="leading" constant="20" id="U4y-3b-ROn"/>
<constraint firstItem="2Nn-5E-IA8" firstAttribute="top" secondItem="j08-6S-3By" secondAttribute="bottom" constant="8" id="VqU-1z-mhN"/>
<constraint firstAttribute="trailing" secondItem="L5R-8A-5Dg" secondAttribute="trailing" constant="20" id="WKx-he-dHD"/>
<constraint firstItem="2Nn-5E-IA8" firstAttribute="centerX" secondItem="qo1-62-lDK" secondAttribute="centerX" id="YKm-Bp-Pwn"/>
<constraint firstItem="2Nn-5E-IA8" firstAttribute="top" secondItem="ZWP-4H-GDB" secondAttribute="bottom" constant="8" id="Yq9-PO-pZk"/>
<constraint firstAttribute="bottom" secondItem="P8b-PV-4MD" secondAttribute="bottom" constant="28" id="Z5h-vi-ds1"/>
<constraint firstItem="6kh-QB-9Ob" firstAttribute="top" secondItem="qo1-62-lDK" secondAttribute="top" constant="20" id="dIE-5K-pr3"/>
<constraint firstAttribute="trailing" secondItem="P8b-PV-4MD" secondAttribute="trailing" constant="20" id="dPG-LH-TFm"/>
@ -699,7 +688,6 @@
<constraint firstAttribute="trailing" secondItem="j08-6S-3By" secondAttribute="trailing" constant="20" id="eZH-ih-01A"/>
<constraint firstItem="j08-6S-3By" firstAttribute="top" secondItem="L5R-8A-5Dg" secondAttribute="bottom" constant="8" id="f2h-ec-Af1"/>
<constraint firstItem="3lv-7J-Tia" firstAttribute="leading" secondItem="qo1-62-lDK" secondAttribute="leading" constant="20" id="lnV-vt-AXU"/>
<constraint firstItem="ZWP-4H-GDB" firstAttribute="top" secondItem="j08-6S-3By" secondAttribute="bottom" constant="16" id="oAt-hR-Hj6"/>
<constraint firstAttribute="trailing" secondItem="3lv-7J-Tia" secondAttribute="trailing" constant="20" id="tlj-L7-Nig"/>
<constraint firstItem="L5R-8A-5Dg" firstAttribute="leading" secondItem="qo1-62-lDK" secondAttribute="leading" constant="20" id="w6x-1f-I3r"/>
</constraints>
@ -740,7 +728,6 @@
<outlet property="exchangeRateTextField" destination="HSe-4Z-XMI" id="FZg-VS-XTF"/>
<outlet property="exchangeRateView" destination="7fN-E6-kzQ" id="Fjh-dm-s1N"/>
<outlet property="exchangeRootView" destination="3lv-7J-Tia" id="3rM-ZC-Vvp"/>
<outlet property="existingJMERegister" destination="ZWP-4H-GDB" id="4x6-ky-m49"/>
<outlet property="flagImageView" destination="GIr-wO-yaG" id="SAM-i0-jFW"/>
<outlet property="inAppChatButton" destination="P8b-PV-4MD" id="BWA-IL-WTy"/>
<outlet property="languageBackGroundView" destination="ONN-vO-ntP" id="Eiu-4X-2Kr"/>
@ -769,9 +756,7 @@
<resources>
<image name="chat11" width="64" height="64"/>
<image name="dropdown_grey" width="15" height="8"/>
<image name="flag_japan" width="512" height="512"/>
<image name="flag_united_kingdom" width="512" height="512"/>
<image name="ic_logo_white_large" width="113.5" height="41"/>
<image name="imageView:KDi-GP-dyj:image" width="512" height="512">
<mutableData key="keyedArchiveRepresentation">
YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05T
@ -245723,8 +245708,9 @@ AOAtrADgLa4A4C2wAOAtsgDgP1IA4D9XAOA/ZADgP2cA4D90AOA/eQDgP4EA4D+EAOA/iQDgP5EAAAAA
AAAEAQAAAAAAAABoAAAAAAAAAAAAAAAAAOA/lA
</mutableData>
</image>
<image name="imeLondon" width="679" height="414"/>
<namedColor name="ThemeRedDark">
<color red="0.86274509803921573" green="0.078431372549019607" blue="0.19215686274509805" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color red="0.92941176470588238" green="0.090196078431372548" blue="0.30980392156862746" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</namedColor>
<namedColor name="ThemeText">
<color red="0.5490196078431373" green="0.58823529411764708" blue="0.62745098039215685" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>

28
GME Remit/Modules/SplashScreen/User Interface/View/SplashScreenViewController.swift

@ -54,7 +54,7 @@ class SplashScreenViewController: UIViewController {
@IBOutlet private weak var logoImageView: UIImageView!
@IBOutlet weak var oneUnitExchangeRateView: UIView!
@IBOutlet weak var existingJMERegister: UIButton!
// @IBOutlet weak var existingJMERegister: UIButton!
@IBOutlet weak var appVersion: UILabel!
// MARK: Properties
@ -148,11 +148,11 @@ class SplashScreenViewController: UIViewController {
guard let transferFee = removeFraction?.stringWithoutZeroFraction else { return }
let currency = model.senderCurrency ?? ""
serviceChargeTextField.text =
"-\(transferFee) \(currency)\n(" + "transfer_fee_included_text".localized() + ")"
// serviceChargeTextField.text =
// "-\(transferFee) \(currency)\n(" + "transfer_fee_included_text".localized() + ")"
let exchangeRate = model.exchangeRate ?? ""
exchangeRateTextField.text = "\(exchangeRate) \n" + "(" + "current_exchange_rate_text".localized() + ")"
// exchangeRateTextField.text = "\(exchangeRate) \n" + "(" + "current_exchange_rate_text".localized() + ")"
calculatedInfoView.isHidden = false
@ -227,9 +227,9 @@ class SplashScreenViewController: UIViewController {
presenter?.register()
}
@IBAction func existingJMEResgistration(_ sender: UIButton) {
presenter?.existingUserRegister()
}
// @IBAction func existingJMEResgistration(_ sender: UIButton) {
// presenter?.existingUserRegister()
// }
// MARK: Other Functions
@ -253,7 +253,7 @@ class SplashScreenViewController: UIViewController {
setupTargets()
showExchangeRateInfomation(isHidden: true)
logoImageView?.image = logoImageView?.image?.withRenderingMode(.alwaysTemplate)
logoImageView?.image = logoImageView?.image?.withRenderingMode(.alwaysOriginal)
logoImageView.tintColor = .themeWhiteRed
buttonSignUp.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.7)
@ -264,9 +264,9 @@ class SplashScreenViewController: UIViewController {
oneUnitExchangeRateView.layer.cornerRadius = 0
oneUnitExchangeRateView.backgroundColor = UIColor.clear
let attributes: [NSAttributedString.Key: Any] = [.underlineStyle: NSUnderlineStyle.single.rawValue]
let attributeString = NSMutableAttributedString(string: "existing_jme_users_without_app_login".localized(), attributes: attributes)
existingJMERegister.setAttributedTitle(attributeString, for: .normal)
// let attributes: [NSAttributedString.Key: Any] = [.underlineStyle: NSUnderlineStyle.single.rawValue]
// let attributeString = NSMutableAttributedString(string: "existing_jme_users_without_app_login".localized(), attributes: attributes)
// existingJMERegister.setAttributedTitle(attributeString, for: .normal)
self.appVersionLabelText.text = "app_version_text".localized()
}
@ -336,9 +336,9 @@ class SplashScreenViewController: UIViewController {
languageLabel.text = selectedLanguage?.title
senderTitleLabel.text = "you_send_text".localized()
recipientTitleLabel.text = "receipient_gets_text".localized()
let attributes: [NSAttributedString.Key: Any] = [.underlineStyle: NSUnderlineStyle.single.rawValue]
let attributeString = NSMutableAttributedString(string: "existing_jme_users_without_app_login".localized(), attributes: attributes)
existingJMERegister.setAttributedTitle(attributeString, for: .normal)
// let attributes: [NSAttributedString.Key: Any] = [.underlineStyle: NSUnderlineStyle.single.rawValue]
// let attributeString = NSMutableAttributedString(string: "existing_jme_users_without_app_login".localized(), attributes: attributes)
// existingJMERegister.setAttributedTitle(attributeString, for: .normal)
senderTitleLabel.text = "you_send_text".localized()
recipientTitleLabel.text = "receipient_gets_text".localized()
}

2
GME Remit/Modules/SplashScreen/User Interface/Wireframe/SplashScreenWireframe.swift

@ -11,7 +11,7 @@ import UIKit
class SplashScreenWireframe {
weak var view: UIViewController!
lazy var loginWireframe = LoginWireframe()
lazy var registerWireFrame = VerifyIDNumberWireframe()
lazy var registerWireFrame = NewUserRegisterWireframe()
lazy var existingUserRegisterWireFrame = ExistingUserRegistrationWireframe()
}

11
GME Remit/MultiLanguages/en.lproj/Localizable.strings

@ -36,7 +36,8 @@
"residence_id_card_no" = "Residence ID Card No";
"residence_id_placeholder" = "Residence ID Card Number";
"residence_id_error" = "Invalid Residence Card Number";
"register_title_text" = "Register to\nJME";
"register_title_text" = "IME London";
"search_text" = "Search";
"create_password_text" = "Create Password";
"confirm_password_text" = "Confirm Password";
"dob_text" = "Date Of Birth";
@ -260,6 +261,14 @@
"address_text" = "Address";
"gender_text" = "Gender";
"gender_placeholder_text" = "Select Gender";
"postal_code_text" = "Postal Code";
"postal_code_placeholder_text" = "Enter Postal Code and Search";
"address1_text" = "Address 1";
"address1_placeholder_text" = "Enter Address 1";
"address2_text" = "Address 2";
"address2_placeholder_text" = "Enter Address 2";
"select_dob_text" = "DOB";
"select_dob_placeholder_text" = "Select DOB";
"native_country_text" = "Native Country";
"native_country_placeholder_text" = "Select Native Country";
"address_in_korea_text" = "Address";

225
GME Remit/Shared/AddressCityViewController.storyboard

@ -0,0 +1,225 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_12" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
<capability name="Named colors" minToolsVersion="9.0"/>
<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="Roboto-MediumItalic.ttf">
<string>Roboto-MediumItalic</string>
</array>
<array key="SanFranciscoDisplay-Regular.otf">
<string>SanFranciscoDisplay-Regular</string>
</array>
</customFonts>
<scenes>
<!--Address City View Controller-->
<scene sceneID="s0d-6b-0kx">
<objects>
<viewController storyboardIdentifier="AddressCityViewController" id="Y6W-OH-hqX" customClass="AddressCityViewController" customModule="JME_Remit" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="5EZ-qb-Rvc">
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xWd-l5-iAK" userLabel="TransparentView">
<rect key="frame" x="0.0" y="59" width="393" height="759"/>
<subviews>
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sNr-6q-CvB" userLabel="mainView">
<rect key="frame" x="24" y="112.66666666666669" width="345" height="533.66666666666652"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="YaA-EN-Riq">
<rect key="frame" x="0.0" y="0.0" width="345" height="106"/>
<subviews>
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iNi-jB-UfL">
<rect key="frame" x="0.0" y="0.0" width="345" height="50"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Presenter Title" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ynt-cp-djW">
<rect key="frame" x="126" y="16" width="93" height="18"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="15"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DqU-y5-5RT">
<rect key="frame" x="287" y="0.0" width="50" height="50"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="width" secondItem="DqU-y5-5RT" secondAttribute="height" multiplier="1:1" id="xMk-HU-2p6"/>
</constraints>
<color key="tintColor" name="ThemeBlack"/>
<state key="normal" image="ic_cancel">
<color key="titleShadowColor" name="ThemeWhite"/>
</state>
<connections>
<action selector="touchCloseButton:" destination="Y6W-OH-hqX" eventType="touchUpInside" id="htk-y0-Dwo"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="0.66666666669999997" alpha="0.10000000000000001" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="SLX-MN-oEa"/>
<constraint firstAttribute="trailing" secondItem="DqU-y5-5RT" secondAttribute="trailing" constant="8" id="VOe-PP-19A"/>
<constraint firstItem="ynt-cp-djW" firstAttribute="centerX" secondItem="iNi-jB-UfL" secondAttribute="centerX" id="ZmG-t6-GJE"/>
<constraint firstItem="DqU-y5-5RT" firstAttribute="centerY" secondItem="ynt-cp-djW" secondAttribute="centerY" id="eda-9U-kvx"/>
<constraint firstItem="ynt-cp-djW" firstAttribute="centerY" secondItem="iNi-jB-UfL" secondAttribute="centerY" id="myn-8h-FaX"/>
<constraint firstItem="DqU-y5-5RT" firstAttribute="height" secondItem="iNi-jB-UfL" secondAttribute="height" id="pft-Fn-1Kx"/>
</constraints>
</view>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="t2W-bm-T4h">
<rect key="frame" x="0.0" y="50" width="345" height="0.6666666666666643"/>
<color key="backgroundColor" red="0.6705882353" green="0.6705882353" blue="0.6705882353" alpha="0.51000000000000001" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="0.5" id="8qs-Qh-sMD"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hfn-Ra-2jR">
<rect key="frame" x="0.0" y="50" width="345" height="56"/>
<subviews>
<searchBar contentMode="redraw" searchBarStyle="minimal" translatesAutoresizingMaskIntoConstraints="NO" id="1Qk-bX-au0">
<rect key="frame" x="20" y="0.0" width="305" height="56"/>
<textInputTraits key="textInputTraits"/>
</searchBar>
</subviews>
<color key="backgroundColor" white="0.66666666669999997" alpha="0.10000000000000001" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="bottom" secondItem="1Qk-bX-au0" secondAttribute="bottom" id="PwF-nl-KNl"/>
<constraint firstAttribute="trailing" secondItem="1Qk-bX-au0" secondAttribute="trailing" constant="20" id="dLW-vB-pu9"/>
<constraint firstItem="1Qk-bX-au0" firstAttribute="leading" secondItem="hfn-Ra-2jR" secondAttribute="leading" constant="20" id="epj-oW-06g"/>
<constraint firstItem="1Qk-bX-au0" firstAttribute="top" secondItem="hfn-Ra-2jR" secondAttribute="top" id="vgf-Uc-6mc"/>
</constraints>
</view>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="t2W-bm-T4h" secondAttribute="trailing" id="OZC-m8-Kar"/>
<constraint firstItem="t2W-bm-T4h" firstAttribute="leading" secondItem="YaA-EN-Riq" secondAttribute="leading" id="jdr-FL-pYh"/>
</constraints>
</stackView>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" style="plain" separatorStyle="none" allowsMultipleSelection="YES" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="mEG-Nn-ahu">
<rect key="frame" x="10" y="111.00000000000003" width="325" height="412.66666666666674"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="separatorColor" red="0.87450980389999999" green="0.87450980389999999" blue="0.87450980389999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<inset key="separatorInset" minX="10" minY="0.0" maxX="10" maxY="0.0"/>
<view key="tableFooterView" contentMode="scaleToFill" id="h5w-S6-AYX">
<rect key="frame" x="0.0" y="122" width="325" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Not found" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pqN-5l-z3t">
<rect key="frame" x="0.0" y="0.0" width="325" height="44"/>
<fontDescription key="fontDescription" name="Roboto-MediumItalic" family="Roboto" pointSize="14"/>
<color key="textColor" name="ThemeText"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="pqN-5l-z3t" secondAttribute="trailing" id="3xs-aZ-PsE"/>
<constraint firstItem="pqN-5l-z3t" firstAttribute="top" secondItem="h5w-S6-AYX" secondAttribute="top" id="FXd-5C-Ajs"/>
<constraint firstAttribute="bottom" secondItem="pqN-5l-z3t" secondAttribute="bottom" id="Ste-Ji-XLe"/>
<constraint firstItem="pqN-5l-z3t" firstAttribute="leading" secondItem="h5w-S6-AYX" secondAttribute="leading" id="TZp-Ra-ZMb"/>
</constraints>
</view>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="Bnn-63-7cx" customClass="AddressTableCell" customModule="JME_Remit" customModuleProvider="target">
<rect key="frame" x="0.0" y="50" width="325" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="Bnn-63-7cx" id="RYd-is-g0T">
<rect key="frame" x="0.0" y="0.0" width="325" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ml8-Uw-bmr">
<rect key="frame" x="16" y="4" width="293" height="36"/>
<fontDescription key="fontDescription" type="system" pointSize="10"/>
<color key="textColor" white="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstItem="ml8-Uw-bmr" firstAttribute="leading" secondItem="RYd-is-g0T" secondAttribute="leading" constant="16" id="7fy-c4-YgZ"/>
<constraint firstItem="ml8-Uw-bmr" firstAttribute="top" secondItem="RYd-is-g0T" secondAttribute="top" constant="4" id="AnS-Z7-clV"/>
<constraint firstAttribute="trailing" secondItem="ml8-Uw-bmr" secondAttribute="trailing" constant="16" id="JPg-G1-tGc"/>
<constraint firstAttribute="bottom" secondItem="ml8-Uw-bmr" secondAttribute="bottom" constant="4" id="yE2-8a-2lQ"/>
</constraints>
</tableViewCellContentView>
<connections>
<outlet property="cellTitleLabel" destination="ml8-Uw-bmr" id="q7g-Tz-IVf"/>
</connections>
</tableViewCell>
</prototypes>
</tableView>
</subviews>
<color key="backgroundColor" name="ThemeMainBackground"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="YaA-EN-Riq" secondAttribute="trailing" id="ZwG-5y-c0Y"/>
<constraint firstItem="YaA-EN-Riq" firstAttribute="leading" secondItem="sNr-6q-CvB" secondAttribute="leading" id="b6g-5H-cDJ"/>
<constraint firstAttribute="bottom" secondItem="mEG-Nn-ahu" secondAttribute="bottom" constant="10" id="erc-jG-5pm"/>
<constraint firstItem="YaA-EN-Riq" firstAttribute="top" secondItem="sNr-6q-CvB" secondAttribute="top" id="hvt-z3-75M"/>
<constraint firstItem="mEG-Nn-ahu" firstAttribute="leading" secondItem="sNr-6q-CvB" secondAttribute="leading" constant="10" id="jJ6-nR-S4O"/>
<constraint firstAttribute="height" constant="533.5" id="kEU-QP-TTV"/>
<constraint firstAttribute="trailing" secondItem="mEG-Nn-ahu" secondAttribute="trailing" constant="10" id="p1Q-dt-VGt"/>
<constraint firstItem="mEG-Nn-ahu" firstAttribute="top" secondItem="YaA-EN-Riq" secondAttribute="bottom" constant="5" id="xIq-Sv-8N8"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.70164178570000002" colorSpace="custom" customColorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="sNr-6q-CvB" secondAttribute="trailing" constant="24" id="6mH-B1-0WP"/>
<constraint firstAttribute="bottom" secondItem="sNr-6q-CvB" secondAttribute="bottom" constant="40" id="7xZ-Da-RyD"/>
<constraint firstItem="sNr-6q-CvB" firstAttribute="centerY" secondItem="xWd-l5-iAK" secondAttribute="centerY" id="AlB-Tp-iPn"/>
<constraint firstItem="sNr-6q-CvB" firstAttribute="top" secondItem="xWd-l5-iAK" secondAttribute="top" constant="60" id="cPs-iU-qbQ"/>
<constraint firstItem="sNr-6q-CvB" firstAttribute="leading" secondItem="xWd-l5-iAK" secondAttribute="leading" constant="24" id="jUy-lf-eKt"/>
<constraint firstItem="sNr-6q-CvB" firstAttribute="centerX" secondItem="xWd-l5-iAK" secondAttribute="centerX" id="o4e-VF-uzU"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="7xZ-Da-RyD"/>
<exclude reference="cPs-iU-qbQ"/>
</mask>
</variation>
</view>
</subviews>
<viewLayoutGuide key="safeArea" id="vDu-zF-Fre"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="vDu-zF-Fre" firstAttribute="trailing" secondItem="xWd-l5-iAK" secondAttribute="trailing" id="2wS-va-9Ye"/>
<constraint firstItem="xWd-l5-iAK" firstAttribute="top" secondItem="vDu-zF-Fre" secondAttribute="top" id="VJr-sp-EXP"/>
<constraint firstItem="xWd-l5-iAK" firstAttribute="leading" secondItem="vDu-zF-Fre" secondAttribute="leading" id="fh3-Jz-6KZ"/>
<constraint firstItem="vDu-zF-Fre" firstAttribute="bottom" secondItem="xWd-l5-iAK" secondAttribute="bottom" id="waj-7B-dbP"/>
</constraints>
</view>
<connections>
<outlet property="closeButton" destination="DqU-y5-5RT" id="aIn-0m-mdY"/>
<outlet property="heightConstraint" destination="kEU-QP-TTV" id="O9g-mX-Jc6"/>
<outlet property="mainView" destination="sNr-6q-CvB" id="iQK-bN-KMZ"/>
<outlet property="notFoundLabel" destination="pqN-5l-z3t" id="0pI-mS-r4u"/>
<outlet property="searchBar" destination="1Qk-bX-au0" id="5E5-ek-0RH"/>
<outlet property="searchBarContainerView" destination="hfn-Ra-2jR" id="ZGd-vD-D4P"/>
<outlet property="tableView" destination="mEG-Nn-ahu" id="paR-qH-OqP"/>
<outlet property="titleLabel" destination="ynt-cp-djW" id="piK-zv-4t9"/>
<outlet property="transparentView" destination="xWd-l5-iAK" id="oar-NW-R12"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Ief-a0-LHa" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="103" y="-2"/>
</scene>
</scenes>
<resources>
<image name="ic_cancel" width="12" height="12"/>
<namedColor name="ThemeBlack">
<color white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</namedColor>
<namedColor name="ThemeMainBackground">
<color red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</namedColor>
<namedColor name="ThemeText">
<color red="0.5490196078431373" green="0.58823529411764708" blue="0.62745098039215685" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</namedColor>
<namedColor name="ThemeWhite">
<color red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</namedColor>
</resources>
</document>

80
GME Remit/Shared/AddressCityViewController.swift

@ -0,0 +1,80 @@
//
import UIKit
class AddressCityViewController: UIViewController {
@IBOutlet private weak var titleLabel: UILabel!
@IBOutlet private weak var searchBarContainerView: UIView!
@IBOutlet private weak var searchBar: UISearchBar!
@IBOutlet private weak var closeButton: UIButton!
@IBOutlet private weak var mainView: UIView!
@IBOutlet private weak var notFoundLabel: UILabel!
@IBOutlet private weak var transparentView: UIView!
@IBOutlet private weak var heightConstraint: NSLayoutConstraint!
@IBOutlet weak var tableView: UITableView!
var model: PostalData?
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.delegate = self
self.tableView.dataSource = self
self.setupTableView(data: model!)
// Do any additional setup after loading the view.
}
@IBAction func touchCloseButton(_ sender: UIButton) {
presentingViewController?.view.endEditing(true)
mainView.originToBottom {
self.dismiss(animated: true)
}
}
func setupTableView(data: PostalData){
//
// if data.address.count == 0 {
// notFoundLabel.isHidden = false
// notFoundLabel.alpha = 1.0
// } else {
// notFoundLabel.isHidden = true
// notFoundLabel.alpha = 0.0
// }
tableView.reloadData()
}
}
extension AddressCityViewController: UITableViewDelegate, UITableViewDataSource{
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 40
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
//return model?.address.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// let cell: AddressTableCell = tableView.dequeueReusableCell(withIdentifier: "AddressTableCell") as! AddressTableCell
// let cell = UITableViewCell()
guard let cell = tableView.dequeueReusableCell(withIdentifier: "AddressTableCell") as? AddressTableCell else {
return UITableViewCell()
}
// cell.cellTitleLabel.text = self.model?.address[indexPath.row].address1
//
// cell.setModel(model?.address[indexPath.row])
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// mainView.originToBottom {[weak self] in guard let `self` = self else { return }
// self.delegate?.tablePresenterView(self, didSelectModel: self.model?[indexPath.row])
// self.dismiss(animated: true)
}
}

110
GME Remit/Shared/Models/Address.swift

@ -0,0 +1,110 @@
//
// Address.swift
// GME Remit
//
// Created by Puran Panthi.
// Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
import ObjectMapper
struct Address: Mappable {
var city: String?
var id: String?
var address1: String?
var type: String?
init?(map: Map) {
}
mutating func mapping(map: Map) {
city <- map["City"]
id <- map["Id"]
address1 <- map["Address1"]
type <- map["Type"]
}
}
extension Address: TablePresenterProtocol {
var cellTitle: String? {
return address1
}
var cellImage: UIImage? {
return nil
}
}
struct City: Mappable {
var city: String?
var id: String?
var address1: String?
var type: String?
init?(map: Map) {
}
mutating func mapping(map: Map) {
city <- map["City"]
id <- map["Id"]
address1 <- map["Address1"]
type <- map["Type"]
}
}
extension City: TablePresenterProtocol {
var cellTitle: String? {
return city
}
var cellImage: UIImage? {
return nil
}
}
struct NativeCountry: Mappable {
var id: String?
var text: String?
var code: String?
init?(map: Map) {
}
mutating func mapping(map: Map) {
id <- map["id"]
text <- map["text"]
code <- map["code"]
}
}
extension NativeCountry: TablePresenterProtocol {
var cellTitle: String? {
return text
}
var cellImage: UIImage? {
return nil
}
}
struct Gender: Mappable {
var id: String?
var text: String?
init?(map: Map) {
}
mutating func mapping(map: Map) {
id <- map["id"]
text <- map["text"]
}
}
extension Gender: TablePresenterProtocol {
var cellTitle: String? {
return text
}
var cellImage: UIImage? {
return nil
}
}

42
GME Remit/Shared/Models/PostalData.swift

@ -0,0 +1,42 @@
//
// PostalData.swift
// GME Remit
//
// Created by Puran Panthi.
// Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
import ObjectMapper
struct PostalData: Mappable {
var nativeCountry: String?
var gender: String?
var address: [Address]?
var city: [City]?
init?(map: Map) {
}
mutating func mapping(map: Map) {
nativeCountry <- map["NativeCountry"]
gender <- map["Gender"]
address <- map["Addresses"]
city <- map["Addresses"]
}
}
struct CountryData: Mappable {
var nativeCountry: [NativeCountry]?
var gender: [Gender]?
var address: String??
init?(map: Map) {
}
mutating func mapping(map: Map) {
nativeCountry <- map["NativeCountry"]
gender <- map["Gender"]
address <- map["Addresses"]
}
}

61
GME Remit/Shared/Models/PostalInformation.swift

@ -0,0 +1,61 @@
//
// PostalInformation.swift
// GME Remit
//
// Created by Puran Panthi.
// Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
import ObjectMapper
struct PostalInformation: Mappable {
var id: String?
var message: String?
var extra2: String?
var extra: String?
var footNoteMessage: String?
var errorCode: String?
var extra3: String?
var data: PostalData?
init?(map: Map) {
}
mutating func mapping(map: Map) {
id <- map["Id"]
message <- map["Msg"]
extra2 <- map["Extra2"]
extra <- map["Extra"]
footNoteMessage <- map["FootNoteMessage"]
errorCode <- map["ErrorCode"]
extra3 <- map["Extra3"]
data <- map["Data"]
}
}
struct CountryInformation: Mappable {
var id: String?
var message: String?
var extra2: String?
var extra: String?
var footNoteMessage: String?
var errorCode: String?
var data: CountryData?
init?(map: Map) {
}
mutating func mapping(map: Map) {
id <- map["Id"]
message <- map["Msg"]
extra2 <- map["Extra2"]
extra <- map["Extra"]
footNoteMessage <- map["FootNoteMessage"]
errorCode <- map["ErrorCode"]
data <- map["Data"]
}
}

BIN
GME Remit/Supported Files/Assets.xcassets/.DS_Store

21
GME Remit/Supported Files/Assets.xcassets/IME_london-coin-curve.imageset/Contents.json

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "IME_london-coin-curve.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

BIN
GME Remit/Supported Files/Assets.xcassets/IME_london-coin-curve.imageset/IME_london-coin-curve.png

After

Width: 1200  |  Height: 1200  |  Size: 29 KiB

23
GME Remit/Supported Files/Assets.xcassets/Profilered-round.imageset/Contents.json

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "Profilered-round.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Profilered-round 1.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Profilered-round 2.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

BIN
GME Remit/Supported Files/Assets.xcassets/Profilered-round.imageset/Profilered-round 1.png

After

Width: 400  |  Height: 400  |  Size: 6.3 KiB

BIN
GME Remit/Supported Files/Assets.xcassets/Profilered-round.imageset/Profilered-round 2.png

After

Width: 400  |  Height: 400  |  Size: 6.3 KiB

BIN
GME Remit/Supported Files/Assets.xcassets/Profilered-round.imageset/Profilered-round.png

After

Width: 400  |  Height: 400  |  Size: 6.3 KiB

23
GME Remit/Supported Files/Assets.xcassets/imeLondon.imageset/Contents.json

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "imeLondon.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "imeLondon 1.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "imeLondon 2.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

BIN
GME Remit/Supported Files/Assets.xcassets/imeLondon.imageset/imeLondon 1.png

After

Width: 1358  |  Height: 828  |  Size: 182 KiB

BIN
GME Remit/Supported Files/Assets.xcassets/imeLondon.imageset/imeLondon 2.png

After

Width: 1358  |  Height: 828  |  Size: 182 KiB

BIN
GME Remit/Supported Files/Assets.xcassets/imeLondon.imageset/imeLondon.png

After

Width: 1358  |  Height: 828  |  Size: 182 KiB

8
GME Remit/Supported Files/Assets.xcassets/jme_launch_icon.imageset/Contents.json

@ -1,12 +1,12 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "jme.png"
"filename" : "jme_launch_icon.png",
"idiom" : "universal"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
}
}

BIN
GME Remit/Supported Files/Assets.xcassets/jme_launch_icon.imageset/jme.png

Before

Width: 512  |  Height: 512  |  Size: 13 KiB

BIN
GME Remit/Supported Files/Assets.xcassets/jme_launch_icon.imageset/jme_launch_icon.png

After

Width: 400  |  Height: 400  |  Size: 5.5 KiB

18
GME Remit/Supported Files/Base.lproj/LaunchScreen.storyboard

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15705" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15706"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
<capability name="Named colors" minToolsVersion="9.0"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@ -17,20 +17,20 @@
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="jme_launch_icon" translatesAutoresizingMaskIntoConstraints="NO" id="N3b-w5-Ftf">
<rect key="frame" x="157.5" y="303.5" width="60" height="60"/>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="IME_london-coin-curve" translatesAutoresizingMaskIntoConstraints="NO" id="N3b-w5-Ftf">
<rect key="frame" x="157.5" y="313.5" width="60" height="60"/>
<constraints>
<constraint firstAttribute="width" constant="60" id="Ed7-rd-ckP"/>
<constraint firstAttribute="height" constant="60" id="TSv-HH-Me9"/>
</constraints>
</imageView>
</subviews>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
<color key="backgroundColor" name="ThemeRedDark"/>
<constraints>
<constraint firstItem="N3b-w5-Ftf" firstAttribute="centerX" secondItem="6Tk-OE-BBY" secondAttribute="centerX" id="0fk-eE-qb1"/>
<constraint firstItem="N3b-w5-Ftf" firstAttribute="centerY" secondItem="6Tk-OE-BBY" secondAttribute="centerY" id="OKi-EB-LSk"/>
<constraint firstItem="N3b-w5-Ftf" firstAttribute="centerX" secondItem="6Tk-OE-BBY" secondAttribute="centerX" id="aIr-OJ-XeL"/>
<constraint firstItem="N3b-w5-Ftf" firstAttribute="centerY" secondItem="6Tk-OE-BBY" secondAttribute="centerY" id="mtO-Zi-pBy"/>
</constraints>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
@ -39,9 +39,9 @@
</scene>
</scenes>
<resources>
<image name="jme_launch_icon" width="512" height="512"/>
<image name="IME_london-coin-curve" width="1200" height="1200"/>
<namedColor name="ThemeRedDark">
<color red="0.86274509803921573" green="0.078431372549019607" blue="0.19215686274509805" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color red="0.92941176470588238" green="0.090196078431372548" blue="0.30980392156862746" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</namedColor>
</resources>
</document>

24
GME Remit/Supported Files/Colors.xcassets/ThemeBlue.colorset/Contents.json

@ -1,23 +1,18 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "srgb",
"components" : {
"red" : "0x0C",
"alpha" : "1.000",
"blue" : "0x69",
"green" : "0x21"
}
"green" : "0x21",
"red" : "0x0C"
}
},
"idiom" : "universal"
},
{
"idiom" : "universal",
"appearances" : [
{
"appearance" : "luminosity",
@ -27,12 +22,17 @@
"color" : {
"color-space" : "srgb",
"components" : {
"red" : "0x0C",
"alpha" : "1.000",
"blue" : "0x69",
"green" : "0x21"
"green" : "0x21",
"red" : "0x0C"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
]
}

28
GME Remit/Supported Files/Colors.xcassets/ThemeMixedRed.colorset/Contents.json

@ -1,23 +1,18 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "srgb",
"components" : {
"red" : "0xDC",
"alpha" : "1.000",
"blue" : "0x31",
"green" : "0x14"
}
"blue" : "0x4F",
"green" : "0x17",
"red" : "0xED"
}
},
"idiom" : "universal"
},
{
"idiom" : "universal",
"appearances" : [
{
"appearance" : "luminosity",
@ -27,12 +22,17 @@
"color" : {
"color-space" : "srgb",
"components" : {
"red" : "0xDF",
"alpha" : "1.000",
"blue" : "0x24",
"green" : "0x04"
"blue" : "0x4F",
"green" : "0x17",
"red" : "0xED"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
]
}

18
GME Remit/Supported Files/Colors.xcassets/ThemeRed.colorset/Contents.json

@ -1,20 +1,20 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "srgb",
"components" : {
"red" : "0xDC",
"alpha" : "1.000",
"blue" : "0x31",
"green" : "0x14"
"blue" : "0x4F",
"green" : "0x17",
"red" : "0xED"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
]
}

12
GME Remit/Supported Files/Colors.xcassets/ThemeRedDark.colorset/Contents.json

@ -5,9 +5,9 @@
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x31",
"green" : "0x14",
"red" : "0xDC"
"blue" : "0x4F",
"green" : "0x17",
"red" : "0xED"
}
},
"idiom" : "universal"
@ -23,9 +23,9 @@
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x31",
"green" : "0x14",
"red" : "0xDC"
"blue" : "0x4F",
"green" : "0x17",
"red" : "0xED"
}
},
"idiom" : "universal"

26
GME Remit/Supported Files/Colors.xcassets/ThemeWhiteRed.colorset/Contents.json

@ -1,23 +1,18 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "srgb",
"components" : {
"red" : "1.000",
"alpha" : "1.000",
"blue" : "1.000",
"green" : "1.000"
}
"green" : "1.000",
"red" : "1.000"
}
},
"idiom" : "universal"
},
{
"idiom" : "universal",
"appearances" : [
{
"appearance" : "luminosity",
@ -27,12 +22,17 @@
"color" : {
"color-space" : "srgb",
"components" : {
"red" : "0xDC",
"alpha" : "1.000",
"blue" : "0x31",
"green" : "0x14"
"blue" : "0x4F",
"green" : "0x17",
"red" : "0xED"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
]
}

32
GME Remit/Supported Files/Info.plist

@ -24,10 +24,10 @@
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>JMERemitBundle</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>JMERemitBundle</string>
<key>CFBundleURLSchemes</key>
<array>
<string>com.japan.jmeremit</string>
@ -60,13 +60,13 @@
<string>GME</string>
<key>FirebaseAppDelegateProxyEnabled</key>
<true/>
<key>FirebaseDeepLinkPasteboardRetrievalEnabled</key>
<false/>
<key>FirebaseDynamicLinksCustomDomains</key>
<array>
<string>https://jmeremit.page.link</string>
<string>https://jmeremit.page.link/invite</string>
</array>
<key>FirebaseDeepLinkPasteboardRetrievalEnabled</key>
<false/>
<key>LSApplicationCategoryType</key>
<string></string>
<key>LSApplicationQueriesSchemes</key>
@ -90,28 +90,28 @@
<key>NSCalendarsUsageDescription</key>
<string></string>
<key>NSCameraUsageDescription</key>
<string>Allow &quot;JME Remittance&quot; to use your camera to capture Identification documents, Deposit slips</string>
<string>Allow "JME Remittance" to use your camera to capture Identification documents, Deposit slips</string>
<key>NSContactsUsageDescription</key>
<string>Allow &quot;JME Remittance&quot; to use your contacts to get users contact</string>
<string>Allow "JME Remittance" to use your contacts to get users contact</string>
<key>NSFaceIDUsageDescription</key>
<string>Allow &quot;JME Remittance&quot; to use your biometrics to simplify and secure your app usage</string>
<string>Allow "JME Remittance" to use your biometrics to simplify and secure your app usage</string>
<key>NSHumanReadableCopyright</key>
<string></string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Allow &quot;JME Remittance&quot; to use your location?
Turning on location service allows us to show you nearby JME&apos;s branches.</string>
<string>Allow "JME Remittance" to use your location?
Turning on location service allows us to show you nearby JME's branches.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Allow &quot;JME Remittance&quot; to use your location?
Turning on location service allows us to show you nearby JME&apos;s branches.</string>
<string>Allow "JME Remittance" to use your location?
Turning on location service allows us to show you nearby JME's branches.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Allow &quot;JME Remittance&quot; to use your location?
Turning on location service allows us to show you nearby JME&apos;s branches.</string>
<string>Allow "JME Remittance" to use your location?
Turning on location service allows us to show you nearby JME's branches.</string>
<key>NSMicrophoneUsageDescription</key>
<string>Allow &quot;JME Remittance&quot; to use your microphone for access to your recorded voice </string>
<string>Allow "JME Remittance" to use your microphone for access to your recorded voice </string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Allow &quot;JME Remittance&quot; to use your gallery to use images of documents and depositslips</string>
<string>Allow "JME Remittance" to use your gallery to use images of documents and depositslips</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Allow &quot;JME Remittance&quot; to use your gallery to use images of documents and depositslips</string>
<string>Allow "JME Remittance" to use your gallery to use images of documents and depositslips</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string></string>
<key>UIAppFonts</key>

18
GME Remit/Utilities/TablePresenter/User Interface/View/Cell/TableCell.swift

@ -31,3 +31,21 @@ class TableCell: UITableViewCell {
}
}
}
class AddressTableCell: UITableViewCell {
@IBOutlet weak var cellTitleLabel: UILabel!
// func setModel(_ model: TablePresenterProtocol?) {
//
// cellTitleLabel.text = model?.cellTitle
//
// cellTitleLabel.font = .sanfrancisco(.semibold, size: 16)
// }
override func awakeFromNib() {
super.awakeFromNib()
}
}

4
Pods/Pods.xcodeproj/project.pbxproj

@ -12463,7 +12463,7 @@
);
name = "Localize-Swift";
productName = Localize_Swift;
productReference = 2ECF488EFD24A1B916546FB54E5E6827 /* Localize_Swift.framework */;
productReference = 2ECF488EFD24A1B916546FB54E5E6827 /* Localize-Swift */;
productType = "com.apple.product-type.framework";
};
348DE4205F36D6FB0D61275F71F947D6 /* BRYXBanner */ = {
@ -12481,7 +12481,7 @@
);
name = BRYXBanner;
productName = BRYXBanner;
productReference = 41FD498512AB15F6641709060EFFAFBA /* BRYXBanner.framework */;
productReference = 41FD498512AB15F6641709060EFFAFBA /* BRYXBanner */;
productType = "com.apple.product-type.framework";
};
3847153A6E5EEFB86565BA840768F429 /* SDWebImage */ = {

Loading…
Cancel
Save