// // SetupRecipientWireframe.swift // GME Remit // // Created by InKwon James Kim on 09/08/2019. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit class SetupRecipientWireframe { weak var view: UIViewController! weak var output: SetupRecipientWireframeOutput? private var recipient: Recipient? private weak var delegate: SetupRecipientDelegate? } extension SetupRecipientWireframe: SetupRecipientWireframeInput { var storyboardName: String {return "SetupRecipient"} func getMainView() -> UIViewController { let service = SetupRecipientService() let interactor = SetupRecipientInteractor(service: service, recipient) let presenter = SetupRecipientPresenter() let viewModel = SetupRecipientViewModel() let viewController = viewControllerFromStoryboard(of: SetupRecipientViewController.self) output = presenter viewController.viewModel = viewModel viewController.delegate = delegate interactor.output = presenter presenter.interactor = interactor presenter.wireframe = self presenter.viewModel = viewModel viewModel.presenter = presenter view = viewController return viewController } func openEdit( using model: Recipient, with delegate: SetupRecipientDelegate, on base: UIViewController, completion: (() -> Void)? = nil ) { recipient = model self.delegate = delegate let viewcontroller = getMainView() let navigationController = UINavigationController( rootViewController: viewcontroller ) navigationController.hero.isEnabled = true navigationController.modalPresentationStyle = .overFullScreen base.present(navigationController, animated: true, completion: completion) } func openNew( with delegate: SetupRecipientDelegate, on base: UIViewController, completion: (() -> Void)? = nil ) { self.delegate = delegate let viewcontroller = getMainView() let navigationController = UINavigationController( rootViewController: viewcontroller ) navigationController.hero.isEnabled = true navigationController.modalPresentationStyle = .overFullScreen base.present(navigationController, animated: true, completion: completion) } func openSelectMode(with model: [TablePresenterProtocol], type: SetupOpenType) { TablePresenterWireframe().openWith( tag: type.rawValue, delegate: self, model: model, source: view ) } func openBranches(countryCode: String, bankID: String) { TablePresenterWireframe().openWith( tag: SetupOpenType.branch.rawValue, type: .branches(countryCode: countryCode, bankID: bankID), delegate: self, model: nil, source: view ) } } extension SetupRecipientWireframe: TablePresenterDelegate { func tablePresenterView(_ viewController: TablePresenterViewController) -> TablePresenterConfiguration { var configure = TablePresenterConfiguration( presenterTitle: "search_payout_country_text".localized(), closeButtonTitle: "penny_test_close_text".localized(), notFoundTitle: "no_payout_country_found_text".localized(), searchBarPlaceHolder: "search_text".localized() ) guard let type = SetupOpenType(rawValue: viewController.view.tag) else { return configure } switch type { case .country: return configure case .paymentMode: configure.presenterTitle = "search_payment_method_text".localized() configure.notFoundTitle = "no_payment_method_found_text".localized() case .bank: configure.presenterTitle = "search_bank_text".localized() configure.notFoundTitle = "no_bank_found_text".localized() case .branch: configure.presenterTitle = "search_branch_text".localized() configure.notFoundTitle = "no_branch_found_text".localized() case .idType: configure.presenterTitle = "search_id_type_text".localized() configure.notFoundTitle = "no_id_type_found_text".localized() case .stateProvince: configure.presenterTitle = "search_province_text".localized() configure.notFoundTitle = "no_province_found_text".localized() case .district: configure.presenterTitle = "search_district_text".localized() configure.notFoundTitle = "no_district_found_text".localized() case .relation: configure.presenterTitle = "search_relation_text".localized() configure.notFoundTitle = "no_relation_found_text".localized() case .reason: configure.presenterTitle = "search_reason_text".localized() configure.notFoundTitle = "no_reason_found_text".localized() case .nativeCountry: configure.presenterTitle = "search_native_country_text".localized() configure.notFoundTitle = "no_native_country_found_text".localized() } return configure } func tablePresenterView( _ viewController: TablePresenterViewController, didSelectModel model: TablePresenterProtocol? ) { guard let type = SetupOpenType(rawValue: viewController.view.tag) else { return } output?.setSelectedData(with: model, type: type) } }