|
//
// 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)
}
}
|