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.
 
 
 
 

247 lines
7.3 KiB

//
// ReferringViewController.swift
// GMERemittance
//
// Created by FMI-12 on 2/28/18.
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
class ReferringViewController: UIViewController {
@IBOutlet weak var textFieldFullName: UITextField!
@IBOutlet weak var textFieldMobileNo: UITextField!
@IBOutlet weak var textFieldEmail: UITextField!
@IBOutlet weak var viewContent: UIView!
private var movement: CGFloat = 0.0
private var activeTextField: UITextField?
private var isScrolled: Bool = false
public let inviteviewmodel = InviteViewModel()
private var invitee: InviteeModel?
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
override func viewDidAppear(_ animated: Bool) {
setUpAnotherLoginListener(genericviewmodel: inviteviewmodel)
}
override func viewDidLoad() {
super.viewDidLoad()
setUpNavBar(id: 201,title: "Invite")
registerTapListener()
textFieldFullName.autocorrectionType = .no
textFieldMobileNo.autocorrectionType = .no
textFieldEmail.autocorrectionType = .no
textFieldFullName.delegate = self
textFieldMobileNo.delegate = self
textFieldEmail.delegate = self
inviteviewmodel.inviteeConnectionTimeOut.value = nil
/**
connection timeout
*/
inviteviewmodel.inviteeConnectionTimeOut.bind { [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
self.popUpMessage(value: 20)
}
/**
Check internet connection
*/
inviteviewmodel.internetConnection.value = nil
inviteviewmodel.internetConnection.bind { [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
self.popUpMessage(value: 15)
}
setUpListener()
}
/**
Disable user interaction while fetching data from api
*/
func startLoading(){
disableUserInteractions()
showActivityIndicator(activityIndicator: activityIndicator)
}
/**
Enable user interaction after fetching data from api
*/
func stopLoading(){
self.enableUserInteractions()
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
}
/**
UI invite button action
*/
@IBAction func buttomInviteTap(_ sender: Any) {
InviteViewController.inviteStatus = true
activeTextField?.resignFirstResponder()
textFieldValidation()
}
/**
Check empty textfield validation
*/
func textFieldValidation(){
let textFieldArray = [textFieldFullName.text, textFieldMobileNo.text, textFieldEmail.text]
guard inviteviewmodel.allFieldsFilled(arrayofInfo: textFieldArray as! [String]) else {
self.popUpMessageError(value: 11, message: "Please fill all the fields")
return
}
self.startLoading()
inviteviewmodel.createInvitee(name: textFieldFullName.text!, mobileNumber:
textFieldMobileNo.text!, email: textFieldEmail.text!)
}
/**
Submit an invitation
*/
func setUpListener() {
inviteviewmodel.inviteeCreated.bind { [unowned self] in
guard $0 != nil else {
return
}
guard $0! else {
self.stopLoading()
self.popUpMessageError(value: 10, message: self.inviteviewmodel.getErrorMessage())
return
}
self.stopLoading()
self.invitee = self.inviteviewmodel.getCreatedInvitee()
self.popUpMessageInvite(value: 12)
self.textFieldFullName.text = ""
self.textFieldMobileNo.text = ""
self.textFieldEmail.text = ""
}
}
/**
Dialog with a submission message.
*/
func popUpMessageInvite(value: Int){
guard let navController = self.navigationController else { return }
let popUpViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "popUpInfo") as! PopUpGeneralInfo
popUpViewController.indexValue = value
popUpViewController.inviteeName = textFieldFullName.text
navController.addChildViewController(popUpViewController)
popUpViewController.view.frame = navController.view.bounds
navController.view.addSubview(popUpViewController.view)
popUpViewController.didMove(toParentViewController: navController)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
extension ReferringViewController: UITextFieldDelegate {
func textFieldDidBeginEditing(_ textField: UITextField) {
activeTextField = textField
checkScroll()
}
func textFieldDidEndEditing(_ textField: UITextField) {
checkScroll()
}
/**
The text field calls this method whenever the user taps the return button in keypad.
*/
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == textFieldFullName {
textFieldMobileNo.becomeFirstResponder()
} else if textField == textFieldMobileNo {
textFieldEmail.becomeFirstResponder()
} else {
textFieldEmail.resignFirstResponder()
}
return true
}
}
extension ReferringViewController: ScrollableProtocol {
/**
- Returns offset value to animate
*/
var offset: CGFloat {
get {
return 50
}
}
/**
- Returns if var isScrolled is false then scrolling is inactive and vice-versa.
*/
var viewScrolled: Bool {
get {
return isScrolled
}
}
/**
Check if textfield is active and required scroll
*/
func checkScroll() {
if !viewScrolled {
performScroll(direction: 0)
isScrolled = !isScrolled
} else {
performScroll(direction: 1)
isScrolled = !isScrolled
}
}
/**
Register tap listener
*/
func registerTapListener() {
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(clearKeyboard))
view.addGestureRecognizer(tap)
}
/**
Hide keypad when ever user tap on screen condition when keypad is active
*/
@objc func clearKeyboard() {
activeTextField?.resignFirstResponder()
if viewScrolled {
performScroll(direction: 1)
isScrolled = !isScrolled
}
}
/**
Animate scroll UI in case when textfield is active and also if inactive.
*/
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)
})
}
}
}