// // GroupViewModel.swift // PaiAi // // Created by zhengjianfei on 2017/1/4. // Copyright © 2017年 FFIB. All rights reserved. // import Foundation import UIKit import RxSwift import RxCocoa import RxDataSources public protocol GroupViewModelDelegate: class { func didSelect(_ item: PhotoItem) func navigateToGroupDetail() func presentGroupQR() } public class GroupViewModel { private let disposeBag = DisposeBag() private var respository: GroupPhotoRepository private var _isLoading = PublishSubject() private let items = BehaviorRelay<[PhotoItem]>(value: []) public var photographBtnTapped = PublishSubject() public var isLoading: Observable { return _isLoading.asObservable() } public var contents: Observable<[AnimatableSectionModel]> { return items.map({ model in return [AnimatableSectionModel(model: 0, items: model)] }) } public weak var delegate: GroupViewModelDelegate? public init(groupItem: GroupItem) { self.respository = GroupPhotoRepository(groupId: groupItem.group_id) photographBtnTapped.subscribe({ [weak self] (_) in guard let `self` = self else { return } // self.delegate?.scanQR() }).disposed(by: disposeBag) } public func reload() { respository.load() .subscribe(onSuccess: {[weak self] (result) in guard let `self` = self else { return } self._isLoading.onNext(()) self.items.accept(result) }, onError: {[weak self] (_) in guard let `self` = self else { return } self._isLoading.onNext(()) }).disposed(by: disposeBag) } public func submit(image: UIImage) { let edge = image.size.width > image.size.height ? image.size.height : image.size.width // let newImage = image.scaledImage(1280 / edge), guard let data = image.jpegData(compressionQuality: 0.4) else { return } respository.upload(data: data) } public func layoutSizeForIndexPath(_ indexPath: IndexPath) -> CGSize { let item = items.value[indexPath.row] let w = item.photo_thumbnail_w let h = item.photo_thumbnail_h // header 42, footer: 32 return CGSize(width: w, height: h + 74) } } /// GroupViewModelDelegate public extension GroupViewModel { func didSelect(_ item: PhotoItem) { delegate?.didSelect(item) } @objc func navigateToGroupDetail() { delegate?.navigateToGroupDetail() } @objc func presentGroupQR() { delegate?.presentGroupQR() } }