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