SearchSertifikatNewVC.swift 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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. var backtoSertifikatPrivate = "unwindSearchToSertifikatSegueId"
  22. var backtoSertifikatPublic = "unwindSearchToSertifikatPublicSegueId"
  23. var isSertifikat = 1
  24. // constants vallue data
  25. private let statusSertifikatPrivateOptionItems = [
  26. OptionItem(label: "Semua Sertifikat", value: ""),
  27. OptionItem(label: "Sertifikat Berlaku", value: "sertifkat_berlaku"),
  28. OptionItem(label: "Sertifikat Tidak Berlaku", value: "sertifikat_tidak_berlaku"),
  29. OptionItem(label: "Sertifikat Revisi", value: "sertifikat_revisi")
  30. ]
  31. private let statusSertifikatPublicOptionItems = [
  32. OptionItem(label: "Sertifikat Terbit", value: "sertifikat_terbit"),
  33. OptionItem(label: "Sertifikat Dicabut", value: "sertifikat_dicabut")
  34. ]
  35. private let OPTION_JENIS_SERTIFIKAT_ID = 1
  36. // Others
  37. private var selectedOptions = 0
  38. private var selectedOptionItems = [OptionItem]()
  39. private var optionsShown = false
  40. // Result Values
  41. private var search = ""
  42. private var status = ""
  43. private var jenisLabel = "Semua"
  44. // View Lifecycles
  45. override var preferredStatusBarStyle: UIStatusBarStyle {
  46. return .lightContent
  47. }
  48. override func viewWillAppear(_ animated: Bool) {
  49. btnStatusOptions.layer.masksToBounds = false
  50. btnStatusOptions.layer.shadowColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1)
  51. btnStatusOptions.layer.shadowOpacity = 0.5
  52. btnStatusOptions.layer.shadowOffset = CGSize(width: 1, height: 1)
  53. btnStatusOptions.layer.shadowRadius = 1
  54. if isSertifikat == 2 {
  55. status = statusSertifikatPublicOptionItems[0].value as! String
  56. jenisLabel = statusSertifikatPublicOptionItems[0].label
  57. }else{
  58. status = statusSertifikatPrivateOptionItems[0].value as! String
  59. jenisLabel = statusSertifikatPrivateOptionItems[0].label
  60. }
  61. btnStatusOptions.setTitle(jenisLabel, for: .normal)
  62. hideOptions()
  63. optionsLayoutTV.bringSubviewToFront(optionsBg)
  64. let onOptionsBgTapped = UITapGestureRecognizer(target: self, action: #selector(hideOptions))
  65. optionsBg.addGestureRecognizer(onOptionsBgTapped)
  66. }
  67. override func viewDidLoad() {
  68. super.viewDidLoad()
  69. optionsLayoutTV.delegate = self
  70. optionsLayoutTV.dataSource = self
  71. optionsLayoutTV.tableFooterView = UIView()
  72. }
  73. @IBAction func onInputSearchKeyTap(_ sender: Any) {
  74. view.endEditing(true)
  75. }
  76. @IBAction func unwindToSertifikatNew(_ sender: Any) {
  77. if optionsShown {
  78. hideOptions()
  79. } else {
  80. if isSertifikat == 2 {
  81. performSegue(withIdentifier: backtoSertifikatPublic, sender: self)
  82. }else {
  83. performSegue(withIdentifier: backtoSertifikatPrivate, sender: self)
  84. }
  85. }
  86. }
  87. @IBAction func onJenisSertifikatOptionsTapped(_ sender: Any) {
  88. selectedOptions = OPTION_JENIS_SERTIFIKAT_ID
  89. selectedOptionItems.removeAll()
  90. if isSertifikat == 2 {
  91. selectedOptionItems += statusSertifikatPublicOptionItems
  92. }else{
  93. selectedOptionItems += statusSertifikatPrivateOptionItems
  94. }
  95. optionsLayoutTV.reloadData()
  96. showOptions()
  97. }
  98. @IBAction func onResetTapped(_ sender: Any) {
  99. search = ""
  100. status = ""
  101. jenisLabel = "Semua"
  102. inputSearch.text = ""
  103. btnStatusOptions.setTitle(jenisLabel, for: .normal)
  104. }
  105. @IBAction func onSearchTapped(_ sender: Any) {
  106. if let searchText = inputSearch.getText() {
  107. search = searchText
  108. }
  109. self.delegate?.onSearch(search: search, status: status, jenisLabel: jenisLabel)
  110. if isSertifikat == 2 {
  111. performSegue(withIdentifier: backtoSertifikatPublic, sender: self)
  112. }else {
  113. performSegue(withIdentifier: backtoSertifikatPrivate, sender: self)
  114. }
  115. }
  116. private func showOptions() {
  117. optionsLayout.show()
  118. optionsShown = true
  119. }
  120. @objc private func hideOptions() {
  121. optionsLayout.hide()
  122. optionsShown = false
  123. }
  124. }
  125. extension SearchSertifikatNewVC: UITableViewDelegate, UITableViewDataSource {
  126. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  127. return selectedOptionItems.count
  128. }
  129. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  130. if let cell = tableView.dequeueReusableCell(withIdentifier: "searchSertifikatNewCell", for: indexPath) as? OptionsCell {
  131. let optionItem = selectedOptionItems[indexPath.row]
  132. cell.updateViews(item: optionItem)
  133. return cell
  134. } else {
  135. return OptionsCell()
  136. }
  137. }
  138. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  139. if selectedOptions == OPTION_JENIS_SERTIFIKAT_ID {
  140. status = selectedOptionItems[indexPath.row].value as! String
  141. jenisLabel = selectedOptionItems[indexPath.row].label
  142. btnStatusOptions.setTitle(jenisLabel, for: .normal)
  143. }
  144. hideOptions()
  145. }
  146. }