|
//
// 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)
}
}
|