// // SedentaryViewControllers.swift // FireBoltt // // Created by lemo. on 2020/3/30. // Copyright © 2020 Sheldon. All rights reserved. // import UIKit // MARK:- 复用 private enum Resuable { static let tableViewCell = ReusableCell(nibName: "CommonTableViewCell") static let doubleTimePickerCell = ReusableCell(identifier: "DoubleTimePickerCell", nib: nil) } fileprivate struct Metric { static let descTextColor = kHexColor(0x96A3B3) } class SedentaryViewControllers: TableViewController { var sedentaryModel = SedentaryModel() override func viewDidLoad() { super.viewDidLoad() monitor() } override func makeUI() { super.makeUI() let rightItem = UIBarButtonItem.baseBarButtonItem(normalImg: "", highImg: nil, title: MultiLanguageKey_FB.saveFB.localized, target: self, action: #selector(clickSave)) navigationItem.rightBarButtonItem = rightItem tableViewStyle = .grouped tableView.rx.setDelegate(self).disposed(by: rx.disposeBag) tableView.register(Resuable.doubleTimePickerCell) tableView.register(Resuable.tableViewCell) tableView.snp.makeConstraints { (make) in make.edges.equalToSuperview() } } override func bindViewModel() { guard let viewModel = viewModel as? SedentaryViewModels else { return } sedentaryModel = viewModel.sedentaryModel let dataSource = RxTableViewSectionedReloadDataSource.init(configureCell: { [weak self] (ds, tv, indexPath, _) -> UITableViewCell in switch ds[indexPath] { case .SinglePicker(_, _): return UITableViewCell() case .TableViewCellModel(let cellModel): let cell: CommonTableViewCell = tv.dequeue(Resuable.tableViewCell, for: indexPath) cell.bindViewModel(model: cellModel) cell.rightSwitch.rx.isOn .skip(1) .subscribe(onNext: { (isOn) in self?.sedentaryModel.IsOpen = isOn }) .disposed(by: cell.cellDisposeBag) return cell case .DoubleTimePicker(let leftTitle, let rightTitle, let selectedItems): let cell: DoubleTimePickerCell = tv.dequeue(Resuable.doubleTimePickerCell, for: indexPath) cell.selectionStyle = .none cell.fbbegintimeLabel.text = leftTitle cell.fbendtimeLabel.text = rightTitle if indexPath.section == 2 { cell.type = 1 }else { cell.type = 0 } cell.pickerColsure = { (items) in if indexPath.section == 2 { if let sittingTime = items.first { self?.sedentaryModel.SittingTime = sittingTime } if let sittingThreshold = items.last { self?.sedentaryModel.SittingThreshold = sittingThreshold } }else { self?.sedentaryModel.StartHour = items.first?.components(separatedBy: ":").first ?? "00" self?.sedentaryModel.EndHour = items.last?.components(separatedBy: ":").first ?? "00" } } cell.selectedItems = selectedItems return cell } }) viewModel.fbdataVariable .bind(to: tableView.rx.items(dataSource: dataSource)) .disposed(by: rx.disposeBag) tableView.rx.itemSelected .filter { $0.section == 3 } .subscribe(onNext: { [weak self] _ in guard let `self` = self else { return } let repeatVM = RepeatViewModels(cycle: self.sedentaryModel.Cycle) repeatVM.updateCycle .subscribe(onNext: { (cycleStr) in guard let viewModel = self.viewModel as? SedentaryViewModels else { return } self.sedentaryModel.Cycle = cycleStr viewModel.loadData(model: self.sedentaryModel) }) .disposed(by: repeatVM.rx.disposeBag) self.navigator.show(segue: .repeatSet(viewModel: repeatVM), sender: self) }) .disposed(by: rx.disposeBag) } @objc func clickSave() { let startHour = (sedentaryModel.StartHour as NSString).integerValue let endHour = (sedentaryModel.EndHour as NSString).integerValue if startHour >= endHour { SVProgressHUD.showError(withStatus: MultiLanguageKey_FB.timeTipFB.localized) return } SVProgressHUD.show() if BluetoothService.shared.checkBleCmdEnable(isShow: true) { BluetoothService.shared.setSedentaryWithBleCmdType(model: sedentaryModel) } } func monitor() { /// 指令成功失败监听 Observable.of(kNotificationCenter.rx.notification(Notification.Name(rawValue: CmdSuccess)), kNotificationCenter.rx.notification(Notification.Name(rawValue: CmdTimeout))) .merge() .subscribe(onNext: { [weak self] notification in guard let `self` = self, let cmd = notification.object as? BleCMD_FireBoltt else { return } let isSuccess = notification.name.rawValue == CmdSuccess switch cmd { case .setSedentary: if isSuccess { GlobalDeviceProfileModel.shareInstance.sedentaryModel = self.sedentaryModel SVProgressHUD.showSuccess(withStatus: MultiLanguageKey_FB.setSuccessFB.localized) self.navigationController?.popViewController(animated: true) return } SVProgressHUD.showSuccess(withStatus: MultiLanguageKey_FB.setFailFB.localized) default: break } }) .disposed(by: rx.disposeBag) } } extension SedentaryViewControllers: UITableViewDelegate { func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { switch indexPath.section { case 0: return kScaleHeight(50) case 1: return kScaleHeight(178) case 2: return kScaleHeight(184) default: return kScaleHeight(50) } } }