You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

153 lines
5.8 KiB

2 years ago
//
// HealthViewController.swift
// Lookfit
//
// Created by lemo. on 2020/3/7.
// Copyright © 2020 Sheldon. All rights reserved.
//
import UIKit
fileprivate enum Resuable {
static let stepCell = ReusableCell<HealthStepCell>()
static let sleeoHeartRateCell = ReusableCell<HealthSleeoHeartRateCell>()
static let temperatureCell = ReusableCell<TemperatureCell>()
}
class HealthViewController: TableViewController {
lazy var navigationBar: HealthNavigationBar = {
let navbar = HealthNavigationBar()
navbar.gradient(colors: [kHexColor(0xFFF0DE), kHexColor(0xFFFFFF)], locations: nil, autoLaoutFrame: CGRect(x: 0, y: 0, width: kScreenW, height: kScaleWidth(90)))
return navbar
}()
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
}
override func viewDidLoad() {
super.viewDidLoad()
//
guard let _ = UserDefaultsManager.getUserInfo() else {
//
navigator.show(segue: .guideUserInfo, sender: self, transition: .modal)
return
}
}
override func makeUI() {
super.makeUI()
tableView.tableHeaderView = UIView()
tableView.register(Resuable.stepCell)
tableView.register(Resuable.sleeoHeartRateCell)
tableView.register(Resuable.temperatureCell)
tableView.rx.setDelegate(self).disposed(by: rx.disposeBag)
view.addSubview(navigationBar)
layout()
}
func layout() {
navigationBar.snp.makeConstraints { (make) in
make.top.equalToSuperview()
make.width.equalTo(kScreenW)
make.height.equalTo(kBatteryH + 70)
}
tableView.snp.makeConstraints { (make) in
make.top.equalTo(navigationBar.snp.bottom)
make.left.right.bottom.equalToSuperview()
}
}
override func bindViewModel() {
guard let viewModel = viewModel as? HealthViewModel else { return }
let rxDataSource = RxTableViewSectionedReloadDataSource<HealthSection>(configureCell: { [weak self] (_ , tv, indexPath, model) -> UITableViewCell in
switch model {
case .stepItem(let viewModel):
let cell = tv.dequeue(Resuable.stepCell, for: indexPath)
cell.bind(model: viewModel)
return cell
case .sleepHeartItem(let viewModel):
let cell = tv.dequeue(Resuable.sleeoHeartRateCell, for: indexPath)
cell.bind(model: viewModel)
cell.sleepBlockView.bgImgBtn.rx.tap
.subscribe(onNext: { _ in
self?.navigator.show(segue: .sleep(viewModel: SleepViewModel()), sender: self)
})
.disposed(by: cell.cellDisposeBag)
cell.hearRateBlockView.bgImgBtn.rx.tap
.subscribe(onNext: { _ in
self?.navigator.show(segue: .heartRate(viewModel: HRViewModel()), sender: self)
})
.disposed(by: cell.cellDisposeBag)
return cell
case .temperatureIitem(let viewModel):
let cell = tv.dequeue(Resuable.temperatureCell, for: indexPath)
cell.bind(model: viewModel)
cell.temperatureBlockView.bgImgBtn.rx.tap
.subscribe(onNext: { _ in
self?.navigator.show(segue: .temperature(viewModel: TemperatureViewModel()), sender: self)
})
.disposed(by: cell.cellDisposeBag)
return cell
default: return UITableViewCell()
}
})
viewModel.userIcon
.bind(to: navigationBar.headImg.rx.image)
.disposed(by: rx.disposeBag)
viewModel.userNickname
.bind(to: navigationBar.nicknameLabel.rx.text)
.disposed(by: rx.disposeBag)
BluetoothService.shared.deviceConnectState
.bind(to: navigationBar.statusBtn.rx.isSelected)
.disposed(by: rx.disposeBag)
BluetoothService.shared.powerState
.bind(to: navigationBar.powerBtn.rx.image())
.disposed(by: rx.disposeBag)
viewModel.relay
.bind(to: tableView.rx.items(dataSource: rxDataSource))
.disposed(by: rx.disposeBag)
// DFU
viewModel.dfuDeviceUpgrate
.subscribe(onNext: { [weak self] viewModel in
guard let `self` = self else { return }
if let currenVC = currentViewController(), currenVC.isKind(of: FirmwareUpdateViewController.self) {
return
}
currentTabbarController()?.selectedIndex = 0
self.navigator.show(segue: .firmwareUpdate(viewModel: viewModel), sender: self)
})
.disposed(by: rx.disposeBag)
}
override func handleEvent() {
navigationBar.rx.tap
.subscribe(onNext: { [weak self] _ in
let viewModel = UserInfoViewModel()
self?.navigator.show(segue: .userInfo(viewModel: viewModel), sender: self)
})
.disposed(by: rx.disposeBag)
tableView.rx.itemSelected
.subscribe(onNext: { [weak self] (indexPath) in
if indexPath.row == 0 {
let viewModel = StepViewModel()
self?.navigator.show(segue: .step(viewModel: viewModel), sender: self)
}
})
.disposed(by: rx.disposeBag)
}
}
extension HealthViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == 0 {
return kScaleWidth(215)
}
return kScaleWidth(224)
}
}