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.
 
 
 
 

252 lines
8.4 KiB

//
// ItemsPickerViewController.swift
//
//
// Created by shishir sapkota
//
import UIKit
class CurrencyPickerViewController: UIViewController {
struct StringConstants {
let searchPlaceholder = "search_currency_text".localized()
let cancelText = "cancel_text".localized()
let titleText = "select_currency_text".localized()
let emptyText = "no_result_found_text".localized()
}
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 noResultFoundLabel: UILabel!
@IBOutlet weak var mainview: UIView!
// language
@IBOutlet weak var cancleButton: UIButton!
@IBOutlet weak var titleLabel: UILabel!
var data: [SendMoneyExchangeRateCurrencyViewModel] = []
var selectedData: SendMoneyExchangeRateCurrencyViewModel?
var filteredPlaces: [SendMoneyExchangeRateCurrencyViewModel] = [] {
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: (([SendMoneyExchangeRateCurrencyViewModel?]) -> ())?
var defaultSelectedData: [SendMoneyExchangeRateCurrencyViewModel?] = []
var searchText = ""
var type: PickerTitle?
override func viewDidLoad() {
super.viewDidLoad()
self.setupTableView()
self.setupSearchService()
// self.setupSearchTextFieldUi()
self.setupPlaces()
self.titleView.layer.cornerRadius = 10
self.mainview.layer.cornerRadius = 10
self.configureLanguage()
}
func configureLanguage() {
// doing doind doingi
self.titleLabel.text = StringConstants().titleText
self.searchTextField.placeholder = StringConstants().searchPlaceholder
self.cancleButton.setTitle(StringConstants().cancelText, for: .normal)
setTitle()
setupPlaceholderText()
}
private func setNoResultText() {
self.noResultFoundLabel.text = StringConstants().emptyText
}
private func setupPlaceholderText() {
var text = ""
guard let type = type else {return}
switch type {
case .bank:
text = "search_bank_text".localized()
case .branch:
text = "search_branch_text".localized()
case .country:
text = "search_country_text".localized()
case .currency:
text = "search_currency_text".localized()
case .district:
text = "search_district_text".localized()
case .occupation:
text = "search_occupation_text".localized()
case .relation:
text = "search_relation_text".localized()
case .sourceOfFund:
text = "search_source_of_fund".localized()
case .state:
text = "search_province_text".localized()
case .transferReasons:
text = "search_transfer_reason_text".localized()
case .verificationIdTypes:
text = "search_text".localized()
}
self.searchTextField.placeholder = text
}
private func setTitle() {
var text = ""
guard let type = type else {return}
switch type {
case .bank:
text = "select_currency_text".localized()
case .branch:
text = "select_branch_text".localized()
case .country:
text = "select_country_text".localized()
case .currency:
text = "search_currency_text".localized()
case .district:
text = "select_district_text".localized()
case .occupation:
text = "select_occupation_text".localized()
case .relation:
text = "select_relation_text".localized()
case .sourceOfFund:
text = "select_source_of_fund_text".localized()
case .state:
text = "province_placeholder_text".localized()
case .transferReasons:
text = "select_transfer_reason_text".localized()
case .verificationIdTypes:
text = "verification_id_placeholder_text".localized()
}
self.titleLabel.text = text.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() {
// #imageLiteral(resourceName: "ic_search")
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!
self.searchText = searchString
if searchString.isEmpty {
self.filteredPlaces = self.data
return
}
self.filteredPlaces = self.data.filter({
return searchString.isEmpty ||
($0.currency ?? "").lowercased().contains(searchString.lowercased())
}).sorted(by: { (a, _) -> Bool in
return ((a.currency ?? "").lowercased()).hasPrefix(searchString.lowercased())
})
}
// MARK: IBActions
@IBAction func close(_ sender: Any?) {
self.doneAction?([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 CurrencyPickerViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 75
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.selectedData = self.filteredPlaces.elementAt(index: indexPath.row)
// let cell = tableView.cellForRow(at: indexPath)
// cell?.accessoryType = .checkmark
//
if !self.allowMultipleSelection {
self.close(nil)
}
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath)
cell?.accessoryType = .none
}
}
extension CurrencyPickerViewController: 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: "CurrencyPickerCell", for: indexPath) as! CurrencyPickerCell
let data = self.filteredPlaces.elementAt(index: indexPath.row)
cell.place = data?.currency
let flag = CountryInfo().getFlag(for: data?.countryCode ?? "")
cell.flag = flag
// CountryInfo().getFlag
// if let selected = self.defaultSelectedData.first {
// cell.selectedPlace = selected
// }
cell.setup()
return cell
}
}