SearchSertifikatNewVC.swift 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. //
  2. // SearchSertifikatNewVC.swift
  3. // Sirani
  4. //
  5. // Created by Hendi on 19/06/23.
  6. // Copyright © 2023 PT. Mitra Sinerji Teknoindo. All rights reserved.
  7. //
  8. import UIKit
  9. protocol SearchSertifikatNewDelegate {
  10. func onSearch(search: String, status: String, jenisLabel: String)
  11. }
  12. class SearchSertifikatNewVC: 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 btnStatusOptions: UIButton!
  19. // Initialize
  20. var delegate: SearchSertifikatNewDelegate?
  21. // constants vallue data
  22. private let jenisSertifikatOptionItems = [
  23. OptionItem(label: "Semua", value: ""),
  24. OptionItem(label: "Berlaku", value: "sertifkat_berlaku"),
  25. OptionItem(label: "Tidak Berlaku", value: "sertifikat_tidak_berlaku"),
  26. OptionItem(label: "Revisi", value: "sertifikat_revisi")
  27. ]
  28. private let OPTION_JENIS_SERTIFIKAT_ID = 1
  29. // Others
  30. private var selectedOptions = 0
  31. private var selectedOptionItems = [OptionItem]()
  32. private var optionsShown = false
  33. // Result Values
  34. private var search = ""
  35. private var status = ""
  36. private var jenisLabel = "Semua"
  37. // View Lifecycles
  38. override var preferredStatusBarStyle: UIStatusBarStyle {
  39. return .lightContent
  40. }
  41. override func viewWillAppear(_ animated: Bool) {
  42. btnStatusOptions.layer.masksToBounds = false
  43. btnStatusOptions.layer.shadowColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1)
  44. btnStatusOptions.layer.shadowOpacity = 0.5
  45. btnStatusOptions.layer.shadowOffset = CGSize(width: 1, height: 1)
  46. btnStatusOptions.layer.shadowRadius = 1
  47. status = jenisSertifikatOptionItems[0].value as! String
  48. jenisLabel = jenisSertifikatOptionItems[0].label
  49. btnStatusOptions.setTitle(jenisLabel, for: .normal)
  50. hideOptions()
  51. optionsLayoutTV.bringSubviewToFront(optionsBg)
  52. let onOptionsBgTapped = UITapGestureRecognizer(target: self, action: #selector(hideOptions))
  53. optionsBg.addGestureRecognizer(onOptionsBgTapped)
  54. }
  55. override func viewDidLoad() {
  56. super.viewDidLoad()
  57. optionsLayoutTV.delegate = self
  58. optionsLayoutTV.dataSource = self
  59. optionsLayoutTV.tableFooterView = UIView()
  60. }
  61. @IBAction func onInputSearchKeyTap(_ sender: Any) {
  62. view.endEditing(true)
  63. }
  64. @IBAction func unwindToSertifikatNew(_ sender: Any) {
  65. if optionsShown {
  66. hideOptions()
  67. } else {
  68. performSegue(withIdentifier: "unwindSearchToSertifikatSegueId", sender: self)
  69. }
  70. }
  71. @IBAction func onJenisSertifikatOptionsTapped(_ sender: Any) {
  72. selectedOptions = OPTION_JENIS_SERTIFIKAT_ID
  73. selectedOptionItems.removeAll()
  74. selectedOptionItems += jenisSertifikatOptionItems
  75. optionsLayoutTV.reloadData()
  76. showOptions()
  77. }
  78. @IBAction func onResetTapped(_ sender: Any) {
  79. search = ""
  80. status = ""
  81. jenisLabel = "Semua"
  82. inputSearch.text = ""
  83. btnStatusOptions.setTitle(jenisLabel, for: .normal)
  84. }
  85. @IBAction func onSearchTapped(_ sender: Any) {
  86. if let searchText = inputSearch.getText() {
  87. search = searchText
  88. }
  89. print("TEST : ")
  90. print("SEARCH \(search)")
  91. print("STATUS \(status)")
  92. print("JENIS \(jenisLabel)")
  93. self.delegate?.onSearch(search: search, status: status, jenisLabel: jenisLabel)
  94. performSegue(withIdentifier: "unwindSearchToSertifikatSegueId", sender: self)
  95. }
  96. private func showOptions() {
  97. optionsLayout.show()
  98. optionsShown = true
  99. }
  100. @objc private func hideOptions() {
  101. optionsLayout.hide()
  102. optionsShown = false
  103. }
  104. }
  105. extension SearchSertifikatNewVC: UITableViewDelegate, UITableViewDataSource {
  106. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  107. return selectedOptionItems.count
  108. }
  109. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  110. if let cell = tableView.dequeueReusableCell(withIdentifier: "searchSertifikatNewCell", for: indexPath) as? OptionsCell {
  111. let optionItem = selectedOptionItems[indexPath.row]
  112. cell.updateViews(item: optionItem)
  113. return cell
  114. } else {
  115. return OptionsCell()
  116. }
  117. }
  118. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  119. if selectedOptions == OPTION_JENIS_SERTIFIKAT_ID {
  120. status = selectedOptionItems[indexPath.row].value as! String
  121. jenisLabel = selectedOptionItems[indexPath.row].label
  122. btnStatusOptions.setTitle(jenisLabel, for: .normal)
  123. }
  124. hideOptions()
  125. }
  126. }