// // SearchOdsSp2BeforeVC.swift // Sirani // // Created by Anhar Solehudin on 20/04/19. // Copyright © 2019 Anhar Solehudin. All rights reserved. // import UIKit protocol SearchOdsSp2BeforeDelegate { func onSearch(search: String, parameter: String, jenis: String) } class SearchOdsSp2BeforeVC: UIViewController { @IBOutlet weak var inputSearch: RoundTextField! @IBOutlet weak var optionsTV: UITableView! @IBOutlet weak var optionsLayout: UIView! @IBOutlet weak var optionsBg: UIView! @IBOutlet weak var btnParameterOptions: UIButton! @IBOutlet weak var btnJenisOptions: UIButton! // Initialize var delegate: SearchOdsSp2BeforeDelegate? // id private let unwindSegueId = "unwindSearchToOdsSp2BeforeSegueId" private let cellId = "searchOdsSp2BeforeOptionCellId" // constants vallue data private let OPTION_PARAMATER_ID = 1 private let OPTION_JENIS_ID = 2 private let OPTION_PARAMATER_LABEL = "Pilih Parameter" private let OPTION_JENIS_LABEL = "Pilih Jenis" private let parameterOptionItems = [ OptionItem(label: "Semua", value: ""), OptionItem(label: "Nomor RESI", value: "resi_cekdok"), OptionItem(label: "Tanggal Resi (dd-mm-yyyy)", value: "date_cekdok"), OptionItem(label: "Nama Customer", value: "custs"), OptionItem(label: "Nama Perangkat", value: "eqp_name"), OptionItem(label: "Merk & Model", value: "models"), OptionItem(label: "Pembuat", value: "mfc_name"), OptionItem(label: "ID Aplikasi", value: "apl_id") ] private let jenisOptionItems = [ OptionItem(label: "SEMUA", value: ""), OptionItem(label: "PERMOHONAN BARU", value: "BRU"), OptionItem(label: "PENGGANTIAN", value: "PGL"), OptionItem(label: "PERPANJANGAN", value: "PPJ"), OptionItem(label: "PERUBAHAN / REVISI", value: "RVS"), OptionItem(label: "EVALUASI DOKUMEN", value: "UJD"), OptionItem(label: "PERPANJANGAN DATA LAMA", value: "PLM") ] // variables private var selectedOptions = 0 private var selectedOptionItems = [OptionItem]() private var optionsShown = false // Result Values private var search = "" private var parameter = "" private var jenis = "" // View Lifecycles override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } override func viewWillAppear(_ animated: Bool) { btnParameterOptions.layer.masksToBounds = false btnParameterOptions.layer.shadowColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1) btnParameterOptions.layer.shadowOpacity = 0.5 btnParameterOptions.layer.shadowOffset = CGSize(width: 1, height: 1) btnParameterOptions.layer.shadowRadius = 1 btnJenisOptions.layer.masksToBounds = false btnJenisOptions.layer.shadowColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1) btnJenisOptions.layer.shadowOpacity = 0.5 btnJenisOptions.layer.shadowOffset = CGSize(width: 1, height: 1) btnJenisOptions.layer.shadowRadius = 1 hideOptions() optionsTV.bringSubviewToFront(optionsBg) let onOptionsBgTapped = UITapGestureRecognizer(target: self, action: #selector(hideOptions)) optionsBg.addGestureRecognizer(onOptionsBgTapped) } override func viewDidLoad() { super.viewDidLoad() optionsTV.delegate = self optionsTV.dataSource = self optionsTV.tableFooterView = UIView() } // private functions private func showOptions() { optionsLayout.show() optionsShown = true } @objc private func hideOptions() { optionsLayout.hide() optionsShown = false } // actions @IBAction func onBtnBackTap(_ sender: Any) { performSegue(withIdentifier: unwindSegueId, sender: self) } @IBAction func onInputSearchKeyTap(_ sender: Any) { view.endEditing(true) } @IBAction func onParameterOptionsTapped(_ sender: Any) { selectedOptions = OPTION_PARAMATER_ID selectedOptionItems.removeAll() selectedOptionItems += parameterOptionItems optionsTV.reloadData() showOptions() } @IBAction func onJenisOptionsTapped(_ sender: Any) { selectedOptions = OPTION_JENIS_ID selectedOptionItems.removeAll() selectedOptionItems += jenisOptionItems optionsTV.reloadData() showOptions() } @IBAction func onBtnResetTap(_ sender: Any) { search = "" parameter = "" jenis = "" inputSearch.text = "" btnParameterOptions.setTitle(OPTION_PARAMATER_LABEL, for: .normal) btnJenisOptions.setTitle(OPTION_JENIS_LABEL, for: .normal) } @IBAction func onBtnSearchTap(_ sender: Any) { if let searchText = inputSearch.getText() { search = searchText } self.delegate?.onSearch(search: search, parameter: parameter, jenis: jenis) performSegue(withIdentifier: unwindSegueId, sender: self) } } extension SearchOdsSp2BeforeVC: UITableViewDelegate, UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return selectedOptionItems.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { if let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as? OptionsCell { let optionItem = selectedOptionItems[indexPath.row] cell.updateViews(item: optionItem) return cell } else { return OptionsCell() } } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { if selectedOptions == OPTION_PARAMATER_ID { parameter = selectedOptionItems[indexPath.row].value as! String let parameterLabel = selectedOptionItems[indexPath.row].label btnParameterOptions.setTitle(parameterLabel, for: .normal) } else if selectedOptions == OPTION_JENIS_ID { jenis = selectedOptionItems[indexPath.row].value as! String let jenisLabel = selectedOptionItems[indexPath.row].label btnJenisOptions.setTitle(jenisLabel, for: .normal) } hideOptions() } }