// // MessageComposeViewController.swift // GMERemittance // // Created by Sujal on 2/10/18. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit class MessageComposeViewController: UIViewController { private var isScrolled: Bool = false var supportIndex: Int! @IBOutlet weak var textFieldSubject: UITextField! @IBOutlet weak var textFieldControlNumber: UITextField! @IBOutlet weak var textViewMessage: UITextView! @IBOutlet weak var constraintTopMargin: NSLayoutConstraint! @IBOutlet weak var constraintTextFieldHeight: NSLayoutConstraint! @IBOutlet weak var constraintEditableTopMargin: NSLayoutConstraint! private var messageviewmodel = MessageViewModel() private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView() @IBAction func cancelMessage(_ sender: Any) { navigationController?.popViewController(animated: true) dismiss(animated: true, completion: nil) } @objc func appMovedToForeground() { resignAllResponders() if isScrolled { isScrolled = !isScrolled } } override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(appMovedToForeground), name: Notification.Name.UIApplicationWillEnterForeground, object: nil) registerTapListener() setUpNavBar(id: 202, title: "") setUpAnotherLoginListener(genericviewmodel: messageviewmodel) textViewMessage.clipsToBounds = true textViewMessage.layer.cornerRadius = 5 textViewMessage.layer.borderWidth = 0.5 textViewMessage.layer.borderColor = UIColor(hex: 0xc7c7cd).cgColor //UIColor.lightGray.cgColor textFieldSubject.delegate = self textFieldControlNumber.delegate = self guard supportIndex != nil else { self.popUpMessageInfo(value: 16, title: "No message", message: "try again") return } messageviewmodel.messageSubmittedConnectionTimeOut.value = nil /** connection timeout */ messageviewmodel.messageSubmittedConnectionTimeOut.bind { [unowned self] in guard $0 != nil else { return } self.enableUserInteractions() self.dismissActivityIndicator(activityIndicator: self.activityIndicator) self.popUpMessage(value: 20) } messageviewmodel.internetConnection.value = nil messageviewmodel.internetConnection.bind { [unowned self] in guard $0 != nil else { return } self.enableUserInteractions() self.dismissActivityIndicator(activityIndicator: self.activityIndicator) self.popUpMessage(value: 15) } messageviewmodel.messageSubmitted.bind { [unowned self] in guard $0 != nil else { return } self.dismissActivityIndicator(activityIndicator: self.activityIndicator) self.enableUserInteractions() guard $0! else { self.popUpMessageError(value: 10, message: self.messageviewmodel.getErrorMessage()) return } guard let navController = self.navigationController else { return } if let popUpViewController = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "popUpInfo") as? PopUpGeneralInfo { switch (self.supportIndex) { case 0: popUpViewController.indexValue = 18 case 1: popUpViewController.indexValue = 1 case 2: popUpViewController.indexValue = 2 default: return } navController.addChildViewController(popUpViewController) popUpViewController.view.frame = navController.view.bounds navController.view.addSubview(popUpViewController.view) popUpViewController.didMove(toParentViewController: navController) } } textViewMessage.delegate = self switch supportIndex { case 0: textFieldControlNumber.isHidden = true textViewMessage.text = "Message" textViewMessage.textColor = UIColor(red:0.78, green:0.78, blue:0.80, alpha:1.0) constraintEditableTopMargin.constant = constraintEditableTopMargin.constant - constraintTopMargin.constant - constraintTextFieldHeight.constant messageviewmodel.setSupportType(supportType: "enquiry") case 1: textFieldControlNumber.isHidden = false textViewMessage.text = "Amendment Request" textViewMessage.textColor = UIColor(red:0.78, green:0.78, blue:0.80, alpha:1.0) messageviewmodel.setSupportType(supportType: "amendment") case 2: textFieldControlNumber.isHidden = true textViewMessage.text = "Suggestions/ Feedback" textViewMessage.textColor = UIColor(red:0.78, green:0.78, blue:0.80, alpha:1.0) constraintEditableTopMargin.constant = constraintEditableTopMargin.constant - constraintTopMargin.constant - constraintTextFieldHeight.constant messageviewmodel.setSupportType(supportType: "feedback") default: return } } @IBAction func submitMessage(_ sender: Any) { self.resignAllResponders() switch supportIndex { case 1: messageviewmodel.setParam(subject: textFieldSubject.text!, message: textViewMessage.text!, controlNumber: textFieldControlNumber.text!) case 0, 2: messageviewmodel.setParam(subject: textFieldSubject.text!, message: textViewMessage.text!, controlNumber: "") default: return } switch messageviewmodel.validateFields(supportIndex: self.supportIndex) { case .Valid: disableUserInteractions() showActivityIndicator(activityIndicator: activityIndicator) messageviewmodel.submitMessage(supportIndex: supportIndex) case .InValid(let error): self.popUpMessageError(value: 11, message: error) } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func resignAllResponders() { textFieldSubject.resignFirstResponder() textFieldControlNumber.resignFirstResponder() textViewMessage.resignFirstResponder() } } extension MessageComposeViewController: UITextViewDelegate { func textViewDidBeginEditing(_ textView: UITextView) { if textView.textColor == UIColor(red:0.78, green:0.78, blue:0.80, alpha:1.0) { textView.text = "" textView.textColor = UIColor(red:0.29, green:0.29, blue:0.29, alpha:1.0) } checkScroll() } func textViewDidEndEditing(_ textView: UITextView) { if textView.text.isEmpty { textView.textColor = UIColor(red:0.78, green:0.78, blue:0.80, alpha:1.0) switch supportIndex { case 0: textView.text = "Message" case 1: textView.text = "Amendment Request" case 2: textView.text = "Suggestions/ Feedback" default: return } } checkScroll() } } extension MessageComposeViewController: UITextFieldDelegate { func textFieldDidBeginEditing(_ textField: UITextField) { checkScroll() } func textFieldDidEndEditing(_ textField: UITextField) { checkScroll() } func textFieldShouldReturn(_ textField: UITextField) -> Bool { if textField == textFieldSubject { if self.supportIndex == 1 { textFieldControlNumber.becomeFirstResponder() } else { //textViewMessage.text = nil textViewMessage.becomeFirstResponder() } } else if textField == textFieldControlNumber { textViewMessage.becomeFirstResponder() } else { textViewMessage.resignFirstResponder() } return true } } extension MessageComposeViewController: ScrollableProtocol { var offset: CGFloat { get { return textFieldSubject.frame.origin.y - 10 } } var viewScrolled: Bool { get { return isScrolled } } func checkScroll() { if !viewScrolled { performScroll(direction: 0) isScrolled = !isScrolled } else { performScroll(direction: 1) isScrolled = !isScrolled } } func registerTapListener() { let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(clearKeyboard)) view.addGestureRecognizer(tap) } @objc func clearKeyboard() { textViewMessage.resignFirstResponder() textFieldSubject.resignFirstResponder() textFieldControlNumber.resignFirstResponder() if viewScrolled { performScroll(direction: 1) isScrolled = !isScrolled } } func performScroll(direction: Int) { if direction == 0 { UIView.animate(withDuration: 0.3, animations: { self.view.frame = self.view.frame.offsetBy(dx: 0, dy: self.offset * -1) }) } else if direction == 1 { UIView.animate(withDuration: 0.3, animations: { self.view.frame = self.view.frame.offsetBy(dx: 0, dy: self.offset) }) } } }