Browse Source

Added Beneficeries Detail List

v0.17
Dibya Malla 2 years ago
parent
commit
a815d6e5c5
  1. 124
      GME Remit.xcodeproj/project.pbxproj
  2. 37
      GME Remit/Modules/BeneficiaryDetail/Application Logic/Interactor/BeneficiaryDetailInteractor.swift
  3. 16
      GME Remit/Modules/BeneficiaryDetail/Application Logic/Interactor/BeneficiaryDetailInteractorIO.swift
  4. 31
      GME Remit/Modules/BeneficiaryDetail/Application Logic/Service/BeneficiaryDetailService.swift
  5. 16
      GME Remit/Modules/BeneficiaryDetail/Application Logic/Service/BeneficiaryDetailServiceType.swift
  6. 11
      GME Remit/Modules/BeneficiaryDetail/Module Interface/BeneficiaryDetailModuleInterface.swift
  7. 43
      GME Remit/Modules/BeneficiaryDetail/User Interface/Presenter/BeneficiaryDetailPresenter.swift
  8. 387
      GME Remit/Modules/BeneficiaryDetail/User Interface/View/BeneficiaryDetail.storyboard
  9. 58
      GME Remit/Modules/BeneficiaryDetail/User Interface/View/BeneficiaryDetailViewController.swift
  10. 14
      GME Remit/Modules/BeneficiaryDetail/User Interface/View/BeneficiaryDetailViewInterface.swift
  11. 34
      GME Remit/Modules/BeneficiaryDetail/User Interface/Wireframe/BeneficiaryDetailWireframe.swift
  12. 13
      GME Remit/Modules/BeneficiaryDetail/User Interface/Wireframe/BeneficiaryDetailWireframeInput.swift
  13. 6
      GME Remit/Modules/Home/User Interface/View/HomeViewController.swift
  14. 7
      GME Remit/Modules/RecipientModules/Recipients/User Interface/View/Recipients.storyboard
  15. 4
      GME Remit/Modules/RecipientModules/Recipients/User Interface/View/RecipientsViewController.swift
  16. 7
      GME Remit/Modules/TransferList/User Interface/View/TransferListTableViewCell.swift

124
GME Remit.xcodeproj/project.pbxproj

@ -52,6 +52,17 @@
24A4502229B83A710049CE29 /* HomeExchangeRateCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24A4502129B83A710049CE29 /* HomeExchangeRateCollectionViewCell.swift */; };
24A4502429B8473B0049CE29 /* ExchangeRateCustomView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24A4502329B8473B0049CE29 /* ExchangeRateCustomView.swift */; };
24A4502629B849920049CE29 /* CurrencyTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24A4502529B849920049CE29 /* CurrencyTextField.swift */; };
24BBCCE329CD7C430081F4A6 /* BeneficiaryDetailModuleInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BBCCD029CD7C430081F4A6 /* BeneficiaryDetailModuleInterface.swift */; };
24BBCCE429CD7C430081F4A6 /* BeneficiaryDetailServiceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BBCCD329CD7C430081F4A6 /* BeneficiaryDetailServiceType.swift */; };
24BBCCE529CD7C430081F4A6 /* BeneficiaryDetailService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BBCCD429CD7C430081F4A6 /* BeneficiaryDetailService.swift */; };
24BBCCE629CD7C430081F4A6 /* BeneficiaryDetailInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BBCCD629CD7C430081F4A6 /* BeneficiaryDetailInteractor.swift */; };
24BBCCE729CD7C430081F4A6 /* BeneficiaryDetailInteractorIO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BBCCD729CD7C430081F4A6 /* BeneficiaryDetailInteractorIO.swift */; };
24BBCCE829CD7C430081F4A6 /* BeneficiaryDetailPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BBCCDA29CD7C430081F4A6 /* BeneficiaryDetailPresenter.swift */; };
24BBCCE929CD7C430081F4A6 /* BeneficiaryDetailWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BBCCDC29CD7C430081F4A6 /* BeneficiaryDetailWireframe.swift */; };
24BBCCEA29CD7C430081F4A6 /* BeneficiaryDetailWireframeInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BBCCDD29CD7C430081F4A6 /* BeneficiaryDetailWireframeInput.swift */; };
24BBCCEB29CD7C430081F4A6 /* BeneficiaryDetail.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 24BBCCE029CD7C430081F4A6 /* BeneficiaryDetail.storyboard */; };
24BBCCEC29CD7C430081F4A6 /* BeneficiaryDetailViewInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BBCCE129CD7C430081F4A6 /* BeneficiaryDetailViewInterface.swift */; };
24BBCCED29CD7C430081F4A6 /* BeneficiaryDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BBCCE229CD7C430081F4A6 /* BeneficiaryDetailViewController.swift */; };
281EF60028ACCC4D0092E5E6 /* HowToDepositModuleInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 281EF5ED28ACCC4D0092E5E6 /* HowToDepositModuleInterface.swift */; };
281EF60128ACCC4D0092E5E6 /* HowToDepositService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 281EF5F028ACCC4D0092E5E6 /* HowToDepositService.swift */; };
281EF60228ACCC4D0092E5E6 /* HowToDepositServiceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 281EF5F128ACCC4D0092E5E6 /* HowToDepositServiceType.swift */; };
@ -902,6 +913,17 @@
24A4502129B83A710049CE29 /* HomeExchangeRateCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeExchangeRateCollectionViewCell.swift; sourceTree = "<group>"; };
24A4502329B8473B0049CE29 /* ExchangeRateCustomView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExchangeRateCustomView.swift; sourceTree = "<group>"; };
24A4502529B849920049CE29 /* CurrencyTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CurrencyTextField.swift; sourceTree = "<group>"; };
24BBCCD029CD7C430081F4A6 /* BeneficiaryDetailModuleInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeneficiaryDetailModuleInterface.swift; sourceTree = "<group>"; };
24BBCCD329CD7C430081F4A6 /* BeneficiaryDetailServiceType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeneficiaryDetailServiceType.swift; sourceTree = "<group>"; };
24BBCCD429CD7C430081F4A6 /* BeneficiaryDetailService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeneficiaryDetailService.swift; sourceTree = "<group>"; };
24BBCCD629CD7C430081F4A6 /* BeneficiaryDetailInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeneficiaryDetailInteractor.swift; sourceTree = "<group>"; };
24BBCCD729CD7C430081F4A6 /* BeneficiaryDetailInteractorIO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeneficiaryDetailInteractorIO.swift; sourceTree = "<group>"; };
24BBCCDA29CD7C430081F4A6 /* BeneficiaryDetailPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeneficiaryDetailPresenter.swift; sourceTree = "<group>"; };
24BBCCDC29CD7C430081F4A6 /* BeneficiaryDetailWireframe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeneficiaryDetailWireframe.swift; sourceTree = "<group>"; };
24BBCCDD29CD7C430081F4A6 /* BeneficiaryDetailWireframeInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeneficiaryDetailWireframeInput.swift; sourceTree = "<group>"; };
24BBCCE029CD7C430081F4A6 /* BeneficiaryDetail.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = BeneficiaryDetail.storyboard; sourceTree = "<group>"; };
24BBCCE129CD7C430081F4A6 /* BeneficiaryDetailViewInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeneficiaryDetailViewInterface.swift; sourceTree = "<group>"; };
24BBCCE229CD7C430081F4A6 /* BeneficiaryDetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeneficiaryDetailViewController.swift; sourceTree = "<group>"; };
281EF5ED28ACCC4D0092E5E6 /* HowToDepositModuleInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HowToDepositModuleInterface.swift; sourceTree = "<group>"; };
281EF5F028ACCC4D0092E5E6 /* HowToDepositService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HowToDepositService.swift; sourceTree = "<group>"; };
281EF5F128ACCC4D0092E5E6 /* HowToDepositServiceType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HowToDepositServiceType.swift; sourceTree = "<group>"; };
@ -1901,6 +1923,96 @@
path = Volte;
sourceTree = "<group>";
};
24BBCCCE29CD7C430081F4A6 /* BeneficiaryDetail */ = {
isa = PBXGroup;
children = (
24BBCCCF29CD7C430081F4A6 /* Module Interface */,
24BBCCD129CD7C430081F4A6 /* Application Logic */,
24BBCCD829CD7C430081F4A6 /* User Interface */,
);
path = BeneficiaryDetail;
sourceTree = "<group>";
};
24BBCCCF29CD7C430081F4A6 /* Module Interface */ = {
isa = PBXGroup;
children = (
24BBCCD029CD7C430081F4A6 /* BeneficiaryDetailModuleInterface.swift */,
);
path = "Module Interface";
sourceTree = "<group>";
};
24BBCCD129CD7C430081F4A6 /* Application Logic */ = {
isa = PBXGroup;
children = (
24BBCCD229CD7C430081F4A6 /* Service */,
24BBCCD529CD7C430081F4A6 /* Interactor */,
);
path = "Application Logic";
sourceTree = "<group>";
};
24BBCCD229CD7C430081F4A6 /* Service */ = {
isa = PBXGroup;
children = (
24BBCCD329CD7C430081F4A6 /* BeneficiaryDetailServiceType.swift */,
24BBCCD429CD7C430081F4A6 /* BeneficiaryDetailService.swift */,
);
path = Service;
sourceTree = "<group>";
};
24BBCCD529CD7C430081F4A6 /* Interactor */ = {
isa = PBXGroup;
children = (
24BBCCD629CD7C430081F4A6 /* BeneficiaryDetailInteractor.swift */,
24BBCCD729CD7C430081F4A6 /* BeneficiaryDetailInteractorIO.swift */,
);
path = Interactor;
sourceTree = "<group>";
};
24BBCCD829CD7C430081F4A6 /* User Interface */ = {
isa = PBXGroup;
children = (
24BBCCD929CD7C430081F4A6 /* Presenter */,
24BBCCDB29CD7C430081F4A6 /* Wireframe */,
24BBCCDE29CD7C430081F4A6 /* View */,
);
path = "User Interface";
sourceTree = "<group>";
};
24BBCCD929CD7C430081F4A6 /* Presenter */ = {
isa = PBXGroup;
children = (
24BBCCDA29CD7C430081F4A6 /* BeneficiaryDetailPresenter.swift */,
);
path = Presenter;
sourceTree = "<group>";
};
24BBCCDB29CD7C430081F4A6 /* Wireframe */ = {
isa = PBXGroup;
children = (
24BBCCDC29CD7C430081F4A6 /* BeneficiaryDetailWireframe.swift */,
24BBCCDD29CD7C430081F4A6 /* BeneficiaryDetailWireframeInput.swift */,
);
path = Wireframe;
sourceTree = "<group>";
};
24BBCCDE29CD7C430081F4A6 /* View */ = {
isa = PBXGroup;
children = (
24BBCCDF29CD7C430081F4A6 /* ViewModels */,
24BBCCE029CD7C430081F4A6 /* BeneficiaryDetail.storyboard */,
24BBCCE129CD7C430081F4A6 /* BeneficiaryDetailViewInterface.swift */,
24BBCCE229CD7C430081F4A6 /* BeneficiaryDetailViewController.swift */,
);
path = View;
sourceTree = "<group>";
};
24BBCCDF29CD7C430081F4A6 /* ViewModels */ = {
isa = PBXGroup;
children = (
);
path = ViewModels;
sourceTree = "<group>";
};
281EF5EB28ACCC4D0092E5E6 /* HowToDeposit */ = {
isa = PBXGroup;
children = (
@ -5911,6 +6023,7 @@
D96A4FBF21460B4900CFD507 /* SplashScreen */,
7EDBFBC324B2C5DA00AD5D4D /* RedeemCashPickUp */,
D96BD100216479E200DFE7D8 /* WalletStatement */,
24BBCCCE29CD7C430081F4A6 /* BeneficiaryDetail */,
7EDBFC0B24B3090700AD5D4D /* Withdraw */,
);
path = Modules;
@ -7210,6 +7323,7 @@
2454866B29BA2AE60065E1DD /* volte-regular.otf in Resources */,
D931E22A216DCC2A008A8CD1 /* MessageCompose.storyboard in Resources */,
7327568623B0456400BF66C5 /* ManageAgreement.storyboard in Resources */,
24BBCCEB29CD7C430081F4A6 /* BeneficiaryDetail.storyboard in Resources */,
7E364CEC24A4455A007D6E02 /* PasswordInputViewController.xib in Resources */,
5565FF2C1FE275E5002934E9 /* SanFranciscoText-Medium.otf in Resources */,
5565FF311FE275E5002934E9 /* SanFranciscoDisplay-Medium.otf in Resources */,
@ -7877,6 +7991,7 @@
41F06FB729B712A2008E9E5D /* TransferListWireframeInput.swift in Sources */,
89739E3624459A630016251B /* SendMoneyReceiptModuleInterface.swift in Sources */,
405718D124D932AE0022CDDE /* NewUserRegisterViewInterface.swift in Sources */,
24BBCCE529CD7C430081F4A6 /* BeneficiaryDetailService.swift in Sources */,
736A8C452277EB2A00337A50 /* BiometricNotificationPresenter.swift in Sources */,
89739E3924459A630016251B /* SendMoneyReceiptInteractor.swift in Sources */,
2882C6F428D2FCE000589E33 /* ValidateReferralCodeModel.swift in Sources */,
@ -7927,6 +8042,7 @@
73FBBF2823F231A8009D7627 /* DetailNotificationPresenter.swift in Sources */,
D95B5E4021311057000C0B33 /* GmeContactsWireframe.swift in Sources */,
BEC9B005224FC49C00A2DA06 /* BiometricAuthenticationViewController.swift in Sources */,
24BBCCE929CD7C430081F4A6 /* BeneficiaryDetailWireframe.swift in Sources */,
0496B84E1FE7DFCD0044810E /* UIViewController+Ext.swift in Sources */,
BEC9AFFD224FC49C00A2DA06 /* BiometricAuthenticationService.swift in Sources */,
5EC4637C28AA2611006B5FDC /* NotificationListWireframeInput.swift in Sources */,
@ -8005,6 +8121,7 @@
7303E5732344A1F000472407 /* StoreReviewHelper.swift in Sources */,
89739E2A24459A630016251B /* SendMoneyParentModuleInterface.swift in Sources */,
89EA0D8C243EC1C6003ACCC8 /* ChangePersonalInformationViewController.swift in Sources */,
24BBCCEA29CD7C430081F4A6 /* BeneficiaryDetailWireframeInput.swift in Sources */,
4122BA7029BE073D0009E074 /* TransferListCollectionViewCell.swift in Sources */,
D950BED121549242008367A1 /* HomeModuleInterface.swift in Sources */,
89EA0D74243EC1C5003ACCC8 /* CityModel.swift in Sources */,
@ -8019,6 +8136,7 @@
405718EE24D93EB40022CDDE /* VerifyIDNumberInteractorIO.swift in Sources */,
0496B8481FE7DFA20044810E /* RestApiManager.swift in Sources */,
24A4502629B849920049CE29 /* CurrencyTextField.swift in Sources */,
24BBCCED29CD7C430081F4A6 /* BeneficiaryDetailViewController.swift in Sources */,
73FBBF2523F231A8009D7627 /* DetailNotificationServiceType.swift in Sources */,
73AEFF702334A13100A967FB /* TransactionHistoryGroupModuleInterface.swift in Sources */,
4060B97624DBBA0300E90F8C /* KYCVerifyStep1Presenter.swift in Sources */,
@ -8071,6 +8189,7 @@
9488313928B2A9E600D22A15 /* ReferralModel.swift in Sources */,
40B9B0A324EC4ED1002C258C /* ExistingUserKycInteractor.swift in Sources */,
4060B97324DBBA0300E90F8C /* KYCVerifyStep1ServiceType.swift in Sources */,
24BBCCE429CD7C430081F4A6 /* BeneficiaryDetailServiceType.swift in Sources */,
73551A5A26E5B1290030B302 /* OtpVerificationServiceType.swift in Sources */,
73157B9E22DC1EEC009B836F /* PopupNotificationInteractor.swift in Sources */,
4099AF0125235C45003FA012 /* CircleBorderedView.swift in Sources */,
@ -8110,6 +8229,7 @@
D977859E215DC55F00754079 /* TransactionHistoryService.swift in Sources */,
241796E029B3931C005D8219 /* CustomItemTabView.swift in Sources */,
D95B5E3A21311057000C0B33 /* GmeContactsService.swift in Sources */,
24BBCCEC29CD7C430081F4A6 /* BeneficiaryDetailViewInterface.swift in Sources */,
D95B5E3F21311057000C0B33 /* GmeContactsWireframeInput.swift in Sources */,
405718D024D932AE0022CDDE /* NewUserRegisterWireframeInput.swift in Sources */,
28AB139828E552C200191695 /* NotificationDetailWireframe.swift in Sources */,
@ -8195,6 +8315,7 @@
D9B7ADF82130048E009B0564 /* ExchangeRatesViewController.swift in Sources */,
89739E3124459A630016251B /* SendMoneyParentWireframeInput.swift in Sources */,
405AA0EF2541B32B00508420 /* PropertyUtility.swift in Sources */,
24BBCCE829CD7C430081F4A6 /* BeneficiaryDetailPresenter.swift in Sources */,
D950BED321549242008367A1 /* HomeService.swift in Sources */,
244C69B729B7A01600D7B69A /* HomeAccountDetailView.swift in Sources */,
7EDBFBDF24B2C5DA00AD5D4D /* RedeemCashPickUpWireframeInput.swift in Sources */,
@ -8204,6 +8325,7 @@
FF29296C212B8DFE00FF5BAC /* ExchangeRateCollectionViewCell.swift in Sources */,
73185352230EACA400BA9AE3 /* SendMoneyProvinceViewModel.swift in Sources */,
73AEFF772334A13100A967FB /* TransactionHistoryGroupWireframe.swift in Sources */,
24BBCCE729CD7C430081F4A6 /* BeneficiaryDetailInteractorIO.swift in Sources */,
7EDBFBD824B2C5DA00AD5D4D /* RedeemCashPickUpModuleInterface.swift in Sources */,
89EA0D34243EC0D2003ACCC8 /* ProfileChangePasswordViewController.swift in Sources */,
73149F6A22E5AF8000D66B26 /* LauncherScreenWireframe.swift in Sources */,
@ -8260,6 +8382,7 @@
739F8187234AFF13003ABCF3 /* DebugManager.swift in Sources */,
40218EF724D2B1940047FBF5 /* UserRegistrationModuleInterface.swift in Sources */,
7E364CEF24A46D27007D6E02 /* BalanceModel.swift in Sources */,
24BBCCE329CD7C430081F4A6 /* BeneficiaryDetailModuleInterface.swift in Sources */,
24A4502229B83A710049CE29 /* HomeExchangeRateCollectionViewCell.swift in Sources */,
D96BD11B216479E200DFE7D8 /* WalletStatementWireframe.swift in Sources */,
D96BD116216479E200DFE7D8 /* WalletStatementServiceType.swift in Sources */,
@ -8295,6 +8418,7 @@
7EDBFC2624B3098E00AD5D4D /* WithdrawFromWalletDetailInteractor.swift in Sources */,
28AB139328E552C200191695 /* NotificationDetailServiceType.swift in Sources */,
738FD4842303D1FD008B144D /* VerifyAccountRequestModel.swift in Sources */,
24BBCCE629CD7C430081F4A6 /* BeneficiaryDetailInteractor.swift in Sources */,
7327568423B0456400BF66C5 /* ManageAgreementWireframeInput.swift in Sources */,
73684456237BD23B00796620 /* InboundTransactionCell.swift in Sources */,
D957DC6C213D05E700FA812D /* SendMoneySubmitResponse.swift in Sources */,

37
GME Remit/Modules/BeneficiaryDetail/Application Logic/Interactor/BeneficiaryDetailInteractor.swift

@ -0,0 +1,37 @@
//
// BeneficiaryDetailInteractor.swift
// GME Remit
//
// Created by Manish Adhikari on 24/03/2023.
//Copyright © 2023 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
class BeneficiaryDetailInteractor {
// MARK: Properties
weak var output: BeneficiaryDetailInteractorOutput?
private let service: BeneficiaryDetailServiceType
// MARK: Initialization
init(service: BeneficiaryDetailServiceType) {
self.service = service
}
// MARK: Converting entities
}
// MARK: BeneficiaryDetail interactor input interface
extension BeneficiaryDetailInteractor: BeneficiaryDetailInteractorInput {
func makeApiRequest() {
self.service.makeApiRequest(success: { (message) in
self.output?.success(message: message ?? "")
}) { (error) in
self.output?.show(error: error)
}
}
}

16
GME Remit/Modules/BeneficiaryDetail/Application Logic/Interactor/BeneficiaryDetailInteractorIO.swift

@ -0,0 +1,16 @@
//
// BeneficiaryDetailInteractorIO.swift
// GME Remit
//
// Created by Manish Adhikari on 24/03/2023.
//Copyright © 2023 Gobal Money Express Co. Ltd. All rights reserved.
//
protocol BeneficiaryDetailInteractorInput: class {
func makeApiRequest()
}
protocol BeneficiaryDetailInteractorOutput: class {
func show(error: Error)
func success(message: String)
}

31
GME Remit/Modules/BeneficiaryDetail/Application Logic/Service/BeneficiaryDetailService.swift

@ -0,0 +1,31 @@
//
// BeneficiaryDetailService.swift
// GME Remit
//
// Created by Manish Adhikari on 24/03/2023.
//Copyright © 2023 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
class BeneficiaryDetailService: BeneficiaryDetailServiceType {
func makeApiRequest(
success: @escaping (String?) -> Void,
failure: @escaping (Error) -> Void
){
APIRouter
// .requestOTP(mobileNumber: mobile)
.request(
needsAuthorization: false,
success: {(response: ResponseMessage) in
if (response.errorCode ?? "") == "1" {
let error = NSError(domain: "Network", code: 0, message: response.message ?? "")
failure(error)
} else {
success(response.message ?? "")
}
},
failure: {failure($0)}
)
}
}

16
GME Remit/Modules/BeneficiaryDetail/Application Logic/Service/BeneficiaryDetailServiceType.swift

@ -0,0 +1,16 @@
//
// BeneficiaryDetailServiceType.swift
// GME Remit
//
// Created by Manish Adhikari on 24/03/2023.
//Copyright © 2023 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
protocol BeneficiaryDetailServiceType: class {
func makeApiRequest(
success: @escaping (String?) -> Void,
failure: @escaping (Error) -> Void
)
}

11
GME Remit/Modules/BeneficiaryDetail/Module Interface/BeneficiaryDetailModuleInterface.swift

@ -0,0 +1,11 @@
//
// BeneficiaryDetailModuleInterface.swift
// GME Remit
//
// Created by Manish Adhikari on 24/03/2023.
//Copyright © 2023 Gobal Money Express Co. Ltd. All rights reserved.
//
protocol BeneficiaryDetailModuleInterface: class {
func makeApiRequest()
}

43
GME Remit/Modules/BeneficiaryDetail/User Interface/Presenter/BeneficiaryDetailPresenter.swift

@ -0,0 +1,43 @@
//
// BeneficiaryDetailPresenter.swift
// GME Remit
//
// Created by Manish Adhikari on 24/03/2023.
//Copyright © 2023 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
class BeneficiaryDetailPresenter {
// MARK: Properties
weak var view: BeneficiaryDetailViewInterface?
var interactor: BeneficiaryDetailInteractorInput?
var wireframe: BeneficiaryDetailWireframeInput?
// MARK: Converting entities
}
// MARK: BeneficiaryDetail module interface
extension BeneficiaryDetailPresenter: BeneficiaryDetailModuleInterface {
func makeApiRequest(){
self.view?.showLoading()
self.interactor?.makeApiRequest()
}
}
// MARK: BeneficiaryDetail interactor output interface
extension BeneficiaryDetailPresenter: BeneficiaryDetailInteractorOutput {
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)
}
}

387
GME Remit/Modules/BeneficiaryDetail/User Interface/View/BeneficiaryDetail.storyboard

@ -0,0 +1,387 @@
<?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" initialViewController="HSb-ou-7T5">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
<capability name="Named colors" minToolsVersion="9.0"/>
<capability name="Safe area layout guides" 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"/>
</dependencies>
<customFonts key="customFonts">
<array key="volte-semibold.otf">
<string>FONTSPRINGDEMO-VolteSemiboldRegular</string>
</array>
</customFonts>
<scenes>
<!--BeneficiaryDetail-->
<scene sceneID="R60-Pu-Hpy">
<objects>
<viewController storyboardIdentifier="BeneficiaryDetailViewController" title="BeneficiaryDetail" id="HSb-ou-7T5" customClass="BeneficiaryDetailViewController" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="9Uc-9s-KgO">
<rect key="frame" x="0.0" y="0.0" width="375" height="700"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Msg-ak-twI">
<rect key="frame" x="16" y="0.0" width="343" height="62"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="SgC-Zr-M2U">
<rect key="frame" x="16" y="16" width="311" height="30"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="GAb-k2-WAx">
<rect key="frame" x="0.0" y="0.0" width="50" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="50" id="Sa2-BD-8P0"/>
</constraints>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" image="backIconBlack"/>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Beneficiary details" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QwU-Sh-1vb">
<rect key="frame" x="50" y="6.5" width="261" height="17"/>
<fontDescription key="fontDescription" name="FONTSPRINGDEMO-VolteSemiboldRegular" family="FONTSPRING DEMO - Volte Semibold" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.86325538079470199" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="SgC-Zr-M2U" firstAttribute="leading" secondItem="Msg-ak-twI" secondAttribute="leading" constant="16" id="3Xa-AO-VoQ"/>
<constraint firstItem="SgC-Zr-M2U" firstAttribute="top" secondItem="Msg-ak-twI" secondAttribute="top" constant="16" id="CuX-Gi-EvT"/>
<constraint firstAttribute="bottom" secondItem="SgC-Zr-M2U" secondAttribute="bottom" constant="16" id="Kvb-vm-c4K"/>
<constraint firstAttribute="trailing" secondItem="SgC-Zr-M2U" secondAttribute="trailing" constant="16" id="nqt-j4-gnI"/>
</constraints>
</view>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="nhb-o1-ekZ">
<rect key="frame" x="0.0" y="62" width="375" height="638"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<view key="tableHeaderView" contentMode="scaleToFill" id="7d8-Fv-619">
<rect key="frame" x="0.0" y="0.0" width="375" height="165"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" alignment="center" spacing="32" translatesAutoresizingMaskIntoConstraints="NO" id="IC7-5u-2hN">
<rect key="frame" x="0.0" y="0.0" width="375" height="165"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="dhs-ZH-QJw">
<rect key="frame" x="0.0" y="9" width="96" height="147"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="_" translatesAutoresizingMaskIntoConstraints="NO" id="Owc-cl-DGR">
<rect key="frame" x="0.0" y="0.0" width="96" height="96"/>
<constraints>
<constraint firstAttribute="width" constant="96" id="Sdd-mF-eJ1"/>
<constraint firstAttribute="height" constant="96" id="ghA-ui-z0y"/>
</constraints>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0xQ-e7-Vqb">
<rect key="frame" x="0.0" y="116" width="96" height="31"/>
<constraints>
<constraint firstAttribute="height" constant="31" id="coG-v2-wbe"/>
</constraints>
<color key="tintColor" red="0.1803921568627451" green="0.53725490196078429" blue="1" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" title="Update"/>
</button>
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="lmj-Vg-SQG">
<rect key="frame" x="128" y="6.5" width="247" height="152"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" alignment="center" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="4GK-BA-lCj">
<rect key="frame" x="0.0" y="0.0" width="247" height="32"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="avatar" translatesAutoresizingMaskIntoConstraints="NO" id="OCx-bC-rJb">
<rect key="frame" x="0.0" y="4" width="24" height="24"/>
<constraints>
<constraint firstAttribute="height" constant="24" id="cW1-rO-ZVt"/>
<constraint firstAttribute="width" constant="24" id="rgL-Dy-xiR"/>
</constraints>
</imageView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="klu-Fm-Zi4">
<rect key="frame" x="32" y="0.0" width="215" height="32"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Name" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MaY-cJ-z8a">
<rect key="frame" x="0.0" y="0.0" width="215" height="16"/>
<fontDescription key="fontDescription" name="FONTSPRINGDEMO-VolteSemiboldRegular" family="FONTSPRING DEMO - Volte Semibold" pointSize="12"/>
<color key="textColor" red="0.62352941176470589" green="0.62352941176470589" blue="0.62352941176470589" alpha="0.87" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Rajesh Sharma" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0Gz-4k-o6Q">
<rect key="frame" x="0.0" y="16" width="215" height="16"/>
<fontDescription key="fontDescription" name="FONTSPRINGDEMO-VolteSemiboldRegular" family="FONTSPRING DEMO - Volte Semibold" pointSize="16"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" alignment="center" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="Xb1-GV-d3u">
<rect key="frame" x="0.0" y="40" width="247" height="32"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="avatar" translatesAutoresizingMaskIntoConstraints="NO" id="j4v-FU-Ds2">
<rect key="frame" x="0.0" y="4" width="24" height="24"/>
<constraints>
<constraint firstAttribute="height" constant="24" id="R0Y-Tx-F1P"/>
<constraint firstAttribute="width" constant="24" id="bIj-c3-R0e"/>
</constraints>
</imageView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="Eb6-ZA-13J">
<rect key="frame" x="32" y="0.0" width="215" height="32"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Name" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zCs-ye-DFj">
<rect key="frame" x="0.0" y="0.0" width="215" height="16"/>
<fontDescription key="fontDescription" name="FONTSPRINGDEMO-VolteSemiboldRegular" family="FONTSPRING DEMO - Volte Semibold" pointSize="12"/>
<color key="textColor" red="0.62352941179999999" green="0.62352941179999999" blue="0.62352941179999999" alpha="0.87" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Rajesh Sharma" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="m7c-cG-URc">
<rect key="frame" x="0.0" y="16" width="215" height="16"/>
<fontDescription key="fontDescription" name="FONTSPRINGDEMO-VolteSemiboldRegular" family="FONTSPRING DEMO - Volte Semibold" pointSize="16"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" alignment="center" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="hNK-BM-IaB">
<rect key="frame" x="0.0" y="80" width="247" height="32"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="avatar" translatesAutoresizingMaskIntoConstraints="NO" id="I4m-uD-kOg">
<rect key="frame" x="0.0" y="4" width="24" height="24"/>
<constraints>
<constraint firstAttribute="width" constant="24" id="BbE-aU-YkS"/>
<constraint firstAttribute="height" constant="24" id="l0O-kk-XQ4"/>
</constraints>
</imageView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="fey-vZ-Um0">
<rect key="frame" x="32" y="0.0" width="215" height="32"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Name" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xm3-HN-iIf">
<rect key="frame" x="0.0" y="0.0" width="215" height="16"/>
<fontDescription key="fontDescription" name="FONTSPRINGDEMO-VolteSemiboldRegular" family="FONTSPRING DEMO - Volte Semibold" pointSize="12"/>
<color key="textColor" red="0.62352941179999999" green="0.62352941179999999" blue="0.62352941179999999" alpha="0.87" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Rajesh Sharma" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fKe-CP-Ddg">
<rect key="frame" x="0.0" y="16" width="215" height="16"/>
<fontDescription key="fontDescription" name="FONTSPRINGDEMO-VolteSemiboldRegular" family="FONTSPRING DEMO - Volte Semibold" pointSize="16"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" alignment="center" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="RBy-tS-3qS">
<rect key="frame" x="0.0" y="120" width="247" height="32"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="avatar" translatesAutoresizingMaskIntoConstraints="NO" id="5p1-o0-fpz">
<rect key="frame" x="0.0" y="4" width="24" height="24"/>
<constraints>
<constraint firstAttribute="height" constant="24" id="5JQ-Kc-bPr"/>
<constraint firstAttribute="width" constant="24" id="AF7-91-LCr"/>
</constraints>
</imageView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="m8D-Yz-pGU">
<rect key="frame" x="32" y="0.0" width="215" height="32"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Name" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5SO-tq-90r">
<rect key="frame" x="0.0" y="0.0" width="215" height="16"/>
<fontDescription key="fontDescription" name="FONTSPRINGDEMO-VolteSemiboldRegular" family="FONTSPRING DEMO - Volte Semibold" pointSize="12"/>
<color key="textColor" red="0.62352941179999999" green="0.62352941179999999" blue="0.62352941179999999" alpha="0.87" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Rajesh Sharma" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6Wd-hf-ec0">
<rect key="frame" x="0.0" y="16" width="215" height="16"/>
<fontDescription key="fontDescription" name="FONTSPRINGDEMO-VolteSemiboldRegular" family="FONTSPRING DEMO - Volte Semibold" pointSize="16"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
</subviews>
</stackView>
</subviews>
</stackView>
</subviews>
</stackView>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstAttribute="bottom" secondItem="IC7-5u-2hN" secondAttribute="bottom" id="7qu-Ex-WEz"/>
<constraint firstAttribute="trailing" secondItem="IC7-5u-2hN" secondAttribute="trailing" id="Wbe-4z-K8p"/>
<constraint firstItem="IC7-5u-2hN" firstAttribute="leading" secondItem="7d8-Fv-619" secondAttribute="leading" id="Zje-WD-T2K"/>
<constraint firstItem="IC7-5u-2hN" firstAttribute="top" secondItem="7d8-Fv-619" secondAttribute="top" id="cPy-nI-7Mm"/>
</constraints>
</view>
<view key="tableFooterView" contentMode="scaleToFill" id="bfe-KV-1bh">
<rect key="frame" x="0.0" y="446" width="375" height="89"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="12" translatesAutoresizingMaskIntoConstraints="NO" id="D0P-MT-gyH">
<rect key="frame" x="16" y="0.0" width="343" height="73"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="View JME Remit Policies and your payment method rights" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7Ix-yU-Ptr">
<rect key="frame" x="0.0" y="0.0" width="343" height="13"/>
<fontDescription key="fontDescription" name="FONTSPRINGDEMO-VolteSemiboldRegular" family="FONTSPRING DEMO - Volte Semibold" pointSize="10"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" semanticContentAttribute="forceRightToLeft" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" reversesTitleShadowWhenHighlighted="YES" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jac-30-JTB">
<rect key="frame" x="0.0" y="25" width="343" height="48"/>
<color key="backgroundColor" red="0.1803921568627451" green="0.53725490196078429" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="48" id="Y4A-kf-84t"/>
</constraints>
<color key="tintColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" image="arrow.forward" catalog="system" title="Continue "/>
</button>
</subviews>
</stackView>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstAttribute="bottom" secondItem="D0P-MT-gyH" secondAttribute="bottom" constant="16" id="7UP-kH-wBg"/>
<constraint firstItem="D0P-MT-gyH" firstAttribute="leading" secondItem="bfe-KV-1bh" secondAttribute="leading" constant="16" id="Kq6-4j-XYF"/>
<constraint firstAttribute="trailing" secondItem="D0P-MT-gyH" secondAttribute="trailing" constant="16" id="LPb-dQ-oMr"/>
<constraint firstItem="D0P-MT-gyH" firstAttribute="top" secondItem="bfe-KV-1bh" secondAttribute="top" id="lvz-Mg-ou2"/>
</constraints>
</view>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" rowHeight="203" id="Zvf-x1-Wi5">
<rect key="frame" x="0.0" y="215" width="375" height="203"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="Zvf-x1-Wi5" id="44G-xa-BlV">
<rect key="frame" x="0.0" y="0.0" width="375" height="203"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" alignment="center" spacing="16" translatesAutoresizingMaskIntoConstraints="NO" id="Keh-9H-RzY">
<rect key="frame" x="0.0" y="0.0" width="359" height="203"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="rgh-8D-QlR">
<rect key="frame" x="0.0" y="84.5" width="50" height="34"/>
<color key="tintColor" red="0.0" green="0.80000000000000004" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" image="circle.inset.filled" catalog="system"/>
</button>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZDM-LN-544">
<rect key="frame" x="66" y="12" width="293" height="179"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" alignment="top" spacing="16" translatesAutoresizingMaskIntoConstraints="NO" id="DHQ-Um-OF3">
<rect key="frame" x="16" y="16" width="212.5" height="82"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="bank_deposit" translatesAutoresizingMaskIntoConstraints="NO" id="hqc-cx-rzh">
<rect key="frame" x="0.0" y="0.0" width="54" height="54"/>
<constraints>
<constraint firstAttribute="height" constant="40" id="2AX-wg-DHd"/>
<constraint firstAttribute="width" constant="40" id="jBV-OA-jx3"/>
</constraints>
</imageView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="Cnn-41-XDg">
<rect key="frame" x="70" y="0.0" width="142.5" height="82"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="IME Pay Mobile Wallet" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ae7-L0-gY3">
<rect key="frame" x="0.0" y="0.0" width="142.5" height="14"/>
<fontDescription key="fontDescription" name="FONTSPRINGDEMO-VolteSemiboldRegular" family="FONTSPRING DEMO - Volte Semibold" pointSize="14"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="4" translatesAutoresizingMaskIntoConstraints="NO" id="Lh7-U6-fWO">
<rect key="frame" x="0.0" y="22" width="142.5" height="60"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ID: 9841303676" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="doi-P7-z1R">
<rect key="frame" x="0.0" y="0.0" width="142.5" height="12"/>
<fontDescription key="fontDescription" name="FONTSPRINGDEMO-VolteSemiboldRegular" family="FONTSPRING DEMO - Volte Semibold" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ID: 9841303676" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="O58-Ke-fq6">
<rect key="frame" x="0.0" y="16" width="142.5" height="12"/>
<fontDescription key="fontDescription" name="FONTSPRINGDEMO-VolteSemiboldRegular" family="FONTSPRING DEMO - Volte Semibold" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ID: 9841303676" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9uL-wQ-mZd">
<rect key="frame" x="0.0" y="32" width="142.5" height="12"/>
<fontDescription key="fontDescription" name="FONTSPRINGDEMO-VolteSemiboldRegular" family="FONTSPRING DEMO - Volte Semibold" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ID: 9841303676" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jsp-NN-jLM">
<rect key="frame" x="0.0" y="48" width="142.5" height="12"/>
<fontDescription key="fontDescription" name="FONTSPRINGDEMO-VolteSemiboldRegular" family="FONTSPRING DEMO - Volte Semibold" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
</subviews>
</stackView>
</subviews>
</stackView>
</subviews>
<color key="backgroundColor" name="ThemeSeparate"/>
<constraints>
<constraint firstItem="DHQ-Um-OF3" firstAttribute="top" secondItem="ZDM-LN-544" secondAttribute="top" constant="16" id="IPG-sG-484"/>
<constraint firstAttribute="trailing" secondItem="DHQ-Um-OF3" secondAttribute="trailing" id="JfO-A7-ABO"/>
<constraint firstAttribute="bottom" secondItem="DHQ-Um-OF3" secondAttribute="bottom" constant="16" id="hMX-bV-B8j"/>
<constraint firstItem="DHQ-Um-OF3" firstAttribute="leading" secondItem="ZDM-LN-544" secondAttribute="leading" constant="16" id="s4K-Rw-9Ce"/>
</constraints>
</view>
</subviews>
<constraints>
<constraint firstAttribute="width" constant="20" id="gM0-Jm-Ifw"/>
<constraint firstAttribute="height" constant="20" id="jnK-ah-iGd"/>
</constraints>
</stackView>
</subviews>
<constraints>
<constraint firstItem="Keh-9H-RzY" firstAttribute="leading" secondItem="44G-xa-BlV" secondAttribute="leading" id="3p6-L5-hAV"/>
<constraint firstAttribute="bottom" secondItem="Keh-9H-RzY" secondAttribute="bottom" id="3sU-Za-UiA"/>
<constraint firstAttribute="trailing" secondItem="Keh-9H-RzY" secondAttribute="trailing" constant="16" id="Elb-0n-Fik"/>
<constraint firstItem="Keh-9H-RzY" firstAttribute="top" secondItem="44G-xa-BlV" secondAttribute="top" id="yAW-2k-ZfN"/>
</constraints>
</tableViewCellContentView>
</tableViewCell>
</prototypes>
</tableView>
</subviews>
<viewLayoutGuide key="safeArea" id="93B-7y-U8z"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="nhb-o1-ekZ" firstAttribute="top" secondItem="Msg-ak-twI" secondAttribute="bottom" id="2RT-CE-MJT"/>
<constraint firstItem="93B-7y-U8z" firstAttribute="bottom" secondItem="nhb-o1-ekZ" secondAttribute="bottom" id="3Ug-Pm-YXc"/>
<constraint firstItem="Msg-ak-twI" firstAttribute="top" secondItem="93B-7y-U8z" secondAttribute="top" id="JAR-Nf-npW"/>
<constraint firstItem="Msg-ak-twI" firstAttribute="leading" secondItem="9Uc-9s-KgO" secondAttribute="leadingMargin" id="PHa-tz-sP5"/>
<constraint firstItem="93B-7y-U8z" firstAttribute="trailing" secondItem="nhb-o1-ekZ" secondAttribute="trailing" id="QOl-bd-eHQ"/>
<constraint firstItem="nhb-o1-ekZ" firstAttribute="leading" secondItem="93B-7y-U8z" secondAttribute="leading" id="o9y-fh-flB"/>
<constraint firstAttribute="trailingMargin" secondItem="Msg-ak-twI" secondAttribute="trailing" id="xct-nP-Sgi"/>
</constraints>
</view>
<size key="freeformSize" width="375" height="700"/>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="8je-5K-XuW" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-92" y="232.08395802098951"/>
</scene>
</scenes>
<color key="tintColor" red="0.78177064659999995" green="0.55228364470000002" blue="0.018981300289999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<resources>
<image name="_" width="200" height="200"/>
<image name="arrow.forward" catalog="system" width="128" height="95"/>
<image name="avatar" width="57" height="55"/>
<image name="backIconBlack" width="21" height="16"/>
<image name="bank_deposit" width="54" height="54"/>
<image name="circle.inset.filled" catalog="system" width="128" height="123"/>
<namedColor name="ThemeSeparate">
<color red="0.82352941176470584" green="0.82352941176470584" blue="0.82352941176470584" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</namedColor>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>

58
GME Remit/Modules/BeneficiaryDetail/User Interface/View/BeneficiaryDetailViewController.swift

@ -0,0 +1,58 @@
//
// BeneficiaryDetailViewController.swift
// GME Remit
//
// Created by Manish Adhikari on 24/03/2023.
//Copyright © 2023 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
class BeneficiaryDetailViewController: UIViewController {
// MARK: Properties
var presenter: BeneficiaryDetailModuleInterface?
// MARK: IBOutlets
// MARK: VC's Life cycle
override func viewDidLoad() {
super.viewDidLoad()
self.setup()
}
// MARK: IBActions
// MARK: Other Functions
private func setup() {
// all setup should be done here
}
}
// MARK: BeneficiaryDetailViewInterface
extension BeneficiaryDetailViewController: BeneficiaryDetailViewInterface {
func showLoading() {
self.showProgressHud()
}
func hideLoading() {
self.hideProgressHud()
}
func show(error: String) {
self.alert(type: .error, message: error)
}
func show(message: String) {
self.alertWithOk(
type: .success,
message: message,
title: "Success",
okTitle: "Ok"
) {
}
}
}

14
GME Remit/Modules/BeneficiaryDetail/User Interface/View/BeneficiaryDetailViewInterface.swift

@ -0,0 +1,14 @@
//
// BeneficiaryDetailViewInterface.swift
// GME Remit
//
// Created by Manish Adhikari on 24/03/2023.
//Copyright © 2023 Gobal Money Express Co. Ltd. All rights reserved.
//
protocol BeneficiaryDetailViewInterface: class {
func showLoading()
func hideLoading()
func show(error: String)
func show(message: String)
}

34
GME Remit/Modules/BeneficiaryDetail/User Interface/Wireframe/BeneficiaryDetailWireframe.swift

@ -0,0 +1,34 @@
//
// BeneficiaryDetailWireframe.swift
// GME Remit
//
// Created by Manish Adhikari on 24/03/2023.
//Copyright © 2023 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
class BeneficiaryDetailWireframe {
weak var view: UIViewController!
}
extension BeneficiaryDetailWireframe: BeneficiaryDetailWireframeInput {
var storyboardName: String {return "BeneficiaryDetail"}
func getMainView() -> UIViewController {
let service = BeneficiaryDetailService()
let interactor = BeneficiaryDetailInteractor(service: service)
let presenter = BeneficiaryDetailPresenter()
let viewController = viewControllerFromStoryboard(of: BeneficiaryDetailViewController.self)
viewController.presenter = presenter
interactor.output = presenter
presenter.interactor = interactor
presenter.wireframe = self
presenter.view = viewController
self.view = viewController
return viewController
}
}

13
GME Remit/Modules/BeneficiaryDetail/User Interface/Wireframe/BeneficiaryDetailWireframeInput.swift

@ -0,0 +1,13 @@
//
// BeneficiaryDetailWireframeInput.swift
// GME Remit
//
// Created by Manish Adhikari on 24/03/2023.
//Copyright © 2023 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
protocol BeneficiaryDetailWireframeInput: WireframeInput {
}

6
GME Remit/Modules/Home/User Interface/View/HomeViewController.swift

@ -258,8 +258,6 @@ class HomeViewController: UIViewController {
.leftViewController as? SideMenuViewController
sideMenuVC?.sideMenuDelegate = self
setupNotificationBadge()
let supportImage = UIImage(named: "customer_support_new")?.withRenderingMode(.alwaysOriginal)
supportBarButton.image = supportImage
@ -269,9 +267,6 @@ class HomeViewController: UIViewController {
name: self.getYearlyLimitNotificationName(),
object: nil
)
self.navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
}
override func viewWillAppear(_ animated: Bool) {
@ -292,6 +287,7 @@ class HomeViewController: UIViewController {
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
}
override func viewWillDisappear(_ animated: Bool) {

7
GME Remit/Modules/RecipientModules/Recipients/User Interface/View/Recipients.storyboard

@ -331,8 +331,8 @@
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4hS-d5-0mq">
<rect key="frame" x="0.0" y="133" width="375" height="131"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Registered beneficiaries" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jQK-AW-0pG">
<rect key="frame" x="8" y="8" width="143.5" height="14.5"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="Registered beneficiaries" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jQK-AW-0pG">
<rect key="frame" x="8" y="8" width="143.66666666666666" height="14.5"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/>
<color key="textColor" name="ThemeText"/>
<nil key="highlightedColor"/>
@ -486,6 +486,9 @@
<state key="normal" title="Edit Details">
<color key="titleColor" red="0.18039215689999999" green="0.53725490200000003" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="didTappedEditDetailsButton:" destination="K6H-Ti-Vmr" eventType="touchUpInside" id="jf6-Xq-JKa"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="V4Y-CS-dqf">
<rect key="frame" x="148.5" y="0.0" width="146.5" height="31"/>

4
GME Remit/Modules/RecipientModules/Recipients/User Interface/View/RecipientsViewController.swift

@ -179,6 +179,9 @@ extension RecipientsViewController {
// }
cell.setModel(with: element)
cell.didTappedEditDetails = { [weak self] model in
}
// cell.hero.modifiers = [.fade, .scale(0.7)]
// cell.delegate = self
@ -275,7 +278,6 @@ extension RecipientsViewController: UICollectionViewDelegate, UICollectionViewDa
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "contactsCell", for: indexPath) as? TransferListCollectionViewCell else { return UICollectionViewCell() }
return cell
}

7
GME Remit/Modules/TransferList/User Interface/View/TransferListTableViewCell.swift

@ -4,6 +4,7 @@ import UIKit
class TransferListTableViewCell: UITableViewCell {
var didTappedEditDetails: ( (Recipient?) -> ())?
@IBOutlet weak var additionalTextLabel: UILabel!
@IBOutlet weak var nameLabel: UILabel!
@ -41,12 +42,16 @@ class TransferListTableViewCell: UITableViewCell {
self.model = model
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
@IBAction func didTappedEditDetailsButton(_ sender: Any) {
didTappedEditDetails?(model)
}
}
Loading…
Cancel
Save