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