You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

282 lines
9.7 KiB

6 years ago
6 years ago
5 years ago
6 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
  1. //
  2. // SideMenuViewController.swift
  3. // GMERemittance
  4. //
  5. // Created by Sujal on 2/22/18.
  6. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. import SDWebImage
  10. import LGSideMenuController
  11. import Localize_Swift
  12. import RxSwift
  13. import RxCocoa
  14. protocol SideMenuDelegate: class {
  15. func didSelectMenu(_ viewController: UIViewController, didSelectMenu: SideMenuViewController.MenuType)
  16. }
  17. struct SideMenuNavigationNotifications {
  18. static let aboutGme = "aboutGme"
  19. static let support = "support"
  20. static let setting = "setting"
  21. static let availableBalance = "Available_Balance"
  22. static let withdraw = "withdraw"
  23. static let KftcAccountList = "KftcAccountList"
  24. static let transactionHistory = "transaction_History_from_sidemenu"
  25. }
  26. class SideMenuViewController: UIViewController {
  27. struct StringConstants {
  28. let logoutTitleText = "logout_text".localized()
  29. let logoutConfirmationText = "logout_confirmation_text".localized()
  30. let noText = "no_text".localized()
  31. let yesText = "yes_text".localized()
  32. let autoDebitMenuText = "auto_debit_account_text".localized()
  33. let inboundMenuText = "inbound_accounts_text".localized()
  34. let aboutGmeMenuText = "about_gme_text".localized()
  35. let settingMenuText = "settings_text".localized()
  36. let availableBalanceTitleLabelText = "available_balance_text".localized()
  37. let withdrawButtonText = "withdraw_text".localized()
  38. let gmeWalletNoTitleText = "gme_wallet_no_text".localized()
  39. }
  40. enum MenuType {
  41. case withDraw
  42. case autodebitAccount
  43. case inboundAccount
  44. case transferHistory
  45. case rechargeHistory
  46. case about
  47. case setting
  48. case notice
  49. }
  50. // @IBOutlets
  51. @IBOutlet weak var imageViewProfileSetting: UIImageView!
  52. @IBOutlet weak var labelProfileName: UILabel!
  53. @IBOutlet weak var labelPhone: UILabel!
  54. @IBOutlet weak var labelEmail: UILabel!
  55. @IBOutlet weak var roundedBgView: UIView!
  56. @IBOutlet weak var labelUserNameInitial: UILabel!
  57. @IBOutlet weak var settingButton: UIButton!
  58. @IBOutlet weak var aboutGmeButton: UIButton!
  59. @IBOutlet weak var autoDebitAccountButton: UIButton!
  60. @IBOutlet weak var inboundAccountButton: UIButton!
  61. @IBOutlet weak var logoutButton: UIButton!
  62. @IBOutlet weak var aboutIconImageView: UIImageView!
  63. @IBOutlet weak var settingIconImageView: UIImageView!
  64. @IBOutlet weak var logoutIconImageView: UIImageView!
  65. @IBOutlet weak var manageAccountStackView: UIStackView!
  66. @IBOutlet weak var transactionHistryButton: UIButton!
  67. @IBOutlet weak var rechargeHistoryButton: UIButton!
  68. @IBOutlet weak var inboundAccountStackView: UIStackView!
  69. @IBOutlet weak var noticeButton: UIButton!
  70. weak var sideMenuDelegate: SideMenuDelegate?
  71. private let disposeBag = DisposeBag()
  72. var selectedMenu: MenuType? {
  73. didSet {
  74. guard let menu = selectedMenu else { return }
  75. sideMenuDelegate?.didSelectMenu(self, didSelectMenu: menu)
  76. }
  77. }
  78. // Life Cycle
  79. override func viewDidLoad() {
  80. super.viewDidLoad()
  81. setUpSettingsScreen()
  82. setup()
  83. }
  84. override func viewWillAppear(_ animated: Bool) {
  85. super.viewWillAppear(animated)
  86. self.setUpSettingsScreen()
  87. NotificationCenter.default.addObserver(
  88. self,
  89. selector: #selector(configureText),
  90. name: NSNotification.Name(LCLLanguageChangeNotification),
  91. object: nil
  92. )
  93. }
  94. // Other Functions
  95. private func addShadow(view: UIView) {
  96. view.layer.shadowColor = UIColor.darkGray.cgColor
  97. view.layer.shadowOpacity = 0.5
  98. view.layer.shadowRadius = 2
  99. let offset = CGSize(width: 1, height: 1)
  100. view.layer.shadowOffset = offset
  101. }
  102. private func setup() {
  103. configureText()
  104. let shouldShowWithdrawButton = Utility.pennyTestVerified() && Utility.isVerifiedUser()
  105. self.manageAccountStackView.isHidden = !shouldShowWithdrawButton
  106. // self.manageAccountStackView.isHidden = true
  107. self.view.backgroundColor = .themeRedDark
  108. self.roundedBgView.layer.cornerRadius = 20
  109. NotificationCenter.default.addObserver(
  110. self,
  111. selector: #selector(self.updateBalance(sender:)),
  112. name: self.getAvailableBalanceNotificationName(),
  113. object: nil
  114. )
  115. labelProfileName.textColor = .themeRed
  116. autoDebitAccountButton.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.5)
  117. inboundAccountButton.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.5)
  118. transactionHistryButton.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.5)
  119. aboutGmeButton.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.5)
  120. settingButton.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.5)
  121. logoutButton.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.5)
  122. }
  123. @objc private func configureText() {
  124. autoDebitAccountButton.setTitle(StringConstants().autoDebitMenuText, for: UIControl.State.normal)
  125. inboundAccountButton.setTitle(StringConstants().inboundMenuText, for: UIControl.State.normal)
  126. aboutGmeButton.setTitle(StringConstants().aboutGmeMenuText, for: UIControl.State.normal)
  127. settingButton.setTitle(StringConstants().settingMenuText, for: UIControl.State.normal)
  128. logoutButton.setTitle(StringConstants().logoutTitleText, for: UIControl.State.normal)
  129. self.transactionHistryButton.setTitle("transaction_report_text".localized(), for: UIControl.State.normal)
  130. rechargeHistoryButton.setTitle("recharge_history_text".localized(), for: .normal)
  131. }
  132. @objc private func updateBalance(sender: Notification) {
  133. let shouldShowWithdrawButton = Utility.pennyTestVerified() && Utility.isVerifiedUser()
  134. self.manageAccountStackView.isHidden = !shouldShowWithdrawButton
  135. // self.manageAccountStackView.isHidden = true
  136. self.inboundAccountStackView.isHidden = !shouldShowWithdrawButton
  137. }
  138. private func setupBlueBackGroundTheme() {
  139. self.roundedBgView.backgroundColor = .themeBlue
  140. [ labelPhone, labelEmail, labelUserNameInitial].forEach({
  141. $0?.textColor = .themeWhite
  142. })
  143. [aboutGmeButton, settingButton, logoutButton].forEach({
  144. $0?.setTitleColor(.themeWhite, for: UIControl.State.normal)
  145. })
  146. aboutIconImageView.tintColor = .themeWhite
  147. }
  148. @IBAction func withdraw(_ sender: UIButton) {
  149. self.sideMenuController?.hideLeftView()
  150. sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .withDraw)
  151. }
  152. @IBAction func openTransactionHistory(_ sender: Any) {
  153. self.sideMenuController?.hideLeftView()
  154. sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .transferHistory)
  155. }
  156. @IBAction func openRechargeHistory(_ sender: UIButton) {
  157. self.sideMenuController?.hideLeftView()
  158. sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .rechargeHistory)
  159. }
  160. @IBAction func openManageAccounts(_ sender: UIButton) {
  161. self.sideMenuController?.hideLeftView()
  162. sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .autodebitAccount)
  163. }
  164. @IBAction func aboutGme(_ sender: UIButton) {
  165. self.sideMenuController?.hideLeftView()
  166. sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .about)
  167. }
  168. @IBAction func support(_ sender: UIButton) {
  169. self.sideMenuController?.hideLeftView()
  170. }
  171. @IBAction func setting(_ sender: UIButton) {
  172. self.sideMenuController?.hideLeftView()
  173. sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .setting)
  174. }
  175. @IBAction func touchNoticeButton(_ sender: UIButton) {
  176. self.sideMenuController?.hideLeftView()
  177. sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .notice)
  178. }
  179. @IBAction func logout(_ sender: Any) {
  180. alertWithOkCancel(
  181. type: .normal,
  182. message: StringConstants().logoutConfirmationText,
  183. title: StringConstants().logoutTitleText,
  184. okTitle: "yes_text".localized(),
  185. cancelTitle: "no_text".localized(),
  186. okAction: { MainWireframe.logout() }
  187. )
  188. }
  189. @IBAction func openInboundAccount(_ sender: UIButton) {
  190. self.sideMenuController?.hideLeftView()
  191. sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .inboundAccount)
  192. }
  193. override func didReceiveMemoryWarning() {
  194. super.didReceiveMemoryWarning()
  195. // Dispose of any resources that can be recreated.
  196. }
  197. func setUpSettingsScreen() {
  198. //PHONE
  199. GMEDB.shared.user.rx.string(key: .mobileNumber).bind(to: labelPhone.rx.text)
  200. .disposed(by: disposeBag)
  201. //EMAIL
  202. GMEDB.shared.user.rx.string(key: .email).bind(to: labelEmail.rx.text)
  203. .disposed(by: disposeBag)
  204. let test = GMEDB.shared.user.rx.string(key: .email)
  205. print("TEST IS POSSIBLE \(test)")
  206. //NAME
  207. GMEDB.shared.user.rx.string(key: .firstName).map {$0?.capitalized}.bind(to: labelProfileName.rx.text)
  208. .disposed(by: disposeBag)
  209. //IMAGE
  210. let userDpString = GMEDB.shared.user.string(.dpUrl) ?? ""
  211. if let userDpUrl = URL(string: userDpString) {
  212. SDImageCache.shared().clearMemory()
  213. SDImageCache.shared().clearDisk()
  214. self.imageViewProfileSetting.sd_setImage(with: userDpUrl, completed: nil)
  215. labelUserNameInitial.isHidden = true
  216. imageViewProfileSetting.isHidden = false
  217. imageViewProfileSetting.contentMode = .scaleAspectFill
  218. } else {
  219. labelUserNameInitial.layer.backgroundColor = UIColor(hex: 0x2e3192).cgColor
  220. labelUserNameInitial.layer.cornerRadius = labelUserNameInitial.frame.height / 2
  221. labelUserNameInitial.text = labelProfileName.text?.prefix(1).uppercased()
  222. labelUserNameInitial.isHidden = false
  223. imageViewProfileSetting.isHidden = true
  224. }
  225. imageViewProfileSetting.layer.cornerRadius = imageViewProfileSetting.frame.height / 2
  226. }
  227. // Notification Names
  228. func getAvailableBalanceNotificationName() -> Notification.Name {
  229. return Notification.Name.init(SideMenuNavigationNotifications.availableBalance)
  230. }
  231. func getWithdrawNotificationName() -> Notification.Name {
  232. return Notification.Name.init(SideMenuNavigationNotifications.withdraw)
  233. }
  234. }