SearchDaftarSertifikatVC.swift 6.4 KB

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