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.
 
 
 
 

253 lines
9.8 KiB

//
// 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
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"
}
class SideMenuViewController: UIViewController {
struct StringConstants {
static let logoutTitleText = "Logout"
static let logoutConfirmationText = "Are you sure you want to logout?"
static let noText = "No"
static let yesText = "Yes"
static let autoDebitMenuText = "Auto Debit Account"
static let aboutGmeMenuText = "About GMEs"
static let settingMenuText = "Settings"
static let availableBalanceTitleLabelText = "Your Available Balance"
static let withdrawButtonText = "Withdraw"
static let gmeWalletNoTitleText = "GME Wallet No."
}
// @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 labelBalance: UILabel!
@IBOutlet weak var labelWalletNumber: UILabel!
@IBOutlet weak var labelBank: UILabel!
@IBOutlet weak var labelUserNameInitial: UILabel!
@IBOutlet weak var settingButton: UIButton!
@IBOutlet weak var aboutGmeButton: UIButton!
@IBOutlet weak var autoDebitAccountButton: UIButton!
@IBOutlet weak var logoutButton: UIButton!
@IBOutlet weak var aboutIconImageView: UIImageView!
@IBOutlet weak var settingIconImageView: UIImageView!
@IBOutlet weak var logoutIconImageView: UIImageView!
@IBOutlet weak var withdrawButton: UIButton!
@IBOutlet weak var manageAccountStackView: UIStackView!
@IBOutlet weak var availableBalanceTitleLabel: UILabel!
@IBOutlet weak var gmeWalletNoTitleLabel: UILabel!
// Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
setUpSettingsScreen()
setup()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.setUpSettingsScreen()
}
// 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.pennyTestVerified() && Utility.isVerifiedUser()
self.withdrawButton.isHidden = !shouldShowWithdrawButton
self.manageAccountStackView.isHidden = !shouldShowWithdrawButton
self.view.backgroundColor = AppConstants.themeRedColor
self.roundedBgView.layer.cornerRadius = 20
self.labelBalance.text = "0"
NotificationCenter.default.addObserver(self, selector: #selector(self.updateBalance(sender:)), name: self.getAvailableBalanceNotificationName(), object: nil)
self.addShadow(view: withdrawButton)
}
private func configureText() {
autoDebitAccountButton.setTitle(StringConstants.autoDebitMenuText, for: UIControlState.normal)
aboutGmeButton.setTitle(StringConstants.aboutGmeMenuText, for: UIControlState.normal)
settingButton.setTitle(StringConstants.settingMenuText, for: UIControlState.normal)
logoutButton.setTitle(StringConstants.logoutTitleText, for: UIControlState.normal)
self.availableBalanceTitleLabel.text = StringConstants.availableBalanceTitleLabelText
self.gmeWalletNoTitleLabel.text = StringConstants.gmeWalletNoTitleText
self.withdrawButton.setTitle(StringConstants.withdrawButtonText, for: UIControlState.normal)
}
@objc private func updateBalance(sender: Notification) {
let balance = sender.userInfo?[SideMenuNavigationNotifications.availableBalance] as? String
self.labelBalance.text = balance
let shouldShowWithdrawButton = Utility.pennyTestVerified() && Utility.isVerifiedUser()
self.withdrawButton.isHidden = !shouldShowWithdrawButton
self.manageAccountStackView.isHidden = !shouldShowWithdrawButton
}
private func setupBlueBackGroundTheme() {
self.roundedBgView.backgroundColor = AppConstants.themeBlueColor
[ labelPhone, labelEmail, labelBalance, labelWalletNumber, labelBank, labelUserNameInitial].forEach({
$0?.textColor = AppConstants.themWhiteColor
})
[aboutGmeButton, settingButton, logoutButton].forEach({
$0?.setTitleColor(AppConstants.themWhiteColor, for: UIControlState.normal)
})
aboutIconImageView.tintColor = AppConstants.themWhiteColor
}
@IBAction func withdraw(_ sender: UIButton) {
self.sideMenuController?.hideLeftView()
NotificationCenter.default.post(name: self.getWithdrawNotificationName(), object: nil, userInfo: nil)
}
@IBAction func openKftcAccountList(_ sender: UIButton) {
self.sideMenuController?.hideLeftView()
NotificationCenter.default.post(name: self.getKftcAccountListNotificationName(), object: nil, userInfo: nil)
}
@IBAction func aboutGme(_ sender: UIButton) {
self.sideMenuController?.hideLeftView()
NotificationCenter.default.post(name: self.getAboutGmeNotificationName(), object: nil, userInfo: nil)
}
@IBAction func support(_ sender: UIButton) {
self.sideMenuController?.hideLeftView()
NotificationCenter.default.post(name: self.getSupportNotificationName(), object: nil, userInfo: nil)
}
@IBAction func setting(_ sender: UIButton) {
self.sideMenuController?.hideLeftView()
NotificationCenter.default.post(name: self.getSettingNotificationName(), object: nil, userInfo: nil)
}
@IBAction func logout(_ sender: Any) {
let alert = UIAlertController(title: StringConstants.logoutTitleText, message: StringConstants.logoutConfirmationText, preferredStyle: .alert)
let yesAction = UIAlertAction(title: StringConstants.yesText, style: .default,handler: {
(action : UIAlertAction!) -> Void in
MainWireframe.logout()
})
let noAction = UIAlertAction(title: StringConstants.noText, style: .default, handler: nil)
noAction.setValue(UIColor.black, forKey: "titleTextColor")
yesAction.setValue(UIColor(hex:0xEC1C24), forKey: "titleTextColor")
alert.addAction(yesAction)
alert.addAction(noAction)
self.present(alert, animated: true, completion: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func setUpSettingsScreen() {
let store = UserDefaults.standard
//PHONE
labelPhone.text = store.string(forKey: UserKeys.mobileNumber)
//EMAIL
labelEmail.text = store.string(forKey: UserKeys.email)
//NAME
labelProfileName.text = store.string(forKey: UserKeys.firstName)?.capitalized
//WALLET NUMBER
labelWalletNumber.text = store.string(forKey: UserKeys.walletNumber)
//BALANCE
let balance = store.string(forKey: UserKeys.availableBalance)
labelBalance.text = Utility.getCommaSeperatedString(numberString: balance ?? "")
//BANK NAME
labelBank.text = store.string(forKey: UserKeys.primaryBankName)
//IMAGE
let userDpString = store.string(forKey: UserKeys.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 getAboutGmeNotificationName() -> Notification.Name {
return Notification.Name.init(SideMenuNavigationNotifications.aboutGme)
}
func getSupportNotificationName() -> Notification.Name {
return Notification.Name.init(SideMenuNavigationNotifications.support)
}
func getSettingNotificationName() -> Notification.Name {
return Notification.Name.init(SideMenuNavigationNotifications.setting)
}
func getAvailableBalanceNotificationName() -> Notification.Name {
return Notification.Name.init(SideMenuNavigationNotifications.availableBalance)
}
func getWithdrawNotificationName() -> Notification.Name {
return Notification.Name.init(SideMenuNavigationNotifications.withdraw)
}
func getKftcAccountListNotificationName() -> Notification.Name {
return Notification.Name.init(SideMenuNavigationNotifications.KftcAccountList)
}
}