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.

228 lines
8.0 KiB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. //
  2. // ItemsPickerViewController.swift
  3. //
  4. //
  5. // Created by shishir sapkota
  6. //
  7. import UIKit
  8. class BankPickerViewController: UIViewController {
  9. struct StringConstants {
  10. let emptyText = "no_result_found_text".localized()
  11. }
  12. struct Constants {
  13. static let seperatorColor = "#DFDFDF"
  14. static let tintColor = UIColor.red
  15. static let gradientviewLeftColor = UIColor.init(hex: "#FF0000")
  16. static let gradientviewRightColor = UIColor.init(hex: "#9C272D")
  17. }
  18. @IBOutlet weak var titleView: UIView!
  19. @IBOutlet weak var tableVIew: UITableView!
  20. @IBOutlet weak var searchTextField: UITextField!
  21. @IBOutlet weak var titleLabel: UILabel!
  22. @IBOutlet weak var noResultFoundLabel: UILabel!
  23. @IBOutlet weak var cancelButton: UIButton!
  24. @IBOutlet weak var mainview: UIView!
  25. var data: [SendMoneyBank] = []
  26. var selectedData: SendMoneyBank?
  27. var filteredPlaces: [SendMoneyBank] = [] {
  28. didSet {
  29. self.tableVIew.reloadData()
  30. self.setNoResultText()
  31. self.filteredPlaces.isEmpty ? (self.noResultFoundLabel.isHidden = false) : (self.noResultFoundLabel.isHidden = true)
  32. }
  33. }
  34. var allowMultipleSelection = false
  35. var allowSelection = true
  36. var doneAction: (([SendMoneyBank?]) -> ())?
  37. var defaultSelectedData: [SendMoneyBank?] = []
  38. var searchText = ""
  39. var type: PickerTitle?
  40. override func viewDidLoad() {
  41. super.viewDidLoad()
  42. self.setupTableView()
  43. self.setupSearchService()
  44. // self.setupSearchTextFieldUi()
  45. self.setupPlaces()
  46. self.titleView.layer.cornerRadius = 10
  47. self.mainview.layer.cornerRadius = 10
  48. setTitle()
  49. }
  50. private func setNoResultText() {
  51. self.noResultFoundLabel.text = StringConstants().emptyText
  52. }
  53. private func setTitle() {
  54. var text = ""
  55. guard let type = type else {return}
  56. switch type {
  57. case .bank:
  58. text = "select_currency_text".localized()
  59. self.searchTextField.placeholder = "search_bank_text".localized()
  60. case .branch:
  61. text = "select_branch_text".localized()
  62. self.searchTextField.placeholder = "search_branch_text".localized()
  63. case .country:
  64. text = "select_country_text".localized()
  65. self.searchTextField.placeholder = "search_country_text".localized()
  66. case .currency:
  67. text = "search_currency_text".localized()
  68. self.searchTextField.placeholder = "search_currency_text".localized()
  69. case .district:
  70. text = "select_district_text".localized()
  71. self.searchTextField.placeholder = "search_district_text".localized()
  72. case .occupation:
  73. text = "select_occupation_text".localized()
  74. self.searchTextField.placeholder = "search_occupation_text".localized()
  75. case .relation:
  76. text = "select_relation_text".localized()
  77. self.searchTextField.placeholder = "search_relation_text".localized()
  78. case .sourceOfFund:
  79. text = "select_source_of_fund_text".localized()
  80. self.searchTextField.placeholder = "search_source_of_fund".localized()
  81. case .state:
  82. text = "province_placeholder_text".localized()
  83. self.searchTextField.placeholder = "search_province_text".localized()
  84. case .transferReasons:
  85. text = "select_transfer_reason_text".localized()
  86. self.searchTextField.placeholder = "search_transfer_reason_text".localized()
  87. case .verificationIdTypes:
  88. text = "verification_id_placeholder_text".localized()
  89. self.searchTextField.placeholder = "verification_id_placeholder_text".localized()
  90. }
  91. self.titleLabel.text = text.capitalized
  92. self.cancelButton.setTitle("cancel_text".localized(), for: UIControlState.normal)
  93. }
  94. private func setupPlaces() {
  95. self.filteredPlaces = self.data
  96. }
  97. private func setupTableView() {
  98. self.tableVIew.delegate = self
  99. self.tableVIew.dataSource = self
  100. self.tableVIew.separatorColor = UIColor.init(hex: Constants.seperatorColor)
  101. self.tableVIew.allowsMultipleSelection = self.allowMultipleSelection
  102. self.tableVIew.allowsSelection = self.allowSelection
  103. }
  104. private func setupSearchTextFieldUi() {
  105. // #imageLiteral(resourceName: "ic_search")
  106. let searchIconImageView = UIImageView(image: #imageLiteral(resourceName: "ic_search"))
  107. searchIconImageView.tintColor = Constants.tintColor
  108. self.searchTextField.leftView = searchIconImageView
  109. self.searchTextField.leftViewMode = .always
  110. }
  111. private func setupSearchService() {
  112. self.searchTextField.addTarget(self, action: #selector(self.search(sender:)), for: UIControlEvents.editingChanged)
  113. }
  114. @objc private func search(sender: UITextField) {
  115. let searchString = sender.text!
  116. self.searchText = searchString
  117. if searchString.isEmpty {
  118. self.filteredPlaces = self.data
  119. return
  120. }
  121. print("searchString : \(searchString), \(filteredPlaces)")
  122. self.filteredPlaces = self.data.filter({
  123. return searchString.isEmpty ||
  124. ($0.name ?? "").lowercased().contains(searchString.lowercased())
  125. }).sorted(by: { (a, _) -> Bool in
  126. return ((a.name ?? "").lowercased() ?? "").hasPrefix(searchString.lowercased())
  127. })
  128. print("after search")
  129. print(filteredPlaces)
  130. }
  131. // MARK: IBActions
  132. @IBAction func close(_ sender: Any?) {
  133. // let selectedIndexPaths = self.tableVIew.indexPathsForSelectedRows ?? self.tableVIew.indexPathForSelectedRow.map({[$0]})
  134. // let selectedData = selectedIndexPaths?.flatMap { indexPath -> SendMoneyBank? in
  135. // let value = data[indexPath.row]
  136. // return value
  137. // }
  138. self.doneAction?([selectedData])
  139. self.dismiss(animated: true, completion: nil)
  140. }
  141. @IBAction func dismiss(_ sender: Any) {
  142. self.dismiss(animated: true, completion: nil)
  143. }
  144. @IBAction func clear(_ sender: Any) {
  145. self.tableVIew.indexPathsForSelectedRows?.forEach({self.tableVIew.deselectRow(at: $0, animated: true)})
  146. self.tableVIew.indexPathForSelectedRow.map({self.tableVIew.deselectRow(at: $0, animated: true)})
  147. self.defaultSelectedData = []
  148. self.tableVIew.reloadData()
  149. }
  150. }
  151. extension BankPickerViewController: UITableViewDelegate {
  152. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  153. return 75
  154. }
  155. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  156. self.selectedData = self.filteredPlaces.elementAt(index: indexPath.row)
  157. // let cell = tableView.cellForRow(at: indexPath)
  158. // cell?.accessoryType = .checkmark
  159. //
  160. if !self.allowMultipleSelection {
  161. self.close(nil)
  162. }
  163. }
  164. func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
  165. let cell = tableView.cellForRow(at: indexPath)
  166. cell?.accessoryType = .none
  167. }
  168. }
  169. extension BankPickerViewController: UITableViewDataSource {
  170. func numberOfSections(in tableView: UITableView) -> Int {
  171. return 1
  172. }
  173. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  174. return filteredPlaces.count
  175. }
  176. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  177. let cell = tableVIew.dequeueReusableCell(withIdentifier: "BankPickerCell", for: indexPath) as! BankPickerCell
  178. cell.place = self.filteredPlaces.elementAt(index: indexPath.row)?.name
  179. // if let selected = self.defaultSelectedData.first {
  180. // cell.selectedPlace = selected
  181. // }
  182. cell.setup()
  183. return cell
  184. }
  185. }