SearchOdsAplikasiEntryVC.swift 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. //
  2. // SearchOdsAplikasiEntryVC.swift
  3. // Sirani
  4. //
  5. // Created by Anhar Solehudin on 17/04/19.
  6. // Copyright © 2019 Anhar Solehudin. All rights reserved.
  7. //
  8. import UIKit
  9. protocol SearchOdsAplikasiEntryDelegate {
  10. func onSearch(search: String, parameter: String, jenis: String)
  11. }
  12. class SearchOdsAplikasiEntryVC: 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: SearchOdsAplikasiEntryDelegate?
  21. // id
  22. private let unwindSegueId = "unwindSearchToOdsAplikasiEntrySegueId"
  23. private let cellId = "searchAplikasiEntryOptionCellId"
  24. // constants vallue data
  25. private let parameterOptionItems = [
  26. OptionItem(label: "Semua", value: ""),
  27. OptionItem(label: "Nomor Resi", value: "resi_cek"),
  28. OptionItem(label: "Tanggal Resi", value: "tgla"),
  29. OptionItem(label: "ID Customer", value: "cust_id"),
  30. OptionItem(label: "Nama Customer", value: "custs"),
  31. OptionItem(label: "Nama Perangkat", value: "eqp_name"),
  32. OptionItem(label: "Merk", value: "merk"),
  33. OptionItem(label: "Model", value: "model"),
  34. OptionItem(label: "Negara", value: "negara"),
  35. OptionItem(label: "ID Aplikasi", value: "apl_id")
  36. ]
  37. private let jenisSertifikatOptionItems = [OptionItem]()
  38. private let OPTION_PARAMATER_ID = 1
  39. private let OPTION_JENIS_ID = 2
  40. private let OPTION_PARAMATER_LABEL = "Pilih Parameter"
  41. private let OPTION_JENIS_LABEL = "Pilih Jenis"
  42. // Others
  43. private var selectedOptions = 0
  44. private var selectedOptionItems = [OptionItem]()
  45. private var optionsShown = false
  46. // Result Values
  47. private var search = ""
  48. private var parameter = ""
  49. private var jenis = ""
  50. // View Lifecycles
  51. override var preferredStatusBarStyle: UIStatusBarStyle {
  52. return .lightContent
  53. }
  54. override func viewWillAppear(_ animated: Bool) {
  55. btnParameterOptions.layer.masksToBounds = false
  56. btnParameterOptions.layer.shadowColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1)
  57. btnParameterOptions.layer.shadowOpacity = 0.5
  58. btnParameterOptions.layer.shadowOffset = CGSize(width: 1, height: 1)
  59. btnParameterOptions.layer.shadowRadius = 1
  60. btnJenisSertifikatOptions.layer.masksToBounds = false
  61. btnJenisSertifikatOptions.layer.shadowColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1)
  62. btnJenisSertifikatOptions.layer.shadowOpacity = 0.5
  63. btnJenisSertifikatOptions.layer.shadowOffset = CGSize(width: 1, height: 1)
  64. btnJenisSertifikatOptions.layer.shadowRadius = 1
  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. // private functions
  77. private func showOptions() {
  78. optionsLayout.show()
  79. optionsShown = true
  80. }
  81. @objc private func hideOptions() {
  82. optionsLayout.hide()
  83. optionsShown = false
  84. }
  85. // actions
  86. @IBAction func onBtnBackTap(_ sender: Any) {
  87. performSegue(withIdentifier: unwindSegueId, sender: self)
  88. }
  89. @IBAction func onInputSearchKeyTap(_ sender: Any) {
  90. view.endEditing(true)
  91. }
  92. @IBAction func onParameterOptionsTapped(_ sender: Any) {
  93. selectedOptions = OPTION_PARAMATER_ID
  94. selectedOptionItems.removeAll()
  95. selectedOptionItems += parameterOptionItems
  96. optionsLayoutTV.reloadData()
  97. showOptions()
  98. }
  99. @IBAction func onJenisSertifikatOptionsTapped(_ sender: Any) {
  100. // selectedOptions = OPTION_JENIS_ID
  101. // selectedOptionItems.removeAll()
  102. // selectedOptionItems += jenisSertifikatOptionItems
  103. // optionsLayoutTV.reloadData()
  104. // showOptions()
  105. }
  106. @IBAction func onBtnResetTap(_ sender: Any) {
  107. search = ""
  108. parameter = ""
  109. jenis = ""
  110. inputSearch.text = ""
  111. btnParameterOptions.setTitle(OPTION_PARAMATER_LABEL, for: .normal)
  112. btnJenisSertifikatOptions.setTitle(OPTION_JENIS_LABEL, for: .normal)
  113. }
  114. @IBAction func onBtnSearchTap(_ sender: Any) {
  115. if let searchText = inputSearch.getText() {
  116. search = searchText
  117. }
  118. self.delegate?.onSearch(search: search, parameter: parameter, jenis: jenis)
  119. performSegue(withIdentifier: unwindSegueId, sender: self)
  120. }
  121. }
  122. extension SearchOdsAplikasiEntryVC: UITableViewDelegate, UITableViewDataSource {
  123. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  124. return selectedOptionItems.count
  125. }
  126. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  127. if let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as? OptionsCell {
  128. let optionItem = selectedOptionItems[indexPath.row]
  129. cell.updateViews(item: optionItem)
  130. return cell
  131. } else {
  132. return OptionsCell()
  133. }
  134. }
  135. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  136. if selectedOptions == OPTION_PARAMATER_ID {
  137. parameter = selectedOptionItems[indexPath.row].value as! String
  138. let parameterLabel = selectedOptionItems[indexPath.row].label
  139. btnParameterOptions.setTitle(parameterLabel, for: .normal)
  140. }
  141. // else if selectedOptions == OPTION_JENIS_ID {
  142. // jenis = selectedOptionItems[indexPath.row].value as! String
  143. // let jenisLabel = selectedOptionItems[indexPath.row].label
  144. // btnJenisSertifikatOptions.setTitle(jenisLabel, for: .normal)
  145. // }
  146. hideOptions()
  147. }
  148. }