|
//
// 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<Void>()
private let items = BehaviorRelay<[PhotoItem]>(value: [])
public var photographBtnTapped = PublishSubject<Void>()
public var isLoading: Observable<Void> {
return _isLoading.asObservable()
}
public var contents: Observable<[AnimatableSectionModel<Int, PhotoItem>]> {
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()
}
}
|