jsdw_ios/QuickLocation/Section/Mine/MineViewController.swift

129 lines
3.6 KiB
Swift

//
// MineViewController.swift
// QuickLocation
//
// Created based on Lanhu design:
//
import UIKit
import RxSwift
import RxCocoa
import RxDataSources
final class MineViewController: BaseViewController {
override var isNavigationBarHidden: Bool { true }
override var preferredStatusBarStyle: UIStatusBarStyle { .default }
// MARK: - Properties
fileprivate var rootView: MineView!
private var tableView: UITableView {
rootView.settingsTableView
}
private let viewModel = MineViewModel()
// MARK: - Lifecycle
override func loadView() {
rootView = MineView(frame: UIScreen.main.bounds)
view = rootView
}
override func viewDidLoad() {
super.viewDidLoad()
bindViewModel()
reactiveAction()
viewModel.loadMenuData()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
rootView.avatarImageView.dl.setImage(with: AppContextManager.shared.avater)
rootView.nameLabel.text = AppContextManager.shared.name
rootView.idLabel.text = "ID:" + AppContextManager.shared.userId
}
// MARK: - Bindings
private func bindViewModel() {
viewModel.output.sectionedItems
.bind(to: tableView.rx.items(dataSource: dataSource))
.disposed(by: disposeBag)
tableView.rx.modelSelected(MineMenuItem.self)
.subscribe(viewModel.cellAction.inputs)
.disposed(by: disposeBag)
viewModel.userName
.bind(to: rootView.nameLabel.rx.text)
.disposed(by: disposeBag)
viewModel.userID
.bind(to: rootView.idLabel.rx.text)
.disposed(by: disposeBag)
}
private func reactiveAction() {
rootView.vipActivateButton.rx.tap
.subscribe(onNext: { [weak self] in
// TODO: Navigate to VIP activation
})
.disposed(by: disposeBag)
rootView.editButton.rx.tap
.subscribe(onNext: { [weak self] in
// TODO: Navigate to edit profile
})
.disposed(by: disposeBag)
rootView.copyButton.rx.tap
.subscribe(onNext: { [weak self] in
guard let id = self?.rootView.idLabel.text else { return }
UIPasteboard.general.string = id.replacingOccurrences(of: "ID:", with: "")
DLToast.showSuccess(text: "已复制")
})
.disposed(by: disposeBag)
rootView.onMenuTap = { [weak self] index in
self?.handleMenuTap(at: index)
}
}
// MARK: - UITableViewDataSource
lazy private var dataSource: RxTableViewSectionedReloadDataSource<MineListSectionModel> = {
return RxTableViewSectionedReloadDataSource<MineListSectionModel>(
configureCell: { (_, tableView, indexPath, model) in
let cell: MineMenuCell = tableView.dequeueReusableCell(for: indexPath)
cell.configure(model)
return cell
})
}()
private func handleMenuTap(at index: Int) {
switch index {
case 0:
// TODO: Account & security
break
case 1:
// TODO: Status setting
break
case 2:
// TODO: Emergency contact
break
case 3:
// TODO: Customer service
break
case 4:
// TODO: Privacy & agreement
break
case 5:
// TODO: Permission check
break
default:
break
}
}
}