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