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.
 
 
 

175 lines
7.1 KiB

//
// HealthHomeViewControllers.swift
// FireBoltt
//
// Created by Sheldon on 2021/9/19.
// Copyright © 2021 Sheldon. All rights reserved.
//
import UIKit
fileprivate enum Resuable {
static let stepCell = ReusableCell<HealthStepItemCell>()
static let helathCell = ReusableCell<HelathItemCell>()
static let blankCell = ReusableCell<CollectionViewCell>()
}
// MARK: -
private struct Metric {
static let stepItemSize = CGSize(width: kScreenW, height: kScaleWidth(215))
static let healthItemSize = CGSize(width: kScreenW / 2.0 - 13, height: kScaleWidth(224))
static let blankItemSize = CGSize(width: 13, height: kScaleWidth(224))
}
class HealthHomeViewControllers: CollectionController {
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()
// view.backgroundColor = kRGBA(233, 247, 255, 0.5)
//
guard let _ = UserDefaultsManagerFrieBoltt.getUserInfo() else {
//
navigator.show(segue: .guideUserInfo, sender: self, transition: .modal)
return
}
}
override func makeUI() {
super.makeUI()
//
let flowLayout = UICollectionViewFlowLayout()
flowLayout.itemSize = Metric.stepItemSize
flowLayout.minimumInteritemSpacing = 0
flowLayout.minimumLineSpacing = 0
collectionViewFlowLayout = flowLayout
//
collectionView.backgroundColor = kRGBA(233, 247, 255, 0.5)
collectionView.register(Resuable.stepCell)
collectionView.register(Resuable.helathCell)
collectionView.register(Resuable.blankCell)
collectionView.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)
}
collectionView.snp.makeConstraints { (make) in
make.top.equalTo(navigationBar.snp.bottom)
make.left.right.bottom.equalToSuperview()
}
}
override func bindViewModel() {
guard let viewModel = viewModel as? HealthHomeViewModels else { return }
let rxDataSource = RxCollectionViewSectionedReloadDataSource
<HealthSection>(
configureCell: { (_ , cv, indexPath, model) -> UICollectionViewCell in
switch model {
case .stepItem(let viewModel):
let cell = cv.dequeue(Resuable.stepCell, for: indexPath)
cell.bind(model: viewModel)
return cell
case .healthItem(let viewModel):
let cell = cv.dequeue(Resuable.helathCell, for: indexPath)
cell.bind(model: viewModel)
return cell
case .blankItem:
let cell = cv.dequeue(Resuable.blankCell, for: indexPath)
return cell
default: return UICollectionViewCell()
}
}
)
viewModel.userIcon
.bind(to: navigationBar.fb_headImg.rx.image)
.disposed(by: rx.disposeBag)
viewModel.userNickname
.bind(to: navigationBar.fb_nicknameLabel.rx.text)
.disposed(by: rx.disposeBag)
BluetoothService.shared.deviceConnectState
.bind(to: navigationBar.fb_statusBtn.rx.isSelected)
.disposed(by: rx.disposeBag)
BluetoothService.shared.powerState
.bind(to: navigationBar.fb_powerBtn.rx.image())
.disposed(by: rx.disposeBag)
viewModel.relay
.bind(to: collectionView.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: FirmwareUpdateViewControllers.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)
collectionView.rx.modelSelected(HealthSectionItem.self)
.subscribe(onNext: { [weak self] (item) in
guard let `self` = self else { return }
switch item {
case .stepItem(_):
let viewModel = StepViewModels()
self.navigator.show(segue: .step(viewModel: viewModel), sender: self)
case .healthItem(let viewModel):
switch viewModel.type {
case .sleep:
self.navigator.show(segue: .sleep(viewModel: SleepViewModels()), sender: self)
case .heartRate:
self.navigator.show(segue: .heartRate(viewModel: HRViewModels()), sender: self)
case .temperature:
self.navigator.show(segue: .temperature(viewModel: TemperatureViewModels()), sender: self)
case .bloodPressure:
self.navigator.show(segue: .bloodPressure(viewModel: BloodPressureViewModels()), sender: self)
case .bloodOxygen:
self.navigator.show(segue: .bloodOxygen(viewModel: BloodOxygenViewModels()), sender: self)
default: break
}
default: break
}
})
.disposed(by: rx.disposeBag)
}
}
extension HealthHomeViewControllers: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
guard let viewModel = viewModel as? HealthHomeViewModels else { return Metric.healthItemSize }
let item = viewModel.relay.value[indexPath.section].items[indexPath.row]
switch item {
case .stepItem(_): return Metric.stepItemSize
case .healthItem(_): return Metric.healthItemSize
case .blankItem: return Metric.blankItemSize
default: return Metric.healthItemSize
}
}
}