|
//
// PhotoDetailViewModel.swift
// PaiaiDataKit
//
// Created by FFIB on 2017/1/4.
// Copyright © 2017年 FFIB. All rights reserved.
//
import Foundation
import RxSwift
import RxCocoa
import RxDataSources
public final class PhotoDetailItemViewModel {
var item: BehaviorRelay<PhotoItem>
var thumbupItems = BehaviorRelay<[PhotoThumbupUserItem]>(value: [])
var commentItems = BehaviorRelay<[PhotoCommentItem]>(value: [])
private var repository: PhotoDetailRepository
private var disposeBag = DisposeBag()
public init(item: PhotoItem) {
self.item = BehaviorRelay<PhotoItem>(value: item)
self.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().concat(self.loadThumbupUserItems()).subscribe(onCompleted: {
var v = self.item.value
v.comment_num = self.commentItems.value.count
v.thumbup_num = self.thumbupItems.value.count
self.item.accept(v)
NotificationCenter.default.post(name: .PhotoItemsChanged, object: nil, userInfo: [PhotoItemsOperator.key: PhotoItemsOperator.update(v.photo_id, v)])
}).disposed(by: self.disposeBag)
}).disposed(by: disposeBag)
}
private func loadThumbupUserItems() -> Completable {
return repository.loadThumbups().do(onSuccess: { (items) in
self.thumbupItems.accept(items)
}).asCompletable()
}
private func loadCommentItems() -> Completable {
return repository.loadComments().do(onSuccess: { (items) in
self.commentItems.accept(items)
}).asCompletable()
}
public func submitThumbup() {
repository.submitThumbup().subscribe(onSuccess: { items in
self.thumbupItems.accept(items)
}).disposed(by: disposeBag)
}
public func submitComment(text: String) {
repository.submitComment(text: text).subscribe(onSuccess: { (items) in
self.commentItems.accept(items)
}).disposed(by: disposeBag)
}
}
|