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

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 CurrencyPickerViewController: 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 noResultFoundLabel: UILabel!
  25. @IBOutlet weak var mainview: UIView!
  26. // language
  27. @IBOutlet weak var cancleButton: UIButton!
  28. @IBOutlet weak var titleLabel: UILabel!
  29. var data: [SendMoneyExchangeRateCurrencyViewModel] = []
  30. var selectedData: SendMoneyExchangeRateCurrencyViewModel?
  31. var filteredPlaces: [SendMoneyExchangeRateCurrencyViewModel] = [] {
  32. didSet {
  33. self.tableVIew.reloadData()
  34. self.setNoResultText()
  35. self.filteredPlaces.isEmpty ? (self.noResultFoundLabel.isHidden = false) : (self.noResultFoundLabel.isHidden = true)
  36. }
  37. }
  38. var allowMultipleSelection = false
  39. var allowSelection = true
  40. var doneAction: (([SendMoneyExchangeRateCurrencyViewModel?]) -> ())?
  41. var defaultSelectedData: [SendMoneyExchangeRateCurrencyViewModel?] = []
  42. var searchText = ""
  43. var type: PickerTitle?
  44. override func viewDidLoad() {
  45. super.viewDidLoad()
  46. self.setupTableView()
  47. self.setupSearchService()
  48. // self.setupSearchTextFieldUi()
  49. self.setupPlaces()
  50. self.titleView.layer.cornerRadius = 10
  51. self.mainview.layer.cornerRadius = 10
  52. self.configureLanguage()
  53. }
  54. func configureLanguage() {
  55. // doing doind doingi
  56. self.titleLabel.text = StringConstants().titleText
  57. self.searchTextField.placeholder = StringConstants().searchPlaceholder
  58. self.cancleButton.setTitle(StringConstants().cancelText, for: .normal)
  59. setTitle()
  60. setupPlaceholderText()
  61. }
  62. private func setNoResultText() {
  63. self.noResultFoundLabel.text = StringConstants().emptyText
  64. }
  65. private func setupPlaceholderText() {
  66. var text = ""
  67. guard let type = type else {return}
  68. switch type {
  69. case .bank:
  70. text = "search_bank_text".localized()
  71. case .branch:
  72. text = "search_branch_text".localized()
  73. case .country:
  74. text = "search_country_text".localized()
  75. case .currency:
  76. text = "search_currency_text".localized()
  77. case .district:
  78. text = "search_district_text".localized()
  79. case .occupation:
  80. text = "search_occupation_text".localized()
  81. case .relation:
  82. text = "search_relation_text".localized()
  83. case .sourceOfFund:
  84. text = "search_source_of_fund".localized()
  85. case .state:
  86. text = "search_province_text".localized()
  87. case .transferReasons:
  88. text = "search_transfer_reason_text".localized()
  89. case .verificationIdTypes:
  90. text = "search_text".localized()
  91. }
  92. self.searchTextField.placeholder = text
  93. }
  94. private func setTitle() {
  95. var text = ""
  96. guard let type = type else {return}
  97. switch type {
  98. case .bank:
  99. text = "select_currency_text".localized()
  100. case .branch:
  101. text = "select_branch_text".localized()
  102. case .country:
  103. text = "select_country_text".localized()
  104. case .currency:
  105. text = "search_currency_text".localized()
  106. case .district:
  107. text = "select_district_text".localized()
  108. case .occupation:
  109. text = "select_occupation_text".localized()
  110. case .relation:
  111. text = "select_relation_text".localized()
  112. case .sourceOfFund:
  113. text = "select_source_of_fund_text".localized()
  114. case .state:
  115. text = "province_placeholder_text".localized()
  116. case .transferReasons:
  117. text = "select_transfer_reason_text".localized()
  118. case .verificationIdTypes:
  119. text = "verification_id_placeholder_text".localized()
  120. }
  121. self.titleLabel.text = text.capitalized
  122. }
  123. private func setupPlaces() {
  124. self.filteredPlaces = self.data
  125. }
  126. private func setupTableView() {
  127. self.tableVIew.delegate = self
  128. self.tableVIew.dataSource = self
  129. self.tableVIew.separatorColor = UIColor.init(hex: Constants.seperatorColor)
  130. self.tableVIew.allowsMultipleSelection = self.allowMultipleSelection
  131. self.tableVIew.allowsSelection = self.allowSelection
  132. }
  133. private func setupSearchTextFieldUi() {
  134. // #imageLiteral(resourceName: "ic_search")
  135. let searchIconImageView = UIImageView(image: #imageLiteral(resourceName: "ic_search"))
  136. searchIconImageView.tintColor = Constants.tintColor
  137. self.searchTextField.leftView = searchIconImageView
  138. self.searchTextField.leftViewMode = .always
  139. }
  140. private func setupSearchService() {
  141. self.searchTextField.addTarget(self, action: #selector(self.search(sender:)), for: UIControlEvents.editingChanged)
  142. }
  143. @objc private func search(sender: UITextField) {
  144. let searchString = sender.text!
  145. self.searchText = searchString
  146. if searchString.isEmpty {
  147. self.filteredPlaces = self.data
  148. return
  149. }
  150. self.filteredPlaces = self.data.filter({
  151. return searchString.isEmpty ||
  152. ($0.currency ?? "").lowercased().contains(searchString.lowercased())
  153. }).sorted(by: { (a, _) -> Bool in
  154. return ((a.currency ?? "").lowercased()).hasPrefix(searchString.lowercased())
  155. })
  156. }
  157. // MARK: IBActions
  158. @IBAction func close(_ sender: Any?) {
  159. self.doneAction?([selectedData])
  160. self.dismiss(animated: true, completion: nil)
  161. }
  162. @IBAction func dismiss(_ sender: Any) {
  163. self.dismiss(animated: true, completion: nil)
  164. }
  165. @IBAction func clear(_ sender: Any) {
  166. self.tableVIew.indexPathsForSelectedRows?.forEach({self.tableVIew.deselectRow(at: $0, animated: true)})
  167. self.tableVIew.indexPathForSelectedRow.map({self.tableVIew.deselectRow(at: $0, animated: true)})
  168. self.defaultSelectedData = []
  169. self.tableVIew.reloadData()
  170. }
  171. }
  172. extension CurrencyPickerViewController: UITableViewDelegate {
  173. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  174. return 75
  175. }
  176. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  177. self.selectedData = self.filteredPlaces.elementAt(index: indexPath.row)
  178. // let cell = tableView.cellForRow(at: indexPath)
  179. // cell?.accessoryType = .checkmark
  180. //
  181. if !self.allowMultipleSelection {
  182. self.close(nil)
  183. }
  184. }
  185. func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
  186. let cell = tableView.cellForRow(at: indexPath)
  187. cell?.accessoryType = .none
  188. }
  189. }
  190. extension CurrencyPickerViewController: UITableViewDataSource {
  191. func numberOfSections(in tableView: UITableView) -> Int {
  192. return 1
  193. }
  194. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  195. return filteredPlaces.count
  196. }
  197. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  198. let cell = tableVIew.dequeueReusableCell(withIdentifier: "CurrencyPickerCell", for: indexPath) as! CurrencyPickerCell
  199. let data = self.filteredPlaces.elementAt(index: indexPath.row)
  200. cell.place = data?.currency
  201. let flag = CountryInfo().getFlag(for: data?.countryCode ?? "")
  202. cell.flag = flag
  203. // CountryInfo().getFlag
  204. // if let selected = self.defaultSelectedData.first {
  205. // cell.selectedPlace = selected
  206. // }
  207. cell.setup()
  208. return cell
  209. }
  210. }