Nav apraksta

GroupDetailViewModel.swift 3.5KB

    // // GroupDetailViewModel.swift // PaiAi // // Created by zhengjianfei on 2017/1/3. // Copyright © 2017年 FFIB. All rights reserved. // import Foundation import RxSwift import RxCocoa public protocol GroupDetailViewModelDelegate: class { func navigateToGroupMember(_ item: GroupDetailItem) func navigateToGroupNameModification(_ item: GroupDetailItem) func navigateToRootViewController() } public class GroupDetailViewModel { private let repository: GroupDetailRepository private var disposeBag = DisposeBag() public weak var delegate: GroupDetailViewModelDelegate? public let item: BehaviorRelay<GroupDetailItem> public var groupName: Observable<String> { return item.asObservable().flatMapLatest({ (item) -> Observable<String> in return Observable.just(item.group.group_name) }) } public var groupMembers: Observable<[GroupMemberItem]> { return item.asObservable().flatMapLatest({ (item) -> Observable<[GroupMemberItem]> in return Observable.just(item.users) }) } public var groupMemberCount: Observable<String> { return item.asObservable().flatMapLatest({ (item) -> Observable<String> in return Observable.just("\(item.users.count)") }) } public var isAdmin: Observable<Bool> { return item.asObservable().flatMapLatest({ (item) -> Observable<Bool> in return Observable.just(item.group.admin_id == ShareUserId) }) } public var groupLock: Observable<Bool> { return item.asObservable().flatMapLatest({ (item) -> Observable<Bool> in return Observable.just(item.group.group_lock) }) } public init(item: GroupItem) { self.repository = PhotoGroupDetailRepository(groupId: item.group_id) var groupDetailItem = GroupDetailItem(json: [:]) groupDetailItem.group = item self.item = BehaviorRelay<GroupDetailItem>(value: groupDetailItem) } public func toggle(isLock: Bool) { if isLock { repository.lock().subscribe(onCompleted: { var v = self.item.value v.group.group_lock = true self.item.accept(v) Toast.show(message: "群已锁定") }).disposed(by: disposeBag) } else { repository.unlock().subscribe(onCompleted: { var v = self.item.value v.group.group_lock = false Toast.show(message: "群未锁定") }).disposed(by: disposeBag) } } public func reload() { repository.load().subscribe(onSuccess: {[unowned self] (v) in self.item.accept(v) }, onError: nil).disposed(by: disposeBag) } public func quit() { guard item.value.group.admin_id != ShareUserId else { Toast.show(message: "群主不能退出群") return } Toast.showActivity(message: "正在退出群") repository.quit() .subscribe(onCompleted: {[unowned self] in Toast.show(message: "退出群成功") self.delegate?.navigateToRootViewController() }).disposed(by: disposeBag) } } public extension GroupDetailViewModel { func navigateToGroupMember() { delegate?.navigateToGroupMember(item.value) } func navigateToGroupNameModification() { delegate?.navigateToGroupNameModification(item.value) } }