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.

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