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.
 
 
 
 

217 lines
7.7 KiB

//
// TrackTransferViewController.swift
// GMERemittance
//
// Created by Fm-user on 2/5/18.
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
class TrackRecipientViewController: UIViewController {
@IBOutlet weak var textFieldReceiverName: UITextField!
@IBOutlet weak var viewDetails: UIView!
@IBOutlet weak var tableViewRecipientDetails: UITableView!
@IBOutlet weak var viewMain: UIView!
@IBOutlet weak var mainStackView: UIStackView!
private var selectedIndex: Int!
private var colorCodeRed: CGFloat?
private var colorCodeGreen: CGFloat?
private var colorCodeBlue: CGFloat?
private var timer: Timer?
private var trackrecipientviewmodel = TrackRecipientViewModel()
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
override func viewDidAppear(_ animated: Bool) {
setUpAnotherLoginListener(genericviewmodel: trackrecipientviewmodel)
trackrecipientviewmodel.recipientListObtained.value = nil
}
override func viewDidLoad() {
super.viewDidLoad()
setUpNavBar(id: 201, title: "Track Your Transfer")
hideKeyboardWhenTappedAround()
self.mainStackView.spacing = 1
tableViewRecipientDetails.delegate = self
tableViewRecipientDetails.dataSource = self
textFieldReceiverName.delegate = self
tableViewRecipientDetails.isHidden = true
tableViewRecipientDetails.estimatedRowHeight = 80
tableViewRecipientDetails.rowHeight = UITableViewAutomaticDimension
trackrecipientviewmodel.trackRecipientTimeOut.value = nil
/**
connection timeout
*/
trackrecipientviewmodel.trackRecipientTimeOut.bind { [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
self.popUpMessage(value: 20)
}
/**
Check internet connection
*/
trackrecipientviewmodel.internetConnection.value = nil
trackrecipientviewmodel.internetConnection.bind { [unowned self] in
guard $0 != nil else {
return
}
self.popUpMessage(value: 15)
self.textFieldReceiverName.resignFirstResponder()
self.stopLoading()
}
/**
Get recipient list as per search keyword
*/
trackrecipientviewmodel.recipientListObtained.bind{ [unowned self] in
guard $0 != nil else {
return
}
guard $0! else {
return
}
self.stopLoading()
if self.trackrecipientviewmodel.getRecipientCount() == 0 {
self.popUpMessageInfo(value: 16, title: "No recipient found", message: "Recipient \(self.textFieldReceiverName.text!) does not exist")
} else {
self.updateRecipientListUI()
}
}
}
/**
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)
}
/**
Refresh table view when collection of data is updated
*/
func updateRecipientListUI(){
self.tableViewRecipientDetails.isHidden = false
self.tableViewRecipientDetails.reloadData()
self.tableViewRecipientDetails.tableFooterView = UIView()
}
/**
Redirect list of values to next view
*/
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showThreeTransactions" {
let trackTransactionViewController
= segue.destination as! TrackTransactionViewController
trackTransactionViewController.recipient = self.trackrecipientviewmodel.getFilteredRecipientList(index: selectedIndex)
trackTransactionViewController.colorCodeRed = colorCodeRed
trackTransactionViewController.colorCodeGreen = colorCodeGreen
trackTransactionViewController.colorCodeBlue = colorCodeBlue
}
}
/**
After user stops typing send an api request for recipient list.
*/
@objc func recipientSearchApi(){
if let inputText = textFieldReceiverName.text{
trackrecipientviewmodel.clearArray()
tableViewRecipientDetails.reloadData()
self.startLoading()
self.trackrecipientviewmodel.fetchRecipientList(queryString: inputText)
}
}
}
extension TrackRecipientViewController: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let inputText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
self.timer?.invalidate()
if inputText == "" {
trackrecipientviewmodel.clearArray()
self.tableViewRecipientDetails.isHidden = true
} else {
self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(TrackRecipientViewController.recipientSearchApi), userInfo: nil, repeats: false)
}
return true
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
extension TrackRecipientViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.trackrecipientviewmodel.getRecipientCount()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "trackTransferRecipient", for: indexPath) as! TrackRecipientTableViewCell
let name = trackrecipientviewmodel.getRecipientName(index: indexPath.row)
if name != "nil"{
cell.labelRecipientName.text = name
cell.labelRecipientInitial.text = name.prefix(1).uppercased()
colorCodeRed = CGFloat(name[name.index(name.startIndex, offsetBy: 0)].asciiValue!)/100.0 * 0.2
colorCodeGreen = CGFloat(name[name.index(name.startIndex, offsetBy: 1)].asciiValue!)/100.0 * 0.8
colorCodeBlue = CGFloat(name[name.index(name.startIndex, offsetBy: 2)].asciiValue!)/100.0 * 0.5
}
let phoneNumber = trackrecipientviewmodel.getRecipientPhone(index: indexPath.row)
if phoneNumber != "nil"{
cell.labelRecipientPhone.text = phoneNumber
}
cell.labelRecipientInitial.layer.backgroundColor = UIColor(red: colorCodeRed!, green: colorCodeGreen!, blue: colorCodeBlue!, alpha: 1.0).cgColor
cell.labelRecipientInitial.layer.cornerRadius = cell.labelRecipientInitial.frame.height / 2
cell.layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor
cell.layer.borderWidth = 5
cell.layer.cornerRadius = 15
cell.clipsToBounds = true
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.selectedIndex = indexPath.row
performSegue(withIdentifier: "showThreeTransactions", sender: nil)
}
}