暫無描述

PhotoDetailViewModel.swift 3.8KB

    // // PhotoDetailViewModel.swift // PaiAi // // Created by zhengjianfei on 2017/1/4. // Copyright © 2017年 FFIB. All rights reserved. // import Foundation import RxSwift import RxCocoa import RxDataSources public protocol PhotoDetailViewModelDelegate: class { func navigateToGroup(_ item: GroupItem) } public final class PhotoDetailViewModel { public var thumbupItems: Observable<[PhotoThumbupUserItem]> { return _thumbupItems.asObservable() } public var commentItems: Observable<[AnimatableSectionModel<Int, PhotoCommentItem>]> { return _commentItems.map ({ model in return [AnimatableSectionModel(model: 0, items: model)] }) } public var groupName: Observable<String> { return item.map({ v in return v.group_name }) } public var groupAvatar: Observable<Int> { return item.map({ v in return v.group_default_avatar }) } public var userName: Observable<String> { return item.map({ v in return v.nickname }) } public var userAvatar: Observable<String> { return item.map({ v in return v.avatar }) } public var photoTime: Observable<String> { return item.map({ v in return v.create_at_time_interval }) } public var thumbupCount: Observable<String> { return _thumbupItems.map({ v in return "(\(v.count))" }) } public var commentCount: Observable<String> { return _commentItems.map({ v in return "(\(v.count))" }) } public var canBuy: Observable<Bool> { return item.map({ v in return v.display_payment_btn > 0 }) } public var isHiddenEnterGroupBtn = BehaviorRelay<Bool>(value: false) public var viewWillAppear = BehaviorRelay<Void>(value: ()) public weak var delegate: PhotoDetailViewModelDelegate? private var item: BehaviorRelay<PhotoItem> private var _thumbupItems = BehaviorRelay<[PhotoThumbupUserItem]>(value: []) private var _commentItems = BehaviorRelay<[PhotoCommentItem]>(value: []) var repository: PhotoDetailRepository var disposeBag = DisposeBag() public init(item: PhotoItem) { self.item = BehaviorRelay<PhotoItem>(value: item) repository = PhotoDetailRepository(photoId: item.photo_id, groupId: item.group_id) self.item.subscribe(onNext: {[unowned self] (photoItem) in self.repository = PhotoDetailRepository(photoId: photoItem.photo_id, groupId: photoItem.group_id) self.loadCommentItems() self.loadThumbupUserItems() }).disposed(by: disposeBag) } private func loadThumbupUserItems() { repository.loadThumbups().subscribe(onSuccess: { (items) in self._thumbupItems.accept(items) }).disposed(by: disposeBag) } private func loadCommentItems() { repository.loadComments().subscribe(onSuccess: { (items) in self._commentItems.accept(items) }).disposed(by: disposeBag) } public final func submitThumbup() { repository.submitThumbup().subscribe(onSuccess: { items in self._thumbupItems.accept(items) }).disposed(by: disposeBag) } public final func submitComment(text: String) { repository.submitComment(text: text).subscribe(onSuccess: { (items) in self._commentItems.accept(items) }).disposed(by: disposeBag) } public func navigateToGroup() { delegate?.navigateToGroup(GroupItem(json: item.value.toJSON() as [String : AnyObject])) } } extension PhotoDetailViewModel: PhotoDetailListViewModelSynchronization { public func willShow(_ item: PhotoItem) { self.item.accept(item) } }