// // GroupDetailViewController.swift // Paiai_iOS // // Created by FFIB on 16/4/5. // Copyright © 2016年 FFIB. All rights reserved. // import UIKit import RxSwift import RxCocoa import PaiaiUIKit import PaiaiDataKit final class GroupDetailViewController: UIViewController { @IBOutlet weak var groupNameLabel: UILabel! // MARK: Storyboard property @IBOutlet weak var groupMemberCountLabel: UILabel! @IBOutlet weak var groupMemeberView: GroupDetailMemeberView! @IBOutlet weak var groupLockSwitch: UISwitch! @IBOutlet weak var groupLockTip: UILabel! var viewModel: GroupDetailViewModel! let disposeBag = DisposeBag() override func viewDidLoad() { super.viewDidLoad() binding() viewModel.reload() navigationItem.title = "群资料" setRightBarButtonItems() } func setRightBarButtonItems() { let item = UIBarButtonItem(image: UIImage(named: "navigation-right"), target: self, action: #selector(quit)) navigationItem.setRightItem(item) } @objc func quit() { let alert = AlertController(title: "退出群", message: "退出后将不再能看到群内照片") alert.addAlertAction(AlertAction(title: "取消", style: .cancel)) alert.addAlertAction(AlertAction(title: "确定", handler: { _ in self.viewModel.quit() })) presentController(alert) } } /// binding UI fileprivate extension GroupDetailViewController { func binding() { bindViewModelToGroupName() bindViewModelToGroupMemberCount() bindViewModelToGroupMemeber() bindViewModelToGroupLock() bindViewModelToGroupLockSwitch() bindGroupLockSwitchToGroupLockTip() } func bindViewModelToGroupName() { viewModel.group_name.bind(to: groupNameLabel.rx.text).disposed(by: disposeBag) } func bindViewModelToGroupMemberCount() { viewModel.groupMemberCount.bind(to: groupMemberCountLabel.rx.text).disposed(by: disposeBag) } func bindViewModelToGroupMemeber() { viewModel.groupMembers.subscribe(onNext: { self.setupGroupMember(groupMemebers: $0) }).disposed(by: disposeBag) } func bindViewModelToGroupLock() { viewModel.group_lock.bind(to: groupLockSwitch.rx.value).disposed(by: disposeBag) } func bindViewModelToGroupLockSwitch() { viewModel.isAdmin.map { !$0 }.bind(to: groupLockSwitch.rx.isHidden).disposed(by: disposeBag) } func bindGroupLockSwitchToGroupLockTip() { groupLockSwitch.rx.value.subscribe(onNext: {[weak self] (val) in guard let `self` = self else { return } self.groupLockTip.text = val ? "群已锁定,不再允许新成员加入" : "群未锁定,可以邀请新成员加入" }).disposed(by: disposeBag) } private func setupGroupMember(groupMemebers: [GroupMemberItem]) { groupMemeberView.avatars = groupMemebers.compactMap { $0.avatar } } } /// storyboard action extension GroupDetailViewController { @IBAction func navigateToGroupMember(_ sender: UITapGestureRecognizer) { viewModel.navigateToGroupMember() } @IBAction func navigateToGroupNameModification(_ sender: UITapGestureRecognizer) { viewModel.navigateToGroupNameModification() } @IBAction func presentGroupQR(_ sender: UITapGestureRecognizer) { let groupItem = viewModel.item.value.group let qrView = GroupQRView(group_name: groupItem.group_name, group_avatar: "Group\(groupItem.group_default_avatar)", groupQR: "https:pai.ai/g/\(groupItem.group_id)") let alert = AlertViewController(style: .custom(qrView, AlertAnimator())) presentController(alert) } @IBAction func changeSwitch() { viewModel.toggle(isLock: groupLockSwitch.isOn) } } extension GroupDetailViewController: NavigationBackViewController {} extension GroupDetailViewController: Storyboarded { static func instantiate() -> GroupDetailViewController { return UIStoryboard.groupDetail.instantiateViewController(type: GroupDetailViewController.self) } }