SearchBalaiUjiVC.swift 6.7 KB

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