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.
 
 
 
 

313 lines
10 KiB

//
// 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)
})
}
}
}