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.

188 lines
6.1 KiB

6 years ago
  1. //
  2. // ItemsPickerViewController.swift
  3. //
  4. //
  5. // Created by shishir sapkota
  6. //
  7. import UIKit
  8. class CurrencyPickerViewController: UIViewController {
  9. struct Constants {
  10. static let seperatorColor = "#DFDFDF"
  11. static let tintColor = UIColor.red
  12. static let gradientviewLeftColor = UIColor.init(hex: "#FF0000")
  13. static let gradientviewRightColor = UIColor.init(hex: "#9C272D")
  14. }
  15. @IBOutlet weak var titleView: UIView!
  16. @IBOutlet weak var tableVIew: UITableView!
  17. @IBOutlet weak var searchTextField: UITextField!
  18. @IBOutlet weak var titleLabel: UILabel!
  19. @IBOutlet weak var noResultFoundLabel: UILabel!
  20. @IBOutlet weak var mainview: UIView!
  21. var data: [SendMoneyExchangeRateCurrencyViewModel] = []
  22. var selectedData: SendMoneyExchangeRateCurrencyViewModel?
  23. var filteredPlaces: [SendMoneyExchangeRateCurrencyViewModel] = [] {
  24. didSet {
  25. self.tableVIew.reloadData()
  26. self.setNoResultText()
  27. self.filteredPlaces.isEmpty ? (self.noResultFoundLabel.isHidden = false) : (self.noResultFoundLabel.isHidden = true)
  28. }
  29. }
  30. var allowMultipleSelection = false
  31. var allowSelection = true
  32. var doneAction: (([SendMoneyExchangeRateCurrencyViewModel?]) -> ())?
  33. var defaultSelectedData: [SendMoneyExchangeRateCurrencyViewModel?] = []
  34. var searchText = ""
  35. var type: PickerTitle?
  36. override func viewDidLoad() {
  37. super.viewDidLoad()
  38. self.setupTableView()
  39. self.setupSearchService()
  40. // self.setupSearchTextFieldUi()
  41. self.setupPlaces()
  42. self.titleView.layer.cornerRadius = 10
  43. self.mainview.layer.cornerRadius = 10
  44. setTitle()
  45. }
  46. private func setNoResultText() {
  47. var text = ""
  48. if let type = self.type {
  49. text = "No matching \(type.rawValue) found for "
  50. } else {
  51. text = "No matching result found for "
  52. }
  53. self.noResultFoundLabel.text = text + "'\(searchText)'"
  54. }
  55. private func setTitle() {
  56. self.titleLabel.text = "Select " + (self.type?.rawValue ?? "Location").capitalized
  57. }
  58. private func setupPlaces() {
  59. self.filteredPlaces = self.data
  60. }
  61. private func setupTableView() {
  62. self.tableVIew.delegate = self
  63. self.tableVIew.dataSource = self
  64. self.tableVIew.separatorColor = UIColor.init(hex: Constants.seperatorColor)
  65. self.tableVIew.allowsMultipleSelection = self.allowMultipleSelection
  66. self.tableVIew.allowsSelection = self.allowSelection
  67. }
  68. private func setupSearchTextFieldUi() {
  69. // #imageLiteral(resourceName: "ic_search")
  70. let searchIconImageView = UIImageView(image: #imageLiteral(resourceName: "ic_search"))
  71. searchIconImageView.tintColor = Constants.tintColor
  72. self.searchTextField.leftView = searchIconImageView
  73. self.searchTextField.leftViewMode = .always
  74. }
  75. private func setupSearchService() {
  76. self.searchTextField.addTarget(self, action: #selector(self.search(sender:)), for: UIControlEvents.editingChanged)
  77. }
  78. @objc private func search(sender: UITextField) {
  79. let searchString = sender.text!
  80. self.searchText = searchString
  81. if searchString.isEmpty {
  82. self.filteredPlaces = self.data
  83. return
  84. }
  85. print("searchString : \(searchString), \(filteredPlaces)")
  86. self.filteredPlaces = self.data.filter({
  87. return searchString.isEmpty ||
  88. ($0.currency ?? "").lowercased().contains(searchString.lowercased())
  89. }).sorted(by: { (a, _) -> Bool in
  90. return ((a.currency ?? "").lowercased() ?? "").hasPrefix(searchString.lowercased())
  91. })
  92. print("after search")
  93. print(filteredPlaces)
  94. }
  95. // MARK: IBActions
  96. @IBAction func close(_ sender: Any?) {
  97. self.doneAction?([selectedData])
  98. self.dismiss(animated: true, completion: nil)
  99. }
  100. @IBAction func dismiss(_ sender: Any) {
  101. self.dismiss(animated: true, completion: nil)
  102. }
  103. @IBAction func clear(_ sender: Any) {
  104. self.tableVIew.indexPathsForSelectedRows?.forEach({self.tableVIew.deselectRow(at: $0, animated: true)})
  105. self.tableVIew.indexPathForSelectedRow.map({self.tableVIew.deselectRow(at: $0, animated: true)})
  106. self.defaultSelectedData = []
  107. self.tableVIew.reloadData()
  108. }
  109. }
  110. extension CurrencyPickerViewController: UITableViewDelegate {
  111. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  112. return 75
  113. }
  114. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  115. self.selectedData = self.filteredPlaces.elementAt(index: indexPath.row)
  116. // let cell = tableView.cellForRow(at: indexPath)
  117. // cell?.accessoryType = .checkmark
  118. //
  119. if !self.allowMultipleSelection {
  120. self.close(nil)
  121. }
  122. }
  123. func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
  124. let cell = tableView.cellForRow(at: indexPath)
  125. cell?.accessoryType = .none
  126. }
  127. }
  128. extension CurrencyPickerViewController: UITableViewDataSource {
  129. func numberOfSections(in tableView: UITableView) -> Int {
  130. return 1
  131. }
  132. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  133. return filteredPlaces.count
  134. }
  135. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  136. let cell = tableVIew.dequeueReusableCell(withIdentifier: "CurrencyPickerCell", for: indexPath) as! CurrencyPickerCell
  137. let data = self.filteredPlaces.elementAt(index: indexPath.row)
  138. cell.place = data?.currency
  139. let flag = CountryInfo().getFlag(for: data?.countryCode ?? "")
  140. cell.flag = flag
  141. // CountryInfo().getFlag
  142. // if let selected = self.defaultSelectedData.first {
  143. // cell.selectedPlace = selected
  144. // }
  145. cell.setup()
  146. return cell
  147. }
  148. }