package com.fernandocejas.android10.sample.presentation.viewmodel;
import android.databinding.ObservableBoolean;
import android.databinding.ObservableField;
import android.view.View;
import com.fernandocejas.android10.sample.data.dto.User;
import com.fernandocejas.android10.sample.domain.interactor.DefaultSubscriber;
import com.fernandocejas.android10.sample.domain.interactor.GetUserDetails;
import com.fernandocejas.android10.sample.presentation.AndroidApplication;
import com.fernandocejas.android10.sample.presentation.mapper.UserModelDataMapper;
import com.fernandocejas.android10.sample.presentation.model.UserModel;
/**
* Created by rocko on 15-11-5.
*/
public class UserDetailsViewModel extends LoadingViewModel {
public final ObservableBoolean showUserDetails = new ObservableBoolean(true);
public final ObservableField<UserModel> userObs = new ObservableField<>();
GetUserDetails getUserDetailsUseCase = new GetUserDetails(AndroidApplication.getContext());
UserModelDataMapper userModelDataMapper = new UserModelDataMapper();
@BindView
@Override
public void showLoading() {
// super.showLoading(); // show Details
showRetry.set(false);
showLoading.set(true);
showUserDetails.set(true);
}
@BindView
@Override
public void showRetry() {
super.showRetry();
showUserDetails.set(false);
}
@BindView
public void showUserDetails(UserModel userModel) {
showLoading.set(false);
showRetry.set(false);
showUserDetails.set(true);
userObs.set(userModel);
}
@Command
public void loadUserDetailsCommand(int userId) {
showLoading();
getUserDetailsUseCase.setUserId(userId);
getUserDetailsUseCase.execute(new DefaultSubscriber<User>(){
@Override
public void onNext(User user) {
showUserDetails(userModelDataMapper.transformUser(user));
}
@Override
public void onError(Throwable e) {
showRetry();
}
});
}
@Override
public View.OnClickListener onRetryClick() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
loadUserDetailsCommand(userObs.get().getUserId());
}
};
}
}