Nav apraksta

MineOrderViewModel.swift 2.6KB

    // // 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<Bool>() private var _isEmpty = BehaviorRelay<Bool>(value: false) private var _hasMoreData = PublishSubject<Bool>() private var _showMessage = PublishSubject<String>() private let items = BehaviorRelay<[OrderItem]>(value: []) public weak var delegate: MineOrderViewModelDelegate? public var isEmpty: Observable<Bool> { return _isEmpty.asObservable() } public var hasMoreData: Observable<Bool> { return _hasMoreData.asObservable() } public var isLoading: Observable<Bool> { return _isLoading.asObserver() } public init() { self.repository = OrderRepository() } public var contents: Observable<[AnimatableSectionModel<Int, OrderItem>]> { return items.map({ model in return [AnimatableSectionModel(model: 0, items: model)] }) } public func reload() { page = 1 repository.load(page: page) .asDriver(onErrorJustReturn: NetworkArrayData<OrderItem>.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<OrderItem>.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) } }