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.
206 lines
6.4 KiB
206 lines
6.4 KiB
//
|
|
// ItemsPickerViewController.swift
|
|
//
|
|
//
|
|
// Created by shishir sapkota
|
|
//
|
|
|
|
|
|
import UIKit
|
|
|
|
|
|
|
|
class BankBranchPickerViewController: UIViewController {
|
|
|
|
struct Constants {
|
|
static let seperatorColor = "#DFDFDF"
|
|
static let tintColor = UIColor.red
|
|
static let gradientviewLeftColor = UIColor.init(hex: "#FF0000")
|
|
static let gradientviewRightColor = UIColor.init(hex: "#9C272D")
|
|
}
|
|
|
|
@IBOutlet weak var titleView: UIView!
|
|
@IBOutlet weak var tableVIew: UITableView!
|
|
@IBOutlet weak var searchTextField: UITextField!
|
|
@IBOutlet weak var titleLabel: UILabel!
|
|
@IBOutlet weak var noResultFoundLabel: UILabel!
|
|
@IBOutlet weak var mainview: UIView!
|
|
@IBOutlet weak var infoLabel: UILabel!
|
|
|
|
var data: [SendMoneyBankBranch] = [] {
|
|
didSet {
|
|
self.tableVIew.reloadData()
|
|
}
|
|
}
|
|
var countryCode: String?
|
|
var bankId: String?
|
|
|
|
var selectedData : SendMoneyBankBranch?
|
|
|
|
var filteredPlaces: [SendMoneyBankBranch] = [] {
|
|
didSet {
|
|
self.tableVIew.reloadData()
|
|
self.setNoResultText()
|
|
self.filteredPlaces.isEmpty ? (self.noResultFoundLabel.isHidden = false) : (self.noResultFoundLabel.isHidden = true)
|
|
}
|
|
}
|
|
|
|
var allowMultipleSelection = false
|
|
var allowSelection = true
|
|
var doneAction: (([SendMoneyBankBranch?]) -> ())?
|
|
var defaultSelectedData: [SendMoneyBankBranch?] = []
|
|
|
|
var searchText = ""
|
|
var type: PickerTitle?
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
self.setupTableView()
|
|
self.setupSearchService()
|
|
self.setupPlaces()
|
|
self.setupTarget()
|
|
self.titleView.layer.cornerRadius = 10
|
|
self.mainview.layer.cornerRadius = 10
|
|
setTitle()
|
|
self.showProgressHud()
|
|
self.fetchBranch(searchString: "")
|
|
}
|
|
|
|
|
|
private func setNoResultText() {
|
|
var text = ""
|
|
if let type = self.type {
|
|
text = "No matching \(type.rawValue) found for "
|
|
} else {
|
|
text = "No matching result found for "
|
|
}
|
|
self.noResultFoundLabel.text = text + "'\(searchText)'"
|
|
}
|
|
|
|
private func setupTarget() {
|
|
self.searchTextField.addTarget(self, action: #selector(self.textChanged(sender:)), for: UIControlEvents.editingChanged)
|
|
}
|
|
|
|
@objc private func textChanged(sender: UITextField) {
|
|
let text = sender.text!
|
|
self.infoLabel.isHidden = text.count >= 3
|
|
}
|
|
|
|
private func setTitle() {
|
|
self.titleLabel.text = "Select " + (self.type?.rawValue ?? "Location").capitalized
|
|
}
|
|
|
|
private func setupPlaces() {
|
|
self.filteredPlaces = self.data
|
|
}
|
|
|
|
private func setupTableView() {
|
|
self.tableVIew.delegate = self
|
|
self.tableVIew.dataSource = self
|
|
self.tableVIew.separatorColor = UIColor.init(hex: Constants.seperatorColor)
|
|
self.tableVIew.allowsMultipleSelection = self.allowMultipleSelection
|
|
self.tableVIew.allowsSelection = self.allowSelection
|
|
}
|
|
|
|
private func setupSearchTextFieldUi() {
|
|
let searchIconImageView = UIImageView(image: #imageLiteral(resourceName: "ic_search"))
|
|
searchIconImageView.tintColor = Constants.tintColor
|
|
self.searchTextField.leftView = searchIconImageView
|
|
self.searchTextField.leftViewMode = .always
|
|
}
|
|
|
|
|
|
private func setupSearchService() {
|
|
self.searchTextField.addTarget(self, action: #selector(self.search(sender:)), for: UIControlEvents.editingChanged)
|
|
}
|
|
|
|
|
|
@objc private func search(sender: UITextField) {
|
|
let searchString = sender.text!
|
|
// make a api call here
|
|
guard searchString.count > 2 else {
|
|
self.filteredPlaces = []
|
|
return
|
|
}
|
|
fetchBranch(searchString: searchString)
|
|
|
|
}
|
|
|
|
private func fetchBranch(searchString: String) {
|
|
self.infoLabel.isHidden = true
|
|
let countryCode = self.countryCode ?? ""
|
|
let bankId = self.bankId ?? ""
|
|
self.fetchBranches(countryCode: countryCode, bankId: bankId, branchName: searchString)
|
|
}
|
|
// MARK: IBActions
|
|
|
|
@IBAction func close(_ sender: Any?) {
|
|
self.doneAction?([self.selectedData])
|
|
self.dismiss(animated: true, completion: nil)
|
|
}
|
|
|
|
|
|
|
|
@IBAction func dismiss(_ sender: Any) {
|
|
self.dismiss(animated: true, completion: nil)
|
|
}
|
|
|
|
@IBAction func clear(_ sender: Any) {
|
|
self.tableVIew.indexPathsForSelectedRows?.forEach({self.tableVIew.deselectRow(at: $0, animated: true)})
|
|
self.tableVIew.indexPathForSelectedRow.map({self.tableVIew.deselectRow(at: $0, animated: true)})
|
|
self.defaultSelectedData = []
|
|
self.tableVIew.reloadData()
|
|
}
|
|
|
|
}
|
|
|
|
extension BankBranchPickerViewController: UITableViewDelegate {
|
|
|
|
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
|
|
return 75
|
|
}
|
|
|
|
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
|
self.selectedData = filteredPlaces.elementAt(index: indexPath.row)
|
|
if !self.allowMultipleSelection {
|
|
self.close(nil)
|
|
}
|
|
}
|
|
|
|
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
|
|
let cell = tableView.cellForRow(at: indexPath)
|
|
cell?.accessoryType = .none
|
|
}
|
|
}
|
|
|
|
extension BankBranchPickerViewController: UITableViewDataSource {
|
|
|
|
func numberOfSections(in tableView: UITableView) -> Int {
|
|
return 1
|
|
}
|
|
|
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
|
return filteredPlaces.count
|
|
}
|
|
|
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
|
let cell = tableVIew.dequeueReusableCell(withIdentifier: "BankBranchPickerCell", for: indexPath) as! BankBranchPickerCell
|
|
cell.place = self.filteredPlaces.elementAt(index: indexPath.row)?.name
|
|
cell.setup()
|
|
return cell
|
|
}
|
|
}
|
|
|
|
extension BankBranchPickerViewController: FetchBankBranchService {
|
|
func fetchBranches(countryCode: String, bankId: String, branchName: String) {
|
|
self.fetchBranch(countryCode: countryCode, bankId: bankId, branchName: branchName, success: { (models) in
|
|
self.hideProgressHud()
|
|
self.filteredPlaces = models
|
|
}) { (error) in
|
|
self.hideProgressHud()
|
|
self.alert(message: error.localizedDescription)
|
|
}
|
|
}
|
|
}
|
|
|
|
|