// // SideMenuViewController.swift // GMERemittance // // Created by Sujal on 2/22/18. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit import SDWebImage import LGSideMenuController import Localize_Swift import RxSwift import RxCocoa protocol SideMenuDelegate: class { func didSelectMenu(_ viewController: UIViewController, didSelectMenu: SideMenuViewController.MenuType) } struct SideMenuNavigationNotifications { static let aboutGme = "aboutGme" static let support = "support" static let setting = "setting" static let availableBalance = "Available_Balance" static let withdraw = "withdraw" static let KftcAccountList = "KftcAccountList" static let transactionHistory = "transaction_History_from_sidemenu" } class SideMenuViewController: UIViewController { struct StringConstants { let logoutTitleText = "logout_text".localized() let logoutConfirmationText = "logout_confirmation_text".localized() let noText = "no_text".localized() let yesText = "yes_text".localized() let autoDebitMenuText = "auto_debit_account_text".localized() let inboundMenuText = "inbound_accounts_text".localized() let aboutGmeMenuText = "about_gme_text".localized() let settingMenuText = "settings_text".localized() let availableBalanceTitleLabelText = "available_balance_text".localized() let withdrawButtonText = "bank_deposit_text".localized() let gmeWalletNoTitleText = "gme_wallet_no_text".localized() } enum MenuType { case about case setting case notice } // @IBOutlets @IBOutlet weak var imageViewProfileSetting: UIImageView! @IBOutlet weak var labelProfileName: UILabel! @IBOutlet weak var labelPhone: UILabel! @IBOutlet weak var labelEmail: UILabel! @IBOutlet weak var roundedBgView: UIView! @IBOutlet weak var labelUserNameInitial: UILabel! @IBOutlet weak var settingButton: UIButton! @IBOutlet weak var aboutGmeButton: UIButton! @IBOutlet weak var logoutButton: UIButton! @IBOutlet weak var aboutIconImageView: UIImageView! @IBOutlet weak var settingIconImageView: UIImageView! @IBOutlet weak var logoutIconImageView: UIImageView! @IBOutlet weak var noticeButton: UIButton! weak var sideMenuDelegate: SideMenuDelegate? private let disposeBag = DisposeBag() var selectedMenu: MenuType? { didSet { guard let menu = selectedMenu else { return } sideMenuDelegate?.didSelectMenu(self, didSelectMenu: menu) } } // Life Cycle override func viewDidLoad() { super.viewDidLoad() setUpSettingsScreen() setup() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.setUpSettingsScreen() NotificationCenter.default.addObserver( self, selector: #selector(configureText), name: NSNotification.Name(LCLLanguageChangeNotification), object: nil ) } // Other Functions private func addShadow(view: UIView) { view.layer.shadowColor = UIColor.darkGray.cgColor view.layer.shadowOpacity = 0.5 view.layer.shadowRadius = 2 let offset = CGSize(width: 1, height: 1) view.layer.shadowOffset = offset } private func setup() { configureText() let shouldShowWithdrawButton = Utility.isVerifiedUser() self.view.backgroundColor = .themeRedDark self.roundedBgView.layer.cornerRadius = 20 labelProfileName.textColor = .themeRed aboutGmeButton.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.5) settingButton.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.5) logoutButton.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.5) } @objc private func configureText() { aboutGmeButton.setTitle(StringConstants().aboutGmeMenuText, for: UIControl.State.normal) settingButton.setTitle(StringConstants().settingMenuText, for: UIControl.State.normal) logoutButton.setTitle(StringConstants().logoutTitleText, for: UIControl.State.normal) } private func setupBlueBackGroundTheme() { self.roundedBgView.backgroundColor = .themeBlue [ labelPhone, labelEmail, labelUserNameInitial].forEach({ $0?.textColor = .themeWhite }) [aboutGmeButton, settingButton, logoutButton].forEach({ $0?.setTitleColor(.themeWhite, for: UIControl.State.normal) }) aboutIconImageView.tintColor = .themeWhite } @IBAction func aboutGme(_ sender: UIButton) { self.sideMenuController?.hideLeftView() sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .about) } @IBAction func setting(_ sender: UIButton) { self.sideMenuController?.hideLeftView() sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .setting) } @IBAction func touchNoticeButton(_ sender: UIButton) { self.sideMenuController?.hideLeftView() sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .notice) } @IBAction func logout(_ sender: Any) { alertWithOkCancel( type: .normal, message: StringConstants().logoutConfirmationText, title: StringConstants().logoutTitleText, okTitle: "yes_text".localized(), cancelTitle: "no_text".localized(), okAction: { MainWireframe.logout() } ) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func setUpSettingsScreen() { //PHONE GMEDB.shared.user.rx.string(key: .mobileNumber).bind(to: labelPhone.rx.text) .disposed(by: disposeBag) //EMAIL GMEDB.shared.user.rx.string(key: .email).bind(to: labelEmail.rx.text) .disposed(by: disposeBag) let test = GMEDB.shared.user.rx.string(key: .email) print("TEST IS POSSIBLE \(test)") //NAME GMEDB.shared.user.rx.string(key: .firstName).map {$0?.capitalized}.bind(to: labelProfileName.rx.text) .disposed(by: disposeBag) //IMAGE let userDpString = GMEDB.shared.user.string(.dpUrl) ?? "" if let userDpUrl = URL(string: userDpString) { SDImageCache.shared().clearMemory() SDImageCache.shared().clearDisk() self.imageViewProfileSetting.sd_setImage(with: userDpUrl, completed: nil) labelUserNameInitial.isHidden = true imageViewProfileSetting.isHidden = false imageViewProfileSetting.contentMode = .scaleAspectFill } else { labelUserNameInitial.layer.backgroundColor = UIColor(hex: 0x2e3192).cgColor labelUserNameInitial.layer.cornerRadius = labelUserNameInitial.frame.height / 2 labelUserNameInitial.text = labelProfileName.text?.prefix(1).uppercased() labelUserNameInitial.isHidden = false imageViewProfileSetting.isHidden = true } imageViewProfileSetting.layer.cornerRadius = imageViewProfileSetting.frame.height / 2 } // Notification Names func getAvailableBalanceNotificationName() -> Notification.Name { return Notification.Name.init(SideMenuNavigationNotifications.availableBalance) } func getWithdrawNotificationName() -> Notification.Name { return Notification.Name.init(SideMenuNavigationNotifications.withdraw) } }