// // MineOrderViewModel.swift // PaiAi // // Created by LISA on 2017/5/8. // Copyright © 2017年 yb. All rights reserved. // import UIKit import RxSwift import RxCocoa import RxDataSources public protocol MineOrderViewModelDelegate: class { func didSelect(_ item: OrderItem) } public class MineOrderViewModel { private var repository: OrderRepository private var disposeBag = DisposeBag() private var page = 1 private var _isLoading = PublishSubject() private var _isEmpty = BehaviorRelay(value: false) private var _hasMoreData = PublishSubject() private var _showMessage = PublishSubject() private let items = BehaviorRelay<[OrderItem]>(value: []) public weak var delegate: MineOrderViewModelDelegate? public var isEmpty: Observable { return _isEmpty.asObservable() } public var hasMoreData: Observable { return _hasMoreData.asObservable() } public var isLoading: Observable { return _isLoading.asObserver() } public init() { self.repository = OrderRepository() } public var contents: Observable<[AnimatableSectionModel]> { return items.map({ model in return [AnimatableSectionModel(model: 0, items: model)] }) } public func reload() { page = 1 repository.load(page: page) .asDriver(onErrorJustReturn: NetworkArrayData.empty()) .drive(onNext: {[weak self] (model) in guard let `self` = self else { return } self._hasMoreData.onNext(model.hasMore) self._isEmpty.accept(!model.data.isEmpty) self.items.accept(model.data) }, onDisposed: {[weak self] in guard let `self` = self else { return } self._isLoading.onNext(true) }).disposed(by: disposeBag) } public func preload() { page += 1 repository.load(page: page) .asDriver(onErrorJustReturn: NetworkArrayData.empty()) .drive(onNext: {[weak self] (model) in guard let `self` = self else { return } self._hasMoreData.onNext(model.hasMore) self.items.accept(self.items.value + model.data) }, onDisposed: {[weak self] in guard let `self` = self else { return } self._isLoading.onNext(false) }).disposed(by: disposeBag) } public func didSelect(_ item: OrderItem) { delegate?.didSelect(item) } }