blob: 26849157cabd074089bee00e85a98d15738c9f2a [file] [log] [blame]
package org.apache.fineract.ui.product
import android.content.Context
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.functions.Predicate
import io.reactivex.observers.DisposableObserver
import io.reactivex.schedulers.Schedulers
import org.apache.fineract.R
import org.apache.fineract.data.datamanager.api.DataManagerProduct
import org.apache.fineract.data.models.product.Product
import org.apache.fineract.data.models.product.ProductPage
import org.apache.fineract.injection.ApplicationContext
import org.apache.fineract.ui.base.BasePresenter
import javax.inject.Inject
class ProductPresenter @Inject constructor(@ApplicationContext context: Context,
val dataManagerProduct: DataManagerProduct)
: BasePresenter<ProductContract.View>(context), ProductContract.Presenter {
val compositeDisposable = CompositeDisposable()
override fun getProductsPage() {
checkViewAttached()
mvpView.showProgressbar()
compositeDisposable.add(dataManagerProduct.fetchProductPage()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(object : DisposableObserver<ProductPage>() {
override fun onComplete() {
}
override fun onNext(productPage: ProductPage) {
mvpView.hideProgressbar()
if (productPage.elements != null) {
if (productPage.elements.isEmpty()) {
mvpView.showEmptyProduct()
} else {
mvpView.showProduct(productPage.elements)
}
}
}
override fun onError(e: Throwable) {
mvpView.hideProgressbar()
showExceptionError(e, context.getString(R.string.error_fetching_products))
}
})
)
}
override fun searchProduct(products: List<Product>, query: String) {
checkViewAttached()
mvpView.searchedProduct(Observable.fromIterable(products)
.filter(object : Predicate<Product> {
override fun test(product: Product): Boolean {
return product.identifier?.toLowerCase()?.contains(query.toLowerCase())
.toString().toBoolean()
}
}).toList().blockingGet())
}
}