// // ItemsPickerViewController.swift // // // Created by shishir sapkota // import UIKit class CurrencyPickerViewController: 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! 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 setTitle() } 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 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() { // #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 } print("searchString : \(searchString), \(filteredPlaces)") 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()) }) print("after search") print(filteredPlaces) } // 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 } }