SearchOdsSp2BaruVC.swift 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. //
  2. // SearchOdsSp2BaruVC.swift
  3. // Sirani
  4. //
  5. // Created by Anhar Solehudin on 18/04/19.
  6. // Copyright © 2019 Anhar Solehudin. All rights reserved.
  7. //
  8. import UIKit
  9. protocol SearchOdsSp2BaruDelegate {
  10. func onSearch(search: String, parameter: String, jenis: String)
  11. }
  12. class SearchOdsSp2BaruVC: UIViewController {
  13. @IBOutlet weak var inputSearch: RoundTextField!
  14. @IBOutlet weak var optionsTV: UITableView!
  15. @IBOutlet weak var optionsLayout: UIView!
  16. @IBOutlet weak var optionsBg: UIView!
  17. @IBOutlet weak var btnParameterOptions: UIButton!
  18. @IBOutlet weak var btnJenisOptions: UIButton!
  19. // Initialize
  20. var delegate: SearchOdsSp2BaruDelegate?
  21. // id
  22. private let unwindSegueId = "unwindSearchToOdsSp2BaruSegueId"
  23. private let cellId = "searchOdsSp2BaruOptionCellId"
  24. // constants vallue data
  25. private let OPTION_PARAMATER_ID = 1
  26. private let OPTION_JENIS_ID = 2
  27. private let OPTION_PARAMATER_LABEL = "Pilih Parameter"
  28. private let OPTION_JENIS_LABEL = "Pilih Jenis"
  29. private let parameterOptionItems = [
  30. OptionItem(label: "Semua", value:""),
  31. OptionItem(label: "Nomor RESI", value:"resi_cekdok"),
  32. OptionItem(label: "Tanggal RESI", value:"date_cekdok"),
  33. OptionItem(label: "Pemohon", value:"custs"),
  34. OptionItem(label: "Nama Perangkat", value:"eqp_name"),
  35. OptionItem(label: "Merk & Model", value:"models"),
  36. OptionItem(label: "ID Aplikasi", value:"apl_id")
  37. ]
  38. private let jenisOptionItems = [OptionItem]()
  39. // variables
  40. private var selectedOptions = 0
  41. private var selectedOptionItems = [OptionItem]()
  42. private var optionsShown = false
  43. // Result Values
  44. private var search = ""
  45. private var parameter = ""
  46. private var jenis = ""
  47. // View Lifecycles
  48. override var preferredStatusBarStyle: UIStatusBarStyle {
  49. return .lightContent
  50. }
  51. override func viewWillAppear(_ animated: Bool) {
  52. btnParameterOptions.layer.masksToBounds = false
  53. btnParameterOptions.layer.shadowColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1)
  54. btnParameterOptions.layer.shadowOpacity = 0.5
  55. btnParameterOptions.layer.shadowOffset = CGSize(width: 1, height: 1)
  56. btnParameterOptions.layer.shadowRadius = 1
  57. btnJenisOptions.layer.masksToBounds = false
  58. btnJenisOptions.layer.shadowColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1)
  59. btnJenisOptions.layer.shadowOpacity = 0.5
  60. btnJenisOptions.layer.shadowOffset = CGSize(width: 1, height: 1)
  61. btnJenisOptions.layer.shadowRadius = 1
  62. hideOptions()
  63. optionsTV.bringSubviewToFront(optionsBg)
  64. let onOptionsBgTapped = UITapGestureRecognizer(target: self, action: #selector(hideOptions))
  65. optionsBg.addGestureRecognizer(onOptionsBgTapped)
  66. }
  67. override func viewDidLoad() {
  68. super.viewDidLoad()
  69. optionsTV.delegate = self
  70. optionsTV.dataSource = self
  71. optionsTV.tableFooterView = UIView()
  72. }
  73. // private functions
  74. private func showOptions() {
  75. optionsLayout.show()
  76. optionsShown = true
  77. }
  78. @objc private func hideOptions() {
  79. optionsLayout.hide()
  80. optionsShown = false
  81. }
  82. // actions
  83. @IBAction func onBtnBackTap(_ sender: Any) {
  84. performSegue(withIdentifier: unwindSegueId, sender: self)
  85. }
  86. @IBAction func onInputSearchKeyTap(_ sender: Any) {
  87. view.endEditing(true)
  88. }
  89. @IBAction func onParameterOptionsTapped(_ sender: Any) {
  90. selectedOptions = OPTION_PARAMATER_ID
  91. selectedOptionItems.removeAll()
  92. selectedOptionItems += parameterOptionItems
  93. optionsTV.reloadData()
  94. showOptions()
  95. }
  96. @IBAction func onJenisOptionsTapped(_ sender: Any) {
  97. // selectedOptions = OPTION_JENIS_ID
  98. // selectedOptionItems.removeAll()
  99. // selectedOptionItems += jenisOptionItems
  100. // optionsTV.reloadData()
  101. // showOptions()
  102. }
  103. @IBAction func onBtnResetTap(_ sender: Any) {
  104. search = ""
  105. parameter = ""
  106. jenis = ""
  107. inputSearch.text = ""
  108. btnParameterOptions.setTitle(OPTION_PARAMATER_LABEL, for: .normal)
  109. btnJenisOptions.setTitle(OPTION_JENIS_LABEL, for: .normal)
  110. }
  111. @IBAction func onBtnSearchTap(_ sender: Any) {
  112. if let searchText = inputSearch.getText() {
  113. search = searchText
  114. }
  115. self.delegate?.onSearch(search: search, parameter: parameter, jenis: jenis)
  116. performSegue(withIdentifier: unwindSegueId, sender: self)
  117. }
  118. }
  119. extension SearchOdsSp2BaruVC: UITableViewDelegate, UITableViewDataSource {
  120. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  121. return selectedOptionItems.count
  122. }
  123. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  124. if let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as? OptionsCell {
  125. let optionItem = selectedOptionItems[indexPath.row]
  126. cell.updateViews(item: optionItem)
  127. return cell
  128. } else {
  129. return OptionsCell()
  130. }
  131. }
  132. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  133. if selectedOptions == OPTION_PARAMATER_ID {
  134. parameter = selectedOptionItems[indexPath.row].value as! String
  135. let parameterLabel = selectedOptionItems[indexPath.row].label
  136. btnParameterOptions.setTitle(parameterLabel, for: .normal)
  137. }
  138. // else if selectedOptions == OPTION_JENIS_ID {
  139. // jenis = selectedOptionItems[indexPath.row].value as! String
  140. // let jenisLabel = selectedOptionItems[indexPath.row].label
  141. // btnJenisOptions.setTitle(jenisLabel, for: .normal)
  142. // }
  143. hideOptions()
  144. }
  145. }